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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Graceful Shutdown Module
|
|
8
|
+
*
|
|
9
|
+
* Ensures clean shutdown of MCP server:
|
|
10
|
+
* - Closes Puppeteer browser gracefully
|
|
11
|
+
* - Kills orphaned Chrome processes
|
|
12
|
+
* - Handles SIGTERM, SIGINT, disconnect, uncaught exceptions
|
|
13
|
+
*/
|
|
14
|
+
import fs from 'node:fs/promises';
|
|
15
|
+
import process from 'node:process';
|
|
16
|
+
/**
|
|
17
|
+
* Setup graceful shutdown handlers
|
|
18
|
+
*/
|
|
19
|
+
export function setupGraceful(options) {
|
|
20
|
+
const { getBrowser, onBeforeExit, pidFile = process.env.MCP_BROWSER_PID_FILE, closeTimeoutMs = 3000, } = options;
|
|
21
|
+
let isShuttingDown = false;
|
|
22
|
+
/**
|
|
23
|
+
* Kill Chrome process using PID file
|
|
24
|
+
*/
|
|
25
|
+
async function killFromPidFile() {
|
|
26
|
+
if (!pidFile)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
const txt = await fs.readFile(pidFile, 'utf8').catch(() => '');
|
|
30
|
+
const pid = Number(txt.trim());
|
|
31
|
+
if (pid > 0) {
|
|
32
|
+
try {
|
|
33
|
+
// Check if process exists
|
|
34
|
+
process.kill(pid, 0);
|
|
35
|
+
// Process exists, kill it
|
|
36
|
+
process.kill(pid, 'SIGKILL');
|
|
37
|
+
console.error(`[graceful] Killed Chrome process: ${pid}`);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
// Process doesn't exist (already dead)
|
|
41
|
+
console.error(`[graceful] Chrome process ${pid} already dead`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
await fs.rm(pidFile, { force: true });
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error(`[graceful] Error killing Chrome from PID file:`, err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Graceful exit handler
|
|
52
|
+
*/
|
|
53
|
+
async function gracefulExit(signal) {
|
|
54
|
+
if (isShuttingDown) {
|
|
55
|
+
console.error(`[graceful] Already shutting down, ignoring ${signal}`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
isShuttingDown = true;
|
|
59
|
+
console.error(`[graceful] Shutting down... (signal: ${signal || 'unknown'})`);
|
|
60
|
+
try {
|
|
61
|
+
// Step 1: onBeforeExit callback
|
|
62
|
+
if (onBeforeExit) {
|
|
63
|
+
try {
|
|
64
|
+
await onBeforeExit();
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error(`[graceful] onBeforeExit error:`, err);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Step 2: Close browser gracefully (with timeout)
|
|
71
|
+
const browser = getBrowser?.();
|
|
72
|
+
if (browser) {
|
|
73
|
+
try {
|
|
74
|
+
console.error(`[graceful] Closing browser...`);
|
|
75
|
+
await Promise.race([
|
|
76
|
+
Promise.resolve(browser.close?.()),
|
|
77
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('browser.close() timeout')), closeTimeoutMs)),
|
|
78
|
+
]);
|
|
79
|
+
console.error(`[graceful] Browser closed successfully`);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.error(`[graceful] Browser close error:`, err);
|
|
83
|
+
// Continue to PID file cleanup
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Step 3: Kill orphaned Chrome (if browser.close() failed)
|
|
87
|
+
await killFromPidFile();
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
console.error(`[graceful] Error during shutdown:`, err);
|
|
91
|
+
}
|
|
92
|
+
console.error(`[graceful] Shutdown complete`);
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
// Register signal handlers
|
|
96
|
+
process.on('SIGTERM', () => gracefulExit('SIGTERM'));
|
|
97
|
+
process.on('SIGINT', () => gracefulExit('SIGINT'));
|
|
98
|
+
process.on('disconnect', () => gracefulExit('disconnect')); // Parent died
|
|
99
|
+
process.on('uncaughtException', async (err) => {
|
|
100
|
+
console.error('[graceful] Uncaught exception:', err);
|
|
101
|
+
await gracefulExit('uncaughtException');
|
|
102
|
+
});
|
|
103
|
+
process.on('unhandledRejection', async (err) => {
|
|
104
|
+
console.error('[graceful] Unhandled rejection:', err);
|
|
105
|
+
await gracefulExit('unhandledRejection');
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
/**
|
|
109
|
+
* Announce Chrome PID to wrapper via PID file
|
|
110
|
+
*/
|
|
111
|
+
async announceBrowserPid(pid) {
|
|
112
|
+
if (!pidFile || !pid) {
|
|
113
|
+
console.error(`[graceful] Cannot announce browser PID: pidFile=${pidFile}, pid=${pid}`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
await fs.writeFile(pidFile, String(pid), 'utf8');
|
|
118
|
+
console.error(`[graceful] Announced browser PID ${pid} to ${pidFile}`);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
console.error(`[graceful] Failed to write PID file:`, err);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { version } from 'node:process';
|
|
8
|
+
const [major, minor] = version.substring(1).split('.').map(Number);
|
|
9
|
+
if (major < 22 || (major === 22 && minor < 12)) {
|
|
10
|
+
console.error(`ERROR: \`chrome-ai-bridge\` does not support Node ${process.version}. Please upgrade to Node 22.12.0 or newer.`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
await import('./main.js');
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import debug from 'debug';
|
|
8
|
+
const mcpDebugNamespace = 'mcp:log';
|
|
9
|
+
const namespacesToEnable = [
|
|
10
|
+
mcpDebugNamespace,
|
|
11
|
+
...(process.env['DEBUG'] ? [process.env['DEBUG']] : []),
|
|
12
|
+
];
|
|
13
|
+
export function saveLogsToFile(fileName) {
|
|
14
|
+
// Enable overrides everything so we need to add them
|
|
15
|
+
debug.enable(namespacesToEnable.join(','));
|
|
16
|
+
const logFile = fs.createWriteStream(fileName, { flags: 'a' });
|
|
17
|
+
debug.log = function (...chunks) {
|
|
18
|
+
logFile.write(`${chunks.join(' ')}\n`);
|
|
19
|
+
};
|
|
20
|
+
logFile.on('error', function (error) {
|
|
21
|
+
console.log(`Error when opening/writing to log file: ${error.message}`);
|
|
22
|
+
logFile.end();
|
|
23
|
+
process.exit(1);
|
|
24
|
+
});
|
|
25
|
+
return logFile;
|
|
26
|
+
}
|
|
27
|
+
export const logger = debug(mcpDebugNamespace);
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Login status enum for state machine
|
|
8
|
+
* Based on ChatGPT/Gemini recommendations
|
|
9
|
+
*/
|
|
10
|
+
export var LoginStatus;
|
|
11
|
+
(function (LoginStatus) {
|
|
12
|
+
LoginStatus["LOGGED_IN"] = "LOGGED_IN";
|
|
13
|
+
LoginStatus["NEEDS_LOGIN"] = "NEEDS_LOGIN";
|
|
14
|
+
LoginStatus["IN_PROGRESS"] = "IN_PROGRESS";
|
|
15
|
+
LoginStatus["BLOCKED"] = "BLOCKED";
|
|
16
|
+
})(LoginStatus || (LoginStatus = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Multi-language ARIA label patterns for Gemini profile button detection
|
|
19
|
+
* Extended based on Gemini's recommendation to add PT/RU/AR
|
|
20
|
+
*/
|
|
21
|
+
const GEMINI_PROFILE_PATTERNS = [
|
|
22
|
+
'Google Account', // English
|
|
23
|
+
'Google アカウント', // Japanese
|
|
24
|
+
'Compte Google', // French
|
|
25
|
+
'Google-Konto', // German
|
|
26
|
+
'Cuenta de Google', // Spanish
|
|
27
|
+
'Account Google', // Italian
|
|
28
|
+
'구글 계정', // Korean
|
|
29
|
+
'谷歌帐户', // Chinese Simplified
|
|
30
|
+
'Google 帳戶', // Chinese Traditional
|
|
31
|
+
'Conta do Google', // Portuguese (Gemini recommendation)
|
|
32
|
+
'Аккаунт Google', // Russian (Gemini recommendation)
|
|
33
|
+
'حساب Google', // Arabic (Gemini recommendation)
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Probe ChatGPT session via API endpoint (most reliable method)
|
|
37
|
+
* Based on ChatGPT's recommendation to use /api/auth/session
|
|
38
|
+
* Improved with stricter validation and HTTP status handling
|
|
39
|
+
*/
|
|
40
|
+
export async function probeChatGPTSession(page) {
|
|
41
|
+
try {
|
|
42
|
+
const result = await page.evaluate(async () => {
|
|
43
|
+
try {
|
|
44
|
+
// Use AbortController for timeout (ChatGPT recommendation)
|
|
45
|
+
const controller = new AbortController();
|
|
46
|
+
const timeoutId = setTimeout(() => controller.abort(), 1500);
|
|
47
|
+
const r = await fetch('/api/auth/session', {
|
|
48
|
+
credentials: 'include',
|
|
49
|
+
cache: 'no-store',
|
|
50
|
+
signal: controller.signal,
|
|
51
|
+
});
|
|
52
|
+
clearTimeout(timeoutId);
|
|
53
|
+
const contentType = r.headers.get('content-type') || '';
|
|
54
|
+
const isJson = contentType.includes('application/json');
|
|
55
|
+
// Handle non-JSON responses (WAF/interstitial pages)
|
|
56
|
+
if (!isJson) {
|
|
57
|
+
return {
|
|
58
|
+
ok: false,
|
|
59
|
+
status: r.status,
|
|
60
|
+
isHtml: true,
|
|
61
|
+
error: 'Non-JSON response',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const j = await r.json().catch(() => ({}));
|
|
65
|
+
return { ok: r.ok, status: r.status, json: j };
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
const isAbort = e instanceof Error && e.name === 'AbortError';
|
|
69
|
+
return { ok: false, error: String(e), isTimeout: isAbort };
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// Handle timeout
|
|
73
|
+
if (result?.isTimeout) {
|
|
74
|
+
console.error('[login-helper] Session probe timed out');
|
|
75
|
+
return LoginStatus.IN_PROGRESS;
|
|
76
|
+
}
|
|
77
|
+
// Handle HTML response (WAF/blocked)
|
|
78
|
+
if (result?.isHtml) {
|
|
79
|
+
console.error('[login-helper] Session probe returned HTML (possibly blocked)');
|
|
80
|
+
return LoginStatus.BLOCKED;
|
|
81
|
+
}
|
|
82
|
+
// Handle HTTP error statuses (ChatGPT recommendation)
|
|
83
|
+
if (result?.status === 429) {
|
|
84
|
+
console.error('[login-helper] Rate limited (429)');
|
|
85
|
+
return LoginStatus.BLOCKED;
|
|
86
|
+
}
|
|
87
|
+
if (result?.status === 401 || result?.status === 403) {
|
|
88
|
+
console.error(`[login-helper] Auth error (${result.status})`);
|
|
89
|
+
return LoginStatus.NEEDS_LOGIN;
|
|
90
|
+
}
|
|
91
|
+
if (!result?.ok) {
|
|
92
|
+
console.error('[login-helper] Session probe failed:', result);
|
|
93
|
+
return LoginStatus.IN_PROGRESS;
|
|
94
|
+
}
|
|
95
|
+
// Stricter validation: check for specific fields (ChatGPT recommendation)
|
|
96
|
+
const j = result.json ?? {};
|
|
97
|
+
const hasUser = j?.user?.id || j?.user?.email;
|
|
98
|
+
const hasToken = j?.accessToken;
|
|
99
|
+
const loggedIn = !!(hasUser || hasToken);
|
|
100
|
+
console.error(`[login-helper] ChatGPT session probe: ${loggedIn ? 'LOGGED_IN' : 'NEEDS_LOGIN'} (user: ${!!hasUser}, token: ${!!hasToken})`);
|
|
101
|
+
return loggedIn ? LoginStatus.LOGGED_IN : LoginStatus.NEEDS_LOGIN;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(`[login-helper] Error probing ChatGPT session: ${error}`);
|
|
105
|
+
return LoginStatus.IN_PROGRESS;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get Gemini login status using ARIA labels (multi-language support)
|
|
110
|
+
* Based on Gemini's recommendation to use aria-label patterns
|
|
111
|
+
* Added fail-fast Sign In detection (Gemini recommendation)
|
|
112
|
+
*/
|
|
113
|
+
export async function getGeminiStatus(page) {
|
|
114
|
+
const url = page.url();
|
|
115
|
+
// URL-based check (fastest)
|
|
116
|
+
if (url.includes('accounts.google.com')) {
|
|
117
|
+
console.error('[login-helper] Gemini: On Google login page');
|
|
118
|
+
return LoginStatus.NEEDS_LOGIN;
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const result = await page.evaluate((patterns) => {
|
|
122
|
+
// FAIL-FAST: Check for Sign In link (Gemini recommendation)
|
|
123
|
+
// This is language-agnostic and very reliable
|
|
124
|
+
const signInLink = document.querySelector('a[href*="accounts.google.com/ServiceLogin"]');
|
|
125
|
+
if (signInLink) {
|
|
126
|
+
return { signInPresent: true, profileFound: false };
|
|
127
|
+
}
|
|
128
|
+
// Check for Terms of Service / dialog blocking the UI (Gemini recommendation)
|
|
129
|
+
const hasBlockingDialog = document.querySelector('[role="dialog"]') !== null;
|
|
130
|
+
// Method 1: Check aria-label attribute
|
|
131
|
+
for (const pattern of patterns) {
|
|
132
|
+
if (document.querySelector(`button[aria-label*="${pattern}"]`)) {
|
|
133
|
+
return {
|
|
134
|
+
signInPresent: false,
|
|
135
|
+
profileFound: true,
|
|
136
|
+
hasDialog: hasBlockingDialog,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Method 2: Check button text content (Gemini may not use aria-label)
|
|
141
|
+
const buttons = Array.from(document.querySelectorAll('button'));
|
|
142
|
+
for (const pattern of patterns) {
|
|
143
|
+
const found = buttons.some(btn => btn.textContent?.includes(pattern));
|
|
144
|
+
if (found) {
|
|
145
|
+
return {
|
|
146
|
+
signInPresent: false,
|
|
147
|
+
profileFound: true,
|
|
148
|
+
hasDialog: hasBlockingDialog,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Fallback: check for nav with chat history (logged-in indicator)
|
|
153
|
+
if (document.querySelector('nav[aria-label*="Recent"]')) {
|
|
154
|
+
return {
|
|
155
|
+
signInPresent: false,
|
|
156
|
+
profileFound: true,
|
|
157
|
+
hasDialog: hasBlockingDialog,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Fallback: check for textbox (user is on main chat page)
|
|
161
|
+
if (document.querySelector('[role="textbox"]')) {
|
|
162
|
+
return {
|
|
163
|
+
signInPresent: false,
|
|
164
|
+
profileFound: true,
|
|
165
|
+
hasDialog: hasBlockingDialog,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
signInPresent: false,
|
|
170
|
+
profileFound: false,
|
|
171
|
+
hasDialog: hasBlockingDialog,
|
|
172
|
+
};
|
|
173
|
+
}, GEMINI_PROFILE_PATTERNS);
|
|
174
|
+
// Fail-fast: Sign In link present means not logged in
|
|
175
|
+
if (result.signInPresent) {
|
|
176
|
+
console.error('[login-helper] Gemini: Sign In link detected (fail-fast)');
|
|
177
|
+
return LoginStatus.NEEDS_LOGIN;
|
|
178
|
+
}
|
|
179
|
+
// Logged in but dialog blocking
|
|
180
|
+
if (result.profileFound && result.hasDialog) {
|
|
181
|
+
console.error('[login-helper] Gemini: Logged in but dialog present (Terms of Service?)');
|
|
182
|
+
return LoginStatus.IN_PROGRESS;
|
|
183
|
+
}
|
|
184
|
+
console.error(`[login-helper] Gemini check: ${result.profileFound ? 'LOGGED_IN' : 'NEEDS_LOGIN'}`);
|
|
185
|
+
return result.profileFound
|
|
186
|
+
? LoginStatus.LOGGED_IN
|
|
187
|
+
: LoginStatus.NEEDS_LOGIN;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error(`[login-helper] Error checking Gemini status: ${error}`);
|
|
191
|
+
return LoginStatus.IN_PROGRESS;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get login status for a specific provider
|
|
196
|
+
*/
|
|
197
|
+
export async function getLoginStatus(page, provider) {
|
|
198
|
+
if (provider === 'chatgpt') {
|
|
199
|
+
// Try session probe first (most reliable)
|
|
200
|
+
const sessionStatus = await probeChatGPTSession(page);
|
|
201
|
+
if (sessionStatus !== LoginStatus.IN_PROGRESS) {
|
|
202
|
+
return sessionStatus;
|
|
203
|
+
}
|
|
204
|
+
// Fallback to DOM-based detection
|
|
205
|
+
const needsLogin = await isLoginRequired(page);
|
|
206
|
+
return needsLogin ? LoginStatus.NEEDS_LOGIN : LoginStatus.LOGGED_IN;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
return await getGeminiStatus(page);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Wait for login with auto-polling and backoff
|
|
214
|
+
* Returns when user logs in or timeout occurs
|
|
215
|
+
*/
|
|
216
|
+
export async function waitForLoginStatus(page, provider, timeoutMs = 120000, onStatusUpdate) {
|
|
217
|
+
const log = onStatusUpdate || console.error;
|
|
218
|
+
const start = Date.now();
|
|
219
|
+
let delay = 500;
|
|
220
|
+
log(`⏳ ログイン待機中(最大${Math.floor(timeoutMs / 1000)}秒)...`);
|
|
221
|
+
while (Date.now() - start < timeoutMs) {
|
|
222
|
+
const status = await getLoginStatus(page, provider);
|
|
223
|
+
if (status === LoginStatus.LOGGED_IN) {
|
|
224
|
+
log('✅ ログイン検出!続行します...');
|
|
225
|
+
return status;
|
|
226
|
+
}
|
|
227
|
+
const elapsed = Math.floor((Date.now() - start) / 1000);
|
|
228
|
+
if (elapsed % 10 === 0 && elapsed > 0) {
|
|
229
|
+
log(`⏳ まだ待機中... (${elapsed}秒経過)`);
|
|
230
|
+
}
|
|
231
|
+
await new Promise(r => setTimeout(r, delay));
|
|
232
|
+
// Backoff with jitter (ChatGPT recommendation: ±10-20% randomization)
|
|
233
|
+
const jitter = 0.9 + Math.random() * 0.2; // 0.9 to 1.1
|
|
234
|
+
delay = Math.min(3000, Math.floor(delay * 1.5 * jitter));
|
|
235
|
+
}
|
|
236
|
+
log('❌ タイムアウト: 再度お試しください');
|
|
237
|
+
return LoginStatus.NEEDS_LOGIN;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Check if the page requires login
|
|
241
|
+
* More robust than just checking URL
|
|
242
|
+
*/
|
|
243
|
+
export async function isLoginRequired(page) {
|
|
244
|
+
const currentUrl = page.url();
|
|
245
|
+
console.error(`[login-helper] Checking login status for URL: ${currentUrl}`);
|
|
246
|
+
// Method 1: Check URL patterns
|
|
247
|
+
if (currentUrl.includes('auth') ||
|
|
248
|
+
currentUrl.includes('login') ||
|
|
249
|
+
currentUrl.includes('signin')) {
|
|
250
|
+
console.error('[login-helper] ✅ Login required (URL contains auth/login/signin)');
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
// Gemini specific check
|
|
254
|
+
if (currentUrl.includes('gemini.google.com')) {
|
|
255
|
+
try {
|
|
256
|
+
const geminiContent = await page.evaluate(() => {
|
|
257
|
+
const bodyText = document.body.innerText.toLowerCase();
|
|
258
|
+
// Check for common login page text
|
|
259
|
+
const hasLoginText = bodyText.includes('sign in') ||
|
|
260
|
+
bodyText.includes('login') ||
|
|
261
|
+
bodyText.includes('google account');
|
|
262
|
+
// Check for Gemini composer
|
|
263
|
+
const hasComposer = !!(document.querySelector('div[contenteditable="true"]') ||
|
|
264
|
+
document.querySelector('textarea'));
|
|
265
|
+
return { hasLoginText, hasComposer };
|
|
266
|
+
});
|
|
267
|
+
console.error(`[login-helper] Gemini check: ${JSON.stringify(geminiContent)}`);
|
|
268
|
+
if (geminiContent.hasComposer) {
|
|
269
|
+
console.error('[login-helper] ❌ Login NOT required (Gemini composer detected)');
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
console.error('[login-helper] ✅ Login required (Gemini composer missing)');
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
console.error(`[login-helper] Error checking Gemini login: ${error}`);
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Method 2: Check page content for login indicators
|
|
281
|
+
try {
|
|
282
|
+
const pageContent = await page.evaluate(() => {
|
|
283
|
+
// Check for common login page text
|
|
284
|
+
const bodyText = document.body.innerText.toLowerCase();
|
|
285
|
+
// ChatGPT-specific login indicators
|
|
286
|
+
const hasLoginText = bodyText.includes('log in') ||
|
|
287
|
+
bodyText.includes('sign in') ||
|
|
288
|
+
bodyText.includes('welcome to chatgpt');
|
|
289
|
+
// Check for login buttons - NATIVE DOM selectors only
|
|
290
|
+
const hasLoginButton = !!(document.querySelector('[data-testid*="login"]') ||
|
|
291
|
+
document.querySelector('[class*="login-button"]') ||
|
|
292
|
+
// Check for text content in buttons
|
|
293
|
+
Array.from(document.querySelectorAll('button')).some(btn => btn.textContent?.toLowerCase().includes('log in') ||
|
|
294
|
+
btn.textContent?.toLowerCase().includes('sign in')));
|
|
295
|
+
// Check for ChatGPT-specific composer (more strict detection)
|
|
296
|
+
// Look for the actual textarea/contenteditable that ChatGPT uses
|
|
297
|
+
let hasComposer = false;
|
|
298
|
+
// Method 1: Check for ChatGPT's main textarea (with validation)
|
|
299
|
+
const mainTextarea = document.querySelector('#prompt-textarea');
|
|
300
|
+
if (mainTextarea && mainTextarea instanceof HTMLTextAreaElement) {
|
|
301
|
+
// Additional validation: login page has a fallback textarea with class "_fallbackTextarea_"
|
|
302
|
+
// Real composer should NOT be disabled and should be in a proper composer container
|
|
303
|
+
const isFallback = mainTextarea.className.includes('fallback');
|
|
304
|
+
const isDisabled = mainTextarea.disabled;
|
|
305
|
+
if (!isFallback && !isDisabled) {
|
|
306
|
+
console.error('[login-helper] Found valid #prompt-textarea (not fallback)');
|
|
307
|
+
hasComposer = true;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
console.error('[login-helper] Found #prompt-textarea but it appears to be a fallback/disabled textarea');
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Method 2: Check Shadow DOM for ChatGPT's composer
|
|
314
|
+
if (!hasComposer) {
|
|
315
|
+
const shadowHosts = Array.from(document.querySelectorAll('*'));
|
|
316
|
+
for (const host of shadowHosts) {
|
|
317
|
+
if (host.shadowRoot) {
|
|
318
|
+
const shadowTextarea = host.shadowRoot.querySelector('#prompt-textarea');
|
|
319
|
+
const shadowComposer = host.shadowRoot.querySelector('[data-testid="composer-textarea"]');
|
|
320
|
+
if (shadowTextarea || shadowComposer) {
|
|
321
|
+
console.error('[login-helper] Found composer in Shadow DOM');
|
|
322
|
+
hasComposer = true;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Method 3: Check for ChatGPT-specific ProseMirror editor (only if it's in main content area)
|
|
329
|
+
if (!hasComposer) {
|
|
330
|
+
const proseMirror = document.querySelector('.ProseMirror[contenteditable="true"]');
|
|
331
|
+
// Verify it's actually ChatGPT's main composer, not just any ProseMirror
|
|
332
|
+
if (proseMirror) {
|
|
333
|
+
const parent = proseMirror.closest('[class*="composer"], [class*="prompt"], [class*="input-area"]');
|
|
334
|
+
if (parent) {
|
|
335
|
+
console.error('[login-helper] Found ChatGPT ProseMirror composer');
|
|
336
|
+
hasComposer = true;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return {
|
|
341
|
+
hasLoginText,
|
|
342
|
+
hasLoginButton,
|
|
343
|
+
hasComposer,
|
|
344
|
+
bodySnippet: bodyText.substring(0, 200),
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
console.error(`[login-helper] Page analysis: ${JSON.stringify(pageContent, null, 2)}`);
|
|
348
|
+
// Decision point 1: PRIORITY - Login button present = needs login (even if fallback composer exists)
|
|
349
|
+
if (pageContent.hasLoginButton) {
|
|
350
|
+
console.error('[login-helper] 🔍 Decision: Login button detected (highest priority)');
|
|
351
|
+
console.error('[login-helper] hasLoginButton:', pageContent.hasLoginButton);
|
|
352
|
+
console.error('[login-helper] hasComposer:', pageContent.hasComposer);
|
|
353
|
+
console.error('[login-helper] ✅ Login required (login button detected)');
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
// Decision point 2: Login text present + NO valid composer = needs login
|
|
357
|
+
if (pageContent.hasLoginText && !pageContent.hasComposer) {
|
|
358
|
+
console.error('[login-helper] 🔍 Decision: Login text detected + No valid composer');
|
|
359
|
+
console.error('[login-helper] hasLoginText:', pageContent.hasLoginText);
|
|
360
|
+
console.error('[login-helper] hasComposer:', pageContent.hasComposer);
|
|
361
|
+
console.error('[login-helper] ✅ Login required (login UI detected, no composer)');
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
// Decision point 3: Valid composer present = logged in
|
|
365
|
+
if (pageContent.hasComposer) {
|
|
366
|
+
console.error('[login-helper] 🔍 Decision: Valid composer found (user is logged in)');
|
|
367
|
+
console.error('[login-helper] hasComposer:', pageContent.hasComposer);
|
|
368
|
+
console.error('[login-helper] ❌ Login NOT required (composer detected)');
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
// Decision point 3: Ambiguous state - safe default is to assume login required
|
|
372
|
+
console.error('[login-helper] 🔍 Decision: Unclear state (no login UI, no composer)');
|
|
373
|
+
console.error('[login-helper] hasLoginText:', pageContent.hasLoginText);
|
|
374
|
+
console.error('[login-helper] hasLoginButton:', pageContent.hasLoginButton);
|
|
375
|
+
console.error('[login-helper] hasComposer:', pageContent.hasComposer);
|
|
376
|
+
console.error('[login-helper] bodySnippet:', pageContent.bodySnippet);
|
|
377
|
+
console.error('[login-helper] ⚠️ Unclear state - assuming login required for safety');
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
console.error(`[login-helper] Error during page content check: ${error}`);
|
|
382
|
+
// On error, assume login required for safety
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Wait for user to complete login
|
|
388
|
+
* Shows visual guidance and polls for login completion
|
|
389
|
+
*/
|
|
390
|
+
export async function waitForLogin(page, options = {}) {
|
|
391
|
+
const maxWaitTime = options.maxWaitTime || 300000; // 5 minutes default
|
|
392
|
+
const pollInterval = options.pollInterval || 2000; // 2 seconds default
|
|
393
|
+
const onStatusUpdate = options.onStatusUpdate || console.error;
|
|
394
|
+
const startTime = Date.now();
|
|
395
|
+
onStatusUpdate('\n🔐 ログインが必要です');
|
|
396
|
+
onStatusUpdate('📱 ブラウザウィンドウでChatGPTにログインしてください');
|
|
397
|
+
onStatusUpdate(`⏰ 最大待機時間: ${Math.floor(maxWaitTime / 1000)}秒`);
|
|
398
|
+
onStatusUpdate('\n💡 ログイン方法:');
|
|
399
|
+
onStatusUpdate(' 1. ブラウザウィンドウでChatGPTのログインボタンをクリック');
|
|
400
|
+
onStatusUpdate(' 2. メールアドレスまたはGoogleアカウントでログイン');
|
|
401
|
+
onStatusUpdate(' 3. ログイン完了後、自動的に処理が続行されます\n');
|
|
402
|
+
// Poll for login completion
|
|
403
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
404
|
+
const elapsed = Math.floor((Date.now() - startTime) / 1000);
|
|
405
|
+
onStatusUpdate(`⏳ ログイン待機中... (${elapsed}秒経過)`);
|
|
406
|
+
// Check if login is completed
|
|
407
|
+
const stillNeedsLogin = await isLoginRequired(page);
|
|
408
|
+
if (!stillNeedsLogin) {
|
|
409
|
+
onStatusUpdate('\n✅ ログイン完了!処理を続行します...\n');
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
// Wait before next poll
|
|
413
|
+
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
|
414
|
+
}
|
|
415
|
+
// Timeout
|
|
416
|
+
onStatusUpdate('\n⏱️ ログイン待機がタイムアウトしました');
|
|
417
|
+
onStatusUpdate('💡 再度実行してください\n');
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Ensure user is logged in to ChatGPT
|
|
422
|
+
* If not, guide them through login process
|
|
423
|
+
*/
|
|
424
|
+
export async function ensureLoggedIn(page, options = {}) {
|
|
425
|
+
const needsLogin = await isLoginRequired(page);
|
|
426
|
+
if (!needsLogin) {
|
|
427
|
+
return true; // Already logged in
|
|
428
|
+
}
|
|
429
|
+
// Wait for user to login
|
|
430
|
+
return await waitForLogin(page, options);
|
|
431
|
+
}
|