From 10047b2192acf28acd13e108afe68963af7ec9ec Mon Sep 17 00:00:00 2001 From: rcourtman Date: Tue, 23 Dec 2025 18:39:34 +0000 Subject: [PATCH] fix(ai): force enabled state in demo mode Ensures the AI settings endpoint reports enabled=true and configured=true when running in demo mode (PULSE_MOCK_MODE=true), even if no provider is configured. This unlocks the frontend UI to allow interaction with the mock AI assistant. --- internal/ai/service.go | 4 ++++ internal/api/ai_handlers.go | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/ai/service.go b/internal/ai/service.go index ce7f25b4a..ea79a7579 100644 --- a/internal/ai/service.go +++ b/internal/ai/service.go @@ -931,6 +931,10 @@ func (s *Service) LoadConfig() error { // IsEnabled returns true if AI is enabled and configured func (s *Service) IsEnabled() bool { + // In demo mode, AI is always considered enabled (using mock backend) + if IsDemoMode() { + return true + } s.mu.RLock() defer s.mu.RUnlock() return s.cfg != nil && s.cfg.Enabled && s.provider != nil diff --git a/internal/api/ai_handlers.go b/internal/api/ai_handlers.go index 84cd5a4ca..db7c7ef4e 100644 --- a/internal/api/ai_handlers.go +++ b/internal/api/ai_handlers.go @@ -244,8 +244,11 @@ func (h *AISettingsHandler) HandleGetAISettings(w http.ResponseWriter, r *http.R authMethod = string(config.AuthMethodAPIKey) } + // Determine if running in demo mode + isDemo := strings.EqualFold(os.Getenv("PULSE_MOCK_MODE"), "true") + response := AISettingsResponse{ - Enabled: settings.Enabled, + Enabled: settings.Enabled || isDemo, Provider: settings.Provider, APIKeySet: settings.APIKey != "", Model: settings.GetModel(), @@ -253,7 +256,7 @@ func (h *AISettingsHandler) HandleGetAISettings(w http.ResponseWriter, r *http.R PatrolModel: settings.PatrolModel, AutoFixModel: settings.AutoFixModel, BaseURL: settings.BaseURL, - Configured: settings.IsConfigured(), + Configured: settings.IsConfigured() || isDemo, AutonomousMode: settings.AutonomousMode, CustomContext: settings.CustomContext, AuthMethod: authMethod,