Skip to content

v2.22.0

Choose a tag to compare

@ndycode ndycode released this 14 Oct 12:44
· 22 commits to main since this release

https://www.npmjs.com/package/codex-multi-auth/v/2.22.0

npm i -g codex-multi-auth@2.22.0

Native Codex dictation now rides the managed OAuth pool, sequential scheduling honors the saved account order within priority tiers, and API/ZDR routes gain daily capability checks with WebSocket disconnect diagnostics. (#738, #737, #739)

Added

  • Managed-OAuth transcription: POST /transcribe routes through the managed ChatGPT OAuth pool so native Codex dictation works behind the runtime rotation proxy. Multipart audio forwards byte-for-byte with its original Content-Type boundary and Content-Encoding; the 64 MiB request cap applies to the encoded upload. Failure semantics are conservative: a 429 backs off only the transcription lane (separate from inference rate-limit state), generic 403/5xx responses forward once without rotating accounts, and ambiguous transport failures are never replayed to a second account. Explicit auth-invalidation and workspace-disable signals remain account-wide, and usage-ledger rows record operation: "transcribe". There is intentionally no API-key /v1/audio/transcriptions fallback. (#738)
  • Daily API/ZDR capability checks: the runtime verifies API-route access programs on a daily cadence and persists credential-scoped evidence, so status and paid probes reflect real capability instead of optimistic assumptions. Paid capability probes and scheduled checks run through the configured/custom fetch implementation rather than bare global fetch. (#739)
  • WebSocket disconnect diagnostics: codex-multi-auth status (text and --json) surfaces the last WebSocket disconnect reported by the running app router — including across restarts — so silent app drops are diagnosable. (#739)

Fixed

  • Sequential scheduling order: with schedulingStrategy=sequential and any account priority other than the default 1, routing follows the saved account-list order within the eligible tier instead of quota-reset ranking or active-account preference; pools with all-default priorities keep the healthy active cursor. status now reports the running router's scheduling strategy rather than only the settings file. (#737)
  • Credential reload and stale-recovery races: refresh commits landing while loadFromDisk() is suspended are drained or redirected to the replacement manager instead of being clobbered or lost; rotated credentials carry token-bound identity (accountId, accountIdSource, email) without overwriting explicit manual/org bindings; auth-invalidation and workspace-disable markers carry only when they changed during the reload window; and derived (non-persisted) record IDs can no longer match a different account after token rotation. Same-workspace sibling logins with conflicting known emails are rejected on accountId-only fallback. (#738)
  • API route store repair and probe durability: unconditional saves repair syntactically or schema-invalid route files while expected/CAS saves stay strict; unreadable route files (oversized, permission, I/O failures) are preserved instead of being rewritten empty; capability-probe state survives restarts and outages; and wiping probe state tolerates a missing directory. (#739)