What's Changed
- fix(ci): read prettier's whole ignore set at the base tip by @wenshao in #16729
- fix(cli,core): let an Agent Host retry an enrollment whose answer was lost by @wenshao in #16722
- fix(channels): shape-check authorExclude on the inbound task record by @wenshao in #16740
- feat(managed-agent): import Skills from the original Runtime by @doudouOUC in #16638
- docs: clarify tool bridge requirements when migrating from tools.core by @521Peter in #16750
- fix(ci): annotate a truncated tree and pin the encoded tree ref by @wenshao in #16747
- refactor(managed-agent): give JDBC stores names distinct from their interfaces by @doudouOUC in #16759
- fix(ci): stop the Ctrl+C and Java heap failures that block fork PRs by @TianYuan1024 in #16150
- fix(core): decode ANSI-C words and the -c option terminator with bash's rules by @yiliang114 in #16540
- feat(cli): thread /btw session history and decouple its request lifecycle by @sorrycc in #16408
- refactor(managed-agent): share Hosted Harness feature tokens between connectors by @doudouOUC in #16763
- fix(ci): stop stale-base updates from restarting timed-out PR reviews by @wenshao in #16749
- fix(web-shell): bump @datafe-open/markdown-chart to 0.4.1 by @zhangxy-zju in #16021
- ci: reduce all sharded CI lanes to two shards by @wenshao in #16764
- feat(managed-agent): add Tool v4 execution measurements by @doudouOUC in #16498
- test(core): keep the background renewal out of the byte-offset title case by @wenshao in #16756
- perf(memory): drop the bundled auto-memory reference and keep the resident policy by @qqqys in #16739
- perf(github): poll with conditional requests so unchanged data costs no quota by @wenshao in #16741
- feat(serve): add PR-watch host discovery and ordered shutdown by @wenshao in #16732
- fix(web-templates): lift the export renderer budget to the merged size by @yiliang114 in #16774
- feat(cli): send OpenTUI's model rounds through the shared agent loop by @qqqys in #16743
- feat(mods): run model completions from Mods by @qqqys in #16737
- feat(managed-agent): add private BTW and session recap by @doudouOUC in #16758
- fix(cli): let idle-only slash commands run from an idle session by @qqqys in #16731
- feat(core): Goal verifier verdict inherits the session output language by @4ekuct25 in #15806
- fix(web-shell): prioritize slash menu names by @callmeYe in #16790
- refactor(cli): single-source the Managed Runtime worker route surface by @doudouOUC in #16788
- docs(managed-agent): design Managed /loop support (schedules and wakeups) by @wenshao in #16792
- fix(cli): notify when a background agent or workflow parks an approval by @qqqys in #16800
- feat(mods): let Mods rewrite reply rows in the Ink terminal by @qqqys in #16794
- feat(ci): raise the self-hosted autofix agent budget to 240 minutes by @wenshao in #16777
- fix(cli): defer unlisted subscription model errors to send by @liuxuely0626 in #16798
- feat(web-shell): configure the Email channel from the channel manager by @wenshao in #16746
- feat(cli): run OpenTUI's tool batches on the shared agent loop by @qqqys in #16789
- fix(core): write auto session titles in the conversation's language by @qqqys in #16806
- feat(mods): keep each plugin's values between sessions with $.store by @qqqys in #16791
- fix(cli): show a foreground agent's pending approval in the live panel by @qqqys in #16809
- fix(cli): only enable sandbox debugging for explicit DEBUG values by @yiliang114 in #16805
- fix(deps)!: upgrade dependencies shipped by SDK and Web Shell by @yiliang114 in #16452
- docs(managed-agent): Managed scheduling designs — loop review fixes and external schedulers by @wenshao in #16796
- fix(core): attribute gh pr create in the directory the command runs in by @wenshao in #16725
- chore(managed-agent): remove unused constructors and helpers by @doudouOUC in #16822
- fix(core): keep reacquireWriter from acquiring behind a seal by @wenshao in #16726
- perf(managed-agent): cheapen proof copies, CSI lookup and startup polling by @doudouOUC in #16828
- refactor(serve): extract the session restore core for in-process callers by @wenshao in #16810
- feat(web-shell): let managed sessions reuse the host shell by @yiliang114 in #16324
- feat(managed-agent): keep the channel delivery ledger segment-faithful by @wenshao in #16797
- feat(channels): gate review/verify bound delivery on active watches by @wenshao in #16772
- feat(web-shell): configure the WeChat channel with in-browser QR login by @wenshao in #16736
- fix(core): reject recycled PIDs in runtime session status by @yiliang114 in #16128
- docs(design): correct the wakeDormant delivery claim to a latency gap by @wenshao in #16834
- perf(managed-agent): remove redundant read-path queries by @doudouOUC in #16827
- feat(channels): add a QR-login management contract and the QQ config surface by @wenshao in #16724
- feat(managed-agent): expose channel delivery segments in the public read model by @wenshao in #16807
- feat(web-shell): show session speed and cache hit under the composer by @qqqys in #16815
- fix(channels): let a config field declare an inclusive lower bound by @wenshao in #16783
- fix(managed-agent): release the MCP owner when a Session closes by @wenshao in #16728
- fix(managed-agent): harden Harness error-code parsing, host reader and exception causes by @doudouOUC in #16826
- docs(providers): document Wiro AI under OpenAI-compatible providers by @EminBudak in #16850
- docs(serve): describe workspace Skill settings writes by name by @521Peter in #16833
- refactor(managed-agent): keep asynchronous admission as the only publication mode by @doudouOUC in #16840
- feat(web-shell): show unfinished background tasks as chips above the composer by @qqqys in #16813
- feat(channels): localize bound-session event prompts by UI language by @wenshao in #16773
- test(cli): cover OpenTUI's steering input and retry on the shared agent loop by @qqqys in #16820
- feat(managed-mcp): propose live-only selection capacity by @yiliang114 in #15161
- fix(web-shell): compact approval picker and flag full access by @callmeYe in #16874
- fix(ci): preserve live ephemeral runners past their age threshold by @yiliang114 in #16871
- test(managed-agent): make the channel recording Harness faithful to the funnel by @wenshao in #16843
- fix(web-shell): give the WeChat QR mint the budget the daemon allows it by @wenshao in #16838
- docs: add Qwen Code 1.0 Preview entry to README by @0xvincent in #16872
- fix(cli): tolerate missing container $HOME and create sandbox home dir by @yiliang114 in #16878
- fix(web-shell): reconcile acknowledged managed model changes by @yiliang114 in #16869
- fix(ci): settle the parity approval wait and restore checkstyle import order by @wenshao in #16881
- docs: format README with the repository Prettier version by @yiliang114 in #16887
- test(cli): deflake the hosted harness message-stop test (#16853) by @qwen-code-dev-bot in #16855
- fix(ci): install fonts in the ephemeral runner image (#16863) by @qwen-code-dev-bot in #16864
- docs(channels): name the WeChat conversation the bot actually reads by @wenshao in #16888
- feat(managed-agent): Add external extension source and archive storage SPIs by @doudouOUC in #16882
- test(web-shell): disambiguate the sidebar Collapse button from Collapse all workspaces by @yiliang114 in #16905
- ci(desktop): re-pin the RHEL 10 build root to a current CentOS Stream 10 digest by @yiliang114 in #16897
- test(web-shell): expect the subscription activation's model-persist opt-out meta by @yiliang114 in #16904
- test(web-shell): start the composer context mobile hover check from neutral focus by @yiliang114 in #16907
- fix(ci): drain ephemeral runners before shutdown by @yiliang114 in #16892
- refactor(managed-agent): scope CSI retirement evidence to its own session by @doudouOUC in #16910
- feat(mods): let Mods rewrite reply rows in the OpenTUI terminal by @qqqys in #16873
- fix(web-shell): keep explanation popover at its intended width by @callmeYe in #16916
- fix(managed-agent): read the frozen CSI commit body with its own size bound by @doudouOUC in #16923
- test(generated-ui): add the #14019 acceptance evaluation by @qqqys in #16811
- feat(serve): record the slim listing's states and carry its keys to the watch by @wenshao in #16847
- fix(daemon): allow manual forget when auto memory is disabled by @callmeYe in #16913
- fix(web-shell): align approval explanation and actions by @callmeYe in #16914
- docs(managed-agent): sync the reply-loss gate design to terminal-drain release by @yiliang114 in #16898
- fix(web-shell): group session sorting with multi-select by @deggs7 in #16776
- feat(channels): add DingTalk webhook delivery with configured targets by @jkxiao in #16802
- test(web-shell): fix the nightly Browser Regression cluster by @yiliang114 in #16919
- fix(web-shell): raise build heap to 4096MB to fix companion release macOS OOM by @yiliang114 in #16902
- refactor(managed-agent): complete broker facade decomposition by @doudouOUC in #16922
- refactor(managed-agent): remove uncalled CSI admission and workspace catalog code by @doudouOUC in #16928
- feat(web-shell): expand sidebar session lists ten at a time by @wenshao in #16830
- docs(channels): say what the WeChat pairing reply actually is by @wenshao in #16930
- feat(managed-agent): OSS externalization of oversized session resources and journal compaction by @doudouOUC in #16868
- fix(channels): retry stored GitHub replies while the channel runs by @wenshao in #16839
- fix(cli): count daemon-persisted routes in channel status by @wenshao in #16929
- fix(managed-agent): honour the declared base64 bounds and drop an orphaned import by @doudouOUC in #16934
- feat(core): add event-bus primitives for the agent loop by @wenshao in #16935
- fix(managed-agent): align model selection with DAC by @yiliang114 in #16890
- fix(ci): heal pool runner leftovers that break checkout and corepack by @yiliang114 in #16939
- fix(core): honour permissions.ask rules in auto-edit mode by @qqqys in #16932
- fix(web-shell): admit GitLab as a repository-only channel by @wenshao in #16845
- fix(managed-agent): map the resend identity conflict to 409 and pin the projection wire shape by @wenshao in #16846
- refactor(managed-agent): extract binding admission and fence engine by @doudouOUC in #16936
- test(ci): pin the widened lint-lane gates that had no assertion by @yiliang114 in #16950
- ci: bake the pool's browsers into its image and cap the container typecheck heap by @yiliang114 in #16951
- fix(managed-agent): give the CSI retirement size bounds a single owner by @doudouOUC in #16956
- test(integration): deflake the TUI loop parity startup date by @qwen-code-dev-bot in #16961
- fix(ci): re-baseline ci.yml workflow size after merged CI growth by @qwen-code-dev-bot in #16978
- refactor(managed-agent): remove unused CSI checkpoint snapshot and log readers by @doudouOUC in #16957
- chore(managed-agent): finish the CSI bound conversion and name it once by @doudouOUC in #16981
- fix(managed-agent): fence concurrent journal pack publication with a builder lease by @doudouOUC in #16983
- ci: route web shell PR jobs to ephemeral runners by @yiliang114 in #16917
- feat(web): configure DingTalk webhooks and scheduled delivery targets by @jkxiao in #16804
- fix(web-shell): center the session timeline vertically by @callmeYe in #16912
- refactor(managed-agent): retire the InMemory runtime broker repositories by @doudouOUC in #16953
- feat(web-shell): support host model picker content by @callmeYe in #16933
- ci: re-run unit suites the worker RPC budget failed on a contended host by @yiliang114 in #16945
- feat(core): re-express the agent loop on the event bus (opt-in) by @wenshao in #16938
- fix(web-shell): cancel the QQ login session when the editor closes by @wenshao in #16841
- fix(core): publish file-history backups atomically by @wenshao in #16926
- fix(cli): never terminally release a config-scoped Hook owner on a detach by @wenshao in #16594
- perf(managed-agent): gate the reconcile record read and batch the segment plan by @wenshao in #16865
- feat(verify-pr): deepen the verify checkout to the PR's history by @wenshao in #16781
- docs(managed-agent): drop removed WorkspaceCsiCheckpointSnapshotStore from the deletion precondition by @doudouOUC in #16984
- feat(cli): enable the event-bus agent loop on headless behind an experimental setting by @wenshao in #16994
- docs(managed-agent): record why the gate cannot be a required check yet by @yiliang114 in #16955
- ci: refuse an unrunnable host before the unit suites start by @yiliang114 in #16987
- test(core): pin the default executor's scheduler and runtimeView passthrough by @wenshao in #17009
- refactor(managed-agent): settle Session rename synchronously under one display authority by @doudouOUC in #17006
- docs(design): cross-link the event-bus loop and refresh the unified-loop status by @wenshao in #17014
- docs(agents): name the pnpm install in the Browser Use dev note by @qqqys in #17019
- feat(core): send AgentCore's model rounds through the shared agent loop by @qqqys in #16880
- docs(agents): import AGENTS.md from CLAUDE.md by @qqqys in #17017
- ci: narrow lint gate freshness to the lint slice, and close its follow-ups by @yiliang114 in #16946
- fix(core): resolve system prompts for the request model by @callmeYe in #17023
- test(cli): pin the host machine-id in SSH bootstrap process tests (#16975) by @qwen-code-dev-bot in #16976
- test(ci): read the lint freshness gate's fatality through the YAML parser by @yiliang114 in #17028
- fix(cli): refuse an unreadable host identity instead of leaking ENOENT by @yiliang114 in #17034
- fix(web-shell): 仅首页时隐藏多余导航栏并保留底部操作 by @chiga0 in #17027
- fix(browser-use): move the bundled zod to 4.6.6 by @yiliang114 in #17022
- fix(web-shell): reflect welcome model selection in settings by @deggs7 in #16819
- fix(permissions): route git commit --amend to human approval instead of a hard block by @yiliang114 in #16075
- docs(browser-use): attribute the bundle-size gap to esbuild's path comments by @yiliang114 in #17041
- ci: classify the disk floor refusal, and keep survey checkouts off /tmp by @yiliang114 in #17011
- test(channels): pin bound-event localization contracts by @wenshao in #17026
- feat(workflows): allow model-requested background runs in ACP sessions by @qqqys in #16876
- docs(core): correct stale PR status and preview file count in event-bus design by @wenshao in #16952
- feat(core): run AgentCore's tool batches on the shared agent loop by @qqqys in #17035
- feat: Manual session PR binding (/pr command + Web Shell dialog) by @wenshao in #16877
- ci: bake the standalone runtime archives into the ephemeral image by @yiliang114 in #17033
- chore(managed-agent): trim verification meta-ratchets and align local gate profiles by @doudouOUC in #17044
- fix(managed-agent): repair rename recovery test and address the #17006 review round by @doudouOUC in #17043
- fix(permissions): see the write in a
>|clobber redirect by @yiliang114 in #17042 - test(web-shell): open home-only settings directly in archived smoke by @qwen-code-dev-bot in #17066
- test(verify-pr): deflake container boundary assertion (#17046) by @qwen-code-dev-bot in #17049
- feat(managed-agent): make CSI admission, activation-lease, and broker repository readers pack-aware by @doudouOUC in #17047
- refactor(managed-agent): collapse the distribution to a single executable jar by @doudouOUC in #17064
- refactor(managed-agent): converge OSS hot path, dead code and pool defaults by @doudouOUC in #17058
- feat(managed-agent): durable self-paced /loop wakeups for Managed Sessions by @wenshao in #16835
New Contributors
- @521Peter made their first contribution in #16750
- @EminBudak made their first contribution in #16850
- @0xvincent made their first contribution in #16872
Full Changelog: desktop-v0.27.1...desktop-v0.27.3