What's Changed
- perf(update): skip dependency work an update does not change by @duolahypercho in #62
- fix(doctor): repair foreign checkout state through the recorded owner by @duolahypercho in #63
- fix(update): refresh tray bundles installed outside the checkout by @duolahypercho in #64
- fix(win): force UTF-8 output for the LiteLLM gateway by @michaelyosta in #65
- fix(win): recover from detached HEAD instead of crashing by @michaelyosta in #67
- feat(win): discover the Codex Desktop App bundled CLI by @michaelyosta in #68
- fix(win): repair the hidden API-key prompt on Windows by @michaelyosta in #69
- fix(macOS): keep tray popover anchor stable during activity updates by @slavakurilyak in #75
- feat: dynamic subagent and model picker settings by @duolahypercho in #80
- fix(win): recognize TOML-escaped Windows catalog paths by @michaelyosta in #66
- fix(tray): prevent stale chat names in Dynamic Island by @KaushalrajPuwar in #79
- fix(codex): keep native catalog and root concurrency compatibility by @rajivpoddar in #74
- feat(tray): tie the router and the tray to the Codex desktop apps, and supervise the tray with launchd by @duolahypercho in #83
- feat(router): redirect native background turns to a routed model; enable multi_agent_v2 on routed subagents by @duolahypercho in #85
- feat(config): per-provider config tree, plus error-classification and reasoning-effort fixes by @duolahypercho in #86
- fix(tray): stop registering a login item by @duolahypercho in #87
- fix(desktop): disable WebKit DMA-BUF renderer only on proprietary NVIDIA driver by @acrogenesis in #90
- fix(gemini-api): strip unsupported thinking/think params before forwarding by @duolahypercho in #91
- fix(gemini-api,service): sanitize non-user images, drop store/logit_bias, harden Windows startup by @duolahypercho in #92
- fix(commandcode): shorten the plan hint to the requirement by @duolahypercho in #97
- feat: vision for text-only models, and local LLMs as a provider by @duolahypercho in #96
- Fix routed orchestrator with native subagents by @sergeylopukhov in #94
- Send the native backend a compressed body instead of inflated JSON by @sergeylopukhov in #103
- Say what is blocking an update, and offer a way past it by @sergeylopukhov in #102
- fix(api-forwarder): downgrade forced tool_choice for DeepSeek thinking models by @duolahypercho in #107
- fix(router): omit tool_choice from compaction requests by @duolahypercho in #108
- fix(router): normalize readable routed-agent handoffs for native replay and compaction by @duolahypercho in #109
- feat(skills): add a codex-subagents skill for spawning routed subagents by @duolahypercho in #112
- fix(router): stop a stale selection file and a mid-stream failure from taking the router down by @duolahypercho in #111
- fix(router): meter routed compaction and resolve its subagent payloads by @duolahypercho in #113
- fix(install): make all three update paths agree on what blocks an update by @duolahypercho in #114
- test: make the startup-cleanup watchdog wait on progress, not a fixed deadline by @duolahypercho in #115
- fix(start): stop a starved machine from making startup declare a healthy service dead by @duolahypercho in #116
- fix(win): start the background service without a console window by @duolahypercho in #110
- feat(install): install the Python gateway from a hash-verified lock by @duolahypercho in #117
- fix(api-forwarder): let a curated model declare that it refuses a forced tool_choice by @duolahypercho in #118
- fix(router): retry a native upstream failure that happened before anything was relayed by @duolahypercho in #119
- fix(router): estimate prompt tokens when a provider reports an impossible zero by @duolahypercho in #120
- Let the signed-in ChatGPT plan read images for text-only models by @sergeylopukhov in #104
- perf(vision): stop every image turn paying a keychain scan it does not need by @duolahypercho in #122
- feat(vision): read a pasted image with no configuration by @duolahypercho in #121
- fix(vision): read every image a turn carries, and read it once by @duolahypercho in #124
- fix(deps): raise litellm so a patched cryptography can be installed by @duolahypercho in #125
- fix(test): give each test file its own ports instead of racing for them by @duolahypercho in #128
- feat(vision): ask the reader what the operator wants to know by @duolahypercho in #130
- fix(catalog): preserve native GPT speed tiers by @jepgambardella in #135
- fix(router): forward standalone web search by @jepgambardella in #136
- Meter native turns the backend streams without a content-type by @sergeylopukhov in #133
- Stop offering a subagent that was switched off by @sergeylopukhov in #134
- Add DeepSeek V4 Flash Ollama Cloud model by @malsabbagh in #137
- fix: exclude unauthenticated providers from login-free slots by @Bruce-Yii in #132
- feat: add ClinePass provider by @Daltonganger in #81
- feat(provider): add GitHub Copilot support by @tonyxu-io in #129
- meter: record mid-stream upstream aborts instead of 200 by @kartikkabadi in #139
- test: lock in token-estimate cap, predicate, and disable path by @kartikkabadi in #140
- relay: full native toolset and namespaces to routed models by @kartikkabadi in #142
- relay: inherit session model for spawned threads when model omitted by @kartikkabadi in #141
- skills: install and verify the custom-model tool-shape skill pack by @kartikkabadi in #143
- tooling: verify skill injection and document relay operations by @kartikkabadi in #144
- build(deps): bump actions/setup-python from 5 to 7 by @dependabot[bot] in #150
- feat: diagnose kimi oauth credential health without breaking refresh by @Bruce-Yii in #151
- fix: preserve wrapped Node launcher and PATH by @duolahypercho in #152
- feat: add Chutes provider and subscription quota reporting by @rohitsabu in #148
- Fix empty completions: retry once, surface an error on repeat by @kartikkabadi in #145
- fix: preserve Codex task provider during signed routing by @rohitsabu in #147
- feat: mark empty-completion guard budget releases and indeterminate terminal parses by @Bruce-Yii in #154
- feat(packaging): ship a Homebrew tap and keep its formula current by @duolahypercho in #156
- Harden routed agent delegation and capability checks by @MediaPublishing in #155
- refactor: build the namespace inventory once per routed request by @duolahypercho in #157
- Prepare Homebrew core submission by @duolahypercho in #158
- fix: detect and rebuild venvs whose interpreter home was cleared by @Guojiz in #160
- Add end-to-end local Ollama model support by @duolahypercho in #163
- fix: outlast the client's connection pool on idle keep-alive by @duolahypercho in #165
- Make every local model installable, with or without Ollama by @duolahypercho in #166
- fix: route standalone search and deferred MCP tools safely by @duolahypercho in #167
- Fix macOS tray and router lifecycle by @duolahypercho in #168
- Show remaining plan usage for xAI OAuth, MiniMax, Command Code, and opencode Go by @duolahypercho in #172
- Surface upstream error cause chains, meter native failures, flatten union-rooted tool schemas for xAI by @duolahypercho in #173
- Release 0.4.0-beta.3 by @duolahypercho in #174
New Contributors
- @michaelyosta made their first contribution in #65
- @slavakurilyak made their first contribution in #75
- @KaushalrajPuwar made their first contribution in #79
- @rajivpoddar made their first contribution in #74
- @acrogenesis made their first contribution in #90
- @sergeylopukhov made their first contribution in #94
- @jepgambardella made their first contribution in #135
- @malsabbagh made their first contribution in #137
- @Bruce-Yii made their first contribution in #132
- @Daltonganger made their first contribution in #81
- @tonyxu-io made their first contribution in #129
- @kartikkabadi made their first contribution in #139
- @dependabot[bot] made their first contribution in #150
- @rohitsabu made their first contribution in #148
- @MediaPublishing made their first contribution in #155
- @Guojiz made their first contribution in #160
Full Changelog: v0.4.0-beta.2...v0.4.0-beta.3