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
JavaScript
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;