v0.5.5
Sixteen fixes and features on top of v0.5.4 — reliability of the LLM path, a composer that tells you what it is doing, and per-session context.
Stability
- The TUI no longer dies of heap exhaustion after a long run.
NODE_ENVnow defaults toproductionoutside the SEA binary too, so the development React reconciler stops recording aperformance.measure()per commit. An unattended agent used to go silent around the eleven-hour mark. (#310) - A streaming local generation is bounded by idle time, not total time.
localModels.requestTimeoutMswas a wall-clock deadline over the whole generation, so any honest answer longer than five minutes was killed mid-stream and its tokens discarded. (#323) - A stream that dies before its first chunk is retried. A provider that accepts the connection, thinks for a long time and then drops the socket without emitting anything no longer fails the turn — even with no fallback provider configured. (#313)
- Provider-availability failures fall over instead of blocking. A llama-server 404/405 was filed as a "grammar" failure, and an uninstalled or logged-out subscription CLI as a "tool" failure; neither could advance the fallback chain. (#322)
- Parallel tool calls stay apart on providers that send no
index. Streamed calls are keyed by id when the provider gives one, so two calls stop folding into one with their arguments spliced together. (#309, issue #103) - A cloud session stops probing the local llama backend. No
/healthwarnings, no 3-second footer poller and no local profile refresh for a backend the session never talks to. (#324, issue #112)
Composer and context
- A stop button in the composer while a turn runs — and a stopped turn now says
Agent stopped by user.with a[try again]action, instead of dressing your own stop as a provider failure. (#316) - A persistent update banner in the top-right of the status bar: it survives skipping the startup modal, narrates the install, and its
Updatecell is clickable even while the modal is open. (#317) - The context readout counts the KV-cached prefix. On a warm local cache the chip was showing only the tokens evaluated on the last request — which is why moving the task selector made the figure leap about fourfold. (#318)
- The chip recalculates live on task-selector moves and model switches, instead of waiting for the next prompt build. (#319)
- Context occupancy and the provider/model are now per session, stamped at the end of each turn and restored when you switch back — so reopening yesterday's thread shows its real gauge, and two projects on two models stop quietly sharing one. (#320, #321)
Tools
- A streaming native-tool contract probe at provider setup. Reaching
/v1/modelsproves nothing about a streamed completion carrying atoolspayload; routes that pass the key check and then fail every real turn are now named at setup rather than by your first message. (#315, issue #110) read_documentroutes source files toos.fs.read, and itsformatargument is a closed set on every surface instead of an open string that invited unusable guesses. (#312)- The loop detector catches overlapping re-reads of an unchanged file — shifted
offset/limiton the same bytes no longer slips past argument hashing. (#314)
What's Changed
- Release candidate 2026-09-03: PRs #309-#324 by @plombeer31 in #325
- fix(llm): key streamed tool calls by id when the provider sends no index by @plombeer31 in #309
- fix(cli): default NODE_ENV to production so the TUI stops leaking to OOM by @plombeer31 in #310
- fix(install): say why an unpublished platform has no binary by @plombeer31 in #311
- fix(tools): route source files from read_document to os.fs.read by @plombeer31 in #312
- fix(openai): retry a stream that dies before its first chunk by @plombeer31 in #313
- feat(loop-detector): detect overlapping re-reads of an unchanged file by @plombeer31 in #314
- feat(providers): probe streaming native-tool contract at setup by @plombeer31 in #315
- TUI: stop button in the composer while a turn is running by @plombeer31 in #316
- TUI: persistent top-right update banner (+ --fake-update testing ground) by @plombeer31 in #317
- fix: context readout collapses to the KV-cache delta, then jumps ~4x when the task selector moves by @plombeer31 in #318
- feat: composer context chip recalculates live — task selector and model switches by @plombeer31 in #319
- Persist the context gauge per session and restore it on switch by @plombeer31 in #320
- Pin the provider/model to each session and restore it on switch by @plombeer31 in #321
- fix(llm): provider-availability failures no longer block fallover by @plombeer31 in #322
- fix(llm): a streaming llama response is bounded by idle time, not total time by @plombeer31 in #323
- fix(runtime): stop probing the local llama backend while a cloud provider is active by @plombeer31 in #324
Full Changelog: v0.5.4...v0.5.5