|
1 | | -# v2.1.13-beta.3 |
| 1 | +# v2.2.0 |
2 | 2 |
|
3 | | -Beta prerelease that lands the Phase 1 correctness/security audit (#499), the new |
4 | | -`mcodex` launcher + cached statusline (#500), and a round of pre-release |
5 | | -hardening surfaced by a whole-tree stress test (#503). It carries forward the |
6 | | -cascade OAuth token-invalidation fix from v2.1.13-beta.2, the multi-workspace |
7 | | -support from v2.1.13-beta.1, and the pinned-account 503 diagnostic from |
8 | | -v2.1.13-beta.0. |
9 | | - |
10 | | -This is a **prerelease**. Stable `v2.1.13` will land once the issue #486 root |
11 | | -cause is identified and patched. |
| 3 | +Stable release. Promotes the v2.1.13-beta line to stable and adds the `mcodex` |
| 4 | +launcher. It bundles the Phase 1 correctness/security audit (#499), the new |
| 5 | +`mcodex` launcher + cached statusline (#500), the quota unsupported-model |
| 6 | +detail-shape detection (#501/#502), and the hardening surfaced by a whole-tree |
| 7 | +stress test (#503). It also carries the cascade OAuth token-invalidation fix, the |
| 8 | +multi-workspace support, and the pinned-account 503 diagnostic that shipped |
| 9 | +across v2.1.13-beta.0–beta.3. |
12 | 10 |
|
13 | 11 | ## Install |
14 | 12 |
|
15 | 13 | ```bash |
16 | | -npm i -g codex-multi-auth@beta |
| 14 | +npm i -g codex-multi-auth |
17 | 15 | ``` |
18 | 16 |
|
19 | 17 | ## mcodex launcher (#500) |
@@ -94,11 +92,22 @@ Security and correctness hardening across the runtime, storage, and prompt layer |
94 | 92 | - `codex-multi-auth status` / `list` gained `--json` for machine-readable output, |
95 | 93 | with a stable shape whether or not accounts are configured. |
96 | 94 |
|
97 | | -## Pre-release hardening (#503) |
| 95 | +## Quota detection (#501/#502) |
| 96 | + |
| 97 | +- Detect an unsupported Codex model from the upstream error `detail` shape (not |
| 98 | + just the nested `error` envelope), so a Codex-gated account surfaces a friendly |
| 99 | + "Codex unavailable" note across the `best` / `forecast` / `report` / live-check |
| 100 | + surfaces instead of leaking the raw upstream "model is not supported" text. |
| 101 | +- A genuine transient failure mixed into the probe still surfaces as the real |
| 102 | + error (never masked behind the friendly note), so a real outage is not hidden. |
| 103 | + |
| 104 | +## Post-audit hardening (#503 + follow-ups) |
98 | 105 |
|
99 | 106 | - Strip inbound `cookie` / `proxy-authorization` on both egress paths. |
100 | 107 | - Bound the proxy's upstream error-body read (previously unbounded on 4xx/5xx). |
101 | 108 | - Persist `runtime-observability.json` owner-only (`0o600` / dir `0o700`) on POSIX. |
| 109 | +- Reject NUL-byte paths in `resolvePath` (defense in depth) and require a strict |
| 110 | + integer for `switch <index>` (no silent float truncation). |
102 | 111 | - Bump `vitest` to `^4.1.8` (dev-only) to clear GHSA-5xrq-8626-4rwp. |
103 | 112 |
|
104 | 113 | ## Verification |
|
0 commit comments