@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
package/dist/ccs.js
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* CCS (Claude Code Switch) - Entry Point
|
|
5
|
+
*
|
|
6
|
+
* Instant profile switching for Claude CLI.
|
|
7
|
+
* Supports multiple accounts, alternative models (GLM, Kimi),
|
|
8
|
+
* and cost-optimized delegation.
|
|
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
|
+
const child_process_1 = require("child_process");
|
|
35
|
+
const path = __importStar(require("path"));
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const claude_detector_1 = require("./utils/claude-detector");
|
|
38
|
+
const config_manager_1 = require("./utils/config-manager");
|
|
39
|
+
const error_manager_1 = require("./utils/error-manager");
|
|
40
|
+
const cliproxy_1 = require("./cliproxy");
|
|
41
|
+
// Import extracted command handlers
|
|
42
|
+
const version_command_1 = require("./commands/version-command");
|
|
43
|
+
const help_command_1 = require("./commands/help-command");
|
|
44
|
+
const install_command_1 = require("./commands/install-command");
|
|
45
|
+
const doctor_command_1 = require("./commands/doctor-command");
|
|
46
|
+
const sync_command_1 = require("./commands/sync-command");
|
|
47
|
+
const shell_completion_command_1 = require("./commands/shell-completion-command");
|
|
48
|
+
const update_command_1 = require("./commands/update-command");
|
|
49
|
+
// Import extracted utility functions
|
|
50
|
+
const shell_executor_1 = require("./utils/shell-executor");
|
|
51
|
+
/**
|
|
52
|
+
* Smart profile detection
|
|
53
|
+
*/
|
|
54
|
+
function detectProfile(args) {
|
|
55
|
+
if (args.length === 0 || args[0].startsWith('-')) {
|
|
56
|
+
// No args or first arg is a flag → use default profile
|
|
57
|
+
return { profile: 'default', remainingArgs: args };
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// First arg doesn't start with '-' → treat as profile name
|
|
61
|
+
return { profile: args[0], remainingArgs: args.slice(1) };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ========== GLMT Proxy Execution ==========
|
|
65
|
+
/**
|
|
66
|
+
* Execute Claude CLI with embedded proxy (for GLMT profile)
|
|
67
|
+
*/
|
|
68
|
+
async function execClaudeWithProxy(claudeCli, profileName, args) {
|
|
69
|
+
// 1. Read settings to get API key
|
|
70
|
+
const settingsPath = (0, config_manager_1.getSettingsPath)(profileName);
|
|
71
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
72
|
+
const apiKey = settings.env.ANTHROPIC_AUTH_TOKEN;
|
|
73
|
+
if (!apiKey || apiKey === 'YOUR_GLM_API_KEY_HERE') {
|
|
74
|
+
console.error('[X] GLMT profile requires Z.AI API key');
|
|
75
|
+
console.error(' Edit ~/.ccs/glmt.settings.json and set ANTHROPIC_AUTH_TOKEN');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
// Detect verbose flag
|
|
79
|
+
const verbose = args.includes('--verbose') || args.includes('-v');
|
|
80
|
+
// 2. Spawn embedded proxy with verbose flag
|
|
81
|
+
const proxyPath = path.join(__dirname, 'glmt', 'glmt-proxy.js');
|
|
82
|
+
const proxyArgs = verbose ? ['--verbose'] : [];
|
|
83
|
+
// Use process.execPath for Windows compatibility (CVE-2024-27980)
|
|
84
|
+
const proxy = (0, child_process_1.spawn)(process.execPath, [proxyPath, ...proxyArgs], {
|
|
85
|
+
stdio: ['ignore', 'pipe', verbose ? 'pipe' : 'inherit'],
|
|
86
|
+
});
|
|
87
|
+
// 3. Wait for proxy ready signal (with timeout)
|
|
88
|
+
const { ProgressIndicator } = await Promise.resolve().then(() => __importStar(require('./utils/progress-indicator')));
|
|
89
|
+
const spinner = new ProgressIndicator('Starting GLMT proxy');
|
|
90
|
+
spinner.start();
|
|
91
|
+
let port;
|
|
92
|
+
try {
|
|
93
|
+
port = await new Promise((resolve, reject) => {
|
|
94
|
+
const timeout = setTimeout(() => {
|
|
95
|
+
reject(new Error('Proxy startup timeout (5s)'));
|
|
96
|
+
}, 5000);
|
|
97
|
+
proxy.stdout?.on('data', (data) => {
|
|
98
|
+
const match = data.toString().match(/PROXY_READY:(\d+)/);
|
|
99
|
+
if (match) {
|
|
100
|
+
clearTimeout(timeout);
|
|
101
|
+
resolve(parseInt(match[1]));
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
proxy.on('error', (error) => {
|
|
105
|
+
clearTimeout(timeout);
|
|
106
|
+
reject(error);
|
|
107
|
+
});
|
|
108
|
+
proxy.on('exit', (code) => {
|
|
109
|
+
if (code !== 0 && code !== null) {
|
|
110
|
+
clearTimeout(timeout);
|
|
111
|
+
reject(new Error(`Proxy exited with code ${code}`));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
spinner.succeed(`GLMT proxy ready on port ${port}`);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const err = error;
|
|
119
|
+
spinner.fail('Failed to start GLMT proxy');
|
|
120
|
+
console.error('[X] Error:', err.message);
|
|
121
|
+
console.error('');
|
|
122
|
+
console.error('Possible causes:');
|
|
123
|
+
console.error(' 1. Port conflict (unlikely with random port)');
|
|
124
|
+
console.error(' 2. Node.js permission issue');
|
|
125
|
+
console.error(' 3. Firewall blocking localhost');
|
|
126
|
+
console.error('');
|
|
127
|
+
console.error('Workarounds:');
|
|
128
|
+
console.error(' - Use non-thinking mode: ccs glm "prompt"');
|
|
129
|
+
console.error(' - Enable verbose logging: ccs glmt --verbose "prompt"');
|
|
130
|
+
console.error(' - Check proxy logs in ~/.ccs/logs/ (if debug enabled)');
|
|
131
|
+
console.error('');
|
|
132
|
+
proxy.kill();
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
// 4. Spawn Claude CLI with proxy URL
|
|
136
|
+
const envVars = {
|
|
137
|
+
ANTHROPIC_BASE_URL: `http://127.0.0.1:${port}`,
|
|
138
|
+
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
139
|
+
ANTHROPIC_MODEL: 'glm-4.6',
|
|
140
|
+
};
|
|
141
|
+
const isWindows = process.platform === 'win32';
|
|
142
|
+
const needsShell = isWindows && /\.(cmd|bat|ps1)$/i.test(claudeCli);
|
|
143
|
+
const env = { ...process.env, ...envVars };
|
|
144
|
+
let claude;
|
|
145
|
+
if (needsShell) {
|
|
146
|
+
const cmdString = [claudeCli, ...args].map(shell_executor_1.escapeShellArg).join(' ');
|
|
147
|
+
claude = (0, child_process_1.spawn)(cmdString, {
|
|
148
|
+
stdio: 'inherit',
|
|
149
|
+
windowsHide: true,
|
|
150
|
+
shell: true,
|
|
151
|
+
env,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
claude = (0, child_process_1.spawn)(claudeCli, args, {
|
|
156
|
+
stdio: 'inherit',
|
|
157
|
+
windowsHide: true,
|
|
158
|
+
env,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// 5. Cleanup: kill proxy when Claude exits
|
|
162
|
+
claude.on('exit', (code, signal) => {
|
|
163
|
+
proxy.kill('SIGTERM');
|
|
164
|
+
if (signal)
|
|
165
|
+
process.kill(process.pid, signal);
|
|
166
|
+
else
|
|
167
|
+
process.exit(code || 0);
|
|
168
|
+
});
|
|
169
|
+
claude.on('error', (error) => {
|
|
170
|
+
console.error('[X] Claude CLI error:', error);
|
|
171
|
+
proxy.kill('SIGTERM');
|
|
172
|
+
process.exit(1);
|
|
173
|
+
});
|
|
174
|
+
// Also handle parent process termination
|
|
175
|
+
process.once('SIGTERM', () => {
|
|
176
|
+
proxy.kill('SIGTERM');
|
|
177
|
+
claude.kill('SIGTERM');
|
|
178
|
+
});
|
|
179
|
+
process.once('SIGINT', () => {
|
|
180
|
+
proxy.kill('SIGTERM');
|
|
181
|
+
claude.kill('SIGTERM');
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async function main() {
|
|
185
|
+
const args = process.argv.slice(2);
|
|
186
|
+
// Special case: version command (check BEFORE profile detection)
|
|
187
|
+
const firstArg = args[0];
|
|
188
|
+
if (firstArg === 'version' || firstArg === '--version' || firstArg === '-v') {
|
|
189
|
+
(0, version_command_1.handleVersionCommand)();
|
|
190
|
+
}
|
|
191
|
+
// Special case: help command
|
|
192
|
+
if (firstArg === '--help' || firstArg === '-h' || firstArg === 'help') {
|
|
193
|
+
(0, help_command_1.handleHelpCommand)();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Special case: install command
|
|
197
|
+
if (firstArg === '--install') {
|
|
198
|
+
(0, install_command_1.handleInstallCommand)();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Special case: uninstall command
|
|
202
|
+
if (firstArg === '--uninstall') {
|
|
203
|
+
(0, install_command_1.handleUninstallCommand)();
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
// Special case: shell completion installer
|
|
207
|
+
if (firstArg === '--shell-completion' || firstArg === '-sc') {
|
|
208
|
+
await (0, shell_completion_command_1.handleShellCompletionCommand)(args.slice(1));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// Special case: doctor command
|
|
212
|
+
if (firstArg === 'doctor' || firstArg === '--doctor') {
|
|
213
|
+
await (0, doctor_command_1.handleDoctorCommand)();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Special case: sync command
|
|
217
|
+
if (firstArg === 'sync' || firstArg === '--sync') {
|
|
218
|
+
await (0, sync_command_1.handleSyncCommand)();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Special case: update command
|
|
222
|
+
if (firstArg === 'update' || firstArg === '--update') {
|
|
223
|
+
await (0, update_command_1.handleUpdateCommand)();
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Special case: auth command
|
|
227
|
+
if (firstArg === 'auth') {
|
|
228
|
+
const AuthCommandsModule = await Promise.resolve().then(() => __importStar(require('./auth/auth-commands')));
|
|
229
|
+
const AuthCommands = AuthCommandsModule.default;
|
|
230
|
+
const authCommands = new AuthCommands();
|
|
231
|
+
await authCommands.route(args.slice(1));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Special case: headless delegation (-p flag)
|
|
235
|
+
if (args.includes('-p') || args.includes('--prompt')) {
|
|
236
|
+
const { DelegationHandler } = await Promise.resolve().then(() => __importStar(require('./delegation/delegation-handler')));
|
|
237
|
+
const handler = new DelegationHandler();
|
|
238
|
+
await handler.route(args);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// Auto-recovery for missing configuration
|
|
242
|
+
const RecoveryManagerModule = await Promise.resolve().then(() => __importStar(require('./management/recovery-manager')));
|
|
243
|
+
const RecoveryManager = RecoveryManagerModule.default;
|
|
244
|
+
const recovery = new RecoveryManager();
|
|
245
|
+
const recovered = recovery.recoverAll();
|
|
246
|
+
if (recovered) {
|
|
247
|
+
recovery.showRecoveryHints();
|
|
248
|
+
}
|
|
249
|
+
// Detect profile
|
|
250
|
+
const { profile, remainingArgs } = detectProfile(args);
|
|
251
|
+
// Detect Claude CLI first (needed for all paths)
|
|
252
|
+
const claudeCli = (0, claude_detector_1.detectClaudeCli)();
|
|
253
|
+
if (!claudeCli) {
|
|
254
|
+
error_manager_1.ErrorManager.showClaudeNotFound();
|
|
255
|
+
process.exit(1);
|
|
256
|
+
}
|
|
257
|
+
// Use ProfileDetector to determine profile type
|
|
258
|
+
const ProfileDetectorModule = await Promise.resolve().then(() => __importStar(require('./auth/profile-detector')));
|
|
259
|
+
const ProfileDetector = ProfileDetectorModule.default;
|
|
260
|
+
const InstanceManagerModule = await Promise.resolve().then(() => __importStar(require('./management/instance-manager')));
|
|
261
|
+
const InstanceManager = InstanceManagerModule.default;
|
|
262
|
+
const ProfileRegistryModule = await Promise.resolve().then(() => __importStar(require('./auth/profile-registry')));
|
|
263
|
+
const ProfileRegistry = ProfileRegistryModule.default;
|
|
264
|
+
const detector = new ProfileDetector();
|
|
265
|
+
try {
|
|
266
|
+
const profileInfo = detector.detectProfileType(profile);
|
|
267
|
+
if (profileInfo.type === 'cliproxy') {
|
|
268
|
+
// CLIPROXY FLOW: OAuth-based profiles (gemini, codex, agy)
|
|
269
|
+
await (0, cliproxy_1.execClaudeWithCLIProxy)(claudeCli, profileInfo.name, remainingArgs);
|
|
270
|
+
}
|
|
271
|
+
else if (profileInfo.type === 'settings') {
|
|
272
|
+
// Check if this is GLMT profile (requires proxy)
|
|
273
|
+
if (profileInfo.name === 'glmt') {
|
|
274
|
+
// GLMT FLOW: Settings-based with embedded proxy for thinking support
|
|
275
|
+
await execClaudeWithProxy(claudeCli, profileInfo.name, remainingArgs);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// EXISTING FLOW: Settings-based profile (glm, kimi)
|
|
279
|
+
// Use --settings flag (backward compatible)
|
|
280
|
+
const expandedSettingsPath = (0, config_manager_1.getSettingsPath)(profileInfo.name);
|
|
281
|
+
(0, shell_executor_1.execClaude)(claudeCli, ['--settings', expandedSettingsPath, ...remainingArgs]);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else if (profileInfo.type === 'account') {
|
|
285
|
+
// NEW FLOW: Account-based profile (work, personal)
|
|
286
|
+
// All platforms: Use instance isolation with CLAUDE_CONFIG_DIR
|
|
287
|
+
const registry = new ProfileRegistry();
|
|
288
|
+
const instanceMgr = new InstanceManager();
|
|
289
|
+
// Ensure instance exists (lazy init if needed)
|
|
290
|
+
const instancePath = instanceMgr.ensureInstance(profileInfo.name);
|
|
291
|
+
// Update last_used timestamp
|
|
292
|
+
registry.touchProfile(profileInfo.name);
|
|
293
|
+
// Execute Claude with instance isolation
|
|
294
|
+
const envVars = { CLAUDE_CONFIG_DIR: instancePath };
|
|
295
|
+
(0, shell_executor_1.execClaude)(claudeCli, remainingArgs, envVars);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
// DEFAULT: No profile configured, use Claude's own defaults
|
|
299
|
+
(0, shell_executor_1.execClaude)(claudeCli, remainingArgs);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
const err = error;
|
|
304
|
+
// Check if this is a profile not found error with suggestions
|
|
305
|
+
if (err.profileName && err.availableProfiles !== undefined) {
|
|
306
|
+
const allProfiles = err.availableProfiles.split('\n');
|
|
307
|
+
error_manager_1.ErrorManager.showProfileNotFound(err.profileName, allProfiles, err.suggestions);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
console.error(`[X] ${err.message}`);
|
|
311
|
+
}
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Run main
|
|
316
|
+
main().catch((error) => {
|
|
317
|
+
console.error('Fatal error:', error.message);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
});
|
|
320
|
+
//# sourceMappingURL=ccs.js.map
|
package/dist/ccs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ccs.js","sourceRoot":"","sources":["../src/ccs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Handler for CLIProxyAPI
|
|
3
|
+
*
|
|
4
|
+
* Manages OAuth authentication for CLIProxy providers (Gemini, Codex, Antigravity).
|
|
5
|
+
* CLIProxyAPI handles OAuth internally - we just need to:
|
|
6
|
+
* 1. Check if auth exists (token files in CCS auth directory)
|
|
7
|
+
* 2. Trigger OAuth flow by spawning binary with auth flag
|
|
8
|
+
* 3. Auto-detect headless environments (SSH, no DISPLAY)
|
|
9
|
+
* 4. Use -no-browser flag for headless, display OAuth URL for manual auth
|
|
10
|
+
*
|
|
11
|
+
* Token storage: ~/.ccs/cliproxy/auth/<provider>/
|
|
12
|
+
* Each provider has its own directory to avoid conflicts.
|
|
13
|
+
*/
|
|
14
|
+
import { CLIProxyProvider } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* Auth status for a provider
|
|
17
|
+
*/
|
|
18
|
+
export interface AuthStatus {
|
|
19
|
+
/** Provider name */
|
|
20
|
+
provider: CLIProxyProvider;
|
|
21
|
+
/** Whether authentication exists */
|
|
22
|
+
authenticated: boolean;
|
|
23
|
+
/** Path to token directory */
|
|
24
|
+
tokenDir: string;
|
|
25
|
+
/** Token file paths found */
|
|
26
|
+
tokenFiles: string[];
|
|
27
|
+
/** When last authenticated (if known) */
|
|
28
|
+
lastAuth?: Date;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* OAuth config for each provider
|
|
32
|
+
*/
|
|
33
|
+
interface ProviderOAuthConfig {
|
|
34
|
+
/** Provider identifier */
|
|
35
|
+
provider: CLIProxyProvider;
|
|
36
|
+
/** Display name */
|
|
37
|
+
displayName: string;
|
|
38
|
+
/** OAuth authorization URL (for manual flow) */
|
|
39
|
+
authUrl: string;
|
|
40
|
+
/** Scopes required */
|
|
41
|
+
scopes: string[];
|
|
42
|
+
/** CLI flag for auth */
|
|
43
|
+
authFlag: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get OAuth config for provider
|
|
47
|
+
*/
|
|
48
|
+
export declare function getOAuthConfig(provider: CLIProxyProvider): ProviderOAuthConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Get token directory for provider
|
|
51
|
+
*/
|
|
52
|
+
export declare function getProviderTokenDir(provider: CLIProxyProvider): string;
|
|
53
|
+
/**
|
|
54
|
+
* Check if provider has valid authentication
|
|
55
|
+
* CLIProxyAPI stores OAuth tokens as JSON files in the auth directory.
|
|
56
|
+
* Detection strategy:
|
|
57
|
+
* 1. First check by filename prefix (fast path)
|
|
58
|
+
* 2. If no match, check JSON content for "type" field (Gemini uses {email}-{projectID}.json without prefix)
|
|
59
|
+
*/
|
|
60
|
+
export declare function isAuthenticated(provider: CLIProxyProvider): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get detailed auth status for provider
|
|
63
|
+
* Uses same detection strategy as isAuthenticated: prefix first, then content
|
|
64
|
+
*/
|
|
65
|
+
export declare function getAuthStatus(provider: CLIProxyProvider): AuthStatus;
|
|
66
|
+
/**
|
|
67
|
+
* Get auth status for all providers
|
|
68
|
+
*/
|
|
69
|
+
export declare function getAllAuthStatus(): AuthStatus[];
|
|
70
|
+
/**
|
|
71
|
+
* Clear authentication for provider
|
|
72
|
+
*/
|
|
73
|
+
export declare function clearAuth(provider: CLIProxyProvider): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Trigger OAuth flow for provider
|
|
76
|
+
* Auto-detects headless environment and uses -no-browser flag accordingly
|
|
77
|
+
*/
|
|
78
|
+
export declare function triggerOAuth(provider: CLIProxyProvider, options?: {
|
|
79
|
+
verbose?: boolean;
|
|
80
|
+
headless?: boolean;
|
|
81
|
+
}): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Ensure provider is authenticated
|
|
84
|
+
* Triggers OAuth flow if not authenticated
|
|
85
|
+
*/
|
|
86
|
+
export declare function ensureAuth(provider: CLIProxyProvider, options?: {
|
|
87
|
+
verbose?: boolean;
|
|
88
|
+
headless?: boolean;
|
|
89
|
+
}): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Display auth status for all providers
|
|
92
|
+
*/
|
|
93
|
+
export declare function displayAuthStatus(): void;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=auth-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-handler.d.ts","sourceRoot":"","sources":["../../src/cliproxy/auth-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAwB3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,CAM9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEtE;AAuCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAkCnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,UAAU,CA8CpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,EAAE,CAG/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAiB7D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,OAAO,CAAC,OAAO,CAAC,CA4JlB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAkBxC"}
|