@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,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Generator for CLIProxyAPI
|
|
4
|
+
*
|
|
5
|
+
* Generates config.yaml for CLIProxyAPI based on provider.
|
|
6
|
+
* Handles OAuth token paths and provider-specific settings.
|
|
7
|
+
*
|
|
8
|
+
* Model mappings are loaded from config/base-{provider}.settings.json files
|
|
9
|
+
* to allow easy updates without code changes.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.ensureProviderSettings = exports.getEffectiveEnvVars = exports.getClaudeEnvVars = exports.getProviderSettingsPath = exports.deleteConfig = exports.configExists = exports.generateConfig = exports.getBinDir = exports.getConfigPath = exports.getAuthDir = exports.getProviderAuthDir = exports.getCliproxyDir = exports.getModelMapping = exports.getProviderConfig = exports.CLIPROXY_DEFAULT_PORT = void 0;
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const config_manager_1 = require("../utils/config-manager");
|
|
39
|
+
const base_config_loader_1 = require("./base-config-loader");
|
|
40
|
+
/** Default CLIProxy port */
|
|
41
|
+
exports.CLIPROXY_DEFAULT_PORT = 8317;
|
|
42
|
+
/** Internal API key for CCS-managed requests */
|
|
43
|
+
const CCS_INTERNAL_API_KEY = 'ccs-internal-managed';
|
|
44
|
+
/** Provider display names (static metadata) */
|
|
45
|
+
const PROVIDER_DISPLAY_NAMES = {
|
|
46
|
+
gemini: 'Gemini',
|
|
47
|
+
codex: 'Codex',
|
|
48
|
+
agy: 'Antigravity',
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Get provider configuration
|
|
52
|
+
* Model mappings are loaded from config/base-{provider}.settings.json
|
|
53
|
+
*/
|
|
54
|
+
function getProviderConfig(provider) {
|
|
55
|
+
const displayName = PROVIDER_DISPLAY_NAMES[provider];
|
|
56
|
+
if (!displayName) {
|
|
57
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
58
|
+
}
|
|
59
|
+
// Load models from base config file
|
|
60
|
+
const models = (0, base_config_loader_1.getModelMappingFromConfig)(provider);
|
|
61
|
+
return {
|
|
62
|
+
name: provider,
|
|
63
|
+
displayName,
|
|
64
|
+
models,
|
|
65
|
+
requiresOAuth: true, // All CLIProxy providers require OAuth
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
exports.getProviderConfig = getProviderConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Get model mapping for provider
|
|
71
|
+
* Loads from config/base-{provider}.settings.json
|
|
72
|
+
*/
|
|
73
|
+
function getModelMapping(provider) {
|
|
74
|
+
return getProviderConfig(provider).models;
|
|
75
|
+
}
|
|
76
|
+
exports.getModelMapping = getModelMapping;
|
|
77
|
+
/**
|
|
78
|
+
* Get CLIProxy base directory
|
|
79
|
+
* All CLIProxy-related files are stored under ~/.ccs/cliproxy/
|
|
80
|
+
*/
|
|
81
|
+
function getCliproxyDir() {
|
|
82
|
+
return path.join((0, config_manager_1.getCcsDir)(), 'cliproxy');
|
|
83
|
+
}
|
|
84
|
+
exports.getCliproxyDir = getCliproxyDir;
|
|
85
|
+
/**
|
|
86
|
+
* Get auth directory for provider
|
|
87
|
+
* All providers use a FLAT auth directory structure for unified config.
|
|
88
|
+
* CLIProxyAPI stores OAuth tokens directly in auth/ (not subdirectories).
|
|
89
|
+
* This enables all providers to be discovered and used concurrently.
|
|
90
|
+
*/
|
|
91
|
+
function getProviderAuthDir(_provider) {
|
|
92
|
+
// Use flat structure - all auth files in same directory for unified discovery
|
|
93
|
+
// Provider param kept for API compatibility (CLIProxyAPI handles via auth file type field)
|
|
94
|
+
return path.join(getCliproxyDir(), 'auth');
|
|
95
|
+
}
|
|
96
|
+
exports.getProviderAuthDir = getProviderAuthDir;
|
|
97
|
+
/**
|
|
98
|
+
* Get base auth directory for CLIProxyAPI
|
|
99
|
+
*/
|
|
100
|
+
function getAuthDir() {
|
|
101
|
+
return path.join(getCliproxyDir(), 'auth');
|
|
102
|
+
}
|
|
103
|
+
exports.getAuthDir = getAuthDir;
|
|
104
|
+
/**
|
|
105
|
+
* Get config file path
|
|
106
|
+
*/
|
|
107
|
+
function getConfigPath() {
|
|
108
|
+
return path.join(getCliproxyDir(), 'config.yaml');
|
|
109
|
+
}
|
|
110
|
+
exports.getConfigPath = getConfigPath;
|
|
111
|
+
/**
|
|
112
|
+
* Get binary directory path
|
|
113
|
+
*/
|
|
114
|
+
function getBinDir() {
|
|
115
|
+
return path.join(getCliproxyDir(), 'bin');
|
|
116
|
+
}
|
|
117
|
+
exports.getBinDir = getBinDir;
|
|
118
|
+
/**
|
|
119
|
+
* Generate UNIFIED config.yaml content for ALL providers
|
|
120
|
+
* This enables concurrent usage of gemini/codex/agy without config conflicts.
|
|
121
|
+
* CLIProxyAPI routes requests by model name to the appropriate provider.
|
|
122
|
+
*/
|
|
123
|
+
function generateUnifiedConfigContent(port = exports.CLIPROXY_DEFAULT_PORT) {
|
|
124
|
+
const authDir = getAuthDir(); // Base auth dir - CLIProxyAPI scans subdirectories
|
|
125
|
+
// Unified config with all providers
|
|
126
|
+
const config = `# CLIProxyAPI unified config generated by CCS
|
|
127
|
+
# Supports: gemini, codex, agy (concurrent usage)
|
|
128
|
+
# Generated: ${new Date().toISOString()}
|
|
129
|
+
|
|
130
|
+
port: ${port}
|
|
131
|
+
debug: false
|
|
132
|
+
logging-to-file: false
|
|
133
|
+
usage-statistics-enabled: false
|
|
134
|
+
|
|
135
|
+
# CCS internal authentication
|
|
136
|
+
api-keys:
|
|
137
|
+
- "${CCS_INTERNAL_API_KEY}"
|
|
138
|
+
|
|
139
|
+
# OAuth tokens stored in auth/ directory
|
|
140
|
+
# CLIProxyAPI auto-discovers auth files in subdirectories
|
|
141
|
+
auth-dir: "${authDir}"
|
|
142
|
+
|
|
143
|
+
# All providers configured - routes by model name
|
|
144
|
+
# No provider-specific sections needed - OAuth auth files provide credentials
|
|
145
|
+
`;
|
|
146
|
+
return config;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Generate unified config.yaml file (supports all providers concurrently)
|
|
150
|
+
* Only regenerates if config doesn't exist.
|
|
151
|
+
* @returns Path to config file
|
|
152
|
+
*/
|
|
153
|
+
function generateConfig(provider, port = exports.CLIPROXY_DEFAULT_PORT) {
|
|
154
|
+
const configPath = getConfigPath();
|
|
155
|
+
// Ensure provider auth directory exists
|
|
156
|
+
const authDir = getProviderAuthDir(provider);
|
|
157
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
158
|
+
fs.mkdirSync(authDir, { recursive: true, mode: 0o700 });
|
|
159
|
+
// Only generate config if it doesn't exist (unified config serves all providers)
|
|
160
|
+
if (!fs.existsSync(configPath)) {
|
|
161
|
+
const configContent = generateUnifiedConfigContent(port);
|
|
162
|
+
fs.writeFileSync(configPath, configContent, { mode: 0o600 });
|
|
163
|
+
}
|
|
164
|
+
return configPath;
|
|
165
|
+
}
|
|
166
|
+
exports.generateConfig = generateConfig;
|
|
167
|
+
/**
|
|
168
|
+
* Check if config exists for provider
|
|
169
|
+
*/
|
|
170
|
+
function configExists() {
|
|
171
|
+
return fs.existsSync(getConfigPath());
|
|
172
|
+
}
|
|
173
|
+
exports.configExists = configExists;
|
|
174
|
+
/**
|
|
175
|
+
* Delete config file
|
|
176
|
+
*/
|
|
177
|
+
function deleteConfig() {
|
|
178
|
+
const configPath = getConfigPath();
|
|
179
|
+
if (fs.existsSync(configPath)) {
|
|
180
|
+
fs.unlinkSync(configPath);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.deleteConfig = deleteConfig;
|
|
184
|
+
/**
|
|
185
|
+
* Get path to user settings file for provider
|
|
186
|
+
* Example: ~/.ccs/gemini.settings.json
|
|
187
|
+
*/
|
|
188
|
+
function getProviderSettingsPath(provider) {
|
|
189
|
+
return path.join((0, config_manager_1.getCcsDir)(), `${provider}.settings.json`);
|
|
190
|
+
}
|
|
191
|
+
exports.getProviderSettingsPath = getProviderSettingsPath;
|
|
192
|
+
/**
|
|
193
|
+
* Get environment variables for Claude CLI (bundled defaults)
|
|
194
|
+
* Uses provider-specific endpoint (e.g., /api/provider/gemini) for explicit routing.
|
|
195
|
+
* This enables concurrent gemini/codex usage - each session routes to its provider via URL path.
|
|
196
|
+
*/
|
|
197
|
+
function getClaudeEnvVars(provider, port = exports.CLIPROXY_DEFAULT_PORT) {
|
|
198
|
+
const models = getModelMapping(provider);
|
|
199
|
+
return {
|
|
200
|
+
// Provider-specific endpoint - routes to correct provider via URL path
|
|
201
|
+
ANTHROPIC_BASE_URL: `http://127.0.0.1:${port}/api/provider/${provider}`,
|
|
202
|
+
ANTHROPIC_AUTH_TOKEN: CCS_INTERNAL_API_KEY,
|
|
203
|
+
ANTHROPIC_MODEL: models.claudeModel,
|
|
204
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opusModel || models.claudeModel,
|
|
205
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnetModel || models.claudeModel,
|
|
206
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haikuModel || models.claudeModel,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
exports.getClaudeEnvVars = getClaudeEnvVars;
|
|
210
|
+
/**
|
|
211
|
+
* Get effective environment variables for provider
|
|
212
|
+
*
|
|
213
|
+
* Priority order:
|
|
214
|
+
* 1. User settings file (~/.ccs/{provider}.settings.json) if exists
|
|
215
|
+
* 2. Bundled defaults from PROVIDER_CONFIGS
|
|
216
|
+
*
|
|
217
|
+
* This allows users to customize model mappings without code changes.
|
|
218
|
+
* User takes full responsibility for custom settings.
|
|
219
|
+
*/
|
|
220
|
+
function getEffectiveEnvVars(provider, port = exports.CLIPROXY_DEFAULT_PORT) {
|
|
221
|
+
const settingsPath = getProviderSettingsPath(provider);
|
|
222
|
+
// Check for user override file
|
|
223
|
+
if (fs.existsSync(settingsPath)) {
|
|
224
|
+
try {
|
|
225
|
+
const content = fs.readFileSync(settingsPath, 'utf-8');
|
|
226
|
+
const settings = JSON.parse(content);
|
|
227
|
+
if (settings.env && typeof settings.env === 'object') {
|
|
228
|
+
// User override found - use their settings
|
|
229
|
+
// Note: User is responsible for correctness
|
|
230
|
+
return settings.env;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// Invalid JSON or structure - fall through to defaults
|
|
235
|
+
// Silent fallback: don't spam errors for broken user files
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// No override or invalid - use bundled defaults
|
|
239
|
+
return getClaudeEnvVars(provider, port);
|
|
240
|
+
}
|
|
241
|
+
exports.getEffectiveEnvVars = getEffectiveEnvVars;
|
|
242
|
+
/**
|
|
243
|
+
* Copy bundled settings template to user directory if not exists
|
|
244
|
+
* Called during installation/first run
|
|
245
|
+
*/
|
|
246
|
+
function ensureProviderSettings(provider) {
|
|
247
|
+
const settingsPath = getProviderSettingsPath(provider);
|
|
248
|
+
// Only create if doesn't exist (preserve user edits)
|
|
249
|
+
if (fs.existsSync(settingsPath)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Generate default settings from PROVIDER_CONFIGS
|
|
253
|
+
const envVars = getClaudeEnvVars(provider);
|
|
254
|
+
const settings = { env: envVars };
|
|
255
|
+
// Ensure directory exists
|
|
256
|
+
fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
|
|
257
|
+
// Write with restricted permissions
|
|
258
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', {
|
|
259
|
+
mode: 0o600,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
exports.ensureProviderSettings = ensureProviderSettings;
|
|
263
|
+
//# sourceMappingURL=config-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../src/cliproxy/config-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIProxy Module Exports
|
|
3
|
+
* Central export point for CLIProxyAPI binary management and execution
|
|
4
|
+
*/
|
|
5
|
+
export type { PlatformInfo, SupportedOS, SupportedArch, ArchiveExtension, BinaryManagerConfig, BinaryInfo, DownloadProgress, ProgressCallback, ChecksumResult, DownloadResult, CLIProxyProvider, CLIProxyConfig, ExecutorConfig, ProviderConfig, ProviderModelMapping, } from './types';
|
|
6
|
+
export { detectPlatform, getDownloadUrl, getChecksumsUrl, getExecutableName, getArchiveBinaryName, isPlatformSupported, getPlatformDescription, CLIPROXY_VERSION, } from './platform-detector';
|
|
7
|
+
export { BinaryManager, ensureCLIProxyBinary, isCLIProxyInstalled, getCLIProxyPath, } from './binary-manager';
|
|
8
|
+
export { generateConfig, getClaudeEnvVars, getEffectiveEnvVars, getProviderSettingsPath, ensureProviderSettings, getProviderConfig, getModelMapping, getCliproxyDir, getProviderAuthDir, getAuthDir, getConfigPath, getBinDir, configExists, deleteConfig, CLIPROXY_DEFAULT_PORT, } from './config-generator';
|
|
9
|
+
export { loadBaseConfig, getModelMappingFromConfig, getEnvVarsFromConfig, clearConfigCache, } from './base-config-loader';
|
|
10
|
+
export { execClaudeWithCLIProxy, isPortAvailable, findAvailablePort } from './cliproxy-executor';
|
|
11
|
+
export type { AuthStatus } from './auth-handler';
|
|
12
|
+
export { isAuthenticated, getAuthStatus, getAllAuthStatus, clearAuth, triggerOAuth, ensureAuth, getOAuthConfig, getProviderTokenDir, displayAuthStatus, } from './auth-handler';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Module Exports
|
|
4
|
+
* Central export point for CLIProxyAPI binary management and execution
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.displayAuthStatus = exports.getProviderTokenDir = exports.getOAuthConfig = exports.ensureAuth = exports.triggerOAuth = exports.clearAuth = exports.getAllAuthStatus = exports.getAuthStatus = exports.isAuthenticated = exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = exports.clearConfigCache = exports.getEnvVarsFromConfig = exports.getModelMappingFromConfig = exports.loadBaseConfig = exports.CLIPROXY_DEFAULT_PORT = exports.deleteConfig = exports.configExists = exports.getBinDir = exports.getConfigPath = exports.getAuthDir = exports.getProviderAuthDir = exports.getCliproxyDir = exports.getModelMapping = exports.getProviderConfig = exports.ensureProviderSettings = exports.getProviderSettingsPath = exports.getEffectiveEnvVars = exports.getClaudeEnvVars = exports.generateConfig = exports.getCLIProxyPath = exports.isCLIProxyInstalled = exports.ensureCLIProxyBinary = exports.BinaryManager = exports.CLIPROXY_VERSION = exports.getPlatformDescription = exports.isPlatformSupported = exports.getArchiveBinaryName = exports.getExecutableName = exports.getChecksumsUrl = exports.getDownloadUrl = exports.detectPlatform = void 0;
|
|
8
|
+
// Platform detection
|
|
9
|
+
var platform_detector_1 = require("./platform-detector");
|
|
10
|
+
Object.defineProperty(exports, "detectPlatform", { enumerable: true, get: function () { return platform_detector_1.detectPlatform; } });
|
|
11
|
+
Object.defineProperty(exports, "getDownloadUrl", { enumerable: true, get: function () { return platform_detector_1.getDownloadUrl; } });
|
|
12
|
+
Object.defineProperty(exports, "getChecksumsUrl", { enumerable: true, get: function () { return platform_detector_1.getChecksumsUrl; } });
|
|
13
|
+
Object.defineProperty(exports, "getExecutableName", { enumerable: true, get: function () { return platform_detector_1.getExecutableName; } });
|
|
14
|
+
Object.defineProperty(exports, "getArchiveBinaryName", { enumerable: true, get: function () { return platform_detector_1.getArchiveBinaryName; } });
|
|
15
|
+
Object.defineProperty(exports, "isPlatformSupported", { enumerable: true, get: function () { return platform_detector_1.isPlatformSupported; } });
|
|
16
|
+
Object.defineProperty(exports, "getPlatformDescription", { enumerable: true, get: function () { return platform_detector_1.getPlatformDescription; } });
|
|
17
|
+
Object.defineProperty(exports, "CLIPROXY_VERSION", { enumerable: true, get: function () { return platform_detector_1.CLIPROXY_VERSION; } });
|
|
18
|
+
// Binary management
|
|
19
|
+
var binary_manager_1 = require("./binary-manager");
|
|
20
|
+
Object.defineProperty(exports, "BinaryManager", { enumerable: true, get: function () { return binary_manager_1.BinaryManager; } });
|
|
21
|
+
Object.defineProperty(exports, "ensureCLIProxyBinary", { enumerable: true, get: function () { return binary_manager_1.ensureCLIProxyBinary; } });
|
|
22
|
+
Object.defineProperty(exports, "isCLIProxyInstalled", { enumerable: true, get: function () { return binary_manager_1.isCLIProxyInstalled; } });
|
|
23
|
+
Object.defineProperty(exports, "getCLIProxyPath", { enumerable: true, get: function () { return binary_manager_1.getCLIProxyPath; } });
|
|
24
|
+
// Config generation
|
|
25
|
+
var config_generator_1 = require("./config-generator");
|
|
26
|
+
Object.defineProperty(exports, "generateConfig", { enumerable: true, get: function () { return config_generator_1.generateConfig; } });
|
|
27
|
+
Object.defineProperty(exports, "getClaudeEnvVars", { enumerable: true, get: function () { return config_generator_1.getClaudeEnvVars; } });
|
|
28
|
+
Object.defineProperty(exports, "getEffectiveEnvVars", { enumerable: true, get: function () { return config_generator_1.getEffectiveEnvVars; } });
|
|
29
|
+
Object.defineProperty(exports, "getProviderSettingsPath", { enumerable: true, get: function () { return config_generator_1.getProviderSettingsPath; } });
|
|
30
|
+
Object.defineProperty(exports, "ensureProviderSettings", { enumerable: true, get: function () { return config_generator_1.ensureProviderSettings; } });
|
|
31
|
+
Object.defineProperty(exports, "getProviderConfig", { enumerable: true, get: function () { return config_generator_1.getProviderConfig; } });
|
|
32
|
+
Object.defineProperty(exports, "getModelMapping", { enumerable: true, get: function () { return config_generator_1.getModelMapping; } });
|
|
33
|
+
Object.defineProperty(exports, "getCliproxyDir", { enumerable: true, get: function () { return config_generator_1.getCliproxyDir; } });
|
|
34
|
+
Object.defineProperty(exports, "getProviderAuthDir", { enumerable: true, get: function () { return config_generator_1.getProviderAuthDir; } });
|
|
35
|
+
Object.defineProperty(exports, "getAuthDir", { enumerable: true, get: function () { return config_generator_1.getAuthDir; } });
|
|
36
|
+
Object.defineProperty(exports, "getConfigPath", { enumerable: true, get: function () { return config_generator_1.getConfigPath; } });
|
|
37
|
+
Object.defineProperty(exports, "getBinDir", { enumerable: true, get: function () { return config_generator_1.getBinDir; } });
|
|
38
|
+
Object.defineProperty(exports, "configExists", { enumerable: true, get: function () { return config_generator_1.configExists; } });
|
|
39
|
+
Object.defineProperty(exports, "deleteConfig", { enumerable: true, get: function () { return config_generator_1.deleteConfig; } });
|
|
40
|
+
Object.defineProperty(exports, "CLIPROXY_DEFAULT_PORT", { enumerable: true, get: function () { return config_generator_1.CLIPROXY_DEFAULT_PORT; } });
|
|
41
|
+
// Base config loader (for reading config/base-*.settings.json)
|
|
42
|
+
var base_config_loader_1 = require("./base-config-loader");
|
|
43
|
+
Object.defineProperty(exports, "loadBaseConfig", { enumerable: true, get: function () { return base_config_loader_1.loadBaseConfig; } });
|
|
44
|
+
Object.defineProperty(exports, "getModelMappingFromConfig", { enumerable: true, get: function () { return base_config_loader_1.getModelMappingFromConfig; } });
|
|
45
|
+
Object.defineProperty(exports, "getEnvVarsFromConfig", { enumerable: true, get: function () { return base_config_loader_1.getEnvVarsFromConfig; } });
|
|
46
|
+
Object.defineProperty(exports, "clearConfigCache", { enumerable: true, get: function () { return base_config_loader_1.clearConfigCache; } });
|
|
47
|
+
// Executor
|
|
48
|
+
var cliproxy_executor_1 = require("./cliproxy-executor");
|
|
49
|
+
Object.defineProperty(exports, "execClaudeWithCLIProxy", { enumerable: true, get: function () { return cliproxy_executor_1.execClaudeWithCLIProxy; } });
|
|
50
|
+
Object.defineProperty(exports, "isPortAvailable", { enumerable: true, get: function () { return cliproxy_executor_1.isPortAvailable; } });
|
|
51
|
+
Object.defineProperty(exports, "findAvailablePort", { enumerable: true, get: function () { return cliproxy_executor_1.findAvailablePort; } });
|
|
52
|
+
var auth_handler_1 = require("./auth-handler");
|
|
53
|
+
Object.defineProperty(exports, "isAuthenticated", { enumerable: true, get: function () { return auth_handler_1.isAuthenticated; } });
|
|
54
|
+
Object.defineProperty(exports, "getAuthStatus", { enumerable: true, get: function () { return auth_handler_1.getAuthStatus; } });
|
|
55
|
+
Object.defineProperty(exports, "getAllAuthStatus", { enumerable: true, get: function () { return auth_handler_1.getAllAuthStatus; } });
|
|
56
|
+
Object.defineProperty(exports, "clearAuth", { enumerable: true, get: function () { return auth_handler_1.clearAuth; } });
|
|
57
|
+
Object.defineProperty(exports, "triggerOAuth", { enumerable: true, get: function () { return auth_handler_1.triggerOAuth; } });
|
|
58
|
+
Object.defineProperty(exports, "ensureAuth", { enumerable: true, get: function () { return auth_handler_1.ensureAuth; } });
|
|
59
|
+
Object.defineProperty(exports, "getOAuthConfig", { enumerable: true, get: function () { return auth_handler_1.getOAuthConfig; } });
|
|
60
|
+
Object.defineProperty(exports, "getProviderTokenDir", { enumerable: true, get: function () { return auth_handler_1.getProviderTokenDir; } });
|
|
61
|
+
Object.defineProperty(exports, "displayAuthStatus", { enumerable: true, get: function () { return auth_handler_1.displayAuthStatus; } });
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cliproxy/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqBH,qBAAqB;AACrB,yDAS6B;AAR3B,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AACd,oHAAA,eAAe,OAAA;AACf,sHAAA,iBAAiB,OAAA;AACjB,yHAAA,oBAAoB,OAAA;AACpB,wHAAA,mBAAmB,OAAA;AACnB,2HAAA,sBAAsB,OAAA;AACtB,qHAAA,gBAAgB,OAAA;AAGlB,oBAAoB;AACpB,mDAK0B;AAJxB,+GAAA,aAAa,OAAA;AACb,sHAAA,oBAAoB,OAAA;AACpB,qHAAA,mBAAmB,OAAA;AACnB,iHAAA,eAAe,OAAA;AAGjB,oBAAoB;AACpB,uDAgB4B;AAf1B,kHAAA,cAAc,OAAA;AACd,oHAAA,gBAAgB,OAAA;AAChB,uHAAA,mBAAmB,OAAA;AACnB,2HAAA,uBAAuB,OAAA;AACvB,0HAAA,sBAAsB,OAAA;AACtB,qHAAA,iBAAiB,OAAA;AACjB,mHAAA,eAAe,OAAA;AACf,kHAAA,cAAc,OAAA;AACd,sHAAA,kBAAkB,OAAA;AAClB,8GAAA,UAAU,OAAA;AACV,iHAAA,aAAa,OAAA;AACb,6GAAA,SAAS,OAAA;AACT,gHAAA,YAAY,OAAA;AACZ,gHAAA,YAAY,OAAA;AACZ,yHAAA,qBAAqB,OAAA;AAGvB,+DAA+D;AAC/D,2DAK8B;AAJ5B,oHAAA,cAAc,OAAA;AACd,+HAAA,yBAAyB,OAAA;AACzB,0HAAA,oBAAoB,OAAA;AACpB,sHAAA,gBAAgB,OAAA;AAGlB,WAAW;AACX,yDAAiG;AAAxF,2HAAA,sBAAsB,OAAA;AAAE,oHAAA,eAAe,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAInE,+CAUwB;AATtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AACV,8GAAA,cAAc,OAAA;AACd,mHAAA,mBAAmB,OAAA;AACnB,iHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Detector for CLIProxyAPI Binary Downloads
|
|
3
|
+
*
|
|
4
|
+
* Detects OS and architecture to determine correct binary asset.
|
|
5
|
+
* Supports 6 platforms: darwin/linux/windows x amd64/arm64
|
|
6
|
+
*/
|
|
7
|
+
import { PlatformInfo } from './types';
|
|
8
|
+
/** CLIProxyAPI version pinned for stability */
|
|
9
|
+
export declare const CLIPROXY_VERSION = "6.5.27";
|
|
10
|
+
/**
|
|
11
|
+
* Detect current platform and return binary info
|
|
12
|
+
* @throws Error if platform is unsupported
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectPlatform(): PlatformInfo;
|
|
15
|
+
/**
|
|
16
|
+
* Get executable name based on platform
|
|
17
|
+
* @returns Binary executable name (with .exe on Windows)
|
|
18
|
+
* Note: The actual binary inside the archive is named 'cli-proxy-api'
|
|
19
|
+
*/
|
|
20
|
+
export declare function getExecutableName(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get the name of the binary inside the archive
|
|
23
|
+
* @returns Binary name as it appears in the tar.gz/zip
|
|
24
|
+
*/
|
|
25
|
+
export declare function getArchiveBinaryName(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Get download URL for current platform
|
|
28
|
+
* @param version Optional version override (defaults to CLIPROXY_VERSION)
|
|
29
|
+
* @returns Full GitHub release download URL
|
|
30
|
+
*/
|
|
31
|
+
export declare function getDownloadUrl(version?: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get checksums.txt URL for version
|
|
34
|
+
* @param version Optional version override
|
|
35
|
+
* @returns Full URL to checksums.txt
|
|
36
|
+
*/
|
|
37
|
+
export declare function getChecksumsUrl(version?: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Check if platform is supported
|
|
40
|
+
* @returns true if current platform is supported
|
|
41
|
+
*/
|
|
42
|
+
export declare function isPlatformSupported(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Get human-readable platform description
|
|
45
|
+
* @returns Description string (e.g., "macOS arm64")
|
|
46
|
+
*/
|
|
47
|
+
export declare function getPlatformDescription(): string;
|
|
48
|
+
//# sourceMappingURL=platform-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../src/cliproxy/platform-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAgD,MAAM,SAAS,CAAC;AAErF,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAgBzC;;;GAGG;AACH,wBAAgB,cAAc,IAAI,YAAY,CA6B7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAS/C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Platform Detector for CLIProxyAPI Binary Downloads
|
|
4
|
+
*
|
|
5
|
+
* Detects OS and architecture to determine correct binary asset.
|
|
6
|
+
* Supports 6 platforms: darwin/linux/windows x amd64/arm64
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.getPlatformDescription = exports.isPlatformSupported = exports.getChecksumsUrl = exports.getDownloadUrl = exports.getArchiveBinaryName = exports.getExecutableName = exports.detectPlatform = exports.CLIPROXY_VERSION = void 0;
|
|
10
|
+
/** CLIProxyAPI version pinned for stability */
|
|
11
|
+
exports.CLIPROXY_VERSION = '6.5.27';
|
|
12
|
+
/**
|
|
13
|
+
* Platform mapping from Node.js values to CLIProxyAPI naming
|
|
14
|
+
*/
|
|
15
|
+
const OS_MAP = {
|
|
16
|
+
darwin: 'darwin',
|
|
17
|
+
linux: 'linux',
|
|
18
|
+
win32: 'windows',
|
|
19
|
+
};
|
|
20
|
+
const ARCH_MAP = {
|
|
21
|
+
x64: 'amd64',
|
|
22
|
+
arm64: 'arm64',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Detect current platform and return binary info
|
|
26
|
+
* @throws Error if platform is unsupported
|
|
27
|
+
*/
|
|
28
|
+
function detectPlatform() {
|
|
29
|
+
const nodePlatform = process.platform;
|
|
30
|
+
const nodeArch = process.arch;
|
|
31
|
+
const os = OS_MAP[nodePlatform];
|
|
32
|
+
const arch = ARCH_MAP[nodeArch];
|
|
33
|
+
if (!os) {
|
|
34
|
+
throw new Error(`Unsupported operating system: ${nodePlatform}\n` +
|
|
35
|
+
`Supported: macOS (darwin), Linux, Windows`);
|
|
36
|
+
}
|
|
37
|
+
if (!arch) {
|
|
38
|
+
throw new Error(`Unsupported CPU architecture: ${nodeArch}\n` + `Supported: x64 (amd64), arm64`);
|
|
39
|
+
}
|
|
40
|
+
const extension = os === 'windows' ? 'zip' : 'tar.gz';
|
|
41
|
+
const binaryName = `CLIProxyAPI_${exports.CLIPROXY_VERSION}_${os}_${arch}.${extension}`;
|
|
42
|
+
return {
|
|
43
|
+
os,
|
|
44
|
+
arch,
|
|
45
|
+
binaryName,
|
|
46
|
+
extension,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
exports.detectPlatform = detectPlatform;
|
|
50
|
+
/**
|
|
51
|
+
* Get executable name based on platform
|
|
52
|
+
* @returns Binary executable name (with .exe on Windows)
|
|
53
|
+
* Note: The actual binary inside the archive is named 'cli-proxy-api'
|
|
54
|
+
*/
|
|
55
|
+
function getExecutableName() {
|
|
56
|
+
const platform = detectPlatform();
|
|
57
|
+
return platform.os === 'windows' ? 'cli-proxy-api.exe' : 'cli-proxy-api';
|
|
58
|
+
}
|
|
59
|
+
exports.getExecutableName = getExecutableName;
|
|
60
|
+
/**
|
|
61
|
+
* Get the name of the binary inside the archive
|
|
62
|
+
* @returns Binary name as it appears in the tar.gz/zip
|
|
63
|
+
*/
|
|
64
|
+
function getArchiveBinaryName() {
|
|
65
|
+
const platform = detectPlatform();
|
|
66
|
+
return platform.os === 'windows' ? 'cli-proxy-api.exe' : 'cli-proxy-api';
|
|
67
|
+
}
|
|
68
|
+
exports.getArchiveBinaryName = getArchiveBinaryName;
|
|
69
|
+
/**
|
|
70
|
+
* Get download URL for current platform
|
|
71
|
+
* @param version Optional version override (defaults to CLIPROXY_VERSION)
|
|
72
|
+
* @returns Full GitHub release download URL
|
|
73
|
+
*/
|
|
74
|
+
function getDownloadUrl(version = exports.CLIPROXY_VERSION) {
|
|
75
|
+
const platform = detectPlatform();
|
|
76
|
+
const baseUrl = `https://github.com/router-for-me/CLIProxyAPI/releases/download/v${version}`;
|
|
77
|
+
return `${baseUrl}/${platform.binaryName}`;
|
|
78
|
+
}
|
|
79
|
+
exports.getDownloadUrl = getDownloadUrl;
|
|
80
|
+
/**
|
|
81
|
+
* Get checksums.txt URL for version
|
|
82
|
+
* @param version Optional version override
|
|
83
|
+
* @returns Full URL to checksums.txt
|
|
84
|
+
*/
|
|
85
|
+
function getChecksumsUrl(version = exports.CLIPROXY_VERSION) {
|
|
86
|
+
return `https://github.com/router-for-me/CLIProxyAPI/releases/download/v${version}/checksums.txt`;
|
|
87
|
+
}
|
|
88
|
+
exports.getChecksumsUrl = getChecksumsUrl;
|
|
89
|
+
/**
|
|
90
|
+
* Check if platform is supported
|
|
91
|
+
* @returns true if current platform is supported
|
|
92
|
+
*/
|
|
93
|
+
function isPlatformSupported() {
|
|
94
|
+
try {
|
|
95
|
+
detectPlatform();
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.isPlatformSupported = isPlatformSupported;
|
|
103
|
+
/**
|
|
104
|
+
* Get human-readable platform description
|
|
105
|
+
* @returns Description string (e.g., "macOS arm64")
|
|
106
|
+
*/
|
|
107
|
+
function getPlatformDescription() {
|
|
108
|
+
try {
|
|
109
|
+
const platform = detectPlatform();
|
|
110
|
+
const osName = platform.os === 'darwin' ? 'macOS' : platform.os === 'linux' ? 'Linux' : 'Windows';
|
|
111
|
+
return `${osName} ${platform.arch}`;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return `${process.platform} ${process.arch} (unsupported)`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.getPlatformDescription = getPlatformDescription;
|
|
118
|
+
//# sourceMappingURL=platform-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/cliproxy/platform-detector.ts"],"names":[],"mappings":"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"}
|