@dharshansr/gitgenius
Version:
AI-powered commit message generator with enhanced features
65 lines (64 loc) • 2.77 kB
JavaScript
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