UNPKG

automagik-cli

Version:

Automagik CLI - A powerful command-line interface for interacting with Automagik Hive multi-agent AI systems

148 lines (147 loc) 4.62 kB
import { settingsManager } from './SettingsManager.js'; // Internal settings cache let _settings = null; let _initPromise = null; /** * Convert SettingsConfig to AppConfig for backward compatibility */ function settingsToAppConfig(settings) { return { apiBaseUrl: settings.apiBaseUrl, apiKey: settings.apiKey || '', // Convert undefined to empty string for compatibility apiTimeout: settings.apiTimeout, apiRetryAttempts: settings.apiRetryAttempts, cliDebug: settings.cliDebug, sessionDir: settings.sessionDir, sessionMaxHistory: settings.sessionMaxHistory, sessionAutoSave: settings.sessionAutoSave, enableColors: settings.enableColors, enableSpinner: settings.enableSpinner, maxDisplayWidth: settings.maxDisplayWidth, nodeEnv: settings.nodeEnv, logLevel: settings.logLevel, }; } /** * Initialize settings asynchronously */ async function initializeSettings() { if (_initPromise) { return _initPromise; } _initPromise = (async () => { try { // Check if settings exist, if not try migration if (!(await settingsManager.settingsExist())) { const migrationResult = await settingsManager.migrate(); if (migrationResult.migrated && migrationResult.source === 'env') { console.log('✅ Migrated settings from .env file to ~/.automagik-cli/settings.json'); } } // Load settings const settings = await settingsManager.load(); _settings = settings; return settings; } catch (error) { console.error('Failed to initialize settings:', error); // Fallback to defaults const defaults = settingsManager.getDefaultConfig(); _settings = defaults; return defaults; } })(); return _initPromise; } /** * Get settings synchronously (may return defaults if not initialized) */ function getSettings() { if (_settings) { return _settings; } // If not initialized, return defaults and trigger async initialization const defaults = settingsManager.getDefaultConfig(); _settings = defaults; // Trigger initialization in background initializeSettings().catch(error => { console.error('Background settings initialization failed:', error); }); return defaults; } /** * Create AppConfig from current settings */ function createAppConfig() { const settings = getSettings(); return settingsToAppConfig(settings); } // Initialize settings and create the config object export let appConfig = createAppConfig(); /** * Reload settings from file and update appConfig */ export async function reloadAppConfig() { try { const settings = await settingsManager.load(); _settings = settings; appConfig = settingsToAppConfig(settings); } catch (error) { console.error('Failed to reload settings:', error); // Keep existing config on error } } /** * Initialize settings asynchronously (for use during app startup) */ export async function initializeAppConfig() { const settings = await initializeSettings(); appConfig = settingsToAppConfig(settings); return appConfig; } /** * Check if settings file exists */ export async function settingsExist() { return settingsManager.settingsExist(); } /** * Get settings file path */ export function getSettingsPath() { return settingsManager.getSettingsPath(); } /** * Save current settings */ export async function saveSettings(config) { const currentSettings = _settings || settingsManager.getDefaultConfig(); const updatedSettings = { ...currentSettings, ...config }; await settingsManager.save(updatedSettings); _settings = updatedSettings; appConfig = settingsToAppConfig(updatedSettings); } /** * Reset settings to defaults */ export async function resetSettings() { await settingsManager.reset(); await reloadAppConfig(); } /** * Check if settings need first-run setup */ export async function needsFirstRunSetup() { const exists = await settingsManager.settingsExist(); if (!exists) { return true; } // Check if required fields are properly configured const settings = await settingsManager.load(); return !settings.apiBaseUrl || settings.apiBaseUrl === ''; } // Export the settings manager for advanced usage export { settingsManager }; // Default export for backward compatibility export default appConfig;