Skip to content

v2.1.2

Choose a tag to compare

@drogers0 drogers0 released this 01 Jun 23:14
· 6 commits to main since this release
484c005

Highlights

  • Codex multi-account support. aistat usage now reports per-account rows for Codex (mirroring Claude's nested format), and aistat switch codex rewrites the live ~/.codex/auth.json between stored ChatGPT accounts without a browser round-trip. Identity is resolved from the id_token sub claim (JWT decode, no network).
  • Slot-vs-duration window labeling. Codex windows are labeled by limit_window_seconds, not slot position — so free-account windows (including OpenAI's recent weekly→monthly quota change) are correctly labeled thirty_day instead of being assumed to be the primary 5-hour window.
  • Provider-scoped switch / accounts CLI with bulk-on-omission: aistat switch [provider] [--to <id>], aistat accounts list|remove [provider]. Omitting the provider fans out to every provider with ≥2 stored accounts (auto-pick best by headroom).

Codex UX

  • Tighter, actionable errors for upstream OAuth failures matched to the real upstream bodies: the refresh-token rotation race (codex login to recover) and same-client token revocation (token_revoked / token_invalidated).

Fixes

  • fsync the live-credential write on Linux; fail closed on resolver error in accounts remove (#13).

Internal

  • Test suite migrated to table-driven t.Run subtests with shared testutil helpers and externalized golden output — no behavior change. See TESTING.md.

Full changelog: v2.1.1...v2.1.2