@tuannvm/ccodex 0.1.1 → 0.2.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 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.2.6)
49
+
50
+ `ccodex` v0.2.6 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/aliases.js CHANGED
@@ -1,4 +1,4 @@
1
- import { join } from 'path';
1
+ import { join, dirname } from 'path';
2
2
  import { getShellRcFile, ensureDir, appendFile, readFile, fileExists, detectPlatform, isInteractive, } from './utils.js';
3
3
  import { installPowerShellAliases, isPowerShellIntegrationConfigured } from './powershell.js';
4
4
  // Use npx directly - no local bin installation
@@ -57,7 +57,7 @@ function removeCcodexBlock(content) {
57
57
  */
58
58
  async function addAliasesToRc(rcFile) {
59
59
  // Ensure rc file directory exists
60
- await ensureDir(join(rcFile, '..'));
60
+ await ensureDir(dirname(rcFile));
61
61
  // Create rc file if it doesn't exist
62
62
  const fs = await import('fs/promises');
63
63
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"aliases.js","sourceRoot":"","sources":["../src/aliases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aliases.js","sourceRoot":"","sources":["../src/aliases.ts"],"names":[],"mappings":"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"}
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAWhG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBvD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG7D"}
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;AAqBD;;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,CAyI7D"}
package/dist/claude.js CHANGED
@@ -1,25 +1,73 @@
1
1
  import spawnCmd from 'cross-spawn';
2
2
  import { join } from 'path';
3
- import { hasCommand, ensureDir, getUid } from './utils.js';
3
+ import { homedir } from 'os';
4
+ import { hasCommand, getCommandPath, ensureDir, getUid, fileExists, requireTrustedCommand } 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
- try {
11
- const { execCommand } = await import('./utils.js');
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
- * Install Claude Code via npm
52
+ * Helper to run npm install and capture stderr
53
+ */
54
+ async function runNpmInstall(args) {
55
+ const npmPath = await requireTrustedCommand('npm');
56
+ const spawn = (await import('cross-spawn')).default;
57
+ return new Promise((resolve, reject) => {
58
+ const child = spawn(npmPath, args, { stdio: ['ignore', 'inherit', 'pipe'] });
59
+ let stderr = '';
60
+ child.stderr?.on('data', (d) => {
61
+ const s = d.toString();
62
+ stderr += s;
63
+ process.stderr.write(s);
64
+ });
65
+ child.on('error', reject);
66
+ child.on('close', code => resolve({ ok: code === 0, stderr }));
67
+ });
68
+ }
69
+ /**
70
+ * Install Claude Code via npm with fallback to local prefix
23
71
  */
24
72
  export async function installClaudeCode() {
25
73
  // Check if npm is available
@@ -27,30 +75,46 @@ export async function installClaudeCode() {
27
75
  throw new Error('npm not found. Install Node.js with npm first.');
28
76
  }
29
77
  console.log('Installing Claude Code CLI via npm...');
30
- const spawnCmd = (await import('cross-spawn')).default;
31
- return new Promise((resolve, reject) => {
32
- const child = spawnCmd('npm', ['install', '-g', '@anthropic-ai/claude-code'], {
33
- stdio: 'inherit',
34
- });
35
- child.on('close', (code) => {
36
- if (code === 0) {
37
- console.log('Claude Code CLI installed successfully');
38
- resolve();
39
- }
40
- else {
41
- reject(new Error('Failed to install Claude Code CLI'));
42
- }
43
- });
44
- child.on('error', (error) => reject(error));
45
- });
78
+ // Try global install first
79
+ const global = await runNpmInstall(['install', '-g', '@anthropic-ai/claude-code']);
80
+ if (global.ok) {
81
+ console.log('Claude Code CLI installed successfully via npm global');
82
+ return;
83
+ }
84
+ // Check if it was a permission error
85
+ const permissionDenied = /EACCES|permission denied/i.test(global.stderr);
86
+ if (!permissionDenied) {
87
+ throw new Error('Failed to install Claude Code CLI');
88
+ }
89
+ // Fallback to local install
90
+ // Use platform-specific local prefix path
91
+ let localPrefix;
92
+ if (process.platform === 'win32') {
93
+ localPrefix = join(homedir(), 'AppData', 'Local', 'ccodex', 'npm');
94
+ }
95
+ else {
96
+ localPrefix = join(homedir(), '.local', 'ccodex', 'npm');
97
+ }
98
+ console.log(`Global install denied. Falling back to local prefix: ${localPrefix}`);
99
+ const local = await runNpmInstall(['install', '--prefix', localPrefix, '@anthropic-ai/claude-code']);
100
+ if (!local.ok) {
101
+ throw new Error('Failed to install Claude Code CLI (global + local fallback both failed)');
102
+ }
103
+ // Store the installed path using the persistent path function
104
+ installedClaudePath = getPersistentLocalClaudePath();
105
+ console.log(`Claude Code CLI installed locally: ${installedClaudePath}`);
46
106
  }
47
107
  /**
48
108
  * Run Claude Code CLI with proxy environment
49
109
  */
50
110
  export async function runClaude(args) {
51
- if (!(await hasCommand('claude'))) {
111
+ // Detect Claude CLI using comprehensive detection (process-local, persistent local, system PATH)
112
+ const claudeCmd = await detectClaudeCommand();
113
+ if (!claudeCmd.cmd) {
52
114
  throw new Error('claude CLI not found in PATH\nInstall Claude Code CLI first, then rerun: npx -y @tuannvm/ccodex');
53
115
  }
116
+ // Use detected command (absolute path or command name)
117
+ const claudeExe = claudeCmd.cmd;
54
118
  // Ensure proxy is running
55
119
  await startProxy();
56
120
  // Check auth, launch login if needed
@@ -75,15 +139,50 @@ export async function runClaude(args) {
75
139
  const { homedir } = await import('os');
76
140
  const userHome = homedir();
77
141
  // Environment for Claude with proxy
78
- // Start from process.env but explicitly exclude Anthropic keys
79
- const env = {
80
- ...process.env,
81
- };
82
- // Explicitly unset ALL API keys to force use of proxy auth only
83
- // NO API key fallback - authentication must happen through ChatGPT OAuth
84
- delete env.ANTHROPIC_API_KEY;
85
- delete env.CLAUDE_API_KEY;
86
- delete env.OPENAI_API_KEY; // Ensure no OpenAI API key fallback
142
+ // Minimal allowlist for subprocess environment.
143
+ // Default-deny: only pass values required for process execution and terminal UX.
144
+ const allowedEnvKeys = new Set([
145
+ 'PATH',
146
+ 'HOME',
147
+ 'USERPROFILE',
148
+ 'SYSTEMROOT',
149
+ 'WINDIR',
150
+ 'COMSPEC',
151
+ 'PATHEXT',
152
+ 'TMPDIR',
153
+ 'TMP',
154
+ 'TEMP',
155
+ 'LANG',
156
+ 'LC_ALL',
157
+ 'LC_CTYPE',
158
+ 'TERM',
159
+ 'COLORTERM',
160
+ 'NO_COLOR',
161
+ 'FORCE_COLOR',
162
+ 'CI',
163
+ 'SHELL',
164
+ 'PWD',
165
+ 'OLDPWD',
166
+ 'XDG_CONFIG_HOME',
167
+ 'XDG_CACHE_HOME',
168
+ 'XDG_DATA_HOME',
169
+ // TLS/certificate support for enterprise environments
170
+ 'SSL_CERT_FILE',
171
+ 'SSL_CERT_DIR',
172
+ 'NODE_EXTRA_CA_CERTS',
173
+ 'NODE_TLS_REJECT_UNAUTHORIZED',
174
+ ]);
175
+ const env = {};
176
+ for (const [key, value] of Object.entries(process.env)) {
177
+ if (value === undefined)
178
+ continue;
179
+ // On Windows env keys are case-insensitive; normalize for allowlist matching.
180
+ const normalized = process.platform === 'win32' ? key.toUpperCase() : key;
181
+ const allowed = allowedEnvKeys.has(normalized);
182
+ if (allowed) {
183
+ env[key] = value;
184
+ }
185
+ }
87
186
  // Set proxy config - dummy token is replaced by CLIProxyAPI's OAuth credentials
88
187
  // The proxy handles ChatGPT authentication, this is just a format placeholder
89
188
  env.ANTHROPIC_AUTH_TOKEN = 'sk-dummy';
@@ -108,7 +207,7 @@ export async function runClaude(args) {
108
207
  env.DISABLE_ERROR_REPORTING = '1';
109
208
  env.CLAUDE_CONFIG_DIR = join(userHome, '.claude-openai');
110
209
  // Spawn Claude with modified environment
111
- const child = spawnCmd('claude', args, {
210
+ const child = spawnCmd(claudeExe, args, {
112
211
  stdio: 'inherit',
113
212
  env,
114
213
  });
@@ -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;AAC3D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,4BAA4B;IAC5B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IACvD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,2BAA2B,CAAC,EAAE;YAC5E,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACrH,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,EAAE,CAAC;IAEnB,qCAAqC;IACrC,MAAM,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,yCAAyC;IACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,eAAe,GAAG,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAExB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;IAE3B,oCAAoC;IACpC,+DAA+D;IAC/D,MAAM,GAAG,GAAuC;QAC9C,GAAG,OAAO,CAAC,GAAG;KACf,CAAC;IAEF,gEAAgE;IAChE,yEAAyE;IACzE,OAAO,GAAG,CAAC,iBAAiB,CAAC;IAC7B,OAAO,GAAG,CAAC,cAAc,CAAC;IAC1B,OAAO,GAAG,CAAC,cAAc,CAAC,CAAE,oCAAoC;IAEhE,gFAAgF;IAChF,8EAA8E;IAC9E,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC;IACtC,GAAG,CAAC,kBAAkB,GAAG,uBAAuB,CAAC;IACjD,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC;IAE9B,kCAAkC;IAClC,GAAG,CAAC,4BAA4B,GAAG,sBAAsB,CAAC;IAC1D,GAAG,CAAC,eAAe,GAAG,uBAAuB,CAAC;IAC9C,GAAG,CAAC,8BAA8B,GAAG,qBAAqB,CAAC;IAC3D,GAAG,CAAC,6BAA6B,GAAG,oBAAoB,CAAC;IACzD,GAAG,CAAC,0BAA0B,GAAG,uBAAuB,CAAC;IAEzD,iBAAiB;IACjB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IAEpB,sDAAsD;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;QAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,wCAAwC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IAChC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC5B,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;IAClC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEzD,yCAAyC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;QACrC,KAAK,EAAE,SAAS;QAChB,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,4BAA4B;YAC5B,kEAAkE;YAClE,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9D,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,wDAAwD;gBACxD,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,kDAAkD;gBAClD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
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,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvF,2DAA2D;AAC3D,IAAI,mBAAmB,GAAkB,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,SAAS,4BAA4B;IACnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,mEAAmE;IACnE,IAAI,mBAAmB,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IACjE,CAAC;IAED,yEAAyE;IACzE,MAAM,eAAe,GAAG,4BAA4B,EAAE,CAAC;IACvD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,0DAA0D;QAC1D,mBAAmB,GAAG,eAAe,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACzD,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,4BAA4B;IAC5B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,2BAA2B;IAC3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC;IACnF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,4BAA4B;IAC5B,0CAA0C;IAC1C,IAAI,WAAmB,CAAC;IACxB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,CAAC,CAAC,CAAC;IACrG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,8DAA8D;IAC9D,mBAAmB,GAAG,4BAA4B,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,sCAAsC,mBAAmB,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,iGAAiG;IACjG,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACrH,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC;IAEhC,0BAA0B;IAC1B,MAAM,UAAU,EAAE,CAAC;IAEnB,qCAAqC;IACrC,MAAM,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,yCAAyC;IACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,eAAe,GAAG,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAExB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;IAE3B,oCAAoC;IACpC,gDAAgD;IAChD,iFAAiF;IACjF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;QAC7B,MAAM;QACN,MAAM;QACN,aAAa;QACb,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,SAAS;QACT,QAAQ;QACR,KAAK;QACL,MAAM;QACN,MAAM;QACN,QAAQ;QACR,UAAU;QACV,MAAM;QACN,WAAW;QACX,UAAU;QACV,aAAa;QACb,IAAI;QACJ,OAAO;QACP,KAAK;QACL,QAAQ;QACR,iBAAiB;QACjB,gBAAgB;QAChB,eAAe;QACf,sDAAsD;QACtD,eAAe;QACf,cAAc;QACd,qBAAqB;QACrB,8BAA8B;KAC/B,CAAC,CAAC;IAEH,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAElC,8EAA8E;QAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1E,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,8EAA8E;IAC9E,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC;IACtC,GAAG,CAAC,kBAAkB,GAAG,uBAAuB,CAAC;IACjD,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC;IAE9B,kCAAkC;IAClC,GAAG,CAAC,4BAA4B,GAAG,sBAAsB,CAAC;IAC1D,GAAG,CAAC,eAAe,GAAG,uBAAuB,CAAC;IAC9C,GAAG,CAAC,8BAA8B,GAAG,qBAAqB,CAAC;IAC3D,GAAG,CAAC,6BAA6B,GAAG,oBAAoB,CAAC;IACzD,GAAG,CAAC,0BAA0B,GAAG,uBAAuB,CAAC;IAEzD,iBAAiB;IACjB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IAEpB,sDAAsD;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;QAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,wCAAwC,GAAG,GAAG,CAAC;IACnD,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IAChC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC5B,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;IAClC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEzD,yCAAyC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,SAAS;QAChB,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,4BAA4B;YAC5B,kEAAkE;YAClE,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9D,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,wDAAwD;gBACxD,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,kDAAkD;gBAClD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/cli.js CHANGED
@@ -1,10 +1,108 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import chalk from 'chalk';
4
+ import { dirname, join } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { readFileSync } from 'fs';
4
7
  import { detectProxyCommand, installProxyApi, startProxy, launchLogin, waitForAuth, checkAuthConfigured } from './proxy.js';
5
- import { configureShellIntegration } from './aliases.js';
8
+ import { configureShellIntegration, isShellIntegrationConfigured } from './aliases.js';
6
9
  import { printStatus, readyCheck } from './status.js';
7
10
  import { runClaude, detectClaudeCommand, installClaudeCode } from './claude.js';
11
+ /**
12
+ * Get version from package.json
13
+ * Reads version dynamically to avoid hardcoded version mismatch
14
+ */
15
+ function getVersion() {
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ const pkgPath = join(__dirname, '..', 'package.json');
19
+ try {
20
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
21
+ return pkg.version || '0.0.0';
22
+ }
23
+ catch {
24
+ return '0.0.0';
25
+ }
26
+ }
27
+ /**
28
+ * Show proxy and auth diagnostic information
29
+ */
30
+ async function showProxyDiagnostics() {
31
+ const { isProxyRunning, checkAuthConfigured, detectProxyCommand } = await import('./proxy.js');
32
+ console.log('');
33
+ console.log(chalk.bold('Proxy & Auth Diagnostics'));
34
+ console.log('');
35
+ // Check proxy command
36
+ const proxyCmd = await detectProxyCommand();
37
+ if (proxyCmd.cmd) {
38
+ console.log(chalk.green(`✓ Proxy command found:`), proxyCmd.cmd);
39
+ if (proxyCmd.path) {
40
+ console.log(chalk.gray(` Path: ${proxyCmd.path}`));
41
+ }
42
+ }
43
+ else {
44
+ console.log(chalk.red('✗ Proxy command NOT found'));
45
+ }
46
+ // Check if proxy is running
47
+ const proxyRunning = await isProxyRunning();
48
+ if (proxyRunning) {
49
+ console.log(chalk.green('✓ Proxy is running'), chalk.gray('(127.0.0.1:8317)'));
50
+ }
51
+ else {
52
+ console.log(chalk.red('✗ Proxy is NOT running'));
53
+ }
54
+ // Check auth status
55
+ const auth = await checkAuthConfigured();
56
+ console.log('');
57
+ if (auth.hasModels) {
58
+ console.log(chalk.green('✓ Auth: Models accessible (proxy has valid credentials)'));
59
+ }
60
+ else if (auth.hasAuthEntries) {
61
+ console.log(chalk.yellow('⚠ Auth: Entries exist but models not accessible'));
62
+ }
63
+ else if (auth.hasAuthFiles) {
64
+ console.log(chalk.yellow('⚠ Auth: Files exist but not loaded'));
65
+ }
66
+ else {
67
+ console.log(chalk.red('✗ Auth: No credentials found'));
68
+ }
69
+ console.log('');
70
+ console.log(chalk.gray('If you see errors above, try: npx -y @tuannvm/ccodex --login'));
71
+ }
72
+ /**
73
+ * Preflight check - validate platform and capabilities before main operations
74
+ * Only runs for non-status commands to allow read-only diagnostics anywhere
75
+ */
76
+ function preflightOrThrow() {
77
+ const platform = process.platform;
78
+ const arch = process.arch;
79
+ // Check Node.js version
80
+ const nodeMajorVersion = Number(process.versions.node.split('.')[0]);
81
+ if (nodeMajorVersion < 18) {
82
+ throw new Error(`Node.js ${process.versions.node} detected.\n` +
83
+ `Please use Node.js >= 18. You have ${process.versions.node}.`);
84
+ }
85
+ // Check OS support
86
+ const supportedPlatforms = ['darwin', 'linux', 'win32'];
87
+ if (!supportedPlatforms.includes(platform)) {
88
+ throw new Error(`Unsupported OS: ${platform}\n` +
89
+ `Supported platforms: ${supportedPlatforms.join(', ')}`);
90
+ }
91
+ // Check architecture for proxy auto-install (Unix/Linux only)
92
+ if (platform === 'darwin' || platform === 'linux') {
93
+ const supportedArches = ['arm64', 'x64'];
94
+ if (!supportedArches.includes(arch)) {
95
+ throw new Error(`Unsupported architecture for CLIProxyAPI auto-install: ${arch}\n` +
96
+ `Supported architectures: ${supportedArches.join(', ')}\n` +
97
+ `CLIProxyAPI must be installed manually for your architecture.`);
98
+ }
99
+ }
100
+ // Windows warning
101
+ if (platform === 'win32') {
102
+ console.log(chalk.yellow('Windows detected: CLIProxyAPI requires manual installation.\n' +
103
+ 'Install from: https://github.com/router-for-me/CLIProxyAPI/releases'));
104
+ }
105
+ }
8
106
  /**
9
107
  * Ensure everything is set up (idempotent)
10
108
  * Implements steps 1-5 of the ccodex workflow:
@@ -32,7 +130,12 @@ async function ensureSetup() {
32
130
  needsSetup = true;
33
131
  }
34
132
  // 3. Configure shell integration (adds aliases directly to rc files)
35
- await configureShellIntegration();
133
+ // Only run if not already configured for true idempotency
134
+ const shellConfigured = await isShellIntegrationConfigured();
135
+ if (!shellConfigured) {
136
+ await configureShellIntegration();
137
+ needsSetup = true;
138
+ }
36
139
  // 5. Start proxy
37
140
  await startProxy();
38
141
  // 6. Check auth, launch login if needed
@@ -54,13 +157,18 @@ async function main() {
54
157
  program
55
158
  .name('ccodex')
56
159
  .description('TypeScript reimplementation of ccodex - run Claude Code with OpenAI GPT models')
57
- .version('0.1.1')
160
+ .version(getVersion())
58
161
  .option('--login', 'Run ChatGPT/Codex OAuth login')
59
162
  .option('--status', 'Show setup status')
163
+ .option('--diagnose', 'Show proxy and auth diagnostics')
60
164
  .allowUnknownOption(true)
61
165
  .allowExcessArguments(true)
62
166
  .parse(process.argv);
63
167
  const options = program.opts();
168
+ // Preflight check for all operations except read-only diagnostics (--status, --diagnose)
169
+ if (!options.status && !options.diagnose) {
170
+ preflightOrThrow();
171
+ }
64
172
  // Handle --login
65
173
  if (options.login) {
66
174
  // Ensure setup (installs dependencies, configures shell, starts proxy)
@@ -74,11 +182,36 @@ async function main() {
74
182
  if (!proxyCmd.cmd) {
75
183
  await installProxyApi();
76
184
  }
77
- await configureShellIntegration();
185
+ // Only configure shell integration if not already configured
186
+ const shellConfigured = await isShellIntegrationConfigured();
187
+ if (!shellConfigured) {
188
+ await configureShellIntegration();
189
+ }
78
190
  await startProxy();
79
- // Always launch login flow for --login, even if already authenticated
80
- // This allows users to switch accounts or refresh their session
191
+ // Check current auth status
192
+ const authBefore = await checkAuthConfigured();
193
+ if (authBefore.configured) {
194
+ console.log(chalk.green('✓ Already authenticated. Launching login to re-authorize...'));
195
+ }
196
+ else {
197
+ console.log(chalk.yellow('Not authenticated. Starting OAuth login flow...'));
198
+ }
199
+ // Launch login
81
200
  await launchLogin();
201
+ // Wait for authentication to complete
202
+ console.log('Waiting for OAuth authentication to complete...');
203
+ await waitForAuth();
204
+ // Verify auth worked
205
+ const authAfter = await checkAuthConfigured();
206
+ if (!authAfter.configured) {
207
+ console.log(chalk.yellow('Authentication may not have completed. Please try:'));
208
+ console.log(' 1. Check if browser login completed');
209
+ console.log(' 2. Run: npx -y @tuannvm/ccodex --login');
210
+ console.log(' 3. Or restart the proxy and try again');
211
+ }
212
+ else {
213
+ console.log(chalk.green('✓ Authentication successful! You can now use ccodex.'));
214
+ }
82
215
  return;
83
216
  }
84
217
  // Handle --status (read-only, no side effects)
@@ -86,6 +219,11 @@ async function main() {
86
219
  await printStatus();
87
220
  return;
88
221
  }
222
+ // Handle --diagnose (show detailed diagnostics)
223
+ if (options.diagnose) {
224
+ await showProxyDiagnostics();
225
+ return;
226
+ }
89
227
  // Default: ensure setup and run Claude Code
90
228
  await ensureSetup();
91
229
  // Get remaining args for Claude Code
@@ -96,6 +234,11 @@ main().catch((error) => {
96
234
  // Normalize error to Error instance
97
235
  const err = error instanceof Error ? error : new Error(String(error));
98
236
  console.error(chalk.red('Error:'), err.message);
237
+ // Suggest diagnostics for auth errors
238
+ if (err.message.includes('401') || err.message.includes('Invalid API key') || err.message.includes('authentication')) {
239
+ console.error('');
240
+ console.error(chalk.yellow('For troubleshooting, run:'), chalk.bold('npx -y @tuannvm/ccodex --diagnose'));
241
+ }
99
242
  // Print stack trace in debug mode
100
243
  if (process.env.DEBUG || process.env.CCODEX_DEBUG) {
101
244
  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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * PowerShell-specific utilities for Windows support
3
3
  */
4
- import { join } from 'path';
4
+ import { join, dirname } from 'path';
5
5
  import { homedir } from 'os';
6
6
  import { fileExists, ensureDir, appendFile, debugLog } from './utils.js';
7
7
  // Use npx directly - no local bin installation
@@ -62,7 +62,7 @@ export async function installPowerShellAliases() {
62
62
  return false;
63
63
  }
64
64
  // Ensure profile directory exists
65
- await ensureDir(join(profilePath, '..'));
65
+ await ensureDir(dirname(profilePath));
66
66
  // Check if already configured with our aliases
67
67
  if (fileExists(profilePath)) {
68
68
  const content = await readFile(profilePath);
@@ -1 +1 @@
1
- {"version":3,"file":"powershell.js","sourceRoot":"","sources":["../src/powershell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"powershell.js","sourceRoot":"","sources":["../src/powershell.ts"],"names":[],"mappings":"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"}
package/dist/proxy.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import type { ProxyCommand, AuthStatus } from './types.js';
2
+ /**
3
+ * Get trusted proxy command path
4
+ * Validates that the proxy binary is from a trusted location before execution
5
+ */
6
+ export declare function requireTrustedProxyCommand(): Promise<string>;
2
7
  /**
3
8
  * Detect CLIProxyAPI command
9
+ * Prefers locally installed binary from this process if available
4
10
  */
5
11
  export declare function detectProxyCommand(): Promise<ProxyCommand>;
6
12
  /**
@@ -12,7 +18,7 @@ export declare function isProxyRunning(): Promise<boolean>;
12
18
  */
13
19
  export declare function checkAuthConfigured(): Promise<AuthStatus>;
14
20
  /**
15
- * Install CLIProxyAPI via Homebrew (macOS/Linux only)
21
+ * Install CLIProxyAPI via Homebrew or Go binary fallback
16
22
  */
17
23
  export declare function installProxyApi(): Promise<void>;
18
24
  /**