@codexapi/codexclaude 2.0.4 → 2.0.6
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/CUSTOMIZATIONS.md +5 -5
- package/README.md +8 -8
- package/bin/codexclaude.js +59 -17
- package/codexclaude.md +17 -5
- package/package.json +3 -3
package/CUSTOMIZATIONS.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
## Upstream Runtime
|
|
6
6
|
|
|
7
7
|
- Official package: `@openai/codex`
|
|
8
|
-
- Pinned runtime version: `0.
|
|
9
|
-
- Local launcher version: `2.0.
|
|
8
|
+
- Pinned runtime version: `0.135.0`
|
|
9
|
+
- Local launcher version: `2.0.6`
|
|
10
10
|
|
|
11
11
|
## Launcher Behavior
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
The launcher writes a Codex model provider named `codexapi`:
|
|
24
24
|
|
|
25
|
-
- `base_url = "https://codexapi.pro/v1"`
|
|
25
|
+
- `base_url = "https://codexapi.pro/v1"` for ChatGPT-5.5 and Deepseek v4 Budget, or `https://api-chicago.codexapi.pro/v1` for Opus 4.8.
|
|
26
26
|
- `wire_api = "responses"`
|
|
27
27
|
- `supports_websockets = false`
|
|
28
28
|
- `experimental_bearer_token` set to the customer API username
|
|
@@ -30,13 +30,13 @@ The launcher writes a Codex model provider named `codexapi`:
|
|
|
30
30
|
|
|
31
31
|
## Runtime Defaults
|
|
32
32
|
|
|
33
|
-
- Model: selected by the user, defaulting to `gpt-5.5`; supported launcher choices are `gpt-5.5`, `claude-opus-4-
|
|
33
|
+
- Model: selected by the user, defaulting to `gpt-5.5`; supported launcher choices are `gpt-5.5`, `claude-opus-4-8`, and `deepseek-v4-pro`.
|
|
34
34
|
- Reasoning effort: `high`
|
|
35
35
|
- Service tier: `fast`
|
|
36
36
|
- Approval policy: `never`
|
|
37
37
|
- Sandbox mode: `danger-full-access`
|
|
38
38
|
- TUI status line: `model-with-reasoning`, `fast-mode`, `current-dir`
|
|
39
|
-
- Opus 4.
|
|
39
|
+
- Opus 4.8 Responses traffic is always routed through the Chicago CodexAPI.pro Claude tool-call bridge, regardless of the selected account/dashboard region.
|
|
40
40
|
- Deepseek v4 Budget Responses traffic is routed through CodexAPI.pro's Deepseek-compatible gateway.
|
|
41
41
|
|
|
42
42
|
## Wallet Display
|
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# codexclaude
|
|
2
2
|
|
|
3
|
-
`codexclaude` is the CodexAPI.pro launcher for customers who want one coding CLI that can use ChatGPT-5.5, Opus 4.
|
|
3
|
+
`codexclaude` is the CodexAPI.pro launcher for customers who want one coding CLI that can use ChatGPT-5.5, Opus 4.8, or Deepseek v4 Budget against the same CodexAPI.pro Token Wallet.
|
|
4
4
|
|
|
5
|
-
Version `2.0.
|
|
5
|
+
Version `2.0.6` launches the official OpenAI Codex CLI `0.135.0` package and applies CodexAPI.pro account, wallet, model, and Full Access defaults before Codex starts.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g
|
|
10
|
+
npm install -g @codexapi/codexclaude@latest
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
This installs the current `codexclaude` launcher from npm.
|
|
@@ -17,7 +17,7 @@ This installs the current `codexclaude` launcher from npm.
|
|
|
17
17
|
CodexAPI.pro checks the CodexAPI.pro API and npm at startup. If a newer required launcher is available, the app stops before coding starts and shows the exact **Update Now** command:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npm install -g
|
|
20
|
+
npm install -g @codexapi/codexclaude@latest
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
This does not delete your local Codex session history. The update only replaces the `codexclaude` launcher and refreshes the CodexAPI.pro provider config.
|
|
@@ -48,7 +48,7 @@ Switch model:
|
|
|
48
48
|
codexclaude model
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Available model labels are `ChatGPT-5.5`, `Opus 4.
|
|
51
|
+
Available model labels are `ChatGPT-5.5`, `Opus 4.8`, and `Deepseek v4 Budget`. All three use the CodexAPI.pro Responses-compatible endpoint and the same customer Token Wallet.
|
|
52
52
|
|
|
53
53
|
Show current launcher changes:
|
|
54
54
|
|
|
@@ -73,12 +73,12 @@ codexclaude status
|
|
|
73
73
|
## Preserved CodexAPI.pro Customizations
|
|
74
74
|
|
|
75
75
|
- Dashboard username or email plus password login.
|
|
76
|
-
- ChatGPT-5.5, Opus 4.
|
|
76
|
+
- ChatGPT-5.5, Opus 4.8, or Deepseek v4 Budget model selection.
|
|
77
77
|
- CodexAPI.pro Responses-compatible provider at `https://codexapi.pro/v1`.
|
|
78
78
|
- Full Access defaults: approval policy `never` and sandbox mode `danger-full-access`.
|
|
79
79
|
- High reasoning and fast service tier defaults.
|
|
80
|
-
- Official Codex `0.
|
|
80
|
+
- Official Codex `0.135.0` runtime with the current profile-compatible config enabled.
|
|
81
81
|
- Token Wallet balance lookup before launch and in `codexclaude status`.
|
|
82
|
-
- Opus 4.
|
|
82
|
+
- Opus 4.8 tool-call compatibility through the Chicago CodexAPI.pro Responses gateway.
|
|
83
83
|
- Backend-identifying request headers so CodexAPI.pro can enforce subscription plan rules server-side.
|
|
84
84
|
- npm latest-version checks before coding starts, with an explicit update command when a newer required launcher exists.
|
package/bin/codexclaude.js
CHANGED
|
@@ -10,12 +10,14 @@ import { stdin as input, stdout as output } from "node:process";
|
|
|
10
10
|
|
|
11
11
|
const require = createRequire(import.meta.url);
|
|
12
12
|
|
|
13
|
-
const APP_VERSION = "2.0.
|
|
14
|
-
const CODEX_VERSION = "0.
|
|
13
|
+
const APP_VERSION = "2.0.6";
|
|
14
|
+
const CODEX_VERSION = "0.135.0";
|
|
15
15
|
const CODEX_REASONING_EFFORT = "high";
|
|
16
16
|
const CODEX_SERVICE_TIER = "fast";
|
|
17
17
|
const API_ORIGIN = (process.env.CODEXCLAUDE_API_ORIGIN || "https://codexapi.pro").replace(/\/+$/, "");
|
|
18
18
|
const API_BASE_URL = `${API_ORIGIN}/v1`;
|
|
19
|
+
const CHICAGO_API_ORIGIN = "https://api-chicago.codexapi.pro";
|
|
20
|
+
const CHICAGO_API_BASE_URL = `${CHICAGO_API_ORIGIN}/v1`;
|
|
19
21
|
const VERSION_CHECK_PATH = "/api/v1/codexclaude/version";
|
|
20
22
|
const NPM_PACKAGE_NAME = "@codexapi/codexclaude";
|
|
21
23
|
const NPM_LATEST_URL = "https://registry.npmjs.org/@codexapi%2Fcodexclaude/latest";
|
|
@@ -32,10 +34,10 @@ const MODELS = {
|
|
|
32
34
|
label: "ChatGPT-5.5",
|
|
33
35
|
aliases: ["1", "gpt", "gpt-5.5", "chatgpt", "chatgpt-5.5"],
|
|
34
36
|
},
|
|
35
|
-
"claude-opus-4-
|
|
36
|
-
id: "claude-opus-4-
|
|
37
|
-
label: "Opus 4.
|
|
38
|
-
aliases: ["2", "opus", "opus-4.7", "claude", "claude-opus-4-7"],
|
|
37
|
+
"claude-opus-4-8": {
|
|
38
|
+
id: "claude-opus-4-8",
|
|
39
|
+
label: "Opus 4.8",
|
|
40
|
+
aliases: ["2", "opus", "opus-4.8", "opus-4.7", "claude", "claude-opus-4-8", "claude-opus-4-7"],
|
|
39
41
|
},
|
|
40
42
|
"deepseek-v4-pro": {
|
|
41
43
|
id: "deepseek-v4-pro",
|
|
@@ -102,7 +104,7 @@ codexclaude ${APP_VERSION}
|
|
|
102
104
|
|
|
103
105
|
Commands:
|
|
104
106
|
codexclaude login Login with CodexAPI.pro username/email and password
|
|
105
|
-
codexclaude model Select ChatGPT-5.5, Opus 4.
|
|
107
|
+
codexclaude model Select ChatGPT-5.5, Opus 4.8, or Deepseek v4 Budget
|
|
106
108
|
codexclaude changelog Show the latest CodexAPI.pro launcher changes
|
|
107
109
|
codexclaude setup Rewrite ~/.codex/config.toml with Full Access defaults
|
|
108
110
|
codexclaude start Start Codex with --search
|
|
@@ -150,7 +152,8 @@ async function loginFlow() {
|
|
|
150
152
|
throw new Error("Login succeeded but no API username was returned.");
|
|
151
153
|
}
|
|
152
154
|
const existing = readConfig();
|
|
153
|
-
const
|
|
155
|
+
const normalizedExisting = normalizeConfig(existing);
|
|
156
|
+
const selectedModel = await askModel(rl, normalizedExisting?.model || "gpt-5.5");
|
|
154
157
|
const config = {
|
|
155
158
|
version: APP_VERSION,
|
|
156
159
|
apiOrigin: API_ORIGIN,
|
|
@@ -173,6 +176,7 @@ async function modelFlow() {
|
|
|
173
176
|
const rl = readline.createInterface({ input, output });
|
|
174
177
|
try {
|
|
175
178
|
config.model = await askModel(rl, config.model || "gpt-5.5");
|
|
179
|
+
config.version = APP_VERSION;
|
|
176
180
|
saveConfig(config);
|
|
177
181
|
writeCodexConfig(config);
|
|
178
182
|
console.log(`Model set to ${MODELS[config.model].label}.`);
|
|
@@ -193,6 +197,8 @@ async function ensureReady() {
|
|
|
193
197
|
await loginFlow();
|
|
194
198
|
config = requireConfig();
|
|
195
199
|
}
|
|
200
|
+
config = normalizeConfig(config);
|
|
201
|
+
saveConfig(config);
|
|
196
202
|
writeCodexConfig(config);
|
|
197
203
|
}
|
|
198
204
|
|
|
@@ -200,7 +206,7 @@ async function askModel(rl, current) {
|
|
|
200
206
|
const currentLabel = MODELS[current]?.label || MODELS["gpt-5.5"].label;
|
|
201
207
|
console.log("\nChoose your coding model:");
|
|
202
208
|
console.log(" 1. ChatGPT-5.5");
|
|
203
|
-
console.log(" 2. Opus 4.
|
|
209
|
+
console.log(" 2. Opus 4.8");
|
|
204
210
|
console.log(" 3. Deepseek v4 Budget");
|
|
205
211
|
const answer = (await rl.question(`Model [${currentLabel}]: `)).trim().toLowerCase();
|
|
206
212
|
if (!answer) {
|
|
@@ -208,7 +214,7 @@ async function askModel(rl, current) {
|
|
|
208
214
|
}
|
|
209
215
|
const match = Object.values(MODELS).find((model) => model.aliases.includes(answer));
|
|
210
216
|
if (!match) {
|
|
211
|
-
throw new Error("Unknown model choice. Enter 1 for ChatGPT-5.5, 2 for Opus 4.
|
|
217
|
+
throw new Error("Unknown model choice. Enter 1 for ChatGPT-5.5, 2 for Opus 4.8, or 3 for Deepseek v4 Budget.");
|
|
212
218
|
}
|
|
213
219
|
return match.id;
|
|
214
220
|
}
|
|
@@ -400,7 +406,9 @@ function writeCodexConfig(config) {
|
|
|
400
406
|
const backup = `${CODEX_CONFIG_FILE}.backup.${timestamp()}`;
|
|
401
407
|
copyFileSync(CODEX_CONFIG_FILE, backup);
|
|
402
408
|
}
|
|
403
|
-
const
|
|
409
|
+
const normalized = normalizeConfig(config);
|
|
410
|
+
const model = MODELS[normalized.model] ? normalized.model : "gpt-5.5";
|
|
411
|
+
const providerBaseUrl = providerBaseUrlForConfig(normalized);
|
|
404
412
|
const toml = [
|
|
405
413
|
`model = ${tomlString(model)}`,
|
|
406
414
|
'preferred_auth_method = "apikey"',
|
|
@@ -412,8 +420,8 @@ function writeCodexConfig(config) {
|
|
|
412
420
|
"",
|
|
413
421
|
`[model_providers.${PROVIDER_ID}]`,
|
|
414
422
|
'name = "CodexAPI.pro"',
|
|
415
|
-
`base_url = ${tomlString(
|
|
416
|
-
`experimental_bearer_token = ${tomlString(
|
|
423
|
+
`base_url = ${tomlString(providerBaseUrl)}`,
|
|
424
|
+
`experimental_bearer_token = ${tomlString(normalized.username)}`,
|
|
417
425
|
'wire_api = "responses"',
|
|
418
426
|
"supports_websockets = false",
|
|
419
427
|
`http_headers = { "X-CodexAPI-Client" = "codexclaude", "X-CodexAPI-Client-Version" = ${tomlString(APP_VERSION)}, "X-CodexAPI-Selected-Model" = ${tomlString(model)} }`,
|
|
@@ -429,7 +437,7 @@ function writeCodexConfig(config) {
|
|
|
429
437
|
|
|
430
438
|
function readConfig() {
|
|
431
439
|
try {
|
|
432
|
-
return JSON.parse(readFileSync(CONFIG_FILE, "utf8"));
|
|
440
|
+
return normalizeConfig(JSON.parse(readFileSync(CONFIG_FILE, "utf8")));
|
|
433
441
|
} catch {
|
|
434
442
|
return null;
|
|
435
443
|
}
|
|
@@ -445,7 +453,7 @@ function requireConfig() {
|
|
|
445
453
|
|
|
446
454
|
function saveConfig(config) {
|
|
447
455
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
448
|
-
writeFileSync(CONFIG_FILE, `${JSON.stringify(config, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
456
|
+
writeFileSync(CONFIG_FILE, `${JSON.stringify(normalizeConfig(config), null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
449
457
|
}
|
|
450
458
|
|
|
451
459
|
function logout() {
|
|
@@ -465,6 +473,7 @@ async function status() {
|
|
|
465
473
|
console.log(`Reasoning: ${CODEX_REASONING_EFFORT}`);
|
|
466
474
|
console.log(`Service tier: ${CODEX_SERVICE_TIER}`);
|
|
467
475
|
console.log(`API: ${config.apiOrigin || API_ORIGIN}`);
|
|
476
|
+
console.log(`Model API route: ${providerOriginLabel(config)}`);
|
|
468
477
|
console.log(`Codex config: ${CODEX_CONFIG_FILE}`);
|
|
469
478
|
try {
|
|
470
479
|
const wallet = await walletSnapshot(config);
|
|
@@ -493,6 +502,7 @@ async function runCodex(args) {
|
|
|
493
502
|
CODEXCLAUDE_CODEX_VERSION: CODEX_VERSION,
|
|
494
503
|
CODEXCLAUDE_MODEL_ID: config.model,
|
|
495
504
|
CODEXCLAUDE_MODEL_LABEL: MODELS[config.model]?.label || config.model,
|
|
505
|
+
CODEXCLAUDE_MODEL_API_BASE_URL: providerBaseUrlForConfig(config),
|
|
496
506
|
CODEXCLAUDE_VERSION: APP_VERSION,
|
|
497
507
|
};
|
|
498
508
|
if (wallet) {
|
|
@@ -604,8 +614,8 @@ function formatStatusLine(config, wallet, cwd) {
|
|
|
604
614
|
}
|
|
605
615
|
|
|
606
616
|
function modelStatusName(model) {
|
|
607
|
-
if (model === "claude-opus-4-
|
|
608
|
-
return "opus-4.
|
|
617
|
+
if (model === "claude-opus-4-8") {
|
|
618
|
+
return "opus-4.8";
|
|
609
619
|
}
|
|
610
620
|
if (model === "deepseek-v4-pro") {
|
|
611
621
|
return "deepseek-v4 budget";
|
|
@@ -613,6 +623,38 @@ function modelStatusName(model) {
|
|
|
613
623
|
return "gpt-5.5";
|
|
614
624
|
}
|
|
615
625
|
|
|
626
|
+
function normalizeConfig(config) {
|
|
627
|
+
if (!config || typeof config !== "object") {
|
|
628
|
+
return config;
|
|
629
|
+
}
|
|
630
|
+
const normalized = { ...config };
|
|
631
|
+
if (normalized.model === "claude-opus-4-7") {
|
|
632
|
+
normalized.model = "claude-opus-4-8";
|
|
633
|
+
}
|
|
634
|
+
if (!MODELS[normalized.model]) {
|
|
635
|
+
normalized.model = "gpt-5.5";
|
|
636
|
+
}
|
|
637
|
+
normalized.version = APP_VERSION;
|
|
638
|
+
normalized.apiOrigin = String(normalized.apiOrigin || API_ORIGIN).replace(/\/+$/, "");
|
|
639
|
+
return normalized;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
function providerBaseUrlForConfig(config) {
|
|
643
|
+
const normalized = normalizeConfig(config);
|
|
644
|
+
if (normalized.model === "claude-opus-4-8") {
|
|
645
|
+
return CHICAGO_API_BASE_URL;
|
|
646
|
+
}
|
|
647
|
+
return `${normalized.apiOrigin || API_ORIGIN}/v1`;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
function providerOriginLabel(config) {
|
|
651
|
+
const normalized = normalizeConfig(config);
|
|
652
|
+
if (normalized.model === "claude-opus-4-8") {
|
|
653
|
+
return `${CHICAGO_API_ORIGIN} (Chicago forced for Opus 4.8)`;
|
|
654
|
+
}
|
|
655
|
+
return normalized.apiOrigin || API_ORIGIN;
|
|
656
|
+
}
|
|
657
|
+
|
|
616
658
|
function formatUsd(value) {
|
|
617
659
|
return `$${Number(value || 0).toLocaleString("en-US", {
|
|
618
660
|
minimumFractionDigits: 2,
|
package/codexclaude.md
CHANGED
|
@@ -5,11 +5,11 @@ This file tracks the CodexAPI.pro-specific layer that must be re-applied after p
|
|
|
5
5
|
## Current Release
|
|
6
6
|
|
|
7
7
|
- Launcher package: `@codexapi/codexclaude`
|
|
8
|
-
- Launcher version: `2.0.
|
|
9
|
-
- Official Codex runtime dependency: `@openai/codex@0.
|
|
10
|
-
- Public install command: `npm install -g
|
|
8
|
+
- Launcher version: `2.0.6`
|
|
9
|
+
- Official Codex runtime dependency: `@openai/codex@0.135.0`
|
|
10
|
+
- Public install command: `npm install -g @codexapi/codexclaude@latest`
|
|
11
11
|
- Default API origin: `https://codexapi.pro`
|
|
12
|
-
- Responses base URL: `https://codexapi.pro/v1`
|
|
12
|
+
- Responses base URL: `https://codexapi.pro/v1` for ChatGPT-5.5 and Deepseek v4 Budget; `https://api-chicago.codexapi.pro/v1` for Opus 4.8.
|
|
13
13
|
|
|
14
14
|
## Reapply Checklist After Upstream Codex Updates
|
|
15
15
|
|
|
@@ -33,7 +33,7 @@ This file tracks the CodexAPI.pro-specific layer that must be re-applied after p
|
|
|
33
33
|
## Model Choices
|
|
34
34
|
|
|
35
35
|
- `gpt-5.5`: default ChatGPT-5.5 coding route.
|
|
36
|
-
- `claude-opus-4-
|
|
36
|
+
- `claude-opus-4-8`: Opus 4.8 coding route through Chicago CodexAPI.pro Responses compatibility.
|
|
37
37
|
- `deepseek-v4-pro`: Deepseek v4 Budget coding route through CodexAPI.pro Responses compatibility.
|
|
38
38
|
|
|
39
39
|
The selected model must be written into `~/.codex/config.toml` before the Codex process starts. The backend snapshots the route at request start; the launcher must not change the model mid-generation.
|
|
@@ -47,6 +47,18 @@ The selected model must be written into `~/.codex/config.toml` before the Codex
|
|
|
47
47
|
- Updated the forced update message so users see the exact npm command.
|
|
48
48
|
- Added this customization ledger for future upstream Codex merges.
|
|
49
49
|
|
|
50
|
+
## Version 2.0.5 Changes
|
|
51
|
+
|
|
52
|
+
- Published the launcher under the official npm org package `@codexapi/codexclaude`.
|
|
53
|
+
- Updated install and update instructions to use `npm install -g @codexapi/codexclaude@latest`.
|
|
54
|
+
|
|
55
|
+
## Version 2.0.6 Changes
|
|
56
|
+
|
|
57
|
+
- Updated the official Codex runtime dependency to `@openai/codex@0.135.0`.
|
|
58
|
+
- Migrated the Claude/Opus launcher choice from Opus 4.7 to Opus 4.8 while accepting old Opus 4.7 aliases for existing users.
|
|
59
|
+
- Forced Opus 4.8 `codexclaude` Responses traffic to `https://api-chicago.codexapi.pro/v1` regardless of the account/dashboard region selected by the user.
|
|
60
|
+
- Kept ChatGPT-5.5 and Deepseek v4 Budget region-aware.
|
|
61
|
+
|
|
50
62
|
## Validation Commands
|
|
51
63
|
|
|
52
64
|
```bash
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codexapi/codexclaude",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "CodexAPI.pro coding CLI launcher for ChatGPT-5.5, Opus 4.
|
|
3
|
+
"version": "2.0.6",
|
|
4
|
+
"description": "CodexAPI.pro coding CLI launcher for ChatGPT-5.5, Opus 4.8, and Deepseek v4 Budget, powered by official Codex CLI 0.135.0.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"node": ">=20"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@openai/codex": "0.
|
|
20
|
+
"@openai/codex": "0.135.0"
|
|
21
21
|
},
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"access": "public"
|