@tuannvm/ccodex 0.3.0 → 0.3.3
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/aliases.d.ts.map +1 -1
- package/dist/aliases.js +31 -31
- package/dist/aliases.js.map +1 -1
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +87 -82
- package/dist/claude.js.map +1 -1
- package/dist/cli.js +60 -59
- package/dist/cli.js.map +1 -1
- package/dist/config.js +7 -7
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/powershell.d.ts.map +1 -1
- package/dist/powershell.js +11 -13
- package/dist/powershell.js.map +1 -1
- package/dist/proxy.d.ts +1 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +230 -203
- package/dist/proxy.js.map +1 -1
- package/dist/status.d.ts +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +28 -21
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +82 -87
- package/dist/utils.js.map +1 -1
- package/package.json +9 -1
package/dist/aliases.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../src/aliases.ts"],"names":[],"mappings":"AAkGA;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../src/aliases.ts"],"names":[],"mappings":"AAkGA;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsE/D;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBrE"}
|
package/dist/aliases.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { join, dirname } from
|
|
2
|
-
import { getShellRcFile, ensureDir, appendFile, readFile, fileExists, detectPlatform, isInteractive, } from
|
|
3
|
-
import { installPowerShellAliases, isPowerShellIntegrationConfigured } from
|
|
1
|
+
import { join, dirname } from "path";
|
|
2
|
+
import { getShellRcFile, ensureDir, appendFile, readFile, fileExists, detectPlatform, isInteractive, } from "./utils.js";
|
|
3
|
+
import { installPowerShellAliases, isPowerShellIntegrationConfigured } from "./powershell.js";
|
|
4
4
|
// Use npx directly - no local bin installation
|
|
5
|
-
const CCODEX_NPX_CMD =
|
|
5
|
+
const CCODEX_NPX_CMD = "npx -y @tuannvm/ccodex";
|
|
6
6
|
/**
|
|
7
7
|
* Generate alias content for Unix shells (zsh/bash)
|
|
8
8
|
* Direct embedding into rc files - no separate alias file
|
|
@@ -38,7 +38,7 @@ fi
|
|
|
38
38
|
* Checks for our START marker to identify our alias block
|
|
39
39
|
*/
|
|
40
40
|
function hasCcodexBlock(content) {
|
|
41
|
-
return content.includes(
|
|
41
|
+
return content.includes("# >>> ccodex aliases START >>>");
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Remove existing ccodex alias block from content
|
|
@@ -48,7 +48,7 @@ function hasCcodexBlock(content) {
|
|
|
48
48
|
function removeCcodexBlock(content) {
|
|
49
49
|
// Match the entire ccodex alias block from START marker to END marker
|
|
50
50
|
const blockRegex = /# >>> ccodex aliases START >>>[\s\S]*?# <<< ccodex aliases END <<<\n?/g;
|
|
51
|
-
return content.replace(blockRegex,
|
|
51
|
+
return content.replace(blockRegex, "").trimEnd();
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Add aliases to shell rc file
|
|
@@ -59,9 +59,9 @@ async function addAliasesToRc(rcFile) {
|
|
|
59
59
|
// Ensure rc file directory exists
|
|
60
60
|
await ensureDir(dirname(rcFile));
|
|
61
61
|
// Create rc file if it doesn't exist
|
|
62
|
-
const fs = await import(
|
|
62
|
+
const fs = await import("fs/promises");
|
|
63
63
|
try {
|
|
64
|
-
await fs.writeFile(rcFile,
|
|
64
|
+
await fs.writeFile(rcFile, "", { flag: "wx" });
|
|
65
65
|
}
|
|
66
66
|
catch {
|
|
67
67
|
// File exists, that's fine
|
|
@@ -72,7 +72,7 @@ async function addAliasesToRc(rcFile) {
|
|
|
72
72
|
// Remove existing block to prevent duplicates
|
|
73
73
|
content = removeCcodexBlock(content);
|
|
74
74
|
// Write back the cleaned content
|
|
75
|
-
await fs.writeFile(rcFile, content +
|
|
75
|
+
await fs.writeFile(rcFile, content + "\n", "utf-8");
|
|
76
76
|
console.log(`Cleaned existing ccodex aliases: ${rcFile}`);
|
|
77
77
|
}
|
|
78
78
|
// Append fresh aliases
|
|
@@ -86,10 +86,10 @@ async function addAliasesToRc(rcFile) {
|
|
|
86
86
|
export async function configureShellIntegration() {
|
|
87
87
|
const platform = detectPlatform();
|
|
88
88
|
// On Windows, use PowerShell
|
|
89
|
-
if (platform.os ===
|
|
90
|
-
console.log(
|
|
89
|
+
if (platform.os === "windows") {
|
|
90
|
+
console.log("\nConfiguring PowerShell integration...");
|
|
91
91
|
await installPowerShellAliases();
|
|
92
|
-
console.log(
|
|
92
|
+
console.log("PowerShell aliases installed. Restart PowerShell to use them.");
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
95
|
// Unix/macOS: use zsh/bash
|
|
@@ -102,14 +102,14 @@ export async function configureShellIntegration() {
|
|
|
102
102
|
}
|
|
103
103
|
// Interactive: ask user
|
|
104
104
|
// Determine default based on current shell
|
|
105
|
-
const defaultChoice = platform.shell ===
|
|
106
|
-
const defaultName = platform.shell ===
|
|
107
|
-
console.log(
|
|
108
|
-
console.log(
|
|
109
|
-
console.log(
|
|
110
|
-
console.log(
|
|
111
|
-
console.log(
|
|
112
|
-
const readline = await import(
|
|
105
|
+
const defaultChoice = platform.shell === "bash" ? "2" : "1";
|
|
106
|
+
const defaultName = platform.shell === "bash" ? "~/.bashrc" : "~/.zshrc";
|
|
107
|
+
console.log("\nChoose shell rc file for ccodex aliases:");
|
|
108
|
+
console.log(" 1) ~/.zshrc");
|
|
109
|
+
console.log(" 2) ~/.bashrc");
|
|
110
|
+
console.log(" 3) Both");
|
|
111
|
+
console.log(" 4) Skip (manual setup)");
|
|
112
|
+
const readline = await import("readline");
|
|
113
113
|
const rl = readline.createInterface({
|
|
114
114
|
input: process.stdin,
|
|
115
115
|
output: process.stdout,
|
|
@@ -120,24 +120,24 @@ export async function configureShellIntegration() {
|
|
|
120
120
|
resolve(answer || defaultChoice);
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
|
-
const zshrc = join(platform.home,
|
|
124
|
-
const bashrc = join(platform.home,
|
|
123
|
+
const zshrc = join(platform.home, ".zshrc");
|
|
124
|
+
const bashrc = join(platform.home, ".bashrc");
|
|
125
125
|
switch (choice) {
|
|
126
|
-
case
|
|
126
|
+
case "1":
|
|
127
127
|
await addAliasesToRc(zshrc);
|
|
128
128
|
break;
|
|
129
|
-
case
|
|
129
|
+
case "2":
|
|
130
130
|
await addAliasesToRc(bashrc);
|
|
131
131
|
break;
|
|
132
|
-
case
|
|
132
|
+
case "3":
|
|
133
133
|
await addAliasesToRc(zshrc);
|
|
134
134
|
await addAliasesToRc(bashrc);
|
|
135
135
|
break;
|
|
136
|
-
case
|
|
137
|
-
console.log(
|
|
136
|
+
case "4":
|
|
137
|
+
console.log("Skipped rc integration.");
|
|
138
138
|
break;
|
|
139
139
|
default:
|
|
140
|
-
console.log(
|
|
140
|
+
console.log("Invalid choice. Using ~/.zshrc");
|
|
141
141
|
await addAliasesToRc(zshrc);
|
|
142
142
|
}
|
|
143
143
|
}
|
|
@@ -149,12 +149,12 @@ export async function configureShellIntegration() {
|
|
|
149
149
|
export async function isShellIntegrationConfigured() {
|
|
150
150
|
const platform = detectPlatform();
|
|
151
151
|
// On Windows, check PowerShell integration
|
|
152
|
-
if (platform.os ===
|
|
152
|
+
if (platform.os === "windows") {
|
|
153
153
|
return await isPowerShellIntegrationConfigured();
|
|
154
154
|
}
|
|
155
155
|
// Check both possible rc files (user may have installed to either)
|
|
156
|
-
const zshrc = join(platform.home,
|
|
157
|
-
const bashrc = join(platform.home,
|
|
156
|
+
const zshrc = join(platform.home, ".zshrc");
|
|
157
|
+
const bashrc = join(platform.home, ".bashrc");
|
|
158
158
|
for (const rcFile of [zshrc, bashrc]) {
|
|
159
159
|
if (fileExists(rcFile)) {
|
|
160
160
|
const content = await readFile(rcFile);
|
package/dist/aliases.js.map
CHANGED
|
@@ -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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAoCA;;;;;;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,CA4CvD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2I7D"}
|
package/dist/claude.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import spawnCmd from
|
|
2
|
-
import { join } from
|
|
3
|
-
import { homedir } from
|
|
4
|
-
import { hasCommand, getCommandPath, ensureDir, getUid, fileExists, requireTrustedCommand } from
|
|
5
|
-
import { startProxy, checkAuthConfigured, launchLogin, waitForAuth } from
|
|
1
|
+
import spawnCmd from "cross-spawn";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { hasCommand, getCommandPath, ensureDir, getUid, fileExists, requireTrustedCommand, } from "./utils.js";
|
|
5
|
+
import { startProxy, checkAuthConfigured, launchLogin, waitForAuth } from "./proxy.js";
|
|
6
6
|
// Track locally installed Claude CLI path for this process
|
|
7
7
|
let installedClaudePath = null;
|
|
8
8
|
/**
|
|
@@ -13,14 +13,14 @@ let installedClaudePath = null;
|
|
|
13
13
|
*/
|
|
14
14
|
function getPersistentLocalClaudePath() {
|
|
15
15
|
const home = homedir();
|
|
16
|
-
if (process.platform ===
|
|
16
|
+
if (process.platform === "win32") {
|
|
17
17
|
// Windows: npm installs to AppData/local/prefix, with .cmd wrappers
|
|
18
18
|
// Try claude.cmd first (npm wrapper), then claude.exe (actual binary)
|
|
19
|
-
const localPrefix = join(home,
|
|
20
|
-
return join(localPrefix,
|
|
19
|
+
const localPrefix = join(home, "AppData", "Local", "ccodex", "npm");
|
|
20
|
+
return join(localPrefix, "node_modules", ".bin", "claude.cmd");
|
|
21
21
|
}
|
|
22
22
|
// Unix/macOS: ~/.local/ccodex/npm/node_modules/.bin/claude
|
|
23
|
-
return join(home,
|
|
23
|
+
return join(home, ".local", "ccodex", "npm", "node_modules", ".bin", "claude");
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Detect Claude Code installation
|
|
@@ -42,9 +42,9 @@ export async function detectClaudeCommand() {
|
|
|
42
42
|
return { cmd: persistentLocal, path: persistentLocal };
|
|
43
43
|
}
|
|
44
44
|
// 3. Check system PATH for global installation
|
|
45
|
-
if (await hasCommand(
|
|
46
|
-
const resolved = await getCommandPath(
|
|
47
|
-
return { cmd:
|
|
45
|
+
if (await hasCommand("claude")) {
|
|
46
|
+
const resolved = await getCommandPath("claude");
|
|
47
|
+
return { cmd: "claude", path: resolved };
|
|
48
48
|
}
|
|
49
49
|
return { cmd: null, path: null };
|
|
50
50
|
}
|
|
@@ -52,18 +52,18 @@ export async function detectClaudeCommand() {
|
|
|
52
52
|
* Helper to run npm install and capture stderr
|
|
53
53
|
*/
|
|
54
54
|
async function runNpmInstall(args) {
|
|
55
|
-
const npmPath = await requireTrustedCommand(
|
|
56
|
-
const spawn = (await import(
|
|
55
|
+
const npmPath = await requireTrustedCommand("npm");
|
|
56
|
+
const spawn = (await import("cross-spawn")).default;
|
|
57
57
|
return new Promise((resolve, reject) => {
|
|
58
|
-
const child = spawn(npmPath, args, { stdio: [
|
|
59
|
-
let stderr =
|
|
60
|
-
child.stderr?.on(
|
|
58
|
+
const child = spawn(npmPath, args, { stdio: ["ignore", "inherit", "pipe"] });
|
|
59
|
+
let stderr = "";
|
|
60
|
+
child.stderr?.on("data", (d) => {
|
|
61
61
|
const s = d.toString();
|
|
62
62
|
stderr += s;
|
|
63
63
|
process.stderr.write(s);
|
|
64
64
|
});
|
|
65
|
-
child.on(
|
|
66
|
-
child.on(
|
|
65
|
+
child.on("error", reject);
|
|
66
|
+
child.on("close", (code) => resolve({ ok: code === 0, stderr }));
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
@@ -71,34 +71,39 @@ async function runNpmInstall(args) {
|
|
|
71
71
|
*/
|
|
72
72
|
export async function installClaudeCode() {
|
|
73
73
|
// Check if npm is available
|
|
74
|
-
if (!(await hasCommand(
|
|
75
|
-
throw new Error(
|
|
74
|
+
if (!(await hasCommand("npm"))) {
|
|
75
|
+
throw new Error("npm not found. Install Node.js with npm first.");
|
|
76
76
|
}
|
|
77
|
-
console.log(
|
|
77
|
+
console.log("Installing Claude Code CLI via npm...");
|
|
78
78
|
// Try global install first
|
|
79
|
-
const global = await runNpmInstall([
|
|
79
|
+
const global = await runNpmInstall(["install", "-g", "@anthropic-ai/claude-code"]);
|
|
80
80
|
if (global.ok) {
|
|
81
|
-
console.log(
|
|
81
|
+
console.log("Claude Code CLI installed successfully via npm global");
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
// Check if it was a permission error
|
|
85
85
|
const permissionDenied = /EACCES|permission denied/i.test(global.stderr);
|
|
86
86
|
if (!permissionDenied) {
|
|
87
|
-
throw new Error(
|
|
87
|
+
throw new Error("Failed to install Claude Code CLI");
|
|
88
88
|
}
|
|
89
89
|
// Fallback to local install
|
|
90
90
|
// Use platform-specific local prefix path
|
|
91
91
|
let localPrefix;
|
|
92
|
-
if (process.platform ===
|
|
93
|
-
localPrefix = join(homedir(),
|
|
92
|
+
if (process.platform === "win32") {
|
|
93
|
+
localPrefix = join(homedir(), "AppData", "Local", "ccodex", "npm");
|
|
94
94
|
}
|
|
95
95
|
else {
|
|
96
|
-
localPrefix = join(homedir(),
|
|
96
|
+
localPrefix = join(homedir(), ".local", "ccodex", "npm");
|
|
97
97
|
}
|
|
98
98
|
console.log(`Global install denied. Falling back to local prefix: ${localPrefix}`);
|
|
99
|
-
const local = await runNpmInstall([
|
|
99
|
+
const local = await runNpmInstall([
|
|
100
|
+
"install",
|
|
101
|
+
"--prefix",
|
|
102
|
+
localPrefix,
|
|
103
|
+
"@anthropic-ai/claude-code",
|
|
104
|
+
]);
|
|
100
105
|
if (!local.ok) {
|
|
101
|
-
throw new Error(
|
|
106
|
+
throw new Error("Failed to install Claude Code CLI (global + local fallback both failed)");
|
|
102
107
|
}
|
|
103
108
|
// Store the installed path using the persistent path function
|
|
104
109
|
installedClaudePath = getPersistentLocalClaudePath();
|
|
@@ -111,7 +116,7 @@ export async function runClaude(args) {
|
|
|
111
116
|
// Detect Claude CLI using comprehensive detection (process-local, persistent local, system PATH)
|
|
112
117
|
const claudeCmd = await detectClaudeCommand();
|
|
113
118
|
if (!claudeCmd.cmd) {
|
|
114
|
-
throw new Error(
|
|
119
|
+
throw new Error("claude CLI not found in PATH\nInstall Claude Code CLI first, then rerun: npx -y @tuannvm/ccodex");
|
|
115
120
|
}
|
|
116
121
|
// Use detected command (absolute path or command name)
|
|
117
122
|
const claudeExe = claudeCmd.cmd;
|
|
@@ -120,64 +125,64 @@ export async function runClaude(args) {
|
|
|
120
125
|
// Check auth, launch login if needed
|
|
121
126
|
const auth = await checkAuthConfigured();
|
|
122
127
|
if (!auth.configured) {
|
|
123
|
-
console.log(
|
|
128
|
+
console.log("ChatGPT/Codex auth not configured. Starting login...");
|
|
124
129
|
await launchLogin();
|
|
125
130
|
await waitForAuth();
|
|
126
131
|
}
|
|
127
132
|
// Set up temp directory (cross-platform)
|
|
128
133
|
const uid = getUid();
|
|
129
134
|
let tmpBase;
|
|
130
|
-
if (process.platform ===
|
|
135
|
+
if (process.platform === "win32") {
|
|
131
136
|
tmpBase = process.env.TEMP || process.env.TMP || `C:\\Temp\\claude-${uid}`;
|
|
132
137
|
}
|
|
133
138
|
else {
|
|
134
139
|
tmpBase = process.env.TMPDIR || `/tmp/claude-${uid}`;
|
|
135
140
|
}
|
|
136
|
-
const tmpDir = join(tmpBase,
|
|
141
|
+
const tmpDir = join(tmpBase, "");
|
|
137
142
|
await ensureDir(tmpDir);
|
|
138
143
|
// Get user home directory (cross-platform)
|
|
139
|
-
const { homedir } = await import(
|
|
144
|
+
const { homedir } = await import("os");
|
|
140
145
|
const userHome = homedir();
|
|
141
146
|
// Environment for Claude with proxy
|
|
142
147
|
// Minimal allowlist for subprocess environment.
|
|
143
148
|
// Default-deny: only pass values required for process execution and terminal UX.
|
|
144
149
|
const allowedEnvKeys = new Set([
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
150
|
+
"PATH",
|
|
151
|
+
"HOME",
|
|
152
|
+
"USERPROFILE",
|
|
153
|
+
"SYSTEMROOT",
|
|
154
|
+
"WINDIR",
|
|
155
|
+
"COMSPEC",
|
|
156
|
+
"PATHEXT",
|
|
157
|
+
"TMPDIR",
|
|
158
|
+
"TMP",
|
|
159
|
+
"TEMP",
|
|
160
|
+
"LANG",
|
|
161
|
+
"LC_ALL",
|
|
162
|
+
"LC_CTYPE",
|
|
163
|
+
"TERM",
|
|
164
|
+
"COLORTERM",
|
|
165
|
+
"NO_COLOR",
|
|
166
|
+
"FORCE_COLOR",
|
|
167
|
+
"CI",
|
|
168
|
+
"SHELL",
|
|
169
|
+
"PWD",
|
|
170
|
+
"OLDPWD",
|
|
171
|
+
"XDG_CONFIG_HOME",
|
|
172
|
+
"XDG_CACHE_HOME",
|
|
173
|
+
"XDG_DATA_HOME",
|
|
169
174
|
// TLS/certificate support for enterprise environments
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
175
|
+
"SSL_CERT_FILE",
|
|
176
|
+
"SSL_CERT_DIR",
|
|
177
|
+
"NODE_EXTRA_CA_CERTS",
|
|
178
|
+
"NODE_TLS_REJECT_UNAUTHORIZED",
|
|
174
179
|
]);
|
|
175
180
|
const env = {};
|
|
176
181
|
for (const [key, value] of Object.entries(process.env)) {
|
|
177
182
|
if (value === undefined)
|
|
178
183
|
continue;
|
|
179
184
|
// On Windows env keys are case-insensitive; normalize for allowlist matching.
|
|
180
|
-
const normalized = process.platform ===
|
|
185
|
+
const normalized = process.platform === "win32" ? key.toUpperCase() : key;
|
|
181
186
|
const allowed = allowedEnvKeys.has(normalized);
|
|
182
187
|
if (allowed) {
|
|
183
188
|
env[key] = value;
|
|
@@ -185,37 +190,37 @@ export async function runClaude(args) {
|
|
|
185
190
|
}
|
|
186
191
|
// Set proxy config - dummy token is replaced by CLIProxyAPI's OAuth credentials
|
|
187
192
|
// The proxy handles ChatGPT authentication, this is just a format placeholder
|
|
188
|
-
env.ANTHROPIC_AUTH_TOKEN =
|
|
189
|
-
env.ANTHROPIC_BASE_URL =
|
|
190
|
-
env.API_TIMEOUT_MS =
|
|
193
|
+
env.ANTHROPIC_AUTH_TOKEN = "sk-dummy";
|
|
194
|
+
env.ANTHROPIC_BASE_URL = "http://127.0.0.1:8317";
|
|
195
|
+
env.API_TIMEOUT_MS = "120000";
|
|
191
196
|
// Model mappings to GPT-5.3 Codex
|
|
192
|
-
env.ANTHROPIC_DEFAULT_OPUS_MODEL =
|
|
193
|
-
env.ANTHROPIC_MODEL =
|
|
194
|
-
env.ANTHROPIC_DEFAULT_SONNET_MODEL =
|
|
195
|
-
env.ANTHROPIC_DEFAULT_HAIKU_MODEL =
|
|
196
|
-
env.CLAUDE_CODE_SUBAGENT_MODEL =
|
|
197
|
+
env.ANTHROPIC_DEFAULT_OPUS_MODEL = "gpt-5.3-codex(xhigh)";
|
|
198
|
+
env.ANTHROPIC_MODEL = "gpt-5.3-codex(medium)";
|
|
199
|
+
env.ANTHROPIC_DEFAULT_SONNET_MODEL = "gpt-5.3-codex(high)";
|
|
200
|
+
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "gpt-5.3-codex(low)";
|
|
201
|
+
env.CLAUDE_CODE_SUBAGENT_MODEL = "gpt-5.3-codex(medium)";
|
|
197
202
|
// Other settings
|
|
198
203
|
env.TMPDIR = tmpDir;
|
|
199
204
|
// On Windows, also set TEMP and TMP for compatibility
|
|
200
|
-
if (process.platform ===
|
|
205
|
+
if (process.platform === "win32") {
|
|
201
206
|
env.TEMP = tmpDir;
|
|
202
207
|
env.TMP = tmpDir;
|
|
203
208
|
}
|
|
204
|
-
env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC =
|
|
205
|
-
env.DISABLE_COST_WARNINGS =
|
|
206
|
-
env.DISABLE_TELEMETRY =
|
|
207
|
-
env.DISABLE_ERROR_REPORTING =
|
|
208
|
-
env.CLAUDE_CONFIG_DIR = join(userHome,
|
|
209
|
+
env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1";
|
|
210
|
+
env.DISABLE_COST_WARNINGS = "1";
|
|
211
|
+
env.DISABLE_TELEMETRY = "1";
|
|
212
|
+
env.DISABLE_ERROR_REPORTING = "1";
|
|
213
|
+
env.CLAUDE_CONFIG_DIR = join(userHome, ".claude-openai");
|
|
209
214
|
// Spawn Claude with modified environment
|
|
210
215
|
const child = spawnCmd(claudeExe, args, {
|
|
211
|
-
stdio:
|
|
216
|
+
stdio: "inherit",
|
|
212
217
|
env,
|
|
213
218
|
});
|
|
214
219
|
return new Promise((resolve, reject) => {
|
|
215
|
-
child.on(
|
|
220
|
+
child.on("close", (code, signal) => {
|
|
216
221
|
// Exit code 0 means success
|
|
217
222
|
// SIGINT (Ctrl+C) or SIGTERM are user-initiated, treat as success
|
|
218
|
-
if (code === 0 || signal ===
|
|
223
|
+
if (code === 0 || signal === "SIGINT" || signal === "SIGTERM") {
|
|
219
224
|
resolve();
|
|
220
225
|
}
|
|
221
226
|
else if (code === 130) {
|
|
@@ -227,7 +232,7 @@ export async function runClaude(args) {
|
|
|
227
232
|
reject(new Error(`Claude CLI exited with code ${code}`));
|
|
228
233
|
}
|
|
229
234
|
});
|
|
230
|
-
child.on(
|
|
235
|
+
child.on("error", (error) => {
|
|
231
236
|
reject(error);
|
|
232
237
|
});
|
|
233
238
|
});
|
package/dist/claude.js.map
CHANGED
|
@@ -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,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|