UNPKG

@kdump/code-cli-any-llm

Version:

> A unified gateway for the Gemini, opencode, crush, and Qwen Code AI CLIs

245 lines 14 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var ConfigModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigModule = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const os_1 = __importDefault(require("os")); const path_1 = __importDefault(require("path")); const global_config_service_1 = require("./global-config.service"); const DEFAULT_GATEWAY_LOG_DIR = path_1.default.join(os_1.default.homedir(), '.code-cli-any-llm', 'logs'); const resolveLogDir = (value) => { if (!value || !value.trim()) { return DEFAULT_GATEWAY_LOG_DIR; } const trimmed = value.trim(); if (trimmed === '~') { return os_1.default.homedir(); } if (trimmed.startsWith('~/') || trimmed.startsWith('~\\')) { const relative = trimmed.slice(2); return path_1.default.join(os_1.default.homedir(), relative); } if (trimmed.startsWith('~')) { const relative = trimmed.slice(1).replace(/^[\\/]/, ''); return path_1.default.join(os_1.default.homedir(), relative); } return path_1.default.isAbsolute(trimmed) ? trimmed : path_1.default.resolve(trimmed); }; const normalizeBoolean = (value, defaultValue = true) => { if (value === undefined) { return defaultValue; } const normalized = value.trim().toLowerCase(); if (!normalized) { return defaultValue; } if (['false', '0', 'no', 'off'].includes(normalized)) { return false; } if (['true', '1', 'yes', 'on'].includes(normalized)) { return true; } return defaultValue; }; const parseBetaEnv = (value) => { if (!value) { return undefined; } const normalized = value.trim(); if (!normalized) { return undefined; } return normalized .split(',') .map((item) => item.trim()) .filter((item) => item.length > 0); }; let ConfigModule = ConfigModule_1 = class ConfigModule { static forRoot() { return { module: ConfigModule_1, imports: [ config_1.ConfigModule.forRoot({ isGlobal: true, load: [ () => { const globalConfigService = new global_config_service_1.GlobalConfigService(); const globalConfigResult = globalConfigService.loadGlobalConfig(); if (globalConfigResult.isValid && globalConfigResult.config) { const config = globalConfigResult.config; return { openai: { apiKey: config.openai.apiKey, baseURL: config.openai.baseURL, model: config.openai.model, timeout: config.openai.timeout, extraBody: config.openai.extraBody, }, codex: config.codex ? { apiKey: config.codex.apiKey, baseURL: config.codex.baseURL, model: config.codex.model, timeout: config.codex.timeout, reasoning: config.codex.reasoning, textVerbosity: config.codex.textVerbosity, authMode: config.codex.authMode || 'ApiKey', } : undefined, claudeCode: config.claudeCode ? { apiKey: config.claudeCode.apiKey, baseURL: config.claudeCode.baseURL, model: config.claudeCode.model, timeout: config.claudeCode.timeout, anthropicVersion: config.claudeCode.anthropicVersion, beta: config.claudeCode.beta, userAgent: config.claudeCode.userAgent, xApp: config.claudeCode.xApp, dangerousDirectBrowserAccess: config.claudeCode.dangerousDirectBrowserAccess, maxOutputTokens: config.claudeCode.maxOutputTokens, extraHeaders: config.claudeCode.extraHeaders, } : undefined, gateway: { port: config.gateway.port, host: config.gateway.host, logLevel: config.gateway.logLevel, logDir: resolveLogDir(config.gateway.logDir), requestTimeout: config.gateway.requestTimeout ?? 3600000, apiMode: config.gateway.apiMode ?? 'gemini', cliMode: config.gateway.cliMode ?? 'gemini', apiKey: config.gateway.apiKey, }, aiProvider: config.aiProvider, }; } return { openai: { apiKey: process.env.CAL_OPENAI_API_KEY, baseURL: process.env.CAL_OPENAI_BASE_URL || 'https://api.openai.com/v1', model: process.env.CAL_OPENAI_MODEL || 'gpt-3.5-turbo', organization: process.env.CAL_OPENAI_ORGANIZATION, timeout: Number(process.env.CAL_OPENAI_TIMEOUT) || 1800000, extraBody: undefined, }, codex: (() => { const authModeRaw = (process.env.CAL_CODEX_AUTH_MODE || 'ApiKey') .trim() .toLowerCase(); const authMode = authModeRaw === 'chatgpt' ? 'ChatGPT' : 'ApiKey'; const hasApiKey = !!(process.env.CAL_CODEX_API_KEY || '').trim(); if (!hasApiKey && authMode !== 'ChatGPT') { return undefined; } return { apiKey: hasApiKey ? process.env.CAL_CODEX_API_KEY : undefined, baseURL: process.env.CAL_CODEX_BASE_URL || 'https://chatgpt.com/backend-api/codex', model: process.env.CAL_CODEX_MODEL || 'gpt-5-codex', timeout: Number(process.env.CAL_CODEX_TIMEOUT) || 1800000, reasoning: (() => { const raw = process.env.CAL_CODEX_REASONING; if (!raw) return undefined; try { return JSON.parse(raw); } catch { return undefined; } })(), textVerbosity: (() => { const raw = (process.env.CAL_CODEX_TEXT_VERBOSITY || '').toLowerCase(); return ['low', 'medium', 'high'].includes(raw) ? raw : undefined; })(), authMode, }; })(), claudeCode: (() => { const apiKey = process.env.CAL_CLAUDE_CODE_API_KEY || process.env.CAL_ANTHROPIC_API_KEY || ''; if (!apiKey.trim()) { return undefined; } return { apiKey: apiKey.trim(), baseURL: process.env.CAL_CLAUDE_CODE_BASE_URL || 'https://open.bigmodel.cn/api/anthropic', model: process.env.CAL_CLAUDE_CODE_MODEL || 'claude-sonnet-4-5-20250929', timeout: Number(process.env.CAL_CLAUDE_CODE_TIMEOUT) || 1800000, anthropicVersion: process.env.CAL_CLAUDE_CODE_VERSION || '2023-06-01', beta: parseBetaEnv(process.env.CAL_CLAUDE_CODE_BETA), userAgent: process.env.CAL_CLAUDE_CODE_USER_AGENT || 'claude-cli/1.0.119 (external, cli)', xApp: process.env.CAL_CLAUDE_CODE_X_APP || 'cli', dangerousDirectBrowserAccess: normalizeBoolean(process.env.CAL_CLAUDE_CODE_DANGEROUS_DIRECT, true), maxOutputTokens: process.env.CAL_CLAUDE_CODE_MAX_OUTPUT ? Number(process.env.CAL_CLAUDE_CODE_MAX_OUTPUT) : undefined, extraHeaders: undefined, }; })(), gateway: { port: Number(process.env.CAL_PORT) || 23062, host: process.env.CAL_HOST || '0.0.0.0', logLevel: process.env.CAL_LOG_LEVEL || 'info', logDir: resolveLogDir(process.env.CAL_GATEWAY_LOG_DIR), requestTimeout: Number(process.env.CAL_REQUEST_TIMEOUT) || 3600000, apiMode: (process.env.CAL_GATEWAY_API_MODE || 'gemini') .toString() .trim() .toLowerCase() === 'openai' ? 'openai' : 'gemini', cliMode: (() => { const raw = (process.env.CAL_GATEWAY_CLI_MODE || 'gemini') .toString() .trim() .toLowerCase(); if (raw === 'opencode') { return 'opencode'; } if (raw === 'crush') { return 'crush'; } if (raw === 'qwencode') { return 'qwencode'; } return 'gemini'; })(), apiKey: process.env.CAL_GATEWAY_API_KEY, }, aiProvider: (process.env.CAL_AI_PROVIDER || 'openai').toLowerCase(), }; }, ], }), ], exports: [config_1.ConfigModule], global: true, }; } }; exports.ConfigModule = ConfigModule; exports.ConfigModule = ConfigModule = ConfigModule_1 = __decorate([ (0, common_1.Module)({}) ], ConfigModule); //# sourceMappingURL=config.module.js.map