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< React.SetStateAction | undefined> > setShowIdeOnboarding: React.Dispatch> setIDEInstallationState: React.Dispatch< React.SetStateAction > } 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, ]) }