Skip to content

v0.3.0

Choose a tag to compare

@4LAU 4LAU released this 10 Jun 17:08
fce5ba4

Added

  • best-auth now fetches live usage (Codex app-server, bounded concurrency) before ranking, instead of relying on the menu bar app's cached usage file. When the app isn't running it no longer silently picks alphabetically off a stale/empty cache. Per-profile fetch failures fall back to the cached snapshot, and fresh snapshots are merged back into the cache.
  • best-auth --json emits a stable machine-readable report (selected, tier, score, candidates[], fetched). status --json and list --json emit structured output too. Default (non-JSON) best-auth output is unchanged: the bare selected profile ID.
  • best-auth now has documented, stable exit codes: 0 selected, 2 no eligible profile, 3 no profiles configured, 4 usage data unavailable, 6 keychain interaction required, 7 watchdog timeout.

Changed

  • Usage polling now uses Codex's app-server exclusively; removes the reverse-engineered usage API client and OAuth refresh-on-poll.
  • best-auth and import-auth are now official supported commands. import-auth exits 5 only on an identity mismatch (a refreshed credential belonging to a different account) and 1 for other failures.

Fixed

  • Fixed false "re-auth needed" status for profiles with valid tokens (bare 401/403 substrings false-positived on unrelated error messages such as port numbers).
  • Fixed best-auth reporting a different tier/score from what was used for selection when a rate-limit reset boundary was crossed between the ranking and report steps.
  • Fixed a potential data race between background usage refreshes and profile state.
  • best-auth no longer hangs forever in non-interactive shells (CI, command substitution, background tasks). When stdin is not a terminal (or --non-interactive is passed), a Keychain read that needs interactive consent now exits with a clear message (code 6) instead of blocking on a modal prompt with no UI. A global watchdog (--timeout, default 30s, exit 7) guarantees the command always terminates.