chrome-devtools-frontend 1.0.1668390 → 1.0.1672388
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/.agents/skills/devtools-ci/SKILL.md +65 -0
- package/.agents/skills/fixing-skipped-tests/SKILL.md +6 -6
- package/.agents/skills/gerrit-cli/SKILL.md +53 -0
- package/.agents/skills/gerrit-cli/references/commands.md +136 -0
- package/.agents/skills/gerrit-cli/references/workflows.md +63 -0
- package/.agents/skills/gerrit-cli/scripts/import_upstream.py +112 -0
- package/config/typescript/tsconfig.eslint.json +1 -1
- package/docs/contributing/infrastructure.md +7 -1
- package/docs/contributing/settings-experiments-features.md +2 -8
- package/docs/ecosystem/automatic_workspace_folders.md +0 -19
- package/eslint.config.mjs +2 -2
- package/front_end/core/common/Lazy.ts +3 -3
- package/front_end/core/common/SettingRegistration.ts +0 -7
- package/front_end/core/common/Settings.ts +0 -38
- package/front_end/core/host/AidaClient.ts +66 -47
- package/front_end/core/host/GcaClient.ts +4 -6
- package/front_end/core/host/ResourceLoader.ts +4 -2
- package/front_end/core/host/UserMetrics.ts +187 -953
- package/front_end/core/host/UserMetricsEnums.d.ts +949 -0
- package/front_end/core/root/Runtime.ts +21 -138
- package/front_end/core/sdk/CSSMetadata.ts +70 -65
- package/front_end/core/sdk/CategorizedBreakpoint.ts +0 -1
- package/front_end/core/sdk/ChildTargetManager.ts +0 -2
- package/front_end/core/sdk/ConsoleModel.ts +3 -2
- package/front_end/core/sdk/DebuggerModel.ts +14 -6
- package/front_end/core/sdk/EmulationModel.ts +0 -2
- package/front_end/core/sdk/EventBreakpointsModel.ts +0 -4
- package/front_end/core/sdk/NetworkManager.ts +0 -3
- package/front_end/core/sdk/PageResourceLoader.ts +9 -9
- package/front_end/core/sdk/RehydratingConnection.ts +52 -4
- package/front_end/core/sdk/SDKSettings.ts +19 -0
- package/front_end/core/sdk/Target.ts +0 -4
- package/front_end/core/sdk/sdk-meta.ts +0 -58
- package/front_end/devtools_compatibility.js +886 -0
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +7 -6
- package/front_end/entrypoints/main/ExecutionContextSelector.ts +0 -1
- package/front_end/entrypoints/main/MainImpl.ts +18 -22
- package/front_end/foundation/Universe.ts +7 -2
- package/front_end/generated/InspectorBackendCommands.ts +5 -12
- package/front_end/generated/protocol-mapping.d.ts +0 -42
- package/front_end/generated/protocol-proxy-api.d.ts +0 -38
- package/front_end/generated/protocol.ts +20 -172
- package/front_end/models/ai_assistance/AiAgent2.ts +11 -3
- package/front_end/models/ai_assistance/AiConversation.ts +1 -0
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +8 -5
- package/front_end/models/ai_assistance/AiSetting.ts +108 -0
- package/front_end/models/ai_assistance/AiUtils.ts +114 -4
- package/front_end/models/ai_assistance/ChangeManager.ts +1 -0
- package/front_end/models/ai_assistance/ExtensionScope.ts +3 -12
- package/front_end/models/ai_assistance/StorageItem.ts +26 -5
- package/front_end/models/ai_assistance/agents/AiAgent.ts +11 -18
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -0
- package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +42 -17
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +3 -2
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +253 -155
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +12 -6
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +3 -1
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -0
- package/front_end/models/ai_assistance/injected.ts +1 -0
- package/front_end/models/ai_assistance/performance/AICallTree.ts +1 -0
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +2 -0
- package/front_end/models/ai_assistance/skills/performance.md +10 -0
- package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +52 -5
- package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +4 -4
- package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +4 -4
- package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +5 -4
- package/front_end/models/ai_assistance/tools/GetStyles.ts +5 -4
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +5 -4
- package/front_end/models/ai_assistance/tools/README.md +1 -1
- package/front_end/models/ai_assistance/tools/RecordPerformanceTrace.ts +63 -0
- package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +5 -5
- package/front_end/models/ai_assistance/tools/Tool.ts +118 -24
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +2 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
- package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
- package/front_end/models/badges/UserBadges.ts +2 -0
- package/front_end/models/bindings/NetworkProject.ts +5 -0
- package/front_end/models/bindings/ResourceScriptMapping.ts +2 -0
- package/front_end/models/bindings/ResourceUtils.ts +3 -0
- package/front_end/models/crux-manager/CrUXManager.ts +1 -0
- package/front_end/models/emulation/DeviceModeModel.ts +140 -7
- package/front_end/models/emulation/EmulatedDevices.ts +246 -793
- package/front_end/models/issues_manager/IssuesManager.ts +10 -2
- package/front_end/models/live-metrics/LiveMetrics.ts +41 -9
- package/front_end/models/logs/LogManager.ts +8 -5
- package/front_end/models/logs/NetworkLog.ts +1 -0
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +21 -3
- package/front_end/models/persistence/NetworkPersistenceManager.ts +6 -0
- package/front_end/models/project_settings/ProjectSettingsModel.ts +8 -12
- package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
- package/front_end/models/trace/types/File.ts +1 -0
- package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +3 -1
- package/front_end/models/workspace/IgnoreListManager.ts +2 -0
- package/front_end/models/workspace/UISourceCode.ts +2 -10
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +4 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +83 -204
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -7
- package/front_end/panels/ai_assistance/components/ChatInput.ts +29 -8
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +83 -94
- package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +1 -2
- package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
- package/front_end/panels/ai_assistance/components/walkthroughView.css +1 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +11 -108
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +116 -79
- package/front_end/panels/application/ServiceWorkersView.ts +8 -8
- package/front_end/panels/application/application.ts +2 -10
- package/front_end/panels/application/components/AdsView.ts +10 -6
- package/front_end/panels/application/components/components.ts +0 -4
- package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
- package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +21 -23
- package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +0 -5
- package/front_end/panels/browser_debugger/EventListenerBreakpointsSidebarPane.ts +6 -12
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +5 -3
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
- package/front_end/panels/common/common.ts +1 -1
- package/front_end/panels/console/ConsoleFormat.ts +2 -62
- package/front_end/panels/console/ConsoleInsightTeaser.ts +3 -6
- package/front_end/panels/console/ConsoleView.ts +6 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +15 -8
- package/front_end/panels/console/console-meta.ts +28 -0
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
- package/front_end/panels/emulation/AdvancedApp.ts +1 -2
- package/front_end/panels/emulation/DeviceModeToolbar.ts +83 -69
- package/front_end/panels/emulation/DeviceModeView.ts +4 -134
- package/front_end/panels/emulation/DeviceModeWrapper.ts +70 -73
- package/front_end/panels/emulation/MediaQueryInspector.ts +2 -2
- package/front_end/panels/emulation/emulation-meta.ts +12 -12
- package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
- package/front_end/panels/explain/explain-meta.ts +7 -49
- package/front_end/panels/issues/IssuesPane.ts +3 -1
- package/front_end/panels/lighthouse/LighthouseController.ts +6 -0
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +17 -21
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +206 -126
- package/front_end/panels/linear_memory_inspector/components/linearMemoryInspector.css +1 -1
- package/front_end/panels/mobile_throttling/CalibrationController.ts +1 -1
- package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
- package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +6 -6
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +11 -11
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +13 -13
- package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +10 -10
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +28 -28
- package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
- package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +1 -0
- package/front_end/panels/network/RequestHeadersView.ts +1 -1
- package/front_end/panels/network/ResourceChunkView.ts +281 -156
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +52 -28
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +20 -34
- package/front_end/panels/network/resourceChunkView.css +41 -36
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +21 -12
- package/front_end/panels/profiler/profiler.ts +4 -0
- package/front_end/panels/recorder/RecorderPanel.ts +6 -14
- package/front_end/panels/screencast/ScreencastView.ts +401 -260
- package/front_end/panels/screencast/screencastView.css +113 -100
- package/front_end/panels/sensors/LocationsSettingsTab.ts +113 -129
- package/front_end/panels/sensors/locationsSettingsTab.css +4 -4
- package/front_end/panels/settings/AISettingsTab.ts +92 -131
- package/front_end/panels/settings/SettingsScreen.ts +8 -13
- package/front_end/panels/settings/components/SyncSection.ts +3 -4
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +200 -18
- package/front_end/panels/settings/emulation/devicesSettingsTab.css +18 -0
- package/front_end/panels/settings/settings-meta.ts +0 -1
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
- package/front_end/panels/sources/BreakpointsView.ts +14 -14
- package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -20
- package/front_end/panels/sources/CoveragePlugin.ts +7 -7
- package/front_end/panels/sources/DebuggerPausedMessage.ts +34 -28
- package/front_end/panels/sources/DebuggerPlugin.ts +30 -30
- package/front_end/panels/sources/EditingLocationHistoryManager.ts +12 -9
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
- package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
- package/front_end/panels/sources/NavigatorView.ts +34 -27
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/PersistenceActions.ts +9 -9
- package/front_end/panels/sources/ProfilePlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.ts +20 -18
- package/front_end/panels/sources/SourcesPanel.ts +45 -42
- package/front_end/panels/sources/SourcesView.ts +196 -102
- package/front_end/panels/sources/TabbedEditorContainer.ts +6 -7
- package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
- package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +9 -12
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/sources/sources-meta.ts +109 -71
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
- package/front_end/panels/timeline/TimelineLoader.ts +72 -42
- package/front_end/panels/timeline/TimelinePanel.ts +29 -4
- package/front_end/panels/timeline/TimelineUIUtils.ts +15 -0
- package/front_end/panels/timeline/timeline-meta.ts +3 -5
- package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/cpp.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/cpp.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/legacy.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/python.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/svelte.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
- package/front_end/third_party/codemirror.next/codemirror.next.d.ts +1332 -193
- package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
- package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/package.json +5 -5
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
- package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
- package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
- package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/tsconfig.compatibility.json +2 -1
- package/front_end/tsconfig.json +1 -1
- package/front_end/ui/components/icon_button/IconButton.ts +1 -1
- package/front_end/ui/components/issue_counter/IssueCounter.ts +1 -1
- package/front_end/ui/components/settings/SettingCheckbox.ts +4 -7
- package/front_end/ui/components/settings/settings.ts +1 -2
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
- package/front_end/ui/legacy/Dialog.ts +12 -2
- package/front_end/ui/legacy/TabbedPane.ts +7 -2
- package/front_end/ui/legacy/Treeoutline.ts +52 -30
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
- package/front_end/ui/legacy/components/object_ui/CSSStyleSanitizer.ts +74 -0
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +6 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +47 -54
- package/front_end/ui/legacy/components/object_ui/object_ui.ts +2 -0
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +16 -28
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +10 -12
- package/front_end/ui/settings/SettingUIRegistration.ts +0 -8
- package/front_end/ui/visual_logging/KnownContextValues.ts +23 -0
- package/inspector_overlay/tsconfig.json +8 -2
- package/package.json +3 -2
- package/front_end/core/sdk/CSSModel.test.api.ts +0 -102
- package/front_end/core/sdk/DOMModel.test.api.ts +0 -104
- package/front_end/foundation/Universe.test.api.ts +0 -73
- package/front_end/panels/application/SharedStorageEventsView.ts +0 -128
- package/front_end/panels/application/SharedStorageItemsView.ts +0 -179
- package/front_end/panels/application/SharedStorageListTreeElement.ts +0 -65
- package/front_end/panels/application/SharedStorageModel.ts +0 -249
- package/front_end/panels/application/SharedStorageTreeElement.ts +0 -40
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +0 -191
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +0 -133
- package/front_end/panels/application/components/sharedStorageAccessGrid.css +0 -29
- package/front_end/panels/application/components/sharedStorageMetadataView.css +0 -29
- package/front_end/panels/application/sharedStorageEventsView.css +0 -9
- package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
- package/front_end/ui/components/settings/SettingDeprecationWarning.ts +0 -47
- package/front_end/ui/components/settings/settingDeprecationWarning.css +0 -14
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devtools-ci
|
|
3
|
+
description: >-
|
|
4
|
+
Triage and analyze Chromium/DevTools LUCI build results and trybot failures,
|
|
5
|
+
including high-level builder status, compile errors, and detailed test
|
|
6
|
+
failures. Use this to inspect trybot buildbucket (bb) results for a patchset
|
|
7
|
+
overview or to query ResultDB directly for comprehensive, actionable information
|
|
8
|
+
about specific test regressions and infrastructure issues.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# LUCI Build Triage & Analysis
|
|
12
|
+
|
|
13
|
+
This skill provides access to specialized triage tools maintained within the
|
|
14
|
+
`depot_tools` repository. These tools are used to inspect Buildbucket results
|
|
15
|
+
and ResultDB test failures.
|
|
16
|
+
|
|
17
|
+
## Environment & Auth Discovery
|
|
18
|
+
|
|
19
|
+
- **Environment**: Always execute these scripts using **`vpython3`** instead
|
|
20
|
+
of `python3` to ensure all hermetic dependencies (like `httplib2`) are
|
|
21
|
+
satisfied.
|
|
22
|
+
- **Authentication**: Use `bb auth-info` to proactively check if you are
|
|
23
|
+
logged into Buildbucket. If not, inform the user they must run `bb auth-login`.
|
|
24
|
+
|
|
25
|
+
## Locating the Tools
|
|
26
|
+
|
|
27
|
+
The triage scripts and their detailed documentation are located relative to
|
|
28
|
+
the `depot_tools` installation:
|
|
29
|
+
|
|
30
|
+
1. **Locate Depot Tools**: Run `which gerrit_client.py` to find your local
|
|
31
|
+
`depot_tools` root.
|
|
32
|
+
2. **Navigation**:
|
|
33
|
+
- **Buildbucket (`bb_wrapper.py`)**: Found in `<DEPOT_TOOLS_ROOT>/agents/skills/buildbucket/`
|
|
34
|
+
- *Strengths*: High-level Build info (is it failing? what steps failed?),
|
|
35
|
+
compile errors, and infra issues.
|
|
36
|
+
- **Test Results (`luci_triage.py`)**: Found in `<DEPOT_TOOLS_ROOT>/agents/skills/luci-test-results/`
|
|
37
|
+
- *Strengths*: Detailed Test info (specific test case failures in
|
|
38
|
+
ResultDB).
|
|
39
|
+
|
|
40
|
+
## Troubleshooting
|
|
41
|
+
|
|
42
|
+
- **"No Artifacts Found"**: This usually occurs if:
|
|
43
|
+
1. The build failed so early (e.g., bot setup) that no artifacts were produced.
|
|
44
|
+
2. The build is too old and logs have been purged.
|
|
45
|
+
3. There is an authentication issue.
|
|
46
|
+
- **Fallback**: Try `bb log <build_id> <step_name>` to see the raw output
|
|
47
|
+
for the failed step.
|
|
48
|
+
|
|
49
|
+
## Available Skills in Depot Tools
|
|
50
|
+
|
|
51
|
+
Once you have located the `depot_tools` directory, read the following files
|
|
52
|
+
to understand how to use each tool:
|
|
53
|
+
|
|
54
|
+
- **`buildbucket`**: Used for high-level builder status and compile failures.
|
|
55
|
+
- Read: `<DEPOT_TOOLS_ROOT>/agents/skills/buildbucket/SKILL.md`
|
|
56
|
+
- **`luci-test-results`**: Used for detailed ResultDB test failure analysis.
|
|
57
|
+
- Read: `<DEPOT_TOOLS_ROOT>/agents/skills/luci-test-results/SKILL.md`
|
|
58
|
+
|
|
59
|
+
## Usage at Runtime
|
|
60
|
+
|
|
61
|
+
When you need to triage a build:
|
|
62
|
+
1. Locate `depot_tools` as described above.
|
|
63
|
+
2. Read the relevant `SKILL.md` file from `depot_tools`.
|
|
64
|
+
3. Follow the instructions in that file to execute the Python scripts (e.g.,
|
|
65
|
+
`bb_wrapper.py` or `luci_triage.py`) using their absolute paths.
|
|
@@ -16,17 +16,17 @@ This skill outlines the workflow for fixing skipped tests in the DevTools codeba
|
|
|
16
16
|
- Ensure you use the instructions from the `devtools-version-control` skill to create and switch branches appropriately.
|
|
17
17
|
|
|
18
18
|
3. **Search for the Skipped Tests**
|
|
19
|
-
- Search the
|
|
20
|
-
-
|
|
19
|
+
- Search the `test/TestExpectations` file for the `<bugid>` to find skipped tests.
|
|
20
|
+
- Tests are no longer skipped using `.skip` in the code, but rather by having a `[ Skip ]` expectation in `test/TestExpectations`.
|
|
21
21
|
|
|
22
22
|
4. **Iterative Fix Process**
|
|
23
|
-
- **Step 1:** Remove `
|
|
23
|
+
- **Step 1:** Remove the `[ Skip ]` expectation for *one* of the tests associated with the bug in `test/TestExpectations` (or change it to `[ Pass Failure ]` if you are investigating flakiness).
|
|
24
24
|
- **Step 2:** Re-run the specific test using its exact test ID (e.g., `npm run test path/to/foo.test.ts:test_name`) using the guidelines from the `devtools-verification` skill. If you are dealing with flaky tests, you can use the `--repeat=x` flag (e.g. `npm run test -- --repeat=20 path/to/foo.test.ts:test_name`) to run the test multiple times to reproduce the flakiness. This flag works for both E2E and unit tests.
|
|
25
25
|
- **Step 3:** Analyze the test failure and make the necessary fixes to the code or the test itself.
|
|
26
26
|
- **Step 4:** Re-run the test to ensure the fix is correct.
|
|
27
|
-
- **Step 5:** Remove the `[crbug.com/<bugid>]` prefix from the test name string if it is present.
|
|
28
|
-
- **Step 6:** Remove any comments directly above the test that explain the reason why the test was skipped (e.g., `// TODO(crbug...): Flaky`).
|
|
29
|
-
- **Step 7:** Apply the fix to the remaining tests, un-skipping them one by one or in batches
|
|
27
|
+
- **Step 5:** Remove the `[crbug.com/<bugid>]` prefix from the test name string in the code if it is present.
|
|
28
|
+
- **Step 6:** Remove any comments directly above the test in the code that explain the reason why the test was skipped (e.g., `// TODO(crbug...): Flaky`).
|
|
29
|
+
- **Step 7:** Apply the fix to the remaining tests, un-skipping them one by one or in batches by modifying `test/TestExpectations`, and verifying until all are passing.
|
|
30
30
|
|
|
31
31
|
5. **Verify Full Build**
|
|
32
32
|
- Before finishing, run the full verification process (TypeScript checks, linters, full test run) as required by the repository best practices.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gerrit-cli
|
|
3
|
+
description: >-
|
|
4
|
+
Interacts with the public Gerrit Code Review platform using depot_tools'
|
|
5
|
+
gerrit_client.py. Use this skill when asked to query public CLs, retrieve
|
|
6
|
+
file revisions, add patchset comments, vote on review labels, submit changes,
|
|
7
|
+
or abandon/restore public CLs. Do not use this skill for Google-internal
|
|
8
|
+
attention set updates or internal AI-assisted code reviews (CRUAS) which are
|
|
9
|
+
unsupported by the public API.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Gerrit CLI Skill
|
|
13
|
+
|
|
14
|
+
Execute public Gerrit Code Review commands using `gerrit_client.py` from
|
|
15
|
+
depot_tools.
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- Ensure `gerrit_client.py` is available in the system `PATH` (typically part of
|
|
20
|
+
`depot_tools`). If `gerrit_client.py` is not available in your environment,
|
|
21
|
+
stop execution immediately.
|
|
22
|
+
- Use the wrapper script directly instead of an environment variable.
|
|
23
|
+
Substitute:
|
|
24
|
+
`vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py`
|
|
25
|
+
as the executable command in all examples and invocations.
|
|
26
|
+
|
|
27
|
+
## Just-in-Time (JiT) Loading Guidance
|
|
28
|
+
|
|
29
|
+
- Before running any Gerrit CLI command, read `references/commands.md`
|
|
30
|
+
to locate the required parameters and specific subcommand syntax.
|
|
31
|
+
- Before querying public CLs, adding comments, voting, or submitting changes,
|
|
32
|
+
read `references/workflows.md` for step-by-step procedures.
|
|
33
|
+
|
|
34
|
+
## Gotchas & Environment Constraints
|
|
35
|
+
|
|
36
|
+
- **Specify Host**: Always supply the `--host` flag explicitly (e.g.
|
|
37
|
+
`--host https://chromium-review.googlesource.com`).
|
|
38
|
+
- **Use JSON Output**: Always use the `--json_file=<path>` flag when querying
|
|
39
|
+
changes or fetching metadata to obtain structured, machine-readable output.
|
|
40
|
+
|
|
41
|
+
> [!CAUTION]
|
|
42
|
+
> **NEVER** use this to add patchset comments to an existing comment thread that
|
|
43
|
+
> contains human reviewers in it. Using an agent to reply to a human is a
|
|
44
|
+
> violation of Chromium's code of conduct.
|
|
45
|
+
>
|
|
46
|
+
> If the user requests this or you encounter this scenario as part of your work,
|
|
47
|
+
> inform the user about which comment threads cannot be updated but otherwise
|
|
48
|
+
> continue work.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
> [!NOTE]
|
|
52
|
+
> This skill was adapted from the [Chromium Gerrit CLI skill](https://chromium.googlesource.com/chromium/agents/+/main/skills/gerrit-cli/)
|
|
53
|
+
> (automatically rolled in from upstream).
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Gerrit CLI Common Commands & Usage (Public)
|
|
2
|
+
|
|
3
|
+
Run the tool directly using the wrapper script path with the `--help` flag:
|
|
4
|
+
|
|
5
|
+
- `vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py --help`
|
|
6
|
+
- `vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py changes --help`
|
|
7
|
+
|
|
8
|
+
## Global Flags
|
|
9
|
+
|
|
10
|
+
Use the following global flags for all commands:
|
|
11
|
+
|
|
12
|
+
- `--host <url>` (e.g., `--host https://chromium-review.googlesource.com`).
|
|
13
|
+
- `--project <project_name>` (e.g., `--project chromium/src`).
|
|
14
|
+
- `--json_file <path>` (saves the structured response as a JSON file).
|
|
15
|
+
|
|
16
|
+
______________________________________________________________________
|
|
17
|
+
|
|
18
|
+
## Common Invocations
|
|
19
|
+
|
|
20
|
+
### 1. Inspecting and Searching Changes
|
|
21
|
+
|
|
22
|
+
- **Query active changes:**
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
26
|
+
changes \
|
|
27
|
+
--host https://chromium-review.googlesource.com \
|
|
28
|
+
--query "owner:self status:open"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- **View the content of a specific file in a change:**
|
|
32
|
+
|
|
33
|
+
**Note:** This command does not work with the `--json_file` flag, instead use
|
|
34
|
+
stdout redirection (`>`).
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
38
|
+
content \
|
|
39
|
+
--host https://chromium-review.googlesource.com \
|
|
40
|
+
--project <project> \
|
|
41
|
+
--change <change_id> \
|
|
42
|
+
--revision <revision> \
|
|
43
|
+
--path <file_path> \
|
|
44
|
+
> output_file
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- **Get related changes:**
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
51
|
+
relatedchanges \
|
|
52
|
+
--host https://chromium-review.googlesource.com \
|
|
53
|
+
--change <change_id> --revision <revision>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Reviewing and Voting
|
|
57
|
+
|
|
58
|
+
- **Add a patchset-level comment:**
|
|
59
|
+
```bash
|
|
60
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
61
|
+
addpatchsetcomment \
|
|
62
|
+
--host https://chromium-review.googlesource.com \
|
|
63
|
+
--change <change_id> --revision <revision> \
|
|
64
|
+
--message "Review findings: <message>"
|
|
65
|
+
```
|
|
66
|
+
- **Vote on a review label (e.g., Code-Review +1):**
|
|
67
|
+
```bash
|
|
68
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
69
|
+
setlabel \
|
|
70
|
+
--host https://chromium-review.googlesource.com \
|
|
71
|
+
--change <change_id> \
|
|
72
|
+
--label Code-Review 1
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3. Actions and Shepherding
|
|
76
|
+
|
|
77
|
+
- **Submit/Merge a change:**
|
|
78
|
+
```bash
|
|
79
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
80
|
+
submitchange \
|
|
81
|
+
--host https://chromium-review.googlesource.com \
|
|
82
|
+
--change <change_id>
|
|
83
|
+
```
|
|
84
|
+
- **Abandon a change:**
|
|
85
|
+
```bash
|
|
86
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
87
|
+
abandon \
|
|
88
|
+
--host https://chromium-review.googlesource.com \
|
|
89
|
+
--change <change_id> \
|
|
90
|
+
--message "<reason>"
|
|
91
|
+
```
|
|
92
|
+
- **Restore an abandoned change:**
|
|
93
|
+
```bash
|
|
94
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
95
|
+
restore \
|
|
96
|
+
--host https://chromium-review.googlesource.com \
|
|
97
|
+
--change <change_id> \
|
|
98
|
+
--message "<reason>"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
______________________________________________________________________
|
|
102
|
+
|
|
103
|
+
## Just-in-Time Help
|
|
104
|
+
|
|
105
|
+
Explore the built-in CLI help for additional subcommands or advanced syntax:
|
|
106
|
+
|
|
107
|
+
- Display all top-level commands:
|
|
108
|
+
`vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py --help`
|
|
109
|
+
- Display help for a specific subcommand:
|
|
110
|
+
```bash
|
|
111
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
112
|
+
help <command>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
## Advanced / Escape Hatch: Arbitrary REST API Calls (`rawapi`)
|
|
117
|
+
|
|
118
|
+
If the built-in subcommands do not cover a specific action or metadata query, you can use the `rawapi` subcommand to execute arbitrary HTTP requests against the Gerrit REST API.
|
|
119
|
+
|
|
120
|
+
- **Endpoint Reference**: [Gerrit REST API - Changes](https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html)
|
|
121
|
+
|
|
122
|
+
### Usage
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
126
|
+
rawapi \
|
|
127
|
+
--host https://chromium-review.googlesource.com \
|
|
128
|
+
--path "/changes/<change_id>/detail?o=SUBMITTABLE" \
|
|
129
|
+
--json_file output.json
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
- **Options**:
|
|
133
|
+
- `--path`: HTTP path of the API endpoint (e.g. `/changes/<change_id>/revisions/current/mergeable`).
|
|
134
|
+
- `--method`: HTTP method (GET, POST, PUT, DELETE). Defaults to GET.
|
|
135
|
+
- `--body`: JSON string body for write requests (e.g., POST/PUT).
|
|
136
|
+
- `--accept_status`: Comma-separated list of successful HTTP status codes.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Gerrit CLI Workflows (Public)
|
|
2
|
+
|
|
3
|
+
## 1. Change List Review Workflow
|
|
4
|
+
|
|
5
|
+
Execute these steps in chronological order to review a Change List (CL) when
|
|
6
|
+
provided with a link or ID:
|
|
7
|
+
|
|
8
|
+
1. **Query CL Metadata**: Retrieve CL details and verify its current status:
|
|
9
|
+
```bash
|
|
10
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
11
|
+
changes \
|
|
12
|
+
--host https://chromium-review.googlesource.com \
|
|
13
|
+
--query "change:<id>"
|
|
14
|
+
```
|
|
15
|
+
2. **Fetch File Contents**: Retrieve the content of specific files modified in
|
|
16
|
+
the CL:
|
|
17
|
+
```bash
|
|
18
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
19
|
+
content \
|
|
20
|
+
--host https://chromium-review.googlesource.com \
|
|
21
|
+
--project <project> \
|
|
22
|
+
--change <change_id> --revision current --path <file_path>
|
|
23
|
+
```
|
|
24
|
+
3. **Analyze Local Modifications**: Inspect the fetched contents and local diffs
|
|
25
|
+
for any logic or formatting issues.
|
|
26
|
+
4. **Add Review Comment**: Post a patchset-level comment containing the review
|
|
27
|
+
findings:
|
|
28
|
+
```bash
|
|
29
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
30
|
+
addpatchsetcomment \
|
|
31
|
+
--host https://chromium-review.googlesource.com \
|
|
32
|
+
--change <change_id> --revision current \
|
|
33
|
+
--message "Review findings: ..."
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 2. Shepherding & Submission Workflow
|
|
37
|
+
|
|
38
|
+
Execute these steps in chronological order to approve and merge a Change List:
|
|
39
|
+
|
|
40
|
+
1. **Check Related Changes**: Retrieve the status of all related changes to
|
|
41
|
+
ensure there are no unresolved blockers:
|
|
42
|
+
```bash
|
|
43
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
44
|
+
relatedchanges \
|
|
45
|
+
--host https://chromium-review.googlesource.com \
|
|
46
|
+
--change <change_id> --revision current
|
|
47
|
+
```
|
|
48
|
+
2. **Vote on Review Labels**: Apply the required Code-Review approval vote:
|
|
49
|
+
```bash
|
|
50
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
51
|
+
setlabel \
|
|
52
|
+
--host https://chromium-review.googlesource.com \
|
|
53
|
+
--change <change_id> \
|
|
54
|
+
--label Code-Review 1
|
|
55
|
+
```
|
|
56
|
+
3. **Submit Change**: Merge the change once all CQ presubmits pass and all
|
|
57
|
+
approval requirements are satisfied:
|
|
58
|
+
```bash
|
|
59
|
+
vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py \
|
|
60
|
+
submitchange \
|
|
61
|
+
--host https://chromium-review.googlesource.com \
|
|
62
|
+
--change <change_id>
|
|
63
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Copyright 2026 The Chromium Authors
|
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be
|
|
4
|
+
# found in the LICENSE file.
|
|
5
|
+
"""Imports the Gerrit CLI skill from upstream and applies DevTools revisions.
|
|
6
|
+
|
|
7
|
+
No external checkouts (like chromium/src) are required. The script downloads
|
|
8
|
+
the skill directly from the public Git repository.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import io
|
|
12
|
+
import re
|
|
13
|
+
import sys
|
|
14
|
+
import tarfile
|
|
15
|
+
import urllib.request
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
UPSTREAM_URL = "https://chromium.googlesource.com/chromium/agents/+archive/refs/heads/main/skills/gerrit-cli.tar.gz"
|
|
19
|
+
|
|
20
|
+
def fetch_upstream_skill(target_dir: Path):
|
|
21
|
+
print(f"Downloading upstream skill from {UPSTREAM_URL}...")
|
|
22
|
+
try:
|
|
23
|
+
req = urllib.request.Request(UPSTREAM_URL,
|
|
24
|
+
headers={'User-Agent': 'Mozilla/5.0'})
|
|
25
|
+
with urllib.request.urlopen(req) as response:
|
|
26
|
+
tar_data = response.read()
|
|
27
|
+
except Exception as e:
|
|
28
|
+
print(f"Failed to download upstream skill: {e}")
|
|
29
|
+
sys.exit(1)
|
|
30
|
+
|
|
31
|
+
print(f"Extracting to {target_dir}...")
|
|
32
|
+
target_dir.mkdir(parents=True, exist_ok=True)
|
|
33
|
+
with tarfile.open(fileobj=io.BytesIO(tar_data), mode='r:gz') as tar:
|
|
34
|
+
tar.extractall(path=target_dir)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def apply_devtools_revisions(target_dir: Path):
|
|
38
|
+
print("Applying DevTools-specific adaptations...")
|
|
39
|
+
|
|
40
|
+
# 2. Update SKILL.md
|
|
41
|
+
skill_md_path = target_dir / "SKILL.md"
|
|
42
|
+
if skill_md_path.exists():
|
|
43
|
+
content = skill_md_path.read_text()
|
|
44
|
+
|
|
45
|
+
# Re-route wrapper script path
|
|
46
|
+
content = re.sub(
|
|
47
|
+
r'(?:v)?python3\s+agents/shared/skills/gerrit-cli/scripts/gerrit_client_wrapper.py',
|
|
48
|
+
'vpython3 .agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py',
|
|
49
|
+
content)
|
|
50
|
+
|
|
51
|
+
# Add attribution note at the bottom
|
|
52
|
+
attribution = """
|
|
53
|
+
> [!NOTE]
|
|
54
|
+
> This skill was adapted from the [Chromium Gerrit CLI skill](https://chromium.googlesource.com/chromium/agents/+/main/skills/gerrit-cli/)
|
|
55
|
+
> (automatically rolled in from upstream).
|
|
56
|
+
"""
|
|
57
|
+
if "> [!NOTE]" not in content:
|
|
58
|
+
content += "\n" + attribution
|
|
59
|
+
|
|
60
|
+
skill_md_path.write_text(content)
|
|
61
|
+
print(" - Adapted SKILL.md")
|
|
62
|
+
|
|
63
|
+
# 3. Update references/commands.md and references/workflows.md
|
|
64
|
+
for filename in ["commands.md", "workflows.md"]:
|
|
65
|
+
ref_path = target_dir / "references" / filename
|
|
66
|
+
if ref_path.exists():
|
|
67
|
+
c = ref_path.read_text()
|
|
68
|
+
|
|
69
|
+
# Path & executable transformations
|
|
70
|
+
c = re.sub(r'(?:v)?python3\s+agents/shared/skills/gerrit-cli/',
|
|
71
|
+
'vpython3 .agents/skills/gerrit-cli/', c)
|
|
72
|
+
|
|
73
|
+
ref_path.write_text(c)
|
|
74
|
+
print(f" - Adapted references/{filename}")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def validate_gerrit_client_wrapper(skill_dir: Path):
|
|
78
|
+
print("Validating gerrit_client_wrapper.py...")
|
|
79
|
+
import json, subprocess, tempfile
|
|
80
|
+
wrapper = skill_dir / "scripts" / "gerrit_client_wrapper.py"
|
|
81
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
82
|
+
json_file = Path(tmp) / "out.json"
|
|
83
|
+
try:
|
|
84
|
+
subprocess.run([
|
|
85
|
+
"vpython3",
|
|
86
|
+
str(wrapper), "changes", "--query", "change:8147179", "--host",
|
|
87
|
+
"https://chromium-review.googlesource.com", "--json_file",
|
|
88
|
+
str(json_file)
|
|
89
|
+
],
|
|
90
|
+
check=True,
|
|
91
|
+
capture_output=True)
|
|
92
|
+
data = json.loads(json_file.read_text())
|
|
93
|
+
if not data or data[0].get("_number") != 8147179:
|
|
94
|
+
raise ValueError(f"Invalid response: {data}")
|
|
95
|
+
print(" - Validation passed successfully!")
|
|
96
|
+
except Exception as e:
|
|
97
|
+
stderr = getattr(e, "stderr", b"").decode(errors="replace")
|
|
98
|
+
print(f"Validation FAILED: {e}\n{stderr}")
|
|
99
|
+
sys.exit(1)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def main():
|
|
104
|
+
skill_dir = Path(__file__).parent.parent.resolve()
|
|
105
|
+
fetch_upstream_skill(skill_dir)
|
|
106
|
+
apply_devtools_revisions(skill_dir)
|
|
107
|
+
validate_gerrit_client_wrapper(skill_dir)
|
|
108
|
+
print("Upstream sync completed successfully!")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == "__main__":
|
|
112
|
+
main()
|
|
@@ -257,7 +257,13 @@ because they picked up the test as it was being touched.
|
|
|
257
257
|
|
|
258
258
|
You can skip Flake Detection for your tests by adding the `Skip-Flake-Detection`
|
|
259
259
|
CL footer (see example [CL](https://crrev.com/c/6994031)). Make sure you use the
|
|
260
|
-
full path to your test.
|
|
260
|
+
full path to your test. If you need to skip multiple tests, you can repeat the footer:
|
|
261
|
+
```
|
|
262
|
+
Skip-Flake-Detection: test/e2e/foo.test.ts
|
|
263
|
+
Skip-Flake-Detection: test/e2e/bar.test.ts
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
You can also skip Flake Detection for multiple tests using a glob pattern by adding the `Skip-Flake-Detection-Pattern` CL footer. For example: `Skip-Flake-Detection-Pattern: test/e2e/performance/*`.
|
|
261
267
|
|
|
262
268
|
### Common build failures
|
|
263
269
|
|
|
@@ -78,12 +78,12 @@ This step is optional. If you want the `base::Feature` to be controllable via th
|
|
|
78
78
|
|
|
79
79
|
Prerequisite: The `base::Feature` needs to be have been added to `chrome://flags`.
|
|
80
80
|
|
|
81
|
-
#### Step 1: Create
|
|
81
|
+
#### Step 1: Create an Experiment in the DevTools repository
|
|
82
82
|
|
|
83
83
|
Register the experiment in [`MainImpl.ts`](https://crsrc.org/c/third_party/devtools-frontend/src/front_end/entrypoints/main/MainImpl.ts;l=343)
|
|
84
84
|
|
|
85
85
|
```ts
|
|
86
|
-
Root.Runtime.experiments.
|
|
86
|
+
Root.Runtime.experiments.register({
|
|
87
87
|
name: Root.ExperimentNames.ExperimentName.DURABLE_MESSAGES,
|
|
88
88
|
// Short description of the experiment, shown to users
|
|
89
89
|
title: 'Durable Messages',
|
|
@@ -147,12 +147,6 @@ in the DevTools repository. The label can be anything you like but make sure it
|
|
|
147
147
|
|
|
148
148
|
[Example CL](https://crrev.com/c/4915777)
|
|
149
149
|
|
|
150
|
-
## Deprecated: DevTools experiments
|
|
151
|
-
|
|
152
|
-
Previously, DevTools experiments that lacked a Chrome component were managed separately. This
|
|
153
|
-
system is now deprecated. All legacy experiments are being migrated to the `base::Feature`
|
|
154
|
-
framework to streamline development.
|
|
155
|
-
|
|
156
150
|
## A/B Testing with Finch and base::Feature
|
|
157
151
|
|
|
158
152
|
`base::Feature` flags can be used with Finch to conduct A/B testing by toggling feature flags for a defined percentage of users. A/B testing can be a good way of testing the waters. However, since the time to get meaningful metrics may take a long time, it shouldn't be used to get feedback on options quickly.
|
|
@@ -66,25 +66,6 @@ An example `com.chrome.devtools.json` would look like this:
|
|
|
66
66
|
Chromium DevTools will only attempt to load the `com.chrome.devtools.json` when
|
|
67
67
|
the origin of the inspected page is `localhost`.
|
|
68
68
|
|
|
69
|
-
## Setup
|
|
70
|
-
|
|
71
|
-
In M-136, which is in Canary channel at the time of this writing, the relevant
|
|
72
|
-
flags have been enabled by default (as of 2025-03-16). In earlier versions of
|
|
73
|
-
M-136 and in M-135, this feature is disabled by default. To use it, you need to
|
|
74
|
-
turn on two feature flags in `about:flags`:
|
|
75
|
-
|
|
76
|
-
- [chrome://flags#devtools-project-settings](chrome://flags#devtools-project-settings)
|
|
77
|
-
- [chrome://flags#devtools-automatic-workspace-folders](chrome://flags#devtools-automatic-workspace-folders)
|
|
78
|
-
|
|
79
|
-

|
|
80
|
-
|
|
81
|
-
Instead of enabling the feature via `about:flags`, you can instead also enable
|
|
82
|
-
them from the command line:
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
google-chrome-canary --enable-features=DevToolsWellKnown,DevToolsAutomaticFileSystems
|
|
86
|
-
```
|
|
87
|
-
|
|
88
69
|
## Usage
|
|
89
70
|
|
|
90
71
|
To check if your setup is correct, you can try out Benedikt’s
|
package/eslint.config.mjs
CHANGED
|
@@ -693,8 +693,8 @@ export default defineConfig([
|
|
|
693
693
|
},
|
|
694
694
|
},
|
|
695
695
|
{
|
|
696
|
-
name: 'Front-end core files',
|
|
697
|
-
files: ['front_end/core/**/*.ts'],
|
|
696
|
+
name: 'Front-end core and models files',
|
|
697
|
+
files: ['front_end/core/**/*.ts', 'front_end/models/**/*.ts'],
|
|
698
698
|
rules: {
|
|
699
699
|
'@devtools/no-instance-of-migrated-singletons': 'error',
|
|
700
700
|
},
|
|
@@ -8,11 +8,11 @@ const ERROR_STATE = Symbol('error');
|
|
|
8
8
|
/**
|
|
9
9
|
* Very basic memoizer. Will only invoke its callback the first time, returning the cached value all subsequent calls.
|
|
10
10
|
*/
|
|
11
|
-
export function lazy<T>(producer: () => T): () =>
|
|
11
|
+
export function lazy<T, A extends unknown[] = []>(producer: (...args: A) => T): (...args: A) => T {
|
|
12
12
|
let value: T|typeof ERROR_STATE|typeof UNINITIALIZED = UNINITIALIZED;
|
|
13
13
|
let error: Error = new Error('Initial');
|
|
14
14
|
|
|
15
|
-
return ():
|
|
15
|
+
return (...args: A): T => {
|
|
16
16
|
if (value === ERROR_STATE) {
|
|
17
17
|
throw error;
|
|
18
18
|
} else if (value !== UNINITIALIZED) {
|
|
@@ -20,7 +20,7 @@ export function lazy<T>(producer: () => T): () => symbol | T {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
try {
|
|
23
|
-
value = producer();
|
|
23
|
+
value = producer(...args);
|
|
24
24
|
return value;
|
|
25
25
|
} catch (err) {
|
|
26
26
|
error = err instanceof Error ? err : new Error(err);
|
|
@@ -282,13 +282,6 @@ export interface SettingRegistration {
|
|
|
282
282
|
*/
|
|
283
283
|
disabledCondition?: (config?: Root.Runtime.HostConfig) => DisabledConditionResult;
|
|
284
284
|
|
|
285
|
-
/**
|
|
286
|
-
* If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` property.
|
|
287
|
-
* If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be
|
|
288
|
-
* set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to
|
|
289
|
-
* jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.
|
|
290
|
-
*/
|
|
291
|
-
deprecationNotice?: {disabled: boolean, warning: () => Platform.UIString.LocalizedString, experiment?: string};
|
|
292
285
|
/**
|
|
293
286
|
* See {@link LearnMore} for more info.
|
|
294
287
|
*/
|
|
@@ -494,23 +494,6 @@ export class SettingsStorage {
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
|
|
497
|
-
export class Deprecation {
|
|
498
|
-
readonly disabled: boolean;
|
|
499
|
-
readonly warning: Platform.UIString.LocalizedString;
|
|
500
|
-
readonly experiment?: Root.Runtime.Experiment|Root.Runtime.HostExperiment;
|
|
501
|
-
|
|
502
|
-
constructor({deprecationNotice}: SettingRegistration) {
|
|
503
|
-
if (!deprecationNotice) {
|
|
504
|
-
throw new Error('Cannot create deprecation info for a non-deprecated setting');
|
|
505
|
-
}
|
|
506
|
-
this.disabled = deprecationNotice.disabled;
|
|
507
|
-
this.warning = deprecationNotice.warning();
|
|
508
|
-
this.experiment = deprecationNotice.experiment ?
|
|
509
|
-
Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :
|
|
510
|
-
undefined;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
|
|
514
497
|
export class Setting<V> {
|
|
515
498
|
#registration: SettingRegistration|null = null;
|
|
516
499
|
#type: SettingType|null = null;
|
|
@@ -520,7 +503,6 @@ export class Setting<V> {
|
|
|
520
503
|
#serializer: Serializer<unknown, V> = JSON;
|
|
521
504
|
#hadUserAction?: boolean;
|
|
522
505
|
#disabled?: boolean;
|
|
523
|
-
#deprecation: Deprecation|null = null;
|
|
524
506
|
#loggedInitialAccess = false;
|
|
525
507
|
#logSettingAccess?: (name: string, value: number|string|boolean) => Promise<void>;
|
|
526
508
|
readonly #console: Console;
|
|
@@ -691,16 +673,6 @@ export class Setting<V> {
|
|
|
691
673
|
if (registration.settingType) {
|
|
692
674
|
this.#type = registration.settingType;
|
|
693
675
|
}
|
|
694
|
-
const {deprecationNotice} = registration;
|
|
695
|
-
if (deprecationNotice?.disabled) {
|
|
696
|
-
const experiment = deprecationNotice.experiment ?
|
|
697
|
-
Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :
|
|
698
|
-
undefined;
|
|
699
|
-
if ((!experiment || experiment.isEnabled())) {
|
|
700
|
-
this.set(this.defaultValue);
|
|
701
|
-
this.setDisabled(true);
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
676
|
}
|
|
705
677
|
|
|
706
678
|
type(): SettingType|null {
|
|
@@ -758,16 +730,6 @@ export class Setting<V> {
|
|
|
758
730
|
return this.#registration?.learnMore ?? null;
|
|
759
731
|
}
|
|
760
732
|
|
|
761
|
-
get deprecation(): Deprecation|null {
|
|
762
|
-
if (!this.#registration || !this.#registration.deprecationNotice) {
|
|
763
|
-
return null;
|
|
764
|
-
}
|
|
765
|
-
if (!this.#deprecation) {
|
|
766
|
-
this.#deprecation = new Deprecation(this.#registration);
|
|
767
|
-
}
|
|
768
|
-
return this.#deprecation;
|
|
769
|
-
}
|
|
770
|
-
|
|
771
733
|
private printSettingsSavingError(message: string, value: string): void {
|
|
772
734
|
const errorMessage =
|
|
773
735
|
'Error saving setting with name: ' + this.name + ', value length: ' + value.length + '. Error: ' + message;
|