@codexapi/codexclaude 2.0.19 → 2.0.21
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 -12
- package/README.md +10 -10
- package/bin/codexclaude.js +71 -16
- package/codexclaude.md +31 -27
- package/package.json +1 -1
package/CUSTOMIZATIONS.md
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
## Runtime
|
|
6
6
|
|
|
7
7
|
- Customer-facing app name: `Magnetapi Client`
|
|
8
|
-
- Local launcher version: `2.0.
|
|
8
|
+
- Local launcher version: `2.0.21`
|
|
9
9
|
- Bundled official runtime dependency: `@openai/codex@0.144.1`
|
|
10
|
-
- Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.
|
|
10
|
+
- Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.21.tgz`
|
|
11
11
|
- Bundled runtime version is managed internally and must not be used for customer update prompts.
|
|
12
12
|
- Launcher update checks may call the CodexAPI.pro version endpoint and `@codexapi/codexclaude` npm metadata only.
|
|
13
13
|
- The launcher must never check `@openai/codex` npm metadata or OpenAI GitHub releases for update notices.
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
- Passes unknown commands directly to the bundled runtime after config is applied.
|
|
25
25
|
- Provides `codexclaude changelog` using the managed version endpoint.
|
|
26
26
|
- Does not expose separate `codexclaude status` or `codexclaude usage` commands; wallet information remains a compact pre-launch line.
|
|
27
|
-
- Version `2.0.
|
|
27
|
+
- Version `2.0.21` is forced by the backend minimum version and older clients must show an update-required message.
|
|
28
28
|
|
|
29
29
|
## Provider Config
|
|
30
30
|
|
|
@@ -41,17 +41,18 @@ The launcher writes a model provider named `codexapi`:
|
|
|
41
41
|
|
|
42
42
|
## Runtime Defaults
|
|
43
43
|
|
|
44
|
-
- Default model: `
|
|
45
|
-
- Supported launcher choices: `gpt-5.5`, `claude-opus-4-8`, `claude-sonnet-5`, and `claude-fable-5`
|
|
46
|
-
- Reasoning effort displayed locally: `xhigh`
|
|
47
|
-
- Reasoning hint sent in launcher env:
|
|
44
|
+
- Default model: `gpt-5.6-sol` displayed as `GPT-5.6 SOL`
|
|
45
|
+
- Supported launcher choices: `gpt-5.6-sol-max`, `gpt-5.6-sol-ultra`, `gpt-5.6-sol`, `gpt-5.5`, `claude-opus-4-8`, `claude-sonnet-5`, and `claude-fable-5`
|
|
46
|
+
- Reasoning effort displayed locally: model-specific (`low`, `max`, `ultra`, or `xhigh` fallback)
|
|
47
|
+
- Reasoning hint sent in launcher env: model-specific
|
|
48
48
|
- Approval policy: `never`
|
|
49
49
|
- Sandbox mode: `danger-full-access`
|
|
50
50
|
- Display wording for permissions: `Full Access` in launcher-owned copy
|
|
51
|
-
- Local model catalog: `~/.codexclaude/model_catalog.json`; this keeps the native `/model` picker limited to the
|
|
51
|
+
- 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
52
|
- Service tier: omitted by default; `/fast` remains user-controlled and billed server-side when active.
|
|
53
53
|
- TUI status line: `model-with-reasoning`, `fast-mode`, `current-dir`
|
|
54
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.
|
|
55
56
|
|
|
56
57
|
## Wallet Display
|
|
57
58
|
|
|
@@ -60,7 +61,7 @@ Before launching the runtime, the launcher calls `/api/v1/wallet/status`, then `
|
|
|
60
61
|
Expected status line:
|
|
61
62
|
|
|
62
63
|
```text
|
|
63
|
-
Magnetapi Client v2.0.
|
|
64
|
+
Magnetapi Client v2.0.21 · gpt-5.6-sol low · ~/project · Wallet $20.00
|
|
64
65
|
```
|
|
65
66
|
|
|
66
67
|
## Upgrade Checklist
|
|
@@ -71,14 +72,14 @@ When updating the bundled runtime:
|
|
|
71
72
|
2. Update `@openai/codex` in `package.json` and `package-lock.json`.
|
|
72
73
|
3. Bump the launcher package version.
|
|
73
74
|
4. Keep `APP_DISPLAY_NAME = "Magnetapi Client"`.
|
|
74
|
-
5. Keep `DEFAULT_MODEL_ID = "
|
|
75
|
-
6. Keep `
|
|
75
|
+
5. Keep `DEFAULT_MODEL_ID = "gpt-5.6-sol"`.
|
|
76
|
+
6. Keep `reasoningEffortForModel()` and model-specific visible reasoning.
|
|
76
77
|
7. Keep Full Access defaults: `approval_policy = "never"` and `sandbox_mode = "danger-full-access"`.
|
|
77
78
|
8. Keep `check_for_update_on_startup = false`.
|
|
78
79
|
9. Keep `clearUpstreamUpdateCache()` deleting `~/.codex/version.json`.
|
|
79
80
|
10. Keep direct platform binary launch and do not fall back to the upstream npm wrapper.
|
|
80
81
|
11. Keep update checks limited to `/api/v1/codexclaude/version` and `@codexapi/codexclaude` npm metadata.
|
|
81
|
-
12. Keep the
|
|
82
|
+
12. Keep the managed `MODELS` map and local model catalog, including SOL Max and SOL Ultra.
|
|
82
83
|
13. Keep bearer username auth and the `X-CodexAPI-*` headers.
|
|
83
84
|
14. Update `README.md`, `CUSTOMIZATIONS.md`, and `codexclaude.md`.
|
|
84
85
|
15. 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 ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 against the same Token Wallet.
|
|
3
|
+
`codexclaude` installs the Magnetapi Client for customers who want one coding CLI that can use 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.
|
|
5
|
+
Version `2.0.21` is a required major sync release. It bundles official Codex runtime dependency `@openai/codex@0.144.1`, launches the platform-native runtime binary directly, disables upstream OpenAI update prompts, and applies account, wallet, model, Full Access, GPT-5.6 SOL default, and model-specific visible reasoning before each coding session starts.
|
|
6
6
|
|
|
7
7
|
## Install Or Update
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.
|
|
10
|
+
npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.21.tgz
|
|
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.
|
|
19
|
+
Version `2.0.21` is currently enforced as the minimum supported version, so older launchers show a required update message with the exact hosted tarball command above.
|
|
20
20
|
|
|
21
21
|
## First Login
|
|
22
22
|
|
|
@@ -24,7 +24,7 @@ Version `2.0.19` is currently enforced as the minimum supported version, so olde
|
|
|
24
24
|
codexclaude login
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Enter the Dashboard Username or Email Address and password. The launcher can log in to CodexAPI.pro, ChatPlus.chat, MyAPI.world, or MagnetAPI.org, then saves the correct System Token locally, writes `~/.codex/config.toml`, sets Full Access defaults, and lets the customer choose the coding model. If the customer presses Enter at the model prompt,
|
|
27
|
+
Enter the Dashboard Username or Email Address and password. The launcher can log in to CodexAPI.pro, ChatPlus.chat, MyAPI.world, or MagnetAPI.org, then saves the correct System Token locally, writes `~/.codex/config.toml`, sets Full Access defaults, and lets the customer choose the coding model. If the customer presses Enter at the model prompt, GPT-5.6 SOL is selected by default.
|
|
28
28
|
|
|
29
29
|
## Start Coding
|
|
30
30
|
|
|
@@ -44,7 +44,7 @@ Switch model:
|
|
|
44
44
|
codexclaude model
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
Available model labels are `ChatGPT-5.5`, `Opus 4.8`, `Sonnet 5`, and `Fable 5`. All
|
|
47
|
+
Available model labels are `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.
|
|
48
48
|
|
|
49
49
|
Show current launcher changes:
|
|
50
50
|
|
|
@@ -57,17 +57,17 @@ 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.
|
|
60
|
+
Magnetapi Client v2.0.21 · gpt-5.6-sol low · ~/project · Wallet $20.00
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
## Preserved Customizations
|
|
64
64
|
|
|
65
65
|
- Dashboard Username or Email Address plus password login for CodexAPI.pro, ChatPlus.chat, MyAPI.world, and MagnetAPI.org.
|
|
66
|
-
- ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 model selection, with
|
|
66
|
+
- GPT-5.6 SOL Max, GPT-5.6 SOL Ultra, GPT-5.6 SOL, ChatGPT-5.5, Opus 4.8, Sonnet 5, or Fable 5 model selection, with GPT-5.6 SOL as the default.
|
|
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
|
-
-
|
|
70
|
-
- A local `~/.codexclaude/model_catalog.json` file so the native `/model` picker lists only
|
|
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.
|
|
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.
|
package/bin/codexclaude.js
CHANGED
|
@@ -10,12 +10,12 @@ 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.
|
|
13
|
+
const APP_VERSION = "2.0.21";
|
|
14
14
|
const CODEX_VERSION = "0.144.1";
|
|
15
15
|
const APP_DISPLAY_NAME = "Magnetapi Client";
|
|
16
|
-
const DEFAULT_MODEL_ID = "
|
|
17
|
-
const
|
|
18
|
-
const
|
|
16
|
+
const DEFAULT_MODEL_ID = "gpt-5.6-sol";
|
|
17
|
+
const DEFAULT_DISPLAY_REASONING_EFFORT = "xhigh";
|
|
18
|
+
const DEFAULT_SERVER_REASONING_EFFORT = "xhigh";
|
|
19
19
|
const API_ORIGIN = (process.env.CODEXCLAUDE_API_ORIGIN || "https://codexapi.pro").replace(/\/+$/, "");
|
|
20
20
|
const API_BASE_URL = `${API_ORIGIN}/v1`;
|
|
21
21
|
const CHICAGO_API_ORIGIN = "https://api-chicago.codexapi.pro";
|
|
@@ -69,29 +69,52 @@ const SUPPORTED_REASONING_LEVELS = [
|
|
|
69
69
|
{ effort: "medium", description: "Balances speed and reasoning depth for everyday coding" },
|
|
70
70
|
{ effort: "high", description: "Greater reasoning depth for complex work" },
|
|
71
71
|
{ effort: "xhigh", description: "Extra high visible reasoning setting for managed sessions" },
|
|
72
|
+
{ effort: "max", description: "GPT-5.6 SOL Max visible reasoning mode" },
|
|
73
|
+
{ effort: "ultra", description: "GPT-5.6 SOL Ultra visible reasoning mode" },
|
|
72
74
|
];
|
|
73
75
|
|
|
74
76
|
const MODELS = {
|
|
77
|
+
"gpt-5.6-sol-max": {
|
|
78
|
+
id: "gpt-5.6-sol-max",
|
|
79
|
+
label: "GPT-5.6 SOL Max",
|
|
80
|
+
aliases: ["1", "gpt-5.6-sol-max", "gpt-5.6-max", "gpt56-max", "sol-max", "max"],
|
|
81
|
+
premiumLabel: "2x premium billing",
|
|
82
|
+
reasoningEffort: "max",
|
|
83
|
+
},
|
|
84
|
+
"gpt-5.6-sol-ultra": {
|
|
85
|
+
id: "gpt-5.6-sol-ultra",
|
|
86
|
+
label: "GPT-5.6 SOL Ultra",
|
|
87
|
+
aliases: ["2", "gpt-5.6-sol-ultra", "gpt-5.6-ultra", "gpt56-ultra", "sol-ultra", "ultra"],
|
|
88
|
+
premiumLabel: "2.5x premium billing",
|
|
89
|
+
reasoningEffort: "ultra",
|
|
90
|
+
},
|
|
91
|
+
"gpt-5.6-sol": {
|
|
92
|
+
id: "gpt-5.6-sol",
|
|
93
|
+
label: "GPT-5.6 SOL",
|
|
94
|
+
aliases: ["3", "gpt-5.6-sol", "gpt-5.6", "gpt56", "sol"],
|
|
95
|
+
reasoningEffort: "low",
|
|
96
|
+
},
|
|
75
97
|
"gpt-5.5": {
|
|
76
98
|
id: "gpt-5.5",
|
|
77
99
|
label: "ChatGPT-5.5",
|
|
78
|
-
aliases: ["
|
|
100
|
+
aliases: ["4", "gpt", "gpt-5.5", "chatgpt", "chatgpt-5.5"],
|
|
79
101
|
},
|
|
80
102
|
"claude-opus-4-8": {
|
|
81
103
|
id: "claude-opus-4-8",
|
|
82
104
|
label: "Opus 4.8",
|
|
83
|
-
aliases: ["
|
|
105
|
+
aliases: ["5", "opus", "opus-4.8", "opus-4.7", "claude", "claude-opus-4-8", "claude-opus-4-7"],
|
|
84
106
|
},
|
|
85
107
|
"claude-sonnet-5": {
|
|
86
108
|
id: "claude-sonnet-5",
|
|
87
109
|
label: "Sonnet 5",
|
|
88
|
-
aliases: ["
|
|
110
|
+
aliases: ["6", "sonnet", "sonnet-5", "sonnet-4.6", "sonnet-4-6", "claude-sonnet-5", "claude-sonnet-4-6", "claude-sonnet-4.6"],
|
|
89
111
|
},
|
|
90
112
|
"claude-fable-5": {
|
|
91
113
|
id: "claude-fable-5",
|
|
92
114
|
label: "Fable 5",
|
|
93
|
-
aliases: ["
|
|
115
|
+
aliases: ["7", "fable", "fable-5", "fabel", "fabel-5", "claude-fable-5", "claude-fabel-5"],
|
|
94
116
|
premium: true,
|
|
117
|
+
premiumLabel: "2x premium billing",
|
|
95
118
|
},
|
|
96
119
|
};
|
|
97
120
|
|
|
@@ -213,7 +236,7 @@ async function loginFlow() {
|
|
|
213
236
|
saveConfig(config);
|
|
214
237
|
writeCodexConfig(config);
|
|
215
238
|
console.log(`\nLogged in to ${service.label} as ${apiUsername}. Model: ${MODELS[selectedModel].label}.`);
|
|
216
|
-
console.log("Full Access permissions,
|
|
239
|
+
console.log("Full Access permissions, model-specific visible reasoning, and service-specific provider config were written.");
|
|
217
240
|
} finally {
|
|
218
241
|
rl.close();
|
|
219
242
|
}
|
|
@@ -330,7 +353,7 @@ async function modelFlow() {
|
|
|
330
353
|
async function setupFlow() {
|
|
331
354
|
const config = requireConfig();
|
|
332
355
|
writeCodexConfig(config);
|
|
333
|
-
console.log(`Configured ${CODEX_CONFIG_FILE} for ${MODELS[config.model].label} with Full Access,
|
|
356
|
+
console.log(`Configured ${CODEX_CONFIG_FILE} for ${MODELS[config.model].label} with Full Access, model-specific visible reasoning, and server-managed routing.`);
|
|
334
357
|
}
|
|
335
358
|
|
|
336
359
|
async function ensureReady() {
|
|
@@ -348,7 +371,7 @@ async function askModel(rl, current) {
|
|
|
348
371
|
const currentLabel = MODELS[current]?.label || MODELS[DEFAULT_MODEL_ID].label;
|
|
349
372
|
console.log("\nChoose your coding model:");
|
|
350
373
|
Object.values(MODELS).forEach((model, index) => {
|
|
351
|
-
const premium = model.premium ? " (2x premium billing)" : "";
|
|
374
|
+
const premium = model.premiumLabel ? ` (${model.premiumLabel})` : model.premium ? " (2x premium billing)" : "";
|
|
352
375
|
console.log(` ${index + 1}. ${model.label}${premium}`);
|
|
353
376
|
});
|
|
354
377
|
const answer = (await rl.question(`Model [${currentLabel}]: `)).trim().toLowerCase();
|
|
@@ -586,6 +609,7 @@ function writeCodexConfig(config) {
|
|
|
586
609
|
const normalized = normalizeConfig(config);
|
|
587
610
|
clearUpstreamUpdateCache();
|
|
588
611
|
const model = MODELS[normalized.model] ? normalized.model : DEFAULT_MODEL_ID;
|
|
612
|
+
const reasoningEffort = reasoningEffortForModel(model);
|
|
589
613
|
const providerBaseUrl = providerBaseUrlForConfig(normalized);
|
|
590
614
|
const modelCatalogFile = writeModelCatalog();
|
|
591
615
|
const toml = [
|
|
@@ -593,7 +617,7 @@ function writeCodexConfig(config) {
|
|
|
593
617
|
`model_catalog_json = ${tomlString(modelCatalogFile)}`,
|
|
594
618
|
'preferred_auth_method = "apikey"',
|
|
595
619
|
`model_provider = ${tomlString(PROVIDER_ID)}`,
|
|
596
|
-
`model_reasoning_effort = ${tomlString(
|
|
620
|
+
`model_reasoning_effort = ${tomlString(reasoningEffort)}`,
|
|
597
621
|
"check_for_update_on_startup = false",
|
|
598
622
|
"analytics_enabled = false",
|
|
599
623
|
"feedback_enabled = false",
|
|
@@ -655,7 +679,7 @@ function modelCatalogEntry(model, index) {
|
|
|
655
679
|
slug: model.id,
|
|
656
680
|
display_name: model.label,
|
|
657
681
|
description: modelCatalogDescription(model.id),
|
|
658
|
-
default_reasoning_level:
|
|
682
|
+
default_reasoning_level: reasoningEffortForModel(model.id),
|
|
659
683
|
supported_reasoning_levels: SUPPORTED_REASONING_LEVELS,
|
|
660
684
|
shell_type: "shell_command",
|
|
661
685
|
visibility: "list",
|
|
@@ -675,6 +699,15 @@ function modelCatalogEntry(model, index) {
|
|
|
675
699
|
}
|
|
676
700
|
|
|
677
701
|
function modelCatalogDescription(modelId) {
|
|
702
|
+
if (modelId === "gpt-5.6-sol-max") {
|
|
703
|
+
return "GPT-5.6 SOL Max premium coding route with local coding tools and 2x wallet billing.";
|
|
704
|
+
}
|
|
705
|
+
if (modelId === "gpt-5.6-sol-ultra") {
|
|
706
|
+
return "GPT-5.6 SOL Ultra premium coding route with local coding tools and 2.5x wallet billing.";
|
|
707
|
+
}
|
|
708
|
+
if (modelId === "gpt-5.6-sol") {
|
|
709
|
+
return "GPT-5.6 SOL native coding route with local coding tools and wallet billing.";
|
|
710
|
+
}
|
|
678
711
|
if (modelId === "claude-opus-4-8") {
|
|
679
712
|
return "Opus 4.8 coding route with local coding tools and wallet billing.";
|
|
680
713
|
}
|
|
@@ -733,8 +766,8 @@ async function runCodex(args) {
|
|
|
733
766
|
CODEXCLAUDE_MODEL_ID: config.model,
|
|
734
767
|
CODEXCLAUDE_MODEL_LABEL: MODELS[config.model]?.label || config.model,
|
|
735
768
|
CODEXCLAUDE_MODEL_API_BASE_URL: providerBaseUrlForConfig(config),
|
|
736
|
-
CODEXCLAUDE_DISPLAY_REASONING_EFFORT:
|
|
737
|
-
CODEXCLAUDE_SERVER_REASONING_EFFORT:
|
|
769
|
+
CODEXCLAUDE_DISPLAY_REASONING_EFFORT: reasoningEffortForModel(config.model),
|
|
770
|
+
CODEXCLAUDE_SERVER_REASONING_EFFORT: reasoningEffortForModel(config.model) || DEFAULT_SERVER_REASONING_EFFORT,
|
|
738
771
|
CODEXCLAUDE_VERSION: APP_VERSION,
|
|
739
772
|
};
|
|
740
773
|
delete env.CODEX_MANAGED_BY_NPM;
|
|
@@ -886,10 +919,19 @@ function numericWalletValue(value) {
|
|
|
886
919
|
function formatStatusLine(config, wallet, cwd) {
|
|
887
920
|
const model = modelStatusName(config.model);
|
|
888
921
|
const walletText = wallet ? `Wallet ${formatUsd(wallet.balance)}` : "Wallet unavailable";
|
|
889
|
-
return `${APP_DISPLAY_NAME} v${APP_VERSION} · ${model} ${
|
|
922
|
+
return `${APP_DISPLAY_NAME} v${APP_VERSION} · ${model} ${reasoningEffortForModel(config.model)} · ${formatCwd(cwd)} · ${walletText}`;
|
|
890
923
|
}
|
|
891
924
|
|
|
892
925
|
function modelStatusName(model) {
|
|
926
|
+
if (model === "gpt-5.6-sol-max") {
|
|
927
|
+
return "gpt-5.6-sol max";
|
|
928
|
+
}
|
|
929
|
+
if (model === "gpt-5.6-sol-ultra") {
|
|
930
|
+
return "gpt-5.6-sol ultra";
|
|
931
|
+
}
|
|
932
|
+
if (model === "gpt-5.6-sol") {
|
|
933
|
+
return "gpt-5.6-sol";
|
|
934
|
+
}
|
|
893
935
|
if (model === "claude-opus-4-8") {
|
|
894
936
|
return "opus-4.8";
|
|
895
937
|
}
|
|
@@ -902,6 +944,10 @@ function modelStatusName(model) {
|
|
|
902
944
|
return "gpt-5.5";
|
|
903
945
|
}
|
|
904
946
|
|
|
947
|
+
function reasoningEffortForModel(model) {
|
|
948
|
+
return MODELS[model]?.reasoningEffort || DEFAULT_DISPLAY_REASONING_EFFORT;
|
|
949
|
+
}
|
|
950
|
+
|
|
905
951
|
function normalizeConfig(config) {
|
|
906
952
|
if (!config || typeof config !== "object") {
|
|
907
953
|
return config;
|
|
@@ -916,6 +962,15 @@ function normalizeConfig(config) {
|
|
|
916
962
|
if (["claude-fabel-5", "fable-5", "fabel-5"].includes(normalized.model)) {
|
|
917
963
|
normalized.model = "claude-fable-5";
|
|
918
964
|
}
|
|
965
|
+
if (["gpt-5.6-sol-max", "gpt-5.6-max", "gpt56-max", "sol-max", "max"].includes(normalized.model)) {
|
|
966
|
+
normalized.model = "gpt-5.6-sol-max";
|
|
967
|
+
}
|
|
968
|
+
if (["gpt-5.6-sol-ultra", "gpt-5.6-ultra", "gpt56-ultra", "sol-ultra", "ultra"].includes(normalized.model)) {
|
|
969
|
+
normalized.model = "gpt-5.6-sol-ultra";
|
|
970
|
+
}
|
|
971
|
+
if (["gpt-5-6-sol", "gpt56", "sol"].includes(normalized.model)) {
|
|
972
|
+
normalized.model = "gpt-5.6-sol";
|
|
973
|
+
}
|
|
919
974
|
if (
|
|
920
975
|
[
|
|
921
976
|
"deepseek-v4-pro",
|
package/codexclaude.md
CHANGED
|
@@ -5,14 +5,14 @@ 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.
|
|
8
|
+
- Launcher version: `2.0.21`
|
|
9
9
|
- Customer-facing app name: `Magnetapi Client`
|
|
10
10
|
- Bundled runtime dependency: `@openai/codex@0.144.1`
|
|
11
|
-
- Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.
|
|
12
|
-
- Backend minimum version: `2.0.
|
|
13
|
-
- Default visible model: `
|
|
14
|
-
- Default model slug: `
|
|
15
|
-
- Visible reasoning effort: `xhigh`
|
|
11
|
+
- Required install command: `npm install -g https://codexapi.pro/downloads/codexapi-codexclaude-2.0.21.tgz`
|
|
12
|
+
- Backend minimum version: `2.0.21`
|
|
13
|
+
- Default visible model: `GPT-5.6 SOL`
|
|
14
|
+
- Default model slug: `gpt-5.6-sol`
|
|
15
|
+
- Visible reasoning effort: model-specific (`low` for base SOL, `max` for SOL Max, `ultra` for SOL Ultra, `xhigh` fallback for the other managed models)
|
|
16
16
|
- Local permissions: Full Access, implemented as `approval_policy = "never"` and `sandbox_mode = "danger-full-access"`
|
|
17
17
|
- Local launcher state: `~/.codexclaude/config.json`
|
|
18
18
|
- Generated runtime config: `~/.codex/config.toml`
|
|
@@ -24,25 +24,28 @@ This file is the durable handoff for the `@codexapi/codexclaude` package in `/ro
|
|
|
24
24
|
The launcher must present itself as:
|
|
25
25
|
|
|
26
26
|
```text
|
|
27
|
-
Magnetapi Client v2.0.
|
|
27
|
+
Magnetapi Client v2.0.21
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Normal pre-launch status should look like:
|
|
31
31
|
|
|
32
32
|
```text
|
|
33
|
-
Magnetapi Client v2.0.
|
|
33
|
+
Magnetapi Client v2.0.21 · gpt-5.6-sol low · ~/project · Wallet $20.00
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
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.
|
|
37
37
|
|
|
38
|
-
The launcher command `codexclaude model` must list
|
|
38
|
+
The launcher command `codexclaude model` must list these customer-visible models, with SOL Max and Ultra as choices 1 and 2:
|
|
39
39
|
|
|
40
|
+
- `gpt-5.6-sol-max` displayed as `GPT-5.6 SOL Max` with 2x premium billing
|
|
41
|
+
- `gpt-5.6-sol-ultra` displayed as `GPT-5.6 SOL Ultra` with 2.5x premium billing
|
|
42
|
+
- `gpt-5.6-sol` displayed as `GPT-5.6 SOL`
|
|
40
43
|
- `gpt-5.5` displayed as `ChatGPT-5.5`
|
|
41
44
|
- `claude-opus-4-8` displayed as `Opus 4.8`
|
|
42
45
|
- `claude-sonnet-5` displayed as `Sonnet 5`
|
|
43
46
|
- `claude-fable-5` displayed as `Fable 5`
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
GPT-5.6 SOL must be the default when a new config is created or a legacy config contains an unsupported Gemini/Deepseek value. `gpt-5.6-sol` is now a native upstream model on the signed-in Codex API servers and is pinned to server-managed low reasoning. The selected model slug must stay in `~/.codex/config.toml`; do not rewrite customer-facing model selections locally just because the backend may route internally. `gpt-5.6-sol-max` and `gpt-5.6-sol-ultra` still run through the native SOL route but must remain distinct for customer choice, usage display, and wallet billing.
|
|
46
49
|
|
|
47
50
|
## Update Policy
|
|
48
51
|
|
|
@@ -51,7 +54,7 @@ Opus 4.8 must be the default when a new config is created or a legacy config con
|
|
|
51
54
|
- `https://codexapi.pro/api/v1/codexclaude/version`
|
|
52
55
|
- `https://registry.npmjs.org/@codexapi%2Fcodexclaude/latest`
|
|
53
56
|
|
|
54
|
-
It must not check `@openai/codex` npm metadata, OpenAI GitHub releases, or any upstream OpenAI update endpoint. Version `2.0.
|
|
57
|
+
It must not check `@openai/codex` npm metadata, OpenAI GitHub releases, or any upstream OpenAI update endpoint. Version `2.0.21` is a forced release: the backend `minimumVersion` equals `2.0.21`, and older clients must show an update-required message with the hosted tarball command.
|
|
55
58
|
|
|
56
59
|
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.
|
|
57
60
|
|
|
@@ -62,11 +65,11 @@ The optional platform-native runtime packages can still contain upstream README
|
|
|
62
65
|
`bin/codexclaude.js` must rewrite `~/.codex/config.toml` before every coding session. Preserve this top-level shape:
|
|
63
66
|
|
|
64
67
|
```toml
|
|
65
|
-
model = "
|
|
68
|
+
model = "gpt-5.6-sol"
|
|
66
69
|
model_catalog_json = "<absolute path to ~/.codexclaude/model_catalog.json>"
|
|
67
70
|
preferred_auth_method = "apikey"
|
|
68
71
|
model_provider = "codexapi"
|
|
69
|
-
model_reasoning_effort = "
|
|
72
|
+
model_reasoning_effort = "<selected model reasoning effort>"
|
|
70
73
|
check_for_update_on_startup = false
|
|
71
74
|
analytics_enabled = false
|
|
72
75
|
feedback_enabled = false
|
|
@@ -79,7 +82,7 @@ base_url = "<service Responses URL>"
|
|
|
79
82
|
experimental_bearer_token = "<customer System Token/API username>"
|
|
80
83
|
wire_api = "responses"
|
|
81
84
|
supports_websockets = false
|
|
82
|
-
http_headers = { "X-CodexAPI-Client" = "codexclaude", "X-CodexAPI-Client-Version" = "2.0.
|
|
85
|
+
http_headers = { "X-CodexAPI-Client" = "codexclaude", "X-CodexAPI-Client-Version" = "2.0.21", "X-CodexAPI-Selected-Model" = "<selected model>" }
|
|
83
86
|
|
|
84
87
|
[tui]
|
|
85
88
|
status_line = ["model-with-reasoning", "fast-mode", "current-dir"]
|
|
@@ -87,13 +90,13 @@ status_line_use_colors = true
|
|
|
87
90
|
terminal_title = ["project-name", "model-with-reasoning", "run-state"]
|
|
88
91
|
```
|
|
89
92
|
|
|
90
|
-
The generated model catalog must contain full metadata for
|
|
93
|
+
The generated model catalog must contain full metadata for every supported slug, including `gpt-5.6-sol-max` and `gpt-5.6-sol-ultra`. This prevents fallback metadata warnings such as:
|
|
91
94
|
|
|
92
95
|
```text
|
|
93
96
|
Model metadata for `claude-opus-4-8` not found. Defaulting to fallback metadata; this can degrade performance and cause issues.
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
Each model catalog entry must include a slug, display name, reasoning levels including `xhigh`, shell tool type, input modalities including images, web/search support, truncation policy, and `visibility = "list"`.
|
|
99
|
+
Each model catalog entry must include a slug, display name, reasoning levels including `xhigh`, `max`, and `ultra`, shell tool type, input modalities including images, web/search support, truncation policy, and `visibility = "list"`.
|
|
97
100
|
|
|
98
101
|
## Service Login
|
|
99
102
|
|
|
@@ -111,7 +114,7 @@ The saved `username` is the System Token/API username returned by the service an
|
|
|
111
114
|
|
|
112
115
|
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.
|
|
113
116
|
|
|
114
|
-
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.
|
|
117
|
+
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.
|
|
115
118
|
|
|
116
119
|
## Upgrade Checklist
|
|
117
120
|
|
|
@@ -122,7 +125,7 @@ When updating the bundled runtime dependency:
|
|
|
122
125
|
3. Bump `package.json` and `package-lock.json` to a new `@codexapi/codexclaude` version.
|
|
123
126
|
4. Update `APP_VERSION` and `CODEX_VERSION` in `bin/codexclaude.js`.
|
|
124
127
|
5. Preserve `APP_DISPLAY_NAME = "Magnetapi Client"`.
|
|
125
|
-
6. Preserve `DEFAULT_MODEL_ID = "
|
|
128
|
+
6. Preserve `DEFAULT_MODEL_ID = "gpt-5.6-sol"`.
|
|
126
129
|
7. Preserve `DISPLAY_REASONING_EFFORT = "xhigh"` and `SERVER_REASONING_EFFORT = "xhigh"` unless operations explicitly changes the launcher-visible contract.
|
|
127
130
|
8. Preserve Full Access defaults and the local model catalog.
|
|
128
131
|
9. Preserve direct platform-native binary launch.
|
|
@@ -149,7 +152,7 @@ tmp_home="$(mktemp -d)"
|
|
|
149
152
|
mkdir -p "$tmp_home/.codexclaude"
|
|
150
153
|
cat > "$tmp_home/.codexclaude/config.json" <<'JSON'
|
|
151
154
|
{
|
|
152
|
-
"version": "2.0.
|
|
155
|
+
"version": "2.0.21",
|
|
153
156
|
"serviceId": "codexapi",
|
|
154
157
|
"serviceLabel": "CodexAPI.pro",
|
|
155
158
|
"apiOrigin": "https://codexapi.pro",
|
|
@@ -164,7 +167,7 @@ HOME="$tmp_home" CODEXCLAUDE_DISABLE_UPDATE_CHECK=1 CODEXCLAUDE_QUIET_STATUS=1 n
|
|
|
164
167
|
|
|
165
168
|
Verify the generated config contains:
|
|
166
169
|
|
|
167
|
-
- `model = "
|
|
170
|
+
- `model = "gpt-5.6-sol"`
|
|
168
171
|
- `model_reasoning_effort = "xhigh"`
|
|
169
172
|
- `check_for_update_on_startup = false`
|
|
170
173
|
- `approval_policy = "never"`
|
|
@@ -182,20 +185,21 @@ After packaging, copy the tarball to the public downloads directories, restart t
|
|
|
182
185
|
|
|
183
186
|
```bash
|
|
184
187
|
curl -fsS "https://codexapi.pro/api/v1/codexclaude/version?current=2.0.17"
|
|
185
|
-
curl -fsSI "https://codexapi.pro/downloads/codexapi-codexclaude-2.0.
|
|
188
|
+
curl -fsSI "https://codexapi.pro/downloads/codexapi-codexclaude-2.0.21.tgz"
|
|
186
189
|
```
|
|
187
190
|
|
|
188
|
-
The version endpoint must report `latestVersion = 2.0.
|
|
191
|
+
The version endpoint must report `latestVersion = 2.0.21`, `minimumVersion = 2.0.21`, and `updateRequired = true` for old clients.
|
|
189
192
|
|
|
190
|
-
## Version 2.0.
|
|
193
|
+
## Version 2.0.21 Changes
|
|
191
194
|
|
|
192
195
|
- Updated bundled runtime dependency to `@openai/codex@0.144.1`.
|
|
193
|
-
- Forced all older codexclaude clients to update by setting backend minimum version to `2.0.
|
|
196
|
+
- Forced all older codexclaude clients to update by setting backend minimum version to `2.0.21`.
|
|
194
197
|
- Changed launcher-owned identity to `Magnetapi Client`.
|
|
195
|
-
-
|
|
196
|
-
-
|
|
198
|
+
- Made GPT-5.6 SOL a native signed-in Codex model route with low server reasoning.
|
|
199
|
+
- Added GPT-5.6 SOL Max and GPT-5.6 SOL Ultra as explicit premium model choices.
|
|
200
|
+
- Changed visible reasoning to model-specific values: low, max, ultra, or xhigh fallback.
|
|
197
201
|
- Preserved Full Access defaults.
|
|
198
202
|
- Disabled bundled runtime update checks through generated config and stale update-cache removal.
|
|
199
203
|
- Removed launcher fallback to the upstream npm wrapper so OpenAI update prompts are not emitted by codexclaude.
|
|
200
204
|
- Kept update monitoring limited to CodexAPI.pro version metadata and the `@codexapi/codexclaude` npm package.
|
|
201
|
-
- Updated setup scripts to install the exact hosted `2.0.
|
|
205
|
+
- Updated setup scripts to install the exact hosted `2.0.21` tarball.
|