UNPKG

ccgo

Version:

Simple Claude Code launcher with config management and environment variable injection

221 lines 8.06 kB
#!/usr/bin/env node "use strict"; /** * CLI 主入口 * CCGO - Claude Code Go 启动器 */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs = __importStar(require("fs")); const path = __importStar(require("path")); const chalk_1 = __importDefault(require("chalk")); const manager_1 = require("./config/manager"); const launcher_1 = require("./launcher"); const prompts_1 = require("./utils/prompts"); const installer_1 = require("./utils/installer"); // 读取 package.json 获取版本号 const packageJsonPath = path.join(__dirname, '../package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); // 解析命令行参数 const args = process.argv.slice(2); const command = args[0]; /** * 主函数 */ async function main() { try { // ========== 版本和帮助 ========== if (args.includes('-v') || args.includes('--version')) { console.log('CCGO v' + packageJson.version); return; } if (command === 'help' || command === '--help' || command === '-h') { (0, prompts_1.showHelp)(); return; } // ========== 配置命令 ========== if (command === 'config') { await handleConfigCommand(args.slice(1)); return; } // ========== 默认:启动器模式 ========== await runAsLauncher(args); } catch (error) { console.log(''); console.log(chalk_1.default.red('✗ 程序执行失败: ' + error.message)); console.log(''); if (process.env.DEBUG) { console.error(error); } process.exit(1); } } /** * 处理 config 命令 */ async function handleConfigCommand(subArgs) { const config = new manager_1.ConfigManager(); // --list: 列出所有配置 if (subArgs.includes('--list')) { const profiles = config.getAllProfiles(); if (profiles.length === 0) { console.log(''); console.log(chalk_1.default.yellow('暂无配置')); console.log(''); console.log(chalk_1.default.gray('运行以下命令添加配置:')); console.log(chalk_1.default.cyan(' ccgo config')); console.log(''); return; } console.log(''); console.log(chalk_1.default.cyan.bold('📋 配置列表:')); console.log(''); profiles.forEach(profile => { const safeConfig = config.getSafeApiConfig(profile.name); if (safeConfig) { console.log(chalk_1.default.white.bold(` ${profile.name}`)); console.log(chalk_1.default.gray(` Base URL: ${safeConfig.baseUrl}`)); console.log(chalk_1.default.gray(` API Key: ${safeConfig.apiKey}`)); if (safeConfig.model) { console.log(chalk_1.default.gray(` Model: ${safeConfig.model}`)); } if (safeConfig.smallFastModel) { console.log(chalk_1.default.gray(` Small Fast Model: ${safeConfig.smallFastModel}`)); } console.log(''); } }); return; } // --add: 添加新配置 if (subArgs.includes('--add')) { const configData = await (0, prompts_1.showConfigPrompts)(); config.saveProfile(configData.name, { apiKey: configData.apiKey, baseUrl: configData.baseUrl, model: configData.model, smallFastModel: configData.smallFastModel }); (0, prompts_1.showConfigSuccess)(configData.name); return; } // --remove: 删除配置 if (subArgs.includes('--remove')) { const profiles = config.getAllProfiles(); if (profiles.length === 0) { console.log(''); console.log(chalk_1.default.yellow('暂无配置可删除')); console.log(''); return; } const profileName = await (0, prompts_1.selectProfile)(profiles.map(p => ({ name: p.name, config: p }))); config.removeProfile(profileName); console.log(''); console.log(chalk_1.default.green(`✓ 配置 "${profileName}" 已删除`)); console.log(''); return; } // 默认:配置或重新配置 if (!config.hasAnyProfile()) { // 首次配置 const configData = await (0, prompts_1.showConfigPrompts)(); config.saveProfile(configData.name, { apiKey: configData.apiKey, baseUrl: configData.baseUrl, model: configData.model, smallFastModel: configData.smallFastModel }); (0, prompts_1.showConfigSuccess)(configData.name); } else { // 重新配置 const confirmed = await (0, prompts_1.confirmReconfigure)(); if (confirmed) { const configData = await (0, prompts_1.showConfigPrompts)(); config.saveProfile(configData.name, { apiKey: configData.apiKey, baseUrl: configData.baseUrl, model: configData.model, smallFastModel: configData.smallFastModel }); (0, prompts_1.showConfigSuccess)(configData.name); } } } /** * 启动器模式 */ async function runAsLauncher(launchArgs) { const config = new manager_1.ConfigManager(); // 检查是否已配置 if (!config.hasAnyProfile()) { console.log(''); console.log(chalk_1.default.yellow('⚠ 尚未配置 API Key')); console.log(''); console.log(chalk_1.default.gray('请先运行配置命令:')); console.log(chalk_1.default.cyan(' ccgo config')); console.log(''); return; } // 检查 Claude Code 是否已安装 if (!(0, installer_1.checkClaudeInstallation)()) { return; } // 选择配置(如果有多个) let profileName; const profiles = config.getAllProfiles(); if (profiles.length === 1) { profileName = profiles[0].name; } else { profileName = await (0, prompts_1.selectProfile)(profiles.map(p => ({ name: p.name, config: p }))); } // 启动 Claude Code const launcher = new launcher_1.ClaudeLauncher(config, profileName); await launcher.launch({ args: launchArgs, skipPermissions: true }); } // 运行主函数 main().catch(error => { console.error(chalk_1.default.red('发生错误:'), error); process.exit(1); }); //# sourceMappingURL=cli.js.map