UNPKG

@dharshansr/gitgenius

Version:

AI-powered commit message generator with enhanced features

170 lines 5.4 kB
import Conf from 'conf'; import inquirer from 'inquirer'; import chalk from 'chalk'; export class ConfigManager { constructor() { this.config = new Conf({ projectName: 'gitgenius', projectVersion: '1.0.0', defaults: { provider: 'openai', model: 'gpt-3.5-turbo', apiKey: null, maxTokens: 150, temperature: 0.7, commitTypes: [ 'feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'perf', 'ci', 'build' ] } }); } async handleConfig(key, value, options) { if (options?.reset) { await this.resetConfig(); return; } if (options?.list || (!key && !value)) { this.listConfig(); return; } if (key && !value) { await this.setConfigInteractive(key); return; } if (key && value) { this.setConfig(key, value); return; } } async resetConfig() { const { confirmed } = await inquirer.prompt([ { type: 'confirm', name: 'confirmed', message: 'Are you sure you want to reset all configuration?', default: false } ]); if (confirmed) { this.config.clear(); console.log(chalk.green('✓ Configuration reset successfully')); } } listConfig() { const config = this.config.store; console.log(chalk.blue('📋 Current Configuration:')); Object.entries(config).forEach(([key, value]) => { if (key === 'apiKey' && value) { console.log(` ${chalk.yellow(key)}: ${chalk.gray('***hidden***')}`); } else { console.log(` ${chalk.yellow(key)}: ${chalk.white(JSON.stringify(value))}`); } }); } async setConfigInteractive(key) { if (key === 'apiKey') { await this.setApiKey(); } else if (key === 'provider') { await this.setProvider(); } else if (key === 'model') { await this.setModel(); } else { const { value } = await inquirer.prompt([ { type: 'input', name: 'value', message: `Enter value for ${key}:` } ]); this.setConfig(key, value); } } async setApiKey() { const { apiKey } = await inquirer.prompt([ { type: 'password', name: 'apiKey', message: 'Enter your API key:', mask: '*' } ]); this.setConfig('apiKey', apiKey); } async setProvider() { const { provider } = await inquirer.prompt([ { type: 'list', name: 'provider', message: 'Select AI provider:', choices: [ { name: 'OpenAI', value: 'openai' }, { name: 'Google Gemini', value: 'gemini' }, { name: 'Anthropic Claude', value: 'anthropic' } ] } ]); this.setConfig('provider', provider); } async setModel() { const provider = this.getConfig('provider'); let choices = []; switch (provider) { case 'openai': choices = [ { name: 'GPT-3.5 Turbo', value: 'gpt-3.5-turbo' }, { name: 'GPT-4', value: 'gpt-4' }, { name: 'GPT-4 Turbo', value: 'gpt-4-turbo-preview' } ]; break; case 'gemini': choices = [ { name: 'Gemini Pro', value: 'gemini-pro' }, { name: 'Gemini Pro Vision', value: 'gemini-pro-vision' } ]; break; case 'anthropic': choices = [ { name: 'Claude 3 Haiku', value: 'claude-3-haiku-20240307' }, { name: 'Claude 3 Sonnet', value: 'claude-3-sonnet-20240229' }, { name: 'Claude 3 Opus', value: 'claude-3-opus-20240229' } ]; break; } const { model } = await inquirer.prompt([ { type: 'list', name: 'model', message: 'Select model:', choices } ]); this.setConfig('model', model); } setConfig(key, value) { this.config.set(key, value); console.log(chalk.green(`✓ ${key} set successfully`)); } setConfigValue(key, value) { this.config.set(key, value); } getConfig(key) { return this.config.get(key); } hasApiKey() { return !!this.getApiKey(); } getApiKey() { // Check environment variables with different possible names const envKey = process.env.GITGENIUS_API_KEY || process.env.OPENAI_API_KEY || process.env.GEMINI_API_KEY || this.getConfig('apiKey'); return envKey; } } //# sourceMappingURL=ConfigManager.js.map