Repository navigation
v2.2.0
·
78 commits
to main
since this release
Summary
- Source Cache for Cluster Workspaces — Cluster daemons can start workspace clones from Git bundles in an S3-compatible object store and write updated bundles back, with usage accounting, cleanup, and metrics. It is off by default and changes nothing until a bucket is configured.
- Code-Host Feedback on GitLab and Gitea — Review and CI feedback on GitLab merge requests and Gitea pull requests can now resume the session that opened them, as GitHub already does.
- Unified Approvals — Console, Slack channel, and approval-DM cards now settle approvals through one path. From the console, editors can allow a managed-memory write for the whole session.
- Multi-Agent Conversations — Continue a hook conversation that several agents worked on, and @mention the agents you want to reply.
- Console Updates — Download files uploaded to or written by a session, use a navigation drawer on phones, and see recovering daemons marked as Reconnecting. Members of a daemon group that share one PostgreSQL store can now resume each other's sessions.
- Operations — The Helm chart runs database migrations in a pre-upgrade Job and offers an optional Control Plane PodDisruptionBudget. Repository grants are re-checked on a schedule, and grants whose attesting member lost access are marked stale.
This release also improves reliability across Control Plane restarts and handoffs, adds a Slack welcome for the built-in agent, and upgrades the bundled Logto in Docker Compose to 1.44.0.
Behavior change: Syncing an agent's workspace now requires edit access. A channel's shared session can no longer be made private by one participant. The chart refuses to render more than one Control Plane replica. Slack installs no longer request the unused team:read, users:read.email, search:read.files, and search:read.users scopes.
Upgrade note: Helm now waits for the migration Job during install and upgrade, so a release with a long migration may need a longer --timeout.
Features
- chart: migrate in a hook Job and offer a Control Plane PDB (#2742) (9b0f234)
- codehost: resume author sessions on GitLab and Gitea feedback (#2704) (519eca5)
- console: download uploaded and agent-authored session files (#2748) (cbdde2a)
- console: replace the mobile tab bar with a navigation drawer (#2751) (918b9de)
- control-plane: re-attest repository grants on a schedule (#2747) (30a522e)
- control-plane: reap consumed and expired OAuth rows (#2744) (74c7db2)
- daemon: account for Source Cache objects in the data-plane store (#2787) (bd836f8), closes #2732
- daemon: configure the Source Cache and presign its object URLs on pool members (#2786) (ef13583), closes #2732
- daemon: export Source Cache metrics through the daemon's meter (#2795) (74fb987), closes #2732
- daemon: keep a conversation's current append session through idle retention (#2816) (8c49e32), closes #2812
- daemon: protect Kimi file API keys in microsandbox (#2759) (91b8aff)
- daemon: refuse abbreviated Git execution options and admit the Source Cache bundle primitives (#2782) (e38ce9e), closes #2732
- daemon: resolve credentialed workspace refs through the code-host seam (#2788) (9a69afd), closes #2732
- daemon: settle every approval through one path, with console choices (#2735) (ec14470), closes #2592 #2331
- daemon: start cluster workspace clones from a Source Cache bundle (#2791) (c607ea0), closes #2732
- daemon: sweep the Source Cache and verify its bucket lifecycle rules (#2793) (0da235e), closes #2732
- daemon: write cluster workspace clones back to the Source Cache (#2792) (e473be1), closes #2732
- review: count formal reviews by checkout outcome and degradation reason (#2749) (b154c8a)
- webchat: continue a multi-agent hook conversation by @mention (#2691) (b757741), closes #2500
- web: serve llms.txt and robots.txt from the console (#2806) (7b319f8)
- web: show a recovering daemon as Reconnecting (#2711) (b9c5d77)
Bug Fixes
- chart: list a replacement control plane seconds after it listens (#2726) (8a0f626)
- cloud: connect OpenCode to configured model providers (#2718) (17c0a80)
- compose: upgrade bundled Logto to 1.44.0 (#2769) (478aab4)
- console: let the composer's runtime pill shrink on phones (#2753) (8b92545)
- console: move Getting started from the mobile drawer to its help sheet (#2752) (3b8043a)
- console: wrap the composer toolbar on phones (#2755) (0deb646)
- control-plane: end open SSE streams so shutdown can finish (#2723) (bb6b8d1)
- control-plane: keep a relay replay from reviving a removed MCP binding or hook rule (#2738) (3c67b2b)
- control-plane: let daemon-group members on one shared store serve each other's sessions (#2772) (83023e0), closes #2188
- control-plane: refuse visibility changes on append sessions (#2815) (7187363), closes #2813
- control-plane: require edit access to sync an agent's workspace (#2743) (4c35b77)
- control-plane: size the database pool and cap concurrent daemon handshakes (#2758) (5584c59)
- control-plane: skip the relay-disconnect bot reconcile while shutting down (#2736) (d01356e), closes #2723 #2692
- cron: acknowledge terminal cron outcomes across a CP handoff (#2713) (567001e)
- daemon: bind a new session's source before the cold fence (#2789) (5aed462)
- daemon: complete a restart only when a new daemon boot registers (#2717) (a797780)
- daemon: fetch a review revision into a session clone with the clone's own filter (#2754) (8d57e84)
- daemon: give a placed session's gh and glab their per-repo tokens (#2807) (805e519)
- daemon: idle sweep takes over running pods no launch tracks (#2797) (fb733e4), closes #2780
- daemon: install a placed session's skills into its checkout (#2801) (e21ec4b)
- daemon: keep a runtime's private state read-only to its tools, deny only its credentials (#2773) (eed682d)
- daemon: keep handoff waits inside the turn-path request deadline (#2716) (181a9fd)
- daemon: keep the reconnect replay going when one step fails (#2722) (08759d3)
- daemon: key a placed session's skill ledger on its directory, not its launch (#2775) (620983d)
- daemon: let a Codex first turn wait for slow MCP servers (#2800) (5b5f52e), closes #2770
- daemon: prepare a session's VM under its selected runtime (#2750) (0aacbb7)
- daemon: re-send an in-flight duty claim over a replaced CP link (#2720) (1f887ce)
- daemon: redial fast after a planned CP restart (#2709) (f8c0342)
- daemon: remove a placed session's skills left at its session directory (#2804) (758c16c), closes #2801
- daemon: run a sandbox git credential helper through sh (#2799) (24b2874), closes #2794
- daemon: scope test temp dirs to one per-run directory removed at teardown (#2737) (efd9430)
- daemon: ship the git credential helper with a daemon installation (#2794) (698a5b8)
- daemon: skip a locally edited installed skill instead of failing every turn (#2803) (1195ce8), closes #2802
- daemon: stop retention failing forever on an agent pod with no primary checkout (#2796) (3c42dc9), closes #2780
- daemon: support OpenCode memory off (#2740) (9ffbe45)
- daemon: surface model selection failures and report executed models (#2768) (61a8ec0)
- daemon: treat a config value already in effect as applied (#2783) (be5fc3a), closes #2774
- daemon: wait out a busy skill lock database on open instead of failing (#2784) (f43eac2)
- daemon: wait out a CP handoff on turn-path control requests (#2707) (84301e8)
- daemon: write a shim's gh and glab wrappers only for the token entries it has (#2808) (8ea0a27)
- deps: bump testcontainers to drop vulnerable undici (#2712) (b42e6fb)
- github: validate inline review positions before publication (#2767) (b7d9bd2)
- memory: make memory writes safe to re-send across a CP handoff (#2719) (998df50)
- relay: a gated agent its routing can select is reachable in that routed conversation (#2790) (13c87d2)
- relay: prune stale MCP, hook and memory bindings after a reconnect (#2714) (3c534df)
- relay: redial fast after a planned CP restart (#2710) (26aa56a)
- relay: wait out a CP handoff on credential checks and thread lookups (#2708) (e07a8d2)
- slack: drop unused file and user search scopes (#2811) (172083a)
- slack: drop unused scopes and stabilize Windows cancellation test (#2728) (d97ae83)
- slack: welcome users of the built-in agent (#2817) (3984eaf)
- webchat: re-check membership and agent visibility on every dial (#2746) (255989d)
- web: render a hook fire delivered to several agents once in the merged view (#2715) (b743b37), closes #2500
Internal
- acp: update DeepSeek runtime and SDK (#2798) (aa15cd6)
- chart: refuse more than one Control Plane replica (#2705) (17d1203)
- ci: flatten release publication topology (#2739) (43dd28f)
- deps: bump simple-git to 4.0.2 and pass the daemon's git env through its guard (#2785) (7c047ef)
- deps: bump the npm-minor-and-patch group with 26 updates (#2776) (f9bee70)
- docs: format the voice meeting participation design (#2756) (60e9fc3), closes #2631
- runtime: bump Claude, Codex, DeepSeek and browser pins (#2771) (fc06ff6)
- runtime: pin Claude ACP 0.86.0 (#2805) (86edfe5)
- runtime: pin Codex ACP fork 2.1.0 (#2760) (6d79370)
- runtime: update pinned ACP runtimes and SDK (#2703) (07c87a8)
Full Changelog: v2.1.0...v2.2.0