What's Changed
- feat(autofix): label-driven takeover and release; fix forced-dispatch green no-op by @wenshao in #7165
- fix(autofix): stage SKILL.md beside run-agent.mjs so review-address boots (P0, regression from #7165) by @wenshao in #7225
- fix(ci): consolidate issue triage ownership by @yiliang114 in #7180
- fix(cli): allow goal controls during active loops by @yiliang114 in #7202
- test: raise timeout ceiling for I/O-bound tests flaky under CI contention by @wenshao in #7230
- fix(cli): show mode indicator alongside steering hint during streaming by @qwen-code-dev-bot in #7219
- fix(scripts): allow multiple dev:daemon instances by probing Vite port by @wenshao in #7212
- feat(autofix): direct takeover of maintainer-fork PRs by @wenshao in #7213
- feat(daemon): Advertise ACP preheat readiness by @doudouOUC in #7200
- feat(autofix): surface the running model in every autofix report by @wenshao in #7226
- fix(review): say an unread chunk once, under its cause by @wenshao in #7234
- fix(autofix): a no-output crash must not advance the review watermark by @wenshao in #7229
- fix(review): prohibit isolation param in roster output and SKILL.md by @wenshao in #7235
- feat(review): retry transient API failures once; surface quota clearly by @wenshao in #7233
- feat(core): inspect persisted conversation branches by @doudouOUC in #7185
- fix(cli): align npm update checks with global registry by @yiliang114 in #7224
- feat(core): Route Plan-mode shell commands by safety by @doudouOUC in #7172
- test(autofix): exercise the SKILL stage↔resolve contract end-to-end by @wenshao in #7227
- feat(ci): auto-open a deflake fix issue for confirmed flaky tests by @wenshao in #7231
- feat(autofix): auto-manage the bot's own fork PRs without a label by @wenshao in #7243
- feat(web-shell): worktree-isolated sessions for parallel tasks by @wenshao in #7221
- feat(i18n): update catalan translaiton by @jordimas in #7253
- fix(test): deflake tool-control E2E content assertions by @qwen-code-dev-bot in #7261
- fix(sdk): abort SSE request on iterator exit to release daemon subscriber by @chinesepowered in #7257
- fix(core): Enforce Plan mode entry boundary by @doudouOUC in #7248
- test(channels): add memory recall evaluation baseline by @qwen-code-dev-bot in #7220
- fix(channels): exclude discrete ACP messages from replies by @qwen-code-dev-bot in #7223
- fix(ci): create remote-tracking ref for fork PRs in autofix verify gate by @wenshao in #7281
- fix(sdk): clean up SSE requests on errors and dispose by @doudouOUC in #7269
- test(autofix): sync workflow assertions with split model vars by @yiliang114 in #7297
- fix(cli): repaint the TUI after OS sleep/wake or SIGCONT by @wenshao in #7265
- fix(mobile-mcp): restore bounds in UI hierarchy dumps by @LaZzyMan in #7321
- fix(test): stabilize 3 flaky tests (serve startup, usage-stats TTL, TasksStatusMessage keypress) by @qwen-code-dev-bot in #7319
- docs(cli): remove stale include directories limit by @ZijianZhang989 in #7326
- test(feishu): enforce markdown chunk limit assertion by @ZijianZhang989 in #7324
- fix(cli): Preserve cancellation during permission prompts by @doudouOUC in #7295
- feat: add CODEOWNERS for core harness modules by @pomelo-nwu in #7304
- feat(web-shell): support custom slash command actions by @ytahdn in #7267
- fix(core): estimate reasoning_tokens when completion_tokens_details is missing by @yiliang114 in #7239
- fix(ci): tighten API error detection to avoid false positive on review prose by @wenshao in #7328
- fix(web-shell): localize extension tag labels by @callmeYe in #7337
- fix(test): stabilize list_directory E2E — accept text output when model skips tool call by @qwen-code-dev-bot in #7342
- fix(autofix): resolve owning package for nested paths; report verify-failed handoffs as not pushed by @wenshao in #7330
- fix(review): retry gh CLI on transient GitHub errors (5xx) and keyring failures by @wenshao in #7291
- feat(web-shell): add git commit history browser by @wenshao in #7204
- feat: support workspace display names by @samuelhsin in #7179
- feat(channels): add content-safe memory recall telemetry by @qqqys in #7338
- feat(daemon): restore worktree isolation on session load/resume by @wenshao in #7262
- fix(channels): deliver background agent replies by @qwen-code-dev-bot in #7336
- fix(web-shell): proxy extension APIs without intercepting modules by @ytahdn in #7294
- fix(dingtalk): retry transient emotion failures by @qwen-code-dev-bot in #7329
- fix(web-shell): respect voice enabled setting by @callmeYe in #7345
- feat(autofix): re-arm a stranded PR with @qwen-code /retry instead of deleting a marker by @wenshao in #7354
- fix(cli): map positional args to optional MCP prompt parameters by @qwen-code-dev-bot in #7317
- fix(cli): include typed directory in /cd tab completion by @qwen-code-dev-bot in #7320
- feat(serve): make ACP initialize handshake timeout configurable by @qwen-code-dev-bot in #7246
- ci: move release-note classifier from per-PR workflow to release-time batch by @yiliang114 in #7339
Full Changelog: v0.20.0...v0.20.0-nightly.20260721.cda0e0348