Immutable
release. Only release title and notes can be modified.
Published to npm as @bitkyc08/opencodex@2.28.0 with dist-tag latest.
New Features
- Show and filter intercepted helper requests in Logs (#2179)
Bug Fixes
- 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
- 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
- Hold the eager-relay marker to the win32 rule, not to a constant (#2129)
Other Changes
- [WRONG BRANCH] release: promote dev to main for 2.28.0 (#2186)
- [WRONG BRANCH] release: v2.28.0 (#2189)
Changelog
Full Changelog: v2.27.0...v2.28.0
- #2129 test(ws-upstream): hold the eager-relay marker to the win32 rule, not to a constant @ntdatt812
- #2134 fix(subagents): keep a saved roster slot listed when its model is disabled @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
- #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
- #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
- #2160 fix(providers): identify opencode-free with the client User-Agent it claims @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
- #2186 [WRONG BRANCH] release: promote dev to main for 2.28.0 @lidge-jun
- #2189 [WRONG BRANCH] release: v2.28.0 @lidge-jun