@tuannvm/ccodex 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC;IACvC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import type { Platform } from './types.js';
2
+ /**
3
+ * Debug logging helper
4
+ */
5
+ export declare function debugLog(message: string, ...args: unknown[]): void;
6
+ /**
7
+ * Execute a command and return stdout
8
+ */
9
+ export declare function execCommand(cmd: string, args?: string[], timeoutMs?: number): Promise<string>;
10
+ /**
11
+ * Cross-platform command existence check
12
+ * Uses Node.js built-in where command on Unix, falls back to PATH search on Windows
13
+ */
14
+ export declare function hasCommand(cmd: string): Promise<boolean>;
15
+ /**
16
+ * Detect current platform
17
+ * Throws on unsupported platforms
18
+ */
19
+ export declare function detectPlatform(): Platform;
20
+ /**
21
+ * Get shell rc file path
22
+ * Returns appropriate config file based on platform and shell
23
+ */
24
+ 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
+ /**
31
+ * Sleep for ms milliseconds
32
+ */
33
+ export declare function sleep(ms: number): Promise<void>;
34
+ /**
35
+ * Make HTTP GET request
36
+ */
37
+ export declare function httpGet(url: string): Promise<{
38
+ status: number;
39
+ body: string;
40
+ }>;
41
+ /**
42
+ * Safe JSON parse with runtime validation
43
+ * Returns null if parsing fails or if result doesn't match expected structure
44
+ */
45
+ export declare function safeJsonParse<T>(str: string, validator?: (value: unknown) => value is T): T | null;
46
+ /**
47
+ * Check if running in terminal
48
+ */
49
+ export declare function isInteractive(): boolean;
50
+ /**
51
+ * Check if file exists
52
+ */
53
+ export declare function fileExists(path: string): boolean;
54
+ /**
55
+ * Ensure directory exists
56
+ */
57
+ export declare function ensureDir(path: string): Promise<void>;
58
+ /**
59
+ * Read file content
60
+ */
61
+ export declare function readFile(path: string): Promise<string>;
62
+ /**
63
+ * Write file content
64
+ */
65
+ export declare function writeFile(path: string, content: string): Promise<void>;
66
+ /**
67
+ * Append to file
68
+ */
69
+ export declare function appendFile(path: string, content: string): Promise<void>;
70
+ /**
71
+ * Make file executable
72
+ * Only applies chmod on Unix/macOS; no-op on Windows
73
+ */
74
+ export declare function makeExecutable(path: string): Promise<void>;
75
+ /**
76
+ * Copy file
77
+ */
78
+ export declare function copyFile(src: string, dest: string): Promise<void>;
79
+ /**
80
+ * Get user ID (cross-platform)
81
+ */
82
+ export declare function getUid(): number;
83
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +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"}
package/dist/utils.js ADDED
@@ -0,0 +1,278 @@
1
+ import { existsSync } from 'fs';
2
+ import { homedir, platform } from 'os';
3
+ import { join } from 'path';
4
+ import spawnCmd from 'cross-spawn';
5
+ import { promisify } from 'util';
6
+ import { exec as execCallback } from 'child_process';
7
+ const exec = promisify(execCallback);
8
+ /**
9
+ * Debug logging helper
10
+ */
11
+ export function debugLog(message, ...args) {
12
+ if (process.env.DEBUG || process.env.CCODEX_DEBUG) {
13
+ console.error(`[ccodex debug] ${message}`, ...args);
14
+ }
15
+ }
16
+ /**
17
+ * Execute a command and return stdout
18
+ */
19
+ export async function execCommand(cmd, args = [], timeoutMs = 10000) {
20
+ return new Promise((resolve, reject) => {
21
+ const child = spawnCmd(cmd, args, {
22
+ stdio: ['ignore', 'pipe', 'pipe'],
23
+ });
24
+ let stdout = '';
25
+ let stderr = '';
26
+ child.stdout?.on('data', (data) => {
27
+ stdout += data.toString();
28
+ });
29
+ child.stderr?.on('data', (data) => {
30
+ stderr += data.toString();
31
+ });
32
+ // Add timeout to prevent hangs
33
+ const timeout = setTimeout(() => {
34
+ child.kill();
35
+ reject(new Error(`Command timed out: ${cmd} ${args.join(' ')}`));
36
+ }, timeoutMs);
37
+ child.on('close', (code) => {
38
+ clearTimeout(timeout);
39
+ if (code === 0) {
40
+ resolve(stdout.trim());
41
+ }
42
+ else {
43
+ reject(new Error(`Command failed: ${cmd} ${args.join(' ')}\n${stderr}`));
44
+ }
45
+ });
46
+ child.on('error', (error) => {
47
+ clearTimeout(timeout);
48
+ const err = error instanceof Error ? error : new Error(String(error));
49
+ reject(err);
50
+ });
51
+ });
52
+ }
53
+ /**
54
+ * Cross-platform command existence check
55
+ * Uses Node.js built-in where command on Unix, falls back to PATH search on Windows
56
+ */
57
+ export async function hasCommand(cmd) {
58
+ try {
59
+ const isWindows = process.platform === 'win32';
60
+ if (isWindows) {
61
+ // On Windows, try to spawn the command with --version only
62
+ // Use short timeout to avoid hangs on interactive commands
63
+ try {
64
+ await execCommand(cmd, ['--version'], 3000);
65
+ return true;
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ else {
72
+ // On Unix/macOS, use the which command
73
+ await execCommand('which', [cmd]);
74
+ return true;
75
+ }
76
+ }
77
+ catch (error) {
78
+ debugLog(`hasCommand failed for ${cmd}:`, error);
79
+ return false;
80
+ }
81
+ }
82
+ /**
83
+ * Detect current platform
84
+ * Throws on unsupported platforms
85
+ */
86
+ export function detectPlatform() {
87
+ const osPlatform = platform();
88
+ let os;
89
+ // Explicitly handle supported platforms
90
+ if (osPlatform === 'darwin') {
91
+ os = 'darwin';
92
+ }
93
+ else if (osPlatform === 'linux') {
94
+ os = 'linux';
95
+ }
96
+ else if (osPlatform === 'win32') {
97
+ os = 'windows';
98
+ }
99
+ else {
100
+ throw new Error(`Unsupported platform: ${osPlatform}. ccodex supports darwin, linux, and win32.`);
101
+ }
102
+ // Detect shell
103
+ let shell = null;
104
+ const shellEnv = process.env.SHELL || '';
105
+ if (shellEnv.includes('zsh')) {
106
+ shell = 'zsh';
107
+ }
108
+ else if (shellEnv.includes('bash')) {
109
+ shell = 'bash';
110
+ }
111
+ else if (os === 'windows') {
112
+ shell = process.env.PSModulePath ? 'powershell' : 'cmd';
113
+ }
114
+ return {
115
+ os,
116
+ shell,
117
+ home: homedir(),
118
+ };
119
+ }
120
+ /**
121
+ * Get shell rc file path
122
+ * Returns appropriate config file based on platform and shell
123
+ */
124
+ export function getShellRcFile(platform) {
125
+ if (platform.os === 'windows') {
126
+ // Windows doesn't use rc files the same way
127
+ // Return a placeholder path for documentation purposes
128
+ return join(platform.home, '.ccodex-config.ps1');
129
+ }
130
+ if (platform.shell === 'zsh') {
131
+ return join(platform.home, '.zshrc');
132
+ }
133
+ else if (platform.shell === 'bash') {
134
+ return join(platform.home, '.bashrc');
135
+ }
136
+ return join(platform.home, '.zshrc'); // default to zsh on Unix
137
+ }
138
+ /**
139
+ * Get alias file path
140
+ * Platform-specific alias file location
141
+ */
142
+ export function getAliasFile() {
143
+ const pltfrm = detectPlatform();
144
+ if (pltfrm.os === 'windows') {
145
+ // Windows: use PowerShell profile location or home directory
146
+ return join(pltfrm.home, 'ccodex-alias.ps1');
147
+ }
148
+ // Unix/macOS: use Oh My Zsh custom directory
149
+ return join(pltfrm.home, '.oh-my-zsh', 'custom', 'ccodex-alias.zsh');
150
+ }
151
+ /**
152
+ * Sleep for ms milliseconds
153
+ */
154
+ export function sleep(ms) {
155
+ return new Promise(resolve => setTimeout(resolve, ms));
156
+ }
157
+ /**
158
+ * Make HTTP GET request
159
+ */
160
+ export async function httpGet(url) {
161
+ try {
162
+ const response = await fetch(url);
163
+ const body = await response.text();
164
+ return {
165
+ status: response.status,
166
+ body,
167
+ };
168
+ }
169
+ catch (error) {
170
+ debugLog(`httpGet failed for ${url}:`, error);
171
+ throw error;
172
+ }
173
+ }
174
+ /**
175
+ * Safe JSON parse with runtime validation
176
+ * Returns null if parsing fails or if result doesn't match expected structure
177
+ */
178
+ export function safeJsonParse(str, validator) {
179
+ try {
180
+ const parsed = JSON.parse(str);
181
+ // If validator provided, use it for runtime type checking
182
+ if (validator) {
183
+ return validator(parsed) ? parsed : null;
184
+ }
185
+ // Without validator, return as unknown cast to T
186
+ // Caller is responsible for validation
187
+ return parsed;
188
+ }
189
+ catch (error) {
190
+ debugLog('safeJsonParse failed:', str.substring(0, 100), error);
191
+ return null;
192
+ }
193
+ }
194
+ /**
195
+ * Check if running in terminal
196
+ */
197
+ export function isInteractive() {
198
+ return process.stdin.isTTY;
199
+ }
200
+ /**
201
+ * Check if file exists
202
+ */
203
+ export function fileExists(path) {
204
+ return existsSync(path);
205
+ }
206
+ /**
207
+ * Ensure directory exists
208
+ */
209
+ export async function ensureDir(path) {
210
+ const fs = await import('fs/promises');
211
+ try {
212
+ await fs.mkdir(path, { recursive: true });
213
+ }
214
+ catch (error) {
215
+ debugLog(`ensureDir failed for ${path}:`, error);
216
+ throw error;
217
+ }
218
+ }
219
+ /**
220
+ * Read file content
221
+ */
222
+ export async function readFile(path) {
223
+ const fs = await import('fs/promises');
224
+ return await fs.readFile(path, 'utf-8');
225
+ }
226
+ /**
227
+ * Write file content
228
+ */
229
+ export async function writeFile(path, content) {
230
+ const fs = await import('fs/promises');
231
+ await fs.writeFile(path, content, 'utf-8');
232
+ }
233
+ /**
234
+ * Append to file
235
+ */
236
+ export async function appendFile(path, content) {
237
+ const fs = await import('fs/promises');
238
+ await fs.appendFile(path, content, 'utf-8');
239
+ }
240
+ /**
241
+ * Make file executable
242
+ * Only applies chmod on Unix/macOS; no-op on Windows
243
+ */
244
+ export async function makeExecutable(path) {
245
+ const fs = await import('fs/promises');
246
+ // chmod doesn't work on Windows the same way
247
+ if (process.platform === 'win32') {
248
+ debugLog(`Skipping chmod on Windows for ${path}`);
249
+ return;
250
+ }
251
+ const mode = 0o755;
252
+ try {
253
+ await fs.chmod(path, mode);
254
+ }
255
+ catch (error) {
256
+ debugLog(`makeExecutable failed for ${path}:`, error);
257
+ // Don't throw - file permission issues shouldn't break the flow
258
+ }
259
+ }
260
+ /**
261
+ * Copy file
262
+ */
263
+ export async function copyFile(src, dest) {
264
+ const fs = await import('fs/promises');
265
+ await fs.copyFile(src, dest);
266
+ }
267
+ /**
268
+ * Get user ID (cross-platform)
269
+ */
270
+ export function getUid() {
271
+ if (typeof process.getuid === 'function') {
272
+ return process.getuid();
273
+ }
274
+ // Fallback for Windows - use a sensible default
275
+ // On Windows, we'd typically use username or SID instead
276
+ return 1000;
277
+ }
278
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@tuannvm/ccodex",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript reimplementation of ccodex - run Claude Code with OpenAI GPT models via CLIProxyAPI",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "ccodex": "./dist/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "prepack": "npm run build",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "keywords": [
22
+ "claude",
23
+ "claude-code",
24
+ "openai",
25
+ "gpt",
26
+ "codex",
27
+ "cli"
28
+ ],
29
+ "license": "MIT",
30
+ "author": "tuannvm",
31
+ "devDependencies": {
32
+ "@types/cross-spawn": "^6.0.6",
33
+ "@types/node": "^20.0.0",
34
+ "typescript": "^5.0.0"
35
+ },
36
+ "dependencies": {
37
+ "chalk": "^5.3.0",
38
+ "commander": "^12.0.0",
39
+ "cross-spawn": "^7.0.3"
40
+ },
41
+ "engines": {
42
+ "node": ">=18.0.0"
43
+ }
44
+ }