@codexapi/codexclaude 2.0.5 → 2.0.7

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 CHANGED
@@ -5,8 +5,8 @@
5
5
  ## Upstream Runtime
6
6
 
7
7
  - Official package: `@openai/codex`
8
- - Pinned runtime version: `0.134.0`
9
- - Local launcher version: `2.0.5`
8
+ - Pinned runtime version: `0.137.0`
9
+ - Local launcher version: `2.0.7`
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-7`, and `deepseek-v4-pro`.
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.7 Responses traffic is routed through CodexAPI.pro's working Claude tool-call bridge.
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,8 +1,8 @@
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.7, or Deepseek v4 Budget against the same CodexAPI.pro Token Wallet.
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` launches the official OpenAI Codex CLI `0.134.0` package and applies CodexAPI.pro account, wallet, model, and Full Access defaults before Codex starts.
5
+ Version `2.0.7` launches the official OpenAI Codex CLI `0.137.0` package and applies CodexAPI.pro account, wallet, model, and Full Access defaults before Codex starts.
6
6
 
7
7
  ## Install
8
8
 
@@ -48,7 +48,7 @@ Switch model:
48
48
  codexclaude model
49
49
  ```
50
50
 
51
- Available model labels are `ChatGPT-5.5`, `Opus 4.7`, and `Deepseek v4 Budget`. All three use the CodexAPI.pro Responses-compatible endpoint and the same customer Token Wallet.
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.7, or Deepseek v4 Budget model selection.
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.134.0` runtime with the current profile-compatible config enabled.
80
+ - Official Codex `0.137.0` runtime with the current profile-compatible config enabled.
81
81
  - Token Wallet balance lookup before launch and in `codexclaude status`.
82
- - Opus 4.7 tool-call compatibility through the CodexAPI.pro Responses gateway.
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.
@@ -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.5";
14
- const CODEX_VERSION = "0.134.0";
13
+ const APP_VERSION = "2.0.7";
14
+ const CODEX_VERSION = "0.137.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-7": {
36
- id: "claude-opus-4-7",
37
- label: "Opus 4.7",
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.7, or Deepseek v4 Budget
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 selectedModel = await askModel(rl, existing?.model || "gpt-5.5");
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.7");
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.7, or 3 for Deepseek v4 Budget.");
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 model = MODELS[config.model] ? config.model : "gpt-5.5";
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(API_BASE_URL)}`,
416
- `experimental_bearer_token = ${tomlString(config.username)}`,
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-7") {
608
- return "opus-4.7";
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.5`
9
- - Official Codex runtime dependency: `@openai/codex@0.134.0`
8
+ - Launcher version: `2.0.7`
9
+ - Official Codex runtime dependency: `@openai/codex@0.137.0`
10
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-7`: Opus 4.7 coding route through CodexAPI.pro Responses compatibility.
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.
@@ -52,6 +52,18 @@ The selected model must be written into `~/.codex/config.toml` before the Codex
52
52
  - Published the launcher under the official npm org package `@codexapi/codexclaude`.
53
53
  - Updated install and update instructions to use `npm install -g @codexapi/codexclaude@latest`.
54
54
 
55
+ ## Version 2.0.7 Changes
56
+
57
+ - Updated the official Codex runtime dependency to `@openai/codex@0.137.0`.
58
+ - Preserved CodexAPI.pro model selection, wallet auth, Full Access defaults, status line, Chicago Opus 4.8 routing, and npm update enforcement.
59
+
60
+ ## Version 2.0.6 Changes
61
+
62
+ - Updated the official Codex runtime dependency to `@openai/codex@0.135.0`.
63
+ - Migrated the Claude/Opus launcher choice from Opus 4.7 to Opus 4.8 while accepting old Opus 4.7 aliases for existing users.
64
+ - Forced Opus 4.8 `codexclaude` Responses traffic to `https://api-chicago.codexapi.pro/v1` regardless of the account/dashboard region selected by the user.
65
+ - Kept ChatGPT-5.5 and Deepseek v4 Budget region-aware.
66
+
55
67
  ## Validation Commands
56
68
 
57
69
  ```bash
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@codexapi/codexclaude",
3
- "version": "2.0.5",
4
- "description": "CodexAPI.pro coding CLI launcher for ChatGPT-5.5, Opus 4.7, and Deepseek v4 Budget, powered by official Codex CLI 0.134.0.",
3
+ "version": "2.0.7",
4
+ "description": "CodexAPI.pro coding CLI launcher for ChatGPT-5.5, Opus 4.8, and Deepseek v4 Budget, powered by official Codex CLI 0.137.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.134.0"
20
+ "@openai/codex": "0.137.0"
21
21
  },
22
22
  "publishConfig": {
23
23
  "access": "public"