@tuannvm/ccodex 0.1.0 → 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 +38 -3
- package/dist/aliases.d.ts +3 -8
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +72 -79
- package/dist/aliases.js.map +1 -1
- package/dist/claude.d.ts +5 -1
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +133 -37
- package/dist/claude.js.map +1 -1
- package/dist/cli.js +137 -17
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -15
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/powershell.js +11 -11
- package/dist/powershell.js.map +1 -1
- package/dist/proxy.d.ts +2 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +320 -44
- package/dist/proxy.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +7 -9
- package/dist/status.js.map +1 -1
- package/dist/utils.d.ts +11 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +51 -32
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
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,9 +410,10 @@ export async function startProxy() {
|
|
|
136
410
|
return;
|
|
137
411
|
}
|
|
138
412
|
const cmdResult = await detectProxyCommand();
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
413
|
+
// Use absolute path if available, otherwise command name
|
|
414
|
+
const proxyExe = cmdResult.path || cmdResult.cmd;
|
|
415
|
+
if (!proxyExe) {
|
|
416
|
+
throw new Error('CLIProxyAPI not found. Run: npx -y @tuannvm/ccodex');
|
|
142
417
|
}
|
|
143
418
|
console.log('Starting CLIProxyAPI in background...');
|
|
144
419
|
const logFile = getLogFilePath();
|
|
@@ -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
|
-
|
|
197
|
-
|
|
470
|
+
// Use absolute path if available, otherwise command name
|
|
471
|
+
const proxyExe = cmdResult.path || cmdResult.cmd;
|
|
472
|
+
if (!proxyExe) {
|
|
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.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAqBvD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBnD"}
|
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
|
-
import {
|
|
3
|
+
import { isShellIntegrationConfigured } from './aliases.js';
|
|
4
|
+
import { detectClaudeCommand } from './claude.js';
|
|
5
5
|
/**
|
|
6
6
|
* Print status line
|
|
7
7
|
*/
|
|
@@ -34,22 +34,20 @@ export async function getStatus() {
|
|
|
34
34
|
const proxyCmd = await detectProxyCommand();
|
|
35
35
|
const proxyRunning = await isProxyRunning();
|
|
36
36
|
const auth = await checkAuthConfigured();
|
|
37
|
-
const aliasFile = await hasAliasFile();
|
|
38
37
|
const shellIntegration = await isShellIntegrationConfigured();
|
|
39
|
-
const
|
|
38
|
+
const claudeCmd = await detectClaudeCommand();
|
|
40
39
|
return {
|
|
41
40
|
proxyCommand: proxyCmd.cmd !== null,
|
|
42
41
|
proxyRunning,
|
|
43
42
|
authConfigured: auth.configured,
|
|
44
|
-
aliasesInstalled:
|
|
43
|
+
aliasesInstalled: shellIntegration,
|
|
45
44
|
shellIntegration,
|
|
46
|
-
claudeCliAvailable:
|
|
45
|
+
claudeCliAvailable: claudeCmd.cmd !== null,
|
|
47
46
|
ready: proxyCmd.cmd !== null &&
|
|
48
47
|
proxyRunning &&
|
|
49
48
|
auth.configured &&
|
|
50
|
-
aliasFile &&
|
|
51
49
|
shellIntegration &&
|
|
52
|
-
|
|
50
|
+
claudeCmd.cmd !== null,
|
|
53
51
|
};
|
|
54
52
|
}
|
|
55
53
|
/**
|
|
@@ -66,7 +64,7 @@ export async function readyCheck() {
|
|
|
66
64
|
console.log('');
|
|
67
65
|
console.log(chalk.yellow('Not ready: run') +
|
|
68
66
|
' ' +
|
|
69
|
-
chalk.bold('npx -y ccodex') +
|
|
67
|
+
chalk.bold('npx -y @tuannvm/ccodex') +
|
|
70
68
|
' again to complete setup.');
|
|
71
69
|
return false;
|
|
72
70
|
}
|
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
|
|
@@ -22,11 +31,6 @@ export declare function detectPlatform(): Platform;
|
|
|
22
31
|
* Returns appropriate config file based on platform and shell
|
|
23
32
|
*/
|
|
24
33
|
export declare function getShellRcFile(platform: Platform): string;
|
|
25
|
-
/**
|
|
26
|
-
* Get alias file path
|
|
27
|
-
* Platform-specific alias file location
|
|
28
|
-
*/
|
|
29
|
-
export declare function getAliasFile(): string;
|
|
30
34
|
/**
|
|
31
35
|
* Sleep for ms milliseconds
|
|
32
36
|
*/
|
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"}
|