Skip to content

chore(release): 2.8.0 - #644

Merged
ndycode merged 2 commits into
mainfrom
chore/release-2.8.0
Jul 28, 2026
Merged

chore(release): 2.8.0#644
ndycode merged 2 commits into
mainfrom
chore/release-2.8.0

Conversation

@ndycode

@ndycode ndycode commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Summary

Release prep for 2.8.0. Version bump, changelog entry, and full release notes. Follows the same 8-file shape as chore(release): 2.7.1.

Not published, not tagged — publishing is done manually.

Why minor, not patch

2.7.1 described itself as "no new features and no configuration changes". This one does change configuration behaviour: the wrapper now writes cli_auth_credentials_store into ~/.codex/config.toml at first run and on wrapper startup, where before it only did so on switch/login. That is a new side effect on a user-owned file, so it warrants a minor-version signal rather than being folded in as a patch.

If you'd rather ship it as 2.7.2, the whole change is mechanical — say so and I'll redo the bump.

What's in it

PR Change
#642 Repeated macOS login-keychain prompts (#641); doctor --fix can now repair the credential store
#639 Interactive sessions no longer reindex history on every launch
#643 Concurrent-session coverage for canonical-home routing; doc corrections

Files

package.json, package-lock.json, .codex-plugin/plugin.json, AGENTS.md, README.md, docs/README.md, CHANGELOG.md, docs/releases/v2.8.0.md — the same set chore(release): 2.7.1 touched.

Validation

  • npm test — 335 files, 5270 passed, 0 failed
  • npm run typecheck / typecheck:scripts
  • npm run lint
  • npm run build
  • npm run pack:check — 798,454 bytes across 920 files, within budget
  • npm pack --dry-run — resolves as codex-multi-auth-2.8.0.tgz

Note before publishing

Merging this first keeps npm and main in step. Publishing from the branch before merge would briefly leave npm ahead of main.

🤖 Generated with Claude Code

note: greptile review for oc-chatgpt-multi-auth. cite files like lib/foo.ts:123. confirm regression tests + windows concurrency/token redaction coverage.

Greptile Summary

release preparation for version 2.8.0.

  • bumps npm and plugin version metadata from 2.7.1 to 2.8.0.
  • adds changelog and release notes for credential-store reconciliation, canonical-home interactive sessions, and doctor repair behavior.
  • updates the documentation portals and project guide to identify 2.8.0 as current.

Confidence Score: 5/5

the release preparation appears safe to merge.

no blocking failure remains.

Important Files Changed

Filename Overview
package.json bumps the package version to 2.8.0 without changing package behavior or dependencies.
package-lock.json keeps the root lockfile version metadata aligned with package.json.
.codex-plugin/plugin.json aligns plugin metadata with the 2.8.0 package release.
CHANGELOG.md documents the fixes and configuration behavior included in 2.8.0.
docs/releases/v2.8.0.md adds detailed release notes and upgrade guidance for 2.8.0.
README.md updates the current stable release link to 2.8.0.
docs/README.md adds 2.8.0 to the stable release history.
AGENTS.md updates the documented package version to 2.8.0.

Reviews (2): Last reviewed commit: "docs(release): correct two inaccuracies ..." | Re-trigger Greptile

Two fixes that change where the official Codex CLI keeps its state, plus a
diagnostic that can now repair the first instead of only reporting it.

Minor rather than patch: behaviour changes, it is not purely corrective. The
wrapper now writes cli_auth_credentials_store into ~/.codex/config.toml at
first run and on wrapper startup, where before it only did so on switch or
login. 2.7.1 was explicitly "no new features and no configuration changes";
this one does change configuration behaviour, and documents a previously
undocumented opt-out.

Closes #641. Landed as #642, #639, and #643.
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

the release is bumped to v2.8.0. release notes document credential-store reconciliation, interactive state handling, doctor repairs, opt-outs, and upgrade behavior. package metadata and stable-release links now reference v2.8.0.

Changes

v2.8.0 release update

Layer / File(s) Summary
Release documentation
docs/releases/v2.8.0.md:1-60, CHANGELOG.md:10-25
documents credential-store reconciliation, canonical interactive state handling, doctor --fix behavior, environment-variable opt-outs, concurrent-session coverage, and upgrade notes.
Version and stable-release references
package.json:3, .codex-plugin/plugin.json:3, AGENTS.md:7, README.md:394-395, docs/README.md:35-36
updates version metadata and points current stable-release references to v2.8.0 while retaining v2.7.1 as the prior release.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

Suggested reviewers: claude

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning the title uses the right conventional-commit prefix, but the summary is just a version number and not the required lowercase imperative phrase. rename it to a lowercase imperative summary, e.g. "chore(release): bump to 2.8.0".
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed the description is mostly complete and covers summary, rationale, files, and validation, though some template sections are abbreviated or omitted.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/release-2.8.0
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch chore/release-2.8.0

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/releases/v2.8.0.md`:
- Around line 47-52: Expand the Upgrade notes section with runnable Windows/WSL
side-by-side instructions covering the fixed callback port 1455, how to inspect
listeners from both Windows and WSL, the --device-auth fallback, and separate
state directories for each environment. Anchor the guidance to the Windows/WSL
boundary represented by lib/wsl.ts and preserve the existing first-run migration
details.
- Line 7: Update the previous-behavior summary in docs/releases/v2.8.0.md at
line 7 to include health checks and repairs alongside switching or logging in as
triggers for writing cli_auth_credentials_store; mirror the same corrected
trigger list in CHANGELOG.md at line 12, preserving the rest of both release
descriptions.
- Around line 41-42: Clarify the interactive routing statement in
docs/releases/v2.8.0.md lines 41-42 so it only promises no shadow-home rewrites
for interactive state, not that config.toml is never rewritten. Update
docs/releases/v2.8.0.md lines 55-60 to describe wrapper startup and require both
opt-outs for wrapper-launched keychain behavior. Mirror the same qualification
in CHANGELOG.md line 18, keeping all wording aligned with the actual CLI flags
and workflows.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 18089ce2-cd9a-410b-b1be-7fe60dd60483

📥 Commits

Reviewing files that changed from the base of the PR and between 0912630 and f965684.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (7)
  • .codex-plugin/plugin.json
  • AGENTS.md
  • CHANGELOG.md
  • README.md
  • docs/README.md
  • docs/releases/v2.8.0.md
  • package.json
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (15)
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Keep local project-owned state under ~/.codex/multi-auth and preserve official Codex state under ~/.codex.
Do not edit local temporary/cache directories or generated output.

Do not publish or replace the global codex binary; keep codex owned by the official OpenAI Codex install path and use wrapper binaries only intentionally.

Files:

  • AGENTS.md
  • package.json
  • docs/README.md
  • docs/releases/v2.8.0.md
  • README.md
  • CHANGELOG.md
**/package.json

📄 CodeRabbit inference engine (SECURITY.md)

**/package.json: Pin hono to version 4.12.21 or higher to avoid vulnerabilities GHSA-3hrh-pfw6-9m5x, GHSA-2gcr-mfcq-wcc3, GHSA-xrhx-7g5j-rcj5, and GHSA-f577-qrjj-4474 (Set-Cookie injection, app.mount() path-decoding, IPv6 IP-restriction bypass, and JWT scheme-acceptance issues)
Pin rollup to version ^4.59.0 or higher to avoid vulnerabilities in the <4.59.0 range as surfaced by npm audit, keeping the Vite and Vitest transitive dependency graph secure
Pin undici exactly to version 6.25.0 as it is the only runtime HTTP dependency and its dispatcher behavior is part of the rotation proxy's tested surface. Move to undici 7.x only after Node 18 support is dropped

Expose the four documented binaries—codex-multi-auth, codex-multi-auth-codex, mcodex, and codex-multi-auth-app-launcher—without exposing a global codex binary.

Files:

  • package.json
docs/**/*.md

📄 CodeRabbit inference engine (docs/STYLE_GUIDE.md)

docs/**/*.md: User-facing documentation should follow the page template: Title and one-line lead, Quick path commands, Core operational workflow, Troubleshooting or failure handling, and Related links
Use short sections and scan-friendly tables in documentation where they improve clarity
Prefer direct, actionable language in documentation
Use runnable command examples in documentation
Explain expected outcomes after critical commands in documentation
Keep terminology consistent with runtime names in documentation
Avoid speculative language when behavior is deterministic in documentation
Put the user problem in the first paragraph before implementation detail
Use descriptive page titles such as codex-multi-auth Features instead of generic titles on public docs
Do not repeat keyword lists in every section; search terms should appear only where they help a developer understand the page
Canonical command family is codex-multi-auth ...
Canonical runtime root is ~/.codex/multi-auth
Runtime rotation must be described as default-on unless the release policy changes
Legacy command/path references belong only in migration contexts in documentation
Compatibility aliases (codex multi auth, codex multi-auth, codex multiauth) belong only in command reference, troubleshooting, or migration contexts
Keep command flags aligned with runtime usage text in documentation
Avoid non-runnable command snippets in documentation
Avoid conflicting path guidance across documentation
Avoid legacy-first onboarding language in documentation

Organize repository documentation according to the defined layers: product entry, user operations, reference, and development.

docs/**/*.md: Do not describe codex-multi-auth as replacing @openai/codex or publishing the global codex binary; preserve the official CLI's ownership of codex.
Use codex-multi-auth for account management, and reserve codex-multi-auth-codex or mcodex for intentionally forwarding official Codex commands th...

Files:

  • docs/README.md
  • docs/releases/v2.8.0.md
docs/{README.md,docs/index.md,docs/README.md}

📄 CodeRabbit inference engine (docs/STYLE_GUIDE.md)

Root README and docs landing pages should naturally include Codex CLI, multi-account OAuth, account switching, health checks, runtime rotation, diagnostics, and recovery when those topics are in scope

Files:

  • docs/README.md
docs/{README.md,package.json,docs/development/GITHUB_DISCOVERABILITY.md}

📄 CodeRabbit inference engine (docs/STYLE_GUIDE.md)

Keep the repository description, package description, README lead, and docs/development/GITHUB_DISCOVERABILITY.md aligned

Files:

  • docs/README.md
docs/**/README.md

📄 CodeRabbit inference engine (docs/DOCUMENTATION.md)

Use README.md as the canonical project entry point.

Files:

  • docs/README.md
docs/README.md

📄 CodeRabbit inference engine (docs/DOCUMENTATION.md)

Use docs/README.md as the canonical documentation portal.

Files:

  • docs/README.md
docs/{README.md,docs/**/*.md,SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md}

📄 CodeRabbit inference engine (docs/DOCUMENTATION.md)

docs/{README.md,docs/**/*.md,SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md}: Use codex-multi-auth as the canonical package name, codex-multi-auth ... as the canonical account command family, and ~/.codex/multi-auth as the canonical storage root unless explicitly overridden.
When runtime behavior changes, update the documentation sources in the prescribed order, including onboarding, public framing, feature coverage, references, troubleshooting, development documentation, upgrade guidance, storage paths, governance files, and issue/PR templates as applicable.

Files:

  • docs/README.md
docs/{README.md,docs/**/*.md}

📄 CodeRabbit inference engine (docs/DOCUMENTATION.md)

docs/{README.md,docs/**/*.md}: Keep legacy paths, flows, and scoped package references only in migration or compatibility sections.
Document runtime rotation as default-on unless a future release intentionally changes that policy.

Files:

  • docs/README.md
docs/{README.md,docs/**/*.md,SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.github/**/*.md}

📄 CodeRabbit inference engine (docs/DOCUMENTATION.md)

Before merge, verify that documented commands are executable, CLI flags match runtime parser output, paths match runtime modules, internal links are valid, OS-sensitive operations have cross-platform instructions, guidance is consistent, and discoverability terms are accurate without keyword stuffing or ranking promises.

Files:

  • docs/README.md
docs/**/*.{md,mdx}

📄 CodeRabbit inference engine (docs/troubleshooting.md)

Document that codex-multi-auth-codex is the optional forwarding wrapper, while codex-multi-auth is the canonical account-manager command family; the package does not publish a global codex binary.

Document the canonical command names, runtime paths, configuration precedence, storage migration behavior, and upgrade procedures consistently across the referenced documentation.

Files:

  • docs/README.md
  • docs/releases/v2.8.0.md
docs/**

⚙️ CodeRabbit configuration file

keep README, SECURITY, and docs consistent with actual CLI flags and workflows. whenever behavior changes, require updated upgrade notes and mention new npm scripts.

Files:

  • docs/README.md
  • docs/releases/v2.8.0.md
docs/releases/**/*.md

📄 CodeRabbit inference engine (docs/releases/v0.1.1.md)

Documentation architecture must follow dual-track navigation with separate operator and maintainer paths

Document Windows and WSL side-by-side operation, including fixed callback-port behavior, listener inspection on both sides, the --device-auth escape hatch, and separate state directories.

Files:

  • docs/releases/v2.8.0.md
docs/releases/**/*

📄 CodeRabbit inference engine (docs/releases/v2.4.0.md)

docs/releases/**/*: The --account <index|email|id> option and CODEX_MULTI_AUTH_FORCE_ACCOUNT must force a single Codex invocation to the selected configured account; an all-digit selector is always interpreted as a 1-based index.
When both are provided, the explicit --account option must take precedence over CODEX_MULTI_AUTH_FORCE_ACCOUNT.
Account forcing must be ephemeral: it may affect only the current invocation's runtime rotation proxy and must not mutate the persisted switch pin or affect concurrent invocations.
Forced account selection must fail hard: the session must not rotate, and unavailable or rate-limited accounts must fail through the existing codex_pinned_account_unavailable path rather than falling back to another account.
If runtime rotation is disabled, CODEX_MULTI_AUTH_BYPASS=1, or the selector does not resolve to a configured account, the wrapper must exit non-zero without launching Codex.
The wrapper must resolve the selector against the same scoped accounts pool used by the proxy, convert it to a 0-based index, strip the launcher-only --account argument before forwarding arguments to the official Codex CLI, and propagate the resolved index through CODEX_MULTI_AUTH_FORCE_ACCOUNT_INDEX.
The proxy must select forcedAccountIndex ?? persistedPinnedIndex, using the existing deterministic-pin selection path without changing other routing behavior.
The internal forced-account environment variable must be scrubbed from unrelated background and management child processes so it cannot leak beyond the single forwarded run.
Tests must cover forced deterministic selection, unavailable-account fail-hard behavior without an upstream call, environment-variable consumption and precedence including forced index 0, launcher resolution by index/email/account ID and --account= syntax, flag-over-environment precedence, disabled rotation, out-of-range errors, argument stripping, and detached-helper propagation.
Document the account-forcing fea...

Files:

  • docs/releases/v2.8.0.md
docs/releases/**/*.{json,md}

📄 CodeRabbit inference engine (docs/releases/v2.5.0.md)

Document GPT-5.6 tiers, max/ultra, ultramax wire behavior, effort coercion, and the gpt-5.6 → Sol alias in configuration references and templates.

Files:

  • docs/releases/v2.8.0.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: ndycode/codex-multi-auth

Timestamp: 2026-07-28T13:25:21.099Z
Learning: Treat the project as an independent, personal-development tool rather than an official OpenAI product; production or commercial workloads should use the OpenAI Platform API.
Learnt from: CR
Repo: ndycode/codex-multi-auth

Timestamp: 2026-07-28T13:25:25.070Z
Learning: For current implementation guidance, prefer `development/ARCHITECTURE.md`, reference documentation, and the code over historical plans and audits.
🪛 LanguageTool
docs/releases/v2.8.0.md

[style] ~33-~33: Consider an alternative for the overused word “exactly”.
Context: ...en after rewriting the config, which is exactly the state someone hitting these prompts...

(EXACTLY_PRECISELY)

🔇 Additional comments (7)
docs/releases/v2.8.0.md (1)

1-6: LGTM!

Also applies to: 8-40, 43-46, 53-54, 61-61

CHANGELOG.md (1)

10-11: LGTM!

Also applies to: 13-17, 19-25

package.json (1)

3-3: LGTM!

.codex-plugin/plugin.json (1)

3-3: LGTM!

AGENTS.md (1)

7-7: LGTM!

README.md (1)

394-395: LGTM!

docs/README.md (1)

35-36: LGTM!

Comment thread docs/releases/v2.8.0.md Outdated
Comment thread docs/releases/v2.8.0.md Outdated
Comment thread docs/releases/v2.8.0.md
Comment on lines +47 to +52
## Upgrade notes

Nothing to do. The first `codex-multi-auth` or wrapper invocation after upgrading reconciles `~/.codex/config.toml` for you.

If you were already installed before this release, the first-run marker is migrated in place: only the new credential-store step is replayed, and app bind and launcher install are deliberately **not** rerun, so shortcuts you removed stay removed. A step that fails — a locked or read-only `config.toml`, for instance — leaves the marker unmigrated so the next run retries, rather than recording the work as done.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

add the required windows/wsl upgrade path.

this release changes first-run configuration and state behavior, but the release note omits side-by-side windows/wsl instructions: fixed callback port 1455, listener inspection on both sides, the --device-auth escape hatch, and separate state directories. the repository maps this boundary to lib/wsl.ts (AGENTS.md:63-64); add the runnable operator steps before release.

as per coding guidelines, release docs must document windows and wsl side-by-side operation, including fixed callback-port behavior, listener inspection on both sides, the --device-auth escape hatch, and separate state directories.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/releases/v2.8.0.md` around lines 47 - 52, Expand the Upgrade notes
section with runnable Windows/WSL side-by-side instructions covering the fixed
callback port 1455, how to inspect listeners from both Windows and WSL, the
--device-auth fallback, and separate state directories for each environment.
Anchor the guidance to the Windows/WSL boundary represented by lib/wsl.ts and
preserve the existing first-run migration details.

Source: Coding guidelines

Both caught in review, both real.

The previous-behaviour summary listed only switch and login as the old
enforcement triggers. Health checks and repairs also went through
setCodexCliActiveSelection, and the body of the same document already said so
-- the summary contradicted it.

"Your real config.toml is never rewritten on this path" was wrong in this very
release: the interactive path no longer writes the rotation provider into any
config file, but the new startup credential-store reconcile can still update
the top-level cli_auth_credentials_store key on the same invocation. Scoped the
claim to the provider and pointed at the reconcile.

Also corrected the opt-out table, which implied ENFORCE=0 alone restores
keychain behaviour everywhere. It stops the persisted rewrite -- which is what
front-ends like CodexBar read -- but the wrapper still passes
-c cli_auth_credentials_store="file" to sessions it launches itself, so both
toggles are needed for that.

Rejected the third finding: it asked for Windows/WSL callback-port and
--device-auth instructions, citing AGENTS.md:63-64. That line is a subsystem
file-map row, not a docs rule, and WSL sections appear only in releases that
changed auth/WSL behaviour -- v2.7.0 and v2.7.1 have none. This release touches
credential storage and session routing, not OAuth ports.

No republish needed: docs/ is not in package.json files[], so the notes were
never part of the 2.8.0 tarball.
@ndycode
ndycode merged commit 78aa9b5 into main Jul 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant