Published to npm as @bitkyc08/opencodex@2.52.0-preview.20260911 with dist-tag preview.
New Features
- Add official CodeBuddy Global and CN providers (carry #3340) (#4026)
- Add Qoder Global PAT provider (carry #3349) (#4027)
- Add Qoder CN PAT provider (carry #3350) (#4028)
- Give Qoder its brand mark and name the CLI providers (#4029)
- Support source-preserving YAML for Hermes Agent (carry #3990) (#4030)
- OrcaRouter placement, overview introduction and links (#3914)
- PackyCode preset, placement and overview links (#3915)
- Explain ChatGPT public endpoint latency (#4091)
- Explain ChatGPT public endpoint latency (#4063)
- Opt into client-side compaction (#4092)
- Opt into client-side compaction (#3987)
- Surface and filter the routed account label per request (#4134)
- Make the inbound body admission limit configurable (#4138)
- Report an explicit account plan field for OAuth providers (#4146)
- Let an operator opt out of email masking (#4160)
- Classify discovered model pricing and filter free models (#4156)
- Show an estimated decode rate alongside end-to-end throughput (#4166)
- Mark quota-exhausted models and combos inactive (#4165)
- Let an operator keep a downgraded account out of pool rotation (#4211) (#4238)
- One-port hub — same-port loopback companion listener, honest hub-gate messages (#4250)
- Provision the data-plane token, add ocx hub invite, and one hub block in ocx status (#4252)
- A connected client reports the hub's state, not its own (#4255)
Bug Fixes
- Guard model-tail histories with user continue nudge across Gemini and CCA (carry #3988) (#4031)
- Wp1: land the luvs01 fixture and bug-fix train (9 PRs) (#4049)
- Wp2: land seven contributor bug fixes (quota, catalog, streaming, storage, history) (#4051)
- Wp4: fix four reported bugs with no owning pull request (#4058)
- Wp7: report the actual reason a proxy refused to stop (#4067)
- Show the OrcaRouter sponsor logo on every branch (#4097)
- Validate token values and escape human output (#4074)
- Pin manual redirects at upstream dispatch (#4082)
- Honor rejected identity checks during port reclaim (#4101)
- Honor rejected identity checks during port reclaim (#4036)
- Close expired dashboard selection streams quietly when no frames are queued (#4095)
- Restore main policy binding after owned startup (#4085)
- Fall back to caller main during Pool cooldown (#4088)
- Confirm shared teardown before skipping parent restoration (#4070)
- Persist transport finality evidence (#4061)
- Retain stored sidecar auth for caller-auth Chat (#4103)
- Keep credentials scoped to the final routed provider (carry of #4081) (#4102)
- Drop tool-schema patterns Python re cannot compile (#4096)
- Drop tool-schema patterns Python re cannot compile (#4072)
- Preserve composed tool schema contracts (#4113)
- Attribute Spark 5h header windows to the model limit, not the account short slot (#4128)
- Report operator-owned root routing truthfully (#4114)
- Classify non-streaming provider input overflow (#4127)
- Allow 90 seconds for Codex WebSocket response prelude (#4084)
- Restore AI Studio model discovery (#4068)
- Recover encrypted agent tasks on mid-thread model switches (#4135)
- Persist a terminal validation verdict for a revoked pool grant (#4140)
- Opt-in hosted web-search bridge for the key-auth Responses passthrough (#4142)
- Defer validation for quota-exhausted account registration (#3848)
- Classify a hopping 413 when the combo exhausts its targets (#4150)
- Let a combo shadow-call target enter the failover loop (#4157)
- Keep mid-conversation system messages in the timeline (#4161)
- Export reasoning configuration for thought-capable models (#4153)
- Stop the test suite from mutating a live service manager (#4152)
- Recover a stale launchd job with bootout before load (#4164)
- Explain the discovery dependency when model sync fails (#4158)
- Give sessionless requests an isolated session lane (#4226)
- Refuse a write that would take a config file from its owner (#4227)
- Warm up new ChatGPT Free accounts instead of blaming the credential (#4126) (#4230)
- Admit the Responses Coding Plan preset to the quota reader (#4231)
- Name the account that left the pool instead of only dropping it (#4212) (#4233)
- Support native pnpm self-updates (#4235)
- Classify Codex WS failures instead of restating them (#4232)
- Name the real refusal cause instead of asserting ownership (#4237)
- Refuse vendor CLI scaffolding in routed output (#4234)
- Refuse a hub catalog the local Codex CLI cannot parse (#4240)
- MacOS repair no longer evicts a healthy launchd job, and verifies the one it loads (#4249)
- Route the hub's own local clients through their two destinations (management ingress + loopback inference) (#4251)
- Emit max/ultra efforts unconditionally and expire stale clamp diagnostics (#4257)
- Keep the retryable main-refresh refusal an overload, not a bad key (#4269)
Documentation
- Archive the 2.48.0 release train record (#4021)
- Record the provider runtime stack landing (#4037)
- Wp3: land four small contributor changes and the missing feedback-callback test (#4053)
- Move the closed Spark short-quota unit to _fin (#4132)
- Document the private follow-up path for pending reports (#4133)
- Explain the opencode-free Zen lock-in instead of leaking MissingSessionID (#4136)
- Post-2.49 reconciliation — 101 units to _fin + scope-cleanup records (#4125)
- Plan the post-2.49 round-2 two-lane delivery (#4155)
- Record the round-2 landings, decisions, and blockers (#4162)
- Resync every non-English README and gate them against drift (#4151)
- Record the #4147 and #3859 landings and the #4141 unblock (#4163)
- Close the round-2 record at the screenshot gate (#4168)
- Record the Lane B landing and the screenshot-gate waiver (#4180)
- Cursor ACP -> OpenCodex feasibility investigation (#4186)
- Record the 2.50.0 regression audit and release train (#4196)
- Plan the 260911 lane dispatch round (#4217)
- Publish the 260911 lane branches and refresh the round ledger (#4220)
- Mechanize the lane tracking refresh and fix the wp4 merge gate (#4221)
- Fold the seven-lane feasibility audit into lane ownership and scope (#4223)
- State which account each provider login spends (#4239)
- Make the setup runnable on a fresh config and close the macOS data plane (#4241)
- The one-port hub recipe, invite flow, and launchd semantics (en+ko, skill) (#4254)
- Provider: seed GLM-5.3-Flash on the BigModel Responses preset (#4244)
- Make the remote hub guide runnable in every locale (#4247)
Chores
- Open dev at 2.49.0 before releasing 2.48.0 (#4019)
- Wp6: pin Bun 1.4.2 and catch up the drifted workflow (#4064)
- Platform-policy readiness budget for the config-lock holder child, unmasked readiness failures (#4099)
Other Changes
- Usage: open the custom date range on request instead of on arrival (#4093)
- Devlog: name the language on the design-dial fence (#4098)
- Oauth/xai: honor Retry-After and stop retrying aborted token requests (#4087)
- Oauth/xai: pin discovery endpoints to trusted auth hosts and reject userinfo (#4094)
- Open dev at 2.50.0 before releasing 2.49.0 (#4115)
- Promote verified 2.49.0 product tree to preview (#4116)
- Open dev at 2.51.0 before releasing 2.50.0 (#4194)
- Pool: name the account when a refresh fails or its models vanish (#4248)
- Client: report local Codex readiness instead of bare connected state (#4246)
- Promote verified 2.52.0-preview.20260911 product tree to preview (#4273)
Changelog
Full Changelog: v2.51.0...v2.52.0-preview.20260911
- #3848 fix(codex): defer validation for quota-exhausted account registration @shaun0927
- #3914 feat(sponsors): OrcaRouter placement, overview introduction and links @lidge-jun
- #3915 feat(sponsors): PackyCode preset, placement and overview links @lidge-jun
- #3987 feat(codex): opt into client-side compaction @cb8010d6
- #4019 chore(release): open dev at 2.49.0 before releasing 2.48.0 @lidge-jun
- #4021 docs(devlog): archive the 2.48.0 release train record @lidge-jun
- #4026 feat(provider): add official CodeBuddy Global and CN providers (carry #3340) @lidge-jun
- #4027 feat(provider): add Qoder Global PAT provider (carry #3349) @lidge-jun
- #4028 feat(provider): add Qoder CN PAT provider (carry #3350) @lidge-jun
- #4029 feat(gui): give Qoder its brand mark and name the CLI providers @lidge-jun
- #4030 feat(integrations): support source-preserving YAML for Hermes Agent (carry #3990) @lidge-jun
- #4031 fix(google): guard model-tail histories with user continue nudge across Gemini and CCA (carry #3988) @lidge-jun
- #4036 fix(server): honor rejected identity checks during port reclaim @luvs01
- #4037 docs(devlog): record the provider runtime stack landing @lidge-jun
- #4049 wp1: land the luvs01 fixture and bug-fix train (9 PRs) @lidge-jun
- #4051 wp2: land seven contributor bug fixes (quota, catalog, streaming, storage, history) @lidge-jun
- #4053 wp3: land four small contributor changes and the missing feedback-callback test @lidge-jun
- #4058 wp4: fix four reported bugs with no owning pull request @lidge-jun
- #4061 fix(logs): persist transport finality evidence @chilung-cgu
- #4063 feat(doctor): explain ChatGPT public endpoint latency @chilung-cgu
- #4064 wp6: pin Bun 1.4.2 and catch up the drifted workflow @lidge-jun
- #4067 wp7: report the actual reason a proxy refused to stop @lidge-jun
- #4068 fix(google): restore AI Studio model discovery @chilung-cgu
- #4070 fix(stop): confirm shared teardown before skipping parent restoration @luvs01
- #4072 fix(openai): drop tool-schema patterns Python re cannot compile @itismyfield
- #4074 fix(usage): validate token values and escape human output @luvs01
- #4082 fix(transport): pin manual redirects at upstream dispatch @luvs01
- #4084 fix(responses): allow 90 seconds for Codex WebSocket response prelude @S0RYUASUKA
- #4085 fix(codex): restore main policy binding after owned startup @lidge-jun
- #4087 oauth/xai: honor Retry-After and stop retrying aborted token requests @lidge-jun
- #4088 fix(codex): fall back to caller main during Pool cooldown @lidge-jun
- #4091 feat(doctor): explain ChatGPT public endpoint latency @lidge-jun
- #4092 feat(codex): opt into client-side compaction @lidge-jun
- #4093 usage: open the custom date range on request instead of on arrival @lidge-jun
- #4094 oauth/xai: pin discovery endpoints to trusted auth hosts and reject userinfo @lidge-jun
- #4095 fix(server): close expired dashboard selection streams quietly when no frames are queued @lidge-jun
- #4096 fix(openai): drop tool-schema patterns Python re cannot compile @lidge-jun
- #4097 fix(readme): show the OrcaRouter sponsor logo on every branch @lidge-jun
- #4098 devlog: name the language on the design-dial fence @lidge-jun
- #4099 test(config): platform-policy readiness budget for the config-lock holder child, unmasked readiness failures @lidge-jun
- #4101 fix(server): honor rejected identity checks during port reclaim @lidge-jun
- #4102 fix(auth): keep credentials scoped to the final routed provider (carry of #4081) @lidge-jun
- #4103 fix(auth): retain stored sidecar auth for caller-auth Chat @luvs01
- #4113 fix(openai): preserve composed tool schema contracts @lidge-jun
- #4114 fix(codex): report operator-owned root routing truthfully @Ingwannu
- #4115 chore(release): open dev at 2.50.0 before releasing 2.49.0 @github-actions[bot]
- #4116 release: promote verified 2.49.0 product tree to preview @lidge-jun
- #4125 docs(devlog): post-2.49 reconciliation — 101 units to _fin + scope-cleanup records @lidge-jun
- #4127 fix(responses): classify non-streaming provider input overflow @Ingwannu
- #4128 fix(codex): attribute Spark 5h header windows to the model limit, not the account short slot @lidge-jun
- #4132 docs(devlog): move the closed Spark short-quota unit to _fin @lidge-jun
- #4133 docs(security): document the private follow-up path for pending reports @lidge-jun
- #4134 feat(logs): surface and filter the routed account label per request @lidge-jun
- #4135 fix(responses): recover encrypted agent tasks on mid-thread model switches @lidge-jun
- #4136 docs(provider): explain the opencode-free Zen lock-in instead of leaking MissingSessionID @lidge-jun
- #4138 feat(proxy): make the inbound body admission limit configurable @lidge-jun
- #4140 fix(codex): persist a terminal validation verdict for a revoked pool grant @lidge-jun
- #4142 fix(web-search): opt-in hosted web-search bridge for the key-auth Responses passthrough @lidge-jun
- #4146 feat(oauth): report an explicit account plan field for OAuth providers @lidge-jun
- #4150 fix(combos): classify a hopping 413 when the combo exhausts its targets @lidge-jun
- #4151 docs(readme): resync every non-English README and gate them against drift @lidge-jun
- #4152 fix(service): stop the test suite from mutating a live service manager @lidge-jun
- #4153 fix(zcode): export reasoning configuration for thought-capable models @richardfeiliu-a11y
- #4155 docs(devlog): plan the post-2.49 round-2 two-lane delivery @lidge-jun
- #4156 feat(catalog): classify discovered model pricing and filter free models @lidge-jun
- #4157 fix(responses): let a combo shadow-call target enter the failover loop @lidge-jun
- #4158 fix(models): explain the discovery dependency when model sync fails @lidge-jun
- #4160 feat(privacy): let an operator opt out of email masking @lidge-jun
- #4161 fix(claude): keep mid-conversation system messages in the timeline @lidge-jun
- #4162 docs(devlog): record the round-2 landings, decisions, and blockers @lidge-jun
- #4163 docs(devlog): record the #4147 and #3859 landings and the #4141 unblock @lidge-jun
- #4164 fix(service): recover a stale launchd job with bootout before load @lidge-jun
- #4165 feat(catalog): mark quota-exhausted models and combos inactive @lidge-jun
- #4166 feat(logs): show an estimated decode rate alongside end-to-end throughput @lidge-jun
- #4168 docs(devlog): close the round-2 record at the screenshot gate @lidge-jun
- #4180 docs(devlog): record the Lane B landing and the screenshot-gate waiver @lidge-jun
- #4186 docs(devlog): Cursor ACP -> OpenCodex feasibility investigation @lidge-jun
- #4194 chore(release): open dev at 2.51.0 before releasing 2.50.0 @github-actions[bot]
- #4196 docs(devlog): record the 2.50.0 regression audit and release train @lidge-jun
- #4217 docs(devlog): plan the 260911 lane dispatch round @lidge-jun
- #4220 docs(devlog): publish the 260911 lane branches and refresh the round ledger @lidge-jun
- #4221 docs(devlog): mechanize the lane tracking refresh and fix the wp4 merge gate @lidge-jun
- #4223 docs(devlog): fold the seven-lane feasibility audit into lane ownership and scope @lidge-jun
- #4226 fix(opencode-go): give sessionless requests an isolated session lane @lidge-jun
- #4227 fix(integrations): refuse a write that would take a config file from its owner @lidge-jun
- #4230 fix(codex): warm up new ChatGPT Free accounts instead of blaming the credential (#4126) @lidge-jun
- #4231 fix(bigmodel): admit the Responses Coding Plan preset to the quota reader @lidge-jun
- #4232 fix(responses): classify Codex WS failures instead of restating them @lidge-jun
- #4233 fix(codex): name the account that left the pool instead of only dropping it (#4212) @lidge-jun
- #4234 fix(qoder): refuse vendor CLI scaffolding in routed output @lidge-jun
- #4235 fix(update): support native pnpm self-updates @lidge-jun
- #4237 fix(stop): name the real refusal cause instead of asserting ownership @lidge-jun
- #4238 feat(codex): let an operator keep a downgraded account out of pool rotation (#4211) @lidge-jun
- #4239 docs(providers): state which account each provider login spends @lidge-jun
- #4240 fix(client): refuse a hub catalog the local Codex CLI cannot parse @lidge-jun
- #4241 docs(remote-hub): make the setup runnable on a fresh config and close the macOS data plane @lidge-jun
- #4244 provider: seed GLM-5.3-Flash on the BigModel Responses preset @lidge-jun
- #4246 client: report local Codex readiness instead of bare connected state @lidge-jun
- #4247 docs(i18n): make the remote hub guide runnable in every locale @lidge-jun
- #4248 pool: name the account when a refresh fails or its models vanish @lidge-jun
- #4249 fix(service): macOS repair no longer evicts a healthy launchd job, and verifies the one it loads @lidge-jun
- #4250 feat(server): one-port hub — same-port loopback companion listener, honest hub-gate messages @lidge-jun
- #4251 fix(claude): route the hub's own local clients through their two destinations (management ingress + loopback inference) @lidge-jun
- #4252 feat(hub): provision the data-plane token, add ocx hub invite, and one hub block in ocx status @lidge-jun
- #4254 docs(remote-hub): the one-port hub recipe, invite flow, and launchd semantics (en+ko, skill) @lidge-jun
- #4255 feat(client): a connected client reports the hub's state, not its own @lidge-jun
- #4257 fix(codex): emit max/ultra efforts unconditionally and expire stale clamp diagnostics @lidge-jun
- #4269 fix(responses): keep the retryable main-refresh refusal an overload, not a bad key @lidge-jun
- #4273 release: promote verified 2.52.0-preview.20260911 product tree to preview @lidge-jun