@mcp-b/chrome-devtools-mcp 2.0.13 → 2.2.0
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/README.md +178 -436
- package/build/src/DevtoolsUtils.js +185 -97
- package/build/src/McpContext.js +392 -834
- package/build/src/McpPage.js +95 -0
- package/build/src/McpResponse.js +399 -197
- package/build/src/PageCollector.js +28 -12
- package/build/src/SlimMcpResponse.js +18 -0
- package/build/src/WaitForHelper.js +2 -2
- package/build/src/bin/chrome-devtools-cli-options.js +700 -0
- package/build/src/{cli.js → bin/chrome-devtools-mcp-cli-options.js} +94 -15
- package/build/src/bin/chrome-devtools-mcp-main.js +35 -0
- package/build/src/bin/chrome-devtools-mcp.js +21 -0
- package/build/src/bin/chrome-devtools.js +207 -0
- package/build/src/browser.js +63 -218
- package/build/src/daemon/client.js +176 -0
- package/build/src/daemon/daemon.js +206 -0
- package/build/src/daemon/types.js +6 -0
- package/build/src/daemon/utils.js +108 -0
- package/build/src/formatters/IssueFormatter.js +50 -48
- package/build/src/formatters/consoleFormatter.js +217 -97
- package/build/src/formatters/networkFormatter.js +195 -54
- package/build/src/formatters/snapshotFormatter.js +113 -52
- package/build/src/index.js +207 -16
- package/build/src/issue-descriptions.js +1 -1
- package/build/src/logger.js +9 -0
- package/build/src/telemetry/{clearcut-logger.js → ClearcutLogger.js} +1 -1
- package/build/src/telemetry/watchdog/{clearcut-sender.js → ClearcutSender.js} +2 -0
- package/build/src/telemetry/watchdog/main.js +1 -1
- package/build/src/third_party/devtools-formatter-worker.js +1 -1
- package/build/src/third_party/index.js +12 -2
- package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidAllowlistItemType.md +12 -0
- package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidHeader.md +12 -0
- package/build/src/third_party/issue-descriptions/connectionAllowlistInvalidUrlPattern.md +8 -0
- package/build/src/third_party/issue-descriptions/connectionAllowlistItemNotInnerList.md +12 -0
- package/build/src/third_party/issue-descriptions/connectionAllowlistMoreThanOneList.md +7 -0
- package/build/src/third_party/issue-descriptions/connectionAllowlistReportingEndpointNotToken.md +10 -0
- package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsLocalNetworkAccessPermissionDenied.md +2 -2
- package/build/src/third_party/issue-descriptions/selectivePermissionsIntervention.md +7 -0
- package/build/src/third_party/lighthouse-devtools-mcp-bundle.js +54183 -0
- package/build/src/tools/ToolDefinition.js +52 -0
- package/build/src/tools/categories.js +2 -2
- package/build/src/tools/console.js +3 -3
- package/build/src/tools/emulation.js +23 -55
- package/build/src/tools/extensions.js +17 -0
- package/build/src/tools/input.js +138 -37
- package/build/src/tools/lighthouse.js +123 -0
- package/build/src/tools/memory.js +28 -0
- package/build/src/tools/network.js +24 -10
- package/build/src/tools/pages.js +169 -88
- package/build/src/tools/performance.js +81 -38
- package/build/src/tools/screencast.js +79 -0
- package/build/src/tools/screenshot.js +6 -6
- package/build/src/tools/script.js +100 -77
- package/build/src/tools/slim/tools.js +81 -0
- package/build/src/tools/snapshot.js +12 -9
- package/build/src/tools/tools.js +38 -20
- package/build/src/tools/webmcp.js +365 -804
- package/build/src/trace-processing/parse.js +7 -7
- package/build/src/types.js +6 -0
- package/build/src/utils/files.js +19 -0
- package/build/src/version.js +9 -0
- package/package.json +37 -68
- package/build/src/main.js +0 -372
- package/build/src/polyfillLoader.js +0 -44
- package/build/src/prompts/index.js +0 -156
- package/build/src/tools/WebMCPToolHub.js +0 -329
- package/build/src/tools/browser.js +0 -92
- package/build/src/tools/extension.js +0 -31
- package/build/src/transports/CDPClientTransport.js +0 -184
- package/build/src/transports/WebMCPBridgeScript.js +0 -229
- package/build/src/transports/WebMCPClientTransport.js +0 -449
- package/build/src/transports/bridgeConstants.js +0 -22
- package/build/src/transports/index.js +0 -7
- package/build/vendor/chrome-devtools-frontend/LICENSE +0 -27
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/App.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/AppProvider.js +0 -17
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Base64.js +0 -61
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +0 -27
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Color.js +0 -2033
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +0 -332
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +0 -221
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Console.js +0 -79
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Debouncer.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/EventTarget.js +0 -14
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Gzip.js +0 -77
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Lazy.js +0 -29
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +0 -22
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Mutex.js +0 -49
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Object.js +0 -91
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +0 -452
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Progress.js +0 -144
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +0 -69
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResourceType.js +0 -501
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +0 -15
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -159
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Runnable.js +0 -24
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +0 -78
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +0 -164
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Settings.js +0 -1273
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +0 -97
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +0 -14
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +0 -40
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Throttler.js +0 -71
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Trie.js +0 -127
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/common.js +0 -41
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/AidaClient.js +0 -458
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +0 -66
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/GdpClient.js +0 -202
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +0 -92
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +0 -69
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +0 -438
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/Platform.js +0 -61
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +0 -220
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +0 -975
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/host.js +0 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/ByteUtilities.js +0 -72
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/DevToolsLocale.js +0 -64
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/NumberFormatter.js +0 -67
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +0 -72
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +0 -50
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18n.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18nImpl.js +0 -135
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/i18nTypes.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/locales.js +0 -14
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/time-utilities.js +0 -148
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +0 -209
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Brand.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Constructor.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +0 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +0 -27
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +0 -19
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +0 -79
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/MimeType.js +0 -143
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +0 -72
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +0 -589
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/Timing.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +0 -157
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +0 -24
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/UIString.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +0 -22
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/api/api.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +0 -63
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +0 -72
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/node/node.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/platform.js +0 -26
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +0 -18
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +0 -12
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +0 -138
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +0 -542
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +0 -8
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +0 -54
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/ExperimentNames.js +0 -30
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/Runtime.js +0 -11
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/root.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +0 -281
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -841
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +0 -155
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +0 -99
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +0 -217
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +0 -98
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +0 -31
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +0 -22
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +0 -1378
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +0 -100
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +0 -1532
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +0 -923
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +0 -312
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +0 -574
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +0 -1352
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +0 -53
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +0 -403
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +0 -22
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +0 -275
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +0 -166
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +0 -24
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +0 -29
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +0 -236
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +0 -47
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Connections.js +0 -205
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -627
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +0 -14
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +0 -241
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +0 -198
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +0 -163
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +0 -597
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +0 -1792
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +0 -1182
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +0 -527
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +0 -364
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +0 -127
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +0 -199
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +0 -137
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +0 -75
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +0 -80
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +0 -208
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +0 -41
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +0 -95
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +0 -34
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +0 -2238
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +0 -1645
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +0 -48
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +0 -778
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +0 -384
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +0 -25
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +0 -310
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +0 -67
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +0 -62
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +0 -608
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +0 -417
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +0 -908
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Resource.js +0 -163
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +0 -926
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +0 -535
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +0 -45
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +0 -36
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +0 -176
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Script.js +0 -420
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +0 -54
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +0 -67
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +0 -113
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +0 -216
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +0 -271
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +0 -511
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +0 -696
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +0 -57
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +0 -132
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +0 -201
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +0 -156
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +0 -494
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +0 -143
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +0 -53
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Target.js +0 -259
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +0 -395
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +0 -55
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +0 -66
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +0 -1166
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/sdk.js +0 -91
- package/build/vendor/chrome-devtools-frontend/front_end/foundation/Universe.js +0 -34
- package/build/vendor/chrome-devtools-frontend/front_end/foundation/foundation.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +0 -2634
- package/build/vendor/chrome-devtools-frontend/front_end/generated/Deprecation.js +0 -369
- package/build/vendor/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +0 -1592
- package/build/vendor/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +0 -7744
- package/build/vendor/chrome-devtools-frontend/front_end/generated/protocol.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +0 -290
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +0 -989
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +0 -735
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +0 -139
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +0 -412
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +0 -131
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +0 -149
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationRepository.js +0 -163
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationType.js +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/annotations.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +0 -245
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +0 -488
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +0 -130
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +0 -963
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +0 -554
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +0 -112
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +0 -186
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +0 -60
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +0 -107
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +0 -244
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +0 -564
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +0 -437
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +0 -87
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +0 -182
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +0 -268
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +0 -55
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/bindings.js +0 -20
- package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +0 -516
- package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +0 -89
- package/build/vendor/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +0 -285
- package/build/vendor/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +0 -775
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +0 -1720
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/emulation.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +0 -148
- package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +0 -77
- package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/formatter.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +0 -347
- package/build/vendor/chrome-devtools-frontend/front_end/models/geometry/geometry.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/Prototypes.js +0 -33
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/greendev.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/AttributionReportingIssue.js +0 -201
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/BounceTrackingIssue.js +0 -49
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CheckFormsIssuesTrigger.js +0 -31
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ClientHintIssue.js +0 -71
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContentSecurityPolicyIssue.js +0 -135
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +0 -59
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieDeprecationMetadataIssue.js +0 -58
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +0 -493
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +0 -207
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.js +0 -110
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/DeprecationIssue.js +0 -90
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ElementAccessibilityIssue.js +0 -95
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthRequestIssue.js +0 -231
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.js +0 -141
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/GenericIssue.js +0 -212
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/HeavyAdIssue.js +0 -52
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/Issue.js +0 -152
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +0 -322
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueResolver.js +0 -40
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +0 -410
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManagerEvents.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/LowTextContrastIssue.js +0 -48
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/MarkdownIssueDescription.js +0 -104
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/MixedContentIssue.js +0 -55
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PartitioningBlobURLIssue.js +0 -58
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PermissionElementIssue.js +0 -243
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PropertyRuleIssue.js +0 -58
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/QuirksModeIssue.js +0 -48
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/RelatedIssue.js +0 -70
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SRIMessageSignatureIssue.js +0 -87
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SharedArrayBufferIssue.js +0 -49
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SharedDictionaryIssue.js +0 -292
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/SourceFrameIssuesManager.js +0 -81
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/StylesheetLoadingIssue.js +0 -59
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/UnencodedDigestIssue.js +0 -62
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsInsecurePrivateNetwork.md +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPreflightAllowPrivateNetworkError.md +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPrivateNetworkPermissionDenied.md +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +0 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +0 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataNoResponse.md +0 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +0 -36
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/LogManager.js +0 -67
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -486
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +0 -49
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +0 -73
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/logs.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +0 -256
- package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +0 -122
- package/build/vendor/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +0 -192
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +0 -618
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +0 -59
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +0 -33
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +0 -136
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +0 -149
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +0 -121
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +0 -32
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +0 -173
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +0 -30
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +0 -32
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +0 -79
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/Text.js +0 -69
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +0 -35
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +0 -231
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +0 -355
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +0 -68
- package/build/vendor/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +0 -14
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +0 -122
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +0 -89
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +0 -371
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -166
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Name.js +0 -114
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Processor.js +0 -554
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Styles.js +0 -823
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +0 -44
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +0 -46
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +0 -76
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +0 -162
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +0 -191
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +0 -118
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +0 -50
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +0 -600
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +0 -11
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +0 -109
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +0 -26
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +0 -187
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +0 -162
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +0 -263
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +0 -148
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +0 -485
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +0 -35
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +0 -147
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +0 -180
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +0 -126
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +0 -85
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +0 -27
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +0 -103
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +0 -449
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +0 -410
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +0 -33
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +0 -575
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +0 -42
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +0 -366
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +0 -346
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +0 -260
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +0 -97
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +0 -276
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +0 -71
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +0 -101
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +0 -317
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +0 -183
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +0 -134
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +0 -33
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +0 -163
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +0 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +0 -41
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +0 -102
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +0 -495
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +0 -74
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +0 -193
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +0 -820
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +0 -254
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +0 -489
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +0 -209
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +0 -335
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +0 -181
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +0 -258
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +0 -90
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +0 -82
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +0 -161
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +0 -129
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +0 -263
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +0 -199
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +0 -181
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +0 -90
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +0 -200
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +0 -546
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +0 -192
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +0 -136
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +0 -92
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +0 -98
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +0 -102
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/types.js +0 -18
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +0 -488
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +0 -276
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +0 -63
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +0 -82
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +0 -551
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +0 -136
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +0 -67
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +0 -68
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +0 -48
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +0 -68
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +0 -101
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +0 -64
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +0 -78
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +0 -11
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +0 -115
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +0 -42
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +0 -47
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +0 -134
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +0 -450
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +0 -154
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +0 -24
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/trace.js +0 -17
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +0 -18
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +0 -37
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/File.js +0 -57
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +0 -15
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +0 -602
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/types.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +0 -224
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +0 -64
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +0 -504
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +0 -113
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +0 -601
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +0 -201
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +0 -34
- package/build/vendor/chrome-devtools-frontend/front_end/models/workspace/workspace.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +0 -1
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/LICENSE +0 -202
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/i18n-impl.js +0 -46
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/i18n.js +0 -6
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/i18n/localized-string-set.js +0 -122
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/LICENSE +0 -33
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/intl-messageformat.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/index.js +0 -13
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +0 -1725
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +0 -1840
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/index.js +0 -10
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/core.js +0 -233
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/error.js +0 -48
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +0 -177
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/core.js +0 -236
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/error.js +0 -51
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/formatters.js +0 -182
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +0 -202
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +0 -940
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/LICENSE +0 -39
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/marked.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/bin/main.js +0 -255
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/bin/marked.js +0 -11
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.esm.js +0 -2695
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.js +0 -2233
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.umd.js +0 -2719
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Lexer.js +0 -453
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Parser.js +0 -233
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Renderer.js +0 -137
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Slugger.js +0 -46
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/TextRenderer.js +0 -34
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/Tokenizer.js +0 -683
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/defaults.js +0 -27
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/helpers.js +0 -240
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/marked.js +0 -318
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/marked/package/src/rules.js +0 -243
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +0 -26
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +0 -196
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +0 -226
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +0 -427
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +0 -24
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +0 -283
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +0 -7
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +0 -9
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +0 -84
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +0 -20
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +0 -146
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +0 -118
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +0 -40
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +0 -26
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +0 -215
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +0 -2
- package/build/vendor/chrome-devtools-frontend/mcp/HostBindings.js +0 -226
- package/build/vendor/chrome-devtools-frontend/mcp/mcp.js +0 -39
- /package/build/src/telemetry/{watchdog-client.js → WatchdogClient.js} +0 -0
- /package/build/src/telemetry/{flag-utils.js → flagUtils.js} +0 -0
- /package/build/src/telemetry/{metric-utils.js → metricUtils.js} +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameOrigin.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepCorpNotSameSite.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CoepFrameResourceNeedsCoepHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CompatibilityModeQuirks.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/CookieAttributeValueExceedsMaxSize.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/LowTextContrast.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeContextDowngradeRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeContextDowngradeSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteExcludeNavigationContextDowngrade.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureErrorRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureErrorSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureWarnRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteNoneInsecureWarnSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteUnspecifiedLaxAllowUnsafeRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteUnspecifiedLaxAllowUnsafeSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnCrossDowngradeRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnCrossDowngradeSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/SameSiteWarnStrictLaxDowngradeStrict.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInsecureContext.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidInfoHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterOsSourceHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterOsTriggerHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterSourceHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arInvalidRegisterTriggerHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNavigationRegistrationWithoutTransientUserActivation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterOsSourceHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterOsTriggerHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterSourceHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoRegisterTriggerHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arNoWebOrOsSupport.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arOsSourceIgnored.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arOsTriggerIgnored.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arPermissionPolicyDisabled.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arSourceAndTriggerHeaders.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arSourceIgnored.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arTriggerIgnored.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arUntrustworthyReportingOrigin.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/arWebAndOsHeaders.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/bounceTrackingMitigations.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/clientHintMetaTagAllowListInvalidOrigin.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/clientHintMetaTagModifiedHTML.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieCrossSiteRedirectDowngrade.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeBlockedWithinRelatedWebsiteSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeDomainNonAscii.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludePortMismatch.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeSchemeMismatch.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeThirdPartyPhaseoutRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieExcludeThirdPartyPhaseoutSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnDomainNonAscii.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnMetadataGrantRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnMetadataGrantSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnThirdPartyPhaseoutRead.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cookieWarnThirdPartyPhaseoutSet.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsAllowCredentialsRequired.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsDisabledScheme.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsDisallowedByMode.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsHeaderDisallowedByPreflightResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsInvalidHeaderValues.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsMethodDisallowedByPreflightResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsNoCorsRedirectModeNotFollow.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsOriginMismatch.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsPreflightResponseInvalid.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsRedirectContainsCredentials.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/corsWildcardOriginNotAllowed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspEvalViolation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspInlineViolation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspTrustedTypesPolicyViolation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspTrustedTypesSinkViolation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/cspURLViolation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/deprecation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsHttpNotFound.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsInvalidResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestAccountsNoResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestApprovalDeclined.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestCanceled.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestErrorFetchingSignin.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestErrorIdToken.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenHttpNotFound.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenInvalidRequest.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenInvalidResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestIdTokenNoResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestInvalidSigninResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestHttpNotFound.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestInvalidResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestManifestNoResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthRequestTooManyRequests.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestInvalidAccountsResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoAccountSharingPermission.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoApiPermission.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotIframe.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotSameOrigin.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/federatedAuthUserInfoRequestNotSignedInWithIdp.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/fetchingPartitionedBlobURL.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormAriaLabelledByToNonExistingIdError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormAutocompleteAttributeEmptyError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormDuplicateIdForInputError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormEmptyIdAndNameAttributesForInputError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormInputWithNoLabelError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelForMatchesNonExistingIdError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelForNameError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericFormLabelHasNeitherForNorNestedInputError.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericNavigationEntryMarkedSkippable.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/genericResponseWasBlockedByORB.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/heavyAd.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/mixedContent.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/navigatingPartitionedBlobURL.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabled.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabledWithOccluder.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementActivationDisabledWithOccluderParent.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementCspFrameAncestorsMissing.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFencedFrameDisallowed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFontSizeTooLarge.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementFontSizeTooSmall.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementGeolocationDeprecated.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInsetBoxShadowUnsupported.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidDisplayStyle.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidSizeValue.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidType.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementInvalidTypeActivation.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementLowContrast.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementNonOpaqueColor.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPaddingBottomUnsupported.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPaddingRightUnsupported.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementPermissionsPolicyBlocked.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementRegistrationFailed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementRequestInProgress.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementSecurityChecksFailed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementTypeNotSupported.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/permissionElementUntrustedEvent.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/placeholderDescriptionForInvisibleIssues.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/propertyRuleInvalidNameIssue.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/propertyRuleIssue.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityDisallowedOptGroupChild.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityDisallowedSelectChild.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentLegendChild.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityInteractiveContentOptionChild.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/selectElementAccessibilityNonPhrasingContentOptionChild.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedArrayBuffer.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorDictionaryLoadFailure.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorDisallowedBySettings.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorExpiredResponse.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorFeatureDisabled.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInsufficientResources.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidMatchField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidStructuredHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorInvalidTTLField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNavigationRequest.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNoMatchField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonIntegerTTLField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonListMatchDestField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonSecureContext.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringIdField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringInMatchDestList.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonStringMatchField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorNonTokenTypeField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorRequestAborted.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorShuttingDown.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorTooLongIdField.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sharedDictionaryWriteErrorUnsupportedType.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriInvalidSignatureHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriInvalidSignatureInputHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriMissingSignatureHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriMissingSignatureInputHeader.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsIncorrectLength.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsNotByteSequence.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureHeaderValueIsParameterized.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidComponentName.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidComponentType.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderInvalidParameter.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderKeyIdLength.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderMissingLabel.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderMissingRequiredParameters.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderValueMissingComponents.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriSignatureInputHeaderValueNotInnerList.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedIntegrityMismatch.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedInvalidLength.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedSignatureExpired.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/sriValidationFailedSignatureMismatch.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/stylesheetLateImport.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/stylesheetRequestFailed.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestIncorrectDigestLength.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestIncorrectDigestType.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestMalformedDictionary.md +0 -0
- /package/build/{vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions → src/third_party/issue-descriptions}/unencodedDigestUnknownAlgorithm.md +0 -0
package/build/src/McpContext.js
CHANGED
|
@@ -4,29 +4,19 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import fs from 'node:fs/promises';
|
|
7
|
-
import os from 'node:os';
|
|
8
7
|
import path from 'node:path';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { ToolListChangedNotificationSchema } from './third_party/index.js';
|
|
8
|
+
import { UniverseManager } from './DevtoolsUtils.js';
|
|
9
|
+
import { McpPage } from './McpPage.js';
|
|
12
10
|
import { NetworkCollector, ConsoleCollector } from './PageCollector.js';
|
|
13
|
-
import { WEB_MCP_BRIDGE_SCRIPT } from './transports/WebMCPBridgeScript.js';
|
|
14
|
-
import { WebMCPClientTransport } from './transports/WebMCPClientTransport.js';
|
|
15
11
|
import { Locator } from './third_party/index.js';
|
|
12
|
+
import { PredefinedNetworkConditions } from './third_party/index.js';
|
|
16
13
|
import { listPages } from './tools/pages.js';
|
|
17
|
-
import { takeSnapshot } from './tools/snapshot.js';
|
|
18
14
|
import { CLOSE_PAGE_ERROR } from './tools/ToolDefinition.js';
|
|
15
|
+
import { ExtensionRegistry, } from './utils/ExtensionRegistry.js';
|
|
16
|
+
import { saveTemporaryFile } from './utils/files.js';
|
|
19
17
|
import { WaitForHelper } from './WaitForHelper.js';
|
|
20
|
-
/** Default timeout for page operations in milliseconds. */
|
|
21
18
|
const DEFAULT_TIMEOUT = 5_000;
|
|
22
|
-
/** Default timeout for navigation operations in milliseconds. */
|
|
23
19
|
const NAVIGATION_TIMEOUT = 10_000;
|
|
24
|
-
/**
|
|
25
|
-
* Get the timeout multiplier for a given network condition.
|
|
26
|
-
*
|
|
27
|
-
* @param condition - The network condition name (e.g., "Fast 4G", "Slow 3G").
|
|
28
|
-
* @returns Multiplier to apply to timeouts (1 = no slowdown, 10 = max slowdown).
|
|
29
|
-
*/
|
|
30
20
|
function getNetworkMultiplierFromString(condition) {
|
|
31
21
|
const puppeteerCondition = condition;
|
|
32
22
|
switch (puppeteerCondition) {
|
|
@@ -41,71 +31,31 @@ function getNetworkMultiplierFromString(condition) {
|
|
|
41
31
|
}
|
|
42
32
|
return 1;
|
|
43
33
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Get the file extension for a given MIME type.
|
|
46
|
-
*
|
|
47
|
-
* @param mimeType - The MIME type (e.g., "image/png").
|
|
48
|
-
* @returns The corresponding file extension without the dot.
|
|
49
|
-
* @throws Error if the MIME type is not supported.
|
|
50
|
-
*/
|
|
51
|
-
function getExtensionFromMimeType(mimeType) {
|
|
52
|
-
switch (mimeType) {
|
|
53
|
-
case 'image/png':
|
|
54
|
-
return 'png';
|
|
55
|
-
case 'image/jpeg':
|
|
56
|
-
return 'jpeg';
|
|
57
|
-
case 'image/webp':
|
|
58
|
-
return 'webp';
|
|
59
|
-
}
|
|
60
|
-
throw new Error(`No mapping for Mime type ${mimeType}.`);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Central context for MCP operations on a browser instance.
|
|
64
|
-
*
|
|
65
|
-
* Manages page state, accessibility snapshots, network/console collection,
|
|
66
|
-
* WebMCP connections, and tool registration. This class serves as the primary
|
|
67
|
-
* interface between MCP tools and the browser.
|
|
68
|
-
*/
|
|
69
34
|
export class McpContext {
|
|
70
35
|
browser;
|
|
71
36
|
logger;
|
|
72
|
-
|
|
37
|
+
// Maps LLM-provided isolatedContext name → Puppeteer BrowserContext.
|
|
38
|
+
#isolatedContexts = new Map();
|
|
39
|
+
// Auto-generated name counter for when no name is provided.
|
|
40
|
+
#nextIsolatedContextId = 1;
|
|
73
41
|
#pages = [];
|
|
74
|
-
|
|
75
|
-
#
|
|
76
|
-
/** Currently selected page for tool operations. */
|
|
42
|
+
#extensionServiceWorkers = [];
|
|
43
|
+
#mcpPages = new Map();
|
|
77
44
|
#selectedPage;
|
|
78
|
-
/**
|
|
79
|
-
* Whether the selected page has been explicitly set for this session.
|
|
80
|
-
* When true, createPagesSnapshot() won't auto-switch to pages[0].
|
|
81
|
-
* This prevents MCP sessions from interfering with each other in shared browsers.
|
|
82
|
-
*/
|
|
83
|
-
#pageExplicitlySelected = false;
|
|
84
|
-
/** Most recent accessibility snapshot of the selected page. */
|
|
85
|
-
#textSnapshot = null;
|
|
86
45
|
#networkCollector;
|
|
87
46
|
#consoleCollector;
|
|
47
|
+
#devtoolsUniverseManager;
|
|
48
|
+
#extensionRegistry = new ExtensionRegistry();
|
|
88
49
|
#isRunningTrace = false;
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
93
|
-
#
|
|
50
|
+
#screenRecorderData = null;
|
|
51
|
+
#nextPageId = 1;
|
|
52
|
+
#extensionPages = new WeakMap();
|
|
53
|
+
#extensionServiceWorkerMap = new WeakMap();
|
|
54
|
+
#nextExtensionServiceWorkerId = 1;
|
|
94
55
|
#nextSnapshotId = 1;
|
|
95
56
|
#traceResults = [];
|
|
96
57
|
#locatorClass;
|
|
97
58
|
#options;
|
|
98
|
-
#webMCPConnections = new WeakMap();
|
|
99
|
-
#toolHub;
|
|
100
|
-
/** Tracks pages that have WebMCP auto-detection listeners installed. */
|
|
101
|
-
#pagesWithWebMCPListeners = new WeakSet();
|
|
102
|
-
/**
|
|
103
|
-
* The windowId that this MCP session owns.
|
|
104
|
-
* When set, page operations are scoped to only pages in this window.
|
|
105
|
-
*/
|
|
106
|
-
#sessionWindowId;
|
|
107
|
-
/** Cached browser-level CDP session for window operations. */
|
|
108
|
-
#browserCdpSession;
|
|
109
59
|
constructor(browser, logger, options, locatorClass) {
|
|
110
60
|
this.browser = browser;
|
|
111
61
|
this.logger = logger;
|
|
@@ -117,315 +67,49 @@ export class McpContext {
|
|
|
117
67
|
console: event => {
|
|
118
68
|
collect(event);
|
|
119
69
|
},
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
collect(event);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
const error = new Error(`${event}`);
|
|
126
|
-
error.stack = undefined;
|
|
127
|
-
collect(error);
|
|
128
|
-
}
|
|
70
|
+
uncaughtError: event => {
|
|
71
|
+
collect(event);
|
|
129
72
|
},
|
|
130
73
|
issue: event => {
|
|
131
74
|
collect(event);
|
|
132
75
|
},
|
|
133
76
|
};
|
|
134
77
|
});
|
|
78
|
+
this.#devtoolsUniverseManager = new UniverseManager(this.browser);
|
|
135
79
|
}
|
|
136
80
|
async #init() {
|
|
137
81
|
const pages = await this.createPagesSnapshot();
|
|
82
|
+
await this.createExtensionServiceWorkersSnapshot();
|
|
138
83
|
await this.#networkCollector.init(pages);
|
|
139
84
|
await this.#consoleCollector.init(pages);
|
|
140
|
-
|
|
141
|
-
await this.#setupWebMCPAutoInject();
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Set up automatic WebMCP bridge injection for all pages.
|
|
145
|
-
* This injects the bridge script into existing pages and configures
|
|
146
|
-
* the browser to inject it into all future pages.
|
|
147
|
-
*/
|
|
148
|
-
async #setupWebMCPAutoInject() {
|
|
149
|
-
try {
|
|
150
|
-
// Get browser-level CDP session to inject into all new pages
|
|
151
|
-
const browserTarget = this.browser.target();
|
|
152
|
-
const cdpSession = await browserTarget.createCDPSession();
|
|
153
|
-
// Inject bridge script into all future pages
|
|
154
|
-
await cdpSession.send('Page.addScriptToEvaluateOnNewDocument', {
|
|
155
|
-
source: WEB_MCP_BRIDGE_SCRIPT,
|
|
156
|
-
});
|
|
157
|
-
this.logger('WebMCP bridge auto-inject configured for new pages');
|
|
158
|
-
// Inject into existing pages (they won't have the auto-inject yet)
|
|
159
|
-
for (const page of this.#pages) {
|
|
160
|
-
try {
|
|
161
|
-
// Skip chrome:// and devtools:// pages
|
|
162
|
-
const url = page.url();
|
|
163
|
-
if (url.startsWith('chrome://') ||
|
|
164
|
-
(!this.#options.includeExtensionPages && url.startsWith('chrome-extension://')) ||
|
|
165
|
-
url.startsWith('devtools://') ||
|
|
166
|
-
url === 'about:blank') {
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
await page.evaluate(WEB_MCP_BRIDGE_SCRIPT);
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
// Page might not be ready or accessible - log for debugging
|
|
173
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
174
|
-
this.logger(`Bridge injection skipped for ${page.url()}: ${message}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
this.logger('WebMCP bridge injected into existing pages');
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
// Non-fatal - auto-inject is a convenience feature
|
|
181
|
-
this.logger('WebMCP auto-inject setup failed:', err);
|
|
182
|
-
}
|
|
85
|
+
await this.#devtoolsUniverseManager.init(pages);
|
|
183
86
|
}
|
|
184
87
|
dispose() {
|
|
185
88
|
this.#networkCollector.dispose();
|
|
186
89
|
this.#consoleCollector.dispose();
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
// when explicitly requested via getWebMCPClient()
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get the WebMCPToolHub instance (for testing purposes)
|
|
205
|
-
*/
|
|
206
|
-
getToolHub() {
|
|
207
|
-
return this.#toolHub;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Get or create a browser-level CDP session for window operations.
|
|
211
|
-
* Recreates the session if it has become invalid.
|
|
212
|
-
*/
|
|
213
|
-
async #getBrowserCdpSession() {
|
|
214
|
-
if (this.#browserCdpSession) {
|
|
215
|
-
// Verify session is still valid by attempting a simple operation
|
|
216
|
-
try {
|
|
217
|
-
await this.#browserCdpSession.send('Browser.getVersion');
|
|
218
|
-
return this.#browserCdpSession;
|
|
219
|
-
}
|
|
220
|
-
catch (err) {
|
|
221
|
-
// Session is stale, recreate it
|
|
222
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
223
|
-
this.logger(`Browser CDP session stale (${message}), recreating...`);
|
|
224
|
-
this.#browserCdpSession = undefined;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
this.#browserCdpSession = await this.browser.target().createCDPSession();
|
|
228
|
-
return this.#browserCdpSession;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Get the windowId for a given page using CDP.
|
|
232
|
-
*/
|
|
233
|
-
async getWindowIdForPage(page) {
|
|
234
|
-
const cdpSession = await this.#getBrowserCdpSession();
|
|
235
|
-
// @ts-expect-error _targetId is internal but stable
|
|
236
|
-
const targetId = page.target()._targetId;
|
|
237
|
-
const { windowId } = await cdpSession.send('Browser.getWindowForTarget', {
|
|
238
|
-
targetId,
|
|
239
|
-
});
|
|
240
|
-
return windowId;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Set the window that this session owns.
|
|
244
|
-
* When set, page operations are scoped to only pages in this window.
|
|
245
|
-
*/
|
|
246
|
-
setSessionWindowId(windowId) {
|
|
247
|
-
this.#sessionWindowId = windowId;
|
|
248
|
-
this.logger(`Session bound to windowId: ${windowId}`);
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Get the session's window ID, or undefined if not set.
|
|
252
|
-
*/
|
|
253
|
-
getSessionWindowId() {
|
|
254
|
-
return this.#sessionWindowId;
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Close all pages in the session's window.
|
|
258
|
-
* Called during cleanup when the MCP server is shutting down.
|
|
259
|
-
*/
|
|
260
|
-
async closeSessionWindow() {
|
|
261
|
-
if (this.#sessionWindowId === undefined) {
|
|
262
|
-
this.logger('No session window to close');
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
this.logger(`Closing session window ${this.#sessionWindowId}...`);
|
|
266
|
-
// Get all pages in this session's window and close them
|
|
267
|
-
const pagesToClose = [...this.#pages];
|
|
268
|
-
for (const page of pagesToClose) {
|
|
269
|
-
try {
|
|
270
|
-
if (!page.isClosed()) {
|
|
271
|
-
await page.close();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (err) {
|
|
275
|
-
// Ignore errors during cleanup - page might already be closed
|
|
276
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
277
|
-
this.logger(`Error closing page during cleanup: ${message}`);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// Clean up the CDP session
|
|
281
|
-
if (this.#browserCdpSession) {
|
|
282
|
-
try {
|
|
283
|
-
await this.#browserCdpSession.detach();
|
|
284
|
-
}
|
|
285
|
-
catch (err) {
|
|
286
|
-
// Detach errors during cleanup are expected - log for debugging
|
|
287
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
288
|
-
this.logger(`CDP detach during cleanup: ${message}`);
|
|
289
|
-
}
|
|
290
|
-
this.#browserCdpSession = undefined;
|
|
291
|
-
}
|
|
292
|
-
this.logger('Session window closed');
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Set up automatic WebMCP detection for a page.
|
|
296
|
-
* This installs listeners that detect WebMCP after navigation and sync tools.
|
|
297
|
-
*/
|
|
298
|
-
#setupWebMCPAutoDetection(page) {
|
|
299
|
-
// Skip if listeners already installed
|
|
300
|
-
if (this.#pagesWithWebMCPListeners.has(page)) {
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
// Skip chrome:// and devtools:// pages
|
|
304
|
-
const url = page.url();
|
|
305
|
-
if (url.startsWith('chrome://') ||
|
|
306
|
-
(!this.#options.includeExtensionPages && url.startsWith('chrome-extension://')) ||
|
|
307
|
-
url.startsWith('devtools://')) {
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
this.#pagesWithWebMCPListeners.add(page);
|
|
311
|
-
// Handler for frame navigation - detect WebMCP after main frame navigates
|
|
312
|
-
const onFrameNavigated = async (frame) => {
|
|
313
|
-
// Only handle main frame navigation
|
|
314
|
-
// @ts-expect-error Frame type not exported
|
|
315
|
-
if (frame.parentFrame?.() !== null) {
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
// Skip internal pages
|
|
319
|
-
const newUrl = page.url();
|
|
320
|
-
if (newUrl.startsWith('chrome://') ||
|
|
321
|
-
(!this.#options.includeExtensionPages && newUrl.startsWith('chrome-extension://')) ||
|
|
322
|
-
newUrl.startsWith('devtools://') ||
|
|
323
|
-
newUrl === 'about:blank') {
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
// Immediately try to connect - no polling needed
|
|
327
|
-
// If no WebMCP, connection will timeout gracefully
|
|
328
|
-
this.#tryConnectWebMCP(page).catch(err => {
|
|
329
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
330
|
-
// Differentiate expected timeouts from unexpected errors
|
|
331
|
-
const isExpected = message.includes('timeout') ||
|
|
332
|
-
message.includes('WebMCP not detected') ||
|
|
333
|
-
message.includes('server did not respond');
|
|
334
|
-
if (isExpected) {
|
|
335
|
-
this.logger(`No WebMCP detected after navigation: ${page.url()}`);
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
this.logger(`Unexpected WebMCP connection error for ${page.url()}: ${message}`);
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
};
|
|
342
|
-
page.on('framenavigated', onFrameNavigated);
|
|
343
|
-
// Clean up listener when page closes
|
|
344
|
-
page.once('close', () => {
|
|
345
|
-
page.off('framenavigated', onFrameNavigated);
|
|
346
|
-
this.#pagesWithWebMCPListeners.delete(page);
|
|
347
|
-
});
|
|
348
|
-
this.logger(`WebMCP auto-detection listener installed for page: ${url}`);
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Attempt to connect to WebMCP on a page without pre-checking.
|
|
352
|
-
* Uses the extension's approach: just try to connect, handle failure gracefully.
|
|
353
|
-
*
|
|
354
|
-
* This matches the WebMCP extension's behavior:
|
|
355
|
-
* - No pre-flight detection polling
|
|
356
|
-
* - Immediate connection attempt
|
|
357
|
-
* - Graceful handling if no server exists
|
|
358
|
-
* - Notification-based syncing when tools appear later
|
|
359
|
-
*
|
|
360
|
-
* Reference: /WebMCP/apps/extension/entrypoints/content/connection.ts lines 88-118
|
|
361
|
-
*/
|
|
362
|
-
async #tryConnectWebMCP(page) {
|
|
363
|
-
// Skip if tool hub is not enabled
|
|
364
|
-
if (!this.#toolHub?.isEnabled()) {
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
try {
|
|
368
|
-
// Immediately try to get/create WebMCP client
|
|
369
|
-
// Transport is configured with requireWebMCP: false and 30s timeout in getWebMCPClient
|
|
370
|
-
const result = await this.getWebMCPClient(page);
|
|
371
|
-
if (result.connected) {
|
|
372
|
-
this.logger(`WebMCP connected for page: ${page.url()}`);
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
// This is normal for pages without WebMCP
|
|
376
|
-
this.logger(`No WebMCP on page: ${page.url()}`);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
catch (err) {
|
|
380
|
-
// Connection timeout or error is expected on pages without WebMCP
|
|
381
|
-
this.logger(`WebMCP connection failed for ${page.url()} (normal if page has no WebMCP):`, err);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Set up WebMCP auto-detection for all current pages.
|
|
386
|
-
* Called during initialization and when tool hub is set.
|
|
387
|
-
*/
|
|
388
|
-
async #setupWebMCPAutoDetectionForAllPages() {
|
|
389
|
-
for (const page of this.#pages) {
|
|
390
|
-
this.#setupWebMCPAutoDetection(page);
|
|
391
|
-
// Try to connect immediately (don't await - run in parallel for all pages)
|
|
392
|
-
this.#tryConnectWebMCP(page).catch(err => {
|
|
393
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
394
|
-
// Differentiate expected timeouts from unexpected errors
|
|
395
|
-
const isExpected = message.includes('timeout') ||
|
|
396
|
-
message.includes('WebMCP not detected') ||
|
|
397
|
-
message.includes('server did not respond');
|
|
398
|
-
if (isExpected) {
|
|
399
|
-
this.logger(`No WebMCP on page during initial scan: ${page.url()}`);
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
this.logger(`Unexpected error during initial WebMCP scan for ${page.url()}: ${message}`);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Create a new McpContext instance.
|
|
409
|
-
*
|
|
410
|
-
* @param browser - Puppeteer browser instance to operate on.
|
|
411
|
-
* @param logger - Debug logger for internal operations.
|
|
412
|
-
* @param opts - Configuration options.
|
|
413
|
-
* @param locatorClass - Locator class to use (injectable for testing with
|
|
414
|
-
* unbundled Puppeteer to avoid class instance mismatch errors).
|
|
415
|
-
* @returns Initialized McpContext ready for use.
|
|
416
|
-
*/
|
|
417
|
-
static async from(browser, logger, opts, locatorClass = Locator) {
|
|
90
|
+
this.#devtoolsUniverseManager.dispose();
|
|
91
|
+
for (const mcpPage of this.#mcpPages.values()) {
|
|
92
|
+
mcpPage.dispose();
|
|
93
|
+
}
|
|
94
|
+
this.#mcpPages.clear();
|
|
95
|
+
// Isolated contexts are intentionally not closed here.
|
|
96
|
+
// Either the entire browser will be closed or we disconnect
|
|
97
|
+
// without destroying browser state.
|
|
98
|
+
this.#isolatedContexts.clear();
|
|
99
|
+
}
|
|
100
|
+
static async from(browser, logger, opts,
|
|
101
|
+
/* Let tests use unbundled Locator class to avoid overly strict checks within puppeteer that fail when mixing bundled and unbundled class instances */
|
|
102
|
+
locatorClass = Locator) {
|
|
418
103
|
const context = new McpContext(browser, logger, opts, locatorClass);
|
|
419
104
|
await context.#init();
|
|
420
105
|
return context;
|
|
421
106
|
}
|
|
422
|
-
resolveCdpRequestId(cdpRequestId) {
|
|
423
|
-
const selectedPage = this.getSelectedPage();
|
|
107
|
+
resolveCdpRequestId(page, cdpRequestId) {
|
|
424
108
|
if (!cdpRequestId) {
|
|
425
109
|
this.logger('no network request');
|
|
426
110
|
return;
|
|
427
111
|
}
|
|
428
|
-
const request = this.#networkCollector.find(
|
|
112
|
+
const request = this.#networkCollector.find(page.pptrPage, request => {
|
|
429
113
|
// @ts-expect-error id is internal.
|
|
430
114
|
return request.id === cdpRequestId;
|
|
431
115
|
});
|
|
@@ -435,24 +119,18 @@ export class McpContext {
|
|
|
435
119
|
}
|
|
436
120
|
return this.#networkCollector.getIdForResource(request);
|
|
437
121
|
}
|
|
438
|
-
|
|
439
|
-
* Resolve a CDP backend node ID to a snapshot element UID.
|
|
440
|
-
*
|
|
441
|
-
* @param cdpBackendNodeId - The CDP backend node ID from DevTools.
|
|
442
|
-
* @returns The corresponding snapshot UID, or undefined if not found.
|
|
443
|
-
*
|
|
444
|
-
* @todo Optimize with a backendNodeId index instead of tree traversal.
|
|
445
|
-
*/
|
|
446
|
-
resolveCdpElementId(cdpBackendNodeId) {
|
|
122
|
+
resolveCdpElementId(page, cdpBackendNodeId) {
|
|
447
123
|
if (!cdpBackendNodeId) {
|
|
448
124
|
this.logger('no cdpBackendNodeId');
|
|
449
125
|
return;
|
|
450
126
|
}
|
|
451
|
-
|
|
127
|
+
const snapshot = page.textSnapshot;
|
|
128
|
+
if (!snapshot) {
|
|
452
129
|
this.logger('no text snapshot');
|
|
453
130
|
return;
|
|
454
131
|
}
|
|
455
|
-
|
|
132
|
+
// TODO: index by backendNodeId instead.
|
|
133
|
+
const queue = [snapshot.root];
|
|
456
134
|
while (queue.length) {
|
|
457
135
|
const current = queue.pop();
|
|
458
136
|
if (current.backendNodeId === cdpBackendNodeId) {
|
|
@@ -464,172 +142,135 @@ export class McpContext {
|
|
|
464
142
|
}
|
|
465
143
|
return;
|
|
466
144
|
}
|
|
467
|
-
getNetworkRequests(includePreservedRequests) {
|
|
468
|
-
|
|
469
|
-
|
|
145
|
+
getNetworkRequests(page, includePreservedRequests) {
|
|
146
|
+
return this.#networkCollector.getData(page.pptrPage, includePreservedRequests);
|
|
147
|
+
}
|
|
148
|
+
getConsoleData(page, includePreservedMessages) {
|
|
149
|
+
return this.#consoleCollector.getData(page.pptrPage, includePreservedMessages);
|
|
470
150
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
return this.#consoleCollector.getData(page, includePreservedMessages);
|
|
151
|
+
getDevToolsUniverse(page) {
|
|
152
|
+
return this.#devtoolsUniverseManager.get(page.pptrPage);
|
|
474
153
|
}
|
|
475
154
|
getConsoleMessageStableId(message) {
|
|
476
155
|
return this.#consoleCollector.getIdForResource(message);
|
|
477
156
|
}
|
|
478
|
-
getConsoleMessageById(id) {
|
|
479
|
-
return this.#consoleCollector.getById(
|
|
157
|
+
getConsoleMessageById(page, id) {
|
|
158
|
+
return this.#consoleCollector.getById(page.pptrPage, id);
|
|
480
159
|
}
|
|
481
|
-
async newPage() {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
await existingPage.bringToFront();
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
catch (err) {
|
|
492
|
-
// Best effort - focus might fail if page is closing
|
|
493
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
494
|
-
this.logger(`Window focus failed (non-critical): ${message}`);
|
|
160
|
+
async newPage(background, isolatedContextName) {
|
|
161
|
+
let page;
|
|
162
|
+
if (isolatedContextName !== undefined) {
|
|
163
|
+
let ctx = this.#isolatedContexts.get(isolatedContextName);
|
|
164
|
+
if (!ctx) {
|
|
165
|
+
ctx = await this.browser.createBrowserContext();
|
|
166
|
+
this.#isolatedContexts.set(isolatedContextName, ctx);
|
|
495
167
|
}
|
|
168
|
+
page = await ctx.newPage();
|
|
496
169
|
}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
if (this.#sessionWindowId !== undefined) {
|
|
500
|
-
try {
|
|
501
|
-
const newPageWindowId = await this.getWindowIdForPage(page);
|
|
502
|
-
if (newPageWindowId !== this.#sessionWindowId) {
|
|
503
|
-
// New tab went to wrong window - this is a known Chrome behavior issue
|
|
504
|
-
this.logger(`Warning: new_page created tab in window ${newPageWindowId} instead of session window ${this.#sessionWindowId}. ` +
|
|
505
|
-
`Tab may not be visible in list_pages.`);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
catch (err) {
|
|
509
|
-
// Failed to get windowId - page might be in an unexpected state
|
|
510
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
511
|
-
this.logger(`Window ID check failed (non-critical): ${message}`);
|
|
512
|
-
}
|
|
170
|
+
else {
|
|
171
|
+
page = await this.browser.newPage({ background });
|
|
513
172
|
}
|
|
514
173
|
await this.createPagesSnapshot();
|
|
515
|
-
|
|
516
|
-
this.selectPage(page, true);
|
|
174
|
+
this.selectPage(this.#getMcpPage(page));
|
|
517
175
|
this.#networkCollector.addPage(page);
|
|
518
176
|
this.#consoleCollector.addPage(page);
|
|
519
|
-
|
|
520
|
-
this.#setupWebMCPAutoDetection(page);
|
|
521
|
-
return page;
|
|
177
|
+
return this.#getMcpPage(page);
|
|
522
178
|
}
|
|
523
|
-
async
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
const cdpSession = await browserTarget.createCDPSession();
|
|
527
|
-
// Create a new target with newWindow: true
|
|
528
|
-
const { targetId } = await cdpSession.send('Target.createTarget', {
|
|
529
|
-
url: 'about:blank',
|
|
530
|
-
newWindow: true,
|
|
531
|
-
});
|
|
532
|
-
// Wait for the new page to be available
|
|
533
|
-
const target = await this.browser.waitForTarget(target => {
|
|
534
|
-
// @ts-expect-error _targetId is internal but stable
|
|
535
|
-
return target._targetId === targetId;
|
|
536
|
-
}, { timeout: 5000 });
|
|
537
|
-
const page = await target.page();
|
|
538
|
-
if (!page) {
|
|
539
|
-
throw new Error('Failed to get page from new window target');
|
|
179
|
+
async closePage(pageId) {
|
|
180
|
+
if (this.#pages.length === 1) {
|
|
181
|
+
throw new Error(CLOSE_PAGE_ERROR);
|
|
540
182
|
}
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
183
|
+
const page = this.getPageById(pageId);
|
|
184
|
+
if (page) {
|
|
185
|
+
page.dispose();
|
|
186
|
+
this.#mcpPages.delete(page.pptrPage);
|
|
187
|
+
}
|
|
188
|
+
await page.pptrPage.close({ runBeforeUnload: false });
|
|
189
|
+
}
|
|
190
|
+
getNetworkRequestById(page, reqid) {
|
|
191
|
+
return this.#networkCollector.getById(page.pptrPage, reqid);
|
|
192
|
+
}
|
|
193
|
+
async restoreEmulation(page) {
|
|
194
|
+
const currentSetting = page.emulationSettings;
|
|
195
|
+
await this.emulate(currentSetting, page.pptrPage);
|
|
196
|
+
}
|
|
197
|
+
async emulate(options, targetPage) {
|
|
198
|
+
const page = targetPage ?? this.getSelectedPptrPage();
|
|
199
|
+
const mcpPage = this.#getMcpPage(page);
|
|
200
|
+
const newSettings = { ...mcpPage.emulationSettings };
|
|
201
|
+
if (!options.networkConditions) {
|
|
202
|
+
await page.emulateNetworkConditions(null);
|
|
203
|
+
delete newSettings.networkConditions;
|
|
204
|
+
}
|
|
205
|
+
else if (options.networkConditions === 'Offline') {
|
|
206
|
+
await page.emulateNetworkConditions({
|
|
207
|
+
offline: true,
|
|
208
|
+
download: 0,
|
|
209
|
+
upload: 0,
|
|
210
|
+
latency: 0,
|
|
558
211
|
});
|
|
212
|
+
newSettings.networkConditions = 'Offline';
|
|
559
213
|
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
214
|
+
else if (options.networkConditions in PredefinedNetworkConditions) {
|
|
215
|
+
const networkCondition = PredefinedNetworkConditions[options.networkConditions];
|
|
216
|
+
await page.emulateNetworkConditions(networkCondition);
|
|
217
|
+
newSettings.networkConditions = options.networkConditions;
|
|
563
218
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
this.selectPage(page, true);
|
|
568
|
-
this.#networkCollector.addPage(page);
|
|
569
|
-
this.#consoleCollector.addPage(page);
|
|
570
|
-
// Set up WebMCP auto-detection for the new page
|
|
571
|
-
this.#setupWebMCPAutoDetection(page);
|
|
572
|
-
return { page, windowId };
|
|
573
|
-
}
|
|
574
|
-
async closePage(pageIdx) {
|
|
575
|
-
if (this.#pages.length === 1) {
|
|
576
|
-
throw new Error(CLOSE_PAGE_ERROR);
|
|
219
|
+
if (!options.cpuThrottlingRate) {
|
|
220
|
+
await page.emulateCPUThrottling(1);
|
|
221
|
+
delete newSettings.cpuThrottlingRate;
|
|
577
222
|
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
const page = this.getSelectedPage();
|
|
586
|
-
if (conditions === null) {
|
|
587
|
-
this.#networkConditionsMap.delete(page);
|
|
223
|
+
else {
|
|
224
|
+
await page.emulateCPUThrottling(options.cpuThrottlingRate);
|
|
225
|
+
newSettings.cpuThrottlingRate = options.cpuThrottlingRate;
|
|
226
|
+
}
|
|
227
|
+
if (!options.geolocation) {
|
|
228
|
+
await page.setGeolocation({ latitude: 0, longitude: 0 });
|
|
229
|
+
delete newSettings.geolocation;
|
|
588
230
|
}
|
|
589
231
|
else {
|
|
590
|
-
|
|
232
|
+
await page.setGeolocation(options.geolocation);
|
|
233
|
+
newSettings.geolocation = options.geolocation;
|
|
591
234
|
}
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
const page = this.getSelectedPage();
|
|
596
|
-
return this.#networkConditionsMap.get(page) ?? null;
|
|
597
|
-
}
|
|
598
|
-
setCpuThrottlingRate(rate) {
|
|
599
|
-
const page = this.getSelectedPage();
|
|
600
|
-
this.#cpuThrottlingRateMap.set(page, rate);
|
|
601
|
-
this.#updateSelectedPageTimeouts();
|
|
602
|
-
}
|
|
603
|
-
getCpuThrottlingRate() {
|
|
604
|
-
const page = this.getSelectedPage();
|
|
605
|
-
return this.#cpuThrottlingRateMap.get(page) ?? 1;
|
|
606
|
-
}
|
|
607
|
-
setGeolocation(geolocation) {
|
|
608
|
-
const page = this.getSelectedPage();
|
|
609
|
-
if (geolocation === null) {
|
|
610
|
-
this.#geolocationMap.delete(page);
|
|
235
|
+
if (!options.userAgent) {
|
|
236
|
+
await page.setUserAgent({ userAgent: undefined });
|
|
237
|
+
delete newSettings.userAgent;
|
|
611
238
|
}
|
|
612
239
|
else {
|
|
613
|
-
|
|
240
|
+
await page.setUserAgent({ userAgent: options.userAgent });
|
|
241
|
+
newSettings.userAgent = options.userAgent;
|
|
614
242
|
}
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
async setBypassCSP(enabled) {
|
|
621
|
-
const page = this.getSelectedPage();
|
|
622
|
-
await page.setBypassCSP(enabled);
|
|
623
|
-
if (enabled) {
|
|
624
|
-
this.#bypassCSPMap.set(page, true);
|
|
243
|
+
if (!options.colorScheme || options.colorScheme === 'auto') {
|
|
244
|
+
await page.emulateMediaFeatures([
|
|
245
|
+
{ name: 'prefers-color-scheme', value: '' },
|
|
246
|
+
]);
|
|
247
|
+
delete newSettings.colorScheme;
|
|
625
248
|
}
|
|
626
249
|
else {
|
|
627
|
-
|
|
250
|
+
await page.emulateMediaFeatures([
|
|
251
|
+
{ name: 'prefers-color-scheme', value: options.colorScheme },
|
|
252
|
+
]);
|
|
253
|
+
newSettings.colorScheme = options.colorScheme;
|
|
628
254
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
255
|
+
if (!options.viewport) {
|
|
256
|
+
await page.setViewport(null);
|
|
257
|
+
delete newSettings.viewport;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
const defaults = {
|
|
261
|
+
deviceScaleFactor: 1,
|
|
262
|
+
isMobile: false,
|
|
263
|
+
hasTouch: false,
|
|
264
|
+
isLandscape: false,
|
|
265
|
+
};
|
|
266
|
+
const viewport = { ...defaults, ...options.viewport };
|
|
267
|
+
await page.setViewport(viewport);
|
|
268
|
+
newSettings.viewport = viewport;
|
|
269
|
+
}
|
|
270
|
+
mcpPage.emulationSettings = Object.keys(newSettings).length
|
|
271
|
+
? newSettings
|
|
272
|
+
: {};
|
|
273
|
+
this.#updateSelectedPageTimeouts();
|
|
633
274
|
}
|
|
634
275
|
setIsRunningPerformanceTrace(x) {
|
|
635
276
|
this.#isRunningTrace = x;
|
|
@@ -637,220 +278,227 @@ export class McpContext {
|
|
|
637
278
|
isRunningPerformanceTrace() {
|
|
638
279
|
return this.#isRunningTrace;
|
|
639
280
|
}
|
|
640
|
-
|
|
641
|
-
return this.#
|
|
281
|
+
getScreenRecorder() {
|
|
282
|
+
return this.#screenRecorderData;
|
|
642
283
|
}
|
|
643
|
-
|
|
644
|
-
this.#
|
|
284
|
+
setScreenRecorder(data) {
|
|
285
|
+
this.#screenRecorderData = data;
|
|
645
286
|
}
|
|
646
|
-
|
|
287
|
+
isCruxEnabled() {
|
|
288
|
+
return this.#options.performanceCrux;
|
|
289
|
+
}
|
|
290
|
+
getSelectedPptrPage() {
|
|
647
291
|
const page = this.#selectedPage;
|
|
648
292
|
if (!page) {
|
|
649
293
|
throw new Error('No page selected');
|
|
650
294
|
}
|
|
651
|
-
if (page.isClosed()) {
|
|
652
|
-
throw new Error(`The selected page has been closed. Call ${listPages.name} to see open pages.`);
|
|
295
|
+
if (page.pptrPage.isClosed()) {
|
|
296
|
+
throw new Error(`The selected page has been closed. Call ${listPages().name} to see open pages.`);
|
|
653
297
|
}
|
|
654
|
-
return page;
|
|
298
|
+
return page.pptrPage;
|
|
655
299
|
}
|
|
656
|
-
|
|
657
|
-
const
|
|
658
|
-
|
|
300
|
+
getSelectedMcpPage() {
|
|
301
|
+
const page = this.getSelectedPptrPage();
|
|
302
|
+
return this.#getMcpPage(page);
|
|
303
|
+
}
|
|
304
|
+
getPageById(pageId) {
|
|
305
|
+
const page = this.#mcpPages.values().find(mcpPage => mcpPage.id === pageId);
|
|
659
306
|
if (!page) {
|
|
660
307
|
throw new Error('No page found');
|
|
661
308
|
}
|
|
662
309
|
return page;
|
|
663
310
|
}
|
|
664
|
-
|
|
665
|
-
this.#
|
|
666
|
-
};
|
|
667
|
-
isPageSelected(page) {
|
|
668
|
-
return this.#selectedPage === page;
|
|
311
|
+
getPageId(page) {
|
|
312
|
+
return this.#mcpPages.get(page)?.id;
|
|
669
313
|
}
|
|
670
|
-
|
|
671
|
-
const
|
|
672
|
-
if (
|
|
673
|
-
|
|
314
|
+
#getMcpPage(page) {
|
|
315
|
+
const mcpPage = this.#mcpPages.get(page);
|
|
316
|
+
if (!mcpPage) {
|
|
317
|
+
throw new Error('No McpPage found for the given page.');
|
|
674
318
|
}
|
|
319
|
+
return mcpPage;
|
|
320
|
+
}
|
|
321
|
+
#getSelectedMcpPage() {
|
|
322
|
+
return this.#getMcpPage(this.getSelectedPptrPage());
|
|
323
|
+
}
|
|
324
|
+
isPageSelected(page) {
|
|
325
|
+
return this.#selectedPage?.pptrPage === page;
|
|
326
|
+
}
|
|
327
|
+
selectPage(newPage) {
|
|
675
328
|
this.#selectedPage = newPage;
|
|
676
|
-
if (explicit) {
|
|
677
|
-
// Mark page as explicitly selected to prevent auto-switching
|
|
678
|
-
this.#pageExplicitlySelected = true;
|
|
679
|
-
}
|
|
680
|
-
newPage.on('dialog', this.#dialogHandler);
|
|
681
329
|
this.#updateSelectedPageTimeouts();
|
|
682
330
|
}
|
|
683
331
|
#updateSelectedPageTimeouts() {
|
|
684
|
-
const page = this
|
|
332
|
+
const page = this.#getSelectedMcpPage();
|
|
685
333
|
// For waiters 5sec timeout should be sufficient.
|
|
686
334
|
// Increased in case we throttle the CPU
|
|
687
|
-
const cpuMultiplier =
|
|
688
|
-
page.setDefaultTimeout(DEFAULT_TIMEOUT * cpuMultiplier);
|
|
335
|
+
const cpuMultiplier = page.cpuThrottlingRate;
|
|
336
|
+
page.pptrPage.setDefaultTimeout(DEFAULT_TIMEOUT * cpuMultiplier);
|
|
689
337
|
// 10sec should be enough for the load event to be emitted during
|
|
690
338
|
// navigations.
|
|
691
339
|
// Increased in case we throttle the network requests
|
|
692
|
-
const networkMultiplier = getNetworkMultiplierFromString(
|
|
693
|
-
page.setDefaultNavigationTimeout(NAVIGATION_TIMEOUT * networkMultiplier);
|
|
694
|
-
}
|
|
695
|
-
getNavigationTimeout() {
|
|
696
|
-
const page = this.getSelectedPage();
|
|
697
|
-
return page.getDefaultNavigationTimeout();
|
|
340
|
+
const networkMultiplier = getNetworkMultiplierFromString(page.networkConditions);
|
|
341
|
+
page.pptrPage.setDefaultNavigationTimeout(NAVIGATION_TIMEOUT * networkMultiplier);
|
|
698
342
|
}
|
|
343
|
+
// Linear scan over per-page snapshots. The page count is small (typically
|
|
344
|
+
// 2-10) so a reverse index isn't worthwhile given the uid-reuse lifecycle
|
|
345
|
+
// complexity it would introduce.
|
|
699
346
|
getAXNodeByUid(uid) {
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
}
|
|
706
|
-
const [snapshotId] = uid.split('_');
|
|
707
|
-
if (this.#textSnapshot.snapshotId !== snapshotId) {
|
|
708
|
-
throw new Error(`This uid (${uid}) is from an old snapshot. The page has changed since then. ` +
|
|
709
|
-
'Always call take_snapshot immediately before using UIDs from it. ' +
|
|
710
|
-
'Workflow: 1) take_snapshot, 2) use the UIDs from that response, 3) repeat for each action.');
|
|
711
|
-
}
|
|
712
|
-
const node = this.#textSnapshot?.idToNode.get(uid);
|
|
713
|
-
if (!node) {
|
|
714
|
-
throw new Error('No such element found in the snapshot');
|
|
715
|
-
}
|
|
716
|
-
const handle = await node.elementHandle();
|
|
717
|
-
if (!handle) {
|
|
718
|
-
throw new Error('No such element found in the snapshot');
|
|
347
|
+
for (const mcpPage of this.#mcpPages.values()) {
|
|
348
|
+
const node = mcpPage.textSnapshot?.idToNode.get(uid);
|
|
349
|
+
if (node) {
|
|
350
|
+
return node;
|
|
351
|
+
}
|
|
719
352
|
}
|
|
720
|
-
return
|
|
353
|
+
return undefined;
|
|
721
354
|
}
|
|
722
355
|
/**
|
|
723
|
-
* Creates a snapshot of the
|
|
724
|
-
* If a sessionWindowId is set, only pages from that window are included.
|
|
356
|
+
* Creates a snapshot of the extension service workers.
|
|
725
357
|
*/
|
|
358
|
+
async createExtensionServiceWorkersSnapshot() {
|
|
359
|
+
const allTargets = await this.browser.targets();
|
|
360
|
+
const serviceWorkers = allTargets.filter(target => {
|
|
361
|
+
return (target.type() === 'service_worker' &&
|
|
362
|
+
target.url().includes('chrome-extension://'));
|
|
363
|
+
});
|
|
364
|
+
for (const serviceWorker of serviceWorkers) {
|
|
365
|
+
if (!this.#extensionServiceWorkerMap.has(serviceWorker)) {
|
|
366
|
+
this.#extensionServiceWorkerMap.set(serviceWorker, 'sw-' + this.#nextExtensionServiceWorkerId++);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
this.#extensionServiceWorkers = serviceWorkers.map(serviceWorker => {
|
|
370
|
+
return {
|
|
371
|
+
target: serviceWorker,
|
|
372
|
+
id: this.#extensionServiceWorkerMap.get(serviceWorker),
|
|
373
|
+
url: serviceWorker.url(),
|
|
374
|
+
};
|
|
375
|
+
});
|
|
376
|
+
return this.#extensionServiceWorkers;
|
|
377
|
+
}
|
|
726
378
|
async createPagesSnapshot() {
|
|
727
|
-
const allPages = await this
|
|
728
|
-
this.logger(`createPagesSnapshot: found ${allPages.length} total pages`);
|
|
379
|
+
const { pages: allPages, isolatedContextNames } = await this.#getAllPages();
|
|
729
380
|
for (const page of allPages) {
|
|
730
|
-
this.
|
|
381
|
+
let mcpPage = this.#mcpPages.get(page);
|
|
382
|
+
if (!mcpPage) {
|
|
383
|
+
mcpPage = new McpPage(page, this.#nextPageId++);
|
|
384
|
+
this.#mcpPages.set(page, mcpPage);
|
|
385
|
+
// We emulate a focused page for all pages to support multi-agent workflows.
|
|
386
|
+
void page.emulateFocusedPage(true).catch(error => {
|
|
387
|
+
this.logger('Error turning on focused page emulation', error);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
mcpPage.isolatedContextName = isolatedContextNames.get(page);
|
|
391
|
+
}
|
|
392
|
+
// Prune orphaned #mcpPages entries (pages that no longer exist).
|
|
393
|
+
const currentPages = new Set(allPages);
|
|
394
|
+
for (const [page, mcpPage] of this.#mcpPages) {
|
|
395
|
+
if (!currentPages.has(page)) {
|
|
396
|
+
mcpPage.dispose();
|
|
397
|
+
this.#mcpPages.delete(page);
|
|
398
|
+
}
|
|
731
399
|
}
|
|
732
|
-
|
|
733
|
-
let filteredPages = allPages.filter(page => {
|
|
400
|
+
this.#pages = allPages.filter(page => {
|
|
734
401
|
return (this.#options.experimentalDevToolsDebugging ||
|
|
735
402
|
!page.url().startsWith('devtools://'));
|
|
736
403
|
});
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
404
|
+
if ((!this.#selectedPage ||
|
|
405
|
+
this.#pages.indexOf(this.#selectedPage.pptrPage) === -1) &&
|
|
406
|
+
this.#pages[0]) {
|
|
407
|
+
this.selectPage(this.#getMcpPage(this.#pages[0]));
|
|
408
|
+
}
|
|
409
|
+
await this.detectOpenDevToolsWindows();
|
|
410
|
+
return this.#pages;
|
|
411
|
+
}
|
|
412
|
+
async #getAllPages() {
|
|
413
|
+
const defaultCtx = this.browser.defaultBrowserContext();
|
|
414
|
+
const allPages = await this.browser.pages(this.#options.experimentalIncludeAllPages);
|
|
415
|
+
const allTargets = this.browser.targets();
|
|
416
|
+
const extensionTargets = allTargets.filter(target => {
|
|
417
|
+
return (target.url().startsWith('chrome-extension://') &&
|
|
418
|
+
target.type() === 'page');
|
|
419
|
+
});
|
|
420
|
+
for (const target of extensionTargets) {
|
|
421
|
+
// Right now target.page() returns null for popup and side panel pages.
|
|
422
|
+
let page = await target.page();
|
|
423
|
+
if (!page) {
|
|
424
|
+
// We need to cache pages instances for targets because target.asPage()
|
|
425
|
+
// returns a new page instance every time.
|
|
426
|
+
page = this.#extensionPages.get(target) ?? null;
|
|
427
|
+
if (!page) {
|
|
747
428
|
try {
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
}
|
|
751
|
-
catch (err) {
|
|
752
|
-
lastError = err instanceof Error ? err.message : String(err);
|
|
753
|
-
if (attempt < 2) {
|
|
754
|
-
// Wait before retry (50ms, then 100ms)
|
|
755
|
-
await new Promise(r => setTimeout(r, 50 * (attempt + 1)));
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
if (windowId !== null) {
|
|
760
|
-
return { page, windowId, url: page.url() };
|
|
761
|
-
}
|
|
762
|
-
// All retries failed
|
|
763
|
-
this.logger(`Failed to get windowId for page ${page.url()} after 3 attempts: ${lastError}`);
|
|
764
|
-
return null;
|
|
765
|
-
}));
|
|
766
|
-
for (const result of windowIdResults) {
|
|
767
|
-
if (result.status === 'fulfilled' && result.value) {
|
|
768
|
-
if (result.value.windowId === this.#sessionWindowId) {
|
|
769
|
-
windowFilteredPages.push(result.value.page);
|
|
429
|
+
page = await target.asPage();
|
|
430
|
+
this.#extensionPages.set(target, page);
|
|
770
431
|
}
|
|
771
|
-
|
|
772
|
-
this.logger(
|
|
432
|
+
catch (e) {
|
|
433
|
+
this.logger('Failed to get page for extension target', e);
|
|
773
434
|
}
|
|
774
435
|
}
|
|
775
436
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
// Always include the explicitly selected page even if window filtering excluded it
|
|
779
|
-
// This handles edge cases where windowId lookup fails after cross-origin navigation
|
|
780
|
-
if (this.#pageExplicitlySelected &&
|
|
781
|
-
this.#selectedPage &&
|
|
782
|
-
!this.#selectedPage.isClosed() &&
|
|
783
|
-
!filteredPages.includes(this.#selectedPage)) {
|
|
784
|
-
this.logger(`Re-adding explicitly selected page that was filtered out: ${this.#selectedPage.url()}`);
|
|
785
|
-
filteredPages.unshift(this.#selectedPage);
|
|
437
|
+
if (page && !allPages.includes(page)) {
|
|
438
|
+
allPages.push(page);
|
|
786
439
|
}
|
|
787
440
|
}
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
441
|
+
// Build a reverse lookup from BrowserContext instance → name.
|
|
442
|
+
const contextToName = new Map();
|
|
443
|
+
for (const [name, ctx] of this.#isolatedContexts) {
|
|
444
|
+
contextToName.set(ctx, name);
|
|
445
|
+
}
|
|
446
|
+
// Auto-discover BrowserContexts not in our mapping (e.g., externally
|
|
447
|
+
// created incognito contexts) and assign generated names.
|
|
448
|
+
const knownContexts = new Set(this.#isolatedContexts.values());
|
|
449
|
+
for (const ctx of this.browser.browserContexts()) {
|
|
450
|
+
if (ctx !== defaultCtx && !ctx.closed && !knownContexts.has(ctx)) {
|
|
451
|
+
const name = `isolated-context-${this.#nextIsolatedContextId++}`;
|
|
452
|
+
this.#isolatedContexts.set(name, ctx);
|
|
453
|
+
contextToName.set(ctx, name);
|
|
454
|
+
}
|
|
796
455
|
}
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
456
|
+
// Map each page to its isolated context name (if any).
|
|
457
|
+
const isolatedContextNames = new Map();
|
|
458
|
+
for (const page of allPages) {
|
|
459
|
+
const ctx = page.browserContext();
|
|
460
|
+
const name = contextToName.get(ctx);
|
|
461
|
+
if (name) {
|
|
462
|
+
isolatedContextNames.set(page, name);
|
|
463
|
+
}
|
|
802
464
|
}
|
|
803
|
-
return
|
|
465
|
+
return { pages: allPages, isolatedContextNames };
|
|
804
466
|
}
|
|
805
|
-
/**
|
|
806
|
-
* Detect and map open DevTools windows to their inspected pages.
|
|
807
|
-
*
|
|
808
|
-
* Iterates through all browser pages to find DevTools windows and
|
|
809
|
-
* associates them with the pages they're inspecting.
|
|
810
|
-
*
|
|
811
|
-
* @todo Optimize page lookup with a URL-indexed map instead of nested loops.
|
|
812
|
-
*/
|
|
813
467
|
async detectOpenDevToolsWindows() {
|
|
814
468
|
this.logger('Detecting open DevTools windows');
|
|
815
|
-
const pages = await this
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
if (
|
|
819
|
-
|
|
820
|
-
this.logger('Calling getTargetInfo for ' + devToolsPage.url());
|
|
821
|
-
const data = await devToolsPage
|
|
822
|
-
// @ts-expect-error no types for _client().
|
|
823
|
-
._client()
|
|
824
|
-
.send('Target.getTargetInfo');
|
|
825
|
-
const devtoolsPageTitle = data.targetInfo.title;
|
|
826
|
-
const urlLike = extractUrlLikeFromDevToolsTitle(devtoolsPageTitle);
|
|
827
|
-
if (!urlLike) {
|
|
828
|
-
continue;
|
|
829
|
-
}
|
|
830
|
-
for (const page of this.#pages) {
|
|
831
|
-
if (urlsEqual(page.url(), urlLike)) {
|
|
832
|
-
this.#pageToDevToolsPage.set(page, devToolsPage);
|
|
833
|
-
}
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
|
-
catch (error) {
|
|
837
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
838
|
-
this.logger(`DevTools detection failed for ${devToolsPage.url()}: ${message}`);
|
|
839
|
-
}
|
|
469
|
+
const { pages } = await this.#getAllPages();
|
|
470
|
+
await Promise.all(pages.map(async (page) => {
|
|
471
|
+
const mcpPage = this.#mcpPages.get(page);
|
|
472
|
+
if (!mcpPage) {
|
|
473
|
+
return;
|
|
840
474
|
}
|
|
841
|
-
|
|
475
|
+
if (await page.hasDevTools()) {
|
|
476
|
+
mcpPage.devToolsPage = await page.openDevTools();
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
mcpPage.devToolsPage = undefined;
|
|
480
|
+
}
|
|
481
|
+
}));
|
|
482
|
+
}
|
|
483
|
+
getExtensionServiceWorkers() {
|
|
484
|
+
return this.#extensionServiceWorkers;
|
|
485
|
+
}
|
|
486
|
+
getExtensionServiceWorkerId(extensionServiceWorker) {
|
|
487
|
+
return this.#extensionServiceWorkerMap.get(extensionServiceWorker.target);
|
|
842
488
|
}
|
|
843
489
|
getPages() {
|
|
844
|
-
return
|
|
490
|
+
return this.#pages;
|
|
491
|
+
}
|
|
492
|
+
getIsolatedContextName(page) {
|
|
493
|
+
return this.#mcpPages.get(page)?.isolatedContextName;
|
|
845
494
|
}
|
|
846
495
|
getDevToolsPage(page) {
|
|
847
|
-
return this.#
|
|
496
|
+
return this.#mcpPages.get(page)?.devToolsPage;
|
|
848
497
|
}
|
|
849
|
-
async getDevToolsData() {
|
|
498
|
+
async getDevToolsData(page) {
|
|
850
499
|
try {
|
|
851
500
|
this.logger('Getting DevTools UI data');
|
|
852
|
-
const
|
|
853
|
-
const devtoolsPage = this.getDevToolsPage(selectedPage);
|
|
501
|
+
const devtoolsPage = this.getDevToolsPage(page.pptrPage);
|
|
854
502
|
if (!devtoolsPage) {
|
|
855
503
|
this.logger('No DevTools page detected');
|
|
856
504
|
return {};
|
|
@@ -877,24 +525,38 @@ export class McpContext {
|
|
|
877
525
|
/**
|
|
878
526
|
* Creates a text snapshot of a page.
|
|
879
527
|
*/
|
|
880
|
-
async createTextSnapshot(verbose = false, devtoolsData = undefined) {
|
|
881
|
-
const
|
|
882
|
-
const rootNode = await page.accessibility.snapshot({
|
|
528
|
+
async createTextSnapshot(page, verbose = false, devtoolsData = undefined) {
|
|
529
|
+
const rootNode = await page.pptrPage.accessibility.snapshot({
|
|
883
530
|
includeIframes: true,
|
|
884
531
|
interestingOnly: !verbose,
|
|
885
532
|
});
|
|
886
533
|
if (!rootNode) {
|
|
887
534
|
return;
|
|
888
535
|
}
|
|
536
|
+
const { uniqueBackendNodeIdToMcpId } = page;
|
|
889
537
|
const snapshotId = this.#nextSnapshotId++;
|
|
890
538
|
// Iterate through the whole accessibility node tree and assign node ids that
|
|
891
539
|
// will be used for the tree serialization and mapping ids back to nodes.
|
|
892
540
|
let idCounter = 0;
|
|
893
541
|
const idToNode = new Map();
|
|
542
|
+
const seenUniqueIds = new Set();
|
|
894
543
|
const assignIds = (node) => {
|
|
544
|
+
let id = '';
|
|
545
|
+
// @ts-expect-error untyped loaderId & backendNodeId.
|
|
546
|
+
const uniqueBackendId = `${node.loaderId}_${node.backendNodeId}`;
|
|
547
|
+
if (uniqueBackendNodeIdToMcpId.has(uniqueBackendId)) {
|
|
548
|
+
// Re-use MCP exposed ID if the uniqueId is the same.
|
|
549
|
+
id = uniqueBackendNodeIdToMcpId.get(uniqueBackendId);
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
// Only generate a new ID if we have not seen the node before.
|
|
553
|
+
id = `${snapshotId}_${idCounter++}`;
|
|
554
|
+
uniqueBackendNodeIdToMcpId.set(uniqueBackendId, id);
|
|
555
|
+
}
|
|
556
|
+
seenUniqueIds.add(uniqueBackendId);
|
|
895
557
|
const nodeWithId = {
|
|
896
558
|
...node,
|
|
897
|
-
id
|
|
559
|
+
id,
|
|
898
560
|
children: node.children
|
|
899
561
|
? node.children.map(child => assignIds(child))
|
|
900
562
|
: [],
|
|
@@ -911,48 +573,44 @@ export class McpContext {
|
|
|
911
573
|
return nodeWithId;
|
|
912
574
|
};
|
|
913
575
|
const rootNodeWithId = assignIds(rootNode);
|
|
914
|
-
|
|
576
|
+
const snapshot = {
|
|
915
577
|
root: rootNodeWithId,
|
|
916
578
|
snapshotId: String(snapshotId),
|
|
917
579
|
idToNode,
|
|
918
580
|
hasSelectedElement: false,
|
|
919
581
|
verbose,
|
|
920
582
|
};
|
|
921
|
-
|
|
583
|
+
page.textSnapshot = snapshot;
|
|
584
|
+
const data = devtoolsData ?? (await this.getDevToolsData(page));
|
|
922
585
|
if (data?.cdpBackendNodeId) {
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
getTextSnapshot() {
|
|
928
|
-
return this.#textSnapshot;
|
|
929
|
-
}
|
|
930
|
-
async saveTemporaryFile(data, mimeType) {
|
|
931
|
-
try {
|
|
932
|
-
const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'chrome-devtools-mcp-'));
|
|
933
|
-
const filename = path.join(dir, `screenshot.${getExtensionFromMimeType(mimeType)}`);
|
|
934
|
-
// Use mode 0o600 (owner read/write only) for secure temp file creation
|
|
935
|
-
await fs.writeFile(filename, data, { mode: 0o600 });
|
|
936
|
-
return { filename };
|
|
586
|
+
snapshot.hasSelectedElement = true;
|
|
587
|
+
snapshot.selectedElementUid = this.resolveCdpElementId(page, data?.cdpBackendNodeId);
|
|
937
588
|
}
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
589
|
+
// Clean up unique IDs that we did not see anymore.
|
|
590
|
+
for (const key of uniqueBackendNodeIdToMcpId.keys()) {
|
|
591
|
+
if (!seenUniqueIds.has(key)) {
|
|
592
|
+
uniqueBackendNodeIdToMcpId.delete(key);
|
|
593
|
+
}
|
|
941
594
|
}
|
|
942
595
|
}
|
|
596
|
+
async saveTemporaryFile(data, filename) {
|
|
597
|
+
return await saveTemporaryFile(data, filename);
|
|
598
|
+
}
|
|
943
599
|
async saveFile(data, filename) {
|
|
944
600
|
try {
|
|
945
601
|
const filePath = path.resolve(filename);
|
|
946
|
-
|
|
947
|
-
await fs.writeFile(filePath, data
|
|
948
|
-
return { filename };
|
|
602
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
603
|
+
await fs.writeFile(filePath, data);
|
|
604
|
+
return { filename: filePath };
|
|
949
605
|
}
|
|
950
606
|
catch (err) {
|
|
951
607
|
this.logger(err);
|
|
952
|
-
throw new Error('Could not save a
|
|
608
|
+
throw new Error('Could not save a file', { cause: err });
|
|
953
609
|
}
|
|
954
610
|
}
|
|
955
611
|
storeTraceRecording(result) {
|
|
612
|
+
// Clear the trace results because we only consume the latest trace currently.
|
|
613
|
+
this.#traceResults = [];
|
|
956
614
|
this.#traceResults.push(result);
|
|
957
615
|
}
|
|
958
616
|
recordedTraces() {
|
|
@@ -961,160 +619,28 @@ export class McpContext {
|
|
|
961
619
|
getWaitForHelper(page, cpuMultiplier, networkMultiplier) {
|
|
962
620
|
return new WaitForHelper(page, cpuMultiplier, networkMultiplier);
|
|
963
621
|
}
|
|
964
|
-
waitForEventsAfterAction(action) {
|
|
965
|
-
const page = this
|
|
966
|
-
const cpuMultiplier =
|
|
967
|
-
const networkMultiplier = getNetworkMultiplierFromString(
|
|
968
|
-
const waitForHelper = this.getWaitForHelper(page, cpuMultiplier, networkMultiplier);
|
|
969
|
-
return waitForHelper.waitForEventsAfterAction(action);
|
|
622
|
+
waitForEventsAfterAction(action, options) {
|
|
623
|
+
const page = this.#getSelectedMcpPage();
|
|
624
|
+
const cpuMultiplier = page.cpuThrottlingRate;
|
|
625
|
+
const networkMultiplier = getNetworkMultiplierFromString(page.networkConditions);
|
|
626
|
+
const waitForHelper = this.getWaitForHelper(page.pptrPage, cpuMultiplier, networkMultiplier);
|
|
627
|
+
return waitForHelper.waitForEventsAfterAction(action, options);
|
|
970
628
|
}
|
|
971
629
|
getNetworkRequestStableId(request) {
|
|
972
630
|
return this.#networkCollector.getIdForResource(request);
|
|
973
631
|
}
|
|
974
|
-
waitForTextOnPage(text, timeout) {
|
|
975
|
-
const page = this.
|
|
632
|
+
waitForTextOnPage(text, timeout, targetPage) {
|
|
633
|
+
const page = targetPage ?? this.getSelectedPptrPage();
|
|
976
634
|
const frames = page.frames();
|
|
977
|
-
let locator = this.#locatorClass.race(frames.flatMap(frame => [
|
|
978
|
-
frame.locator(`aria/${
|
|
979
|
-
frame.locator(`text/${
|
|
980
|
-
]));
|
|
635
|
+
let locator = this.#locatorClass.race(frames.flatMap(frame => text.flatMap(value => [
|
|
636
|
+
frame.locator(`aria/${value}`),
|
|
637
|
+
frame.locator(`text/${value}`),
|
|
638
|
+
])));
|
|
981
639
|
if (timeout) {
|
|
982
640
|
locator = locator.setTimeout(timeout);
|
|
983
641
|
}
|
|
984
642
|
return locator.wait();
|
|
985
643
|
}
|
|
986
|
-
/**
|
|
987
|
-
* Get a WebMCP client for a page, auto-connecting if needed.
|
|
988
|
-
*
|
|
989
|
-
* This method handles the full lifecycle of WebMCP connections:
|
|
990
|
-
* - Maintains separate connections per page (one-to-many relationship)
|
|
991
|
-
* - Detects stale connections (page reload, navigation)
|
|
992
|
-
* - Cleans up old connections before creating new ones
|
|
993
|
-
* - Auto-connects when WebMCP is available on the page
|
|
994
|
-
*
|
|
995
|
-
* @param page - Optional page to get client for. Defaults to selected page.
|
|
996
|
-
*/
|
|
997
|
-
async getWebMCPClient(page) {
|
|
998
|
-
const targetPage = page ?? this.getSelectedPage();
|
|
999
|
-
// Check if we have a valid, active connection for this page
|
|
1000
|
-
// We must verify isClosed() to detect page reloads where URL stays the same but frames are invalidated
|
|
1001
|
-
const conn = this.#webMCPConnections.get(targetPage);
|
|
1002
|
-
if (conn && !conn.transport.isClosed()) {
|
|
1003
|
-
return { connected: true, client: conn.client };
|
|
1004
|
-
}
|
|
1005
|
-
// If we have a stale connection, clean up first
|
|
1006
|
-
if (conn) {
|
|
1007
|
-
try {
|
|
1008
|
-
await conn.client.close();
|
|
1009
|
-
}
|
|
1010
|
-
catch (err) {
|
|
1011
|
-
// Close errors during reconnection are expected - log for debugging
|
|
1012
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
1013
|
-
this.logger(`WebMCP client close during reconnection: ${message}`);
|
|
1014
|
-
}
|
|
1015
|
-
this.#webMCPConnections.delete(targetPage);
|
|
1016
|
-
}
|
|
1017
|
-
// Connect - no pre-checking needed (extension approach)
|
|
1018
|
-
try {
|
|
1019
|
-
const transport = new WebMCPClientTransport({
|
|
1020
|
-
page: targetPage,
|
|
1021
|
-
readyTimeout: 30000, // 30s to handle slow React apps (up from 10s)
|
|
1022
|
-
requireWebMCP: false, // Don't pre-check, just try to connect
|
|
1023
|
-
});
|
|
1024
|
-
const client = new Client({ name: 'chrome-devtools-mcp', version: '1.0.0' }, { capabilities: {} });
|
|
1025
|
-
// Set up onclose handler to clean up connection state
|
|
1026
|
-
// This handles page navigations, reloads, and manual disconnections
|
|
1027
|
-
transport.onclose = () => {
|
|
1028
|
-
const currentConn = this.#webMCPConnections.get(targetPage);
|
|
1029
|
-
if (currentConn?.client === client) {
|
|
1030
|
-
this.#webMCPConnections.delete(targetPage);
|
|
1031
|
-
}
|
|
1032
|
-
// Remove tools for this page when transport closes
|
|
1033
|
-
this.#toolHub?.removeToolsForPage(targetPage);
|
|
1034
|
-
};
|
|
1035
|
-
// Also listen for page close events to trigger cleanup
|
|
1036
|
-
// This handles cases where the page is closed without navigation
|
|
1037
|
-
const onPageClose = () => {
|
|
1038
|
-
const currentConn = this.#webMCPConnections.get(targetPage);
|
|
1039
|
-
if (currentConn?.client === client) {
|
|
1040
|
-
this.#webMCPConnections.delete(targetPage);
|
|
1041
|
-
}
|
|
1042
|
-
this.#toolHub?.removeToolsForPage(targetPage);
|
|
1043
|
-
// Clean up the listener
|
|
1044
|
-
targetPage.off('close', onPageClose);
|
|
1045
|
-
};
|
|
1046
|
-
targetPage.on('close', onPageClose);
|
|
1047
|
-
await client.connect(transport);
|
|
1048
|
-
// Store connection for this page
|
|
1049
|
-
this.#webMCPConnections.set(targetPage, { client, transport, page: targetPage });
|
|
1050
|
-
// Subscribe to tool list changes if tool hub is enabled and server supports it
|
|
1051
|
-
const serverCapabilities = client.getServerCapabilities();
|
|
1052
|
-
if (serverCapabilities?.tools?.listChanged && this.#toolHub?.isEnabled()) {
|
|
1053
|
-
client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
|
|
1054
|
-
this.logger('WebMCP tools changed, re-syncing...');
|
|
1055
|
-
await this.#toolHub?.syncToolsForPage(targetPage, client);
|
|
1056
|
-
});
|
|
1057
|
-
}
|
|
1058
|
-
// Initial tool sync if tool hub is enabled
|
|
1059
|
-
if (this.#toolHub?.isEnabled()) {
|
|
1060
|
-
await this.#toolHub.syncToolsForPage(targetPage, client);
|
|
1061
|
-
}
|
|
1062
|
-
return { connected: true, client };
|
|
1063
|
-
}
|
|
1064
|
-
catch (err) {
|
|
1065
|
-
return {
|
|
1066
|
-
connected: false,
|
|
1067
|
-
error: `Failed to connect: ${err instanceof Error ? err.message : String(err)}`,
|
|
1068
|
-
};
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
/**
|
|
1072
|
-
* Evaluate a JavaScript expression in a Chrome extension's background context.
|
|
1073
|
-
*
|
|
1074
|
-
* Supports both MV3 service workers (type "service_worker") and MV2/dev-mode
|
|
1075
|
-
* background pages (type "background_page"). Uses waitForTarget to handle
|
|
1076
|
-
* cases where the worker hasn't been discovered yet.
|
|
1077
|
-
*
|
|
1078
|
-
* @param expression - JavaScript expression to evaluate.
|
|
1079
|
-
* @param extensionId - Optional extension ID. If omitted, uses the first found.
|
|
1080
|
-
* @returns The result of the evaluation.
|
|
1081
|
-
*/
|
|
1082
|
-
async evaluateInExtensionWorker(expression, extensionId) {
|
|
1083
|
-
const isExtensionBackground = (t) => (t.type() === 'service_worker' || t.type() === 'background_page') &&
|
|
1084
|
-
t.url().startsWith('chrome-extension://') &&
|
|
1085
|
-
(!extensionId || t.url().includes(extensionId));
|
|
1086
|
-
// First check already-known targets
|
|
1087
|
-
let target = this.browser.targets().find(isExtensionBackground);
|
|
1088
|
-
// If not found, wait briefly for the target to appear (handles startup timing)
|
|
1089
|
-
if (!target) {
|
|
1090
|
-
try {
|
|
1091
|
-
target = await this.browser.waitForTarget(isExtensionBackground, { timeout: 5000 });
|
|
1092
|
-
}
|
|
1093
|
-
catch {
|
|
1094
|
-
throw new Error('No extension background target found. Ensure the extension is loaded in the browser. ' +
|
|
1095
|
-
'If connecting to an existing browser, verify the extension is installed and active.');
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
1098
|
-
if (target.type() === 'service_worker') {
|
|
1099
|
-
const worker = await target.worker();
|
|
1100
|
-
if (!worker) {
|
|
1101
|
-
throw new Error('Could not attach to service worker');
|
|
1102
|
-
}
|
|
1103
|
-
return worker.evaluate(expression);
|
|
1104
|
-
}
|
|
1105
|
-
// background_page — get a Page handle instead
|
|
1106
|
-
const page = await target.page();
|
|
1107
|
-
if (!page) {
|
|
1108
|
-
throw new Error('Could not attach to extension background page');
|
|
1109
|
-
}
|
|
1110
|
-
return page.evaluate(expression);
|
|
1111
|
-
}
|
|
1112
|
-
async reconnectBrowser(options) {
|
|
1113
|
-
if (!this.#options.onReconnect) {
|
|
1114
|
-
throw new Error('Browser reconnection is not supported in this configuration');
|
|
1115
|
-
}
|
|
1116
|
-
return this.#options.onReconnect(options);
|
|
1117
|
-
}
|
|
1118
644
|
/**
|
|
1119
645
|
* We need to ignore favicon request as they make our test flaky
|
|
1120
646
|
*/
|
|
@@ -1129,6 +655,38 @@ export class McpContext {
|
|
|
1129
655
|
},
|
|
1130
656
|
};
|
|
1131
657
|
});
|
|
1132
|
-
await this.#
|
|
658
|
+
const { pages } = await this.#getAllPages();
|
|
659
|
+
await this.#networkCollector.init(pages);
|
|
660
|
+
}
|
|
661
|
+
async installExtension(extensionPath) {
|
|
662
|
+
const id = await this.browser.installExtension(extensionPath);
|
|
663
|
+
await this.#extensionRegistry.registerExtension(id, extensionPath);
|
|
664
|
+
return id;
|
|
665
|
+
}
|
|
666
|
+
async uninstallExtension(id) {
|
|
667
|
+
await this.browser.uninstallExtension(id);
|
|
668
|
+
this.#extensionRegistry.remove(id);
|
|
669
|
+
}
|
|
670
|
+
async triggerExtensionAction(id) {
|
|
671
|
+
const page = this.getSelectedPptrPage();
|
|
672
|
+
// @ts-expect-error internal puppeteer api is needed since we don't have a way to get
|
|
673
|
+
// a tab id at the moment
|
|
674
|
+
const theTarget = page._tabId;
|
|
675
|
+
const session = await this.browser.target().createCDPSession();
|
|
676
|
+
try {
|
|
677
|
+
await session.send('Extensions.triggerAction', {
|
|
678
|
+
id,
|
|
679
|
+
targetId: theTarget,
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
finally {
|
|
683
|
+
await session.detach();
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
listExtensions() {
|
|
687
|
+
return this.#extensionRegistry.list();
|
|
688
|
+
}
|
|
689
|
+
getExtension(id) {
|
|
690
|
+
return this.#extensionRegistry.getById(id);
|
|
1133
691
|
}
|
|
1134
692
|
}
|