v2.1.7.md

May 10, 2026 ยท View on GitHub

Install / Uninstall

Improvements

  • Added codex-multi-auth uninstall [--dry-run] [--json] [--clear-accounts] that reverses postinstall: unbinds Codex app rotation, removes OS launchers, strips the plugin entry from Codex.json, clears the node_modules cache, and conservatively deletes shared bun.lock only when no other Codex plugins remain.

Bugfixes

  • Removed the dead preuninstall entry from package.json because npm@7+ no longer runs it; to uninstall fully, run codex-multi-auth uninstall then npm uninstall -g codex-multi-auth. scripts/preuninstall.js is preserved and still callable via node scripts/preuninstall.js.
  • Dry-run uninstall now computes the bun.lock decision from the actual Codex.json plugin list.
  • --clear-accounts warns and exits non-zero when no handler is wired.
  • Dry-run uninstall preview no longer requires scripts/codex-app-launcher.js on disk.
  • removePluginFromList pre-filters falsy entries with list.filter(Boolean).

Core

Bugfixes

  • hydrateRuntimeEmails no longer collapses accounts sharing accountId === undefined into the same Map entry.
  • restoreTopLevelModelProvider/restoreTopLevelResponseStorage now splice missing keys ahead of the first section header instead of producing invalid TOML.
  • runFix, runHealthCheck, and forecast saveQuotaCache paths now downgrade transient EBUSY/EPERM to a partial-success warning via quotaCacheSaveError.
  • withStorageLock now initializes releaseLock as a typed no-op.

Runtime Rotation Proxy

Bugfixes

  • App-bind now requires router.state === "running" and a live PID before reusing existingState, so a dead router cannot trigger a config.toml rewrite.
  • Stream-failover read promise is now hoisted before the soft/hard timeout split.