UNPKG

claudegem

Version:

Seamless integration of Claude Code CLI + Gemini CLI for context-aware code reasoning

74 lines (61 loc) 3.12 kB
#!/usr/bin/env node import { program } from 'commander'; import chalk from 'chalk'; import Orchestrator from '../lib/orchestrator.js'; program .version('1.0.19') .description('Seamless integration of Claude Code CLI + Gemini CLI for context-aware code reasoning') .argument('[query]', 'The query to process (optional when using --mcp)') .option('--claude-flags <flags>', 'Additional flags to pass to Claude CLI (e.g., "--interactive --tools")') .option('--skip-gemini', 'Skip Gemini context gathering and use Claude directly') .option('--gemini-model <model>', 'Gemini model to use (default: gemini-2.5-pro)') .option('--fallback <models>', 'Fallback models when Gemini quota exhausted (default: llama,mistral)') .option('--mcp', 'Start Claude Code with ClaudeGem MCP server for multiple queries') .action(async (query, options) => { try { if (options.mcp) { // Start Claude Code with MCP server console.log(chalk.blue('Starting Claude Code with ClaudeGem MCP server...')); const mcpConfigPath = new URL('../claudegem-mcp-config.json', import.meta.url).pathname; const { spawn } = await import('child_process'); const claudeArgs = ['claude', '--mcp-config', mcpConfigPath]; if (options.claudeFlags) { claudeArgs.push(...options.claudeFlags.split(' ').filter(Boolean)); } console.log(chalk.green('Claude Code will have access to:')); console.log(chalk.yellow(' • bash_with_gemini - Execute bash commands via Gemini')); console.log(chalk.yellow(' • analyze_with_gemini - Analyze code using Gemini')); console.log(chalk.yellow(' • search_internet - Search the internet for information')); console.log(chalk.yellow(' • Automatic fallback to Llama & Mistral when Gemini quota exhausted')); console.log(chalk.blue('Starting Claude Code with MCP tools...')); const claudeProcess = spawn(claudeArgs[0], claudeArgs.slice(1), { stdio: 'inherit', shell: true }); claudeProcess.on('close', (code) => { console.log(chalk.blue(`Claude Code session ended with code ${code}`)); }); return; } // Regular single query mode if (!query) { console.error(chalk.red('Error: Query is required when not using --mcp mode')); console.log(chalk.yellow('Use --mcp for interactive mode or provide a query')); process.exit(1); } const orchestrator = new Orchestrator(); console.log(chalk.blue('Processing query:', query)); const config = { claudeFlags: options.claudeFlags || '', skipGemini: options.skipGemini || false, geminiModel: options.geminiModel || 'gemini-2.5-pro' }; const result = await orchestrator.process(query, config); console.log(chalk.green('\nResult:')); console.log(result); } catch (error) { console.error(chalk.red('Error:'), error.message); process.exit(1); } }); program.parse(process.argv);