@tuannvm/ccodex 0.1.1 → 0.1.9
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 +35 -0
- package/dist/claude.d.ts +5 -1
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +130 -37
- package/dist/claude.js.map +1 -1
- package/dist/cli.js +130 -6
- package/dist/cli.js.map +1 -1
- package/dist/proxy.d.ts +2 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +318 -42
- package/dist/proxy.js.map +1 -1
- package/dist/status.js +4 -4
- package/dist/status.js.map +1 -1
- package/dist/utils.d.ts +11 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +51 -19
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,6 +45,41 @@ Every time you run `ccodex`, it:
|
|
|
45
45
|
|
|
46
46
|
This makes it "just work" without manual setup steps.
|
|
47
47
|
|
|
48
|
+
## Production Readiness (v0.1.8)
|
|
49
|
+
|
|
50
|
+
`ccodex` v0.1.8 is production-ready for:
|
|
51
|
+
- ✅ **macOS** (arm64, x64)
|
|
52
|
+
- ✅ **Linux** (arm64, x64)
|
|
53
|
+
|
|
54
|
+
### Windows Status (Known Limitations)
|
|
55
|
+
|
|
56
|
+
Windows support is currently partial and is not yet production-ready.
|
|
57
|
+
|
|
58
|
+
Current Windows limitations:
|
|
59
|
+
- `CLIProxyAPI` auto-install is not fully automated; manual proxy setup is required.
|
|
60
|
+
- Shell/profile integration differs across `PowerShell`, `Windows PowerShell`, and `cmd`, and may need manual adjustment.
|
|
61
|
+
- Path and wrapper differences (`.cmd`/`.exe`) are handled in detection, but end-to-end setup remains less reliable than macOS/Linux.
|
|
62
|
+
|
|
63
|
+
Recommended Windows flow for now:
|
|
64
|
+
1. Install Claude Code CLI manually and verify `claude` is on `PATH`.
|
|
65
|
+
2. Install and run proxy components manually.
|
|
66
|
+
3. Use `ccodex --status` to verify runtime before interactive use.
|
|
67
|
+
|
|
68
|
+
For team rollouts, treat Windows as "best effort" until full installer parity lands.
|
|
69
|
+
|
|
70
|
+
### Security Features
|
|
71
|
+
|
|
72
|
+
- **Allowlist environment passing**: Only essential environment variables are passed to Claude subprocess (PATH, HOME, TMP, etc.)
|
|
73
|
+
- **Mandatory checksum verification**: Downloaded binaries are verified against SHA-256 checksums before installation
|
|
74
|
+
- **Fail-closed policy**: Installation fails hard if checksums cannot be verified
|
|
75
|
+
- **No API key leakage**: All Anthropic/OpenAI variables are explicitly excluded from subprocess environment
|
|
76
|
+
|
|
77
|
+
### Known Limitations
|
|
78
|
+
|
|
79
|
+
- **Checksum trust model**: Binary and checksum are both fetched from the same GitHub release. If the release account is compromised, both could be malicious. Future versions may add signature verification.
|
|
80
|
+
- **Concurrency**: No install lock file; concurrent installations may race (low frequency issue).
|
|
81
|
+
- **Platform support**: Only arm64 and x64 architectures are supported.
|
|
82
|
+
|
|
48
83
|
## Model Mapping
|
|
49
84
|
|
|
50
85
|
| Claude Tier | GPT Model |
|
package/dist/claude.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Detect Claude Code installation
|
|
3
|
+
* Checks multiple sources in priority order:
|
|
4
|
+
* 1. Process-local path (fast path for current process)
|
|
5
|
+
* 2. Persistent local fallback path (for previously-installed local CLI)
|
|
6
|
+
* 3. System PATH (for globally-installed CLI)
|
|
3
7
|
*/
|
|
4
8
|
export declare function detectClaudeCommand(): Promise<{
|
|
5
9
|
cmd: string | null;
|
|
6
10
|
path: string | null;
|
|
7
11
|
}>;
|
|
8
12
|
/**
|
|
9
|
-
* Install Claude Code via npm
|
|
13
|
+
* Install Claude Code via npm with fallback to local prefix
|
|
10
14
|
*/
|
|
11
15
|
export declare function installClaudeCode(): Promise<void>;
|
|
12
16
|
/**
|
package/dist/claude.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAoBhG;AAoBD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCvD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoI7D"}
|
package/dist/claude.js
CHANGED
|
@@ -1,25 +1,72 @@
|
|
|
1
1
|
import spawnCmd from 'cross-spawn';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
-
import {
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { hasCommand, getCommandPath, ensureDir, getUid, fileExists } from './utils.js';
|
|
4
5
|
import { startProxy, checkAuthConfigured, launchLogin, waitForAuth } from './proxy.js';
|
|
6
|
+
// Track locally installed Claude CLI path for this process
|
|
7
|
+
let installedClaudePath = null;
|
|
8
|
+
/**
|
|
9
|
+
* Get the deterministic persistent path for local Claude CLI installation
|
|
10
|
+
* This path is used across process invocations to persistently discover
|
|
11
|
+
* locally-installed Claude CLI when global install fails
|
|
12
|
+
* Handles platform differences (Unix vs Windows)
|
|
13
|
+
*/
|
|
14
|
+
function getPersistentLocalClaudePath() {
|
|
15
|
+
const home = homedir();
|
|
16
|
+
if (process.platform === 'win32') {
|
|
17
|
+
// Windows: npm installs to AppData/local/prefix, with .cmd wrappers
|
|
18
|
+
// Try claude.cmd first (npm wrapper), then claude.exe (actual binary)
|
|
19
|
+
const localPrefix = join(home, 'AppData', 'Local', 'ccodex', 'npm');
|
|
20
|
+
return join(localPrefix, 'node_modules', '.bin', 'claude.cmd');
|
|
21
|
+
}
|
|
22
|
+
// Unix/macOS: ~/.local/ccodex/npm/node_modules/.bin/claude
|
|
23
|
+
return join(home, '.local', 'ccodex', 'npm', 'node_modules', '.bin', 'claude');
|
|
24
|
+
}
|
|
5
25
|
/**
|
|
6
26
|
* Detect Claude Code installation
|
|
27
|
+
* Checks multiple sources in priority order:
|
|
28
|
+
* 1. Process-local path (fast path for current process)
|
|
29
|
+
* 2. Persistent local fallback path (for previously-installed local CLI)
|
|
30
|
+
* 3. System PATH (for globally-installed CLI)
|
|
7
31
|
*/
|
|
8
32
|
export async function detectClaudeCommand() {
|
|
33
|
+
// 1. Prefer locally installed binary from this process (fast path)
|
|
34
|
+
if (installedClaudePath && fileExists(installedClaudePath)) {
|
|
35
|
+
return { cmd: installedClaudePath, path: installedClaudePath };
|
|
36
|
+
}
|
|
37
|
+
// 2. Check persistent local fallback path (for previously-installed CLI)
|
|
38
|
+
const persistentLocal = getPersistentLocalClaudePath();
|
|
39
|
+
if (fileExists(persistentLocal)) {
|
|
40
|
+
// Update process-local cache for faster subsequent checks
|
|
41
|
+
installedClaudePath = persistentLocal;
|
|
42
|
+
return { cmd: persistentLocal, path: persistentLocal };
|
|
43
|
+
}
|
|
44
|
+
// 3. Check system PATH for global installation
|
|
9
45
|
if (await hasCommand('claude')) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const path = await execCommand('which', ['claude']);
|
|
13
|
-
return { cmd: 'claude', path };
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return { cmd: 'claude', path: null };
|
|
17
|
-
}
|
|
46
|
+
const resolved = await getCommandPath('claude');
|
|
47
|
+
return { cmd: 'claude', path: resolved };
|
|
18
48
|
}
|
|
19
49
|
return { cmd: null, path: null };
|
|
20
50
|
}
|
|
21
51
|
/**
|
|
22
|
-
*
|
|
52
|
+
* Helper to run npm install and capture stderr
|
|
53
|
+
*/
|
|
54
|
+
async function runNpmInstall(args) {
|
|
55
|
+
const spawn = (await import('cross-spawn')).default;
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const child = spawn('npm', args, { stdio: ['ignore', 'inherit', 'pipe'] });
|
|
58
|
+
let stderr = '';
|
|
59
|
+
child.stderr?.on('data', (d) => {
|
|
60
|
+
const s = d.toString();
|
|
61
|
+
stderr += s;
|
|
62
|
+
process.stderr.write(s);
|
|
63
|
+
});
|
|
64
|
+
child.on('error', reject);
|
|
65
|
+
child.on('close', code => resolve({ ok: code === 0, stderr }));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Install Claude Code via npm with fallback to local prefix
|
|
23
70
|
*/
|
|
24
71
|
export async function installClaudeCode() {
|
|
25
72
|
// Check if npm is available
|
|
@@ -27,30 +74,46 @@ export async function installClaudeCode() {
|
|
|
27
74
|
throw new Error('npm not found. Install Node.js with npm first.');
|
|
28
75
|
}
|
|
29
76
|
console.log('Installing Claude Code CLI via npm...');
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
77
|
+
// Try global install first
|
|
78
|
+
const global = await runNpmInstall(['install', '-g', '@anthropic-ai/claude-code']);
|
|
79
|
+
if (global.ok) {
|
|
80
|
+
console.log('Claude Code CLI installed successfully via npm global');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Check if it was a permission error
|
|
84
|
+
const permissionDenied = /EACCES|permission denied/i.test(global.stderr);
|
|
85
|
+
if (!permissionDenied) {
|
|
86
|
+
throw new Error('Failed to install Claude Code CLI');
|
|
87
|
+
}
|
|
88
|
+
// Fallback to local install
|
|
89
|
+
// Use platform-specific local prefix path
|
|
90
|
+
let localPrefix;
|
|
91
|
+
if (process.platform === 'win32') {
|
|
92
|
+
localPrefix = join(homedir(), 'AppData', 'Local', 'ccodex', 'npm');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
localPrefix = join(homedir(), '.local', 'ccodex', 'npm');
|
|
96
|
+
}
|
|
97
|
+
console.log(`Global install denied. Falling back to local prefix: ${localPrefix}`);
|
|
98
|
+
const local = await runNpmInstall(['install', '--prefix', localPrefix, '@anthropic-ai/claude-code']);
|
|
99
|
+
if (!local.ok) {
|
|
100
|
+
throw new Error('Failed to install Claude Code CLI (global + local fallback both failed)');
|
|
101
|
+
}
|
|
102
|
+
// Store the installed path using the persistent path function
|
|
103
|
+
installedClaudePath = getPersistentLocalClaudePath();
|
|
104
|
+
console.log(`Claude Code CLI installed locally: ${installedClaudePath}`);
|
|
46
105
|
}
|
|
47
106
|
/**
|
|
48
107
|
* Run Claude Code CLI with proxy environment
|
|
49
108
|
*/
|
|
50
109
|
export async function runClaude(args) {
|
|
51
|
-
|
|
110
|
+
// Detect Claude CLI using comprehensive detection (process-local, persistent local, system PATH)
|
|
111
|
+
const claudeCmd = await detectClaudeCommand();
|
|
112
|
+
if (!claudeCmd.cmd) {
|
|
52
113
|
throw new Error('claude CLI not found in PATH\nInstall Claude Code CLI first, then rerun: npx -y @tuannvm/ccodex');
|
|
53
114
|
}
|
|
115
|
+
// Use detected command (absolute path or command name)
|
|
116
|
+
const claudeExe = claudeCmd.cmd;
|
|
54
117
|
// Ensure proxy is running
|
|
55
118
|
await startProxy();
|
|
56
119
|
// Check auth, launch login if needed
|
|
@@ -75,15 +138,45 @@ export async function runClaude(args) {
|
|
|
75
138
|
const { homedir } = await import('os');
|
|
76
139
|
const userHome = homedir();
|
|
77
140
|
// Environment for Claude with proxy
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
141
|
+
// Minimal allowlist for subprocess environment.
|
|
142
|
+
// Default-deny: only pass values required for process execution and terminal UX.
|
|
143
|
+
const allowedEnvKeys = new Set([
|
|
144
|
+
'PATH',
|
|
145
|
+
'HOME',
|
|
146
|
+
'USERPROFILE',
|
|
147
|
+
'SYSTEMROOT',
|
|
148
|
+
'WINDIR',
|
|
149
|
+
'COMSPEC',
|
|
150
|
+
'PATHEXT',
|
|
151
|
+
'TMPDIR',
|
|
152
|
+
'TMP',
|
|
153
|
+
'TEMP',
|
|
154
|
+
'LANG',
|
|
155
|
+
'LC_ALL',
|
|
156
|
+
'LC_CTYPE',
|
|
157
|
+
'TERM',
|
|
158
|
+
'COLORTERM',
|
|
159
|
+
'NO_COLOR',
|
|
160
|
+
'FORCE_COLOR',
|
|
161
|
+
'CI',
|
|
162
|
+
'SHELL',
|
|
163
|
+
'PWD',
|
|
164
|
+
'OLDPWD',
|
|
165
|
+
'XDG_CONFIG_HOME',
|
|
166
|
+
'XDG_CACHE_HOME',
|
|
167
|
+
'XDG_DATA_HOME',
|
|
168
|
+
]);
|
|
169
|
+
const env = {};
|
|
170
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
171
|
+
if (value === undefined)
|
|
172
|
+
continue;
|
|
173
|
+
// On Windows env keys are case-insensitive; normalize for allowlist matching.
|
|
174
|
+
const normalized = process.platform === 'win32' ? key.toUpperCase() : key;
|
|
175
|
+
const allowed = allowedEnvKeys.has(normalized);
|
|
176
|
+
if (allowed) {
|
|
177
|
+
env[key] = value;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
87
180
|
// Set proxy config - dummy token is replaced by CLIProxyAPI's OAuth credentials
|
|
88
181
|
// The proxy handles ChatGPT authentication, this is just a format placeholder
|
|
89
182
|
env.ANTHROPIC_AUTH_TOKEN = 'sk-dummy';
|
|
@@ -108,7 +201,7 @@ export async function runClaude(args) {
|
|
|
108
201
|
env.DISABLE_ERROR_REPORTING = '1';
|
|
109
202
|
env.CLAUDE_CONFIG_DIR = join(userHome, '.claude-openai');
|
|
110
203
|
// Spawn Claude with modified environment
|
|
111
|
-
const child = spawnCmd(
|
|
204
|
+
const child = spawnCmd(claudeExe, args, {
|
|
112
205
|
stdio: 'inherit',
|
|
113
206
|
env,
|
|
114
207
|
});
|
package/dist/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -2,9 +2,88 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { detectProxyCommand, installProxyApi, startProxy, launchLogin, waitForAuth, checkAuthConfigured } from './proxy.js';
|
|
5
|
-
import { configureShellIntegration } from './aliases.js';
|
|
5
|
+
import { configureShellIntegration, isShellIntegrationConfigured } from './aliases.js';
|
|
6
6
|
import { printStatus, readyCheck } from './status.js';
|
|
7
7
|
import { runClaude, detectClaudeCommand, installClaudeCode } from './claude.js';
|
|
8
|
+
/**
|
|
9
|
+
* Show proxy and auth diagnostic information
|
|
10
|
+
*/
|
|
11
|
+
async function showProxyDiagnostics() {
|
|
12
|
+
const { isProxyRunning, checkAuthConfigured, detectProxyCommand } = await import('./proxy.js');
|
|
13
|
+
console.log('');
|
|
14
|
+
console.log(chalk.bold('Proxy & Auth Diagnostics'));
|
|
15
|
+
console.log('');
|
|
16
|
+
// Check proxy command
|
|
17
|
+
const proxyCmd = await detectProxyCommand();
|
|
18
|
+
if (proxyCmd.cmd) {
|
|
19
|
+
console.log(chalk.green(`✓ Proxy command found:`), proxyCmd.cmd);
|
|
20
|
+
if (proxyCmd.path) {
|
|
21
|
+
console.log(chalk.gray(` Path: ${proxyCmd.path}`));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(chalk.red('✗ Proxy command NOT found'));
|
|
26
|
+
}
|
|
27
|
+
// Check if proxy is running
|
|
28
|
+
const proxyRunning = await isProxyRunning();
|
|
29
|
+
if (proxyRunning) {
|
|
30
|
+
console.log(chalk.green('✓ Proxy is running'), chalk.gray('(127.0.0.1:8317)'));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log(chalk.red('✗ Proxy is NOT running'));
|
|
34
|
+
}
|
|
35
|
+
// Check auth status
|
|
36
|
+
const auth = await checkAuthConfigured();
|
|
37
|
+
console.log('');
|
|
38
|
+
if (auth.hasModels) {
|
|
39
|
+
console.log(chalk.green('✓ Auth: Models accessible (proxy has valid credentials)'));
|
|
40
|
+
}
|
|
41
|
+
else if (auth.hasAuthEntries) {
|
|
42
|
+
console.log(chalk.yellow('⚠ Auth: Entries exist but models not accessible'));
|
|
43
|
+
}
|
|
44
|
+
else if (auth.hasAuthFiles) {
|
|
45
|
+
console.log(chalk.yellow('⚠ Auth: Files exist but not loaded'));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(chalk.red('✗ Auth: No credentials found'));
|
|
49
|
+
}
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(chalk.gray('If you see errors above, try: npx -y @tuannvm/ccodex --login'));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Preflight check - validate platform and capabilities before main operations
|
|
55
|
+
* Only runs for non-status commands to allow read-only diagnostics anywhere
|
|
56
|
+
*/
|
|
57
|
+
function preflightOrThrow() {
|
|
58
|
+
const platform = process.platform;
|
|
59
|
+
const arch = process.arch;
|
|
60
|
+
// Check Node.js version
|
|
61
|
+
const nodeMajorVersion = Number(process.versions.node.split('.')[0]);
|
|
62
|
+
if (nodeMajorVersion < 18) {
|
|
63
|
+
throw new Error(`Node.js ${process.versions.node} detected.\n` +
|
|
64
|
+
`Please use Node.js >= 18. You have ${process.versions.node}.`);
|
|
65
|
+
}
|
|
66
|
+
// Check OS support
|
|
67
|
+
const supportedPlatforms = ['darwin', 'linux', 'win32'];
|
|
68
|
+
if (!supportedPlatforms.includes(platform)) {
|
|
69
|
+
throw new Error(`Unsupported OS: ${platform}\n` +
|
|
70
|
+
`Supported platforms: ${supportedPlatforms.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
// Check architecture for proxy auto-install (Unix/Linux only)
|
|
73
|
+
if (platform === 'darwin' || platform === 'linux') {
|
|
74
|
+
const supportedArches = ['arm64', 'x64'];
|
|
75
|
+
if (!supportedArches.includes(arch)) {
|
|
76
|
+
throw new Error(`Unsupported architecture for CLIProxyAPI auto-install: ${arch}\n` +
|
|
77
|
+
`Supported architectures: ${supportedArches.join(', ')}\n` +
|
|
78
|
+
`CLIProxyAPI must be installed manually for your architecture.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Windows warning
|
|
82
|
+
if (platform === 'win32') {
|
|
83
|
+
console.log(chalk.yellow('Windows detected: CLIProxyAPI requires manual installation.\n' +
|
|
84
|
+
'Install from: https://github.com/router-for-me/CLIProxyAPI/releases'));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
8
87
|
/**
|
|
9
88
|
* Ensure everything is set up (idempotent)
|
|
10
89
|
* Implements steps 1-5 of the ccodex workflow:
|
|
@@ -32,7 +111,12 @@ async function ensureSetup() {
|
|
|
32
111
|
needsSetup = true;
|
|
33
112
|
}
|
|
34
113
|
// 3. Configure shell integration (adds aliases directly to rc files)
|
|
35
|
-
|
|
114
|
+
// Only run if not already configured for true idempotency
|
|
115
|
+
const shellConfigured = await isShellIntegrationConfigured();
|
|
116
|
+
if (!shellConfigured) {
|
|
117
|
+
await configureShellIntegration();
|
|
118
|
+
needsSetup = true;
|
|
119
|
+
}
|
|
36
120
|
// 5. Start proxy
|
|
37
121
|
await startProxy();
|
|
38
122
|
// 6. Check auth, launch login if needed
|
|
@@ -54,13 +138,18 @@ async function main() {
|
|
|
54
138
|
program
|
|
55
139
|
.name('ccodex')
|
|
56
140
|
.description('TypeScript reimplementation of ccodex - run Claude Code with OpenAI GPT models')
|
|
57
|
-
.version('0.1.
|
|
141
|
+
.version('0.1.9')
|
|
58
142
|
.option('--login', 'Run ChatGPT/Codex OAuth login')
|
|
59
143
|
.option('--status', 'Show setup status')
|
|
144
|
+
.option('--diagnose', 'Show proxy and auth diagnostics')
|
|
60
145
|
.allowUnknownOption(true)
|
|
61
146
|
.allowExcessArguments(true)
|
|
62
147
|
.parse(process.argv);
|
|
63
148
|
const options = program.opts();
|
|
149
|
+
// Preflight check for all operations except read-only diagnostics (--status, --diagnose)
|
|
150
|
+
if (!options.status && !options.diagnose) {
|
|
151
|
+
preflightOrThrow();
|
|
152
|
+
}
|
|
64
153
|
// Handle --login
|
|
65
154
|
if (options.login) {
|
|
66
155
|
// Ensure setup (installs dependencies, configures shell, starts proxy)
|
|
@@ -74,11 +163,36 @@ async function main() {
|
|
|
74
163
|
if (!proxyCmd.cmd) {
|
|
75
164
|
await installProxyApi();
|
|
76
165
|
}
|
|
77
|
-
|
|
166
|
+
// Only configure shell integration if not already configured
|
|
167
|
+
const shellConfigured = await isShellIntegrationConfigured();
|
|
168
|
+
if (!shellConfigured) {
|
|
169
|
+
await configureShellIntegration();
|
|
170
|
+
}
|
|
78
171
|
await startProxy();
|
|
79
|
-
//
|
|
80
|
-
|
|
172
|
+
// Check current auth status
|
|
173
|
+
const authBefore = await checkAuthConfigured();
|
|
174
|
+
if (authBefore.configured) {
|
|
175
|
+
console.log(chalk.green('✓ Already authenticated. Launching login to re-authorize...'));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log(chalk.yellow('Not authenticated. Starting OAuth login flow...'));
|
|
179
|
+
}
|
|
180
|
+
// Launch login
|
|
81
181
|
await launchLogin();
|
|
182
|
+
// Wait for authentication to complete
|
|
183
|
+
console.log('Waiting for OAuth authentication to complete...');
|
|
184
|
+
await waitForAuth();
|
|
185
|
+
// Verify auth worked
|
|
186
|
+
const authAfter = await checkAuthConfigured();
|
|
187
|
+
if (!authAfter.configured) {
|
|
188
|
+
console.log(chalk.yellow('Authentication may not have completed. Please try:'));
|
|
189
|
+
console.log(' 1. Check if browser login completed');
|
|
190
|
+
console.log(' 2. Run: npx -y @tuannvm/ccodex --login');
|
|
191
|
+
console.log(' 3. Or restart the proxy and try again');
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(chalk.green('✓ Authentication successful! You can now use ccodex.'));
|
|
195
|
+
}
|
|
82
196
|
return;
|
|
83
197
|
}
|
|
84
198
|
// Handle --status (read-only, no side effects)
|
|
@@ -86,6 +200,11 @@ async function main() {
|
|
|
86
200
|
await printStatus();
|
|
87
201
|
return;
|
|
88
202
|
}
|
|
203
|
+
// Handle --diagnose (show detailed diagnostics)
|
|
204
|
+
if (options.diagnose) {
|
|
205
|
+
await showProxyDiagnostics();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
89
208
|
// Default: ensure setup and run Claude Code
|
|
90
209
|
await ensureSetup();
|
|
91
210
|
// Get remaining args for Claude Code
|
|
@@ -96,6 +215,11 @@ main().catch((error) => {
|
|
|
96
215
|
// Normalize error to Error instance
|
|
97
216
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
98
217
|
console.error(chalk.red('Error:'), err.message);
|
|
218
|
+
// Suggest diagnostics for auth errors
|
|
219
|
+
if (err.message.includes('401') || err.message.includes('Invalid API key') || err.message.includes('authentication')) {
|
|
220
|
+
console.error('');
|
|
221
|
+
console.error(chalk.yellow('For troubleshooting, run:'), chalk.bold('npx -y @tuannvm/ccodex --diagnose'));
|
|
222
|
+
}
|
|
99
223
|
// Print stack trace in debug mode
|
|
100
224
|
if (process.env.DEBUG || process.env.CCODEX_DEBUG) {
|
|
101
225
|
console.error(chalk.gray(err.stack));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ProxyCommand, AuthStatus } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Detect CLIProxyAPI command
|
|
4
|
+
* Prefers locally installed binary from this process if available
|
|
4
5
|
*/
|
|
5
6
|
export declare function detectProxyCommand(): Promise<ProxyCommand>;
|
|
6
7
|
/**
|
|
@@ -12,7 +13,7 @@ export declare function isProxyRunning(): Promise<boolean>;
|
|
|
12
13
|
*/
|
|
13
14
|
export declare function checkAuthConfigured(): Promise<AuthStatus>;
|
|
14
15
|
/**
|
|
15
|
-
* Install CLIProxyAPI via Homebrew
|
|
16
|
+
* Install CLIProxyAPI via Homebrew or Go binary fallback
|
|
16
17
|
*/
|
|
17
18
|
export declare function installProxyApi(): Promise<void>;
|
|
18
19
|
/**
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK3D;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAehE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAuD/D;AAmED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAoSrD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiEhD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BjD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAajD"}
|
package/dist/proxy.js
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
|
-
import {
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { hasCommand, getCommandPath, execCommand, httpGet, sleep, ensureDir, fileExists, safeJsonParse, debugLog } from './utils.js';
|
|
3
5
|
import { CONFIG, getProxyUrl, getAuthDir, getLogFilePath } from './config.js';
|
|
6
|
+
// Track installed proxy binary path for this process
|
|
7
|
+
let installedProxyPath = null;
|
|
4
8
|
/**
|
|
5
9
|
* Detect CLIProxyAPI command
|
|
10
|
+
* Prefers locally installed binary from this process if available
|
|
6
11
|
*/
|
|
7
12
|
export async function detectProxyCommand() {
|
|
13
|
+
// Prefer locally installed binary from this process
|
|
14
|
+
if (installedProxyPath && fileExists(installedProxyPath)) {
|
|
15
|
+
return { cmd: 'cliproxyapi', path: installedProxyPath };
|
|
16
|
+
}
|
|
8
17
|
if (await hasCommand('cliproxyapi')) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return { cmd: 'cliproxyapi', path };
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
// which might fail, continue anyway
|
|
15
|
-
return { cmd: 'cliproxyapi', path: null };
|
|
16
|
-
}
|
|
18
|
+
const resolved = await getCommandPath('cliproxyapi');
|
|
19
|
+
return { cmd: 'cliproxyapi', path: resolved };
|
|
17
20
|
}
|
|
18
21
|
if (await hasCommand('cliproxy')) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return { cmd: 'cliproxy', path };
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return { cmd: 'cliproxy', path: null };
|
|
25
|
-
}
|
|
22
|
+
const resolved = await getCommandPath('cliproxy');
|
|
23
|
+
return { cmd: 'cliproxy', path: resolved };
|
|
26
24
|
}
|
|
27
25
|
return { cmd: null, path: null };
|
|
28
26
|
}
|
|
@@ -60,7 +58,9 @@ export async function checkAuthConfigured() {
|
|
|
60
58
|
const cmdResult = await detectProxyCommand();
|
|
61
59
|
if (cmdResult.cmd) {
|
|
62
60
|
try {
|
|
63
|
-
|
|
61
|
+
// Use absolute path if available, otherwise command name
|
|
62
|
+
const proxyExe = cmdResult.path || cmdResult.cmd;
|
|
63
|
+
const output = await execCommand(proxyExe, ['status']);
|
|
64
64
|
// Match "N auth entries" or "N auth files" where N > 0
|
|
65
65
|
const match = output.match(/(\d+)\s+(auth entries|auth files)/);
|
|
66
66
|
if (match) {
|
|
@@ -96,37 +96,311 @@ export async function checkAuthConfigured() {
|
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* Compute SHA-256 hash of binary data
|
|
100
|
+
*/
|
|
101
|
+
function sha256Hex(data) {
|
|
102
|
+
return createHash('sha256').update(data).digest('hex');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse checksum file to find expected hash for a specific file
|
|
106
|
+
* Supports common checksum formats:
|
|
107
|
+
* - SHA256SUMS: "a1b2c3... filename" or "a1b2c3... *filename"
|
|
108
|
+
* - checksums.txt: "a1b2c3... filename"
|
|
109
|
+
*/
|
|
110
|
+
function parseExpectedSha256(content, fileName) {
|
|
111
|
+
for (const line of content.split('\n')) {
|
|
112
|
+
const trimmed = line.trim();
|
|
113
|
+
if (!trimmed)
|
|
114
|
+
continue;
|
|
115
|
+
// Match: hash followed by whitespace and filename (with optional * prefix)
|
|
116
|
+
const match = trimmed.match(/^([a-fA-F0-9]{64})\s+\*?(.+)$/);
|
|
117
|
+
if (match) {
|
|
118
|
+
const [, hash, name] = match;
|
|
119
|
+
if (name.trim() === fileName) {
|
|
120
|
+
return hash.toLowerCase();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Fetch latest release info from GitHub API
|
|
128
|
+
* Returns the exact tag name to avoid moving 'latest' redirects
|
|
129
|
+
*/
|
|
130
|
+
async function getLatestReleaseTag() {
|
|
131
|
+
const apiUrl = 'https://api.github.com/repos/router-for-me/CLIProxyAPI/releases/latest';
|
|
132
|
+
try {
|
|
133
|
+
const response = await fetch(apiUrl, {
|
|
134
|
+
headers: {
|
|
135
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
136
|
+
'User-Agent': '@tuannvm/ccodex',
|
|
137
|
+
},
|
|
138
|
+
signal: AbortSignal.timeout(10000), // 10 second timeout
|
|
139
|
+
});
|
|
140
|
+
if (!response.ok) {
|
|
141
|
+
throw new Error(`GitHub API returned ${response.status}`);
|
|
142
|
+
}
|
|
143
|
+
const data = await safeJsonParse(await response.text());
|
|
144
|
+
if (!data?.tag_name) {
|
|
145
|
+
throw new Error('Invalid GitHub API response');
|
|
146
|
+
}
|
|
147
|
+
return data.tag_name;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
debugLog('Failed to fetch latest release tag:', error);
|
|
151
|
+
throw new Error(`Failed to resolve latest release tag from GitHub API: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
|
152
|
+
'Please check your internet connection or install CLIProxyAPI manually.');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Install CLIProxyAPI via Homebrew or Go binary fallback
|
|
100
157
|
*/
|
|
101
158
|
export async function installProxyApi() {
|
|
159
|
+
const { homedir } = await import('os');
|
|
160
|
+
const home = homedir();
|
|
161
|
+
if (!home) {
|
|
162
|
+
throw new Error('Cannot determine home directory. Please set HOME environment variable.');
|
|
163
|
+
}
|
|
102
164
|
// Check platform
|
|
103
165
|
const platform = process.platform;
|
|
166
|
+
const arch = process.arch;
|
|
104
167
|
if (platform === 'win32') {
|
|
105
168
|
throw new Error('CLIProxyAPI installation on Windows requires manual setup.\n' +
|
|
106
169
|
'Please install CLIProxyAPI manually and ensure it\'s in your PATH.\n' +
|
|
107
170
|
'See CLIProxyAPI documentation for Windows installation instructions.');
|
|
108
171
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
172
|
+
// Try Homebrew first (preferred)
|
|
173
|
+
if (await hasCommand('brew')) {
|
|
174
|
+
console.log('Installing CLIProxyAPI via Homebrew...');
|
|
175
|
+
const spawnCmd = (await import('cross-spawn')).default;
|
|
176
|
+
try {
|
|
177
|
+
await new Promise((resolve, reject) => {
|
|
178
|
+
const child = spawnCmd('brew', ['install', 'cliproxyapi'], {
|
|
179
|
+
stdio: 'inherit',
|
|
180
|
+
});
|
|
181
|
+
child.on('close', (code) => {
|
|
182
|
+
if (code === 0) {
|
|
183
|
+
console.log('CLIProxyAPI installed successfully via Homebrew');
|
|
184
|
+
resolve();
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
reject(new Error('Failed to install CLIProxyAPI via Homebrew'));
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
child.on('error', (error) => reject(error));
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
debugLog('Homebrew installation failed, falling back to Go binary:', error);
|
|
196
|
+
// Fall through to Go binary installation
|
|
197
|
+
}
|
|
112
198
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
199
|
+
// Fallback: Install Go binary directly
|
|
200
|
+
console.log('Installing CLIProxyAPI via Go binary...');
|
|
201
|
+
// Validate and determine platform suffix
|
|
202
|
+
const supportedPlatforms = ['darwin', 'linux'];
|
|
203
|
+
const supportedArches = ['arm64', 'x64'];
|
|
204
|
+
if (!supportedPlatforms.includes(platform)) {
|
|
205
|
+
throw new Error(`Unsupported platform: ${platform}\n` +
|
|
206
|
+
`Supported platforms: ${supportedPlatforms.join(', ')}`);
|
|
207
|
+
}
|
|
208
|
+
if (!supportedArches.includes(arch)) {
|
|
209
|
+
throw new Error(`Unsupported architecture: ${arch}\n` +
|
|
210
|
+
`Supported architectures: ${supportedArches.join(', ')}`);
|
|
211
|
+
}
|
|
212
|
+
const platformSuffix = `${platform}-${arch === 'arm64' ? 'arm64' : 'amd64'}`;
|
|
213
|
+
const binaryFileName = `cliproxyapi-${platformSuffix}`;
|
|
214
|
+
const installDir = join(home, '.local', 'bin');
|
|
215
|
+
const binaryPath = join(installDir, 'cliproxyapi');
|
|
216
|
+
const tempPath = join(installDir, `cliproxyapi.tmp.${Date.now()}`);
|
|
217
|
+
// Ensure install directory exists
|
|
218
|
+
await ensureDir(installDir);
|
|
219
|
+
// Resolve exact release tag first for security (avoid moving 'latest' redirects)
|
|
220
|
+
console.log('Resolving latest release tag from GitHub API...');
|
|
221
|
+
const releaseTag = await getLatestReleaseTag();
|
|
222
|
+
console.log(`Latest release: ${releaseTag}`);
|
|
223
|
+
const baseUrl = `https://github.com/router-for-me/CLIProxyAPI/releases/download/${releaseTag}`;
|
|
224
|
+
const binaryUrl = `${baseUrl}/${binaryFileName}`;
|
|
225
|
+
console.log(`Downloading ${binaryFileName} from GitHub releases...`);
|
|
226
|
+
const fs = await import('fs/promises');
|
|
227
|
+
try {
|
|
228
|
+
// Download binary with timeout
|
|
229
|
+
const controller = new AbortController();
|
|
230
|
+
const timeout = setTimeout(() => controller.abort(), 60000); // 60 second timeout
|
|
231
|
+
let response;
|
|
232
|
+
try {
|
|
233
|
+
response = await fetch(binaryUrl, { signal: controller.signal });
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
clearTimeout(timeout);
|
|
237
|
+
}
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}\n` +
|
|
240
|
+
`URL: ${binaryUrl}\n` +
|
|
241
|
+
`Platform/Arch: ${platformSuffix}`);
|
|
242
|
+
}
|
|
243
|
+
const buffer = await response.arrayBuffer();
|
|
244
|
+
const uint8Array = new Uint8Array(buffer);
|
|
245
|
+
// Calculate SHA-256 checksum of downloaded binary
|
|
246
|
+
console.log('Calculating SHA-256 checksum...');
|
|
247
|
+
const actualHash = sha256Hex(uint8Array);
|
|
248
|
+
// Try to download and verify checksums file
|
|
249
|
+
let checksumVerified = false;
|
|
250
|
+
let checksumMismatchError = null;
|
|
251
|
+
const checksumUrls = [
|
|
252
|
+
`${baseUrl}/SHA256SUMS`,
|
|
253
|
+
`${baseUrl}/checksums.txt`,
|
|
254
|
+
`${baseUrl}/checksums.sha256`,
|
|
255
|
+
];
|
|
256
|
+
for (const checksumUrl of checksumUrls) {
|
|
257
|
+
try {
|
|
258
|
+
console.log(`Attempting checksum verification from: ${new URL(checksumUrl).pathname}`);
|
|
259
|
+
const checksumResponse = await fetch(checksumUrl, { signal: AbortSignal.timeout(10000) });
|
|
260
|
+
if (checksumResponse.ok) {
|
|
261
|
+
const checksumContent = await checksumResponse.text();
|
|
262
|
+
const expectedHash = parseExpectedSha256(checksumContent, binaryFileName);
|
|
263
|
+
if (expectedHash) {
|
|
264
|
+
if (actualHash === expectedHash) {
|
|
265
|
+
console.log(chalk.green('✓ Checksum verification passed'));
|
|
266
|
+
checksumVerified = true;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
// Checksum mismatch - this is FATAL, do not continue
|
|
271
|
+
await fs.unlink(tempPath).catch(() => { });
|
|
272
|
+
checksumMismatchError = new Error(`Checksum verification failed!\n` +
|
|
273
|
+
`Expected: ${expectedHash}\n` +
|
|
274
|
+
`Actual: ${actualHash}\n\n` +
|
|
275
|
+
`The downloaded binary may be corrupted or tampered with.\n` +
|
|
276
|
+
`Please try again or install CLIProxyAPI manually.`);
|
|
277
|
+
break; // Exit loop immediately on mismatch
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
123
281
|
}
|
|
124
|
-
|
|
125
|
-
|
|
282
|
+
catch (checksumError) {
|
|
283
|
+
// Only catch network/parsing errors - let checksum mismatches fail hard
|
|
284
|
+
const errorMsg = checksumError instanceof Error ? checksumError.message : String(checksumError);
|
|
285
|
+
if (errorMsg.includes('Checksum verification failed')) {
|
|
286
|
+
// Re-throw checksum mismatch errors
|
|
287
|
+
throw checksumError;
|
|
288
|
+
}
|
|
289
|
+
debugLog(`Checksum verification failed for ${checksumUrl}:`, checksumError);
|
|
290
|
+
// Try next checksum URL on network errors
|
|
126
291
|
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
292
|
+
}
|
|
293
|
+
// If we found a checksum mismatch, fail hard
|
|
294
|
+
if (checksumMismatchError) {
|
|
295
|
+
throw checksumMismatchError;
|
|
296
|
+
}
|
|
297
|
+
// SECURITY: Fail closed if checksum verification is not available
|
|
298
|
+
// This prevents installation of potentially tampered binaries
|
|
299
|
+
if (!checksumVerified) {
|
|
300
|
+
await fs.unlink(tempPath).catch(() => { });
|
|
301
|
+
throw new Error(chalk.red('Checksum verification required but failed.\n\n') +
|
|
302
|
+
'The downloaded binary could not be verified against a checksum file.\n' +
|
|
303
|
+
'This is a security requirement to prevent installation of tampered binaries.\n\n' +
|
|
304
|
+
'Possible reasons:\n' +
|
|
305
|
+
' - Network issues prevented checksum file download\n' +
|
|
306
|
+
' - Checksum files are not published for this release\n' +
|
|
307
|
+
' - GitHub releases are temporarily unavailable\n\n' +
|
|
308
|
+
'To install CLIProxyAPI safely:\n' +
|
|
309
|
+
` 1. Visit ${baseUrl}/\n` +
|
|
310
|
+
' 2. Download the binary and checksum files manually\n' +
|
|
311
|
+
' 3. Verify the checksums match\n' +
|
|
312
|
+
' 4. Place the binary in a directory in your PATH\n' +
|
|
313
|
+
' 5. Make it executable: chmod +x cliproxyapi\n\n' +
|
|
314
|
+
'Then run ccodex again.');
|
|
315
|
+
}
|
|
316
|
+
// Atomic write: download to temp file first
|
|
317
|
+
await fs.writeFile(tempPath, uint8Array, { mode: 0o755 });
|
|
318
|
+
// Sync to disk
|
|
319
|
+
const fileHandle = await fs.open(tempPath, 'r');
|
|
320
|
+
try {
|
|
321
|
+
await fileHandle.sync();
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
await fileHandle.close();
|
|
325
|
+
}
|
|
326
|
+
// Validate the binary works by running it
|
|
327
|
+
try {
|
|
328
|
+
const { spawnSync } = await import('child_process');
|
|
329
|
+
const testResult = spawnSync(tempPath, ['--version'], { timeout: 5000 });
|
|
330
|
+
// Fail on any error, signal termination, or non-zero exit
|
|
331
|
+
if (testResult.error || testResult.signal !== null || testResult.status !== 0) {
|
|
332
|
+
const reason = testResult.error?.message ||
|
|
333
|
+
(testResult.signal ? `killed by signal ${testResult.signal}` : null) ||
|
|
334
|
+
(testResult.status ? `exited with code ${testResult.status}` : 'unknown error');
|
|
335
|
+
throw new Error(`Binary validation failed: ${reason}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (validationError) {
|
|
339
|
+
// Clean up invalid binary
|
|
340
|
+
await fs.unlink(tempPath).catch(() => { });
|
|
341
|
+
throw new Error(`Downloaded binary failed validation: ${validationError instanceof Error ? validationError.message : String(validationError)}\n\n` +
|
|
342
|
+
'The binary may be corrupted or incompatible with your system.');
|
|
343
|
+
}
|
|
344
|
+
// Backup existing binary if present, but be ready to rollback
|
|
345
|
+
let backupPath = null;
|
|
346
|
+
let didBackup = false;
|
|
347
|
+
if (await fileExists(binaryPath)) {
|
|
348
|
+
backupPath = `${binaryPath}.backup.${Date.now()}`;
|
|
349
|
+
await fs.rename(binaryPath, backupPath);
|
|
350
|
+
didBackup = true;
|
|
351
|
+
}
|
|
352
|
+
// Move temp file to final location (atomic on most filesystems)
|
|
353
|
+
try {
|
|
354
|
+
await fs.rename(tempPath, binaryPath);
|
|
355
|
+
// Store the installed path for this process
|
|
356
|
+
installedProxyPath = binaryPath;
|
|
357
|
+
}
|
|
358
|
+
catch (renameError) {
|
|
359
|
+
// Rollback: restore backup if we had one
|
|
360
|
+
if (didBackup && backupPath) {
|
|
361
|
+
try {
|
|
362
|
+
await fs.rename(backupPath, binaryPath);
|
|
363
|
+
}
|
|
364
|
+
catch (rollbackError) {
|
|
365
|
+
debugLog('Failed to rollback after rename failure:', rollbackError);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
throw new Error(`Failed to move binary to final location: ${renameError instanceof Error ? renameError.message : String(renameError)}`);
|
|
369
|
+
}
|
|
370
|
+
// Clean up backup on success
|
|
371
|
+
if (backupPath) {
|
|
372
|
+
fs.unlink(backupPath).catch(() => { });
|
|
373
|
+
}
|
|
374
|
+
console.log(`CLIProxyAPI installed successfully to: ${binaryPath}`);
|
|
375
|
+
// Check if install dir is in PATH
|
|
376
|
+
const pathEnv = process.env.PATH || '';
|
|
377
|
+
const pathDirs = pathEnv.split(':');
|
|
378
|
+
const binInPath = pathDirs.some(dir => dir === installDir);
|
|
379
|
+
if (!binInPath) {
|
|
380
|
+
console.log('');
|
|
381
|
+
console.log('⚠️ WARNING: ~/.local/bin is not in your PATH');
|
|
382
|
+
console.log('');
|
|
383
|
+
console.log('To use ccodex, add ~/.local/bin to your PATH:');
|
|
384
|
+
console.log('');
|
|
385
|
+
console.log(' For bash (add to ~/.bashrc):');
|
|
386
|
+
console.log(' export PATH="$HOME/.local/bin:$PATH"');
|
|
387
|
+
console.log('');
|
|
388
|
+
console.log(' For zsh (add to ~/.zshrc):');
|
|
389
|
+
console.log(' export PATH="$HOME/.local/bin:$PATH"');
|
|
390
|
+
console.log('');
|
|
391
|
+
console.log('Then reload your shell: source ~/.bashrc (or ~/.zshrc)');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
// Clean up temp file on error
|
|
396
|
+
fs.unlink(tempPath).catch(() => { });
|
|
397
|
+
throw new Error(`Failed to install CLIProxyAPI: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
|
398
|
+
'Please install CLIProxyAPI manually:\n' +
|
|
399
|
+
' 1. Visit https://github.com/router-for-me/CLIProxyAPI/releases\n' +
|
|
400
|
+
` 2. Download ${binaryFileName} for your system\n` +
|
|
401
|
+
' 3. Place it in a directory in your PATH\n' +
|
|
402
|
+
' 4. Make it executable: chmod +x cliproxyapi');
|
|
403
|
+
}
|
|
130
404
|
}
|
|
131
405
|
/**
|
|
132
406
|
* Start proxy in background
|
|
@@ -136,8 +410,9 @@ export async function startProxy() {
|
|
|
136
410
|
return;
|
|
137
411
|
}
|
|
138
412
|
const cmdResult = await detectProxyCommand();
|
|
139
|
-
|
|
140
|
-
|
|
413
|
+
// Use absolute path if available, otherwise command name
|
|
414
|
+
const proxyExe = cmdResult.path || cmdResult.cmd;
|
|
415
|
+
if (!proxyExe) {
|
|
141
416
|
throw new Error('CLIProxyAPI not found. Run: npx -y @tuannvm/ccodex');
|
|
142
417
|
}
|
|
143
418
|
console.log('Starting CLIProxyAPI in background...');
|
|
@@ -159,7 +434,7 @@ export async function startProxy() {
|
|
|
159
434
|
debugLog('Warning: Could not set restrictive permissions on log file');
|
|
160
435
|
}
|
|
161
436
|
}
|
|
162
|
-
const child = spawn(
|
|
437
|
+
const child = spawn(proxyExe, [], {
|
|
163
438
|
detached: true,
|
|
164
439
|
stdio: ['ignore', out.fd, out.fd],
|
|
165
440
|
});
|
|
@@ -192,14 +467,15 @@ export async function startProxy() {
|
|
|
192
467
|
*/
|
|
193
468
|
export async function launchLogin() {
|
|
194
469
|
const cmdResult = await detectProxyCommand();
|
|
195
|
-
|
|
196
|
-
|
|
470
|
+
// Use absolute path if available, otherwise command name
|
|
471
|
+
const proxyExe = cmdResult.path || cmdResult.cmd;
|
|
472
|
+
if (!proxyExe) {
|
|
197
473
|
throw new Error('CLIProxyAPI not found. Run: npx -y @tuannvm/ccodex');
|
|
198
474
|
}
|
|
199
475
|
console.log('Launching ChatGPT/Codex OAuth login in browser...');
|
|
200
476
|
const spawnCmd = (await import('cross-spawn')).default;
|
|
201
477
|
return new Promise((resolve, reject) => {
|
|
202
|
-
const child = spawnCmd(
|
|
478
|
+
const child = spawnCmd(proxyExe, ['-codex-login'], {
|
|
203
479
|
stdio: 'inherit',
|
|
204
480
|
});
|
|
205
481
|
child.on('close', (code) => {
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/status.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { hasCommand } from './utils.js';
|
|
3
2
|
import { detectProxyCommand, isProxyRunning, checkAuthConfigured } from './proxy.js';
|
|
4
3
|
import { isShellIntegrationConfigured } from './aliases.js';
|
|
4
|
+
import { detectClaudeCommand } from './claude.js';
|
|
5
5
|
/**
|
|
6
6
|
* Print status line
|
|
7
7
|
*/
|
|
@@ -35,19 +35,19 @@ export async function getStatus() {
|
|
|
35
35
|
const proxyRunning = await isProxyRunning();
|
|
36
36
|
const auth = await checkAuthConfigured();
|
|
37
37
|
const shellIntegration = await isShellIntegrationConfigured();
|
|
38
|
-
const
|
|
38
|
+
const claudeCmd = await detectClaudeCommand();
|
|
39
39
|
return {
|
|
40
40
|
proxyCommand: proxyCmd.cmd !== null,
|
|
41
41
|
proxyRunning,
|
|
42
42
|
authConfigured: auth.configured,
|
|
43
43
|
aliasesInstalled: shellIntegration,
|
|
44
44
|
shellIntegration,
|
|
45
|
-
claudeCliAvailable:
|
|
45
|
+
claudeCliAvailable: claudeCmd.cmd !== null,
|
|
46
46
|
ready: proxyCmd.cmd !== null &&
|
|
47
47
|
proxyRunning &&
|
|
48
48
|
auth.configured &&
|
|
49
49
|
shellIntegration &&
|
|
50
|
-
|
|
50
|
+
claudeCmd.cmd !== null,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
/**
|
package/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -8,10 +8,19 @@ export declare function debugLog(message: string, ...args: unknown[]): void;
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function execCommand(cmd: string, args?: string[], timeoutMs?: number): Promise<string>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Resolve executable path from PATH without spawning the command.
|
|
12
|
+
* Returns absolute/relative executable path if found, otherwise null.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveCommandPath(cmd: string): string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Cross-platform command existence check using PATH resolution.
|
|
17
|
+
* Avoids spawning `<cmd> --version` (which is unreliable on Windows).
|
|
13
18
|
*/
|
|
14
19
|
export declare function hasCommand(cmd: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Return full resolved command path from PATH if available.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getCommandPath(cmd: string): Promise<string | null>;
|
|
15
24
|
/**
|
|
16
25
|
* Detect current platform
|
|
17
26
|
* Throws on unsupported platforms
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCtG;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCtG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqC7D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAgCzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAazD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAYpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAgBlG;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAO/B"}
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import { homedir, platform } from 'os';
|
|
3
|
-
import { join } from 'path';
|
|
3
|
+
import { join, delimiter } from 'path';
|
|
4
4
|
import spawnCmd from 'cross-spawn';
|
|
5
5
|
import { promisify } from 'util';
|
|
6
6
|
import { exec as execCallback } from 'child_process';
|
|
@@ -51,34 +51,66 @@ export async function execCommand(cmd, args = [], timeoutMs = 10000) {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* Resolve executable path from PATH without spawning the command.
|
|
55
|
+
* Returns absolute/relative executable path if found, otherwise null.
|
|
56
56
|
*/
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
export function resolveCommandPath(cmd) {
|
|
58
|
+
const pathEnv = process.env.PATH || '';
|
|
59
|
+
const pathDirs = pathEnv.split(delimiter).filter(Boolean);
|
|
60
|
+
// If cmd already has a path separator, test directly
|
|
61
|
+
if (cmd.includes('/') || cmd.includes('\\')) {
|
|
62
|
+
return existsSync(cmd) ? cmd : null;
|
|
63
|
+
}
|
|
64
|
+
if (process.platform === 'win32') {
|
|
65
|
+
const pathext = (process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
|
|
66
|
+
.split(';')
|
|
67
|
+
.filter(Boolean);
|
|
68
|
+
const hasKnownExt = pathext.some(ext => cmd.toUpperCase().endsWith(ext.toUpperCase()));
|
|
69
|
+
const candidates = hasKnownExt ? [cmd] : [cmd, ...pathext.map(ext => `${cmd}${ext}`)];
|
|
70
|
+
for (const dir of pathDirs) {
|
|
71
|
+
for (const candidate of candidates) {
|
|
72
|
+
const fullPath = join(dir, candidate);
|
|
73
|
+
if (existsSync(fullPath)) {
|
|
74
|
+
return fullPath;
|
|
75
|
+
}
|
|
69
76
|
}
|
|
70
77
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
for (const dir of pathDirs) {
|
|
81
|
+
const fullPath = join(dir, cmd);
|
|
82
|
+
if (existsSync(fullPath)) {
|
|
83
|
+
return fullPath;
|
|
75
84
|
}
|
|
76
85
|
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Cross-platform command existence check using PATH resolution.
|
|
90
|
+
* Avoids spawning `<cmd> --version` (which is unreliable on Windows).
|
|
91
|
+
*/
|
|
92
|
+
export async function hasCommand(cmd) {
|
|
93
|
+
try {
|
|
94
|
+
return resolveCommandPath(cmd) !== null;
|
|
95
|
+
}
|
|
77
96
|
catch (error) {
|
|
78
97
|
debugLog(`hasCommand failed for ${cmd}:`, error);
|
|
79
98
|
return false;
|
|
80
99
|
}
|
|
81
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Return full resolved command path from PATH if available.
|
|
103
|
+
*/
|
|
104
|
+
export async function getCommandPath(cmd) {
|
|
105
|
+
try {
|
|
106
|
+
const resolved = resolveCommandPath(cmd);
|
|
107
|
+
return resolved;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
debugLog(`getCommandPath failed for ${cmd}:`, error);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
82
114
|
/**
|
|
83
115
|
* Detect current platform
|
|
84
116
|
* Throws on unsupported platforms
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|