/** * Interactive Config Collection * Prompts for missing module configuration during generate */ import type { DbClient } from '../db/client'; import type { VariableDeclare } from '../manifest/schema'; import { setModuleConfigValue } from '../services/module-config'; import { celiloIntro, promptText } from './prompts'; import { validateRequired } from './validators'; export interface MissingVariable { name: string; type: string; description: string; required: boolean; defaultValue?: string | number | boolean; } /** * Prompt user for missing configuration values * * @param moduleId - Module identifier * @param missingVars - List of missing variables from manifest * @param db - Database connection * @returns True if all values collected successfully */ export async function promptForMissingConfig( moduleId: string, missingVars: VariableDeclare[], db: DbClient, ): Promise { await celiloIntro(`šŸ”§ Configuration needed for ${moduleId}`); console.log('\nThe following configuration is required:\n'); for (const variable of missingVars) { try { // Regular text prompt for all variable types // (Secrets are handled separately through the secrets system) const placeholder = variable.default ? String(variable.default) : variable.description || ''; const value = await promptText({ message: variable.name, placeholder, validate: variable.required ? validateRequired(variable.name) : undefined, }); // Store the configuration await setModuleConfigValue(moduleId, variable.name, value, db); console.log(` āœ“ Saved ${variable.name}`); } catch (error) { console.error( `\nāœ— Failed to save ${variable.name}: ${error instanceof Error ? error.message : String(error)}`, ); return false; } } console.log('\nāœ… Configuration saved successfully!\n'); return true; }