@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/dist/proxy.js CHANGED
@@ -1,28 +1,26 @@
1
1
  import { join } from 'path';
2
- import { hasCommand, execCommand, httpGet, sleep, ensureDir, safeJsonParse, debugLog } from './utils.js';
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
- try {
10
- const path = await execCommand('which', ['cliproxyapi']);
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
- try {
20
- const path = await execCommand('which', ['cliproxy']);
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
- const output = await execCommand(cmdResult.cmd, ['status']);
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
- * Install CLIProxyAPI via Homebrew (macOS/Linux only)
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
- if (!(await hasCommand('brew'))) {
110
- throw new Error('Homebrew not found. CLIProxyAPI requires Homebrew for installation on macOS/Linux.\n' +
111
- 'Install Homebrew from https://brew.sh/ or install CLIProxyAPI manually.');
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
- console.log('Installing CLIProxyAPI via Homebrew...');
114
- const spawnCmd = (await import('cross-spawn')).default;
115
- return new Promise((resolve, reject) => {
116
- const child = spawnCmd('brew', ['install', 'cliproxyapi'], {
117
- stdio: 'inherit',
118
- });
119
- child.on('close', (code) => {
120
- if (code === 0) {
121
- console.log('CLIProxyAPI installed successfully');
122
- resolve();
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
- else {
125
- reject(new Error('Failed to install CLIProxyAPI via Homebrew'));
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
- child.on('error', (error) => reject(error));
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
- const proxyCmd = cmdResult.cmd;
140
- if (!proxyCmd) {
141
- throw new Error('CLIProxyAPI not found. Run: npx -y ccodex');
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(proxyCmd, [], {
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
- const proxyCmd = cmdResult.cmd;
196
- if (!proxyCmd) {
197
- throw new Error('CLIProxyAPI not found. Run: npx -y ccodex');
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(proxyCmd, ['-codex-login'], {
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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"}
@@ -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,CAuBvD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBnD"}
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 { hasAliasFile, isShellIntegrationConfigured } from './aliases.js';
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 claudeCli = await hasCommand('claude');
38
+ const claudeCmd = await detectClaudeCommand();
40
39
  return {
41
40
  proxyCommand: proxyCmd.cmd !== null,
42
41
  proxyRunning,
43
42
  authConfigured: auth.configured,
44
- aliasesInstalled: aliasFile,
43
+ aliasesInstalled: shellIntegration,
45
44
  shellIntegration,
46
- claudeCliAvailable: claudeCli,
45
+ claudeCliAvailable: claudeCmd.cmd !== null,
47
46
  ready: proxyCmd.cmd !== null &&
48
47
  proxyRunning &&
49
48
  auth.configured &&
50
- aliasFile &&
51
49
  shellIntegration &&
52
- claudeCli,
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
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
- * Cross-platform command existence check
12
- * Uses Node.js built-in where command on Unix, falls back to PATH search on Windows
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
  */
@@ -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,CAsB9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAgCzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAazD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAUrC;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"}
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"}