Published to npm as @bitkyc08/opencodex@2.28.0-preview.20260820 with dist-tag preview.
New Features
- Report and reclaim abandoned response-state temps (#2089)
- B2 — Fast on OpenAI-backed slugs, no route pinning (#1886) (#2080)
- Show and filter intercepted helper requests in Logs (#2179)
Bug Fixes
- Reclaim abandoned state temps on a timer, not only at load (#2084)
- Resolve the per-model window the way the catalog does (#2085)
- Report model capabilities the way the runtime resolves them (#2086)
- Collapse Google reasoning tiers in model discovery (#2035)
- Route Pro images through vision sidecar (#2031)
- Preserve Claude tools with root $schema (#2103)
- Keep catalog discovery off request event loop (#1876)
- Allow per-provider/model opt-out of code_mode_only tool mode (#2106) (#2112)
- Support namespaced custom tool aliases (#1934)
- Validate codexToolMode; test(types): pin barrel re-export identity (#2119)
- Bake outbound proxy env into installed service definitions (#2116)
- Decode reg.exe output as console text, not UTF-8 (#2117)
- Do not re-label a completed turn as failed when the stream is aborted (#2118)
- Name the native-main gate reason when the fence returns 503 (#2121)
- Write service definitions owner-only, they can carry a proxy credential (#2126)
- Stop fencing native-main on a probe that could not answer (#2130)
- Accept the OS's own canonical spelling on Windows (#2143)
- Keep a saved roster slot listed when its model is disabled (#2134)
- Identify opencode-free with the client User-Agent it claims (#2160)
- Frame the opening turn so AgentRouter stops blocking non-English (#2162)
- Identify OpenCode Go by where it routes, not what it is named (#2164)
- Treat a non-string repeat as padding once that field is known (#2165)
- Sanitize the shadow helper marker at the logging layer (#2166)
- Stop requiring a ChatGPT credential for routed providers (#2137)
- Gate account-native models by entitlement (#2146)
- Drop the retired prompt_cache_retention for gpt-5.6 (#2138)
- Resolve model-keyed lookups the way the runtime resolves them (#2140)
- Retain the K12 short-window quota end to end (#2141)
- Backfill missing ids on output items for strict decoders (#2142)
- Gate the shell hook on an installed Claude Code CLI (#2144)
- Bridge routed tool_search through the Responses passthrough (#2145)
- Stream OAuth Grok through Responses (#2147)
- Allow a baseUrl override for Anthropic and Antigravity (#2148)
- Reject superseded login credential commits (#2149)
- Preserve and replay thought signatures across stream chunks (#2150)
- Apply the Fast capability gate to the native passthrough (#2151)
- Key admission-bearer substitution on transport, not provider name (#2169)
- Stop the background main refresh from retracting a reauth quarantine (#327) (#2167)
- Close the core/Lab directory bypass and the release dry-run dead end (#2171)
- Unbreak privacy:scan on dev (#2175)
- Record the configured shadow prefix, not the caller's model string (#2170)
- Give tool_search_call and custom_tool_call their own id prefixes (#2173)
- Stop the audit record from breaking its own privacy gate (#2177)
- Give the Windows leg the budgets and the crash retry it never had (#2178)
- Heartbeat while buffering tool-call deltas (#2180)
- Stop the Windows leg from truncating and mismeasuring its own shards (#2182)
Documentation
- Move @Wibias to former maintainers (#2098)
- Explain deferred tool search troubleshooting (#1878)
- Close the 260819 merge loop with its outcome record (#2120)
- Close the 260819 unclaimed-bug unit (#2128)
- Record release readiness for 2.27.0 and the Windows gate decision (#2153)
- Record the local Windows verification behind the 2.27.0 promotion (#2158)
- Record the main..dev release-safety audit (#2172)
- Record the release-safety audit of the main..dev range (#2174)
- Close the release audit with the merged fixes and the verified dev state (#2176)
Chores
- Extract value clusters into types/tools and types/wire leaves (#2019)
- Move type clusters to leaves; types.ts becomes a pure barrel (#2023)
- Extract provider-name leaf; break config<->profile cycle (#2036)
- Move dev version line past the published channel (#2136)
- Pin the file mode on POSIX only, not on Windows (#2139)
- Hold the eager-relay marker to the win32 rule, not to a constant (#2129)
Other Changes
- [WRONG BRANCH] release: sync dev into preview for 2.27.0 (#2161)
- [WRONG BRANCH] release: sync dev into preview for 2.28.0 (#2187)
- [WRONG BRANCH] release: v2.28.0-preview.20260820 (#2191)
Changelog
Full Changelog: v2.27.0...v2.28.0-preview.20260820
- #1876 fix(windows): keep catalog discovery off request event loop @Ingwannu
- #1878 docs(codex): explain deferred tool search troubleshooting @Ingwannu
- #1934 fix(tools): support namespaced custom tool aliases @jenfonro
- #2019 refactor(types): extract value clusters into types/tools and types/wire leaves @lidge-jun
- #2023 refactor(types): move type clusters to leaves; types.ts becomes a pure barrel @lidge-jun
- #2031 fix(mimo): route Pro images through vision sidecar @Ingwannu
- #2035 fix: collapse Google reasoning tiers in model discovery @iF2007
- #2036 refactor(config): extract provider-name leaf; break config<->profile cycle @lidge-jun
- #2080 feat(openrouter): B2 — Fast on OpenAI-backed slugs, no route pinning (#1886) @olddonkey
- #2084 fix(responses): reclaim abandoned state temps on a timer, not only at load @lidge-jun
- #2085 fix(admission): resolve the per-model window the way the catalog does @ntdatt812
- #2086 fix(cli): report model capabilities the way the runtime resolves them @ntdatt812
- #2089 feat(doctor): report and reclaim abandoned response-state temps @lidge-jun
- #2098 docs(governance): move @Wibias to former maintainers @lidge-jun
- #2103 fix(xai): preserve Claude tools with root $schema @hyohyeon08
- #2112 fix(catalog): allow per-provider/model opt-out of code_mode_only tool mode (#2106) @Yuxin-Qiao
- #2116 fix(service): bake outbound proxy env into installed service definitions @lidge-jun
- #2117 fix(tray): decode reg.exe output as console text, not UTF-8 @lidge-jun
- #2118 fix(cursor): do not re-label a completed turn as failed when the stream is aborted @lidge-jun
- #2119 fix(config): validate codexToolMode; test(types): pin barrel re-export identity @lidge-jun
- #2120 docs(devlog): close the 260819 merge loop with its outcome record @lidge-jun
- #2121 fix(codex): name the native-main gate reason when the fence returns 503 @lidge-jun
- #2126 fix(service): write service definitions owner-only, they can carry a proxy credential @lidge-jun
- #2128 docs(devlog): close the 260819 unclaimed-bug unit @lidge-jun
- #2129 test(ws-upstream): hold the eager-relay marker to the win32 rule, not to a constant @ntdatt812
- #2130 fix(probe,codex): stop fencing native-main on a probe that could not answer @lidge-jun
- #2134 fix(subagents): keep a saved roster slot listed when its model is disabled @lidge-jun
- #2136 chore(release): move dev version line past the published channel @lidge-jun
- #2137 fix(responses): stop requiring a ChatGPT credential for routed providers @lidge-jun
- #2138 fix(responses): drop the retired prompt_cache_retention for gpt-5.6 @lidge-jun
- #2139 test(service): pin the file mode on POSIX only, not on Windows @lidge-jun
- #2140 fix(routing): resolve model-keyed lookups the way the runtime resolves them @lidge-jun
- #2141 fix(codex): retain the K12 short-window quota end to end @lidge-jun
- #2142 fix(responses): backfill missing ids on output items for strict decoders @lidge-jun
- #2143 fix(log-guard): accept the OS's own canonical spelling on Windows @lidge-jun
- #2144 fix(claude): gate the shell hook on an installed Claude Code CLI @lidge-jun
- #2145 fix(responses): bridge routed tool_search through the Responses passthrough @lidge-jun
- #2146 fix(codex): gate account-native models by entitlement @lidge-jun
- #2147 fix(xai): stream OAuth Grok through Responses @lidge-jun
- #2148 fix(providers): allow a baseUrl override for Anthropic and Antigravity @lidge-jun
- #2149 fix(oauth): reject superseded login credential commits @lidge-jun
- #2150 fix(google): preserve and replay thought signatures across stream chunks @lidge-jun
- #2151 fix(chat): apply the Fast capability gate to the native passthrough @lidge-jun
- #2153 docs(devlog): record release readiness for 2.27.0 and the Windows gate decision @lidge-jun
- #2158 docs(devlog): record the local Windows verification behind the 2.27.0 promotion @lidge-jun
- #2160 fix(providers): identify opencode-free with the client User-Agent it claims @lidge-jun
- #2161 [WRONG BRANCH] release: sync dev into preview for 2.27.0 @lidge-jun
- #2162 fix(anthropic): frame the opening turn so AgentRouter stops blocking non-English @lidge-jun
- #2164 fix(quota): identify OpenCode Go by where it routes, not what it is named @lidge-jun
- #2165 fix(openai-chat): treat a non-string repeat as padding once that field is known @lidge-jun
- #2166 fix(logs): sanitize the shadow helper marker at the logging layer @lidge-jun
- #2167 fix(codex): stop the background main refresh from retracting a reauth quarantine (#327) @ntdatt812
- #2169 fix(auth): key admission-bearer substitution on transport, not provider name @lidge-jun
- #2170 fix(logs): record the configured shadow prefix, not the caller's model string @lidge-jun
- #2171 fix(guards): close the core/Lab directory bypass and the release dry-run dead end @lidge-jun
- #2172 docs(devlog): record the main..dev release-safety audit @lidge-jun
- #2173 fix(responses): give tool_search_call and custom_tool_call their own id prefixes @lidge-jun
- #2174 docs(devlog): record the release-safety audit of the main..dev range @lidge-jun
- #2175 fix(devlog): unbreak privacy:scan on dev @lidge-jun
- #2176 docs(devlog): close the release audit with the merged fixes and the verified dev state @lidge-jun
- #2177 fix(devlog): stop the audit record from breaking its own privacy gate @lidge-jun
- #2178 fix(ci): give the Windows leg the budgets and the crash retry it never had @lidge-jun
- #2179 feat(gui): show and filter intercepted helper requests in Logs @lidge-jun
- #2180 fix(openai-chat): heartbeat while buffering tool-call deltas @lidge-jun
- #2182 fix(ci): stop the Windows leg from truncating and mismeasuring its own shards @lidge-jun
- #2187 [WRONG BRANCH] release: sync dev into preview for 2.28.0 @lidge-jun
- #2191 [WRONG BRANCH] release: v2.28.0-preview.20260820 @lidge-jun