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