@codexapi/codexclaude 2.0.22 → 2.0.24

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
@@ -1,13 +1,14 @@
1
- # Magnetapi Client Customizations
1
+ # MagnetAPI.org Codex CLI Customizations
2
2
 
3
- `codexclaude` tracks the managed coding runtime while keeping a thin Magnetapi Client launcher layer. Future upgrades must preserve this file's behavior before a package is published.
3
+ `codexclaude` tracks the managed coding runtime while keeping a thin MagnetAPI.org Codex CLI launcher layer. Future upgrades must preserve this file's behavior before a package is published.
4
4
 
5
5
  ## Runtime
6
6
 
7
- - Customer-facing app name: `Magnetapi Client`
8
- - Local launcher version: `2.0.22`
9
- - Bundled official runtime dependency: `@openai/codex@0.144.3`
10
- - Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.22.tgz`
7
+ - Customer-facing app name: `MagnetAPI.org Codex CLI`
8
+ - Local launcher version: `2.0.24`
9
+ - Bundled official runtime dependency: `@openai/codex@0.144.4`
10
+ - Required install command: `npm install -g @codexapi/codexclaude@latest`
11
+ - Hosted fallback: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.24.tgz`
11
12
  - Bundled runtime version is managed internally and must not be used for customer update prompts.
12
13
  - Launcher update checks may call the CodexAPI.pro version endpoint and `@codexapi/codexclaude` npm metadata only.
13
14
  - The launcher must never check `@openai/codex` npm metadata or OpenAI GitHub releases for update notices.
@@ -19,12 +20,13 @@
19
20
  - Rewrites `~/.codex/config.toml` before every launch.
20
21
  - Deletes stale `~/.codex/version.json` before writing managed config.
21
22
  - Launches the bundled platform-native runtime binary directly rather than the upstream npm wrapper.
22
- - Keeps launcher-owned output branded as `Magnetapi Client`; hardcoded native binary strings require a forked native runtime build if operations wants them removed across all platforms.
23
+ - Keeps launcher-owned output branded as `MagnetAPI.org Codex CLI`; hardcoded native binary strings require a forked native runtime build if operations wants them removed across all platforms.
23
24
  - Starts with `--search` by default.
24
25
  - Passes unknown commands directly to the bundled runtime after config is applied.
25
26
  - Provides `codexclaude changelog` using the managed version endpoint.
26
27
  - Does not expose separate `codexclaude status` or `codexclaude usage` commands; wallet information remains a compact pre-launch line.
27
- - Version `2.0.22` is forced by the backend minimum version and older clients must show an update-required message.
28
+ - Version `2.0.24` is forced by the backend minimum version and older clients must show an update-required message.
29
+ - Mandatory updates present `Upgrade Now` in an interactive terminal, invoke npm with an argument array and no shell interpolation, then stop cleanly so the customer can start `codexclaude` again.
28
30
 
29
31
  ## Provider Config
30
32
 
@@ -51,8 +53,8 @@ The launcher writes a model provider named `codexapi`:
51
53
  - Local model catalog: `~/.codexclaude/model_catalog.json`; this keeps the native `/model` picker limited to the supported choices and prevents fallback metadata warnings for GPT-5.6 SOL, SOL Max, SOL Ultra, Opus 4.8, Sonnet 5, and Fable 5.
52
54
  - Service tier: omitted by default; `/fast` remains user-controlled and billed server-side when active.
53
55
  - TUI status line: `model-with-reasoning`, `fast-mode`, `current-dir`
54
- - Fable 5 stays visible to the user while the backend applies its custom routed premium path and billing multiplier.
55
- - GPT-5.6 SOL Max bills at 2x normal SOL usage. GPT-5.6 SOL Ultra bills at 2.5x normal SOL usage.
56
+ - Fable 5 stays visible to the user while the backend applies its server-managed route and billing policy.
57
+ - Premium model billing remains server-managed and is not rendered in the customer model picker or model descriptions.
56
58
 
57
59
  ## Wallet Display
58
60
 
@@ -61,7 +63,7 @@ Before launching the runtime, the launcher calls `/api/v1/wallet/status`, then `
61
63
  Expected status line:
62
64
 
63
65
  ```text
64
- Magnetapi Client v2.0.22 · gpt-5.6 xhigh · ~/project · Wallet $20.00
66
+ MagnetAPI.org Codex CLI v2.0.24 · gpt-5.6 xhigh · ~/project · Wallet $20.00
65
67
  ```
66
68
 
67
69
  ## Upgrade Checklist
@@ -71,7 +73,7 @@ When updating the bundled runtime:
71
73
  1. Update `CODEX_VERSION` in `bin/codexclaude.js`.
72
74
  2. Update `@openai/codex` in `package.json` and `package-lock.json`.
73
75
  3. Bump the launcher package version.
74
- 4. Keep `APP_DISPLAY_NAME = "Magnetapi Client"`.
76
+ 4. Keep `APP_DISPLAY_NAME = "MagnetAPI.org Codex CLI"`.
75
77
  5. Keep `DEFAULT_MODEL_ID = "gpt-5.6"`.
76
78
  6. Keep `reasoningEffortForModel()` and model-specific visible reasoning.
77
79
  7. Keep Full Access defaults: `approval_policy = "never"` and `sandbox_mode = "danger-full-access"`.
@@ -79,7 +81,8 @@ When updating the bundled runtime:
79
81
  9. Keep `clearUpstreamUpdateCache()` deleting `~/.codex/version.json`.
80
82
  10. Keep direct platform binary launch and do not fall back to the upstream npm wrapper.
81
83
  11. Keep update checks limited to `/api/v1/codexclaude/version` and `@codexapi/codexclaude` npm metadata.
82
- 12. Keep the managed `MODELS` map and local model catalog, including SOL Max and SOL Ultra.
83
- 13. Keep bearer username auth and the `X-CodexAPI-*` headers.
84
- 14. Update `README.md`, `CUSTOMIZATIONS.md`, and `codexclaude.md`.
85
- 15. Run `node --check bin/codexclaude.js`, a temporary-home setup test, `npm pack --dry-run`, and endpoint validation before publishing.
84
+ 12. Keep the interactive `Upgrade Now` flow installing `@codexapi/codexclaude@latest` without a shell.
85
+ 13. Keep the managed `MODELS` map and local model catalog, including SOL Max and SOL Ultra.
86
+ 14. Keep bearer username auth and the `X-CodexAPI-*` headers.
87
+ 15. Update `README.md`, `CUSTOMIZATIONS.md`, and `codexclaude.md`.
88
+ 16. Run `node --check bin/codexclaude.js`, a temporary-home setup test, `npm pack --dry-run`, and endpoint validation before publishing.
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # codexclaude
2
2
 
3
- `codexclaude` installs the Magnetapi Client for customers who want one coding CLI that can use GPT-5.6, GPT-5.6 SOL, GPT-5.6 SOL Max, GPT-5.6 SOL Ultra, ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 against the same Token Wallet.
3
+ `codexclaude` installs the MagnetAPI.org Codex CLI for customers who want one coding CLI that can use GPT-5.6, GPT-5.6 SOL, GPT-5.6 SOL Max, GPT-5.6 SOL Ultra, ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 against the same Token Wallet.
4
4
 
5
- Version `2.0.22` is a required major sync release. It bundles official Codex runtime dependency `@openai/codex@0.144.3`, launches the platform-native runtime binary directly, disables upstream OpenAI update prompts, and applies account, wallet, model, Full Access, GPT-5.6/xhigh defaults, and managed model metadata before each coding session starts.
5
+ Version `2.0.24` is a required client sync release. It bundles official Codex runtime dependency `@openai/codex@0.144.4`, launches the platform-native runtime binary directly, disables upstream OpenAI update prompts, and applies account, wallet, model, Full Access, GPT-5.6/xhigh defaults, and managed model metadata before each coding session starts. Model menus no longer display wallet multiplier notices; billing remains managed by the server.
6
6
 
7
7
  ## Install Or Update
8
8
 
9
9
  ```bash
10
- npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.22.tgz
10
+ npm install -g @codexapi/codexclaude@latest
11
11
  ```
12
12
 
13
13
  This does not delete local session history. The update replaces the `codexclaude` launcher package, refreshes the bundled runtime dependency, and rewrites the managed provider config the next time `codexclaude setup`, `codexclaude login`, or `codexclaude start` runs.
@@ -16,7 +16,7 @@ This does not delete local session history. The update replaces the `codexclaude
16
16
 
17
17
  The launcher checks CodexAPI.pro's managed version endpoint and the `@codexapi/codexclaude` npm package metadata only. It must never check `@openai/codex` npm metadata or OpenAI GitHub releases for customer update prompts.
18
18
 
19
- Version `2.0.22` is currently enforced as the minimum supported version, so older launchers show a required update message with the exact hosted tarball command above.
19
+ Version `2.0.24` is currently enforced as the minimum supported version. A compatible older launcher presents `Upgrade Now`; selecting it installs `@codexapi/codexclaude@latest`, confirms completion, and asks the customer to start `codexclaude` again. Non-interactive terminals print the same npm command instead of hanging for input.
20
20
 
21
21
  ## First Login
22
22
 
@@ -44,7 +44,7 @@ Switch model:
44
44
  codexclaude model
45
45
  ```
46
46
 
47
- Available model labels are `GPT-5.6`, `GPT-5.6 SOL Max`, `GPT-5.6 SOL Ultra`, `GPT-5.6 SOL`, `ChatGPT-5.5`, `Opus 4.8`, `Sonnet 5`, and `Fable 5`. SOL Max bills at 2x normal SOL usage. SOL Ultra bills at 2.5x normal SOL usage. All models use a Responses-compatible endpoint and the same customer Token Wallet.
47
+ Available model labels are `GPT-5.6`, `GPT-5.6 SOL Max`, `GPT-5.6 SOL Ultra`, `GPT-5.6 SOL`, `ChatGPT-5.5`, `Opus 4.8`, `Sonnet 5`, and `Fable 5`. All models use a Responses-compatible endpoint and the same customer Token Wallet.
48
48
 
49
49
  Show current launcher changes:
50
50
 
@@ -57,7 +57,7 @@ codexclaude changelog
57
57
  Before launching the coding runtime, the app prints a compact status line like:
58
58
 
59
59
  ```text
60
- Magnetapi Client v2.0.22 · gpt-5.6 xhigh · ~/project · Wallet $20.00
60
+ MagnetAPI.org Codex CLI v2.0.24 · gpt-5.6 xhigh · ~/project · Wallet $20.00
61
61
  ```
62
62
 
63
63
  ## Preserved Customizations
@@ -67,7 +67,7 @@ Magnetapi Client v2.0.22 · gpt-5.6 xhigh · ~/project · Wallet $20.00
67
67
  - Service-specific Responses-compatible provider for the dashboard account that logged in.
68
68
  - Full Access defaults: approval policy `never` and sandbox mode `danger-full-access`.
69
69
  - Model-specific visible reasoning in the local UI while the API server keeps upstream runtime effort server-managed.
70
- - A local `~/.codexclaude/model_catalog.json` file so the native `/model` picker lists only the supported Magnetapi Client choices, including SOL Max and SOL Ultra.
70
+ - A local `~/.codexclaude/model_catalog.json` file so the native `/model` picker lists only the supported MagnetAPI.org Codex CLI choices, including SOL Max and SOL Ultra.
71
71
  - No default fast service tier. Fast mode is billed only when the user enables it inside the client.
72
72
  - Token Wallet balance lookup before launch without exposing separate `status` or `usage` launcher commands.
73
73
  - Backend-identifying request headers so the API can enforce account and plan rules server-side.
@@ -10,9 +10,9 @@ 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.22";
14
- const CODEX_VERSION = "0.144.3";
15
- const APP_DISPLAY_NAME = "Magnetapi Client";
13
+ const APP_VERSION = "2.0.24";
14
+ const CODEX_VERSION = "0.144.4";
15
+ const APP_DISPLAY_NAME = "MagnetAPI.org Codex CLI";
16
16
  const DEFAULT_MODEL_ID = "gpt-5.6";
17
17
  const DEFAULT_DISPLAY_REASONING_EFFORT = "xhigh";
18
18
  const DEFAULT_SERVER_REASONING_EFFORT = "xhigh";
@@ -24,7 +24,8 @@ const VERSION_CHECK_PATH = "/api/v1/codexclaude/version";
24
24
  const NPM_PACKAGE_NAME = "@codexapi/codexclaude";
25
25
  const NPM_LATEST_URL = "https://registry.npmjs.org/@codexapi%2Fcodexclaude/latest";
26
26
  const HOSTED_TARBALL_URL = `https://codexapi.pro/downloads/codexapi-codexclaude-${APP_VERSION}.tgz`;
27
- const UPDATE_COMMAND = `npm install -g ${HOSTED_TARBALL_URL}`;
27
+ const UPDATE_COMMAND = `npm install -g ${NPM_PACKAGE_NAME}@latest`;
28
+ const HOSTED_UPDATE_COMMAND = `npm install -g ${HOSTED_TARBALL_URL}`;
28
29
  const CONFIG_DIR = path.join(homedir(), ".codexclaude");
29
30
  const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
30
31
  const MODEL_CATALOG_FILE = path.join(CONFIG_DIR, "model_catalog.json");
@@ -84,14 +85,12 @@ const MODELS = {
84
85
  id: "gpt-5.6-sol-max",
85
86
  label: "GPT-5.6 SOL Max",
86
87
  aliases: ["2", "gpt-5.6-sol-max", "gpt-5.6-max", "gpt56-max", "sol-max", "max"],
87
- premiumLabel: "2x premium billing",
88
88
  reasoningEffort: "max",
89
89
  },
90
90
  "gpt-5.6-sol-ultra": {
91
91
  id: "gpt-5.6-sol-ultra",
92
92
  label: "GPT-5.6 SOL Ultra",
93
93
  aliases: ["3", "gpt-5.6-sol-ultra", "gpt-5.6-ultra", "gpt56-ultra", "sol-ultra", "ultra"],
94
- premiumLabel: "2.5x premium billing",
95
94
  reasoningEffort: "ultra",
96
95
  },
97
96
  "gpt-5.6-sol": {
@@ -120,7 +119,6 @@ const MODELS = {
120
119
  label: "Fable 5",
121
120
  aliases: ["8", "fable", "fable-5", "fabel", "fabel-5", "claude-fable-5", "claude-fabel-5"],
122
121
  premium: true,
123
- premiumLabel: "2x premium billing",
124
122
  },
125
123
  };
126
124
 
@@ -128,7 +126,7 @@ async function main() {
128
126
  ensureExecutable();
129
127
  const [command = "start", ...args] = process.argv.slice(2);
130
128
  if (["-v", "--version", "version"].includes(command)) {
131
- console.log(`${APP_DISPLAY_NAME} ${APP_VERSION}`);
129
+ console.log(`${APP_DISPLAY_NAME} v${APP_VERSION}`);
132
130
  return;
133
131
  }
134
132
  if (["-h", "--help", "help"].includes(command)) {
@@ -139,7 +137,9 @@ async function main() {
139
137
  await printChangelog();
140
138
  return;
141
139
  }
142
- await enforceLauncherVersion();
140
+ if (await enforceLauncherVersion()) {
141
+ return;
142
+ }
143
143
  if (command === "login") {
144
144
  await loginFlow();
145
145
  return;
@@ -173,14 +173,14 @@ async function main() {
173
173
 
174
174
  function printHelp() {
175
175
  console.log(`
176
- ${APP_DISPLAY_NAME} ${APP_VERSION}
176
+ ${APP_DISPLAY_NAME} v${APP_VERSION}
177
177
 
178
178
  Commands:
179
179
  codexclaude login Login with dashboard username/email and password
180
180
  codexclaude model Select GPT-5.6, SOL modes, Opus 4.8, Sonnet 5, or Fable 5
181
181
  codexclaude changelog Show the latest CodexAPI.pro launcher changes
182
182
  codexclaude setup Rewrite ~/.codex/config.toml with Full Access defaults
183
- codexclaude start Start Magnetapi Client with --search
183
+ codexclaude start Start ${APP_DISPLAY_NAME} with --search
184
184
  codexclaude resume Resume the latest coding session with --search
185
185
  codexclaude logout Remove saved codexclaude account state
186
186
 
@@ -190,7 +190,7 @@ Any other command is passed through to the bundled coding runtime after Magnetap
190
190
 
191
191
  async function printChangelog() {
192
192
  const metadata = await getJson(`${VERSION_CHECK_PATH}?current=${encodeURIComponent(APP_VERSION)}`);
193
- console.log(`codexclaude ${metadata?.latestVersion || APP_VERSION}`);
193
+ console.log(`${APP_DISPLAY_NAME} v${metadata?.latestVersion || APP_VERSION}`);
194
194
  console.log(`Required minimum: ${metadata?.minimumVersion || APP_VERSION}`);
195
195
  const changes = Array.isArray(metadata?.changes) ? metadata.changes : [];
196
196
  if (changes.length) {
@@ -271,7 +271,7 @@ async function loginWithServiceSelection({ username, password, selectedService,
271
271
  const loginBody = {
272
272
  username,
273
273
  password,
274
- deviceName: `codexclaude ${APP_VERSION}`,
274
+ deviceName: `${APP_DISPLAY_NAME} v${APP_VERSION}`,
275
275
  };
276
276
  if (selectedService) {
277
277
  return {
@@ -377,8 +377,7 @@ async function askModel(rl, current) {
377
377
  const currentLabel = MODELS[current]?.label || MODELS[DEFAULT_MODEL_ID].label;
378
378
  console.log("\nChoose your coding model:");
379
379
  Object.values(MODELS).forEach((model, index) => {
380
- const premium = model.premiumLabel ? ` (${model.premiumLabel})` : model.premium ? " (2x premium billing)" : "";
381
- console.log(` ${index + 1}. ${model.label}${premium}`);
380
+ console.log(` ${index + 1}. ${model.label}`);
382
381
  });
383
382
  const answer = (await rl.question(`Model [${currentLabel}]: `)).trim().toLowerCase();
384
383
  if (!answer) {
@@ -418,7 +417,7 @@ async function postJson(pathname, body, origin = API_ORIGIN) {
418
417
 
419
418
  async function enforceLauncherVersion() {
420
419
  if (isTruthy(process.env.CODEXCLAUDE_DISABLE_UPDATE_CHECK)) {
421
- return;
420
+ return false;
422
421
  }
423
422
  const params = new URLSearchParams({ current: APP_VERSION });
424
423
  let metadata = null;
@@ -428,12 +427,70 @@ async function enforceLauncherVersion() {
428
427
  metadata = null;
429
428
  }
430
429
  if (metadata?.updateRequired || isOlderVersion(APP_VERSION, metadata?.minimumVersion)) {
431
- throw new Error(updateRequiredMessage(metadata));
430
+ await runMandatoryUpgrade(metadata);
431
+ return true;
432
432
  }
433
433
  const updateMetadata = optionalUpdateMetadata(metadata, await npmLatestMetadata());
434
434
  if (updateMetadata) {
435
435
  printOptionalUpdateNotice(updateMetadata);
436
436
  }
437
+ return false;
438
+ }
439
+
440
+ async function runMandatoryUpgrade(metadata) {
441
+ const latest = metadata?.latestVersion || "latest";
442
+ const minimum = metadata?.minimumVersion || latest;
443
+ const changes = Array.isArray(metadata?.changes) ? metadata.changes.slice(0, 4) : [];
444
+ console.error(`\n${APP_DISPLAY_NAME} v${latest} is required before your next coding session.`);
445
+ console.error(`Installed: v${APP_VERSION} · Required: v${minimum}`);
446
+ for (const change of changes) {
447
+ console.error(`- ${change}`);
448
+ }
449
+ console.error("Your local project files and coding-session history will not be removed.\n");
450
+
451
+ let shouldUpgrade = isTruthy(process.env.CODEXCLAUDE_AUTO_UPDATE);
452
+ if (!shouldUpgrade) {
453
+ if (!input.isTTY || !output.isTTY) {
454
+ throw new Error(updateRequiredMessage(metadata));
455
+ }
456
+ const rl = readline.createInterface({ input, output });
457
+ try {
458
+ console.log(" 1. Upgrade Now");
459
+ console.log(" 2. Exit");
460
+ const answer = (await rl.question("Select [Upgrade Now]: ")).trim().toLowerCase();
461
+ shouldUpgrade = ["", "1", "upgrade", "upgrade now", "yes", "y"].includes(answer);
462
+ } finally {
463
+ rl.close();
464
+ }
465
+ }
466
+ if (!shouldUpgrade) {
467
+ throw new Error(`Upgrade cancelled. Run ${UPDATE_COMMAND} before starting codexclaude again.`);
468
+ }
469
+
470
+ console.log(`\nDownloading and installing ${NPM_PACKAGE_NAME}@latest...`);
471
+ const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
472
+ const exitCode = await spawnAndWait(npmCommand, ["install", "-g", `${NPM_PACKAGE_NAME}@latest`]);
473
+ if (exitCode !== 0) {
474
+ throw new Error(
475
+ `Automatic upgrade failed with exit code ${exitCode}. Run ${UPDATE_COMMAND}. ` +
476
+ `Hosted fallback: ${HOSTED_UPDATE_COMMAND}`,
477
+ );
478
+ }
479
+ console.log(`\nUpgrade complete. Start ${APP_DISPLAY_NAME} again by running: codexclaude`);
480
+ }
481
+
482
+ async function spawnAndWait(command, args) {
483
+ return await new Promise((resolve, reject) => {
484
+ const child = spawn(command, args, { stdio: "inherit", env: process.env, shell: false });
485
+ child.once("error", reject);
486
+ child.once("exit", (code, signal) => {
487
+ if (signal) {
488
+ reject(new Error(`Upgrade process stopped by ${signal}.`));
489
+ return;
490
+ }
491
+ resolve(code ?? 1);
492
+ });
493
+ });
437
494
  }
438
495
 
439
496
  async function getJson(pathname) {
@@ -531,8 +588,8 @@ function updateRequiredMessage(metadata) {
531
588
  const latest = metadata?.latestVersion || "latest";
532
589
  const minimum = metadata?.minimumVersion || latest;
533
590
  return [
534
- `Update required: ${APP_DISPLAY_NAME} has updated to codexclaude ${latest}. This major release is required for all users so your local client stays synced with the managed model catalog, Full Access defaults, and provider config.`,
535
- `Installed codexclaude: ${APP_VERSION}. Required: ${minimum}. Latest: ${latest}.`,
591
+ `Update required: ${APP_DISPLAY_NAME} v${latest} is required so your local client stays synced with the managed model catalog, Full Access defaults, and provider config.`,
592
+ `Installed: v${APP_VERSION}. Required: v${minimum}. Latest: v${latest}.`,
536
593
  `Run: ${installCommand}`,
537
594
  "Your local session history will not be deleted. The update only replaces the codexclaude launcher and rewrites provider config backups.",
538
595
  ].join("\n");
@@ -566,7 +623,7 @@ function printOptionalUpdateNotice(metadata) {
566
623
  const border = "─".repeat(64);
567
624
  const line = (text) => `│ ${String(text)}`.slice(0, 65).padEnd(65) + "│";
568
625
  console.error(`\n┌${border}┐`);
569
- console.error(line(`codexclaude ${latest} is available. You can keep coding on ${APP_VERSION}.`));
626
+ console.error(line(`${APP_DISPLAY_NAME} v${latest} is available. You can keep coding on v${APP_VERSION}.`));
570
627
  console.error(line(`Update when ready: ${installCommand}`));
571
628
  for (const change of changes) {
572
629
  console.error(line(`• ${change}`));
@@ -709,10 +766,10 @@ function modelCatalogDescription(modelId) {
709
766
  return "GPT-5.6 coding route with local coding tools and wallet billing.";
710
767
  }
711
768
  if (modelId === "gpt-5.6-sol-max") {
712
- return "GPT-5.6 SOL Max premium coding route with local coding tools and 2x wallet billing.";
769
+ return "GPT-5.6 SOL Max premium coding route with local coding tools and wallet billing.";
713
770
  }
714
771
  if (modelId === "gpt-5.6-sol-ultra") {
715
- return "GPT-5.6 SOL Ultra premium coding route with local coding tools and 2.5x wallet billing.";
772
+ return "GPT-5.6 SOL Ultra premium coding route with local coding tools and wallet billing.";
716
773
  }
717
774
  if (modelId === "gpt-5.6-sol") {
718
775
  return "GPT-5.6 SOL native coding route with local coding tools and wallet billing.";
package/codexclaude.md CHANGED
@@ -5,11 +5,12 @@ This file is the durable handoff for the `@codexapi/codexclaude` package in `/ro
5
5
  ## Current Release
6
6
 
7
7
  - Package name: `@codexapi/codexclaude`
8
- - Launcher version: `2.0.22`
9
- - Customer-facing app name: `Magnetapi Client`
10
- - Bundled runtime dependency: `@openai/codex@0.144.3`
11
- - Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.22.tgz`
12
- - Backend minimum version: `2.0.22`
8
+ - Launcher version: `2.0.24`
9
+ - Customer-facing app name: `MagnetAPI.org Codex CLI`
10
+ - Bundled runtime dependency: `@openai/codex@0.144.4`
11
+ - Required install command: `npm install -g @codexapi/codexclaude@latest`
12
+ - Hosted fallback: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.24.tgz`
13
+ - Backend minimum version: `2.0.24`
13
14
  - Default visible model: `GPT-5.6`
14
15
  - Default model slug: `gpt-5.6`
15
16
  - Default visible reasoning effort: `xhigh`; premium SOL Max and SOL Ultra retain their explicit `max` and `ultra` labels.
@@ -24,13 +25,13 @@ This file is the durable handoff for the `@codexapi/codexclaude` package in `/ro
24
25
  The launcher must present itself as:
25
26
 
26
27
  ```text
27
- Magnetapi Client v2.0.22
28
+ MagnetAPI.org Codex CLI v2.0.24
28
29
  ```
29
30
 
30
31
  Normal pre-launch status should look like:
31
32
 
32
33
  ```text
33
- Magnetapi Client v2.0.22 · gpt-5.6 xhigh · ~/project · Wallet $20.00
34
+ MagnetAPI.org Codex CLI v2.0.24 · gpt-5.6 xhigh · ~/project · Wallet $20.00
34
35
  ```
35
36
 
36
37
  Do not show OpenAI update notices, OpenAI npm install commands, OpenAI release links, or the upstream runtime version in launcher-owned output. The package still depends on the official runtime internally, but the customer update surface is ours.
@@ -38,8 +39,8 @@ Do not show OpenAI update notices, OpenAI npm install commands, OpenAI release l
38
39
  The launcher command `codexclaude model` must list these customer-visible models:
39
40
 
40
41
  - `gpt-5.6` displayed as `GPT-5.6`, first and selected by default
41
- - `gpt-5.6-sol-max` displayed as `GPT-5.6 SOL Max` with 2x premium billing
42
- - `gpt-5.6-sol-ultra` displayed as `GPT-5.6 SOL Ultra` with 2.5x premium billing
42
+ - `gpt-5.6-sol-max` displayed as `GPT-5.6 SOL Max`
43
+ - `gpt-5.6-sol-ultra` displayed as `GPT-5.6 SOL Ultra`
43
44
  - `gpt-5.6-sol` displayed as `GPT-5.6 SOL`
44
45
  - `gpt-5.5` displayed as `ChatGPT-5.5`
45
46
  - `claude-opus-4-8` displayed as `Opus 4.8`
@@ -55,11 +56,11 @@ GPT-5.6 must be the default when a new config is created or a legacy config cont
55
56
  - `https://codexapi.pro/api/v1/codexclaude/version`
56
57
  - `https://registry.npmjs.org/@codexapi%2Fcodexclaude/latest`
57
58
 
58
- It must not check `@openai/codex` npm metadata, OpenAI GitHub releases, or any upstream OpenAI update endpoint. Version `2.0.22` is a forced release: the backend `minimumVersion` equals `2.0.22`, and older clients must show an update-required message with the hosted tarball command.
59
+ It must not check `@openai/codex` npm metadata, OpenAI GitHub releases, or any upstream OpenAI update endpoint. Version `2.0.24` is a forced release: the backend `minimumVersion` equals `2.0.24`. Compatible older launchers offer an interactive `Upgrade Now` action that invokes `npm install -g @codexapi/codexclaude@latest` without shell interpolation. Non-interactive terminals print the exact update command and exit instead of waiting for input. After a successful update, the old process exits and tells the customer to start `codexclaude` again.
59
60
 
60
61
  The launcher writes `check_for_update_on_startup = false` and removes `~/.codex/version.json` so the bundled runtime does not display stale upstream update prompts. The launcher also resolves the platform-native runtime binary directly from the optional package (`@openai/codex-linux-x64`, `@openai/codex-darwin-arm64`, and so on). Do not fall back to the upstream npm wrapper, because that wrapper can re-enable upstream managed update behavior.
61
62
 
62
- The optional platform-native runtime packages can still contain upstream README files and hardcoded native strings inside the binary. Launcher-owned output must say `Magnetapi Client`; replacing native binary text itself requires a maintained forked native runtime build for every supported platform. Until such a fork exists, do not re-enable the upstream npm wrapper and do not present upstream update notices to customers.
63
+ The optional platform-native runtime packages can still contain upstream README files and hardcoded native strings inside the binary. Launcher-owned output must say `MagnetAPI.org Codex CLI`; replacing native binary text itself requires a maintained forked native runtime build for every supported platform. Until such a fork exists, do not re-enable the upstream npm wrapper and do not present upstream update notices to customers.
63
64
 
64
65
  ## Generated Config Contract
65
66
 
@@ -83,7 +84,7 @@ base_url = "<service Responses URL>"
83
84
  experimental_bearer_token = "<customer System Token/API username>"
84
85
  wire_api = "responses"
85
86
  supports_websockets = false
86
- http_headers = { "X-CodexAPI-Client" = "codexclaude", "X-CodexAPI-Client-Version" = "2.0.22", "X-CodexAPI-Selected-Model" = "<selected model>" }
87
+ http_headers = { "X-CodexAPI-Client" = "codexclaude", "X-CodexAPI-Client-Version" = "2.0.24", "X-CodexAPI-Selected-Model" = "<selected model>" }
87
88
 
88
89
  [tui]
89
90
  status_line = ["model-with-reasoning", "fast-mode", "current-dir"]
@@ -115,7 +116,7 @@ The saved `username` is the System Token/API username returned by the service an
115
116
 
116
117
  The launcher is not the source of truth for upstream runtime routing. Admin Manage Models controls execution routing server-side. The launcher must preserve the user-selected model slug and pass it through the Responses request so billing, logs, and the dashboard can record what the user chose.
117
118
 
118
- CodexAPI.pro and ChatPlus Claude-family models use the CodexAPI.pro Claude-compatible Responses endpoint. MyAPI.world and MagnetAPI.org accounts keep their own API origins. Fable 5 remains visible as `claude-fable-5` while the backend applies the premium model behavior and billing. SOL Max bills at 2x normal SOL usage, and SOL Ultra bills at 2.5x normal SOL usage.
119
+ CodexAPI.pro and ChatPlus Claude-family models use the CodexAPI.pro Claude-compatible Responses endpoint. MyAPI.world and MagnetAPI.org accounts keep their own API origins. Fable 5 remains visible as `claude-fable-5` while the backend applies the premium model behavior and billing. Premium billing stays server-managed and is not added to assistant output or customer model descriptions.
119
120
 
120
121
  ## Upgrade Checklist
121
122
 
@@ -125,17 +126,18 @@ When updating the bundled runtime dependency:
125
126
  2. Run `npm install @openai/codex@<version> --save-exact`.
126
127
  3. Bump `package.json` and `package-lock.json` to a new `@codexapi/codexclaude` version.
127
128
  4. Update `APP_VERSION` and `CODEX_VERSION` in `bin/codexclaude.js`.
128
- 5. Preserve `APP_DISPLAY_NAME = "Magnetapi Client"`.
129
+ 5. Preserve `APP_DISPLAY_NAME = "MagnetAPI.org Codex CLI"`.
129
130
  6. Preserve `DEFAULT_MODEL_ID = "gpt-5.6"`.
130
131
  7. Preserve `DISPLAY_REASONING_EFFORT = "xhigh"` and `SERVER_REASONING_EFFORT = "xhigh"` unless operations explicitly changes the launcher-visible contract.
131
132
  8. Preserve Full Access defaults and the local model catalog.
132
133
  9. Preserve direct platform-native binary launch.
133
134
  10. Preserve update checks through our version endpoint and `@codexapi/codexclaude` npm metadata only.
134
- 11. Preserve deletion of `~/.codex/version.json` and `check_for_update_on_startup = false`.
135
- 12. Update customer setup scripts on CodexAPI.pro, ChatPlus.chat, MyAPI.world, MagnetAPI.org, and VIP pages to use the exact hosted tarball command.
136
- 13. Update backend `CODEXCLAUDE_LATEST_VERSION`, `CODEXCLAUDE_MIN_VERSION`, and hosted tarball URL.
137
- 14. Update this file, `README.md`, and `CUSTOMIZATIONS.md`.
138
- 15. Run validation and publish.
135
+ 11. Preserve the interactive `Upgrade Now` flow and shell-free npm invocation.
136
+ 12. Preserve deletion of `~/.codex/version.json` and `check_for_update_on_startup = false`.
137
+ 13. Update customer setup scripts on CodexAPI.pro, ChatPlus.chat, MyAPI.world, MagnetAPI.org, and VIP pages to use the current release.
138
+ 14. Update backend `CODEXCLAUDE_LATEST_VERSION`, `CODEXCLAUDE_MIN_VERSION`, and hosted tarball URL.
139
+ 15. Update this file, `README.md`, and `CUSTOMIZATIONS.md`.
140
+ 16. Run validation and publish.
139
141
 
140
142
  ## Validation Commands
141
143
 
@@ -153,7 +155,7 @@ tmp_home="$(mktemp -d)"
153
155
  mkdir -p "$tmp_home/.codexclaude"
154
156
  cat > "$tmp_home/.codexclaude/config.json" <<'JSON'
155
157
  {
156
- "version": "2.0.22",
158
+ "version": "2.0.24",
157
159
  "serviceId": "codexapi",
158
160
  "serviceLabel": "CodexAPI.pro",
159
161
  "apiOrigin": "https://codexapi.pro",
@@ -190,10 +192,23 @@ After packaging, copy the tarball to the public downloads directories, restart t
190
192
 
191
193
  ```bash
192
194
  curl -fsS "https://codexapi.pro/api/v1/codexclaude/version?current=2.0.17"
193
- curl -fsSI "https://codexapi.pro/downloads/codexapi-codexclaude-2.0.22.tgz"
195
+ curl -fsSI "https://codexapi.pro/downloads/codexapi-codexclaude-2.0.24.tgz"
194
196
  ```
195
197
 
196
- The version endpoint must report `latestVersion = 2.0.22`, `minimumVersion = 2.0.22`, and `updateRequired = true` for old clients.
198
+ The version endpoint must report `latestVersion = 2.0.24`, `minimumVersion = 2.0.24`, and `updateRequired = true` for old clients.
199
+
200
+ ## Version 2.0.24 Changes
201
+
202
+ - Updated the bundled runtime dependency to `@openai/codex@0.144.4`.
203
+ - Changed launcher-owned titles, help, status, terminal title, and version output to `MagnetAPI.org Codex CLI v2.0.24`.
204
+ - Added the interactive mandatory `Upgrade Now` action backed by `@codexapi/codexclaude@latest`.
205
+ - Preserved dashboard login, wallet status, Full Access, managed models, web search, local tools, and upstream update suppression.
206
+
207
+ ## Version 2.0.23 Changes
208
+
209
+ - Removed wallet multiplier notices from the customer model picker and model descriptions.
210
+ - Kept premium billing and route selection server-managed without altering assistant output.
211
+ - Required older clients to synchronize so the removed notices cannot persist locally.
197
212
 
198
213
  ## Version 2.0.22 Changes
199
214
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@codexapi/codexclaude",
3
- "version": "2.0.22",
4
- "description": "Magnetapi Client launcher for ChatGPT-5.5, Opus 4.8, Sonnet 5, and Fable 5.",
3
+ "version": "2.0.24",
4
+ "description": "MagnetAPI.org Codex CLI for GPT-5.6, Opus 4.8, Sonnet 5, and Fable 5.",
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.144.3"
20
+ "@openai/codex": "0.144.4"
21
21
  },
22
22
  "publishConfig": {
23
23
  "access": "public"