UNPKG

bodhi-commit-genius-js

Version:

🚀 Smart commit message generator with AI - supports local LLMs and cloud APIs

109 lines (108 loc) • 3.9 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const generator_1 = require("./core/generator"); const git_1 = require("./services/git"); const config_1 = require("./config"); const chalk_1 = __importDefault(require("chalk")); const inquirer_1 = __importDefault(require("inquirer")); const ora_1 = __importDefault(require("ora")); const git = new git_1.GitService(); const config = new config_1.Config(); commander_1.program .name('cmg') .description('AI-powered commit message generator') .version('1.0.0'); commander_1.program .command('commit [files...]') .description('Generate commit message and commit changes') .option('-m, --message <message>', 'Use a custom commit message') .option('-p, --provider <provider>', 'AI provider (ollama/openai)') .option('-i, --interactive', 'Interactive mode') .action(async (files, options) => { const spinner = (0, ora_1.default)('Analyzing changes...').start(); try { // Stage files if provided if (files.length > 0) { await git.stageFiles(files); } // Get diff of staged changes const diff = await git.getStagedDiff(); if (!diff) { spinner.fail('No staged changes found'); return; } spinner.text = 'Generating commit message...'; // Generate commit message const message = options.message || await (0, generator_1.generateCommitMessage)(diff, { provider: options.provider || config.get('provider'), model: config.get('model'), apiKey: config.get('apiKey') }); spinner.stop(); // Interactive mode if (options.interactive) { const { confirmed, editedMessage } = await inquirer_1.default.prompt([ { type: 'confirm', name: 'confirmed', message: `Commit message:\n\n${message}\n\nDo you want to use this message?`, default: true }, { type: 'editor', name: 'editedMessage', message: 'Edit the commit message:', default: message, when: (answers) => !answers.confirmed } ]); if (!confirmed && !editedMessage) { console.log(chalk_1.default.yellow('Commit aborted')); return; } await git.commit(confirmed ? message : editedMessage); } else { await git.commit(message); } console.log(chalk_1.default.green('✨ Successfully committed changes!')); } catch (error) { spinner.fail('Error: ' + error.message); process.exit(1); } }); commander_1.program .command('config') .description('Configure commit-genius-js') .action(async () => { const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'provider', message: 'Select AI provider:', choices: ['ollama', 'openai'] }, { type: 'input', name: 'apiKey', message: 'Enter OpenAI API key:', when: (answers) => answers.provider === 'openai' }, { type: 'input', name: 'model', message: 'Enter Ollama model name:', default: 'codellama', when: (answers) => answers.provider === 'ollama' } ]); config.set(answers); console.log(chalk_1.default.green('Configuration saved successfully!')); }); commander_1.program.parse();