From 9f7522039eb3e9583bac36fbbee5caae83f68967 Mon Sep 17 00:00:00 2001 From: s41r4j Date: Thu, 29 Jan 2026 00:15:07 +0530 Subject: [PATCH] fix(cli): make 'fix --ai' command provider-agnostic --- bin/gims.js | 71 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/bin/gims.js b/bin/gims.js index 388b651..b5a48a6 100755 --- a/bin/gims.js +++ b/bin/gims.js @@ -1687,15 +1687,22 @@ program.command('fix') Recommended Command: `; - // Use the preferred provider to generate response + // Use preferred provider or auto-resolve + const provider = aiProvider.resolveProvider(opts.provider); + if (provider === 'none') { + Progress.stop(''); + console.log(color.yellow('No AI provider configured. Falling back to simple heuristics.')); + // ... heuristic fallback ... + let rec = ''; + if (ahead > 0 && behind === 0) rec = 'Push (g push)'; + else if (behind > 0 && ahead === 0) rec = 'Pull (g pull)'; + else rec = 'Rebase (g fix --rebase)'; + console.log(`Recommendation: ${rec}`); + return; + } + try { - const response = await aiProvider.generateWithGemini(prompt, null, { temperature: 0.3 }); // Defaulting to using the generate methods available - // Note: In a cleaner refactor, we would expose a generic 'generate' on AIProviderManager - // For now, we assume Gemini or fallback logic is inside manager, but let's assume we can call generateText or similar - // Wait, looking at previous file reads, AIProviderManager has 'generateWithGemini' etc but maybe not a generic 'generate'. - // Let's use the 'generateCommitMessage's underlying logic or just call the provider directly if we can't genericize. - // Actually, I should check if there is a 'ask' method. - // ... (Self-correction: I'll use a safer approach below) + const response = await aiProvider.generateWithProvider(provider, prompt, { temperature: 0.3 }); // Use generic provider method Progress.stop(''); console.log(`\n${color.bold('🤖 AI Analysis:')}`); @@ -1712,30 +1719,44 @@ program.command('fix') } return; } + console.log(`\n${color.bold('🤖 AI Analysis:')}`); + console.log(response.trim()); + } catch (e) { + Progress.stop(''); + console.log(color.yellow('AI Analysis failed, falling back to heuristics.')); + // ... heuristic fallback code ... + let rec = ''; + if (ahead > 0 && behind === 0) rec = 'Push (g push)'; + else if (behind > 0 && ahead === 0) rec = 'Pull (g pull)'; + else rec = 'Rebase (g fix --rebase)'; + console.log(`Recommendation: ${rec}`); + } + return; + } // Show interactive menu console.log(color.bold('🔧 Fix Options:\n')); - if (situation === 'ahead') { - console.log(` ${color.cyan('g push')} Push your commits to remote`); - } else if (situation === 'behind') { - console.log(` ${color.cyan('g pull')} Get remote commits (fast-forward)`); - console.log(` ${color.cyan('g sp')} Safe pull (stash → pull → pop)`); - } else { - // Diverged - console.log(` ${color.cyan('g fix --merge')} Merge remote into local (creates merge commit)`); - console.log(` ${color.cyan('g fix --rebase')} Rebase local onto remote (linear history)`); - console.log(color.dim(' ─────────────────')); - console.log(` ${color.cyan('g fix --local')} ${color.yellow('⚠')} Force push local, overwrite remote`); - console.log(` ${color.cyan('g fix --remote')} ${color.yellow('⚠')} Reset to remote, discard local commits`); - } +if (situation === 'ahead') { + console.log(` ${color.cyan('g push')} Push your commits to remote`); +} else if (situation === 'behind') { + console.log(` ${color.cyan('g pull')} Get remote commits (fast-forward)`); + console.log(` ${color.cyan('g sp')} Safe pull (stash → pull → pop)`); +} else { + // Diverged + console.log(` ${color.cyan('g fix --merge')} Merge remote into local (creates merge commit)`); + console.log(` ${color.cyan('g fix --rebase')} Rebase local onto remote (linear history)`); + console.log(color.dim(' ─────────────────')); + console.log(` ${color.cyan('g fix --local')} ${color.yellow('⚠')} Force push local, overwrite remote`); + console.log(` ${color.cyan('g fix --remote')} ${color.yellow('⚠')} Reset to remote, discard local commits`); +} - console.log(color.dim(' ─────────────────')); - console.log(` ${color.cyan('g fix --ai')} Get AI recommendation`); +console.log(color.dim(' ─────────────────')); +console.log(` ${color.cyan('g fix --ai')} Get AI recommendation`); } catch (e) { - handleError('Fix error', e); - } + handleError('Fix error', e); +} }); program.command('conflicts')