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,