import { useEffect } from 'react'; import type { ScopedMcpServerConfig } from '../services/mcp/types.js'; import { getGlobalConfig } from '../utils/config.js'; import { isEnvDefinedFalsy, isEnvTruthy } from '../utils/envUtils.js'; import type { DetectedIDEInfo } from '../utils/ide.js'; import { type IDEExtensionInstallationStatus, type IdeType, initializeIdeIntegration, isSupportedTerminal, } from '../utils/ide.js'; type UseIDEIntegrationProps = { autoConnectIdeFlag?: boolean; ideToInstallExtension: IdeType | null; setDynamicMcpConfig: React.Dispatch | undefined>>; setShowIdeOnboarding: React.Dispatch>; setIDEInstallationState: React.Dispatch>; }; export function useIDEIntegration({ autoConnectIdeFlag, ideToInstallExtension, setDynamicMcpConfig, setShowIdeOnboarding, setIDEInstallationState, }: UseIDEIntegrationProps): void { useEffect(() => { function addIde(ide: DetectedIDEInfo | null) { if (!ide) { return; } // Check if auto-connect is enabled const globalConfig = getGlobalConfig(); const autoConnectEnabled = (globalConfig.autoConnectIde || autoConnectIdeFlag || isSupportedTerminal() || // tmux/screen overwrite TERM_PROGRAM, breaking terminal detection, but the // IDE extension's port env var is inherited. If set, auto-connect anyway. process.env.CLAUDE_CODE_SSE_PORT || ideToInstallExtension || isEnvTruthy(process.env.CLAUDE_CODE_AUTO_CONNECT_IDE)) && !isEnvDefinedFalsy(process.env.CLAUDE_CODE_AUTO_CONNECT_IDE); if (!autoConnectEnabled) { return; } setDynamicMcpConfig(prev => { // Only add the IDE if we don't already have one if (prev?.ide) { return prev; } return { ...prev, ide: { type: ide.url.startsWith('ws:') ? 'ws-ide' : 'sse-ide', url: ide.url, ideName: ide.name, authToken: ide.authToken, ideRunningInWindows: ide.ideRunningInWindows, scope: 'dynamic' as const, }, }; }); } // Use the new utility function void initializeIdeIntegration( addIde, ideToInstallExtension, () => setShowIdeOnboarding(true), status => setIDEInstallationState(status), ); }, [autoConnectIdeFlag, ideToInstallExtension, setDynamicMcpConfig, setShowIdeOnboarding, setIDEInstallationState]); }