ccgo
Version:
Simple Claude Code launcher with config management and environment variable injection
221 lines • 8.06 kB
JavaScript
;
/**
* 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