<!-- qwen-release-notes:v1 -->
## 亮点
_详见下方的完整变更列表。_
## 破坏性变更
暂无已知的破坏性变更。
## 完整变更列表
### 新功能
- feat(autofix): 基于标签接管并释放;修复强制分发的绿色空操作 ([#7165](https://github.com/QwenLM/qwen-code/pull/7165)) by @wenshao
- feat(autofix): 直接接管维护者分叉的 PR ([#7213](https://github.com/QwenLM/qwen-code/pull/7213)) by @wenshao
- feat(daemon): 通告 ACP 预热就绪状态 ([#7200](https://github.com/QwenLM/qwen-code/pull/7200)) by @doudouOUC
- feat(autofix): 在每个 autofix 报告中显示正在运行的模型 ([#7226](https://github.com/QwenLM/qwen-code/pull/7226)) by @wenshao
- feat(review): 重试一次临时 API 失败;清晰展示配额信息 ([#7233](https://github.com/QwenLM/qwen-code/pull/7233)) by @wenshao
- feat(core): 检查持久化的对话分支 ([#7185](https://github.com/QwenLM/qwen-code/pull/7185)) by @doudouOUC
- feat(core): 按安全性路由 Plan 模式的 shell 命令 ([#7172](https://github.com/QwenLM/qwen-code/pull/7172)) by @doudouOUC
- feat(ci): 为已确认的不稳定测试自动创建修复问题 ([#7231](https://github.com/QwenLM/qwen-code/pull/7231)) by @wenshao
- feat(autofix): 无需标签即可自动管理机器人自身的分叉 PR ([#7243](https://github.com/QwenLM/qwen-code/pull/7243)) by @wenshao
- feat(web-shell): 为并行任务提供 worktree 隔离会话 ([#7221](https://github.com/QwenLM/qwen-code/pull/7221)) by @wenshao
- feat(i18n): 更新加泰罗尼亚语翻译 ([#7253](https://github.com/QwenLM/qwen-code/pull/7253)) by @jordimas
- feat: 为核心测试模块添加 CODEOWNERS ([#7304](https://github.com/QwenLM/qwen-code/pull/7304)) by @pomelo-nwu
- feat(web-shell): 支持自定义斜杠命令动作 ([#7267](https://github.com/QwenLM/qwen-code/pull/7267)) by @ytahdn
- feat(web-shell): 添加 git 提交历史浏览器 ([#7204](https://github.com/QwenLM/qwen-code/pull/7204)) by @wenshao
- feat: 支持工作区显示名称 ([#7179](https://github.com/QwenLM/qwen-code/pull/7179)) by @samuelhsin
- feat(channels): 添加内容安全的记忆召回遥测 ([#7338](https://github.com/QwenLM/qwen-code/pull/7338)) by @qqqys
- feat(daemon): 在会话加载/恢复时恢复 worktree 隔离 ([#7262](https://github.com/QwenLM/qwen-code/pull/7262)) by @wenshao
- feat(autofix): 使用 @qwen-code /retry 重新触发搁置的 PR,而非删除标记 ([#7354](https://github.com/QwenLM/qwen-code/pull/7354)) by @wenshao
- feat(serve): 使 ACP 初始化握手超时时间可配置 ([#7246](https://github.com/QwenLM/qwen-code/pull/7246)) by @qwen-code-dev-bot
- feat(autofix): 实时获取已管理的分叉 PR,而非等待限流调度 ([#7350](https://github.com/QwenLM/qwen-code/pull/7350)) by @wenshao
- feat(autofix): 解决其已实施修复的审查线程 ([#7364](https://github.com/QwenLM/qwen-code/pull/7364)) by @wenshao
- feat(autofix): 将已管理的工作池渲染至扫描运行摘要中 ([#7355](https://github.com/QwenLM/qwen-code/pull/7355)) by @wenshao
- feat(core): 为分叉子代理添加 fork_turns ([#7346](https://github.com/QwenLM/qwen-code/pull/7346)) by @DragonnZhang
- feat(auth): 添加新加坡 Token Plan 区域 ([#7280](https://github.com/QwenLM/qwen-code/pull/7280)) by @han-dreamer
- feat(web-shell): 在新会话空状态中显示 worktree 隔离 ([#7365](https://github.com/QwenLM/qwen-code/pull/7365)) by @wenshao
- feat(core): 添加基于 DashScope Responses API 的可选内置 web_search ([#7215](https://github.com/QwenLM/qwen-code/pull/7215)) by @tanzhenxin
- feat(web-shell): 添加用于品牌标识、导航、会话操作和页脚的侧边栏自定义 API ([#7379](https://github.com/QwenLM/qwen-code/pull/7379)) by @yuanyuanAli
- feat(autofix): 将严格轮次上限从 5 提升至 10 ([#7412](https://github.com/QwenLM/qwen-code/pull/7412)) by @wenshao
- feat(autofix): 将门禁拒绝信息反馈回去,以便重试能修复其破坏的内容 ([#7368](https://github.com/QwenLM/qwen-code/pull/7368)) by @wenshao
### 错误修复
- fix(autofix): 将 SKILL.md 暂存于 run-agent.mjs 旁,以便 review-address 正常启动 (P0,#7165 的回归问题) ([#7225](https://github.com/QwenLM/qwen-code/pull/7225)) by @wenshao
- fix(ci): 整合问题分类的归属权 ([#7180](https://github.com/QwenLM/qwen-code/pull/7180)) by @yiliang114
- fix(cli): 允许在活跃循环期间进行目标控制 ([#7202](https://github.com/QwenLM/qwen-code/pull/7202)) by @yiliang114
- fix(cli): 在流式传输期间,在引导提示旁显示模式指示器 ([#7219](https://github.com/QwenLM/qwen-code/pull/7219)) by @qwen-code-dev-bot
- fix(scripts): 通过探测 Vite 端口允许多个 dev:daemon 实例 ([#7212](https://github.com/QwenLM/qwen-code/pull/7212)) by @wenshao
- fix(review): 针对未读取的块,仅在其原因下播报一次 ([#7234](https://github.com/QwenLM/qwen-code/pull/7234)) by @wenshao
- fix(autofix): 无输出崩溃不得推进审查水位线 ([#7229](https://github.com/QwenLM/qwen-code/pull/7229)) by @wenshao
- fix(review): 禁止在名单输出和 SKILL.md 中使用隔离参数 ([#7235](https://github.com/QwenLM/qwen-code/pull/7235)) by @wenshao
- fix(cli): 将 npm 更新检查与全局注册表对齐 ([#7224](https://github.com/QwenLM/qwen-code/pull/7224)) by @yiliang114
- fix(test): 修复工具控制 E2E 内容断言的偶发失败问题 ([#7261](https://github.com/QwenLM/qwen-code/pull/7261)) by @qwen-code-dev-bot
- fix(sdk): 在迭代器退出时中止 SSE 请求,以释放守护进程订阅者 ([#7257](https://github.com/QwenLM/qwen-code/pull/7257)) by @chinesepowered
- fix(core): 强制执行计划模式的入口边界 ([#7248](https://github.com/QwenLM/qwen-code/pull/7248)) by @doudouOUC
- fix(channels): 在回复中排除离散的 ACP 消息 ([#7223](https://github.com/QwenLM/qwen-code/pull/7223)) by @qwen-code-dev-bot
- fix(ci): 在 autofix 验证门禁中为 fork PR 创建远程跟踪引用 ([#7281](https://github.com/QwenLM/qwen-code/pull/7281)) by @wenshao
- fix(sdk): 在错误和释放时清理 SSE 请求 ([#7269](https://github.com/QwenLM/qwen-code/pull/7269)) by @doudouOUC
- fix(cli): 在操作系统休眠/唤醒或收到 SIGCONT 信号后重绘 TUI ([#7265](https://github.com/QwenLM/qwen-code/pull/7265)) by @wenshao
- fix(mobile-mcp): 恢复 UI 层级转储中的边界信息 ([#7321](https://github.com/QwenLM/qwen-code/pull/7321)) by @LaZzyMan
- fix(test): 稳定 3 个偶发失败的测试(服务启动、使用统计 TTL、TasksStatusMessage 按键) ([#7319](https://github.com/QwenLM/qwen-code/pull/7319)) by @qwen-code-dev-bot
- fix(cli): 在权限提示期间保留取消操作 ([#7295](https://github.com/QwenLM/qwen-code/pull/7295)) by @doudouOUC
- fix(core): 在缺失 completion_tokens_details 时估算 reasoning_tokens ([#7239](https://github.com/QwenLM/qwen-code/pull/7239)) by @yiliang114
- fix(ci): 收紧 API 错误检测,避免在审查文本中误报 ([#7328](https://github.com/QwenLM/qwen-code/pull/7328)) by @wenshao
- fix(web-shell): 本地化扩展标签的显示文本 ([#7337](https://github.com/QwenLM/qwen-code/pull/7337)) by @callmeYe
- fix(test): 稳定 list_directory E2E 测试 — 当模型跳过工具调用时接受文本输出 ([#7342](https://github.com/QwenLM/qwen-code/pull/7342)) by @qwen-code-dev-bot
- fix(autofix): 解析嵌套路径的归属包;将验证失败的交接报告为未推送 ([#7330](https://github.com/QwenLM/qwen-code/pull/7330)) by @wenshao
- fix(review): 在遇到临时 GitHub 错误 (5xx) 和密钥环失败时重试 gh CLI ([#7291](https://github.com/QwenLM/qwen-code/pull/7291)) by @wenshao
- fix(channels): 投递后台代理的回复 ([#7336](https://github.com/QwenLM/qwen-code/pull/7336)) by @qwen-code-dev-bot
- fix(web-shell): 代理扩展 API 而不拦截模块 ([#7294](https://github.com/QwenLM/qwen-code/pull/7294)) by @ytahdn
- fix(dingtalk): 重试临时的情绪识别失败 ([#7329](https://github.com/QwenLM/qwen-code/pull/7329)) by @qwen-code-dev-bot
- fix(web-shell): 遵循语音启用设置 ([#7345](https://github.com/QwenLM/qwen-code/pull/7345)) by @callmeYe
- fix(cli): 将位置参数映射到可选的 MCP 提示参数 ([#7317](https://github.com/QwenLM/qwen-code/pull/7317)) by @qwen-code-dev-bot
- fix(cli): 在 /cd 标签补全中包含已输入的目录 ([#7320](https://github.com/QwenLM/qwen-code/pull/7320)) by @qwen-code-dev-bot
- fix(review): 提高代理启动和清理操作的容错性 ([#7259](https://github.com/QwenLM/qwen-code/pull/7259)) by @wenshao
- fix(ci): 阻止缓慢的巡逻分类器终止所有偶发失败的重新运行 ([#7358](https://github.com/QwenLM/qwen-code/pull/7358)) by @wenshao
- fix(ci): 区分视觉覆盖率缺口与“无视觉变化” ([#7375](https://github.com/QwenLM/qwen-code/pull/7375)) by @wenshao
- fix: 当自动模式分类器不可用时进行询问 ([#7331](https://github.com/QwenLM/qwen-code/pull/7331)) by @LaZzyMan
- fix(autofix): 重试验证门禁崩溃,而不是掩盖代理的修复 ([#7351](https://github.com/QwenLM/qwen-code/pull/7351)) by @wenshao
- fix(core): 验证目标判定器的终端证据 ([#7208](https://github.com/QwenLM/qwen-code/pull/7208)) by @qwen-code-dev-bot
- fix(core): 在纯无头模式下隐藏交互工具 ([#7285](https://github.com/QwenLM/qwen-code/pull/7285)) by @DragonnZhang
- fix(cli): 在状态行中显示 worktree 分支而非工作区分支 ([#7367](https://github.com/QwenLM/qwen-code/pull/7367)) by @wenshao
- fix(acp-bridge): 通过按 clientId 的 attach-ref 账本使 detachClient 幂等 ([#7386](https://github.com/QwenLM/qwen-code/pull/7386)) by @doudouOUC
- fix(autofix): 公开拒绝非主分支接管,而非仅在作业日志中记录 ([#7382](https://github.com/QwenLM/qwen-code/pull/7382)) by @wenshao
- fix(cli): 在后台安全更新 npm 安装 ([#7322](https://github.com/QwenLM/qwen-code/pull/7322)) by @yiliang114
- fix(core): 在 DashScope 上支持 qwen3.8 侧边查询 ([#7303](https://github.com/QwenLM/qwen-code/pull/7303)) by @yiliang114
- fix(autofix): 重试模型 API 错误,避免使 PR 挂起 ([#7247](https://github.com/QwenLM/qwen-code/pull/7247)) by @wenshao
- fix(ci): 避免 /resolve 报告在句子中间被截断 ([#7389](https://github.com/QwenLM/qwen-code/pull/7389)) by @wenshao
- fix(web-shell): 恢复定时任务引用交互 ([#7313](https://github.com/QwenLM/qwen-code/pull/7313)) by @BZ-D
- fix(core): 限制 web-fetch 后处理,并在失败时保留获取的内容 ([#7305](https://github.com/QwenLM/qwen-code/pull/7305)) by @tanzhenxin
- fix(core): 对并发 ACP 会话写入者进行隔离控制 ([#7237](https://github.com/QwenLM/qwen-code/pull/7237)) by @doudouOUC
- fix(ci): 串行化推送到 PR 头分支的两个工作流 ([#7392](https://github.com/QwenLM/qwen-code/pull/7392)) by @wenshao
- fix(web-shell): 按标签页持久化守护进程 Bearer Token,使其在刷新后依然有效 ([#7374](https://github.com/QwenLM/qwen-code/pull/7374)) by @zjunothing
- fix(core,cli): 在子代理的 ALS 框架外排空后台通知 ([#7194](https://github.com/QwenLM/qwen-code/pull/7194)) by @zjunothing
- fix(acp-bridge): 将 Windows 格式的 workspace 路径映射到其沙箱挂载点 ([#7228](https://github.com/QwenLM/qwen-code/pull/7228)) by @zjunothing
- fix(core): 在删除转录记录前,将会话使用情况保留至历史记录 ([#7391](https://github.com/QwenLM/qwen-code/pull/7391)) by @zjunothing
- fix(core): 明确后台代理的继续执行逻辑 ([#7300](https://github.com/QwenLM/qwen-code/pull/7300)) by @DragonnZhang
- fix(transcript): 将悬空的工具历史记录标记为不完整 ([#7340](https://github.com/QwenLM/qwen-code/pull/7340)) by @cxruan
- fix(mcp): 添加可选的模型负载过滤 ([#7413](https://github.com/QwenLM/qwen-code/pull/7413)) by @LaZzyMan
- fix(ci): 区分分类操作崩溃与静默代理 ([#7418](https://github.com/QwenLM/qwen-code/pull/7418)) by @wenshao
- fix(acp-bridge): 在守护进程服务模式中保证提示词终端事件仅触发一次 ([#7400](https://github.com/QwenLM/qwen-code/pull/7400)) by @doudouOUC
- fix(dingtalk): 将去除 @mention 的正则表达式锚定至文本开头 ([#7401](https://github.com/QwenLM/qwen-code/pull/7401)) by @qwen-code-dev-bot
- fix: 在无头模式下支持继承上下文的子代理 ([#7378](https://github.com/QwenLM/qwen-code/pull/7378)) by @DragonnZhang
- fix(cli): 改善更新检查失败的交互体验 — 改为警告而非错误,超时时间提升至 5 秒 ([#7409](https://github.com/QwenLM/qwen-code/pull/7409)) by @ComplexSimply
- fix(test): 将 Docker 沙箱的守护进程启动超时时间从 10 秒放宽至 25 秒 ([#7419](https://github.com/QwenLM/qwen-code/pull/7419)) by @qwen-code-dev-bot
- fix: 修复在 Web Shell 中无法打开正在运行的 worktree 会话的问题 ([#7424](https://github.com/QwenLM/qwen-code/pull/7424)) by @wenshao
- fix(web-shell): 恢复队列中和已召回提示词中的上下文标签 ([#7312](https://github.com/QwenLM/qwen-code/pull/7312)) by @dreamWB
- fix(core): 在 worktree 会话中基于 workspace 根目录解析 artifact 的 workspacePath ([#7429](https://github.com/QwenLM/qwen-code/pull/7429)) by @wenshao
- fix(cli): 对嵌套的更新检查网络错误进行分类处理 ([#7428](https://github.com/QwenLM/qwen-code/pull/7428)) by @yiliang114
- 修复了因会话锁文件解析到隔离测试目录之外而导致的间歇性 Docker CI 测试失败问题。 ([#7439](https://github.com/QwenLM/qwen-code/pull/7439)) by @wenshao
- 重新生成了
[email protected] 补丁,以确保其在全新安装时能干净应用并防止构建错误。 ([#7407](https://github.com/QwenLM/qwen-code/pull/7407)) by @chiga0
- 放宽了 OpenAI 协议模式中可选字段的约束,以防止模型被迫提供互斥参数。 ([#7344](https://github.com/QwenLM/qwen-code/pull/7344)) by @zjunothing
- 为钉钉媒体下载添加了 50MB 大小限制和 30 秒超时,以匹配飞书适配器的行为。 ([#7361](https://github.com/QwenLM/qwen-code/pull/7361)) by @chinesepowered
- 允许 simple-git 接受公共 Git 扩展安装所需的受限协议和全局配置设置。 ([#7293](https://github.com/QwenLM/qwen-code/pull/7293)) by @ytahdn
- 对工具响应批次强制执行确定性聚合预算,以防止在所有运行时中超出字符限制。 ([#7323](https://github.com/QwenLM/qwen-code/pull/7323)) by @doudouOUC
- 通过清除继承的沙箱会话 ID 来修复 Docker CI 会话冲突,确保每个子会话生成唯一标识符。 ([#7443](https://github.com/QwenLM/qwen-code/pull/7443)) by @wenshao
### 性能
- perf(autofix): 将集群并发度从 3 提升至 5 ([#7396](https://github.com/QwenLM/qwen-code/pull/7396)) by @wenshao
- perf(telemetry): 延迟加载 SDK,并按协议拆分 OTLP 导出器链 ([#7276](https://github.com/QwenLM/qwen-code/pull/7276)) by @doudouOUC
- perf(autofix): 移除反馈门控对 LLM 审查检查的等待 ([#7416](https://github.com/QwenLM/qwen-code/pull/7416)) by @wenshao
### 文档
- docs(cli): 移除过时的包含目录限制 ([#7326](https://github.com/QwenLM/qwen-code/pull/7326)) by @ZijianZhang989
### 内部变更
- test: 提高在 CI 资源争用情况下不稳定的 I/O 绑定测试的超时上限 ([#7230](https://github.com/QwenLM/qwen-code/pull/7230)) by @wenshao
- test(autofix): 端到端验证 SKILL 阶段与 resolve 阶段的契约 ([#7227](https://github.com/QwenLM/qwen-code/pull/7227)) by @wenshao
- test(channels): 添加记忆召回评估基线 ([#7220](https://github.com/QwenLM/qwen-code/pull/7220)) by @qwen-code-dev-bot
- test(autofix): 将工作流断言与拆分后的模型变量同步 ([#7297](https://github.com/QwenLM/qwen-code/pull/7297)) by @yiliang114
- test(feishu): 强制执行 Markdown 分块限制断言 ([#7324](https://github.com/QwenLM/qwen-code/pull/7324)) by @ZijianZhang989
- ci: 将发布说明分类器从单 PR 工作流移至发布时批处理 ([#7339](https://github.com/QwenLM/qwen-code/pull/7339)) by @yiliang114
- chore: 为 cua-driver 和 mobile-mcp 添加 CODEOWNERS ([#7369](https://github.com/QwenLM/qwen-code/pull/7369)) by @qwen-code-dev-bot
- chore: 将 CODEOWNERS 简化为包级规则 ([#7376](https://github.com/QwenLM/qwen-code/pull/7376)) by @pomelo-nwu
- chore(docs,test): 批量修复三项文档与测试问题 ([#7373](https://github.com/QwenLM/qwen-code/pull/7373)) by @ZijianZhang989
- 添加测试以验证在普通会话和 worktree 会话中工件文件路径均能正确解析。 ([#7434](https://github.com/QwenLM/qwen-code/pull/7434)) by @wenshao
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/v0.20.0...v0.20.1
<!-- qwen-release-notes:v1 -->
## Highlights
_See the complete change list below._
## Breaking Changes
No known breaking changes.
## Complete Change List
### Features
- feat(autofix): label-driven takeover and release; fix forced-dispatch green no-op ([#7165](https://github.com/QwenLM/qwen-code/pull/7165)) by @wenshao
- feat(autofix): direct takeover of maintainer-fork PRs ([#7213](https://github.com/QwenLM/qwen-code/pull/7213)) by @wenshao
- feat(daemon): Advertise ACP preheat readiness ([#7200](https://github.com/QwenLM/qwen-code/pull/7200)) by @doudouOUC
- feat(autofix): surface the running model in every autofix report ([#7226](https://github.com/QwenLM/qwen-code/pull/7226)) by @wenshao
- feat(review): retry transient API failures once; surface quota clearly ([#7233](https://github.com/QwenLM/qwen-code/pull/7233)) by @wenshao
- feat(core): inspect persisted conversation branches ([#7185](https://github.com/QwenLM/qwen-code/pull/7185)) by @doudouOUC
- feat(core): Route Plan-mode shell commands by safety ([#7172](https://github.com/QwenLM/qwen-code/pull/7172)) by @doudouOUC
- feat(ci): auto-open a deflake fix issue for confirmed flaky tests ([#7231](https://github.com/QwenLM/qwen-code/pull/7231)) by @wenshao
- feat(autofix): auto-manage the bot's own fork PRs without a label ([#7243](https://github.com/QwenLM/qwen-code/pull/7243)) by @wenshao
- feat(web-shell): worktree-isolated sessions for parallel tasks ([#7221](https://github.com/QwenLM/qwen-code/pull/7221)) by @wenshao
- feat(i18n): update catalan translaiton ([#7253](https://github.com/QwenLM/qwen-code/pull/7253)) by @jordimas
- feat: add CODEOWNERS for core harness modules ([#7304](https://github.com/QwenLM/qwen-code/pull/7304)) by @pomelo-nwu
- feat(web-shell): support custom slash command actions ([#7267](https://github.com/QwenLM/qwen-code/pull/7267)) by @ytahdn
- feat(web-shell): add git commit history browser ([#7204](https://github.com/QwenLM/qwen-code/pull/7204)) by @wenshao
- feat: support workspace display names ([#7179](https://github.com/QwenLM/qwen-code/pull/7179)) by @samuelhsin
- feat(channels): add content-safe memory recall telemetry ([#7338](https://github.com/QwenLM/qwen-code/pull/7338)) by @qqqys
- feat(daemon): restore worktree isolation on session load/resume ([#7262](https://github.com/QwenLM/qwen-code/pull/7262)) by @wenshao
- feat(autofix): re-arm a stranded PR with @qwen-code /retry instead of deleting a marker ([#7354](https://github.com/QwenLM/qwen-code/pull/7354)) by @wenshao
- feat(serve): make ACP initialize handshake timeout configurable ([#7246](https://github.com/QwenLM/qwen-code/pull/7246)) by @qwen-code-dev-bot
- feat(autofix): pick up managed fork PRs in real time instead of waiting for the throttled schedule ([#7350](https://github.com/QwenLM/qwen-code/pull/7350)) by @wenshao
- feat(autofix): resolve the review threads whose findings it implemented ([#7364](https://github.com/QwenLM/qwen-code/pull/7364)) by @wenshao
- feat(autofix): render the managed fleet into the scan's run summary ([#7355](https://github.com/QwenLM/qwen-code/pull/7355)) by @wenshao
- feat(core): add fork_turns to fork subagents ([#7346](https://github.com/QwenLM/qwen-code/pull/7346)) by @DragonnZhang
- feat(auth): add Singapore Token Plan region ([#7280](https://github.com/QwenLM/qwen-code/pull/7280)) by @han-dreamer
- feat(web-shell): surface worktree isolation in the new-session empty state ([#7365](https://github.com/QwenLM/qwen-code/pull/7365)) by @wenshao
- feat(core): add opt-in built-in web_search backed by the DashScope Responses API ([#7215](https://github.com/QwenLM/qwen-code/pull/7215)) by @tanzhenxin
- feat(web-shell): Add sidebar customization API for branding, navigation, session actions, and footer ([#7379](https://github.com/QwenLM/qwen-code/pull/7379)) by @yuanyuanAli
- feat(autofix): raise the strict round cap from 5 to 10 ([#7412](https://github.com/QwenLM/qwen-code/pull/7412)) by @wenshao
- feat(autofix): feed the gate's rejection back so the retry can fix what it broke ([#7368](https://github.com/QwenLM/qwen-code/pull/7368)) by @wenshao
### Bug Fixes
- fix(autofix): stage SKILL.md beside run-agent.mjs so review-address boots (P0, regression from #7165) ([#7225](https://github.com/QwenLM/qwen-code/pull/7225)) by @wenshao
- fix(ci): consolidate issue triage ownership ([#7180](https://github.com/QwenLM/qwen-code/pull/7180)) by @yiliang114
- fix(cli): allow goal controls during active loops ([#7202](https://github.com/QwenLM/qwen-code/pull/7202)) by @yiliang114
- fix(cli): show mode indicator alongside steering hint during streaming ([#7219](https://github.com/QwenLM/qwen-code/pull/7219)) by @qwen-code-dev-bot
- fix(scripts): allow multiple dev:daemon instances by probing Vite port ([#7212](https://github.com/QwenLM/qwen-code/pull/7212)) by @wenshao
- fix(review): say an unread chunk once, under its cause ([#7234](https://github.com/QwenLM/qwen-code/pull/7234)) by @wenshao
- fix(autofix): a no-output crash must not advance the review watermark ([#7229](https://github.com/QwenLM/qwen-code/pull/7229)) by @wenshao
- fix(review): prohibit isolation param in roster output and SKILL.md ([#7235](https://github.com/QwenLM/qwen-code/pull/7235)) by @wenshao
- fix(cli): align npm update checks with global registry ([#7224](https://github.com/QwenLM/qwen-code/pull/7224)) by @yiliang114
- fix(test): deflake tool-control E2E content assertions ([#7261](https://github.com/QwenLM/qwen-code/pull/7261)) by @qwen-code-dev-bot
- fix(sdk): abort SSE request on iterator exit to release daemon subscriber ([#7257](https://github.com/QwenLM/qwen-code/pull/7257)) by @chinesepowered
- fix(core): Enforce Plan mode entry boundary ([#7248](https://github.com/QwenLM/qwen-code/pull/7248)) by @doudouOUC
- fix(channels): exclude discrete ACP messages from replies ([#7223](https://github.com/QwenLM/qwen-code/pull/7223)) by @qwen-code-dev-bot
- fix(ci): create remote-tracking ref for fork PRs in autofix verify gate ([#7281](https://github.com/QwenLM/qwen-code/pull/7281)) by @wenshao
- fix(sdk): clean up SSE requests on errors and dispose ([#7269](https://github.com/QwenLM/qwen-code/pull/7269)) by @doudouOUC
- fix(cli): repaint the TUI after OS sleep/wake or SIGCONT ([#7265](https://github.com/QwenLM/qwen-code/pull/7265)) by @wenshao
- fix(mobile-mcp): restore bounds in UI hierarchy dumps ([#7321](https://github.com/QwenLM/qwen-code/pull/7321)) by @LaZzyMan
- fix(test): stabilize 3 flaky tests (serve startup, usage-stats TTL, TasksStatusMessage keypress) ([#7319](https://github.com/QwenLM/qwen-code/pull/7319)) by @qwen-code-dev-bot
- fix(cli): Preserve cancellation during permission prompts ([#7295](https://github.com/QwenLM/qwen-code/pull/7295)) by @doudouOUC
- fix(core): estimate reasoning_tokens when completion_tokens_details is missing ([#7239](https://github.com/QwenLM/qwen-code/pull/7239)) by @yiliang114
- fix(ci): tighten API error detection to avoid false positive on review prose ([#7328](https://github.com/QwenLM/qwen-code/pull/7328)) by @wenshao
- fix(web-shell): localize extension tag labels ([#7337](https://github.com/QwenLM/qwen-code/pull/7337)) by @callmeYe
- fix(test): stabilize list_directory E2E — accept text output when model skips tool call ([#7342](https://github.com/QwenLM/qwen-code/pull/7342)) by @qwen-code-dev-bot
- fix(autofix): resolve owning package for nested paths; report verify-failed handoffs as not pushed ([#7330](https://github.com/QwenLM/qwen-code/pull/7330)) by @wenshao
- fix(review): retry gh CLI on transient GitHub errors (5xx) and keyring failures ([#7291](https://github.com/QwenLM/qwen-code/pull/7291)) by @wenshao
- fix(channels): deliver background agent replies ([#7336](https://github.com/QwenLM/qwen-code/pull/7336)) by @qwen-code-dev-bot
- fix(web-shell): proxy extension APIs without intercepting modules ([#7294](https://github.com/QwenLM/qwen-code/pull/7294)) by @ytahdn
- fix(dingtalk): retry transient emotion failures ([#7329](https://github.com/QwenLM/qwen-code/pull/7329)) by @qwen-code-dev-bot
- fix(web-shell): respect voice enabled setting ([#7345](https://github.com/QwenLM/qwen-code/pull/7345)) by @callmeYe
- fix(cli): map positional args to optional MCP prompt parameters ([#7317](https://github.com/QwenLM/qwen-code/pull/7317)) by @qwen-code-dev-bot
- fix(cli): include typed directory in /cd tab completion ([#7320](https://github.com/QwenLM/qwen-code/pull/7320)) by @qwen-code-dev-bot
- fix(review): make agent launches and cleanup resilient ([#7259](https://github.com/QwenLM/qwen-code/pull/7259)) by @wenshao
- fix(ci): stop a slow patrol classifier from killing every flaky rerun ([#7358](https://github.com/QwenLM/qwen-code/pull/7358)) by @wenshao
- fix(ci): tell a visuals coverage gap apart from "no visual change" ([#7375](https://github.com/QwenLM/qwen-code/pull/7375)) by @wenshao
- fix: ask when Auto Mode classifier is unavailable ([#7331](https://github.com/QwenLM/qwen-code/pull/7331)) by @LaZzyMan
- fix(autofix): retry a verification-gate crash instead of burying the agent's fix ([#7351](https://github.com/QwenLM/qwen-code/pull/7351)) by @wenshao
- fix(core): validate goal judge terminal evidence ([#7208](https://github.com/QwenLM/qwen-code/pull/7208)) by @qwen-code-dev-bot
- fix(core): hide interaction tools in plain headless mode ([#7285](https://github.com/QwenLM/qwen-code/pull/7285)) by @DragonnZhang
- fix(cli): show worktree branch in status line instead of workspace branch ([#7367](https://github.com/QwenLM/qwen-code/pull/7367)) by @wenshao
- fix(acp-bridge): make detachClient idempotent via per-clientId attach-ref ledger ([#7386](https://github.com/QwenLM/qwen-code/pull/7386)) by @doudouOUC
- fix(autofix): refuse a non-main takeover out loud instead of only in the job log ([#7382](https://github.com/QwenLM/qwen-code/pull/7382)) by @wenshao
- fix(cli): update npm installs safely in background ([#7322](https://github.com/QwenLM/qwen-code/pull/7322)) by @yiliang114
- fix(core): support qwen3.8 side queries on DashScope ([#7303](https://github.com/QwenLM/qwen-code/pull/7303)) by @yiliang114
- fix(autofix): retry a model API error instead of stranding the PR ([#7247](https://github.com/QwenLM/qwen-code/pull/7247)) by @wenshao
- fix(ci): stop /resolve reports from being guillotined mid-sentence ([#7389](https://github.com/QwenLM/qwen-code/pull/7389)) by @wenshao
- fix(web-shell): restore scheduled task reference interactions ([#7313](https://github.com/QwenLM/qwen-code/pull/7313)) by @BZ-D
- fix(core): bound web-fetch post-processing and preserve fetched content on failure ([#7305](https://github.com/QwenLM/qwen-code/pull/7305)) by @tanzhenxin
- fix(core): Fence concurrent ACP session writers ([#7237](https://github.com/QwenLM/qwen-code/pull/7237)) by @doudouOUC
- fix(ci): serialise the two workflows that push to a PR head branch ([#7392](https://github.com/QwenLM/qwen-code/pull/7392)) by @wenshao
- fix(web-shell): persist the daemon bearer token per-tab so it survives refresh ([#7374](https://github.com/QwenLM/qwen-code/pull/7374)) by @zjunothing
- fix(core,cli): drain background notifications outside the subagent's ALS frame ([#7194](https://github.com/QwenLM/qwen-code/pull/7194)) by @zjunothing
- fix(acp-bridge): map Windows-shaped workspace paths to their sandbox mount ([#7228](https://github.com/QwenLM/qwen-code/pull/7228)) by @zjunothing
- fix(core): salvage session usage into the history before deleting transcripts ([#7391](https://github.com/QwenLM/qwen-code/pull/7391)) by @zjunothing
- fix(core): clarify background agent continuation ([#7300](https://github.com/QwenLM/qwen-code/pull/7300)) by @DragonnZhang
- fix(transcript): mark dangling tool history incomplete ([#7340](https://github.com/QwenLM/qwen-code/pull/7340)) by @cxruan
- fix(mcp): add opt-in model payload filtering ([#7413](https://github.com/QwenLM/qwen-code/pull/7413)) by @LaZzyMan
- fix(ci): tell a triage action crash apart from a silent agent ([#7418](https://github.com/QwenLM/qwen-code/pull/7418)) by @wenshao
- fix(acp-bridge): guarantee exactly-once prompt terminal events in daemon serve mode ([#7400](https://github.com/QwenLM/qwen-code/pull/7400)) by @doudouOUC
- fix(dingtalk): anchor @mention strip regex to start of text ([#7401](https://github.com/QwenLM/qwen-code/pull/7401)) by @qwen-code-dev-bot
- fix: support context-inheriting subagents in headless mode ([#7378](https://github.com/QwenLM/qwen-code/pull/7378)) by @DragonnZhang
- fix(cli): soften update-check failure UX — warning instead of error, raise timeout to 5s ([#7409](https://github.com/QwenLM/qwen-code/pull/7409)) by @ComplexSimply
- fix(test): widen daemon boot timeout from 10s to 25s for docker sandbox ([#7419](https://github.com/QwenLM/qwen-code/pull/7419)) by @qwen-code-dev-bot
- fix: worktree sessions unopenable in Web Shell while actively running ([#7424](https://github.com/QwenLM/qwen-code/pull/7424)) by @wenshao
- fix(web-shell): restore context tags in queued and recalled prompts ([#7312](https://github.com/QwenLM/qwen-code/pull/7312)) by @dreamWB
- fix(core): resolve artifact workspacePath against workspace root in worktree sessions ([#7429](https://github.com/QwenLM/qwen-code/pull/7429)) by @wenshao
- fix(cli): classify nested update-check network errors ([#7428](https://github.com/QwenLM/qwen-code/pull/7428)) by @yiliang114
- Fixed intermittent Docker CI test failures caused by session lock files resolving outside the isolated test directory. ([#7439](https://github.com/QwenLM/qwen-code/pull/7439)) by @wenshao
- Regenerated the
[email protected] patch to ensure it applies cleanly during fresh installations and prevents build errors. ([#7407](https://github.com/QwenLM/qwen-code/pull/7407)) by @chiga0
- Relaxed OpenAI wire schema constraints for optional fields to prevent models from being forced to provide mutually exclusive arguments. ([#7344](https://github.com/QwenLM/qwen-code/pull/7344)) by @zjunothing
- Added a 50MB size cap and 30-second timeout to DingTalk media downloads to match Feishu adapter behavior. ([#7361](https://github.com/QwenLM/qwen-code/pull/7361)) by @chinesepowered
- Allowed simple-git to accept restricted protocol and global config settings required for public Git extension installations. ([#7293](https://github.com/QwenLM/qwen-code/pull/7293)) by @ytahdn
- Enforced deterministic aggregate budgeting for batches of tool responses to prevent exceeding character limits across all runtimes. ([#7323](https://github.com/QwenLM/qwen-code/pull/7323)) by @doudouOUC
- Fixed Docker CI session conflicts by clearing inherited sandbox session IDs to ensure each sub-session generates a unique identifier. ([#7443](https://github.com/QwenLM/qwen-code/pull/7443)) by @wenshao
### Performance
- perf(autofix): raise fleet simultaneity from 3 to 5 ([#7396](https://github.com/QwenLM/qwen-code/pull/7396)) by @wenshao
- perf(telemetry): lazy-load the SDK and split OTLP exporter chains by protocol ([#7276](https://github.com/QwenLM/qwen-code/pull/7276)) by @doudouOUC
- perf(autofix): stop the feedback gate waiting on the LLM review check ([#7416](https://github.com/QwenLM/qwen-code/pull/7416)) by @wenshao
### Documentation
- docs(cli): remove stale include directories limit ([#7326](https://github.com/QwenLM/qwen-code/pull/7326)) by @ZijianZhang989
### Internal Changes
- test: raise timeout ceiling for I/O-bound tests flaky under CI contention ([#7230](https://github.com/QwenLM/qwen-code/pull/7230)) by @wenshao
- test(autofix): exercise the SKILL stage↔resolve contract end-to-end ([#7227](https://github.com/QwenLM/qwen-code/pull/7227)) by @wenshao
- test(channels): add memory recall evaluation baseline ([#7220](https://github.com/QwenLM/qwen-code/pull/7220)) by @qwen-code-dev-bot
- test(autofix): sync workflow assertions with split model vars ([#7297](https://github.com/QwenLM/qwen-code/pull/7297)) by @yiliang114
- test(feishu): enforce markdown chunk limit assertion ([#7324](https://github.com/QwenLM/qwen-code/pull/7324)) by @ZijianZhang989
- ci: move release-note classifier from per-PR workflow to release-time batch ([#7339](https://github.com/QwenLM/qwen-code/pull/7339)) by @yiliang114
- chore: add CODEOWNERS for cua-driver and mobile-mcp ([#7369](https://github.com/QwenLM/qwen-code/pull/7369)) by @qwen-code-dev-bot
- chore: simplify CODEOWNERS to package-level rules ([#7376](https://github.com/QwenLM/qwen-code/pull/7376)) by @pomelo-nwu
- chore(docs,test): batch three small docs and test fixes ([#7373](https://github.com/QwenLM/qwen-code/pull/7373)) by @ZijianZhang989
- Added tests to verify that artifact file paths resolve correctly in both ordinary and worktree sessions. ([#7434](https://github.com/QwenLM/qwen-code/pull/7434)) by @wenshao
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.20.0...v0.20.1