UNPKG

ccgo

Version:

Simple Claude Code launcher with config management and environment variable injection

101 lines 4.34 kB
"use strict"; /** * Claude Code 启动器 * 核心功能:启动 Claude Code 并注入环境变量 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClaudeLauncher = void 0; const child_process_1 = require("child_process"); const chalk_1 = __importDefault(require("chalk")); const installer_1 = require("./utils/installer"); const claude_init_1 = require("./utils/claude-init"); /** * Claude 启动器类 */ class ClaudeLauncher { constructor(config, profileName) { this.config = config; this.profileName = profileName; } /** * 启动 Claude Code */ async launch(options = {}) { const { args = [], skipPermissions = true } = options; // 如果指定了 profileName,使用指定的配置;否则使用当前配置 const profile = this.profileName ? this.config.getProfile(this.profileName) : this.config.getCurrentProfile()?.config; const apiKey = profile?.apiKey; const baseUrl = profile?.baseUrl; if (!apiKey) { console.log(''); console.log(chalk_1.default.red('✗ 未找到 API Key 配置')); console.log(''); console.log(chalk_1.default.gray('请先运行配置命令:')); console.log(chalk_1.default.cyan(' ccgo config')); console.log(''); return { exitCode: 1, hasApiError: true }; } // 初始化 Claude 配置(解决首次启动 API 连接问题) (0, claude_init_1.ensureClaudeConfigInitialized)(); // 显示启动信息 console.log(''); console.log(chalk_1.default.green('✓ 正在启动 Claude Code...')); console.log(''); // 设置环境变量(核心功能) const env = { ...process.env, ANTHROPIC_API_KEY: apiKey, // Claude Code 使用这个环境变量 ANTHROPIC_BASE_URL: baseUrl || 'https://api.anthropic.com' }; // 如果配置了可选的模型参数,也注入环境变量 const model = profile?.model; const smallFastModel = profile?.smallFastModel; if (model) { env.ANTHROPIC_MODEL = model; } if (smallFastModel) { env.ANTHROPIC_SMALL_FAST_MODEL = smallFastModel; } // 构建 Claude 参数 const claudeArgs = [...args]; if (skipPermissions && !claudeArgs.includes('--dangerously-skip-permissions')) { claudeArgs.unshift('--dangerously-skip-permissions'); } return new Promise((resolve, reject) => { // 启动 Claude Code(跨平台支持) const claudeCmd = (0, installer_1.getClaudeCommand)(); const isWindows = process.platform === 'win32'; const claude = (0, child_process_1.spawn)(claudeCmd, claudeArgs, { stdio: 'inherit', env, shell: isWindows // Windows 需要 shell: true 以支持 .cmd 文件和 Git Bash }); claude.on('error', (error) => { console.log(''); console.log(chalk_1.default.red('✗ 启动 Claude Code 失败')); console.error(chalk_1.default.red(error.message)); console.log(''); reject(error); }); claude.on('exit', (code) => { const exitCode = code || 0; const hasApiError = exitCode === 1; // 如果检测到可能的 API 错误,显示友好提示 if (hasApiError) { console.log('\n' + chalk_1.default.yellow('─'.repeat(70))); console.log(chalk_1.default.yellow.bold('💡 提示:') + chalk_1.default.white('如果遇到 API 认证问题,可以运行以下命令重新配置:')); console.log(chalk_1.default.green.bold(' ccgo config')); console.log(chalk_1.default.yellow('─'.repeat(70) + '\n')); } resolve({ exitCode, hasApiError }); }); }); } } exports.ClaudeLauncher = ClaudeLauncher; //# sourceMappingURL=launcher.js.map