Files

1048 lines
34 KiB
PHP

<?php
namespace App\Services\SystemConfig;
class SettingDefinitions
{
public const ALL = [
'app_name' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => 'Laravel',
'description' => 'Application name',
],
'enable_landing_page' => [
'type' => 'bool',
'group' => 'branding',
'is_public' => true,
'default' => true,
'description' => 'Enable/Disable the landing page (welcome page)',
],
'app_tagline' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => '',
'description' => 'Primary tagline',
],
'app_tagline1' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => '',
'description' => 'Secondary tagline',
],
'app_tagline2' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => '',
'description' => 'Description text',
],
'footer_text' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => '',
'description' => 'Footer text',
],
'default_locale' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => 'en',
'description' => 'Default language',
],
'instance_mode' => [
'type' => 'string',
'group' => 'branding',
'is_public' => true,
'default' => 'Production',
'description' => 'Environment/Instance Mode',
],
'app_logo' => [
'type' => 'image_path',
'group' => 'branding',
'is_public' => true,
'default' => null,
'description' => 'Application logo path',
],
'app_favicon' => [
'type' => 'image_path',
'group' => 'branding',
'is_public' => true,
'default' => null,
'description' => 'Application favicon path',
],
'regional_timezone' => [
'type' => 'string',
'group' => 'regional',
'is_public' => true,
'default' => 'Asia/Jakarta',
'description' => 'System default timezone',
],
'regional_date_format' => [
'type' => 'string',
'group' => 'regional',
'is_public' => true,
'default' => 'd/m/Y',
'description' => 'Date display format',
],
'regional_time_format' => [
'type' => 'string',
'group' => 'regional',
'is_public' => true,
'default' => 'H:i',
'description' => 'Time display format (12/24 hour)',
],
'feature_notification_center' => [
'type' => 'bool',
'group' => 'feature_flags',
'is_public' => false,
'default' => true,
'description' => 'Toggle notification center feature',
],
'feature_google_oauth' => [
'type' => 'bool',
'group' => 'feature_flags',
'is_public' => false,
'default' => false,
'description' => 'Toggle Google OAuth login',
],
'google_client_id' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'Google Client ID',
],
'google_client_secret' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'Google Client Secret',
],
'feature_facebook_oauth' => [
'type' => 'bool',
'group' => 'feature_flags',
'is_public' => false,
'default' => false,
'description' => 'Toggle Facebook OAuth login',
],
'facebook_app_id' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'Facebook App ID',
],
'facebook_app_secret' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'Facebook App Secret',
],
'feature_github_oauth' => [
'type' => 'bool',
'group' => 'feature_flags',
'is_public' => false,
'default' => false,
'description' => 'Toggle GitHub OAuth login',
],
'github_client_id' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'GitHub Client ID',
],
'github_client_secret' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '',
'description' => 'GitHub Client Secret',
],
'social_login_callback_url' => [
'type' => 'string',
'group' => 'feature_flags',
'is_public' => false,
'default' => '/auth/callback',
'description' => 'Global Social Login Callback URL',
],
// LOGIN SECURITY
'login_max_attempts' => [
'type' => 'int',
'group' => 'login_security',
'is_public' => false,
'default' => 5,
'description' => 'Maximum Login Attempts',
],
'login_lockout_duration' => [
'type' => 'int',
'group' => 'login_security',
'is_public' => false,
'default' => 15,
'description' => 'Lockout Duration (Minutes)',
],
'login_lockout_notify' => [
'type' => 'bool',
'group' => 'login_security',
'is_public' => false,
'default' => true,
'description' => 'Notify upon Lockout',
],
'two_factor_auth' => [
'type' => 'bool',
'group' => 'login_security',
'is_public' => false,
'default' => false,
'description' => 'Enable 2FA',
],
'two_factor_method' => [
'type' => 'string',
'group' => 'login_security',
'is_public' => false,
'default' => 'email',
'description' => '2FA Method',
],
'captcha_enabled' => [
'type' => 'bool',
'group' => 'login_security',
'is_public' => true,
'default' => false,
'description' => 'Enable Captcha',
],
'captcha_site_key' => [
'type' => 'string',
'group' => 'login_security',
'is_public' => true,
'default' => '',
'description' => 'reCAPTCHA Site Key',
],
'captcha_secret_key' => [
'type' => 'string',
'group' => 'login_security',
'is_public' => false,
'default' => '',
'description' => 'reCAPTCHA Secret',
],
'captcha_version' => [
'type' => 'string',
'group' => 'login_security',
'is_public' => true,
'default' => 'v2',
'description' => 'reCAPTCHA Version',
],
'login_log_enabled' => [
'type' => 'bool',
'group' => 'login_security',
'is_public' => false,
'default' => true,
'description' => 'Log Login Activity',
],
// PASSWORD POLICY
'password_min_length' => [
'type' => 'int',
'group' => 'password_policy',
'is_public' => true,
'default' => 8,
'description' => 'Minimum Password Length',
],
'password_max_length' => [
'type' => 'int',
'group' => 'password_policy',
'is_public' => true,
'default' => 64,
'description' => 'Maximum Password Length',
],
'password_require_uppercase' => [
'type' => 'bool',
'group' => 'password_policy',
'is_public' => true,
'default' => false,
'description' => 'Require Uppercase Letters',
],
'password_require_lowercase' => [
'type' => 'bool',
'group' => 'password_policy',
'is_public' => true,
'default' => false,
'description' => 'Require Lowercase Letters',
],
'password_require_numeric' => [
'type' => 'bool',
'group' => 'password_policy',
'is_public' => true,
'default' => false,
'description' => 'Require Numbers',
],
'password_require_special' => [
'type' => 'bool',
'group' => 'password_policy',
'is_public' => true,
'default' => false,
'description' => 'Require Symbols / Special Characters',
],
'password_expiry_days' => [
'type' => 'int',
'group' => 'password_policy',
'is_public' => false,
'default' => 0, // 0 = Never expire
'description' => 'Password Validity (Days)',
],
'password_history_count' => [
'type' => 'int',
'group' => 'password_policy',
'is_public' => false,
'default' => 0, // 0 = No history
'description' => 'Prevent Password Reuse (Count)',
],
'password_reset_link_expiry' => [
'type' => 'int',
'group' => 'password_policy',
'is_public' => false,
'default' => 60,
'description' => 'Password Reset Link Expiry (Minutes)',
],
// SESSION SECURITY
'session_driver' => [
'type' => 'string',
'group' => 'session_security',
'is_public' => false,
'default' => 'redis',
'description' => 'Session Driver (file/redis/database)',
],
'session_lifetime' => [
'type' => 'int',
'group' => 'session_security',
'is_public' => false,
'default' => 120,
'description' => 'Session Lifetime / Idle Timeout (Minutes)',
],
'session_single_session' => [
'type' => 'bool',
'group' => 'session_security',
'is_public' => false,
'default' => false,
'description' => 'Only allow 1 active session per user',
],
'session_auto_logout_idle' => [
'type' => 'int',
'group' => 'session_security',
'is_public' => false,
'default' => 30,
'description' => 'Auto Logout Idle (Minutes)',
],
'session_allow_remember_me' => [
'type' => 'bool',
'group' => 'session_security',
'is_public' => true,
'default' => true,
'description' => 'Allow Remember Me on Login',
],
'session_remember_me_duration' => [
'type' => 'int',
'group' => 'session_security',
'is_public' => false,
'default' => 30,
'description' => 'Remember Me Duration (Days)',
],
'session_secure_cookie' => [
'type' => 'bool',
'group' => 'session_security',
'is_public' => true,
'default' => false,
'description' => 'Secure Cookie (HTTPS Only)',
],
'session_encrypt' => [
'type' => 'bool',
'group' => 'session_security',
'is_public' => false,
'default' => false,
'description' => 'Encrypt Session Data',
],
'session_concurrent_limit' => [
'type' => 'int',
'group' => 'session_security',
'is_public' => false,
'default' => 0, // 0 = Unlimited
'description' => 'Concurrent Session Limit (Per User)',
],
// 2FA ENHANCEMENT
'two_factor_trust_days' => [
'type' => 'int',
'group' => 'login_security',
'is_public' => false,
'default' => 30,
'description' => 'Remember Trusted Devices (Days)',
],
// WEBAUTHN (PASSKEYS)
'webauthn_enabled' => [
'type' => 'bool',
'group' => 'login_security',
'is_public' => true,
'default' => false,
'description' => 'Enable Passkeys (Biometric/FIDO2)',
],
// IP & ACCESS CONTROL
'ip_whitelist_admin' => [
'type' => 'string',
'group' => 'ip_access',
'is_public' => false,
'default' => '',
'description' => 'Admin IP Whitelist (Comma separated)',
],
'ip_blacklist' => [
'type' => 'string',
'group' => 'ip_access',
'is_public' => false,
'default' => '',
'description' => 'Global IP Blacklist (Comma separated)',
],
'rate_limit_per_ip' => [
'type' => 'int',
'group' => 'ip_access',
'is_public' => false,
'default' => 60,
'description' => 'Max requests per minute per IP',
],
'auto_block_ip' => [
'type' => 'bool',
'group' => 'ip_access',
'is_public' => false,
'default' => false,
'description' => 'Automatically block suspicious IPs',
],
'threshold_auto_block' => [
'type' => 'int',
'group' => 'ip_access',
'is_public' => false,
'default' => 100,
'description' => 'Hits threshold before auto-block',
],
'force_https' => [
'type' => 'bool',
'group' => 'ip_access',
'is_public' => true,
'default' => false,
'description' => 'Force HTTPS redirection',
],
'hsts_enabled' => [
'type' => 'bool',
'group' => 'ip_access',
'is_public' => true,
'default' => false,
'description' => 'Enable HTTP Strict Transport Security',
],
'cors_origins' => [
'type' => 'string',
'group' => 'ip_access',
'is_public' => false,
'default' => '*',
'description' => 'Allowed CORS Origins',
],
'cors_methods' => [
'type' => 'string',
'group' => 'ip_access',
'is_public' => false,
'default' => '*',
'description' => 'Allowed CORS Methods',
],
'cors_headers' => [
'type' => 'string',
'group' => 'ip_access',
'is_public' => false,
'default' => '*',
'description' => 'Allowed CORS Headers',
],
// NOTIFICATIONS (EMAIL)
'mail_driver' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => 'smtp',
'description' => 'Email Driver (smtp, mailgun, ses)',
],
'mail_host' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => '',
'description' => 'SMTP Host Server',
],
'mail_port' => [
'type' => 'int',
'group' => 'notifications',
'is_public' => false,
'default' => 587,
'description' => 'SMTP Port (587/465/25)',
],
'mail_username' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => '',
'description' => 'SMTP Username',
],
'mail_password' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => '',
'description' => 'SMTP Password',
],
'mail_encryption' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => 'tls',
'description' => 'Encryption (tls/ssl/null)',
],
'mail_from_address' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => 'noreply@example.com',
'description' => 'Sender Email Address',
],
'mail_from_name' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => 'System Notification',
'description' => 'Sender Display Name',
],
'telegram_bot_token' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => '',
'description' => 'Telegram Bot Token',
],
'telegram_chat_id' => [
'type' => 'string',
'group' => 'notifications',
'is_public' => false,
'default' => '',
'description' => 'Default Telegram Chat ID',
],
// JADWAL BACKUP
'backup_db_enabled' => [
'type' => 'bool',
'group' => 'backups',
'is_public' => false,
'default' => true,
'description' => 'Enable automated database backup',
],
'backup_db_driver' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => 'local',
'description' => 'Storage Driver (local/s3/gdrive)',
],
'backup_db_frequency' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => 'daily',
'description' => 'Backup Frequency',
],
'backup_db_time' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '02:00',
'description' => 'Execution Time',
],
'backup_db_retention' => [
'type' => 'int',
'group' => 'backups',
'is_public' => false,
'default' => 7,
'description' => 'Retention Policy (Keep last N)',
],
'backup_db_compress' => [
'type' => 'bool',
'group' => 'backups',
'is_public' => false,
'default' => true,
'description' => 'Compress with gzip',
],
'backup_db_encrypt' => [
'type' => 'bool',
'group' => 'backups',
'is_public' => false,
'default' => false,
'description' => 'AES-256 Encryption',
],
'backup_db_encrypt_key' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Encryption Key (min 32 chars)',
],
'backup_db_exclude' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Excluded Tables (comma separated)',
],
'backup_db_notify_on' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => 'failed',
'description' => 'Notification Trigger (success/failed/both)',
],
'backup_db_notify_to' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Notification Target (Email/Webhook)',
],
'gdrive_client_id' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Google Drive Client ID',
],
'gdrive_client_secret' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Google Drive Client Secret',
],
'gdrive_refresh_token' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'Google Drive Refresh Token',
],
'gdrive_folder' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => 'LaravelBackups',
'description' => 'Google Drive Folder Name',
],
's3_key' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'S3 Access Key',
],
's3_secret' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'S3 Secret Key',
],
's3_region' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => 'us-east-1',
'description' => 'S3 Region',
],
's3_bucket' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'S3 Bucket Name',
],
's3_endpoint' => [
'type' => 'string',
'group' => 'backups',
'is_public' => false,
'default' => '',
'description' => 'S3 Custom Endpoint (Optional)',
],
// MAINTENANCE MODE
'maintenance_mode_enabled' => [
'type' => 'bool',
'group' => 'maintenance',
'is_public' => false,
'default' => false,
'description' => 'Enable maintenance mode',
],
'maintenance_mode_message' => [
'type' => 'string',
'group' => 'maintenance',
'is_public' => true,
'default' => 'The system is undergoing routine optimization to improve service. We will be back online shortly.',
'description' => 'Maintenance message',
],
'maintenance_mode_title' => [
'type' => 'string',
'group' => 'maintenance',
'is_public' => true,
'default' => 'Scheduled System Maintenance',
'description' => 'Maintenance page title',
],
'maintenance_mode_secret' => [
'type' => 'string',
'group' => 'maintenance',
'is_public' => false,
'default' => '',
'description' => 'Bypass secret key',
],
'maintenance_mode_allowed_ips' => [
'type' => 'string',
'group' => 'maintenance',
'is_public' => false,
'default' => '',
'description' => 'Whitelisted IP addresses',
],
'maintenance_mode_end_at' => [
'type' => 'string',
'group' => 'maintenance',
'is_public' => true,
'default' => '',
'description' => 'Estimated end time',
],
'maintenance_mode_retry' => [
'type' => 'int',
'group' => 'maintenance',
'is_public' => false,
'default' => 3600,
'description' => 'Retry-After seconds',
],
'maintenance_mode_image' => [
'type' => 'image_path',
'group' => 'maintenance',
'is_public' => true,
'default' => null,
'description' => 'Maintenance illustration image',
],
// CONTENT & LEGAL (UU PDP COMPLIANCE)
'page_help_content' => [
'type' => 'text',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Help Center / FAQ Content',
],
'page_tos_content' => [
'type' => 'text',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Terms of Use Content',
],
'page_privacy_content' => [
'type' => 'text',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Privacy Policy (UU PDP) Content',
],
'page_about_content' => [
'type' => 'text',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'About Us Content',
],
'page_security_content' => [
'type' => 'text',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Security Policy Content',
],
'require_pdp_on_registration' => [
'type' => 'bool',
'group' => 'content_legal',
'is_public' => false,
'default' => true,
'description' => 'Make PDP agreement mandatory during sign-up',
],
'feature_cookie_banner' => [
'type' => 'bool',
'group' => 'content_legal',
'is_public' => true,
'default' => true,
'description' => 'Enable Cookie Consent Banner',
],
'pdp_document_version' => [
'type' => 'int',
'group' => 'content_legal',
'is_public' => true,
'default' => 1,
'description' => 'Current version of legal documents (increment to force re-agreement)',
],
'tos_document_version' => [
'type' => 'int',
'group' => 'content_legal',
'is_public' => true,
'default' => 1,
'description' => 'Current version of Terms of Service',
],
'pdp_dpo_email' => [
'type' => 'string',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Contact email for Data Protection Officer (PDP)',
],
'pdp_company_address' => [
'type' => 'string',
'group' => 'content_legal',
'is_public' => true,
'default' => '',
'description' => 'Official company address for legal documentation',
],
// AI CONFIGURATION
'ai_enabled' => [
'type' => 'bool',
'group' => 'ai_config',
'is_public' => false,
'default' => false,
'description' => 'Enable AI services',
],
'ai_provider' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => 'gpt',
'description' => 'Active AI provider',
],
'ai_gpt_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'OpenAI GPT API Key',
],
'ai_gemini_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'Google Gemini API Key',
],
'ai_claude_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'Anthropic Claude API Key',
],
'ai_deepseek_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'DeepSeek API Key',
],
'ai_grok_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'xAI Grok API Key',
],
'ai_mistral_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'Mistral AI API Key',
],
'ai_openrouter_key' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'OpenRouter API Key',
],
'ai_ollama_base_url' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => 'http://localhost:11434',
'description' => 'Ollama Base URL',
],
'ai_default_model' => [
'type' => 'string',
'group' => 'ai_config',
'is_public' => false,
'default' => 'gpt-4o',
'description' => 'Default AI model',
],
'ai_system_instruction' => [
'type' => 'text',
'group' => 'ai_config',
'is_public' => false,
'default' => '',
'description' => 'Default system instruction',
],
'ai_temperature' => [
'type' => 'float',
'group' => 'ai_config',
'is_public' => false,
'default' => 0.7,
'description' => 'AI temperature',
],
'ai_max_tokens' => [
'type' => 'int',
'group' => 'ai_config',
'is_public' => false,
'default' => 2000,
'description' => 'AI max tokens',
],
// SAP RFC Configuration
'sap_rfc_ashost' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '',
'description' => 'SAP Application Server Host',
],
'sap_rfc_sysnr' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '00',
'description' => 'SAP System Number',
],
'sap_rfc_client' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '100',
'description' => 'SAP Client Number',
],
'sap_rfc_user' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '',
'description' => 'SAP Username',
],
'sap_rfc_passwd' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '',
'description' => 'SAP Password',
],
'sap_rfc_router' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '',
'description' => 'SAP Router string (optional)',
],
'sap_rfc_trace' => [
'type' => 'string',
'group' => 'sap_integration',
'is_public' => false,
'default' => '0',
'description' => 'SAP RFC Trace Level',
],
// MONITORING ENGINE
'engine_pulse_enabled' => [
'type' => 'bool',
'group' => 'monitoring',
'is_public' => false,
'default' => true,
'description' => 'Enable Laravel Pulse recording and dashboard',
],
'engine_telescope_enabled' => [
'type' => 'bool',
'group' => 'monitoring',
'is_public' => false,
'default' => true,
'description' => 'Enable Laravel Telescope recording and dashboard',
],
'engine_swagger_enabled' => [
'type' => 'bool',
'group' => 'monitoring',
'is_public' => false,
'default' => true,
'description' => 'Enable API Documentation (L5-Swagger)',
],
'engine_horizon_enabled' => [
'type' => 'bool',
'group' => 'monitoring',
'is_public' => false,
'default' => true,
'description' => 'Enable Laravel Horizon (Redis Queue Monitor)',
],
// AI HEALING ENGINE
'ai_healing_enabled' => [
'type' => 'bool',
'group' => 'ai_healing',
'is_public' => false,
'default' => false,
'description' => 'Enable AI Self-Healing Engine (Intercept & Fix Exceptions)',
],
'ai_healing_allow_cache' => [
'type' => 'bool',
'group' => 'ai_healing',
'is_public' => false,
'default' => true,
'description' => 'Allow AI to clear cache',
],
'ai_healing_allow_queue' => [
'type' => 'bool',
'group' => 'ai_healing',
'is_public' => false,
'default' => true,
'description' => 'Allow AI to restart queue workers',
],
'ai_healing_allow_maintenance' => [
'type' => 'bool',
'group' => 'ai_healing',
'is_public' => false,
'default' => false,
'description' => 'Allow AI to toggle maintenance mode',
],
'ai_healing_allow_db' => [
'type' => 'bool',
'group' => 'ai_healing',
'is_public' => false,
'default' => false,
'description' => 'Allow AI to run migrations (Caution)',
],
'ai_healing_max_attempts_per_hour' => [
'type' => 'int',
'group' => 'ai_healing',
'is_public' => false,
'default' => 5,
'description' => 'Maximum auto-fix attempts per hour (Circuit Breaker)',
],
];
}