UNPKG

@dharshansr/gitgenius

Version:

AI-powered commit message generator with enhanced features

65 lines (64 loc) 2.77 kB
import { ConfigManager } from '../core/ConfigManager.js'; import { OpenAIProvider } from '../providers/OpenAIProvider.js'; import { GeminiProvider } from '../providers/GeminiProvider.js'; export class AIService { constructor() { this.configManager = new ConfigManager(); this.currentProvider = this.configManager.getConfig('provider') || 'openai'; } setProvider(providerName) { this.currentProvider = providerName; } getCurrentProvider() { return this.currentProvider; } getProvider(providerName) { const provider = providerName || process.env.GITGENIUS_PROVIDER || this.configManager.getConfig('provider'); const apiKey = this.configManager.getApiKey(); if (!apiKey) { throw new Error('API key not configured. Run: gitgenius config apiKey'); } switch (provider) { case 'openai': return new OpenAIProvider(apiKey); case 'gemini': return new GeminiProvider(apiKey); default: throw new Error(`Unsupported provider: ${provider}`); } } async getProviderAsync(providerName) { return this.getProvider(providerName); } hasApiKey() { return this.configManager.hasApiKey(); } async generateCommitMessage(diff, type, provider, detailed) { const aiProvider = this.getProvider(provider); return await aiProvider.generateCommitMessage(diff, type, detailed); } async explainCommit(commitMessage, files, provider) { const aiProvider = this.getProvider(provider); return await aiProvider.generateCommitMessage(`Explain this commit: ${commitMessage}\nFiles: ${files || 'N/A'}`, 'explain'); } async reviewCode(diff, provider) { const aiProvider = this.getProvider(provider); return await aiProvider.generateCommitMessage(`Perform a code review of these changes. Focus on: - Code quality and best practices - Potential bugs or issues - Security concerns - Performance implications - Suggestions for improvement Changes: ${diff.substring(0, 3000)}`, 'review'); } async suggestCommitType(diff, provider) { const aiProvider = this.getProvider(provider); return await aiProvider.generateCommitMessage(`Based on these changes, suggest the most appropriate conventional commit type (feat, fix, docs, etc.):\n${diff.substring(0, 1000)}`, 'suggest'); } async suggestCommitScope(diff, provider) { const aiProvider = this.getProvider(provider); return await aiProvider.generateCommitMessage(`Based on these changes, suggest an appropriate commit scope:\n${diff.substring(0, 1000)}`, 'suggest'); } } //# sourceMappingURL=AIService.js.map