using System; namespace io.github.hatayama.uLoopMCP { /// /// Automatically updates MCP configuration files when ULOOPMCP_DEBUG scripting define symbol changes /// /// Design document reference: Packages/src/Editor/ARCHITECTURE.md /// /// Related classes: /// - McpServerController: Calls this class during OnAfterAssemblyReload /// - McpConfigService: Used to update individual editor configurations /// - ULoopMCPDebugToggle: Provides the debug symbol toggle functionality /// - McpConfigServiceFactory: Creates configuration services for different editors /// public static class McpDebugStateUpdater { /// /// Updates all configured MCP editor settings to match current ULOOPMCP_DEBUG state /// Called during domain reload to ensure configurations stay in sync /// public static void UpdateAllConfigurationsForDebugState() { bool isDebugMode = IsDebugModeEnabled(); string correlationId = VibeLogger.GenerateCorrelationId(); VibeLogger.LogInfo( "debug_state_update_start", $"Starting MCP configuration update for debug state: {isDebugMode}", new { debug_mode = isDebugMode }, correlationId, "Automatic update triggered by domain reload", "Monitor which editor configurations are updated" ); int updatedCount = 0; McpConfigServiceFactory factory = new(); // Check all editor types for existing configurations foreach (McpEditorType editorType in Enum.GetValues(typeof(McpEditorType))) { IMcpConfigService configService = factory.GetConfigService(editorType); // Only update if configuration already exists if (configService.IsConfigured()) { // Get the current port from existing configuration int currentPort = configService.GetConfiguredPort(); // Update the configuration to match debug state configService.UpdateDevelopmentSettings(currentPort, false, isDebugMode); updatedCount++; VibeLogger.LogInfo( "debug_state_editor_updated", $"Updated {editorType} configuration for debug mode: {isDebugMode}", new { editor_type = editorType.ToString(), port = currentPort, debug_mode = isDebugMode }, correlationId, $"{editorType} settings synchronized with debug state", "Verify that MCP_DEBUG environment variable is correctly set" ); } } VibeLogger.LogInfo( "debug_state_update_complete", $"Completed MCP configuration update. Updated {updatedCount} editor configurations.", new { debug_mode = isDebugMode, updated_count = updatedCount }, correlationId, "Automatic debug state synchronization completed", "All configured editors should now have consistent debug settings" ); } /// /// Check if ULOOPMCP_DEBUG scripting define symbol is currently defined /// /// True if debug mode is enabled, false otherwise private static bool IsDebugModeEnabled() { bool isULoopMcpDebug; #if ULOOPMCP_DEBUG isULoopMcpDebug = true; #else isULoopMcpDebug = false; #endif return isULoopMcpDebug; } } }