@codexapi/codexclaude 2.0.14 → 2.0.16
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 +13 -14
- package/README.md +10 -11
- package/bin/codexclaude.js +62 -46
- package/codexclaude.md +32 -26
- package/package.json +3 -7
package/CUSTOMIZATIONS.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# CodexAPI.pro Customizations
|
|
2
2
|
|
|
3
|
-
`codexclaude` intentionally tracks the
|
|
3
|
+
`codexclaude` intentionally tracks the managed coding runtime while keeping a thin CodexAPI.pro launcher layer.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Runtime
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
7
|
+
- Customer-facing app name: `Magnetapi.org Coding Agent`
|
|
8
|
+
- Local launcher version: `2.0.16`
|
|
9
|
+
- Bundled official Codex dependency: `@openai/codex@0.143.0`
|
|
10
|
+
- Bundled coding runtime is managed internally and must not be advertised in customer-facing startup text.
|
|
10
11
|
|
|
11
12
|
## Launcher Behavior
|
|
12
13
|
|
|
@@ -14,16 +15,16 @@
|
|
|
14
15
|
- Saves the returned API username in `~/.codexclaude/config.json`.
|
|
15
16
|
- Rewrites `~/.codex/config.toml` before every launch.
|
|
16
17
|
- Starts official Codex with `--search` by default.
|
|
17
|
-
- Passes all unknown commands directly to the
|
|
18
|
-
- Provides `codexclaude changelog` so users can see
|
|
18
|
+
- Passes all unknown commands directly to the bundled coding runtime.
|
|
19
|
+
- Provides `codexclaude changelog` so users can see recommended or required update changes from the terminal.
|
|
19
20
|
- Does not expose separate `codexclaude status` or `codexclaude usage` commands; wallet information remains a compact pre-launch line.
|
|
20
|
-
-
|
|
21
|
+
- Shows a non-blocking update notice at startup when a newer recommended launcher is available. Only versions below the backend minimum may be blocked.
|
|
21
22
|
|
|
22
23
|
## Provider Config
|
|
23
24
|
|
|
24
25
|
The launcher writes a Codex model provider named `codexapi`:
|
|
25
26
|
|
|
26
|
-
- `base_url = "https://codexapi.pro/v1"` for ChatGPT-5.5,
|
|
27
|
+
- `base_url = "https://codexapi.pro/v1"` for ChatGPT-5.5, or `https://api-chicago.codexapi.pro/v1` for Claude-family models.
|
|
27
28
|
- `wire_api = "responses"`
|
|
28
29
|
- `supports_websockets = false`
|
|
29
30
|
- `experimental_bearer_token` set to the customer API username
|
|
@@ -31,20 +32,18 @@ The launcher writes a Codex model provider named `codexapi`:
|
|
|
31
32
|
|
|
32
33
|
## Runtime Defaults
|
|
33
34
|
|
|
34
|
-
- Model: selected by the user, defaulting to `gpt-5.5`; supported launcher choices are `gpt-5.5`, `claude-opus-4-8`, `claude-sonnet-5`, `claude-fable-5
|
|
35
|
+
- Model: selected by the user, defaulting to `gpt-5.5`; supported launcher choices are `gpt-5.5`, `claude-opus-4-8`, `claude-sonnet-5`, and `claude-fable-5`.
|
|
35
36
|
- Reasoning effort displayed in Codex: `xhigh`
|
|
36
37
|
- Server-side upstream reasoning effort: `high`, enforced by CodexAPI.pro regardless of client display.
|
|
37
|
-
- Local model catalog: `~/.codexclaude/model_catalog.json`; this keeps native Codex `/model` limited to the
|
|
38
|
+
- Local model catalog: `~/.codexclaude/model_catalog.json`; this keeps native Codex `/model` limited to the four supported CodexAPI.pro choices and prevents fallback metadata warnings for Opus 4.8, Sonnet 5, and Fable 5.
|
|
38
39
|
- Service tier: omitted by default; `/fast` remains a user-controlled Codex setting and is billed server-side when active.
|
|
39
40
|
- Approval policy: `never`
|
|
40
41
|
- Sandbox mode: `danger-full-access`
|
|
41
42
|
- TUI status line: `model-with-reasoning`, `fast-mode`, `current-dir`
|
|
42
43
|
- Claude-family Responses traffic uses the Claude-compatible CodexAPI.pro endpoint for CodexAPI.pro and ChatPlus accounts, while MyAPI.world accounts keep the MyAPI endpoint.
|
|
43
44
|
- Fable 5 stays visible to the user while the backend applies the custom routed premium path and 2x billing multiplier.
|
|
44
|
-
- Deepseek v4 Budget Responses traffic is routed through CodexAPI.pro's Deepseek-compatible gateway.
|
|
45
|
-
- Google Gemini Flash 3.5 Responses traffic keeps the user-visible Gemini model id while CodexAPI.pro routes it internally through Sonnet 5 with the configured server effort.
|
|
46
45
|
|
|
47
|
-
Current backend state verified on 2026-
|
|
46
|
+
Current backend state verified on 2026-07-08: Admin Manage Models controls runtime routing server-side. This operational routing must not change the launcher-visible model ids, model catalog, or customer-facing labels.
|
|
48
47
|
|
|
49
48
|
## Wallet Display
|
|
50
49
|
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# codexclaude
|
|
2
2
|
|
|
3
|
-
`codexclaude`
|
|
3
|
+
`codexclaude` installs the Magnetapi.org Coding Agent for customers who want one coding CLI that can use ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 against the same Token Wallet.
|
|
4
4
|
|
|
5
|
-
Version `2.0.
|
|
5
|
+
Version `2.0.16` applies account, wallet, model, and Full Access defaults before the coding session starts. It bundles official Codex `0.143.0`.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -12,12 +12,12 @@ npm install -g @codexapi/codexclaude@latest
|
|
|
12
12
|
|
|
13
13
|
This installs the current `codexclaude` launcher from npm.
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Update Notices
|
|
16
16
|
|
|
17
|
-
CodexAPI.pro checks the CodexAPI.pro API and npm at startup. If a newer
|
|
17
|
+
CodexAPI.pro checks the CodexAPI.pro API and npm at startup. If a newer recommended launcher is available, the app shows a clear update notice and the exact command, then lets you keep coding. Only versions below the backend minimum are blocked.
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npm install -g @codexapi/codexclaude@
|
|
20
|
+
npm install -g @codexapi/codexclaude@2.0.16
|
|
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.8`, `Sonnet 5`,
|
|
51
|
+
Available model labels are `ChatGPT-5.5`, `Opus 4.8`, `Sonnet 5`, and `Fable 5`. All four use a Responses-compatible endpoint and the same customer Token Wallet.
|
|
52
52
|
|
|
53
53
|
Show current launcher changes:
|
|
54
54
|
|
|
@@ -67,15 +67,14 @@ gpt-5.5 xhigh · ~/codexapi · Wallet $20.00
|
|
|
67
67
|
## Preserved CodexAPI.pro Customizations
|
|
68
68
|
|
|
69
69
|
- Dashboard username or email plus password login.
|
|
70
|
-
- ChatGPT-5.5, Opus 4.8, Sonnet 5,
|
|
70
|
+
- ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 model selection.
|
|
71
71
|
- CodexAPI.pro Responses-compatible provider at `https://codexapi.pro/v1`.
|
|
72
72
|
- Full Access defaults: approval policy `never` and sandbox mode `danger-full-access`.
|
|
73
73
|
- xhigh visible reasoning in the local Codex UI while CodexAPI.pro keeps upstream runtime effort server-managed.
|
|
74
|
-
- A local `~/.codexclaude/model_catalog.json` file so native Codex `/model` lists only ChatGPT-5.5, Opus 4.8, Sonnet 5,
|
|
74
|
+
- A local `~/.codexclaude/model_catalog.json` file so native Codex `/model` lists only ChatGPT-5.5, Opus 4.8, Sonnet 5, and Fable 5.
|
|
75
75
|
- No default fast service tier. Fast mode is billed only when the user enables it inside Codex.
|
|
76
|
-
-
|
|
76
|
+
- Magnetapi.org Coding Agent `2.0.16` with the current profile-compatible config enabled.
|
|
77
77
|
- Token Wallet balance lookup before launch without exposing separate `status` or `usage` launcher commands.
|
|
78
78
|
- Opus 4.8 tool-call compatibility through the Chicago CodexAPI.pro Responses gateway.
|
|
79
|
-
- Google Gemini Flash 3.5 is visible to users while CodexAPI.pro routes it server-side through the approved Sonnet 5 low-effort bridge.
|
|
80
79
|
- Backend-identifying request headers so CodexAPI.pro can enforce subscription plan rules server-side.
|
|
81
|
-
-
|
|
80
|
+
- Non-blocking update notices before coding starts, with an explicit update command when a newer recommended launcher exists.
|
package/bin/codexclaude.js
CHANGED
|
@@ -10,8 +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.
|
|
14
|
-
const CODEX_VERSION = "0.
|
|
13
|
+
const APP_VERSION = "2.0.16";
|
|
14
|
+
const CODEX_VERSION = "0.143.0";
|
|
15
|
+
const APP_DISPLAY_NAME = "Magnetapi.org Coding Agent";
|
|
15
16
|
const DISPLAY_REASONING_EFFORT = "xhigh";
|
|
16
17
|
const SERVER_REASONING_EFFORT = "high";
|
|
17
18
|
const API_ORIGIN = (process.env.CODEXCLAUDE_API_ORIGIN || "https://codexapi.pro").replace(/\/+$/, "");
|
|
@@ -63,24 +64,13 @@ const MODELS = {
|
|
|
63
64
|
aliases: ["4", "fable", "fable-5", "fabel", "fabel-5", "claude-fable-5", "claude-fabel-5"],
|
|
64
65
|
premium: true,
|
|
65
66
|
},
|
|
66
|
-
"deepseek-v4-pro": {
|
|
67
|
-
id: "deepseek-v4-pro",
|
|
68
|
-
label: "Deepseek v4 Budget",
|
|
69
|
-
aliases: ["5", "deepseek", "deepseek-v4", "deepseek-v4-pro", "budget"],
|
|
70
|
-
budget: true,
|
|
71
|
-
},
|
|
72
|
-
"gemini-3.5-flash": {
|
|
73
|
-
id: "gemini-3.5-flash",
|
|
74
|
-
label: "Google Gemini Flash 3.5",
|
|
75
|
-
aliases: ["6", "gemini", "flash", "gemini-flash", "gemini-3.5-flash", "gemini-flash-3.5", "google-gemini-flash-3.5"],
|
|
76
|
-
},
|
|
77
67
|
};
|
|
78
68
|
|
|
79
69
|
async function main() {
|
|
80
70
|
ensureExecutable();
|
|
81
71
|
const [command = "start", ...args] = process.argv.slice(2);
|
|
82
72
|
if (["-v", "--version", "version"].includes(command)) {
|
|
83
|
-
console.log(
|
|
73
|
+
console.log(`${APP_DISPLAY_NAME} ${APP_VERSION}`);
|
|
84
74
|
return;
|
|
85
75
|
}
|
|
86
76
|
if (["-h", "--help", "help"].includes(command)) {
|
|
@@ -125,18 +115,18 @@ async function main() {
|
|
|
125
115
|
|
|
126
116
|
function printHelp() {
|
|
127
117
|
console.log(`
|
|
128
|
-
|
|
118
|
+
${APP_DISPLAY_NAME} ${APP_VERSION}
|
|
129
119
|
|
|
130
120
|
Commands:
|
|
131
121
|
codexclaude login Login with CodexAPI.pro username/email and password
|
|
132
|
-
codexclaude model Select ChatGPT-5.5, Opus 4.8, Sonnet 5,
|
|
122
|
+
codexclaude model Select ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5
|
|
133
123
|
codexclaude changelog Show the latest CodexAPI.pro launcher changes
|
|
134
124
|
codexclaude setup Rewrite ~/.codex/config.toml with Full Access defaults
|
|
135
125
|
codexclaude start Start Codex with --search
|
|
136
126
|
codexclaude resume Resume with codex resume --search
|
|
137
127
|
codexclaude logout Remove saved codexclaude account state
|
|
138
128
|
|
|
139
|
-
Any other command is passed through to
|
|
129
|
+
Any other command is passed through to the bundled coding runtime after Magnetapi.org account and model config is applied.
|
|
140
130
|
`);
|
|
141
131
|
}
|
|
142
132
|
|
|
@@ -283,19 +273,9 @@ async function enforceLauncherVersion() {
|
|
|
283
273
|
if (metadata?.updateRequired || isOlderVersion(APP_VERSION, metadata?.minimumVersion)) {
|
|
284
274
|
throw new Error(updateRequiredMessage(metadata));
|
|
285
275
|
}
|
|
286
|
-
const
|
|
287
|
-
if (
|
|
288
|
-
|
|
289
|
-
updateRequiredMessage({
|
|
290
|
-
latestVersion: npmMetadata.version,
|
|
291
|
-
minimumVersion: npmMetadata.version,
|
|
292
|
-
installCommand: UPDATE_COMMAND,
|
|
293
|
-
registryInstallCommand: UPDATE_COMMAND,
|
|
294
|
-
changes: [
|
|
295
|
-
`npm latest is ${npmMetadata.version}; update codexclaude before starting a coding session.`,
|
|
296
|
-
],
|
|
297
|
-
}),
|
|
298
|
-
);
|
|
276
|
+
const updateMetadata = optionalUpdateMetadata(metadata, await npmLatestMetadata());
|
|
277
|
+
if (updateMetadata) {
|
|
278
|
+
printOptionalUpdateNotice(updateMetadata);
|
|
299
279
|
}
|
|
300
280
|
}
|
|
301
281
|
|
|
@@ -394,13 +374,49 @@ function updateRequiredMessage(metadata) {
|
|
|
394
374
|
const latest = metadata?.latestVersion || "latest";
|
|
395
375
|
const minimum = metadata?.minimumVersion || latest;
|
|
396
376
|
return [
|
|
397
|
-
`Update
|
|
377
|
+
`Update required: CodexAPI.pro has updated to codexclaude ${latest}. Update your agent now to continue.`,
|
|
398
378
|
`Installed codexclaude: ${APP_VERSION}. Required: ${minimum}. Latest: ${latest}.`,
|
|
399
379
|
`Run: ${installCommand}`,
|
|
400
380
|
"Your Codex session history will not be deleted. The update only replaces the codexclaude launcher and rewrites provider config backups.",
|
|
401
381
|
].join("\n");
|
|
402
382
|
}
|
|
403
383
|
|
|
384
|
+
function optionalUpdateMetadata(serviceMetadata, npmMetadata) {
|
|
385
|
+
const candidates = [serviceMetadata, npmMetadata].filter(Boolean);
|
|
386
|
+
let selected = null;
|
|
387
|
+
for (const candidate of candidates) {
|
|
388
|
+
const candidateVersion = candidate.latestVersion || candidate.version;
|
|
389
|
+
if (!candidateVersion || !isOlderVersion(APP_VERSION, candidateVersion)) {
|
|
390
|
+
continue;
|
|
391
|
+
}
|
|
392
|
+
if (!selected || isOlderVersion(selected.latestVersion || selected.version, candidateVersion)) {
|
|
393
|
+
selected = {
|
|
394
|
+
...candidate,
|
|
395
|
+
latestVersion: candidateVersion,
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return selected;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
function printOptionalUpdateNotice(metadata) {
|
|
403
|
+
const installCommand =
|
|
404
|
+
metadata?.installCommand ||
|
|
405
|
+
metadata?.registryInstallCommand ||
|
|
406
|
+
UPDATE_COMMAND;
|
|
407
|
+
const latest = metadata?.latestVersion || metadata?.version || "latest";
|
|
408
|
+
const changes = Array.isArray(metadata?.changes) ? metadata.changes.slice(0, 4) : [];
|
|
409
|
+
const border = "─".repeat(64);
|
|
410
|
+
const line = (text) => `│ ${String(text)}`.slice(0, 65).padEnd(65) + "│";
|
|
411
|
+
console.error(`\n┌${border}┐`);
|
|
412
|
+
console.error(line(`codexclaude ${latest} is available. You can keep coding on ${APP_VERSION}.`));
|
|
413
|
+
console.error(line(`Update when ready: ${installCommand}`));
|
|
414
|
+
for (const change of changes) {
|
|
415
|
+
console.error(line(`• ${change}`));
|
|
416
|
+
}
|
|
417
|
+
console.error(`└${border}┘\n`);
|
|
418
|
+
}
|
|
419
|
+
|
|
404
420
|
function isOlderVersion(current, required) {
|
|
405
421
|
if (!required) {
|
|
406
422
|
return false;
|
|
@@ -526,12 +542,6 @@ function modelCatalogDescription(modelId) {
|
|
|
526
542
|
if (modelId === "claude-fable-5") {
|
|
527
543
|
return "CodexAPI.pro Fable 5 premium coding route with local Codex tools and wallet billing.";
|
|
528
544
|
}
|
|
529
|
-
if (modelId === "deepseek-v4-pro") {
|
|
530
|
-
return "CodexAPI.pro Deepseek v4 Budget coding route with local Codex tools and wallet billing.";
|
|
531
|
-
}
|
|
532
|
-
if (modelId === "gemini-3.5-flash") {
|
|
533
|
-
return "CodexAPI.pro Google Gemini Flash 3.5 coding route with local Codex tools and wallet billing.";
|
|
534
|
-
}
|
|
535
545
|
return "CodexAPI.pro ChatGPT-5.5 coding route with local Codex tools and wallet billing.";
|
|
536
546
|
}
|
|
537
547
|
|
|
@@ -572,6 +582,7 @@ async function runCodex(args) {
|
|
|
572
582
|
if (!isTruthy(process.env.CODEXCLAUDE_QUIET_STATUS)) {
|
|
573
583
|
console.log(formatStatusLine(config, wallet, process.cwd()));
|
|
574
584
|
}
|
|
585
|
+
process.stdout.write(`\x1b]0;${APP_DISPLAY_NAME} v${APP_VERSION}\x07`);
|
|
575
586
|
const launch = resolveCodexLaunch();
|
|
576
587
|
const env = {
|
|
577
588
|
...process.env,
|
|
@@ -687,7 +698,7 @@ function numericWalletValue(value) {
|
|
|
687
698
|
function formatStatusLine(config, wallet, cwd) {
|
|
688
699
|
const model = modelStatusName(config.model);
|
|
689
700
|
const walletText = wallet ? `Wallet ${formatUsd(wallet.balance)}` : "Wallet unavailable";
|
|
690
|
-
return `${model} ${DISPLAY_REASONING_EFFORT} · ${formatCwd(cwd)} · ${walletText}`;
|
|
701
|
+
return `${APP_DISPLAY_NAME} v${APP_VERSION} · ${model} ${DISPLAY_REASONING_EFFORT} · ${formatCwd(cwd)} · ${walletText}`;
|
|
691
702
|
}
|
|
692
703
|
|
|
693
704
|
function modelStatusName(model) {
|
|
@@ -700,12 +711,6 @@ function modelStatusName(model) {
|
|
|
700
711
|
if (model === "claude-fable-5") {
|
|
701
712
|
return "fable-5";
|
|
702
713
|
}
|
|
703
|
-
if (model === "deepseek-v4-pro") {
|
|
704
|
-
return "deepseek-v4 budget";
|
|
705
|
-
}
|
|
706
|
-
if (model === "gemini-3.5-flash") {
|
|
707
|
-
return "gemini flash 3.5";
|
|
708
|
-
}
|
|
709
714
|
return "gpt-5.5";
|
|
710
715
|
}
|
|
711
716
|
|
|
@@ -723,8 +728,19 @@ function normalizeConfig(config) {
|
|
|
723
728
|
if (["claude-fabel-5", "fable-5", "fabel-5"].includes(normalized.model)) {
|
|
724
729
|
normalized.model = "claude-fable-5";
|
|
725
730
|
}
|
|
726
|
-
if (
|
|
727
|
-
|
|
731
|
+
if (
|
|
732
|
+
[
|
|
733
|
+
"deepseek-v4-pro",
|
|
734
|
+
"deepseek-v4-budget",
|
|
735
|
+
"deepseek",
|
|
736
|
+
"budget",
|
|
737
|
+
"gemini-3.5-flash",
|
|
738
|
+
"gemini-flash-3.5",
|
|
739
|
+
"gemini-flash-3-5",
|
|
740
|
+
"google-gemini-flash-3.5",
|
|
741
|
+
].includes(normalized.model)
|
|
742
|
+
) {
|
|
743
|
+
normalized.model = "gpt-5.5";
|
|
728
744
|
}
|
|
729
745
|
if (!MODELS[normalized.model]) {
|
|
730
746
|
normalized.model = "gpt-5.5";
|
package/codexclaude.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# codexclaude Customization Ledger
|
|
2
2
|
|
|
3
3
|
This file records the CodexAPI.pro-specific behavior that must survive every
|
|
4
|
-
upgrade of the
|
|
4
|
+
upgrade of the bundled coding runtime dependency. Treat it as the handoff
|
|
5
5
|
document for future maintainers. The launcher should remain a thin wrapper
|
|
6
6
|
around official `@openai/codex`; do not patch the native Codex binary unless
|
|
7
7
|
there is no supported configuration or API boundary that can solve the issue.
|
|
@@ -9,9 +9,10 @@ there is no supported configuration or API boundary that can solve the issue.
|
|
|
9
9
|
## Current Release
|
|
10
10
|
|
|
11
11
|
- Launcher package: `@codexapi/codexclaude`
|
|
12
|
-
- Launcher version: `2.0.
|
|
13
|
-
-
|
|
14
|
-
-
|
|
12
|
+
- Launcher version: `2.0.16`
|
|
13
|
+
- Customer-facing app name: `Magnetapi.org Coding Agent`
|
|
14
|
+
- Bundled runtime dependency: official `@openai/codex@0.143.0`; do not print the upstream runtime version in customer-facing startup text.
|
|
15
|
+
- Public update command for this optional release: `npm install -g @codexapi/codexclaude@2.0.16`
|
|
15
16
|
- Default API origin: `https://codexapi.pro`
|
|
16
17
|
- Normal Responses base URL: `https://codexapi.pro/v1`
|
|
17
18
|
- Opus 4.8 Responses base URL: `https://api-chicago.codexapi.pro/v1`
|
|
@@ -19,21 +20,19 @@ there is no supported configuration or API boundary that can solve the issue.
|
|
|
19
20
|
- Generated Codex config: `~/.codex/config.toml`
|
|
20
21
|
- Generated Codex model catalog: `~/.codexclaude/model_catalog.json`
|
|
21
22
|
|
|
22
|
-
State verified on 2026-07-
|
|
23
|
+
State verified on 2026-07-08: the launcher presents itself as Magnetapi.org Coding Agent `2.0.16`. Backend routing is server-controlled by Admin Manage Models and must not collapse the launcher model list or rename customer-selected model ids.
|
|
23
24
|
|
|
24
25
|
## Required User-Facing Model Behavior
|
|
25
26
|
|
|
26
|
-
`codexclaude` supports exactly
|
|
27
|
+
`codexclaude` supports exactly four visible model choices:
|
|
27
28
|
|
|
28
29
|
- `gpt-5.5` displayed as `ChatGPT-5.5`
|
|
29
30
|
- `claude-opus-4-8` displayed as `Opus 4.8`
|
|
30
31
|
- `claude-sonnet-5` displayed as `Sonnet 5`
|
|
31
32
|
- `claude-fable-5` displayed as `Fable 5`
|
|
32
|
-
- `deepseek-v4-pro` displayed as `Deepseek v4 Budget`
|
|
33
|
-
- `gemini-3.5-flash` displayed as `Google Gemini Flash 3.5`
|
|
34
33
|
|
|
35
|
-
The launcher command `codexclaude model` must list only those
|
|
36
|
-
The native Codex `/model` picker must also list only those
|
|
34
|
+
The launcher command `codexclaude model` must list only those four options.
|
|
35
|
+
The native Codex `/model` picker must also list only those four options. This
|
|
37
36
|
is enforced by writing `model_catalog_json` in `~/.codex/config.toml` and
|
|
38
37
|
creating a complete Codex-compatible catalog at
|
|
39
38
|
`~/.codexclaude/model_catalog.json`.
|
|
@@ -58,7 +57,7 @@ because the request body model is how CodexAPI.pro snapshots routing and
|
|
|
58
57
|
billing before generation starts. The correct fix is to provide valid metadata
|
|
59
58
|
for `claude-opus-4-8`.
|
|
60
59
|
|
|
61
|
-
`bin/codexclaude.js` writes a local catalog with full metadata for all
|
|
60
|
+
`bin/codexclaude.js` writes a local catalog with full metadata for all four
|
|
62
61
|
supported slugs. Each entry must include, at minimum:
|
|
63
62
|
|
|
64
63
|
- `slug`
|
|
@@ -77,7 +76,7 @@ supported slugs. Each entry must include, at minimum:
|
|
|
77
76
|
- `input_modalities`
|
|
78
77
|
- `additional_speed_tiers`
|
|
79
78
|
|
|
80
|
-
Keep `visibility = "list"` for the
|
|
79
|
+
Keep `visibility = "list"` for the four supported entries. Do not include any
|
|
81
80
|
other list-visible models in this catalog.
|
|
82
81
|
|
|
83
82
|
## Reasoning Display Versus Server Runtime
|
|
@@ -141,7 +140,7 @@ terminal_title = ["project-name", "model-with-reasoning", "run-state"]
|
|
|
141
140
|
```
|
|
142
141
|
|
|
143
142
|
The selected model must remain the user's chosen slug. Do not force the local
|
|
144
|
-
config model to `gpt-5.5` when Opus, Sonnet,
|
|
143
|
+
config model to `gpt-5.5` when Opus, Sonnet, or Fable is selected. The backend can
|
|
145
144
|
route any selected model through GPT-5.5 or another upstream internally, but the
|
|
146
145
|
client request must preserve the user-facing selected slug for display,
|
|
147
146
|
snapshotting, and billing records.
|
|
@@ -154,14 +153,6 @@ Claude-family codexclaude models use the CodexAPI.pro Claude-compatible Response
|
|
|
154
153
|
|
|
155
154
|
`claude-fable-5` is a premium customer-visible model. The backend bills it at the configured 2x multiplier and routes it through the Admin-selected Fable 5 route while preserving `claude-fable-5` in client-visible status and usage records.
|
|
156
155
|
|
|
157
|
-
`deepseek-v4-pro` uses the configured API origin. The backend currently routes
|
|
158
|
-
this through the CodexAPI.pro-compatible path according to the active server
|
|
159
|
-
policy.
|
|
160
|
-
|
|
161
|
-
`gemini-3.5-flash` uses the configured API origin. The backend must keep
|
|
162
|
-
`gemini-3.5-flash` visible to the user and usage records while routing the
|
|
163
|
-
request internally through `claude-sonnet-5` at the configured server effort.
|
|
164
|
-
|
|
165
156
|
The launcher must send these headers for every model:
|
|
166
157
|
|
|
167
158
|
- `X-CodexAPI-Client: codexclaude`
|
|
@@ -211,8 +202,8 @@ When upgrading official `@openai/codex`:
|
|
|
211
202
|
|
|
212
203
|
1. Update `CODEX_VERSION` in `bin/codexclaude.js`.
|
|
213
204
|
2. Update `package.json` and `package-lock.json` to the same official Codex version.
|
|
214
|
-
3. Keep the launcher package version higher than the last published version.
|
|
215
|
-
4. Preserve the
|
|
205
|
+
3. Keep the launcher package version higher than the last published version and keep customer-facing startup text on the Magnetapi.org Coding Agent version.
|
|
206
|
+
4. Preserve the four-model `MODELS` map and aliases.
|
|
216
207
|
5. Preserve `DISPLAY_REASONING_EFFORT = "xhigh"` and keep `SERVER_REASONING_EFFORT` aligned with the server default.
|
|
217
208
|
6. Preserve `writeModelCatalog()` and the `model_catalog_json` line in generated config.
|
|
218
209
|
7. Preserve Full Access defaults: `approval_policy = "never"` and `sandbox_mode = "danger-full-access"`.
|
|
@@ -220,7 +211,7 @@ When upgrading official `@openai/codex`:
|
|
|
220
211
|
9. Preserve bearer username auth with the CodexAPI.pro API username.
|
|
221
212
|
10. Preserve the `X-CodexAPI-*` headers.
|
|
222
213
|
11. Preserve Claude-family endpoint routing unless operations changes it.
|
|
223
|
-
12. Preserve update
|
|
214
|
+
12. Preserve update checks through `/api/v1/codexclaude/version` and npm metadata. Recommended releases must be non-blocking; only versions below the backend `minimumVersion` may be forced.
|
|
224
215
|
13. Update this file with a new release section explaining what changed.
|
|
225
216
|
14. Run the validation commands below before publishing.
|
|
226
217
|
|
|
@@ -250,8 +241,8 @@ The JSON output must contain exactly:
|
|
|
250
241
|
|
|
251
242
|
- `gpt-5.5`
|
|
252
243
|
- `claude-opus-4-8`
|
|
253
|
-
- `
|
|
254
|
-
- `
|
|
244
|
+
- `claude-sonnet-5`
|
|
245
|
+
- `claude-fable-5`
|
|
255
246
|
|
|
256
247
|
The Opus entry must have `default_reasoning_level = "xhigh"` and must not use
|
|
257
248
|
fallback metadata.
|
|
@@ -270,6 +261,21 @@ python3 -m py_compile app/main.py app/openai_compat.py app/config.py app/postgre
|
|
|
270
261
|
/root/codexapi/.venv/bin/pytest -q tests/test_openai_compat.py tests/test_main_helpers.py
|
|
271
262
|
```
|
|
272
263
|
|
|
264
|
+
## Version 2.0.16 Changes
|
|
265
|
+
|
|
266
|
+
- Updated the bundled official Codex dependency to `@openai/codex@0.143.0`.
|
|
267
|
+
- Kept the launcher model picker and native Codex `/model` catalog limited to ChatGPT-5.5, Opus 4.8, Sonnet 5, and Fable 5.
|
|
268
|
+
- Kept the customer-facing startup identity as Magnetapi.org Coding Agent and continued hiding the upstream Codex runtime version in normal startup text.
|
|
269
|
+
- Changed the update surface for this release to a recommended, non-blocking notice. Users should be shown the exact update command, but they must not be forced off `2.0.15` for this release.
|
|
270
|
+
- Preserved Full Access defaults, xhigh visible reasoning, bearer username auth, Responses wire API, and the CodexAPI.pro identification headers.
|
|
271
|
+
|
|
272
|
+
## Version 2.0.15 Changes
|
|
273
|
+
|
|
274
|
+
- Renamed the launcher-controlled startup/status surface to Magnetapi.org Coding Agent and now prints the app version instead of the upstream runtime version.
|
|
275
|
+
- Removed Gemini Flash and Deepseek from the launcher model picker and generated native Codex model catalog.
|
|
276
|
+
- Kept ChatGPT-5.5, Opus 4.8, Sonnet 5, and Fable 5 as the only visible codexclaude model choices.
|
|
277
|
+
- Preserved Full Access defaults, xhigh visible reasoning, wallet auth, local model catalog metadata, and CodexAPI.pro identifying headers.
|
|
278
|
+
|
|
273
279
|
## Version 2.0.14 Changes
|
|
274
280
|
|
|
275
281
|
- Updated the official OpenAI Codex runtime dependency to `@openai/codex@0.142.5`, the latest version currently published on npm.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codexapi/codexclaude",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.16",
|
|
4
|
+
"description": "Magnetapi.org Coding Agent launcher for ChatGPT-5.5, 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": "
|
|
20
|
+
"@openai/codex": "0.143.0"
|
|
21
21
|
},
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"access": "public"
|
|
@@ -26,10 +26,6 @@
|
|
|
26
26
|
"codex",
|
|
27
27
|
"claude",
|
|
28
28
|
"opus",
|
|
29
|
-
"deepseek",
|
|
30
|
-
"gemini",
|
|
31
|
-
"flash",
|
|
32
|
-
"budget",
|
|
33
29
|
"codexapi",
|
|
34
30
|
"coding-cli"
|
|
35
31
|
],
|