Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/calitosaa_maia.json
T

1 line
25 KiB
JSON

{"repo": "calitosaa/maia", "files": {"gemma4-skills-os/skills/coding/proxy_ruflo.js": {"41a533ecb913d3fb58dfbba6a78365d3c98af368": {"t": 1785747182.870685, "n": 11658, "h": "ad7d5434171a8a0d", "c": "---\nsource_repo: https://github.com/ruvnet/ruflo\nsource_file: v2/src/cli/simple-commands/proxy.js\nlicense: MIT\ncategory: skills/coding\nimported_at: 2026-04-19\n---\n\n/**\n * OpenRouter Proxy Server Commands\n * Standalone proxy server that translates Anthropic API calls to OpenRouter\n * Enables 85-98% cost savings with Claude Code integration\n * NEW in v2.6.0 - Full integration with agentic-flow v1.5.5+\n */\n\nimport { printSuccess, printError, printWarning } from '../utils.js';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Main proxy command handler\n */\nexport async function proxyCommand(subArgs, flags) {\n const proxyCmd = subArgs[0];\n\n switch (proxyCmd) {\n case 'start':\n await startProxy(subArgs, flags);\n break;\n\n case 'stop':\n await stopProxy(subArgs, flags);\n break;\n\n case 'status':\n await getProxyStatus(subArgs, flags);\n break;\n\n case 'logs':\n await getProxyLogs(subArgs, flags);\n break;\n\n case 'restart':\n await restartProxy(subArgs, flags);\n break;\n\n case 'config':\n case 'configure':\n await configureProxy(subArgs, flags);\n break;\n\n default:\n showProxyHelp();\n }\n}\n\n/**\n * Start OpenRouter proxy server\n * Usage: claude-flow proxy start [--port 8080]\n */\nasync function startProxy(subArgs, flags) {\n printSuccess('🚀 Starting OpenRouter proxy server...');\n console.log('This proxy enables Claude Code to use OpenRouter models');\n console.log('Potential cost savings: 85-98% vs direct Anthropic API\\n');\n\n try {\n let cmd = 'npx agentic-flow proxy';\n\n if (flags.port) {\n cmd += ` --port ${flags.port}`;\n }\n\n if (flags.host) {\n cmd += ` --host ${flags.host}`;\n }\n\n if (flags.daemon || flags.background) {\n cmd += ' &';\n }\n\n const { stdout, stderr } = await execAsync(cmd, {\n timeout: flags.daemon ? 10000 : 0, // Short timeout for daemon mode\n maxBuffer: 10 * 1024 * 1024,\n });\n\n if (stdout) {\n console.log(stdout);\n }\n\n printSuccess('✅ OpenRouter proxy started successfully!');\n console.log('\\n📋 Next steps:');\n console.log(' 1. Set environment variable:');\n console.log(` export ANTHROPIC_BASE_URL=http://localhost:${flags.port || 8080}`);\n console.log(' 2. Configure Claude Code to use the proxy');\n console.log(' 3. Your OpenRouter key will be used automatically');\n console.log(' 4. Check status: claude-flow proxy status');\n console.log('\\n💰 Cost Savings:');\n console.log(' - Anthropic Claude 3.5 Sonnet: ~$3 per million tokens');\n console.log(' - OpenRouter Claude 3.5 Sonnet: ~$0.30 per million tokens');\n console.log(' - Savings: ~90% (10x cheaper!)');\n } catch (error) {\n if (error.killed && flags.daemon) {\n printSuccess('✅ Proxy started in background!');\n console.log('Check status: claude-flow proxy status');\n } else {\n printError('❌ Failed to start proxy server');\n console.error(error.message);\n if (error.stderr) {\n console.error('Details:', error.stderr);\n }\n process.exit(1);\n }\n }\n}\n\n/**\n * Stop OpenRouter proxy server\n * Usage: claude-flow proxy stop\n */\nasync function stopProxy(subArgs, flags) {\n printWarning('🛑 Stopping OpenRouter proxy server...');\n\n try {\n const { stdout } = await execAsync('npx agentic-flow proxy stop', {\n timeout: 30000,\n });\n\n console.log(stdout);\n printSuccess('✅ Proxy server stopped');\n console.log('\\nRemember to unset ANTHROPIC_BASE_URL if needed:');\n console.log(' unset ANTHROPIC_BASE_URL');\n } catch (error) {\n printError('❌ Failed to stop proxy server');\n console.error(error.message);\n console.log('\\nTip: You can also stop it manually:');\n console.log(' ps aux | grep \"agentic-flow proxy\"');\n console.log(' kill -9 <PID>');\n process.exit(1);\n }\n}\n\n/**\n * Get proxy server status\n * Usage: claude-flow proxy status\n */\nasync function getProxyStatus(subArgs, flags) {\n printSuccess('📊 Getting OpenRouter proxy status...');\n\n try {\n const { stdout } = await execAsync('npx agentic-flow proxy status', {\n timeout: 30000,\n });\n\n console.log(stdout);\n\n if (flags.verbose || flags.detailed) {\n console.log('\\n🔧 Configuration:');\n console.log(' Base URL: http://localhost:8080 (default)');\n console.log(' Protocol: HTTP/1.1');\n console.log(' Translation: Anthropic API → OpenRouter API');\n console.log('\\n📝 Usage:');\n console.log(' 1. export ANTHROPIC_BASE_URL=http://localhost:8080');\n console.log(' 2. Use Claude Code normally');\n console.log(' 3. All requests route through OpenRouter');\n }\n } catch (error) {\n printError('❌ Failed to get proxy status');\n console.error(error.message);\n console.log('\\nTip: Proxy may not be running. Start it with:');\n console.log(' claude-flow proxy start');\n process.exit(1);\n }\n}\n\n/**\n * Get proxy server logs\n * Usage: claude-flow proxy logs [--lines 100] [--follow]\n */\nasync function getProxyLogs(subArgs, flags) {\n printSuccess('📄 Getting OpenRouter proxy logs...');\n\n try {\n let cmd = 'npx agentic-flow proxy logs';\n\n if (flags.lines) {\n cmd += ` --lines ${flags.lines}`;\n }\n\n if (flags.follow || flags.f) {\n cmd += ' --follow';\n }\n\n if (flags.error) {\n cmd += ' --error';\n }\n\n const { stdout } = await execAsync(cmd, {\n timeout: flags.follow ? 0 : 30000, // No timeout for follow mode\n maxBuffer: 10 * 1024 * 1024,\n });\n\n console.log(stdout);\n } catch (error) {\n printError('❌ Failed to get proxy logs');\n console.error(error.message);\n process.exit(1);\n }\n}\n\n/**\n * Restart proxy server\n * Usage: claude-flow proxy restart\n */\nasync function restartProxy(subArgs, flags) {\n printWarning('🔄 Restarting OpenRouter proxy server...');\n\n try {\n // Stop first\n await stopProxy(subArgs, { ...flags, quiet: true });\n\n // Wait a moment\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n // Start again\n await startProxy(subArgs, flags);\n\n printSuccess('✅ Proxy server restarted successfully!');\n } catch (error) {\n printError('❌ Failed to restart proxy server');\n console.error(error.message);\n process.exit(1);\n }\n}\n\n/**\n * Configure proxy server\n * Usage: claude-flow proxy config\n */\nasync function configureProxy(subArgs, flags) {\n printSuccess('🔧 OpenRouter Proxy Configuration');\n\n console.log('\\n📋 Current Setup:');\n console.log(' 1. Proxy translates Anthropic API calls to OpenRouter');\n console.log(' 2. Default port: 8080');\n console.log(' 3. Requires OPENROUTER_API_KEY environment variable');\n\n console.log('\\n🔑 API Key Setup:');\n console.log(' export OPENROUTER_API_KEY=\"sk-or-v1-...\"');\n\n console.log('\\n🌐 Claude Code Integration:');\n console.log(' export ANTHROPIC_BASE_URL=\"http://localhost:8080\"');\n\n console.log('\\n💡 Recommended Models:');\n console.log(' - anthropic/claude-3.5-sonnet:beta (90% cheaper)');\n console.log(' - anthropic/claude-3-opus:beta (85% cheaper)');\n console.log(' - deepseek/deepseek-r1-0528:free (100% free!)');\n\n console.log('\\n⚙️ Advanced Configuration:');\n console.log(' export PROXY_PORT=8080 # Custom port');\n console.log(' export PROXY_HOST=0.0.0.0 # Allow external connections');\n console.log(' export PROXY_LOG_LEVEL=debug # Verbose logging');\n\n console.log('\\n🚀 Quick Start:');\n console.log(' 1. claude-flow agent config set OPENROUTER_API_KEY sk-or-v1-...');\n console.log(' 2. claude-flow proxy start --daemon');\n console.log(' 3. export ANTHROPIC_BASE_URL=http://localhost:8080');\n console.log(' 4. Use Claude Code normally → automatic 90% savings!');\n\n if (flags.test) {\n printSuccess('\\n🧪 Testing proxy connection...');\n try {\n const { stdout } = await execAsync('curl -s http://localhost:8080/health', {\n timeout: 5000,\n });\n console.log('✅ Proxy is responding:', stdout);\n } catch (error) {\n printWarning('⚠️ Proxy not responding. Start it with: claude-flow proxy start');\n }\n }\n}\n\n/**\n * Show proxy command help\n */\nfunction showProxyHelp() {\n console.log(`\nOpenRouter Proxy Server Commands\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nStandalone proxy server that translates Anthropic API calls to OpenRouter.\nEnables 85-98% cost savings with Claude Code integration.\n\nUSAGE:\n claude-flow proxy <command> [options]\n\nCOMMANDS:\n start Start OpenRouter proxy server\n stop Stop proxy server\n restart Restart proxy server\n status Get proxy server status\n logs View proxy server logs\n config Show proxy configuration guide\n\nOPTIONS:\n --port <number> Server port (default: 8080)\n --host <string> Server host (default: localhost)\n --daemon Run in background\n --background Same as --daemon\n --lines <number> Number of log lines (default: 100)\n --follow, -f Follow log output in real-time\n --error Show only error logs\n --test Test proxy connection\n --verbose Verbose output\n\nEXAMPLES:\n # Start proxy server\n claude-flow proxy start\n claude-flow proxy start --port 8080 --daemon\n\n # Configure Claude Code to use proxy\n export ANTHROPIC_BASE_URL=http://localhost:8080\n\n # Check status\n claude-flow proxy status\n claude-flow proxy status --verbose\n\n # View logs\n claude-flow proxy logs\n claude-flow proxy logs --lines 50 --follow\n claude-flow proxy logs --error\n\n # Stop/restart proxy\n claude-flow proxy stop\n claude-flow proxy restart\n\n # Configuration guide\n claude-flow proxy config\n claude-flow proxy config --test\n\nSETUP GUIDE:\n 1. Get OpenRouter API key: https://openrouter.ai/keys\n 2. Set environment variable:\n claude-flow agent config set OPENROUTER_API_KEY sk-or-v1-...\n\n 3. Start proxy server:\n claude-flow proxy start --daemon\n\n 4. Configure Claude Code:\n export ANTHROPIC_BASE_URL=http://localhost:8080\n\n 5. Use Claude Code normally - all requests route through OpenRouter!\n\nCOST SAVINGS:\n ┌────────────────────────────────────────────────────────┐\n │ │\n │ Model: Claude 3.5 Sonnet │\n │ ━━━━━━━━━━━━━━━━━━━━━━━━━ │\n │ │\n │ Anthropic Direct: $3.00 per million tokens │\n │ OpenRouter Proxy: $0.30 per million tokens │\n │ ━━━━━━━━━━━━━━━━━━━━━━━━━ │\n │ Savings: 90% (10x cheaper!) │\n │ │\n │ For 100M tokens: │\n │ - Anthropic: $300 │\n │ - OpenRouter: $30 │\n │ - You save: $270 │\n │ │\n └────────────────────────────────────────────────────────┘\n\nFREE MODELS:\n - deepseek/deepseek-r1-0528:free (100% free, high quality)\n - meta-llama/llama-3.1-8b-instruct:free\n - google/gemma-2-9b-it:free\n\nFEATURES:\n ✅ Transparent API translation (Anthropic → OpenRouter)\n ✅ Works with Claude Code out of the box\n ✅ Automatic model mapping\n ✅ Request/response logging\n ✅ Error handling and retries\n ✅ Health check endpoint\n ✅ Zero code changes required\n\nFor more information, visit:\n https://github.com/ruvnet/agentic-flow\n https://www.npmjs.com/package/agentic-flow\n https://openrouter.ai\n`);\n}\n"}, "bb0f9ea67889a19823ac772872a1fece2ad7eae1": {"t": 1785771078.764601, "n": 11658, "h": "ad7d5434171a8a0d", "c": "---\nsource_repo: https://github.com/ruvnet/ruflo\nsource_file: v2/src/cli/simple-commands/proxy.js\nlicense: MIT\ncategory: skills/coding\nimported_at: 2026-04-19\n---\n\n/**\n * OpenRouter Proxy Server Commands\n * Standalone proxy server that translates Anthropic API calls to OpenRouter\n * Enables 85-98% cost savings with Claude Code integration\n * NEW in v2.6.0 - Full integration with agentic-flow v1.5.5+\n */\n\nimport { printSuccess, printError, printWarning } from '../utils.js';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Main proxy command handler\n */\nexport async function proxyCommand(subArgs, flags) {\n const proxyCmd = subArgs[0];\n\n switch (proxyCmd) {\n case 'start':\n await startProxy(subArgs, flags);\n break;\n\n case 'stop':\n await stopProxy(subArgs, flags);\n break;\n\n case 'status':\n await getProxyStatus(subArgs, flags);\n break;\n\n case 'logs':\n await getProxyLogs(subArgs, flags);\n break;\n\n case 'restart':\n await restartProxy(subArgs, flags);\n break;\n\n case 'config':\n case 'configure':\n await configureProxy(subArgs, flags);\n break;\n\n default:\n showProxyHelp();\n }\n}\n\n/**\n * Start OpenRouter proxy server\n * Usage: claude-flow proxy start [--port 8080]\n */\nasync function startProxy(subArgs, flags) {\n printSuccess('🚀 Starting OpenRouter proxy server...');\n console.log('This proxy enables Claude Code to use OpenRouter models');\n console.log('Potential cost savings: 85-98% vs direct Anthropic API\\n');\n\n try {\n let cmd = 'npx agentic-flow proxy';\n\n if (flags.port) {\n cmd += ` --port ${flags.port}`;\n }\n\n if (flags.host) {\n cmd += ` --host ${flags.host}`;\n }\n\n if (flags.daemon || flags.background) {\n cmd += ' &';\n }\n\n const { stdout, stderr } = await execAsync(cmd, {\n timeout: flags.daemon ? 10000 : 0, // Short timeout for daemon mode\n maxBuffer: 10 * 1024 * 1024,\n });\n\n if (stdout) {\n console.log(stdout);\n }\n\n printSuccess('✅ OpenRouter proxy started successfully!');\n console.log('\\n📋 Next steps:');\n console.log(' 1. Set environment variable:');\n console.log(` export ANTHROPIC_BASE_URL=http://localhost:${flags.port || 8080}`);\n console.log(' 2. Configure Claude Code to use the proxy');\n console.log(' 3. Your OpenRouter key will be used automatically');\n console.log(' 4. Check status: claude-flow proxy status');\n console.log('\\n💰 Cost Savings:');\n console.log(' - Anthropic Claude 3.5 Sonnet: ~$3 per million tokens');\n console.log(' - OpenRouter Claude 3.5 Sonnet: ~$0.30 per million tokens');\n console.log(' - Savings: ~90% (10x cheaper!)');\n } catch (error) {\n if (error.killed && flags.daemon) {\n printSuccess('✅ Proxy started in background!');\n console.log('Check status: claude-flow proxy status');\n } else {\n printError('❌ Failed to start proxy server');\n console.error(error.message);\n if (error.stderr) {\n console.error('Details:', error.stderr);\n }\n process.exit(1);\n }\n }\n}\n\n/**\n * Stop OpenRouter proxy server\n * Usage: claude-flow proxy stop\n */\nasync function stopProxy(subArgs, flags) {\n printWarning('🛑 Stopping OpenRouter proxy server...');\n\n try {\n const { stdout } = await execAsync('npx agentic-flow proxy stop', {\n timeout: 30000,\n });\n\n console.log(stdout);\n printSuccess('✅ Proxy server stopped');\n console.log('\\nRemember to unset ANTHROPIC_BASE_URL if needed:');\n console.log(' unset ANTHROPIC_BASE_URL');\n } catch (error) {\n printError('❌ Failed to stop proxy server');\n console.error(error.message);\n console.log('\\nTip: You can also stop it manually:');\n console.log(' ps aux | grep \"agentic-flow proxy\"');\n console.log(' kill -9 <PID>');\n process.exit(1);\n }\n}\n\n/**\n * Get proxy server status\n * Usage: claude-flow proxy status\n */\nasync function getProxyStatus(subArgs, flags) {\n printSuccess('📊 Getting OpenRouter proxy status...');\n\n try {\n const { stdout } = await execAsync('npx agentic-flow proxy status', {\n timeout: 30000,\n });\n\n console.log(stdout);\n\n if (flags.verbose || flags.detailed) {\n console.log('\\n🔧 Configuration:');\n console.log(' Base URL: http://localhost:8080 (default)');\n console.log(' Protocol: HTTP/1.1');\n console.log(' Translation: Anthropic API → OpenRouter API');\n console.log('\\n📝 Usage:');\n console.log(' 1. export ANTHROPIC_BASE_URL=http://localhost:8080');\n console.log(' 2. Use Claude Code normally');\n console.log(' 3. All requests route through OpenRouter');\n }\n } catch (error) {\n printError('❌ Failed to get proxy status');\n console.error(error.message);\n console.log('\\nTip: Proxy may not be running. Start it with:');\n console.log(' claude-flow proxy start');\n process.exit(1);\n }\n}\n\n/**\n * Get proxy server logs\n * Usage: claude-flow proxy logs [--lines 100] [--follow]\n */\nasync function getProxyLogs(subArgs, flags) {\n printSuccess('📄 Getting OpenRouter proxy logs...');\n\n try {\n let cmd = 'npx agentic-flow proxy logs';\n\n if (flags.lines) {\n cmd += ` --lines ${flags.lines}`;\n }\n\n if (flags.follow || flags.f) {\n cmd += ' --follow';\n }\n\n if (flags.error) {\n cmd += ' --error';\n }\n\n const { stdout } = await execAsync(cmd, {\n timeout: flags.follow ? 0 : 30000, // No timeout for follow mode\n maxBuffer: 10 * 1024 * 1024,\n });\n\n console.log(stdout);\n } catch (error) {\n printError('❌ Failed to get proxy logs');\n console.error(error.message);\n process.exit(1);\n }\n}\n\n/**\n * Restart proxy server\n * Usage: claude-flow proxy restart\n */\nasync function restartProxy(subArgs, flags) {\n printWarning('🔄 Restarting OpenRouter proxy server...');\n\n try {\n // Stop first\n await stopProxy(subArgs, { ...flags, quiet: true });\n\n // Wait a moment\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n // Start again\n await startProxy(subArgs, flags);\n\n printSuccess('✅ Proxy server restarted successfully!');\n } catch (error) {\n printError('❌ Failed to restart proxy server');\n console.error(error.message);\n process.exit(1);\n }\n}\n\n/**\n * Configure proxy server\n * Usage: claude-flow proxy config\n */\nasync function configureProxy(subArgs, flags) {\n printSuccess('🔧 OpenRouter Proxy Configuration');\n\n console.log('\\n📋 Current Setup:');\n console.log(' 1. Proxy translates Anthropic API calls to OpenRouter');\n console.log(' 2. Default port: 8080');\n console.log(' 3. Requires OPENROUTER_API_KEY environment variable');\n\n console.log('\\n🔑 API Key Setup:');\n console.log(' export OPENROUTER_API_KEY=\"sk-or-v1-...\"');\n\n console.log('\\n🌐 Claude Code Integration:');\n console.log(' export ANTHROPIC_BASE_URL=\"http://localhost:8080\"');\n\n console.log('\\n💡 Recommended Models:');\n console.log(' - anthropic/claude-3.5-sonnet:beta (90% cheaper)');\n console.log(' - anthropic/claude-3-opus:beta (85% cheaper)');\n console.log(' - deepseek/deepseek-r1-0528:free (100% free!)');\n\n console.log('\\n⚙️ Advanced Configuration:');\n console.log(' export PROXY_PORT=8080 # Custom port');\n console.log(' export PROXY_HOST=0.0.0.0 # Allow external connections');\n console.log(' export PROXY_LOG_LEVEL=debug # Verbose logging');\n\n console.log('\\n🚀 Quick Start:');\n console.log(' 1. claude-flow agent config set OPENROUTER_API_KEY sk-or-v1-...');\n console.log(' 2. claude-flow proxy start --daemon');\n console.log(' 3. export ANTHROPIC_BASE_URL=http://localhost:8080');\n console.log(' 4. Use Claude Code normally → automatic 90% savings!');\n\n if (flags.test) {\n printSuccess('\\n🧪 Testing proxy connection...');\n try {\n const { stdout } = await execAsync('curl -s http://localhost:8080/health', {\n timeout: 5000,\n });\n console.log('✅ Proxy is responding:', stdout);\n } catch (error) {\n printWarning('⚠️ Proxy not responding. Start it with: claude-flow proxy start');\n }\n }\n}\n\n/**\n * Show proxy command help\n */\nfunction showProxyHelp() {\n console.log(`\nOpenRouter Proxy Server Commands\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nStandalone proxy server that translates Anthropic API calls to OpenRouter.\nEnables 85-98% cost savings with Claude Code integration.\n\nUSAGE:\n claude-flow proxy <command> [options]\n\nCOMMANDS:\n start Start OpenRouter proxy server\n stop Stop proxy server\n restart Restart proxy server\n status Get proxy server status\n logs View proxy server logs\n config Show proxy configuration guide\n\nOPTIONS:\n --port <number> Server port (default: 8080)\n --host <string> Server host (default: localhost)\n --daemon Run in background\n --background Same as --daemon\n --lines <number> Number of log lines (default: 100)\n --follow, -f Follow log output in real-time\n --error Show only error logs\n --test Test proxy connection\n --verbose Verbose output\n\nEXAMPLES:\n # Start proxy server\n claude-flow proxy start\n claude-flow proxy start --port 8080 --daemon\n\n # Configure Claude Code to use proxy\n export ANTHROPIC_BASE_URL=http://localhost:8080\n\n # Check status\n claude-flow proxy status\n claude-flow proxy status --verbose\n\n # View logs\n claude-flow proxy logs\n claude-flow proxy logs --lines 50 --follow\n claude-flow proxy logs --error\n\n # Stop/restart proxy\n claude-flow proxy stop\n claude-flow proxy restart\n\n # Configuration guide\n claude-flow proxy config\n claude-flow proxy config --test\n\nSETUP GUIDE:\n 1. Get OpenRouter API key: https://openrouter.ai/keys\n 2. Set environment variable:\n claude-flow agent config set OPENROUTER_API_KEY sk-or-v1-...\n\n 3. Start proxy server:\n claude-flow proxy start --daemon\n\n 4. Configure Claude Code:\n export ANTHROPIC_BASE_URL=http://localhost:8080\n\n 5. Use Claude Code normally - all requests route through OpenRouter!\n\nCOST SAVINGS:\n ┌────────────────────────────────────────────────────────┐\n │ │\n │ Model: Claude 3.5 Sonnet │\n │ ━━━━━━━━━━━━━━━━━━━━━━━━━ │\n │ │\n │ Anthropic Direct: $3.00 per million tokens │\n │ OpenRouter Proxy: $0.30 per million tokens │\n │ ━━━━━━━━━━━━━━━━━━━━━━━━━ │\n │ Savings: 90% (10x cheaper!) │\n │ │\n │ For 100M tokens: │\n │ - Anthropic: $300 │\n │ - OpenRouter: $30 │\n │ - You save: $270 │\n │ │\n └────────────────────────────────────────────────────────┘\n\nFREE MODELS:\n - deepseek/deepseek-r1-0528:free (100% free, high quality)\n - meta-llama/llama-3.1-8b-instruct:free\n - google/gemma-2-9b-it:free\n\nFEATURES:\n ✅ Transparent API translation (Anthropic → OpenRouter)\n ✅ Works with Claude Code out of the box\n ✅ Automatic model mapping\n ✅ Request/response logging\n ✅ Error handling and retries\n ✅ Health check endpoint\n ✅ Zero code changes required\n\nFor more information, visit:\n https://github.com/ruvnet/agentic-flow\n https://www.npmjs.com/package/agentic-flow\n https://openrouter.ai\n`);\n}\n"}}}}