@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.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/aliases.d.ts +17 -0
- package/dist/aliases.d.ts.map +1 -0
- package/dist/aliases.js +175 -0
- package/dist/aliases.js.map +1 -0
- package/dist/claude.d.ts +16 -0
- package/dist/claude.d.ts.map +1 -0
- package/dist/claude.js +133 -0
- package/dist/claude.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/powershell.d.ts +21 -0
- package/dist/powershell.d.ts.map +1 -0
- package/dist/powershell.js +106 -0
- package/dist/powershell.js.map +1 -0
- package/dist/proxy.d.ts +30 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +231 -0
- package/dist/proxy.js.map +1 -0
- package/dist/status.d.ts +14 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +73 -0
- package/dist/status.js.map +1 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +83 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +278 -0
- package/dist/utils.js.map +1 -0
- package/package.json +44 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -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
|
+
}
|