Releases · docker/docker-agent · GitHub
Skip to content

Releases: docker/docker-agent

v1.152.0

Choose a tag to compare

@docker-read-write docker-read-write released this 21 Oct 09:17
e7f1ec3

This release delivers significant Claude 5.x support improvements, RAG sharing optimizations, security hardening for the REST API, and history load performance gains.

What's New

  • Adds syntax highlighting for scripts in common shell wrappers, including Python, Node/JavaScript, Ruby, Perl, and shell heredocs in the TUI
  • Adds an explicit Claude 5.x model table covering nine models, replacing name-based guesses for request policy on Anthropic Direct, Vertex, and Bedrock
  • Adds warnings and refusals when Claude 5.x cannot honor thinking_budget none, and rejects final assistant prefill for Claude 5.x
  • Refuses server-side fallback involving Claude 5.x and refuses Claude Mythos 5 on Bedrock (unsupported configurations)
  • Adds versioned, attributed provider raw state (ProviderState gains Version and Model fields) with explicit policy for unreplayable thinking blocks
  • Adds helpers for raw-state replay policy and seals provider state after generated media

Improvements

  • Deduplicates history entries in linear time on load, replacing a quadratic scan-and-splice approach
  • Redacts loaded history messages concurrently across available CPU workers, reducing sequential redaction overhead
  • Shares a single RAG index, file watcher, and embedding concurrency cap across all agents referencing the same RAG definition, eliminating redundant re-indexing
  • Accumulates Bedrock native block text in a strings.Builder instead of copying immutable strings on every delta, fixing quadratic behavior on Bedrock streams

Bug Fixes

  • Fixes OAuth token endpoint auth method: registration now requests client_secret_post unless the server only offers basic or none, and token exchange follows the registered method
  • Fixes OAuth default: omitted token_endpoint_auth_methods_supported and token_endpoint_auth_method now default to client_secret_basic
  • Locks down the REST session API against CSRF and DNS rebinding: rejects cross-origin requests on all methods, validates Host headers on unauthenticated TCP listeners, and requires tokens on non-loopback listeners
  • Fixes Anthropic Haiku 5.x: omits sampling parameters (e.g. temperature) that the model rejects
  • Fixes RAG: skips re-embedding files already indexed by another store, and does not attribute shared background indexing to a session
  • Fixes Bedrock: captures, persists, and replays native Claude reasoning blocks in order; never replays unsigned reasoning blocks
  • Fixes Anthropic: preserves thinking blocks from another provider's raw state
  • Fixes structured output on Claude 5.x: fails correctly without a prefill retry
  • Fixes provider factory: keeps VertexAI out of the factory's dependencies; scopes the Claude 5.x thinking warning to Model Garden and zero budgets
  • Fixes images in tool results: restores typed image attachments after tool replies, handles the explicit-cache path, and preserves following user text on message merge
  • Fixes theme watcher races: ThemeWatcher now uses a blocking, context-owned Run method instead of an internally managed goroutine
  • Fixes transcription: preserves transcripts and errors through dictation finalization; Capturer.Run and Transcriber.Run are now context-owned per run
  • Replaces models removed from the models.dev snapshot

Technical Changes

  • Refreshes the embedded models.dev catalog snapshot (+661 added, -71 removed, ~381 modified)
  • Updates Go to 1.27.3, picking up security fixes

What's Changed

  • fix: lock down REST session API against CSRF and DNS rebinding by @dgageot in #4632
  • perf(history): deduplicate entries in linear time on load by @dgageot in #4633
  • fix(oauth): send the registered token auth method by @locker95 in #4595
  • chore(deps): bump portcullis to v1.1.2 by @dgageot in #4635
  • docs: update CHANGELOG.md for v1.151.0 by @docker-read-write[bot] in #4638
  • perf(history): redact loaded messages concurrently by @dgageot in #4639
  • chore: refresh models.dev snapshot (+661 -71 ~381) by @github-actions[bot] in #4631
  • fix(anthropic): omit sampling params for Haiku 5.x by @locker95 in #4640
  • feat: highlight scripts in common shell wrappers by @rumpl in #4649
  • fix(rag): share one index across agents referencing the same RAG by @aheritier in #4650
  • docs: document TUI shell command syntax highlighting (2026-10-20) by @aheritier in #4662
  • test(runtime): make TestHandleStream_ContextCancellation deterministic by @aheritier in #4648
  • test(teamloader): stop LSP tests from auto-installing gopls by @aheritier in #4647
  • fix: preserve images in tool results by @topabomb in #4661
  • chore: bump direct Go dependencies by @dgageot in #4663
  • fix(claude): explicit Claude 5.x model table for request policy by @aheritier in #4657
  • feat(claude): refuse Claude 5.x fallbacks and Mythos 5 on Bedrock by @aheritier in #4658
  • fix(bedrock): capture and replay native Claude reasoning blocks by @aheritier in #4666
  • perf(bedrock): accumulate native block text in a strings.Builder by @aheritier in #4667
  • test: shrink GitHub archive file-count fixtures by @dgageot in #4670
  • test: disable tool installation when loading examples by @dgageot in #4669
  • feat(provider): versioned raw state and explicit policy for unreplayable thinking by @aheritier in #4668
  • fix: harden context-owned theme watching by @dgageot in #4673
  • refactor: make transcription and capture context-owned per run by @dgageot in #4674
  • test: speed up test fixtures and completion checks by @dgageot in #4675
  • ci: prune unused Go build-cache entries before saving by @dgageot in #4676
  • bump Go to 1.27.3 by @trungutt in #4679

New Contributors

Full Changelog: v1.151.0...v1.152.0

v1.151.0

Choose a tag to compare

@docker-read-write docker-read-write released this 19 Oct 09:23
325db39

This release adds Atlas Cloud and API Route as new provider aliases, introduces live background agent visibility in the sidebar, streaming file previews in the lean TUI, and the Command Code harness type, alongside numerous bug fixes for A2A compatibility, provider cloning, think tool concurrency, and TUI settings.

What's New

  • Adds Atlas Cloud as a built-in OpenAI-compatible provider alias, with automatic ATLASCLOUD_API_KEY discovery and credential forwarding
  • Adds API Route as an OpenAI-compatible provider alias, using https://global.api-route.com/v1 and API_ROUTE_API_KEY
  • Adds command-code harness type, enabling agents to be run by the Command Code CLI (cmd)
  • Shows a live "Background: N running" indicator in the expanded and collapsed Agents sidebar
  • Streams syntax-highlighted file previews in the lean TUI as write_file tool arguments arrive, with filename-based syntax highlighting and plain-text fallback
  • Merges streaming deltas in the API server's SSE streams, coalescing per-provider chunks into larger events

Improvements

  • Shows the command or file path in tool-call titles (e.g., Shell: docker ps -a) instead of just the tool name
  • Redesigns the TUI settings dialog to be responsive, contiguous within sections, with clickable category tabs and stable geometry across category switches

Bug Fixes

  • Fixes race condition in the Think tool when multiple concurrent tool calls append to a shared slice without synchronization
  • Fixes A2A toolset failing to read A2A 1.0 agent cards, which caused no compatible transports found errors when calling agents served by serve a2a
  • Fixes A2A toolset failing to discover agent cards under a base URL that has a path component
  • Fixes A2A toolset panicking on null agent card interfaces instead of rejecting them
  • Fixes A2A toolset not sending configured headers to the endpoint the client selects
  • Fixes think scratchpads being shared across conversations instead of isolated per conversation
  • Fixes provider clones not preserving transport, and surfaces clone failures with actionable errors
  • Fixes routed provider clones not being isolated, and retains thinking-off intent and numeric precision across clones
  • Fixes serving model accounting for routed turns, so only the successful attempt is priced using the serving leaf's catalogue entry
  • Fixes serving metadata and fallback sidebar updates not being preserved across retries
  • Fixes fallback serving model notifications not reaching all UI consumers
  • Fixes runtime decisions delivered before confirmation waits being dropped
  • Fixes context_size: 64000 (bare YAML integer) being ignored in Docker Model Runner configuration
  • Fixes tool-result images being sent incorrectly in chat completions; images are now sent as text (data URI/URL) inside the tool message
  • Fixes canceled input reads leaking goroutines blocked on the underlying read
  • Fixes potential deadlock in gitbranch watcher when replacing pending changes on a full channel
  • Fixes skills not unblocking inherited output pipes on cancellation
  • Fixes skills caching oversized files instead of rejecting them upfront
  • Fixes chat server not finalizing conversations before sending terminal responses
  • Fixes chat server not preserving cached history when execution is canceled
  • Fixes selected agent not being preserved during background usage updates
  • Fixes collapsed sidebar not sizing correctly from the wrapped agent summary
  • Fixes OpenAI requests not being priced by actual service tier (fast/priority/ultrafast premiums now derived per-model from the catalogue)

Technical Changes

  • Enables 11 additional shared rubocop-go lint cops, bringing enforcement to 34 of 36 available cops
  • Drops ContextFirstParameter and NoContextField lint suppressions
  • Decouples attention dialogs, tool expansion, title generation, RAG backend, streaming sender, and command resolution from concrete types via consumer-defined interfaces
  • Adds Lint/ChannelDirection cop to flag unnecessarily bidirectional channel parameters and return values
  • Adds Lint/ChannelStateCheck, Lint/CancellationLoop, and Lint/ClosedChannelLoop cops to detect channel drain races and busy-wait loops
  • Adds cancellation_safe_result_send and nonblocking_channel_replacement lint cops paired with the concurrency fixes
  • Reduces lint runtime by adopting shared rubocop-go execution infrastructure and targeted hot-path optimizations (deduped interface method sets, memoized escaped channel types, cached position keys)
  • Binds OAuth callback ports during startup rather than on demand
  • Shares streaming delta merging logic in pkg/runtime/eventmerge
  • Adds community resources documentation page and relocates operational guides
  • Adds Atelier to community resources

What's Changed

  • docs: update CHANGELOG.md for v1.150.0 by @docker-read-write[bot] in #4563
  • feat: add Atlas Cloud provider by @binyangzhu000-sudo in #3962
  • lint: enable the expanded shared rubocop-go cop catalog by @dgageot in #4564
  • refactor: consumer-owned interfaces for dialogs, tools, and app services by @dgageot in #4565
  • chore(deps): bump docker/docs/.github/workflows/validate-upstream.yml from 1cb9a4d2c65d712da863e30cd3a1319ddeea3298 to 3f5e702096f8f304d5c007fa633d57098506123b in the actions group across 1 directory by @dependabot[bot] in #4574
  • chore: refresh models.dev snapshot (+151 -138 ~264) by @github-actions[bot] in #4573
  • docs: auto-update for merged PRs (2026-10-10) by @aheritier in #4566
  • codingharness: add the command-code harness type by @PremModhaOfficial in #4577
  • fix(think): protect concurrent tool calls with a mutex by @dlanov in #4570
  • docs(claude): distinguish access paths and feature limits by @aheritier in #4586
  • fix(runtime): retain decisions delivered before confirmation waits by @aheritier in #4589
  • docs: auto-update for merged PRs (2026-10-14) by @aheritier in #4591
  • fix: price routed turns using the serving model by @aheritier in #4579
  • fix(provider): preserve transport and surface clone failures by @aheritier in #4587
  • fix: isolate think scratchpads by conversation by @aheritier in #4592
  • fix(dmr): honor a YAML integer context_size by @locker95 in #4596
  • fix(a2a): read A2A 1.0 agent cards in the a2a toolset by @smashingtags in #4572
  • feat: add API Route as an OpenAI-compatible provider alias by @DennyHo0917 in #4567
  • chore: bump direct Go dependencies by @dgageot in #4598
  • fix(tui): clean up the settings dialog by @dgageot in #4599
  • fix(acp): show the command in tool-call titles by @locker95 in #4603
  • lint: detect unnecessarily bidirectional channels by @dgageot in #4604
  • fix: send tool-result images as text in chat completions by @rumpl in #4610
  • feat: show live background agent count in Agents sidebar by @dgageot in #4611
  • fix: concurrency/correctness fixes with matching custom lint cops by @dgageot in #4605
  • test: reuse checked-in CLI fixtures across cases by @dgageot in #4613
  • fix: stabilize flaky tests and chat conversation finalization by @dgageot in #4614
  • lint: detect channel drain races and busy-wait loops by @dgageot in #4612
  • test: run gitbranch watcher stress test in-memory with synctest by @dgageot in #4616
  • docs: auto-update for merged PRs (2026-10-16) by @aheritier in #4606
  • docs: add community resources and keep Community on GitHub Pages by @aheritier in #4618
  • docs: add Atelier to community resources by @rumpl in #4622
  • perf(lint): adopt shared rubocop-go execution and reduce analysis overhead by @dgageot in #4626
  • test: speed up fixtures and isolate flaky test dependencies by @dgageot in #4627
  • docs: auto-update for merged PRs (2026-10-17) by @aheritier in #4623
  • fix: price OpenAI requests by actual service tier by @dgageot in #4625
  • test: make Gemini integration fixtures reviewer-only by @aheritier in #4619
  • feat: stream syntax-highlighted file previews in lean TUI by @rumpl in #4628
  • chore(deps): bump the actions group across 1 directory with 5 updates by @dependabot[bot] in #4630
  • feat(server): merge streaming deltas in the API server's SSE streams by @trungutt in #4634

New Contributors

Read more

v1.150.0

Choose a tag to compare

@docker-read-write docker-read-write released this 09 Oct 11:39
5277e78

This release adds new built-in toolsets, provider support, and agent execution capability reporting, along with several bug fixes for runtime configuration propagation and TUI startup behavior.

What's New

  • Adds DaoXE as a built-in OpenAI-compatible provider alias, authenticated via DAOXE_API_KEY with the api.daoxe.com/v1 base URL
  • Reports program status via OSC 7501 in both TUI and lean mode, allowing terminals and multiplexers to surface agent idle/working/waiting states
  • Exposes agent execution capabilities to callers
  • Adds a datetime built-in toolset for retrieving and formatting the current time
  • Adds a calculator built-in toolset for exact arithmetic
  • Adds a random built-in toolset for agent-chosen integer draws
  • Adds an OpenAI Decisions hook routing example (examples/hook_routing_openai.yaml) using gpt-6-luna as the evaluator

Bug Fixes

  • Fixes manifest-level budgets not being enforced on native runtimes created through the API server
  • Fixes agent limits (memory, SQLite, provider truncation) being silently dropped when resuming an A2A session
  • Moves image support probing to before the TUI claims the terminal, preventing dropped input, screen blink, or startup stalls; also short-circuits the 300 ms timeout on a negative reply
  • Fixes failed or canceled first harness turns to remain resumable
  • Adopts upstream harness streaming fixes for the codex exec --json runner

Technical Changes

  • Refreshes the models.dev catalog snapshot (91 models added, 27 removed, ~130 updated)
  • Decouples YAML node decoding in the OpenAPI package via a nodeDecoder interface to support the libopenapi v0.41.5 upgrade
  • Updates linting configuration to use shared rubocop-go cops, removing locally duplicated detection logic
  • Bumps Go toolchain to 1.27.2 and updates golangci-lint to v2.14.0

What's Changed

  • feat: report program status via OSC 7501 in TUI and lean mode by @dgageot in #4544
  • fix: propagate budgets and execution capabilities across runtimes by @dgageot in #4541
  • chore(lint): update rubocop-go and use shared cops by @dgageot in #4543
  • docs: update CHANGELOG.md for v1.149.0 by @docker-read-write[bot] in #4545
  • fix: probe image support before the TUI takes the terminal by @dgageot in #4546
  • feat: add DaoXE as an OpenAI-compatible provider alias by @seven7763 in #4246
  • chore: refresh models.dev snapshot (+91 -27 ~130) by @github-actions[bot] in #4549
  • fix: adopt upstream harness streaming fixes and preserve failed threads by @dgageot in #4548
  • feat: add datetime, calculator, and random built-in toolsets by @dgageot in #4547
  • docs: add OpenAI Decisions hook routing example by @hamza-jeddad in #4542
  • test: avoid file-backed SQLite in TestBranchSessionClonesSubSession by @dgageot in #4551
  • chore(deps): bump OpenTelemetry to v1.47.0 by @dgageot in #4552
  • test(eval): avoid ETXTBSY in parallel fake-runtime tests by @dgageot in #4556
  • chore(deps): bump libopenapi to v0.41.5 by @dgageot in #4554
  • chore(deps): bump Anthropic SDK to v1.79.1 by @dgageot in #4558
  • chore: bump Go to 1.27.2 by @dgageot in #4562

New Contributors

Full Changelog: v1.149.0...v1.150.0

v1.149.0

Choose a tag to compare

@docker-read-write docker-read-write released this 07 Oct 14:55
bf4169c

This release adds GitHub repository skill loading, evaluator routing through the models gateway, and several model pricing and capability fixes, along with TUI stability improvements and expanded debug tool hook support.

What's New

  • Adds support for loading skills from public GitHub repositories via https://github.com/owner/repo URLs in skills: entries
  • Runs tool_input_transform and post_tool_use hooks on debug tool calls, completing the full hook pipeline for docker agent debug tool
  • Adds an evaluator judge backend, enabling a dedicated evaluator service as an alternative to the LLM-as-judge path
  • Routes evaluators through the models gateway by default and adds OpenAI Decisions as a native evaluator backend
  • Prices OpenAI fast, priority, and ultrafast service tiers based on the tier actually served in the response rather than the requested tier
  • Adds a Nativ provider guide covering setup, authentication, and API support for the local Apple Silicon inference server

Bug Fixes

  • Fixes ChatGPT models incorrectly treated as text-only by inferring image input capability from the matching OpenAI catalogue entry when no direct ChatGPT entry exists
  • Fixes provider IDs (fireworks-ai, togetherai, moonshotai, opencode) to align with canonical models.dev catalogue IDs, preserving legacy IDs as aliases
  • Fixes custom and gateway provider filters being dropped when resolving model providers
  • Fixes fast/priority and ultrafast service-tier cost multipliers falling back to standard rates when base_url is explicitly set to the official OpenAI endpoint
  • Fixes redundant full re-renders triggered by token usage events when the sidebar is hidden in the TUI
  • Fixes the lean TUI working indicator to remain above the input with a permanent separator, replacing inline spinners with static markers to avoid redraws on every tick

Technical Changes

  • Separates loader defaults from runtime registration so building loader options no longer mutates process-wide runtime state as a side effect
  • Centralizes loaded runtime configuration assembly and narrows the chatserver runtime contract
  • Runs tool_response_transform hooks on debug tool output (previously missing from the debug tool path)
  • Updates documentation for the defuse loop termination argument to reflect the correct invariant
  • Stabilizes the debug-tool test on Windows by removing a flaky native shell dependency from the affected test case

What's Changed

  • chore(deps): bump the actions group across 1 directory with 4 updates by @dependabot[bot] in #4510
  • feat: run tool_input_transform and post_tool_use hooks on debug tool calls by @dgageot in #4518
  • docs: update CHANGELOG.md for v1.148.0 by @docker-read-write[bot] in #4519
  • docs(attachment): state the real termination argument for the defuse loop by @PerryLink in #4372
  • fix(tui): avoid redundant frames for hidden-sidebar usage updates by @dgageot in #4523
  • fix: stabilize debug-tool test against windows shell flake by @dgageot in #4524
  • test(runtime): isolate client fixtures on private HTTP transports by @aheritier in #4526
  • test(eval): avoid writing executable runtimes during parallel tests by @aheritier in #4527
  • fix(chatgpt): infer image input from OpenAI catalogue by @aheritier in #4528
  • feat(eval): add evaluator judge backend by @dgageot in #4531
  • feat(skills): load skills from public GitHub repositories by @dgageot in #4525
  • feat: price OpenAI fast/priority and ultrafast by actual service tier by @dgageot in #4532
  • refactor: separate loader defaults, bootstrap runtime opts, narrow chatserver contract by @dgageot in #4533
  • fix(models): align provider IDs with the catalogue by @aheritier in #4530
  • docs: add Nativ provider guide by @dgageot in #4534
  • feat: route evaluators through the models gateway, add OpenAI Decisions by @dgageot in #4537
  • fix: keep lean TUI working indicator above the input by @rumpl in #4538
  • fix: honor configured OpenAI base_url when pricing fast tiers by @dgageot in #4536

New Contributors

Full Changelog: v1.148.0...v1.149.0

v1.148.0

Choose a tag to compare

@docker-read-write docker-read-write released this 05 Oct 10:22
8df8d95

This release fixes two issues: oversized tool output handling and duplicate line rendering in the lean TUI.

Bug Fixes

  • Fixes oversized tool results from blocking chat or compaction requests by bounding complete tool results to 50 KiB and sanitizing historical tool results on outgoing requests
  • Fixes duplicate lines appearing while streaming wrapped text in the lean TUI by avoiding replay of archived lines when markdown changes only affect ANSI formatting

What's Changed

  • fix: bound tool results and recover oversized session history by @melmennaoui in #4515
  • fix(leantui): avoid duplicate lines while streaming wrapped text by @rumpl in #4503
  • docs: update CHANGELOG.md for v1.147.0 by @docker-read-write[bot] in #4517

Full Changelog: v1.147.0...v1.148.0

v1.147.0

Choose a tag to compare

@docker-read-write docker-read-write released this 05 Oct 09:06
044b98e

This release adds hook-driven agent routing, a lean TUI settings panel, codemode tool call visibility, and several new CLI and eval capabilities, alongside a broad set of bug fixes for assistant message handling, DMR routing, and TUI rendering.

What's New

  • Adds a /settings command to the lean TUI with an inline settings panel supporting keyboard navigation, save/cancel, and persistence of preferences
  • Adds hook-driven agent routing with a routing block (allowed_agents, default_agent) and new before_agent_run/after_agent_complete hook events
  • Adds native JSON field selection (transform_json) as a builtin hook for trimming tool response payloads
  • Adds a debug tool command (docker agent debug tool <config> <tool> [JSON params]) to call tools directly outside of any LLM loop
  • Adds --last flag to docker agent run --exec to print only the final answer, buffering intermediate output
  • Adds max_output_bytes field to the openapi toolset to cap response text size (omitting it keeps the 30,000-byte default; 0 disables the cutoff)
  • Adds SessionRecovered event for idle recovery boundaries in the runtime
  • Exposes codemode tool calls and highlights scripts in TUIs, emitting standard tool-call, streamed-output, and response events for tools invoked inside Code Mode
  • Returns promises from codemode tool calls, supporting concurrent execution, Promise.all, Promise.allSettled, and top-level await
  • Supports DOCKER_AGENT_DATA_DIR environment variable for setting the data directory
  • Adds repeat stability and cost outlier reporting to eval runs with --repeat > 1
  • Adds --flavor support and structured tool output capture to docker agent eval

Improvements

  • Lean TUI unmatched slash queries now fall back to model selection instead of dismissing the menu, supporting multi-term queries like /openai astra
  • Prompt history now follows --data-dir (including ~ expansion) and forwards the setting to the sandbox
  • Eval judge model default updated to openai/gpt-5.6-terra

Bug Fixes

  • Fixes DMR commands routing through the selected Docker connection (context/host/config/TLS) instead of falling back to a hardcoded local socket
  • Fixes DMR transport errors to include the name of the selected Docker connection (--host, --context, etc.)
  • Fixes assistant messages being dropped across TUIs, remote sessions, and recovery
  • Fixes tool-call XML leaking into canonical and reloaded assistant text
  • Fixes generated media losing stable identity on redraw in the TUI
  • Fixes remote session history loss across idle recovery, OAuth elicitation, and snapshots taken mid-turn
  • Fixes lean TUI tool updates duplicating content in terminal scrollback
  • Fixes lean TUI replaying the full offscreen suffix on every redraw
  • Fixes tool argument declaration order not being preserved in generated schemas
  • Fixes reasoning and response output running together in exec text mode — a blank line is now inserted between them
  • Fixes eval containers picking up a stale local agent image digest instead of the most recently built one
  • Fixes --data-dir not expanding ~ and not forwarding the path to the sandbox
  • Clarifies /speak transcription requirements: requires OPENAI_API_KEY and does not work with the Docker models gateway

Technical Changes

  • Removes flaky TestTmuxVisibilityLifecycle tmux integration test

What's Changed

  • chore: refresh models.dev snapshot (+38 -14 ~95) by @github-actions[bot] in #4482
  • chore: refresh models.dev snapshot (+30 -14 ~39) by @github-actions[bot] in #4483
  • feat: add settings command to lean TUI by @rumpl in #4484
  • fix: route DMR through the selected Docker connection safely by @dgageot in #4481
  • feat: return promises from codemode tool calls by @rumpl in #4487
  • test(tui): remove flaky tmux visibility lifecycle test by @rumpl in #4488
  • docs: auto-update for merged PRs (2026-10-01) by @aheritier in #4489
  • fix: name selected Docker connection in DMR transport errors by @dgageot in #4491
  • feat(openapi): add max_output_bytes to cap response text size by @dgageot in #4490
  • feat: add debug tool command to call tools directly by @dgageot in #4492
  • fix: stop dropping assistant turns across TUIs, remote sessions and recovery by @dgageot in #4493
  • feat: expose codemode tool calls and highlight scripts in TUIs by @rumpl in #4494
  • feat: honor --data-dir for prompt history and sandbox forwarding by @dgageot in #4496
  • feat: add hook-driven agent routing by @hamza-jeddad in #4495
  • fix: clarify speech input requirements by @aheritier in #4498
  • feat(eval): forward --flavor overrides and record structured tool output by @dgageot in #4499
  • feat(eval): report repeat stability and cost outliers by @dgageot in #4500
  • docs: auto-update for merged PRs (2026-10-03) by @aheritier in #4502
  • fix: prevent lean TUI tool updates from duplicating scrollback by @rumpl in #4501
  • fix(eval): pin local agent image digest when building containers by @dgageot in #4506
  • fix(leantui): switch unmatched slash queries to model selection by @rumpl in #4507
  • chore: refresh models.dev snapshot (+132 -38 ~155) by @github-actions[bot] in #4511
  • feat: add --last flag for exec to print only the final answer by @dgageot in #4504
  • feat(hooks): add transform_json builtin for field selection by @dgageot in #4505
  • fix: preserve tool argument declaration order by @rumpl in #4508
  • fix(cli): separate reasoning from response in exec text mode by @dgageot in #4513
  • eval: default judge model to openai/gpt-5.6-terra by @dgageot in #4514
  • docs: auto-update for merged PRs (2026-10-05) by @aheritier in #4509

Full Changelog: v1.146.0...v1.147.0

v1.145.0

Choose a tag to compare

@docker-read-write docker-read-write released this 28 Sep 07:00
502549c

This release adds ACP request trace propagation, new lint cops for code quality, and a fix for lean TUI scrollback preservation during partial tool calls.

What's New

  • Adds ACP request trace propagation using W3C traceparent/tracestate headers, with server spans for each of the 13 implemented agent protocol handlers
  • Adds Lint/FieldsSeqLookup cop to detect strings.Fields lookup patterns that could use strings.FieldsSeq instead
  • Adds Lint/SlicesConcat cop to flag nested append chains that could be replaced with slices.Concat

Bug Fixes

  • Fixes lean TUI scrollback being lost during partial tool calls by repainting only visible rows when a streaming tool call changes above the viewport

Technical Changes

  • Replaces multi-source append chains with slices.Concat across the codebase
  • Warms Linux and Windows Go build caches on main when tests are skipped

What's Changed

  • feat(acp): propagate request traces and test capability matrix by @dgageot in #4471
  • feat(lint): detect strings.FieldsSeq lookup opportunities by @dgageot in #4456
  • ci: warm Linux/Windows build caches when tests are skipped on main by @dgageot in #4473
  • test(tui): fix startup resize race in hidden-frame tests by @dgageot in #4474
  • docs: update CHANGELOG.md for v1.144.0 by @docker-read-write[bot] in #4472
  • refactor: replace append chains with slices.Concat by @dgageot in #4461
  • fix: preserve lean TUI scrollback during partial tool calls by @rumpl in #4477
  • chore(deps): bump the actions group across 2 directories with 6 updates by @dependabot[bot] in #4478

Full Changelog: v1.144.0...v1.145.0

v1.144.0

Choose a tag to compare

@docker-read-write docker-read-write released this 25 Sep 14:50
3873760

This release expands ACP v1 compatibility with session management, audio prompts, client terminals, remote MCP servers, and host credential authentication, while also closing several sandbox and filesystem confinement gaps and improving TUI rendering performance.

What's New

  • Adds ACP session deletion after draining owned work, with sessionCapabilities.delete support
  • Adds ACP elicitation bridge supporting negotiated form and URL elicitation capabilities
  • Adds ACP session model reasoning and safety options, including session/set_config_option and legacy session/set_mode
  • Adds ACP shell tool execution through client terminals via terminal/create and related wire methods
  • Adds ACP support for client-supplied Streamable HTTP and legacy SSE MCP servers in session/new, session/resume, and session/load
  • Adds ACP host credential authentication and connection-local logout
  • Adds ACP audio prompt support and bounded history replay
  • Adds ACP message identity persistence and tool name exposure
  • Adds sandbox cloud mode (--cloud) and v3 kit support for running sandboxes without a local Docker dependency
  • Adds evaluator support for exact endpoints on compatible services via an optional endpoint field in EvaluatorConfig
  • Adds Lint/CutPrefix cop to detect HasPrefix+TrimPrefix patterns that should use strings.CutPrefix
  • Adds Lint/CutSuffix cop to detect HasSuffix+TrimSuffix patterns that should use strings.CutSuffix
  • Adds Lint/SlicesClone cop to detect manual slice-copy idioms that should use slices.Clone
  • Adds Lint/SortStableFunc cop to detect sort.SliceStable calls that should use slices.SortStableFunc
  • Adds additional lint cops: Lint/SplitTrimJoin, Lint/NewExpr, Lint/FieldsSeq, and detectors for AWS scalar pointer helpers, paired reflection field loops, stdlib UUID string opportunities, equivalent manual URL clones, buffered JSON newline workarounds, and simple benchmark loop modernization

Improvements

  • Streams bang command progress in TUIs, running commands asynchronously and emitting lifecycle/output events in both lean and full TUIs
  • Replaces tmux focus-events heuristic with an async poll that checks real pane visibility, so only hidden panes pause rendering
  • Keeps tmux chooser previews rendering continuously
  • Reuses chat pane formatting while scrolling the sidebar, avoiding redundant re-formatting on unchanged message content
  • Migrates sort.SliceStable usages to slices.SortStableFunc in model picker, lean TUI, and deferred search ranking
  • Migrates manual slice-copy idioms to slices.Clone across the codebase
  • Migrates HasPrefix+TrimPrefix and HasSuffix+TrimSuffix patterns to strings.CutPrefix/strings.CutSuffix across multiple packages

Bug Fixes

  • Fixes none reasoning effort being ignored on GPT-6 Sol/Luna models, which caused silent fallback to "low" effort
  • Fixes skill supporting-file reads to be confined to the skill directory using os.OpenRoot, preventing symlink escapes
  • Fixes filesystem path policies to reject dangling symlinks
  • Fixes prompt file staging to be confined to the kit directory
  • Fixes sandbox skill staging reads to be anchored to the source root
  • Fixes tool extraction to use os.Root confinement, closing a symlink-swap gap during archive extraction
  • Fixes forked skill output and session IDs from bleeding across message groups by keying batching on session ID in addition to agent name
  • Fixes active segment offset going stale when an earlier message resizes while scrolled up, preventing clipped transcript rendering

Technical Changes

  • Refactors TUI command contracts, tool confirmation dialogs, and tool renderer registry to be dependency-light and reusable
  • Enables errorsastype and reflecttypeassert lint modernization checks
  • Switches to shared cops from rubocop-go v1.0.0, removing duplicate local implementations

What's Changed

  • fix: stream bang command progress in TUIs by @rumpl in #4423
  • fix(tui): pause rendering only for hidden tmux panes by @dgageot in #4429
  • feat(acp): delete sessions after draining owned work by @dgageot in #4431
  • docs: update CHANGELOG.md for v1.143.0 by @docker-read-write[bot] in #4430
  • feat(lint): enforce recent Go modernization patterns by @dgageot in #4433
  • test: make timer coverage deterministic with synctest by @dgageot in #4436
  • test(httpclient): use in-memory HTTP for SSE filter tests by @dgageot in #4437
  • fix(skills): confine supporting-file reads to the skill directory by @dgageot in #4438
  • feat(acp): bridge negotiated form and URL elicitation by @dgageot in #4434
  • fix: support none reasoning effort on GPT-6 Sol/Luna by @dgageot in #4435
  • test(tui): wait for shell completion in bang command tests by @dgageot in #4439
  • chore(deps): bump charm.land/bubbletea/v2 v2.0.9→v2.0.10 by @dgageot in #4442
  • chore(deps): bump github.com/docker/cli to v29.8.1 by @dgageot in #4443
  • test: speed up slow test suites with deterministic waits by @dgageot in #4444
  • feat(acp): expose session model reasoning and safety options by @dgageot in #4445
  • feat(evaluators): support exact endpoints for compatible services by @dgageot in #4432
  • test: make board heartbeat checks deterministic by @dgageot in #4447
  • feat(acp): execute shell tools through client terminals by @dgageot in #4448
  • fix: confine tool extraction with os.Root by @dgageot in #4446
  • docs: auto-update for merged PRs (2026-09-25) by @aheritier in #4449
  • feat(acp): support client-supplied HTTP and SSE MCP servers by @dgageot in #4450
  • fix: stop forked skill output from bleeding across message groups by @dgageot in #4451
  • feat(acp): add host credential authentication and connection logout by @dgageot in #4452
  • fix: close filesystem and sandbox kit confinement gaps by @dgageot in #4440
  • chore(lint): use shared cops from rubocop-go v1.0.0 by @dgageot in #4441
  • fix: keep active segment offset in sync when earlier item resizes by @dgageot in #4454
  • test: synchronize askpass helper cancellation test by @dgageot in #4459
  • lint: add SlicesClone cop and migrate manual slice-copy idioms by @dgageot in #4462
  • test: fix encrypt mode timestamp flake by @dgageot in #4457
  • feat(acp): support audio prompts and bounded history replay by @dgageot in #4464
  • chore(deps): bump AWS SDK v2 direct dependencies by @dgageot in #4466
  • lint: add SortStableFunc cop for sort.SliceStable migrations by @dgageot in #4460
  • feat(sandbox): add cloud mode and v3 kit support by @dgageot in #4465
  • feat(lint): detect strings.CutPrefix opportunities by @dgageot in #4455
  • feat(acp): persist message identities and expose tool names by @dgageot in #4468
  • perf(tui): reuse chat pane formatting while scrolling sidebar by @dgageot in #4469
  • refactor(tui): make reusable components dependency-light by @dgageot in #4470
  • feat(lint): add CutSuffix cop and fix its findings by @dgageot in #4458

Full Changelog: v1.143.0...v1.144.0

v1.143.0

Choose a tag to compare

@docker-read-write docker-read-write released this 24 Sep 12:22
d27c65c

This release delivers a large set of ACP (Agent Control Protocol) compatibility improvements, new evaluator and provider features, and significant TUI stability fixes, alongside broad test modernization using Go's synctest framework.

What's New

  • Adds session/load ACP endpoint that reconnects to a session and replays persisted history before returning the load response
  • Adds support for client-supplied stdio MCP servers in ACP session/new and session/resume, with eager initialization and per-session ownership
  • Adds provider-backed evaluators with TypeSafe Jev support, wiring named evaluators into the hook system
  • Tracks evaluator token usage and cost across sessions, budgets, and the cost dialog
  • Adds provider_opts.extra_body passthrough for Chat Completions, enabling vendor-specific fields (e.g., reasoning_effort, enable_thinking) to be forwarded to backends
  • Implements ACP slash commands /compact, /usage, and /new with real dispatch under session turn admission and cancellation handling
  • Adds skill_content_guard and prompt_file_guard hook events for operator-controlled interception of skill content and prompt file loading
  • Adds custom lint rules detecting split-trim-join suffix loops, temporary pointer returns with new expressions, and fields slices used only for iteration

Improvements

  • Keeps the TUI composing frames and running animation ticks when the terminal is unfocused or in an inactive tmux pane; removes the tmux startup focus probe and deferred-render behavior
  • Trims textarea padding using strings.CutLast in the TUI for faster word wrapping
  • Iterates wrapped and dialog words in the TUI without allocating a fields slice

Bug Fixes

  • Fixes ACP "Allow and remember my choice" scoping so approval is remembered only for the selected tool, not the entire session
  • Fixes ACP iteration-limit permission handler to require an exact continue selection, rejecting unknown, empty, or wrong-case option IDs
  • Fixes stale scrollbar state causing the conversation view to jump to incorrect positions on mouse release
  • Fixes ACP to load a fresh team and provider registry per session, so workspace-rooted toolsets resolve paths against the correct session workspace
  • Fixes ACP to enforce filesystem policies and post-edit hooks before read/write/edit RPCs, and to reject dangling symlinks
  • Fixes ACP resume to validate workspace identity with os.SameFile and replace additional roots correctly without rewriting persisted workspace provenance
  • Fixes ACP session close to drain foreground turns, runtime cleanup, and toolset shutdown before acknowledging close, preventing races with resume
  • Fixes ACP to decline unsupported elicitation requests immediately rather than waiting indefinitely
  • Fixes ACP to report accurate prompt outcomes (end_turn, max_tokens, refusal, max_turn_requests, error) instead of always returning end_turn
  • Fixes ACP to filter and paginate session/list results (max 50 per page, ordered by creation time), honoring optional cwd filters and keyset cursors
  • Fixes ACP to capture accurate edit diffs from full client-read content and to resolve tool locations to absolute paths
  • Fixes ACP tool-call lifecycle reporting to track each tool with a stable ACP ID through pending, in_progress, and completion states
  • Fixes ACP to honor client filesystem capabilities during tool discovery and to read client-provided content in read_multiple_files
  • Fixes ACP to preserve prompt attachments (embedded text, blobs, images, file links) and decode file URIs only once
  • Fixes ACP multi-agent cost tracking to accumulate costs by runtime session ID rather than replacing root-session display with child costs
  • Fixes ACP to emit empty plan snapshots so clients clear stale plans when the todo list is emptied
  • Fixes GOOGLE_GENAI_USE_VERTEXAI to be parsed as a boolean, so setting it to false or 0 correctly disables Vertex AI routing
  • Fixes TUI goroutine leaks when sessions close (throttler and fan-out goroutines now stop with the app context)
  • Fixes TUI to reconcile transcript geometry before scroll-state clamping, preventing the conversation view from jumping during background updates
  • Fixes ACP to preserve parallel tool batches when replaying evaluator events
  • Fixes ACP to validate and fully account evaluator request usage
  • Fixes runtime to preserve tool callback scope during manual compaction
  • Fixes SkillContent type placement to break a tools→skills→httpclient→desktop import cycle

Technical Changes

  • Refreshes the models.dev catalog snapshot embedded in the binary (multiple updates)
  • Marks models.dev snapshot files as linguist-generated in .gitattributes to collapse diffs on GitHub
  • Migrates UUID generation and parsing to Go 1.27 stdlib uuid package, removing the github.com/google/uuid dependency from the common path
  • Adopts errors.AsType generic helper across 34 call sites, replacing the var target *Type; errors.As pattern
  • Adopts sync.WaitGroup.Go in the scheduler and test workers
  • Adopts reflect.Value.Fields for hook field iteration and reflect.TypeAssert in TUI test helpers
  • Replaces Bedrock AWS pointer helpers (aws.String, aws.Int32, aws.Float32) with Go 1.26 new(expr)
  • Replaces manual URL struct copy in EgressProxyFromContext with url.URL.Clone
  • Simplifies JSON tool result encoding using encoding/json/v2
  • Converts a large number of concurrency-heavy tests across the codebase to use Go's synctest framework for deterministic timing
  • Stores TUI frame dumps in test artifact directories via testing.TB.ArtifactDir()
  • Reverts OpenAI SDK bump pending license approval

What's Changed

  • docs: update CHANGELOG.md for v1.142.0 by @docker-read-write[bot] in #4370
  • chore: refresh models.dev snapshot (+262 -186 ~399) by @github-actions[bot] in #4369
  • chore(deps): bump the actions group across 1 directory with 2 updates by @dependabot[bot] in #4368
  • chore: mark models.dev snapshot files as generated in .gitattributes by @aheritier in #4371
  • feat: add skill_content_guard and prompt_file_guard hook events by @dgageot in #4373
  • fix(acp): scope remembered approval to the selected tool by @dgageot in #4376
  • chore(deps): bump Go dependencies (anthropic, openai, goja, libopenapi, doublestar, smithy-go, x/tools) by @dgageot in #4374
  • fix(acp): reject unknown iteration-limit permission choices by @dgageot in #4377
  • fix(tui): prevent stale scrollbar state from jumping the conversation by @dgageot in #4378
  • fix(acp): load workspace-rooted teams per session by @dgageot in #4379
  • fix(acp): enforce filesystem policies and post-edit hooks by @dgageot in #4380
  • fix(acp): validate resume workspaces and replace additional roots by @dgageot in #4381
  • feat: add provider-backed evaluators with TypeSafe Jev by @dgageot in #4375
  • chore(deps): bump portcullis v1.0.0→v1.1.0 and libopenapi v0.39.0→v0.39.1 by @dgageot in #4382
  • fix(acp): synchronize session close and shutdown by @dgageot in #4383
  • fix(acp): decline unsupported elicitation requests by @dgageot in #4385
  • feat(acp): support client-supplied stdio MCP servers by @dgageot in #4386
  • feat: track evaluator usage and cost across sessions and budgets by @dgageot in #4387
  • fix(acp): report accurate prompt outcomes and structured errors by @dgageot in #4388
  • chore: refresh models.dev snapshot (+247 -54 ~151) by @github-actions[bot] in #4389
  • fix(acp): filter and paginate session listings by @dgageot in #4390
  • chore: refresh models.dev snapshot (+58 -0 ~74) by @github-actions[bot] in #4392
  • feat(acp): implement supported slash commands by @dgageot in #4391
  • fix(acp): capture accurate edit diffs and absolute tool locations by @dgageot in #4393
  • fix(acp): report consistent tool-call lifecycles by @dgageot in #4394
  • fix: treat GOOGLE_GENAI_USE_VERTEXAI as a boolean by @dgageot in #4395
  • fix(acp): honor client filesystem capabilities and batch reads by @dgageot in #4396
  • feat(providers): add provider_opts.extra_body passthrough for Chat Completions by @dgageot in #4397
  • test: stabilize failed-turn conversation cache coverage by @dgageot in #4398
  • refactor(httpclient): use URL.Clone for egress proxy URLs by @dgageot in #4399
  • test(wire): use in-memory HTTP test servers by @dgageot in #4403
  • refactor: simplify JSON tool result encoding by @dgageot in #4402
  • refactor: migrate UUID generation and parsing to Go 1.27 stdlib by @dgageot in #4404
  • test: remove environment and timing dependencies from flaky tests by @dgageot in https://github.com/docker...
Read more

v1.142.0

Choose a tag to compare

@docker-read-write docker-read-write released this 21 Sep 08:09
99bdcf8

This release adds several new features including background agent synchronization, native Anthropic compaction, expanded Gemini capabilities, OpenAI provider options, and a WebAssembly shared runtime, alongside numerous bug fixes for token accounting, streaming usage, and cost tracking.

What's New

  • Adds wait_background_agents tool that performs an all-settled join on a caller-supplied list of task IDs, waiting up to a configurable timeout and returning an ordered result array
  • Adds native Anthropic conversation compaction with replay guards and prefix mismatch controls, opt-in progress updates, strict tool argument enforcement, cache diagnostics, and request-context secret redaction
  • Adds cache_diagnostics, preserve_reasoning, and native_tool_search provider opts for OpenAI's Responses API
  • Adds native Gemini text embeddings support, enabling RAG use-cases on Gemini via the dedicated embeddings API
  • Adds support for Gemini service tiers via provider_opts.service_tier, including flex tier with extended idle timeout handling
  • Adds support for Gemini URL Context via provider_opts.url_context: true, allowing the model to fetch and reason over public URLs at inference time
  • Adds Docker Model Runner model metadata and context limit discovery via the /engines/_configure endpoint, enabling auto-compaction and context gauge support for DMR models
  • Replaces the WebAssembly bespoke event loop with the shared embeddedchat-backed agent runtime, adding portable tools, in-memory storage, egress proxy, session-scoped MCP OAuth token stores, and opt-in cloud provider builds

Improvements

  • Defers TUI frame composition while the terminal is blurred, avoiding unnecessary rendering work during unfocused sessions

Bug Fixes

  • Fixes deferred tail buffer not being cleared when a different assistant message becomes the active owner, preventing old content from bleeding into new message output
  • Fixes Gemini native tool-call IDs being stripped instead of preserved, and fixes tool-response name matching to prevent malformed conversation history
  • Fixes Gemini native tool-call ProviderID not being preserved in the WASM accumulator
  • Fixes session compaction not drawing from the session's cost or token budgets, allowing spend beyond configured ceilings
  • Fixes TUI animations continuing to run in unfocused and detached (tmux) sessions
  • Fixes empty, refused, or reasoning-only assistant responses being skipped even when the provider reported billable usage
  • Fixes OpenAI WebSocket pool allowing a single idle connection to be shared across concurrent streaming requests, which could corrupt both responses
  • Fixes concurrent map and slice access on session model-state fields (AgentModelOverrides, CustomModelsUsed) causing data races
  • Fixes unsafe concurrent Close and Next/retry calls on WebSocket and Anthropic streams
  • Fixes runtime streams being abandoned before fully drained, which could release streaming locks or turn tokens prematurely
  • Fixes cache tokens not being counted toward max_tokens token budgets; previously only input+output tokens were counted, allowing cache-heavy calls to bypass configured limits
  • Fixes Gemini tool-use input tokens (ToolUsePromptTokenCount) being dropped, understating token usage and cost
  • Fixes Anthropic streaming input token counts and cache read/write metrics being dropped because they were read from message_delta instead of the accumulated usage object
  • Fixes per-call telemetry costs being reported incorrectly; previously cumulative session cost was emitted before the current call was charged
  • Fixes context limits not being bounded before narrowing to int in the runtime
  • Fixes deferral state not being preserved across session reloads for tools
  • Fixes Bedrock SDK bearer authentication scheme configuration
  • Fixes concurrent indexing usage accounting in RAG

Technical Changes

  • Refactors external reference name and config import suffix parsing to use strings.CutLast
  • Simplifies test sleep-and-wait pairs using Go 1.27's synctest.Sleep
  • Simplifies composite literals in runtime and config packages using Go 1.27 promoted fields
  • Adds Lint/ExclusiveStreamLease analyzer to detect shared WebSocket stream leases
  • Adds Lint/SessionStateAccessors cop to require session model-state accessors
  • Adds Lint/StreamCloseSafety cop to detect unsafe stream close access
  • Adds lint detection for abandoned runtime streams
  • Consolidates and deduplicates documentation across custom commands, thinking/task budgets, provider credentials, MCP configuration, server CLI flags, generated media, provider inheritance examples, and tool concepts

What's Changed

  • refactor: parse reference names and import suffixes with strings.CutLast by @dgageot in #4325
  • test: simplify sleep-and-wait pairs with synctest.Sleep by @dgageot in #4323
  • refactor: simplify literals with Go 1.27 promoted fields by @dgageot in #4324
  • docs: update CHANGELOG.md for v1.141.0 by @docker-read-write[bot] in #4326
  • chore(deps): bump openai-go/v3 to v3.61.0 by @dgageot in #4327
  • fix: preserve final TUI responses across deferred message transitions by @dgageot in #4328
  • feat: add wait_background_agents join tool by @dgageot in #4330
  • docs: consolidate custom command documentation by @dgageot in #4331
  • docs: consolidate thinking and task budget references by @dgageot in #4332
  • docs: centralize provider credential reference by @dgageot in #4333
  • docs: separate MCP and shared tool configuration references by @dgageot in #4334
  • fix(gemini): preserve native tool-call IDs and fix tool-response matching by @dgageot in #4339
  • docs: centralize server CLI flag tables by @dgageot in #4335
  • docs: consolidate generated media documentation by @dgageot in #4336
  • docs: reuse provider inheritance examples by @dgageot in #4337
  • docs: link tool concepts to the canonical catalog by @dgageot in #4338
  • fix: charge compaction to shared session budgets by @dgageot in #4343
  • feat(dmr): discover model metadata and context limits by @dgageot in #4340
  • feat(openai): add cache_diagnostics, preserve_reasoning, and native_tool_search provider opts by @dgageot in #4355
  • fix: report per-call costs in telemetry by @dgageot in #4341
  • feat: support native Gemini text embeddings by @dgageot in #4350
  • feat(anthropic): native compaction, progress updates, strict tools, cache diagnostics, and secret redaction by @dgageot in #4354
  • feat: support Gemini service tiers by @dgageot in #4348
  • fix(app): guard session model state with an accessor cop by @dgageot in #4347
  • fix(tui): pause animations in unfocused and detached sessions by @dgageot in #4344
  • fix(runtime): retain costs for empty assistant responses by @dgageot in #4345
  • feat: support Gemini URL Context by @dgageot in #4349
  • perf(tui): defer frame composition while blurred by @dgageot in #4342
  • fix(openai): lease WebSocket connections exclusively by @dgageot in #4346
  • fix: account for Gemini tool-use input tokens by @dgageot in #4359
  • fix(runtime): count cache tokens toward token budgets by @dgageot in #4358
  • fix: preserve Anthropic streaming input and cache usage by @dgageot in #4360
  • test(tui): fix ordering race in TestThemeWatcher_WatchUserTheme by @aheritier in #4305
  • fix: drain runtime streams before releasing turn ownership by @dgageot in #4353
  • chore(deps): bump anyio from 4.9.0 to 4.14.2 in /examples/dhi/dhi_mcp_server in the pip group across 1 directory by @dependabot[bot] in #4361
  • docs: auto-update for merged PRs (2026-09-19) by @aheritier in #4362
  • feat(wasm): shared runtime, portable tools, in-memory storage, egress proxy, and cloud provider builds by @dgageot in #4357
  • docs: auto-update for merged PRs (2026-09-21) by @aheritier in #4367

Full Changelog: v1.141.0...v1.142.0