chrome-ai-bridge 1.0.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/LICENSE +202 -0
- package/README.md +252 -0
- package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2033 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +332 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +449 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +495 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +15 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +164 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +78 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +434 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +202 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +92 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +61 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +220 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +968 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +13 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +60 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +538 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +539 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +8 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +845 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +217 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1318 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1532 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +908 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +312 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +574 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1346 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +403 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +236 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +205 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1635 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1216 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +364 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +127 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +75 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +80 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +2223 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1654 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +310 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +608 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +413 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +908 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +923 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +176 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +420 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +113 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +691 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +57 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +201 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +508 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +257 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +395 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +55 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1166 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +91 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +2640 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +384 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1532 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7602 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +289 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +995 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +664 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +377 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +131 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +149 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +245 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +486 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +592 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +564 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +437 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +182 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +516 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +89 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +285 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +145 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +122 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +622 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +121 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +371 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +169 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +599 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +485 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +449 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +404 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +566 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +260 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +276 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +186 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +820 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +489 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +209 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +181 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +258 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +90 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +82 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +161 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +129 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +263 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +199 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +183 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +90 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +200 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +545 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +192 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +136 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +98 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +102 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +580 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +224 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +504 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +601 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +201 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
- package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
- package/build/src/McpContext.js +400 -0
- package/build/src/McpResponse.js +237 -0
- package/build/src/Mutex.js +40 -0
- package/build/src/PageCollector.js +68 -0
- package/build/src/WaitForHelper.js +134 -0
- package/build/src/browser-connection-manager.js +373 -0
- package/build/src/browser.js +719 -0
- package/build/src/cli.js +120 -0
- package/build/src/client-detector.js +93 -0
- package/build/src/config.js +38 -0
- package/build/src/formatters/consoleFormatter.js +73 -0
- package/build/src/formatters/extensionsPageFormatter.js +184 -0
- package/build/src/formatters/networkFormatter.js +34 -0
- package/build/src/formatters/snapshotFormatter.js +80 -0
- package/build/src/graceful.js +125 -0
- package/build/src/index.js +13 -0
- package/build/src/logger.js +27 -0
- package/build/src/login-helper.js +431 -0
- package/build/src/main.js +268 -0
- package/build/src/plugin-api.js +189 -0
- package/build/src/profile-migration.js +82 -0
- package/build/src/profile-resolver.js +555 -0
- package/build/src/project-detector.js +71 -0
- package/build/src/project-root-state.js +18 -0
- package/build/src/roots-manager.js +253 -0
- package/build/src/selectors/chatgpt.json +61 -0
- package/build/src/selectors/gemini.json +24 -0
- package/build/src/selectors/loader.js +128 -0
- package/build/src/stable-identity.js +193 -0
- package/build/src/startup-check.js +147 -0
- package/build/src/system-profile.js +181 -0
- package/build/src/tools/ToolDefinition.js +9 -0
- package/build/src/tools/bookmarks.js +170 -0
- package/build/src/tools/categories.js +15 -0
- package/build/src/tools/chatgpt-web.js +507 -0
- package/build/src/tools/console.js +19 -0
- package/build/src/tools/core-tools.js +65 -0
- package/build/src/tools/diagnose-ui.js +328 -0
- package/build/src/tools/emulation.js +67 -0
- package/build/src/tools/extensions.js +185 -0
- package/build/src/tools/gemini-web.js +491 -0
- package/build/src/tools/iframe-popup-tools.js +204 -0
- package/build/src/tools/input.js +185 -0
- package/build/src/tools/network.js +68 -0
- package/build/src/tools/optional-tools.js +69 -0
- package/build/src/tools/pages.js +172 -0
- package/build/src/tools/performance.js +127 -0
- package/build/src/tools/screenshot.js +48 -0
- package/build/src/tools/script.js +39 -0
- package/build/src/tools/snapshot.js +45 -0
- package/build/src/trace-processing/parse.js +93 -0
- package/build/src/utils/pagination.js +49 -0
- package/package.json +90 -0
- package/scripts/cli.mjs +49 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Roots Manager
|
|
8
|
+
*
|
|
9
|
+
* Manages MCP roots (project directories) and generates stable profile keys.
|
|
10
|
+
* Implements the MCP Roots protocol for project-scoped Chrome profiles.
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { detectProjectName } from './project-detector.js';
|
|
16
|
+
import { resolveStableIdentity } from './stable-identity.js';
|
|
17
|
+
/**
|
|
18
|
+
* Fetch roots from MCP client using roots/list protocol
|
|
19
|
+
*/
|
|
20
|
+
export async function fetchRootsFromClient(server) {
|
|
21
|
+
const clientCaps = server.getClientCapabilities();
|
|
22
|
+
if (!clientCaps?.roots) {
|
|
23
|
+
console.error('[roots] Client does not support roots capability');
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
console.error('[roots] Requesting roots/list from client...');
|
|
28
|
+
const result = await server.listRoots({}, { timeout: 5000 });
|
|
29
|
+
console.error(`[roots] Received ${result.roots.length} roots from client`);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(`[roots] Failed to fetch roots from client: ${error instanceof Error ? error.message : String(error)}`);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate stable profile key from roots and client info
|
|
39
|
+
* Format: projectName_hash (e.g., "my-app_2ca5dbf5")
|
|
40
|
+
*
|
|
41
|
+
* @param rootsUris - Array of root URIs (used for fallback hash if stableIdentityHash not provided)
|
|
42
|
+
* @param clientName - Client name (e.g., "claude-code")
|
|
43
|
+
* @param clientVersion - Client version (not used in hash for stability)
|
|
44
|
+
* @param projectName - Human-readable project name
|
|
45
|
+
* @param stableIdentityHash - Optional stable identity hash (from git remote, etc.)
|
|
46
|
+
*/
|
|
47
|
+
export function generateProfileKey(rootsUris, clientName, clientVersion, projectName, stableIdentityHash) {
|
|
48
|
+
let hash;
|
|
49
|
+
if (stableIdentityHash) {
|
|
50
|
+
// Use stable identity hash (preferred - survives directory moves)
|
|
51
|
+
hash = stableIdentityHash;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Fallback: URI-based hash
|
|
55
|
+
const sortedUris = [...rootsUris].sort();
|
|
56
|
+
const keyMaterial = JSON.stringify({
|
|
57
|
+
roots: sortedUris,
|
|
58
|
+
client: clientName,
|
|
59
|
+
});
|
|
60
|
+
hash = createHash('sha256').update(keyMaterial).digest('hex').slice(0, 8);
|
|
61
|
+
}
|
|
62
|
+
// Include project name for clarity (if available)
|
|
63
|
+
if (projectName) {
|
|
64
|
+
const sanitized = projectName.replace(/[^a-z0-9_-]/gi, '-').toLowerCase();
|
|
65
|
+
return `${sanitized}_${hash}`;
|
|
66
|
+
}
|
|
67
|
+
return hash;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract project name from roots URIs
|
|
71
|
+
* Uses detectProjectName() to read package.json name (preferred)
|
|
72
|
+
* Falls back to directory name if package.json not found
|
|
73
|
+
*/
|
|
74
|
+
export function extractProjectName(roots) {
|
|
75
|
+
if (roots.length === 0) {
|
|
76
|
+
return 'unknown';
|
|
77
|
+
}
|
|
78
|
+
// Prefer explicit name if provided by MCP client
|
|
79
|
+
const firstRoot = roots[0];
|
|
80
|
+
if (firstRoot.name) {
|
|
81
|
+
return sanitizeProjectName(firstRoot.name);
|
|
82
|
+
}
|
|
83
|
+
// Extract from file:// URI using detectProjectName (reads package.json)
|
|
84
|
+
try {
|
|
85
|
+
const url = new URL(firstRoot.uri);
|
|
86
|
+
if (url.protocol === 'file:') {
|
|
87
|
+
// Convert URI to file path
|
|
88
|
+
const rootPath = fileURLToPath(url);
|
|
89
|
+
// Resolve realpath for symlink handling
|
|
90
|
+
let realPath;
|
|
91
|
+
try {
|
|
92
|
+
realPath = fs.realpathSync(rootPath);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
realPath = rootPath; // Use original if realpath fails
|
|
96
|
+
}
|
|
97
|
+
// Use detectProjectName to read package.json name
|
|
98
|
+
const name = detectProjectName(realPath);
|
|
99
|
+
return sanitizeProjectName(name);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Fall through to default
|
|
104
|
+
}
|
|
105
|
+
return 'unknown';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Sanitize project name for use in file paths
|
|
109
|
+
*/
|
|
110
|
+
function sanitizeProjectName(name) {
|
|
111
|
+
return name.toLowerCase().replace(/[^a-z0-9-_]/g, '-');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get stable identity hash from a root path
|
|
115
|
+
* Returns undefined if stable identity cannot be resolved
|
|
116
|
+
*/
|
|
117
|
+
function getStableIdentityHash(rootPath) {
|
|
118
|
+
try {
|
|
119
|
+
const identity = resolveStableIdentity(rootPath);
|
|
120
|
+
// Only use stable identity for high-confidence sources (git-based)
|
|
121
|
+
if (identity.confidence === 'high' ||
|
|
122
|
+
identity.source === 'MCP_PROFILE_ID') {
|
|
123
|
+
return identity.id;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Fall through to URI-based hash
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get root path from URI
|
|
133
|
+
*/
|
|
134
|
+
function getRootPathFromUri(uri) {
|
|
135
|
+
try {
|
|
136
|
+
const url = new URL(uri);
|
|
137
|
+
if (url.protocol === 'file:') {
|
|
138
|
+
const rootPath = fileURLToPath(url);
|
|
139
|
+
try {
|
|
140
|
+
return fs.realpathSync(rootPath);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return rootPath;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Ignore
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Resolve roots information from MCP client or fallbacks
|
|
154
|
+
*/
|
|
155
|
+
export async function resolveRoots(server, fallbackOptions) {
|
|
156
|
+
const clientInfo = server.getClientVersion();
|
|
157
|
+
const clientName = clientInfo?.name || 'unknown-client';
|
|
158
|
+
const clientVersion = clientInfo?.version || '0.0.0';
|
|
159
|
+
// 1) Try roots/list from client (preferred)
|
|
160
|
+
const rootsResult = await fetchRootsFromClient(server);
|
|
161
|
+
if (rootsResult && rootsResult.roots.length > 0) {
|
|
162
|
+
const rootsUris = rootsResult.roots.map(r => r.uri);
|
|
163
|
+
const projectName = extractProjectName(rootsResult.roots);
|
|
164
|
+
// Get stable identity hash from first root
|
|
165
|
+
const rootPath = getRootPathFromUri(rootsUris[0]);
|
|
166
|
+
const stableHash = rootPath ? getStableIdentityHash(rootPath) : undefined;
|
|
167
|
+
const profileKey = generateProfileKey(rootsUris, clientName, clientVersion, projectName, stableHash);
|
|
168
|
+
console.error(`[roots] Resolved via roots/list: key=${profileKey}, project=${projectName}, client=${clientName}, stableId=${stableHash || 'none'}`);
|
|
169
|
+
return {
|
|
170
|
+
profileKey,
|
|
171
|
+
projectName,
|
|
172
|
+
rootsUris,
|
|
173
|
+
clientName,
|
|
174
|
+
clientVersion,
|
|
175
|
+
source: 'roots/list',
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// 2) Fallback: CLI argument --project-root
|
|
179
|
+
if (fallbackOptions.cliProjectRoot) {
|
|
180
|
+
const uri = pathToFileUri(fallbackOptions.cliProjectRoot);
|
|
181
|
+
const projectName = extractProjectName([{ uri }]);
|
|
182
|
+
// Get stable identity hash
|
|
183
|
+
const stableHash = getStableIdentityHash(fallbackOptions.cliProjectRoot);
|
|
184
|
+
const profileKey = generateProfileKey([uri], clientName, clientVersion, projectName, stableHash);
|
|
185
|
+
console.error(`[roots] Resolved via --project-root: key=${profileKey}, project=${projectName}, stableId=${stableHash || 'none'}`);
|
|
186
|
+
return {
|
|
187
|
+
profileKey,
|
|
188
|
+
projectName,
|
|
189
|
+
rootsUris: [uri],
|
|
190
|
+
clientName,
|
|
191
|
+
clientVersion,
|
|
192
|
+
source: '--project-root',
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// 3) Fallback: Environment variable MCP_PROJECT_ROOT
|
|
196
|
+
if (fallbackOptions.envProjectRoot) {
|
|
197
|
+
const uri = pathToFileUri(fallbackOptions.envProjectRoot);
|
|
198
|
+
const projectName = extractProjectName([{ uri }]);
|
|
199
|
+
// Get stable identity hash
|
|
200
|
+
const stableHash = getStableIdentityHash(fallbackOptions.envProjectRoot);
|
|
201
|
+
const profileKey = generateProfileKey([uri], clientName, clientVersion, projectName, stableHash);
|
|
202
|
+
console.error(`[roots] Resolved via MCP_PROJECT_ROOT: key=${profileKey}, project=${projectName}, stableId=${stableHash || 'none'}`);
|
|
203
|
+
return {
|
|
204
|
+
profileKey,
|
|
205
|
+
projectName,
|
|
206
|
+
rootsUris: [uri],
|
|
207
|
+
clientName,
|
|
208
|
+
clientVersion,
|
|
209
|
+
source: 'MCP_PROJECT_ROOT',
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// 4) Fallback: AUTO (cwd-based, last resort)
|
|
213
|
+
if (fallbackOptions.autoCwd) {
|
|
214
|
+
const uri = pathToFileUri(fallbackOptions.autoCwd);
|
|
215
|
+
const projectName = extractProjectName([{ uri }]);
|
|
216
|
+
// Get stable identity hash
|
|
217
|
+
const stableHash = getStableIdentityHash(fallbackOptions.autoCwd);
|
|
218
|
+
const profileKey = generateProfileKey([uri], clientName, clientVersion, projectName, stableHash);
|
|
219
|
+
console.error(`[roots] Resolved via AUTO (cwd): key=${profileKey}, project=${projectName}, stableId=${stableHash || 'none'}`);
|
|
220
|
+
return {
|
|
221
|
+
profileKey,
|
|
222
|
+
projectName,
|
|
223
|
+
rootsUris: [uri],
|
|
224
|
+
clientName,
|
|
225
|
+
clientVersion,
|
|
226
|
+
source: 'AUTO',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Absolute fallback
|
|
230
|
+
const fallbackUri = 'file:///unknown';
|
|
231
|
+
const fallbackProjectName = 'unknown';
|
|
232
|
+
const profileKey = generateProfileKey([fallbackUri], clientName, clientVersion, fallbackProjectName);
|
|
233
|
+
console.error('[roots] WARNING: No roots available, using fallback');
|
|
234
|
+
return {
|
|
235
|
+
profileKey,
|
|
236
|
+
projectName: fallbackProjectName,
|
|
237
|
+
rootsUris: [fallbackUri],
|
|
238
|
+
clientName,
|
|
239
|
+
clientVersion,
|
|
240
|
+
source: 'AUTO',
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Convert absolute file path to file:// URI
|
|
245
|
+
*/
|
|
246
|
+
function pathToFileUri(absPath) {
|
|
247
|
+
// Normalize path and convert to file:// URI
|
|
248
|
+
const normalized = absPath.replace(/\\/g, '/');
|
|
249
|
+
const withoutLeadingSlash = normalized.startsWith('/')
|
|
250
|
+
? normalized
|
|
251
|
+
: '/' + normalized;
|
|
252
|
+
return `file://${withoutLeadingSlash}`;
|
|
253
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2025-10",
|
|
3
|
+
"lastUpdated": "2025-10-03",
|
|
4
|
+
"description": "ChatGPT Web UI selectors for browser automation",
|
|
5
|
+
"elements": {
|
|
6
|
+
"newChatLink": {
|
|
7
|
+
"css": "a[href='/']",
|
|
8
|
+
"description": "新しいチャット作成リンク"
|
|
9
|
+
},
|
|
10
|
+
"tempChatToggle": {
|
|
11
|
+
"ax": {
|
|
12
|
+
"role": "button",
|
|
13
|
+
"nameContains": "一時チャットをオフにする"
|
|
14
|
+
},
|
|
15
|
+
"description": "一時チャットON/OFFトグルボタン"
|
|
16
|
+
},
|
|
17
|
+
"addFileButton": {
|
|
18
|
+
"ax": {
|
|
19
|
+
"role": "button",
|
|
20
|
+
"ariaLabel": "ファイルの追加"
|
|
21
|
+
},
|
|
22
|
+
"description": "ファイル追加(ツールメニューを開く)ボタン"
|
|
23
|
+
},
|
|
24
|
+
"composerTextarea": {
|
|
25
|
+
"css": "textarea[placeholder]",
|
|
26
|
+
"description": "メッセージ入力テキストエリア"
|
|
27
|
+
},
|
|
28
|
+
"prosemirrorEditor": {
|
|
29
|
+
"css": ".ProseMirror[contenteditable='true']",
|
|
30
|
+
"description": "ProseMirrorエディタ"
|
|
31
|
+
},
|
|
32
|
+
"sendButton": {
|
|
33
|
+
"css": "button[data-testid='send-button']",
|
|
34
|
+
"description": "送信ボタン"
|
|
35
|
+
},
|
|
36
|
+
"userMessage": {
|
|
37
|
+
"css": "[data-message-author-role='user']",
|
|
38
|
+
"description": "ユーザーメッセージ"
|
|
39
|
+
},
|
|
40
|
+
"assistantMessage": {
|
|
41
|
+
"css": "[data-message-author-role='assistant']",
|
|
42
|
+
"description": "アシスタントメッセージ"
|
|
43
|
+
},
|
|
44
|
+
"stopButton": {
|
|
45
|
+
"text": ["停止", "ストリーミングの停止"],
|
|
46
|
+
"ax": {
|
|
47
|
+
"ariaLabel": ["停止", "ストリーミングの停止"]
|
|
48
|
+
},
|
|
49
|
+
"description": "ストリーミング停止ボタン"
|
|
50
|
+
},
|
|
51
|
+
"thinkingTimeButton": {
|
|
52
|
+
"ax": {
|
|
53
|
+
"ariaLabelContains": "思考時間"
|
|
54
|
+
},
|
|
55
|
+
"description": "思考時間表示ボタン"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"placeholders": {
|
|
59
|
+
"normalMode": "Message ChatGPT"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"lastUpdated": "2025-11-27",
|
|
4
|
+
"description": "Selectors for Gemini web interface",
|
|
5
|
+
"elements": {
|
|
6
|
+
"editor": {
|
|
7
|
+
"css": "div[contenteditable='true']",
|
|
8
|
+
"description": "Main input editor"
|
|
9
|
+
},
|
|
10
|
+
"sendButton": {
|
|
11
|
+
"ax": {
|
|
12
|
+
"ariaLabel": "送信"
|
|
13
|
+
},
|
|
14
|
+
"description": "Send message button"
|
|
15
|
+
},
|
|
16
|
+
"response": {
|
|
17
|
+
"css": "model-response",
|
|
18
|
+
"description": "Response container"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"placeholders": {
|
|
22
|
+
"normalMode": "プロンプトを入力"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
let cachedSelectors = null;
|
|
10
|
+
/**
|
|
11
|
+
* Load ChatGPT selectors from JSON file
|
|
12
|
+
*/
|
|
13
|
+
export function loadSelectors() {
|
|
14
|
+
if (cachedSelectors) {
|
|
15
|
+
return cachedSelectors;
|
|
16
|
+
}
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = path.dirname(__filename);
|
|
19
|
+
const selectorsPath = path.join(__dirname, 'chatgpt.json');
|
|
20
|
+
try {
|
|
21
|
+
const data = fs.readFileSync(selectorsPath, 'utf-8');
|
|
22
|
+
cachedSelectors = JSON.parse(data);
|
|
23
|
+
return cachedSelectors;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new Error(`Failed to load selectors from ${selectorsPath}: ${error}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get a specific selector definition
|
|
31
|
+
*/
|
|
32
|
+
export function getSelector(elementName) {
|
|
33
|
+
const selectors = loadSelectors();
|
|
34
|
+
const selector = selectors.elements[elementName];
|
|
35
|
+
if (!selector) {
|
|
36
|
+
throw new Error(`Selector not found: ${elementName}`);
|
|
37
|
+
}
|
|
38
|
+
return selector;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generate page.evaluate() compatible selector function for text matching
|
|
42
|
+
*/
|
|
43
|
+
export function generateTextMatcher(selector, tagName = 'button') {
|
|
44
|
+
const textPatterns = Array.isArray(selector.text)
|
|
45
|
+
? selector.text
|
|
46
|
+
: [selector.text];
|
|
47
|
+
return `
|
|
48
|
+
Array.from(document.querySelectorAll('${tagName}')).find(el => {
|
|
49
|
+
const text = el.textContent || '';
|
|
50
|
+
return ${textPatterns.map(t => `text.includes('${t}')`).join(' || ')};
|
|
51
|
+
})
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate page.evaluate() compatible selector function for accessibility matching
|
|
56
|
+
*/
|
|
57
|
+
export function generateAxMatcher(selector, tagName = 'button') {
|
|
58
|
+
if (!selector.ax) {
|
|
59
|
+
throw new Error('Accessibility selector not defined');
|
|
60
|
+
}
|
|
61
|
+
const conditions = [];
|
|
62
|
+
if (selector.ax.ariaLabel) {
|
|
63
|
+
const labels = Array.isArray(selector.ax.ariaLabel)
|
|
64
|
+
? selector.ax.ariaLabel
|
|
65
|
+
: [selector.ax.ariaLabel];
|
|
66
|
+
conditions.push(labels.map(label => `aria.includes('${label}')`).join(' || '));
|
|
67
|
+
}
|
|
68
|
+
if (selector.ax.ariaLabelContains) {
|
|
69
|
+
conditions.push(`aria.includes('${selector.ax.ariaLabelContains}')`);
|
|
70
|
+
}
|
|
71
|
+
if (selector.ax.nameContains) {
|
|
72
|
+
conditions.push(`aria.includes('${selector.ax.nameContains}')`);
|
|
73
|
+
}
|
|
74
|
+
return `
|
|
75
|
+
Array.from(document.querySelectorAll('${tagName}')).find(el => {
|
|
76
|
+
const aria = el.getAttribute('aria-label') || '';
|
|
77
|
+
return ${conditions.join(' || ')};
|
|
78
|
+
})
|
|
79
|
+
`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if placeholder matches expected patterns
|
|
83
|
+
*/
|
|
84
|
+
export function checkPlaceholder(placeholder) {
|
|
85
|
+
const selectors = loadSelectors();
|
|
86
|
+
if (selectors.placeholders?.normalMode) {
|
|
87
|
+
return placeholder.includes(selectors.placeholders.normalMode);
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clear cached selectors (useful for testing or hot-reload)
|
|
93
|
+
*/
|
|
94
|
+
export function clearCache() {
|
|
95
|
+
cachedSelectors = null;
|
|
96
|
+
cachedGeminiSelectors = null;
|
|
97
|
+
}
|
|
98
|
+
let cachedGeminiSelectors = null;
|
|
99
|
+
/**
|
|
100
|
+
* Load Gemini selectors from JSON file
|
|
101
|
+
*/
|
|
102
|
+
export function loadGeminiSelectors() {
|
|
103
|
+
if (cachedGeminiSelectors) {
|
|
104
|
+
return cachedGeminiSelectors;
|
|
105
|
+
}
|
|
106
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
107
|
+
const __dirname = path.dirname(__filename);
|
|
108
|
+
const selectorsPath = path.join(__dirname, 'gemini.json');
|
|
109
|
+
try {
|
|
110
|
+
const data = fs.readFileSync(selectorsPath, 'utf-8');
|
|
111
|
+
cachedGeminiSelectors = JSON.parse(data);
|
|
112
|
+
return cachedGeminiSelectors;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw new Error(`Failed to load selectors from ${selectorsPath}: ${error}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get a specific Gemini selector definition
|
|
120
|
+
*/
|
|
121
|
+
export function getGeminiSelector(elementName) {
|
|
122
|
+
const selectors = loadGeminiSelectors();
|
|
123
|
+
const selector = selectors.elements[elementName];
|
|
124
|
+
if (!selector) {
|
|
125
|
+
throw new Error(`Selector not found: ${elementName}`);
|
|
126
|
+
}
|
|
127
|
+
return selector;
|
|
128
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
// src/stable-identity.ts
|
|
7
|
+
// Stable project identity detection for profile persistence across directory moves
|
|
8
|
+
// Priority: MCP_PROFILE_ID > git remote origin > git first commit > package.json name > directory fallback
|
|
9
|
+
import { spawnSync } from 'node:child_process';
|
|
10
|
+
import crypto from 'node:crypto';
|
|
11
|
+
import fs from 'node:fs';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve stable project identity in priority order.
|
|
15
|
+
* This identity remains stable even when the project directory is moved.
|
|
16
|
+
*/
|
|
17
|
+
export function resolveStableIdentity(projectRoot, env = process.env) {
|
|
18
|
+
// 1. Check explicit env var (highest priority)
|
|
19
|
+
const explicitId = env.MCP_PROFILE_ID?.trim();
|
|
20
|
+
if (explicitId) {
|
|
21
|
+
return {
|
|
22
|
+
id: sanitizeIdentity(explicitId),
|
|
23
|
+
source: 'MCP_PROFILE_ID',
|
|
24
|
+
raw: explicitId,
|
|
25
|
+
confidence: 'high',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// 2. Try git remote origin URL (stable across moves)
|
|
29
|
+
const remoteName = env.MCP_GIT_REMOTE || 'origin';
|
|
30
|
+
const remoteUrl = getGitRemoteOrigin(projectRoot, remoteName);
|
|
31
|
+
if (remoteUrl) {
|
|
32
|
+
const normalized = normalizeGitUrl(remoteUrl);
|
|
33
|
+
return {
|
|
34
|
+
id: shortHash(normalized),
|
|
35
|
+
source: 'git-remote-origin',
|
|
36
|
+
raw: remoteUrl,
|
|
37
|
+
confidence: 'high',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// 3. Try git first commit hash (stable, works offline)
|
|
41
|
+
const firstCommit = getGitFirstCommit(projectRoot);
|
|
42
|
+
if (firstCommit) {
|
|
43
|
+
return {
|
|
44
|
+
id: firstCommit.slice(0, 8), // Use first 8 chars of commit hash directly
|
|
45
|
+
source: 'git-first-commit',
|
|
46
|
+
raw: firstCommit,
|
|
47
|
+
confidence: 'high',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// 4. Try package.json name (semi-stable, may conflict)
|
|
51
|
+
const packageName = getPackageName(projectRoot);
|
|
52
|
+
if (packageName) {
|
|
53
|
+
return {
|
|
54
|
+
id: shortHash(packageName),
|
|
55
|
+
source: 'package-name',
|
|
56
|
+
raw: packageName,
|
|
57
|
+
confidence: 'medium', // May conflict if same name in different projects
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// 5. Fallback to directory-based (legacy behavior)
|
|
61
|
+
const realPath = realpathSafe(projectRoot);
|
|
62
|
+
return {
|
|
63
|
+
id: shortHash(realPath),
|
|
64
|
+
source: 'directory-fallback',
|
|
65
|
+
raw: realPath,
|
|
66
|
+
confidence: 'low',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get legacy identity hash (realpath-based) for migration detection.
|
|
71
|
+
*/
|
|
72
|
+
export function getLegacyIdentityHash(projectRoot) {
|
|
73
|
+
const realPath = realpathSafe(projectRoot);
|
|
74
|
+
return shortHash(realPath);
|
|
75
|
+
}
|
|
76
|
+
// --- Git Utilities ---
|
|
77
|
+
/**
|
|
78
|
+
* Get git remote origin URL.
|
|
79
|
+
* Returns null if not a git repo or no remote configured.
|
|
80
|
+
*/
|
|
81
|
+
function getGitRemoteOrigin(cwd, remoteName = 'origin') {
|
|
82
|
+
try {
|
|
83
|
+
const result = spawnSync('git', ['remote', 'get-url', remoteName], {
|
|
84
|
+
cwd,
|
|
85
|
+
timeout: 500,
|
|
86
|
+
encoding: 'utf8',
|
|
87
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
88
|
+
windowsHide: true,
|
|
89
|
+
});
|
|
90
|
+
if (result.status === 0 && result.stdout) {
|
|
91
|
+
const url = result.stdout.trim();
|
|
92
|
+
return url || null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
/* ignore */
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get hash of the first commit in git history.
|
|
102
|
+
* This is stable even when project is moved.
|
|
103
|
+
*/
|
|
104
|
+
function getGitFirstCommit(cwd) {
|
|
105
|
+
try {
|
|
106
|
+
const result = spawnSync('git', ['rev-list', '--max-parents=0', 'HEAD'], {
|
|
107
|
+
cwd,
|
|
108
|
+
timeout: 500,
|
|
109
|
+
encoding: 'utf8',
|
|
110
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
111
|
+
windowsHide: true,
|
|
112
|
+
});
|
|
113
|
+
if (result.status === 0 && result.stdout) {
|
|
114
|
+
// May have multiple roots for merged repos, use first
|
|
115
|
+
const commits = result.stdout.trim().split('\n');
|
|
116
|
+
return commits[0] || null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
/* ignore */
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Normalize git URL for consistent hashing.
|
|
126
|
+
* Handles: SSH, HTTPS, with/without .git suffix
|
|
127
|
+
*
|
|
128
|
+
* Examples:
|
|
129
|
+
* git@github.com:user/repo.git -> github.com/user/repo
|
|
130
|
+
* https://github.com/user/repo.git -> github.com/user/repo
|
|
131
|
+
* ssh://git@github.com/user/repo -> github.com/user/repo
|
|
132
|
+
*/
|
|
133
|
+
export function normalizeGitUrl(url) {
|
|
134
|
+
let normalized = url.trim();
|
|
135
|
+
// Remove ssh:// prefix
|
|
136
|
+
normalized = normalized.replace(/^ssh:\/\//, '');
|
|
137
|
+
// Remove git@ prefix
|
|
138
|
+
normalized = normalized.replace(/^git@/, '');
|
|
139
|
+
// Remove https:// or http:// prefix
|
|
140
|
+
normalized = normalized.replace(/^https?:\/\//, '');
|
|
141
|
+
// Replace : with / (SSH style urls like github.com:user/repo)
|
|
142
|
+
normalized = normalized.replace(/:(?!\/)/, '/');
|
|
143
|
+
// Remove .git suffix
|
|
144
|
+
normalized = normalized.replace(/\.git$/, '');
|
|
145
|
+
// Lowercase for consistency
|
|
146
|
+
normalized = normalized.toLowerCase();
|
|
147
|
+
return normalized;
|
|
148
|
+
}
|
|
149
|
+
// --- Package.json Utilities ---
|
|
150
|
+
/**
|
|
151
|
+
* Get package name from package.json.
|
|
152
|
+
*/
|
|
153
|
+
function getPackageName(projectRoot) {
|
|
154
|
+
const pjPath = path.join(projectRoot, 'package.json');
|
|
155
|
+
try {
|
|
156
|
+
if (fs.existsSync(pjPath)) {
|
|
157
|
+
const pkg = JSON.parse(fs.readFileSync(pjPath, 'utf8'));
|
|
158
|
+
if (pkg && typeof pkg.name === 'string' && pkg.name.trim()) {
|
|
159
|
+
return pkg.name.trim();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
/* ignore parse errors */
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
// --- Hash Utilities ---
|
|
169
|
+
function shortHash(s) {
|
|
170
|
+
try {
|
|
171
|
+
return crypto.createHash('sha256').update(s).digest('hex').slice(0, 8);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return '00000000';
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function sanitizeIdentity(s) {
|
|
178
|
+
// Allow alphanumeric, dash, underscore only
|
|
179
|
+
const sanitized = s.toLowerCase().replace(/[^a-z0-9-_]/g, '-');
|
|
180
|
+
// Truncate to reasonable length (32 chars max)
|
|
181
|
+
return sanitized.slice(0, 32) || 'profile';
|
|
182
|
+
}
|
|
183
|
+
function realpathSafe(p) {
|
|
184
|
+
try {
|
|
185
|
+
const rp = fs.realpathSync.native
|
|
186
|
+
? fs.realpathSync.native(p)
|
|
187
|
+
: fs.realpathSync(p);
|
|
188
|
+
return rp;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return path.normalize(p);
|
|
192
|
+
}
|
|
193
|
+
}
|