@kaitranntt/ccs 4.4.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -7
- package/VERSION +1 -1
- package/config/base-agy.settings.json +10 -0
- package/config/base-codex.settings.json +10 -0
- package/config/base-gemini.settings.json +10 -0
- package/dist/auth/auth-commands.d.ts +52 -0
- package/dist/auth/auth-commands.d.ts.map +1 -0
- package/dist/auth/auth-commands.js +479 -0
- package/dist/auth/auth-commands.js.map +1 -0
- package/dist/auth/profile-detector.d.ts +68 -0
- package/dist/auth/profile-detector.d.ts.map +1 -0
- package/dist/auth/profile-detector.js +209 -0
- package/dist/auth/profile-detector.js.map +1 -0
- package/dist/auth/profile-registry.d.ts +60 -0
- package/dist/auth/profile-registry.d.ts.map +1 -0
- package/dist/auth/profile-registry.js +188 -0
- package/dist/auth/profile-registry.js.map +1 -0
- package/dist/ccs.d.ts +10 -0
- package/dist/ccs.d.ts.map +1 -0
- package/dist/ccs.js +320 -0
- package/dist/ccs.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +95 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth-handler.js +443 -0
- package/dist/cliproxy/auth-handler.js.map +1 -0
- package/dist/cliproxy/base-config-loader.d.ts +42 -0
- package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
- package/dist/cliproxy/base-config-loader.js +123 -0
- package/dist/cliproxy/base-config-loader.js.map +1 -0
- package/dist/cliproxy/binary-manager.d.ts +104 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -0
- package/dist/cliproxy/binary-manager.js +567 -0
- package/dist/cliproxy/binary-manager.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
- package/dist/cliproxy/cliproxy-executor.js +297 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -0
- package/dist/cliproxy/config-generator.d.ts +89 -0
- package/dist/cliproxy/config-generator.d.ts.map +1 -0
- package/dist/cliproxy/config-generator.js +263 -0
- package/dist/cliproxy/config-generator.js.map +1 -0
- package/dist/cliproxy/index.d.ts +13 -0
- package/dist/cliproxy/index.d.ts.map +1 -0
- package/dist/cliproxy/index.js +62 -0
- package/dist/cliproxy/index.js.map +1 -0
- package/dist/cliproxy/platform-detector.d.ts +48 -0
- package/dist/cliproxy/platform-detector.d.ts.map +1 -0
- package/dist/cliproxy/platform-detector.js +118 -0
- package/dist/cliproxy/platform-detector.js.map +1 -0
- package/dist/cliproxy/types.d.ts +169 -0
- package/dist/cliproxy/types.d.ts.map +1 -0
- package/dist/cliproxy/types.js +7 -0
- package/dist/cliproxy/types.js.map +1 -0
- package/dist/commands/doctor-command.d.ts +10 -0
- package/dist/commands/doctor-command.d.ts.map +1 -0
- package/dist/commands/doctor-command.js +44 -0
- package/dist/commands/doctor-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +5 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +104 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/install-command.d.ts +14 -0
- package/dist/commands/install-command.d.ts.map +1 -0
- package/dist/commands/install-command.js +39 -0
- package/dist/commands/install-command.js.map +1 -0
- package/dist/commands/shell-completion-command.d.ts +10 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -0
- package/dist/commands/shell-completion-command.js +85 -0
- package/dist/commands/shell-completion-command.js.map +1 -0
- package/dist/commands/sync-command.d.ts +10 -0
- package/dist/commands/sync-command.d.ts.map +1 -0
- package/dist/commands/sync-command.js +59 -0
- package/dist/commands/sync-command.js.map +1 -0
- package/dist/commands/update-command.d.ts +12 -0
- package/dist/commands/update-command.d.ts.map +1 -0
- package/dist/commands/update-command.js +295 -0
- package/dist/commands/update-command.js.map +1 -0
- package/dist/commands/version-command.d.ts +10 -0
- package/dist/commands/version-command.d.ts.map +1 -0
- package/dist/commands/version-command.js +100 -0
- package/dist/commands/version-command.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +60 -0
- package/dist/delegation/delegation-handler.d.ts.map +1 -0
- package/dist/delegation/delegation-handler.js +174 -0
- package/dist/delegation/delegation-handler.js.map +1 -0
- package/dist/delegation/headless-executor.d.ts +114 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -0
- package/dist/delegation/headless-executor.js +562 -0
- package/dist/delegation/headless-executor.js.map +1 -0
- package/dist/delegation/result-formatter.d.ts +108 -0
- package/dist/delegation/result-formatter.d.ts.map +1 -0
- package/dist/delegation/result-formatter.js +391 -0
- package/dist/delegation/result-formatter.js.map +1 -0
- package/dist/delegation/session-manager.d.ts +58 -0
- package/dist/delegation/session-manager.d.ts.map +1 -0
- package/dist/delegation/session-manager.js +153 -0
- package/dist/delegation/session-manager.js.map +1 -0
- package/dist/delegation/settings-parser.d.ts +31 -0
- package/dist/delegation/settings-parser.d.ts.map +1 -0
- package/dist/delegation/settings-parser.js +107 -0
- package/dist/delegation/settings-parser.js.map +1 -0
- package/dist/glmt/delta-accumulator.d.ts +210 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -0
- package/dist/glmt/delta-accumulator.js +351 -0
- package/dist/glmt/delta-accumulator.js.map +1 -0
- package/dist/glmt/glmt-proxy.d.ts +72 -0
- package/dist/glmt/glmt-proxy.d.ts.map +1 -0
- package/dist/glmt/glmt-proxy.js +427 -0
- package/dist/glmt/glmt-proxy.js.map +1 -0
- package/dist/glmt/glmt-transformer.d.ts +265 -0
- package/dist/glmt/glmt-transformer.d.ts.map +1 -0
- package/dist/glmt/glmt-transformer.js +832 -0
- package/dist/glmt/glmt-transformer.js.map +1 -0
- package/dist/glmt/locale-enforcer.d.ts +38 -0
- package/dist/glmt/locale-enforcer.d.ts.map +1 -0
- package/dist/glmt/locale-enforcer.js +69 -0
- package/dist/glmt/locale-enforcer.js.map +1 -0
- package/dist/glmt/reasoning-enforcer.d.ts +52 -0
- package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
- package/dist/glmt/reasoning-enforcer.js +151 -0
- package/dist/glmt/reasoning-enforcer.js.map +1 -0
- package/dist/glmt/sse-parser.d.ts +47 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -0
- package/dist/glmt/sse-parser.js +93 -0
- package/dist/glmt/sse-parser.js.map +1 -0
- package/dist/management/doctor.d.ts +104 -0
- package/dist/management/doctor.d.ts.map +1 -0
- package/dist/management/doctor.js +673 -0
- package/dist/management/doctor.js.map +1 -0
- package/dist/management/instance-manager.d.ts +57 -0
- package/dist/management/instance-manager.d.ts.map +1 -0
- package/dist/management/instance-manager.js +195 -0
- package/dist/management/instance-manager.js.map +1 -0
- package/dist/management/recovery-manager.d.ts +39 -0
- package/dist/management/recovery-manager.d.ts.map +1 -0
- package/dist/management/recovery-manager.js +141 -0
- package/dist/management/recovery-manager.js.map +1 -0
- package/dist/management/shared-manager.d.ts +47 -0
- package/dist/management/shared-manager.d.ts.map +1 -0
- package/dist/management/shared-manager.js +388 -0
- package/dist/management/shared-manager.js.map +1 -0
- package/dist/types/cli.d.ts +50 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +16 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +51 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +26 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delegation.d.ts +61 -0
- package/dist/types/delegation.d.ts.map +1 -0
- package/dist/types/delegation.js +6 -0
- package/dist/types/delegation.js.map +1 -0
- package/dist/types/glmt.d.ts +95 -0
- package/dist/types/glmt.d.ts.map +1 -0
- package/dist/types/glmt.js +7 -0
- package/dist/types/glmt.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +36 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +22 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/claude-detector.d.ts +14 -0
- package/dist/utils/claude-detector.d.ts.map +1 -0
- package/dist/utils/claude-detector.js +112 -0
- package/dist/utils/claude-detector.js.map +1 -0
- package/dist/utils/claude-dir-installer.d.ts +46 -0
- package/dist/utils/claude-dir-installer.d.ts.map +1 -0
- package/dist/utils/claude-dir-installer.js +289 -0
- package/dist/utils/claude-dir-installer.js.map +1 -0
- package/dist/utils/claude-symlink-manager.d.ts +61 -0
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
- package/dist/utils/claude-symlink-manager.js +291 -0
- package/dist/utils/claude-symlink-manager.js.map +1 -0
- package/dist/utils/config-manager.d.ts +32 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +143 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/delegation-validator.d.ts +39 -0
- package/dist/utils/delegation-validator.d.ts.map +1 -0
- package/dist/utils/delegation-validator.js +161 -0
- package/dist/utils/delegation-validator.js.map +1 -0
- package/dist/utils/error-codes.d.ts +36 -0
- package/dist/utils/error-codes.d.ts.map +1 -0
- package/dist/utils/error-codes.js +63 -0
- package/dist/utils/error-codes.js.map +1 -0
- package/dist/utils/error-manager.d.ts +59 -0
- package/dist/utils/error-manager.d.ts.map +1 -0
- package/dist/utils/error-manager.js +228 -0
- package/dist/utils/error-manager.js.map +1 -0
- package/dist/utils/helpers.d.ts +27 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +150 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/package-manager-detector.d.ts +14 -0
- package/dist/utils/package-manager-detector.d.ts.map +1 -0
- package/dist/utils/package-manager-detector.js +162 -0
- package/dist/utils/package-manager-detector.js.map +1 -0
- package/dist/utils/progress-indicator.d.ts +52 -0
- package/dist/utils/progress-indicator.d.ts.map +1 -0
- package/dist/utils/progress-indicator.js +102 -0
- package/dist/utils/progress-indicator.js.map +1 -0
- package/dist/utils/prompt.d.ts +29 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +116 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/shell-completion.d.ts +52 -0
- package/dist/utils/shell-completion.d.ts.map +1 -0
- package/dist/utils/shell-completion.js +231 -0
- package/dist/utils/shell-completion.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +15 -0
- package/dist/utils/shell-executor.d.ts.map +1 -0
- package/dist/utils/shell-executor.js +57 -0
- package/dist/utils/shell-executor.js.map +1 -0
- package/dist/utils/update-checker.d.ts +48 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +241 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/lib/ccs +21 -1907
- package/lib/ccs.ps1 +26 -1800
- package/lib/error-codes.ps1 +2 -1
- package/lib/prompt.ps1 +2 -2
- package/package.json +31 -11
- package/scripts/add-shebang.js +39 -0
- package/scripts/bump-version.sh +25 -37
- package/scripts/dev-install.sh +32 -11
- package/scripts/postinstall.js +29 -29
- package/bin/auth/auth-commands.js +0 -499
- package/bin/auth/profile-detector.js +0 -204
- package/bin/auth/profile-registry.js +0 -225
- package/bin/ccs.js +0 -1034
- package/bin/delegation/README.md +0 -191
- package/bin/delegation/delegation-handler.js +0 -212
- package/bin/delegation/headless-executor.js +0 -618
- package/bin/delegation/result-formatter.js +0 -485
- package/bin/delegation/session-manager.js +0 -157
- package/bin/delegation/settings-parser.js +0 -109
- package/bin/glmt/delta-accumulator.js +0 -276
- package/bin/glmt/glmt-proxy.js +0 -495
- package/bin/glmt/glmt-transformer.js +0 -999
- package/bin/glmt/locale-enforcer.js +0 -72
- package/bin/glmt/reasoning-enforcer.js +0 -173
- package/bin/glmt/sse-parser.js +0 -96
- package/bin/management/doctor.js +0 -721
- package/bin/management/instance-manager.js +0 -202
- package/bin/management/recovery-manager.js +0 -135
- package/bin/management/shared-manager.js +0 -402
- package/bin/utils/claude-detector.js +0 -73
- package/bin/utils/claude-dir-installer.js +0 -283
- package/bin/utils/claude-symlink-manager.js +0 -289
- package/bin/utils/config-manager.js +0 -103
- package/bin/utils/delegation-validator.js +0 -154
- package/bin/utils/error-codes.js +0 -59
- package/bin/utils/error-manager.js +0 -165
- package/bin/utils/helpers.js +0 -136
- package/bin/utils/progress-indicator.js +0 -111
- package/bin/utils/prompt.js +0 -134
- package/bin/utils/shell-completion.js +0 -256
- package/bin/utils/update-checker.js +0 -243
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auth Handler for CLIProxyAPI
|
|
4
|
+
*
|
|
5
|
+
* Manages OAuth authentication for CLIProxy providers (Gemini, Codex, Antigravity).
|
|
6
|
+
* CLIProxyAPI handles OAuth internally - we just need to:
|
|
7
|
+
* 1. Check if auth exists (token files in CCS auth directory)
|
|
8
|
+
* 2. Trigger OAuth flow by spawning binary with auth flag
|
|
9
|
+
* 3. Auto-detect headless environments (SSH, no DISPLAY)
|
|
10
|
+
* 4. Use -no-browser flag for headless, display OAuth URL for manual auth
|
|
11
|
+
*
|
|
12
|
+
* Token storage: ~/.ccs/cliproxy/auth/<provider>/
|
|
13
|
+
* Each provider has its own directory to avoid conflicts.
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.displayAuthStatus = exports.ensureAuth = exports.triggerOAuth = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.getProviderTokenDir = exports.getOAuthConfig = void 0;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const progress_indicator_1 = require("../utils/progress-indicator");
|
|
44
|
+
const config_generator_1 = require("./config-generator");
|
|
45
|
+
const binary_manager_1 = require("./binary-manager");
|
|
46
|
+
/**
|
|
47
|
+
* Detect if running in a headless environment (no browser available)
|
|
48
|
+
*/
|
|
49
|
+
function isHeadlessEnvironment() {
|
|
50
|
+
// SSH session
|
|
51
|
+
if (process.env.SSH_TTY || process.env.SSH_CLIENT || process.env.SSH_CONNECTION) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
// No display (Linux/X11)
|
|
55
|
+
if (process.platform === 'linux' && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
// Non-interactive (piped stdin)
|
|
59
|
+
if (!process.stdin.isTTY) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* OAuth configurations per provider
|
|
66
|
+
* Note: CLIProxyAPI handles actual OAuth - these are for display/manual flow
|
|
67
|
+
*/
|
|
68
|
+
const OAUTH_CONFIGS = {
|
|
69
|
+
gemini: {
|
|
70
|
+
provider: 'gemini',
|
|
71
|
+
displayName: 'Google Gemini',
|
|
72
|
+
authUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
|
|
73
|
+
scopes: ['https://www.googleapis.com/auth/generative-language'],
|
|
74
|
+
authFlag: '-login',
|
|
75
|
+
},
|
|
76
|
+
codex: {
|
|
77
|
+
provider: 'codex',
|
|
78
|
+
displayName: 'Codex',
|
|
79
|
+
authUrl: 'https://auth.openai.com/authorize',
|
|
80
|
+
scopes: ['openid', 'profile'],
|
|
81
|
+
authFlag: '-codex-login',
|
|
82
|
+
},
|
|
83
|
+
agy: {
|
|
84
|
+
provider: 'agy',
|
|
85
|
+
displayName: 'Antigravity',
|
|
86
|
+
authUrl: 'https://antigravity.ai/oauth/authorize',
|
|
87
|
+
scopes: ['api'],
|
|
88
|
+
authFlag: '-antigravity-login',
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Get OAuth config for provider
|
|
93
|
+
*/
|
|
94
|
+
function getOAuthConfig(provider) {
|
|
95
|
+
const config = OAUTH_CONFIGS[provider];
|
|
96
|
+
if (!config) {
|
|
97
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
98
|
+
}
|
|
99
|
+
return config;
|
|
100
|
+
}
|
|
101
|
+
exports.getOAuthConfig = getOAuthConfig;
|
|
102
|
+
/**
|
|
103
|
+
* Get token directory for provider
|
|
104
|
+
*/
|
|
105
|
+
function getProviderTokenDir(provider) {
|
|
106
|
+
return (0, config_generator_1.getProviderAuthDir)(provider);
|
|
107
|
+
}
|
|
108
|
+
exports.getProviderTokenDir = getProviderTokenDir;
|
|
109
|
+
/**
|
|
110
|
+
* Provider-specific auth file prefixes (fallback detection)
|
|
111
|
+
* CLIProxyAPI names auth files with provider prefix (e.g., "antigravity-user@email.json")
|
|
112
|
+
* Note: Gemini tokens may NOT have prefix - CLIProxyAPI uses {email}-{projectID}.json format
|
|
113
|
+
*/
|
|
114
|
+
const PROVIDER_AUTH_PREFIXES = {
|
|
115
|
+
gemini: ['gemini-', 'google-'],
|
|
116
|
+
codex: ['codex-', 'openai-'],
|
|
117
|
+
agy: ['antigravity-', 'agy-'],
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Provider type values inside token JSON files
|
|
121
|
+
* CLIProxyAPI sets "type" field in token JSON (e.g., {"type": "gemini"})
|
|
122
|
+
*/
|
|
123
|
+
const PROVIDER_TYPE_VALUES = {
|
|
124
|
+
gemini: ['gemini'],
|
|
125
|
+
codex: ['codex'],
|
|
126
|
+
agy: ['antigravity'],
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Check if a JSON file contains a token for the given provider
|
|
130
|
+
* Reads the file and checks the "type" field
|
|
131
|
+
*/
|
|
132
|
+
function isTokenFileForProvider(filePath, provider) {
|
|
133
|
+
try {
|
|
134
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
135
|
+
const data = JSON.parse(content);
|
|
136
|
+
const typeValue = (data.type || '').toLowerCase();
|
|
137
|
+
const validTypes = PROVIDER_TYPE_VALUES[provider] || [];
|
|
138
|
+
return validTypes.includes(typeValue);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if provider has valid authentication
|
|
146
|
+
* CLIProxyAPI stores OAuth tokens as JSON files in the auth directory.
|
|
147
|
+
* Detection strategy:
|
|
148
|
+
* 1. First check by filename prefix (fast path)
|
|
149
|
+
* 2. If no match, check JSON content for "type" field (Gemini uses {email}-{projectID}.json without prefix)
|
|
150
|
+
*/
|
|
151
|
+
function isAuthenticated(provider) {
|
|
152
|
+
const tokenDir = getProviderTokenDir(provider);
|
|
153
|
+
if (!fs.existsSync(tokenDir)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
const validPrefixes = PROVIDER_AUTH_PREFIXES[provider] || [];
|
|
157
|
+
try {
|
|
158
|
+
const files = fs.readdirSync(tokenDir);
|
|
159
|
+
const jsonFiles = files.filter((f) => f.endsWith('.json') || f.endsWith('.token') || f === 'credentials');
|
|
160
|
+
// Strategy 1: Check by filename prefix (fast path for antigravity, codex)
|
|
161
|
+
const prefixMatch = jsonFiles.some((f) => {
|
|
162
|
+
const lowerFile = f.toLowerCase();
|
|
163
|
+
return validPrefixes.some((prefix) => lowerFile.startsWith(prefix));
|
|
164
|
+
});
|
|
165
|
+
if (prefixMatch)
|
|
166
|
+
return true;
|
|
167
|
+
// Strategy 2: Check JSON content for "type" field (needed for Gemini)
|
|
168
|
+
for (const f of jsonFiles) {
|
|
169
|
+
const filePath = path.join(tokenDir, f);
|
|
170
|
+
if (isTokenFileForProvider(filePath, provider)) {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.isAuthenticated = isAuthenticated;
|
|
181
|
+
/**
|
|
182
|
+
* Get detailed auth status for provider
|
|
183
|
+
* Uses same detection strategy as isAuthenticated: prefix first, then content
|
|
184
|
+
*/
|
|
185
|
+
function getAuthStatus(provider) {
|
|
186
|
+
const tokenDir = getProviderTokenDir(provider);
|
|
187
|
+
let tokenFiles = [];
|
|
188
|
+
let lastAuth;
|
|
189
|
+
const validPrefixes = PROVIDER_AUTH_PREFIXES[provider] || [];
|
|
190
|
+
if (fs.existsSync(tokenDir)) {
|
|
191
|
+
const files = fs.readdirSync(tokenDir);
|
|
192
|
+
const jsonFiles = files.filter((f) => f.endsWith('.json') || f.endsWith('.token') || f === 'credentials');
|
|
193
|
+
// Check each file: by prefix OR by content
|
|
194
|
+
tokenFiles = jsonFiles.filter((f) => {
|
|
195
|
+
const lowerFile = f.toLowerCase();
|
|
196
|
+
// Strategy 1: prefix match
|
|
197
|
+
if (validPrefixes.some((prefix) => lowerFile.startsWith(prefix))) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
// Strategy 2: content match (for Gemini tokens without prefix)
|
|
201
|
+
const filePath = path.join(tokenDir, f);
|
|
202
|
+
return isTokenFileForProvider(filePath, provider);
|
|
203
|
+
});
|
|
204
|
+
// Get most recent modification time
|
|
205
|
+
for (const file of tokenFiles) {
|
|
206
|
+
const filePath = path.join(tokenDir, file);
|
|
207
|
+
try {
|
|
208
|
+
const stats = fs.statSync(filePath);
|
|
209
|
+
if (!lastAuth || stats.mtime > lastAuth) {
|
|
210
|
+
lastAuth = stats.mtime;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Skip if can't stat file
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
provider,
|
|
220
|
+
authenticated: tokenFiles.length > 0,
|
|
221
|
+
tokenDir,
|
|
222
|
+
tokenFiles,
|
|
223
|
+
lastAuth,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
exports.getAuthStatus = getAuthStatus;
|
|
227
|
+
/**
|
|
228
|
+
* Get auth status for all providers
|
|
229
|
+
*/
|
|
230
|
+
function getAllAuthStatus() {
|
|
231
|
+
const providers = ['gemini', 'codex', 'agy'];
|
|
232
|
+
return providers.map(getAuthStatus);
|
|
233
|
+
}
|
|
234
|
+
exports.getAllAuthStatus = getAllAuthStatus;
|
|
235
|
+
/**
|
|
236
|
+
* Clear authentication for provider
|
|
237
|
+
*/
|
|
238
|
+
function clearAuth(provider) {
|
|
239
|
+
const tokenDir = getProviderTokenDir(provider);
|
|
240
|
+
if (!fs.existsSync(tokenDir)) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
// Remove all files in token directory
|
|
244
|
+
const files = fs.readdirSync(tokenDir);
|
|
245
|
+
for (const file of files) {
|
|
246
|
+
fs.unlinkSync(path.join(tokenDir, file));
|
|
247
|
+
}
|
|
248
|
+
// Remove directory
|
|
249
|
+
fs.rmdirSync(tokenDir);
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
exports.clearAuth = clearAuth;
|
|
253
|
+
/**
|
|
254
|
+
* Trigger OAuth flow for provider
|
|
255
|
+
* Auto-detects headless environment and uses -no-browser flag accordingly
|
|
256
|
+
*/
|
|
257
|
+
async function triggerOAuth(provider, options = {}) {
|
|
258
|
+
const oauthConfig = getOAuthConfig(provider);
|
|
259
|
+
const { verbose = false } = options;
|
|
260
|
+
// Auto-detect headless if not explicitly set
|
|
261
|
+
const headless = options.headless ?? isHeadlessEnvironment();
|
|
262
|
+
const log = (msg) => {
|
|
263
|
+
if (verbose) {
|
|
264
|
+
console.error(`[auth] ${msg}`);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
// Ensure binary exists
|
|
268
|
+
let binaryPath;
|
|
269
|
+
try {
|
|
270
|
+
binaryPath = await (0, binary_manager_1.ensureCLIProxyBinary)(verbose);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
console.error('[X] Failed to prepare CLIProxy binary');
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
// Ensure auth directory exists
|
|
277
|
+
const tokenDir = getProviderTokenDir(provider);
|
|
278
|
+
fs.mkdirSync(tokenDir, { recursive: true, mode: 0o700 });
|
|
279
|
+
// Generate config file (CLIProxyAPI requires it even for auth)
|
|
280
|
+
const configPath = (0, config_generator_1.generateConfig)(provider);
|
|
281
|
+
log(`Config generated: ${configPath}`);
|
|
282
|
+
// Build args: config + auth flag + optional -no-browser for headless
|
|
283
|
+
const args = ['-config', configPath, oauthConfig.authFlag];
|
|
284
|
+
if (headless) {
|
|
285
|
+
args.push('-no-browser');
|
|
286
|
+
}
|
|
287
|
+
// Show appropriate message
|
|
288
|
+
console.log('');
|
|
289
|
+
if (headless) {
|
|
290
|
+
console.log(`[i] Headless mode detected - manual authentication required`);
|
|
291
|
+
console.log(`[i] ${oauthConfig.displayName} will display an OAuth URL below`);
|
|
292
|
+
console.log('');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
console.log(`[i] Opening browser for ${oauthConfig.displayName} authentication...`);
|
|
296
|
+
console.log('[i] Complete the login in your browser.');
|
|
297
|
+
console.log('');
|
|
298
|
+
}
|
|
299
|
+
const spinner = new progress_indicator_1.ProgressIndicator(`Authenticating with ${oauthConfig.displayName}`);
|
|
300
|
+
if (!headless) {
|
|
301
|
+
spinner.start();
|
|
302
|
+
}
|
|
303
|
+
return new Promise((resolve) => {
|
|
304
|
+
// Spawn CLIProxyAPI with auth flag (and -no-browser if headless)
|
|
305
|
+
const authProcess = (0, child_process_1.spawn)(binaryPath, args, {
|
|
306
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
307
|
+
env: {
|
|
308
|
+
...process.env,
|
|
309
|
+
CLI_PROXY_AUTH_DIR: tokenDir,
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
let stderrData = '';
|
|
313
|
+
let urlDisplayed = false;
|
|
314
|
+
authProcess.stdout?.on('data', (data) => {
|
|
315
|
+
const output = data.toString();
|
|
316
|
+
log(`stdout: ${output.trim()}`);
|
|
317
|
+
// In headless mode, display OAuth URLs prominently
|
|
318
|
+
if (headless) {
|
|
319
|
+
const lines = output.split('\n');
|
|
320
|
+
for (const line of lines) {
|
|
321
|
+
// Look for URLs in the output
|
|
322
|
+
const urlMatch = line.match(/https?:\/\/[^\s]+/);
|
|
323
|
+
if (urlMatch && !urlDisplayed) {
|
|
324
|
+
console.log(` ${urlMatch[0]}`);
|
|
325
|
+
console.log('');
|
|
326
|
+
console.log('[i] Waiting for authentication... (press Ctrl+C to cancel)');
|
|
327
|
+
urlDisplayed = true;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
authProcess.stderr?.on('data', (data) => {
|
|
333
|
+
const output = data.toString();
|
|
334
|
+
stderrData += output;
|
|
335
|
+
log(`stderr: ${output.trim()}`);
|
|
336
|
+
// Also check stderr for URLs (some tools output there)
|
|
337
|
+
if (headless && !urlDisplayed) {
|
|
338
|
+
const urlMatch = output.match(/https?:\/\/[^\s]+/);
|
|
339
|
+
if (urlMatch) {
|
|
340
|
+
console.log(` ${urlMatch[0]}`);
|
|
341
|
+
console.log('');
|
|
342
|
+
console.log('[i] Waiting for authentication... (press Ctrl+C to cancel)');
|
|
343
|
+
urlDisplayed = true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
// Timeout after 5 minutes for headless (user needs time to copy URL)
|
|
348
|
+
const timeoutMs = headless ? 300000 : 120000;
|
|
349
|
+
const timeout = setTimeout(() => {
|
|
350
|
+
if (!headless)
|
|
351
|
+
spinner.fail('Authentication timeout');
|
|
352
|
+
authProcess.kill();
|
|
353
|
+
console.error(`[X] OAuth timed out after ${headless ? 5 : 2} minutes`);
|
|
354
|
+
console.error('');
|
|
355
|
+
if (!headless) {
|
|
356
|
+
console.error('Troubleshooting:');
|
|
357
|
+
console.error(' - Make sure a browser is available');
|
|
358
|
+
console.error(' - Try running with --verbose for details');
|
|
359
|
+
}
|
|
360
|
+
resolve(false);
|
|
361
|
+
}, timeoutMs);
|
|
362
|
+
authProcess.on('exit', (code) => {
|
|
363
|
+
clearTimeout(timeout);
|
|
364
|
+
if (code === 0) {
|
|
365
|
+
// Verify token was created BEFORE showing success
|
|
366
|
+
if (isAuthenticated(provider)) {
|
|
367
|
+
if (!headless)
|
|
368
|
+
spinner.succeed(`Authenticated with ${oauthConfig.displayName}`);
|
|
369
|
+
console.log('[OK] Authentication successful');
|
|
370
|
+
resolve(true);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
if (!headless)
|
|
374
|
+
spinner.fail('Authentication incomplete');
|
|
375
|
+
console.error('[X] Token not found after authentication');
|
|
376
|
+
console.error(' The OAuth flow may have been cancelled or port 8085 was in use');
|
|
377
|
+
console.error(' Try: pkill -f cli-proxy-api && ccs gemini --auth');
|
|
378
|
+
resolve(false);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
if (!headless)
|
|
383
|
+
spinner.fail('Authentication failed');
|
|
384
|
+
console.error(`[X] CLIProxyAPI auth exited with code ${code}`);
|
|
385
|
+
if (stderrData && !urlDisplayed) {
|
|
386
|
+
console.error(` ${stderrData.trim().split('\n')[0]}`);
|
|
387
|
+
}
|
|
388
|
+
// Show headless hint if we detected headless environment
|
|
389
|
+
if (headless && !urlDisplayed) {
|
|
390
|
+
console.error('');
|
|
391
|
+
console.error('[i] No OAuth URL was displayed. Try with --verbose for details.');
|
|
392
|
+
}
|
|
393
|
+
resolve(false);
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
authProcess.on('error', (error) => {
|
|
397
|
+
clearTimeout(timeout);
|
|
398
|
+
if (!headless)
|
|
399
|
+
spinner.fail('Authentication error');
|
|
400
|
+
console.error(`[X] Failed to start auth process: ${error.message}`);
|
|
401
|
+
resolve(false);
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
exports.triggerOAuth = triggerOAuth;
|
|
406
|
+
/**
|
|
407
|
+
* Ensure provider is authenticated
|
|
408
|
+
* Triggers OAuth flow if not authenticated
|
|
409
|
+
*/
|
|
410
|
+
async function ensureAuth(provider, options = {}) {
|
|
411
|
+
// Check if already authenticated
|
|
412
|
+
if (isAuthenticated(provider)) {
|
|
413
|
+
if (options.verbose) {
|
|
414
|
+
console.error(`[auth] ${provider} already authenticated`);
|
|
415
|
+
}
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
// Not authenticated - trigger OAuth
|
|
419
|
+
const oauthConfig = getOAuthConfig(provider);
|
|
420
|
+
console.log(`[i] ${oauthConfig.displayName} authentication required`);
|
|
421
|
+
return triggerOAuth(provider, options);
|
|
422
|
+
}
|
|
423
|
+
exports.ensureAuth = ensureAuth;
|
|
424
|
+
/**
|
|
425
|
+
* Display auth status for all providers
|
|
426
|
+
*/
|
|
427
|
+
function displayAuthStatus() {
|
|
428
|
+
console.log('CLIProxy Authentication Status:');
|
|
429
|
+
console.log('');
|
|
430
|
+
const statuses = getAllAuthStatus();
|
|
431
|
+
for (const status of statuses) {
|
|
432
|
+
const oauthConfig = getOAuthConfig(status.provider);
|
|
433
|
+
const icon = status.authenticated ? '[OK]' : '[!]';
|
|
434
|
+
const authStatus = status.authenticated ? 'Authenticated' : 'Not authenticated';
|
|
435
|
+
const lastAuthStr = status.lastAuth ? ` (last: ${status.lastAuth.toLocaleDateString()})` : '';
|
|
436
|
+
console.log(`${icon} ${oauthConfig.displayName}: ${authStatus}${lastAuthStr}`);
|
|
437
|
+
}
|
|
438
|
+
console.log('');
|
|
439
|
+
console.log('To authenticate: ccs <provider> --auth');
|
|
440
|
+
console.log('To logout: ccs <provider> --logout');
|
|
441
|
+
}
|
|
442
|
+
exports.displayAuthStatus = displayAuthStatus;
|
|
443
|
+
//# sourceMappingURL=auth-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-handler.js","sourceRoot":"","sources":["../../src/cliproxy/auth-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Config Loader for CLIProxy Providers
|
|
3
|
+
*
|
|
4
|
+
* Loads provider configurations from config/base-{provider}.settings.json files.
|
|
5
|
+
* This allows model mappings to be easily updated without digging into code.
|
|
6
|
+
*
|
|
7
|
+
* Config files are bundled with the npm package and read at runtime.
|
|
8
|
+
*/
|
|
9
|
+
/// <reference types="node" />
|
|
10
|
+
import { CLIProxyProvider, ProviderModelMapping } from './types';
|
|
11
|
+
/** Base settings file structure */
|
|
12
|
+
interface BaseSettings {
|
|
13
|
+
env: {
|
|
14
|
+
ANTHROPIC_BASE_URL: string;
|
|
15
|
+
ANTHROPIC_AUTH_TOKEN: string;
|
|
16
|
+
ANTHROPIC_MODEL: string;
|
|
17
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: string;
|
|
18
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: string;
|
|
19
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load base config for a provider
|
|
24
|
+
* Returns parsed settings from config/base-{provider}.settings.json
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadBaseConfig(provider: CLIProxyProvider): BaseSettings;
|
|
27
|
+
/**
|
|
28
|
+
* Get model mapping from base config
|
|
29
|
+
* Extracts model names from env vars
|
|
30
|
+
*/
|
|
31
|
+
export declare function getModelMappingFromConfig(provider: CLIProxyProvider): ProviderModelMapping;
|
|
32
|
+
/**
|
|
33
|
+
* Get full env vars from base config
|
|
34
|
+
* Returns the complete env object for Claude CLI
|
|
35
|
+
*/
|
|
36
|
+
export declare function getEnvVarsFromConfig(provider: CLIProxyProvider): NodeJS.ProcessEnv;
|
|
37
|
+
/**
|
|
38
|
+
* Clear config cache (useful for testing)
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearConfigCache(): void;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=base-config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-config-loader.d.ts","sourceRoot":"","sources":["../../src/cliproxy/base-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAIH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEjE,mCAAmC;AACnC,UAAU,YAAY;IACpB,GAAG,EAAE;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;QACxB,4BAA4B,EAAE,MAAM,CAAC;QACrC,8BAA8B,EAAE,MAAM,CAAC;QACvC,6BAA6B,EAAE,MAAM,CAAC;KACvC,CAAC;CACH;AAgBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,YAAY,CA6CvE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,oBAAoB,CAU1F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAGlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Config Loader for CLIProxy Providers
|
|
4
|
+
*
|
|
5
|
+
* Loads provider configurations from config/base-{provider}.settings.json files.
|
|
6
|
+
* This allows model mappings to be easily updated without digging into code.
|
|
7
|
+
*
|
|
8
|
+
* Config files are bundled with the npm package and read at runtime.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.clearConfigCache = exports.getEnvVarsFromConfig = exports.getModelMappingFromConfig = exports.loadBaseConfig = void 0;
|
|
35
|
+
const fs = __importStar(require("fs"));
|
|
36
|
+
const path = __importStar(require("path"));
|
|
37
|
+
/** Cached configs to avoid repeated file reads */
|
|
38
|
+
const configCache = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Get path to base config file for provider
|
|
41
|
+
* Config files are in the config/ directory relative to package root
|
|
42
|
+
*/
|
|
43
|
+
function getBaseConfigPath(provider) {
|
|
44
|
+
// __dirname points to dist/cliproxy at runtime
|
|
45
|
+
// Config files are at package root: ../config/
|
|
46
|
+
const configDir = path.join(__dirname, '..', '..', 'config');
|
|
47
|
+
return path.join(configDir, `base-${provider}.settings.json`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load base config for a provider
|
|
51
|
+
* Returns parsed settings from config/base-{provider}.settings.json
|
|
52
|
+
*/
|
|
53
|
+
function loadBaseConfig(provider) {
|
|
54
|
+
// Check cache first
|
|
55
|
+
const cached = configCache.get(provider);
|
|
56
|
+
if (cached) {
|
|
57
|
+
return cached;
|
|
58
|
+
}
|
|
59
|
+
const configPath = getBaseConfigPath(provider);
|
|
60
|
+
if (!fs.existsSync(configPath)) {
|
|
61
|
+
throw new Error(`Base config not found for provider '${provider}': ${configPath}\n` +
|
|
62
|
+
`Expected file: config/base-${provider}.settings.json`);
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
66
|
+
const settings = JSON.parse(content);
|
|
67
|
+
// Validate required fields
|
|
68
|
+
if (!settings.env || typeof settings.env !== 'object') {
|
|
69
|
+
throw new Error('Missing or invalid "env" object');
|
|
70
|
+
}
|
|
71
|
+
const required = [
|
|
72
|
+
'ANTHROPIC_MODEL',
|
|
73
|
+
'ANTHROPIC_DEFAULT_OPUS_MODEL',
|
|
74
|
+
'ANTHROPIC_DEFAULT_SONNET_MODEL',
|
|
75
|
+
'ANTHROPIC_DEFAULT_HAIKU_MODEL',
|
|
76
|
+
];
|
|
77
|
+
for (const field of required) {
|
|
78
|
+
if (!settings.env[field]) {
|
|
79
|
+
throw new Error(`Missing required field: env.${field}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Cache and return
|
|
83
|
+
configCache.set(provider, settings);
|
|
84
|
+
return settings;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const err = error;
|
|
88
|
+
throw new Error(`Failed to load base config for '${provider}': ${err.message}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.loadBaseConfig = loadBaseConfig;
|
|
92
|
+
/**
|
|
93
|
+
* Get model mapping from base config
|
|
94
|
+
* Extracts model names from env vars
|
|
95
|
+
*/
|
|
96
|
+
function getModelMappingFromConfig(provider) {
|
|
97
|
+
const config = loadBaseConfig(provider);
|
|
98
|
+
return {
|
|
99
|
+
defaultModel: config.env.ANTHROPIC_MODEL,
|
|
100
|
+
claudeModel: config.env.ANTHROPIC_MODEL,
|
|
101
|
+
opusModel: config.env.ANTHROPIC_DEFAULT_OPUS_MODEL,
|
|
102
|
+
sonnetModel: config.env.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
103
|
+
haikuModel: config.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
exports.getModelMappingFromConfig = getModelMappingFromConfig;
|
|
107
|
+
/**
|
|
108
|
+
* Get full env vars from base config
|
|
109
|
+
* Returns the complete env object for Claude CLI
|
|
110
|
+
*/
|
|
111
|
+
function getEnvVarsFromConfig(provider) {
|
|
112
|
+
const config = loadBaseConfig(provider);
|
|
113
|
+
return config.env;
|
|
114
|
+
}
|
|
115
|
+
exports.getEnvVarsFromConfig = getEnvVarsFromConfig;
|
|
116
|
+
/**
|
|
117
|
+
* Clear config cache (useful for testing)
|
|
118
|
+
*/
|
|
119
|
+
function clearConfigCache() {
|
|
120
|
+
configCache.clear();
|
|
121
|
+
}
|
|
122
|
+
exports.clearConfigCache = clearConfigCache;
|
|
123
|
+
//# sourceMappingURL=base-config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-config-loader.js","sourceRoot":"","sources":["../../src/cliproxy/base-config-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAe7B,kDAAkD;AAClD,MAAM,WAAW,GAAwC,IAAI,GAAG,EAAE,CAAC;AAEnE;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAA0B;IACnD,+CAA+C;IAC/C,+CAA+C;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,QAAQ,gBAAgB,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,QAA0B;IACvD,oBAAoB;IACpB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,MAAM,UAAU,IAAI;YACjE,8BAA8B,QAAQ,gBAAgB,CACzD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,iBAAiB;YACjB,8BAA8B;YAC9B,gCAAgC;YAChC,+BAA+B;SAChC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAkC,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AA7CD,wCA6CC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,QAA0B;IAClE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe;QACxC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe;QACvC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B;QAClD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,8BAA8B;QACtD,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,6BAA6B;KACrD,CAAC;AACJ,CAAC;AAVD,8DAUC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,QAA0B;IAC7D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,GAAmC,CAAC;AACpD,CAAC;AAHD,oDAGC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAFD,4CAEC"}
|