v0.190.0
Upgrading
- Security: the fleet console proxy forwards a member's path raw and rejects ambiguous encodings with
400. It refuses encoded/and., double encoding, encoded NUL, a literal..and backslashes, on both HTTP and WebSocket. Before, the hub authorised the decoded path but the member could dispatch a different one. Members' own auth already refused these requests, so this was not exploitable (#3999). - A2A clients: put
contextId/taskIdon the message, not on the requestparams./a2anow answers-32602naming the fix for a send that carries them onparams(SendMessage,SendStreamingMessage, v0.3message/sendandmessage/stream). Since a2a-sdk 1.2 such a request silently started a fresh session. Other unknown fields still pass through (#4013). - The a2a-sdk floor is now
1.2.1. An answer to a paused task that ends mid-flight is still routed to the context's current pause (#3950). - Pillow is now a core dependency. Server and Docker installs downscale images before storing and sending them. Two new settings control this:
model.image_max_side(default 1568 px) andmodel.max_images_per_request(default 20) (#4005). /api/telemetry/summary:by_modelleaves out turns where no model ran, and a newno_model_turnsfield counts them. Store-wide totals are unchanged (#4004).
Highlights
- The code pane updates itself. While
@claude-codeor another coding delegate edits a registered project, the Diff tab and the open file refresh on their own. With Follow on, the pane jumps to the file being edited. You no longer click Refresh (#4006, #4007). - Goals visibly finish, and stop when they're done.
- A goal's check now runs while the agent works. When it passes, the goal is marked achieved and the agent closes with a one- or two-sentence summary instead of re-exploring and saying "already complete" again. The check can be a command, a test, CI, data or a plugin; the LLM judge is not used for this.
- Finished goals stay under Recent on the Work ▸ Goals card for 30 minutes: green when achieved, with the reason when stopped.
- The chat shows a live strip that reads "driving · iteration i/n" and then "Goal achieved".
/goal newruns the goal in its own tab and can't double-run a busy one (#4008, #4009, #4012).
- Delegation cards show the work, not the answer. A delegate's reply no longer streams into its card and then again into the chat. The card keeps the tool calls, the plan and the narration between them, for A2A peers and ACP coders alike (#4010).
Fixes
- Claude subscription (
anthropic-oauth): context compaction no longer fails turns with a fake429. If compaction fails, the turn continues uncompacted and retries back off (#4001). - Oversized images: one large screenshot no longer breaks every later turn of a session. Sessions that were already broken work again (#4005).
- Foreground
delegate_totimeouts: a timeout on a peer that is still working hands back a task id you can collect withresume_task_id, instead of reading as failed (#3775). resolve_friction: it finds what the agent logged, says when an entry is already resolved, and accepts a stableid(#4000).@<name>addresses: the peer's reported spend is now billed (#4004).
What's Changed
- fix(fleet): forward the raw proxied path and reject ambiguous encodings by @mabry1985 in #3999
- fix(friction): resolve_friction finds what the agent logged by @mabry1985 in #4000
- fix(anthropic-oauth): identity block on every request (compaction fake-429); compaction failure non-fatal by @mabry1985 in #4001
- fix(delegates): foreground delegate_to timeout hands back a collectable task id (#3775) by @mabry1985 in #4002
- fix(images): clamp images to Anthropic's limits so one screenshot can't poison a session by @mabry1985 in #4005
- feat(code-pane): live updates — Diff tab and open file refresh themselves; Follow tracks delegate edits by @mabry1985 in #4006
- fix(code-pane): stamp never re-hashes touched files; A2A peers can't forge fs.changed (#4006 follow-ups) by @mabry1985 in #4007
- fix(goals): a goal visibly goes green — Recent on the Work card, live goal strip in chat, goal runs stream by @mabry1985 in #4008
- fix(a2a): adopt a2a-sdk 1.2.1 — re-route answers on the new ended-task error (#3950) by @mabry1985 in #4003
- fix(goals): /goal new can't double-run a busy tab; goal events refetch only the list by @mabry1985 in #4009
- fix(delegates): the a2a card shows the peer's work, not its final answer by @mabry1985 in #4010
- fix(telemetry): bill an @-address's peer spend; keep no-model turns out of by_model (#4004) by @mabry1985 in #4011
- fix(a2a): refuse a send whose contextId/taskId sits on params instead of the message by @mabry1985 in #4013
- fix(goals): a goal turn ends when its verifier passes; "Goal set." prints once by @mabry1985 in #4012
Full Changelog: v0.189.0...v0.190.0