What's Changed
- fix(runner): platform-op direct-call errors keep their structured detail by @mmabrouk in #5763
- fix(runner): Pi's validation error names the misplaced property by @mmabrouk in #5779
- fix(sdk): runner errors keep their instructions (sanitizer cap to 2000) by @mmabrouk in #5780
- fix(api): stop echoing submitted secrets in vault validation errors by @mmabrouk in #5795
- test(qa): permanent release-gate cells for agent config editing by @mmabrouk in #5765
- feat(benchmarks): the agent-config-editing one-shot benchmark and its first measurement night by @mmabrouk in #5801
- docs: agent-config-editing design workspace (stack bottom) by @mmabrouk in #5733
- test(frontend): config panel preserves skill entries it does not author by @mmabrouk in #5782
- chore(hosting): dev runner auto-reloads on save (tsx watch + polling) by @mmabrouk in #5784
- fix(runner): let an environment own the configuration it installed by @mmabrouk in #5746
- feat(sdk): let a builder tool call carry the agent's own note by @mmabrouk in #5747
- feat(api): add the change-set engine for ordered config edits by @mmabrouk in #5748
- refactor(runner): move session decisions out of server.ts by @mmabrouk in #5749
- fix(api): serialize concurrent commits on one variant with a row lock by @mmabrouk in #5750
- feat(api): wire ordered operations into the workflow commit endpoint by @mmabrouk in #5751
- refactor(runner): extract the sandbox and workspace lifecycle units by @mmabrouk in #5752
- feat(api): add read_config and harden the commit endpoint by @mmabrouk in #5753
- refactor(runner): finish the lifecycle split with a typed context by @mmabrouk in #5754
- feat(runner): read workspace files into a commit, under one root by @mmabrouk in #5755
- feat(runner): change a warm environment instead of rebuilding it by @mmabrouk in #5756
- feat(runner): bind an approval to the exact call that may execute by @mmabrouk in #5757
- feat(runner): reopen a harness session without losing the sandbox by @mmabrouk in #5758
- feat(runner): rotate a credential without deleting the sandbox by @mmabrouk in #5759
- feat(runner): show the real change on the card, commit those bytes by @mmabrouk in #5760
- feat(sdk): deliver the approval manifest to the live approval card by @mmabrouk in #5761
- feat(frontend): show the frozen content and diff on commit approvals by @mmabrouk in #5762
- fix(runner): steered sessions keep their workspace mount (pre-existing) by @mmabrouk in #5764
- feat(api): agent behavior leaves the public API: handler-mode ops, one error envelope, routes deleted by @mmabrouk in #5797
- chore(clients): regenerate both API clients from the branch spec by @mmabrouk in #5785
- fix(ci): clear the CodeQL highs (test and benchmark code only) by @mmabrouk in #5802
- [feat] Connect Slack and Telegram from the agent page by @mmabrouk in #6737
- feat(channels): hosted (Agenta-owned) Telegram bot by @mmabrouk in #6724
- feat(channels): Telegram channel (custom bot) by @mmabrouk in #6679
- fix(channels): render the approval card on a park, answer by the real interaction id by @mmabrouk in #6653
- docs(channels): takeover decision record, live QA, and finding resolutions by @mmabrouk in #6652
- feat(channels): put the feature behind a flag (env var + UI switch) by @mmabrouk in #6651
- fix(channels): an approval answer resumes the parked turn, and reaches the agent that asked by @mmabrouk in #6650
- fix(channels): an edit names what changes, and a failed post is written down by @mmabrouk in #6649
- fix(channels): decide what opens a turn, and make a DM one conversation by @mmabrouk in #6647
- fix(channels): unblock the first live deploy (slug, handshake, reference key, space kind, listing) by @mmabrouk in #6646
- [docs] Update API reference docs by @github-actions[bot] in #7051
- chore(sessions): hardcode the durability switches and remove their flags by @mmabrouk in #7097
- chore(api): hardcode ordered operations for agent config commits and remove the flag by @mmabrouk in #7093
- chore(frontend): hardcode the production mobile gate values and remove the env vars by @mmabrouk in #7091
- fix(frontend): wait for the agent to be ready before the first queued send by @mmabrouk in #7098
- chore(sessions): hardcode last-message-only and history reconstruction, remove both flags by @mmabrouk in #7092
- chore(frontend): hardcode five always-on agent UI flags and remove them by @mmabrouk in #7094
- chore(api): hardcode the sessions queue and steer, remove the direct send path by @mmabrouk in #7095
- fix(runner): fail an ACP request when its connection closes instead of hanging by @mmabrouk in #7099
- [feat] Channels: Slack, bridge, and Agenta channel (takeover of #6051) by @mmabrouk in #6644
- fix(api): refuse agent commits whose instructions lack agents_md by @mmabrouk in #7103
- fix(clients): regenerate the Python and TS clients for the channels grant types by @mmabrouk in #7107
- fix(frontend): trim publish snippet trailing slashes without a regex by @mmabrouk in #7104
- fix(agents): hide the mock test harness from harness lists by @mmabrouk in #7108
- [fix] Make Claude answer a steered message that replaces an unanswered one by @mmabrouk in #7111
- docs: v0.121.0 upgrade notes, removed flags, and API changes by @mmabrouk in #7106
- test(api): skip the live channel check where the local sandbox is off by @mmabrouk in #7112
- fix(channels): claim an outbox reply atomically so two workers never post it twice by @mmabrouk in #7105
- [release] v0.121.0 by @github-actions[bot] in #7087
Full Changelog: v0.120.0...v0.121.0