<!-- qwen-release-notes:v1 -->
## 亮点
_详见下方的完整变更列表。_
## 破坏性变更
暂无已知的破坏性变更。
## 完整变更列表
### 新功能
- feat(core): 对齐 GenAI 内容遥测字段 ([#7667](https://github.com/QwenLM/qwen-code/pull/7667)) by @doudouOUC
- feat(core): 添加 Goal v3 运行时编排 ([#7664](https://github.com/QwenLM/qwen-code/pull/7664)) by @qqqys
- feat(triage): 停止代理内 CI 轮询,在 CI 完成后最终确定证据和审批 ([#7693](https://github.com/QwenLM/qwen-code/pull/7693)) by @wenshao
- feat(serve): 暴露工作区 Channel 管理 API ([#7637](https://github.com/QwenLM/qwen-code/pull/7637)) by @qqqys
- feat(web-shell): 添加只读的 GitHub Pull Requests 面板 ([#7683](https://github.com/QwenLM/qwen-code/pull/7683)) by @wenshao
- 为外部语料库添加了仅检索的 context_search 工具,由管理员配置,不具备自动召回或写入能力。 ([#7586](https://github.com/QwenLM/qwen-code/pull/7586)) by @doudouOUC
- 引入 `qwen review comment-status` 子命令,用于快速分类现有的行内评论,并在审查运行期间减少 API 调用。 ([#7690](https://github.com/QwenLM/qwen-code/pull/7690)) by @wenshao
- 对审查提交强制执行严格的写入契约,并添加警戒线以检测并标记任何通过终端命令进行的绕过尝试。 ([#7691](https://github.com/QwenLM/qwen-code/pull/7691)) by @wenshao
- 启用运行中守护进程的工作区信任更改热重载,无需重启进程即可立即应用新策略。 ([#7268](https://github.com/QwenLM/qwen-code/pull/7268)) by @doudouOUC
- 添加 `retryInitialDelayMs` 和 `retryMaxDelayMs` 设置,用于配置流侧速率限制重试延迟,以提升提供商兼容性。 ([#7674](https://github.com/QwenLM/qwen-code/pull/7674)) by @jay666mnj
- 更新 `/stats` 命令和 Session 标签页,以显示生成时序指标,包括 TTFT、耗时、输出 token 数和 TPS。 ([#7677](https://github.com/QwenLM/qwen-code/pull/7677)) by @destire-mio
- 添加 GitHub channel 适配器,通过轮询通知并使用基于信号唤醒的架构发布评论来响应提及。 ([#7632](https://github.com/QwenLM/qwen-code/pull/7632)) by @OrbitZore
- 添加可选的 `retryInitialDelayMs` 和 `retryMaxDelayMs` 设置,用于为特定提供商配额窗口配置 SSE 流速率限制重试延迟。 ([#7666](https://github.com/QwenLM/qwen-code/pull/7666)) by @hogeheer499-commits
- 为技能引入可覆盖的默认禁用状态,允许软默认值在显式启用时让步,而硬禁用仍保持绝对。 ([#7357](https://github.com/QwenLM/qwen-code/pull/7357)) by @samuelhsin
- feat(webui): 添加工作区 Channel 管理钩子 ([#7728](https://github.com/QwenLM/qwen-code/pull/7728)) by @qqqys
- feat(review): 将中等工作量重新定义为平衡的验证通过 ([#7733](https://github.com/QwenLM/qwen-code/pull/7733)) by @wenshao
- feat(review): 在测试覆盖率阶段对测试进行变异测试(Agent 5) ([#7735](https://github.com/QwenLM/qwen-code/pull/7735)) by @wenshao
- feat(review): 将维护者审查视角引入代理简报 ([#7736](https://github.com/QwenLM/qwen-code/pull/7736)) by @wenshao
- feat(web-shell): 持久化终端历史记录的分页错误 ([#7709](https://github.com/QwenLM/qwen-code/pull/7709)) by @PratikWayase
- feat(triage): 添加沙箱化的 /verify 深度验证通道 ([#7710](https://github.com/QwenLM/qwen-code/pull/7710)) by @wenshao
- feat(review): 赋予验证器探测能力——运行可运行的声明,而不仅仅是读取它 ([#7756](https://github.com/QwenLM/qwen-code/pull/7756)) by @wenshao
- feat(core): 为子代理生成添加模型等级选择 (#7685) ([#7702](https://github.com/QwenLM/qwen-code/pull/7702)) by @yiliang114
- feat(dingtalk): 支持出站图像传输 ([#7698](https://github.com/QwenLM/qwen-code/pull/7698)) by @qqqys
- feat(web-shell): 允许将侧边栏拓宽至窗口宽度的一半 ([#7778](https://github.com/QwenLM/qwen-code/pull/7778)) by @wenshao
- feat(core): 添加 Goal v3 工作器工具 ([#7729](https://github.com/QwenLM/qwen-code/pull/7729)) by @qqqys
- feat(review): 将 script-lint 作为确定性门控——compose-review 读取报告,无需代理 ([#7751](https://github.com/QwenLM/qwen-code/pull/7751)) by @wenshao
- feat(web-shell): 添加监控任务详情 ([#7817](https://github.com/QwenLM/qwen-code/pull/7817)) by @ytahdn
- feat(web-shell): 将语音范围限定为 composer 工作区 ([#7754](https://github.com/QwenLM/qwen-code/pull/7754)) by @doudouOUC
- feat(hooks): 添加已提交提示词的溯源信息 ([#7762](https://github.com/QwenLM/qwen-code/pull/7762)) by @doudouOUC
- feat(autofix): 重试一次确定性拒绝 ([#7796](https://github.com/QwenLM/qwen-code/pull/7796)) by @qqqys
- feat(web-shell): 添加 Channel 管理页面 ([#7793](https://github.com/QwenLM/qwen-code/pull/7793)) by @qqqys
- feat(acp): 添加会话级运行时 MCP ([#7847](https://github.com/QwenLM/qwen-code/pull/7847)) by @qqqys
- feat(core): 持久化并回放 Goal v3 状态 ([#7815](https://github.com/QwenLM/qwen-code/pull/7815)) by @qqqys
- feat(core): 添加全分辨率图像缩放工具 ([#7809](https://github.com/QwenLM/qwen-code/pull/7809)) by @qqqys
- feat(web-shell): 添加 composer 页脚渲染器 ([#7856](https://github.com/QwenLM/qwen-code/pull/7856)) by @dreamWB
- feat: 将会话写入者租约置于 opt-in 机制之后 ([#7894](https://github.com/QwenLM/qwen-code/pull/7894)) by @doudouOUC
- feat(ci): 通过在现有 issue 上评论来去重 E2E 失败问题 ([#7792](https://github.com/QwenLM/qwen-code/pull/7792)) by @yiliang114
- feat(triage): 添加 revert-pattern 高风险路径检测 ([#7414](https://github.com/QwenLM/qwen-code/pull/7414)) by @yiliang114
- feat(web-shell): 添加原生工作区文件夹选择器 ([#7849](https://github.com/QwenLM/qwen-code/pull/7849)) by @qqqys
- feat(web-shell): 添加 Channel 配置流程 ([#7893](https://github.com/QwenLM/qwen-code/pull/7893)) by @qqqys
- feat(core): 添加 ARMS 会话用户 ID ([#7921](https://github.com/QwenLM/qwen-code/pull/7921)) by @doudouOUC
- feat(channels): 在守护进程会话中暴露循环工具 ([#7891](https://github.com/QwenLM/qwen-code/pull/7891)) by @qqqys
- feat(web-shell): 遵循语音保持模式 ([#7839](https://github.com/QwenLM/qwen-code/pull/7839)) by @callmeYe
- feat(web-shell): 管理 Channel 配对请求 ([#7909](https://github.com/QwenLM/qwen-code/pull/7909)) by @qqqys
- feat(channels): 按原因分发 GitHub 通知 ([#7826](https://github.com/QwenLM/qwen-code/pull/7826)) by @yiliang114
- feat(web-shell): 添加 git 分支选择器、提交对话框和创建 PR 流程 ([#7731](https://github.com/QwenLM/qwen-code/pull/7731)) by @wenshao
- feat(triage): 在 CI 路径上显示沙盒通道 ([#7917](https://github.com/QwenLM/qwen-code/pull/7917)) by @wenshao
- feat(web-shell): 为次要问题建议 BTW ([#7935](https://github.com/QwenLM/qwen-code/pull/7935)) by @carffuca
- feat(triage): 使验证报告可读为中文 ([#7918](https://github.com/QwenLM/qwen-code/pull/7918)) by @wenshao
### Bug Fixes
- fix(cli): 在所有地方使用本地时间测量洞察天数和小时数 ([#7670](https://github.com/QwenLM/qwen-code/pull/7670)) by @ComplexSimply
- fix(ci): 当无可清理内容时,不使 triage 清理失败 ([#7688](https://github.com/QwenLM/qwen-code/pull/7688)) by @wenshao
- fix(ci): 更新 runner 活动 npm 前缀中的 qwen ([#7689](https://github.com/QwenLM/qwen-code/pull/7689)) by @yiliang114
- fix(acp): 在每个提示轮次结束时清理审查 worktree 租约 ([#7694](https://github.com/QwenLM/qwen-code/pull/7694)) by @wenshao
- fix(core): 写入状态 sidecar,使模型不再误读安静的后台 shell ([#7669](https://github.com/QwenLM/qwen-code/pull/7669)) by @ComplexSimply
- fix(core): exit_plan_mode 返回 execute() 的指导错误,而非权限拒绝 ([#7673](https://github.com/QwenLM/qwen-code/pull/7673)) by @qwen-code-dev-bot
- fix(core): 告知模型用户何时手动退出计划模式 ([#7682](https://github.com/QwenLM/qwen-code/pull/7682)) by @zjunothing
- fix(core): 为同一仓库的插件分配不同的扩展 ID ([#7676](https://github.com/QwenLM/qwen-code/pull/7676)) by @zjunothing
- fix(core): 允许无需确认提示即可读取已保存的计划文件 ([#7678](https://github.com/QwenLM/qwen-code/pull/7678)) by @zjunothing
- fix(cli): 当代理在轮次中途自动恢复时,清除过期的重试错误 ([#7681](https://github.com/QwenLM/qwen-code/pull/7681)) by @qwen-code-dev-bot
- fix(mcp): 强化 OAuth 回调处理 ([#7510](https://github.com/QwenLM/qwen-code/pull/7510)) by @gauravyad86
- fix(web-shell): 为 GitHub PR 列表行添加 :focus-visible 轮廓 ([#7704](https://github.com/QwenLM/qwen-code/pull/7704)) by @wenshao
- fix(triage): 在补丁时通过标记解析阶段评论 ID,强化模型注入 ([#7703](https://github.com/QwenLM/qwen-code/pull/7703)) by @wenshao
- fix(triage): 从开放 PR 列表解析最终化 PR,而非提交关联 ([#7706](https://github.com/QwenLM/qwen-code/pull/7706)) by @wenshao
- 修复内联数学识别,以正确处理正文和表格中的单字符表达式、转义美元符号和代码跨度。 ([#7701](https://github.com/QwenLM/qwen-code/pull/7701)) by @CubeLander
- 修复桌面文件大小显示,以正确渲染太字节及更大值,避免对超大文件显示 undefined。 ([#7623](https://github.com/QwenLM/qwen-code/pull/7623)) by @chinesepowered
- 确保在 OpenAPI 3.0 转换期间正确字符串化由 const 派生的枚举,以满足严格的 schema 要求。 ([#7547](https://github.com/QwenLM/qwen-code/pull/7547)) by @chinesepowered
- 修复 schema 转换,即使属性名匹配 JSON Schema 约束关键字(如 maximum)也能正确处理嵌套对象。 ([#7546](https://github.com/QwenLM/qwen-code/pull/7546)) by @chinesepowered
- 静默 headless shell 终端中的 xterm.js 解析器诊断日志,以防止命令发出无效 ANSI 转义序列时泄露错误消息。 ([#7663](https://github.com/QwenLM/qwen-code/pull/7663)) by @mvanhorn
- 通过声明 CommentStatusArgs 中的可选 host 参数并改进认证或网络故障的错误处理,强化审查技能。 ([#7708](https://github.com/QwenLM/qwen-code/pull/7708)) by @wenshao
- 确保在流式循环中检测到循环触发提前返回时,StopFailure 钩子能正确触发,而不仅限于 API 错误。 ([#7592](https://github.com/QwenLM/qwen-code/pull/7592)) by @qwen-code-dev-bot
- 通过将正确的 git 工作目录贯穿整个栈,为 Web Shell 中的 worktree 会话启用更改和历史记录对话框。 ([#7695](https://github.com/QwenLM/qwen-code/pull/7695)) by @wenshao
- 严格解析 heatmapDays 查询参数,拒绝负数或小数等格式错误的值,回退到默认值而非钳位无效输入。 ([#7218](https://github.com/QwenLM/qwen-code/pull/7218)) by @VectorPeak
- 将默认实时日志上限提高至 10,000 个事件和 8 MiB,同时暴露 --max-journal-events 和 --max-journal-bytes 标志以供配置。 ([#7715](https://github.com/QwenLM/qwen-code/pull/7715)) by @wenshao
- 允许在 Web Shell 侧边栏中固定和分组次要工作区会话,无需先锁定工作区。 ([#7716](https://github.com/QwenLM/qwen-code/pull/7716)) by @wenshao
- 修正审查提交门控审计,避免在检测到来自其他来源(如 triage 机器人)的有效同账户写入时错误声称已绕过。 ([#7718](https://github.com/QwenLM/qwen-code/pull/7718)) by @wenshao
- 修复 QQ Bot 会话恢复问题:通过从 AcpBridge 返回输入的会话 ID,并确保即使验证失败也会运行会话补丁。 ([#7722](https://github.com/QwenLM/qwen-code/pull/7722)) by @Eric-GoodBoy-Tech
- fix(core): 防止更新由扩展提供的代理 ([#7245](https://github.com/QwenLM/qwen-code/pull/7245)) by @destire-mio
- fix(core): 当内置 ripgrep 无法运行时回退到系统 rg ([#7203](https://github.com/QwenLM/qwen-code/pull/7203)) by @harjothkhara
- fix(core): 在 DashScope 思考过程中避免使用必需工具 ([#7661](https://github.com/QwenLM/qwen-code/pull/7661)) by @hogeheer499-commits
- fix(channels): 在 GitHub 适配器中使用用户名作为 senderId 以修复白名单门控 ([#7727](https://github.com/QwenLM/qwen-code/pull/7727)) by @OrbitZore
- fix(web-shell): 在 parseAnsi 中解析 256 色和真彩色 SGR 序列 ([#7620](https://github.com/QwenLM/qwen-code/pull/7620)) by @chinesepowered
- fix(triage): 仅机器人自身的审批才算作已批准 ([#7737](https://github.com/QwenLM/qwen-code/pull/7737)) by @wenshao
- fix(core): 停止为永远不会发生的间隔生成 humanReadableCron 名称 ([#7529](https://github.com/QwenLM/qwen-code/pull/7529)) by @chinesepowered
- fix(cli): 在页脚更新后保持 IME 光标对齐 ([#7711](https://github.com/QwenLM/qwen-code/pull/7711)) by @water-in-stone
- fix(core): 在批准退出 plan_mode 后从历史记录中脱敏计划参数 ([#7197](https://github.com/QwenLM/qwen-code/pull/7197)) by @zjunothing
- fix(review): 修正借用透镜和空测试的严重性(#7735/#7736 的后续) ([#7746](https://github.com/QwenLM/qwen-code/pull/7746)) by @wenshao
- fix(core): 可靠地传递手动计划退出通知 ([#7744](https://github.com/QwenLM/qwen-code/pull/7744)) by @doudouOUC
- fix(review): 当计划省略 Han 标志时,从实时 PR 恢复双语寄存器 ([#7739](https://github.com/QwenLM/qwen-code/pull/7739)) by @wenshao
- fix(cli): 补全重复的技能斜杠命令 ([#7720](https://github.com/QwenLM/qwen-code/pull/7720)) by @Sparkle6979
- fix(cli): 处理内联数学公式周围的转义美元符号 ([#7741](https://github.com/QwenLM/qwen-code/pull/7741)) by @CubeLander
- fix(cli): 在多工具紧凑摘要中显示工具描述 ([#7589](https://github.com/QwenLM/qwen-code/pull/7589)) by @ovochouovo
- fix(ci): 重命名 triage 状态标记以避免重复守卫冲突 ([#7723](https://github.com/QwenLM/qwen-code/pull/7723)) by @yiliang114
- fix(core): 将无 ID 的连续块路由到冲突的工具调用打开者的槽位 ([#6981](https://github.com/QwenLM/qwen-code/pull/6981)) by @he-yufeng
- fix(autofix): 回复每个审查线程,仅解决实际已修复的线程 ([#7758](https://github.com/QwenLM/qwen-code/pull/7758)) by @wenshao
- fix(core): 在 toOpenAPI30 中将 properties 视为名称映射 ([#7760](https://github.com/QwenLM/qwen-code/pull/7760)) by @chinesepowered
- fix(core): 保留 gitignore 模式中的前导空格 ([#7763](https://github.com/QwenLM/qwen-code/pull/7763)) by @chinesepowered
- fix(core): 防止尾部斜杠锚定嵌套的 gitignore 模式 ([#7764](https://github.com/QwenLM/qwen-code/pull/7764)) by @chinesepowered
- fix(core): 当模型 ID 携带变体标签时保留模型名称 ([#7766](https://github.com/QwenLM/qwen-code/pull/7766)) by @chinesepowered
- fix(weixin): 创建时即设为私有的账户凭证文件 ([#7726](https://github.com/QwenLM/qwen-code/pull/7726)) by @chinesepowered
- fix(core): 停止重写 gitignore 模式中的反斜杠转义 ([#7765](https://github.com/QwenLM/qwen-code/pull/7765)) by @chinesepowered
- fix(core): 将超时否决的范围限制在其出现的片段内 ([#7776](https://github.com/QwenLM/qwen-code/pull/7776)) by @chinesepowered
- fix(core): 拒绝以 ] 开头的括号表达式的 sed 模式 ([#7775](https://github.com/QwenLM/qwen-code/pull/7775)) by @chinesepowered
- fix(web-shell): 稳定移动端语音输入 ([#7806](https://github.com/QwenLM/qwen-code/pull/7806)) by @ytahdn
- fix(test): 为每个 E2E 测试用例重新提供干净目录 ([#7811](https://github.com/QwenLM/qwen-code/pull/7811)) by @wenshao
- fix(web-shell): 允许在无会话的新任务中执行 shell 命令 ([#7724](https://github.com/QwenLM/qwen-code/pull/7724)) by @wenshao
- fix(triage): 将 /verify 通道的加固措施同步至 /tmux ([#7753](https://github.com/QwenLM/qwen-code/pull/7753)) by @wenshao
- fix(web-shell): 将任务通知渲染为系统消息 ([#7822](https://github.com/QwenLM/qwen-code/pull/7822)) by @ytahdn
- fix(ci): 在 qwen-triage 的容器作业中添加默认 bash shell ([#7838](https://github.com/QwenLM/qwen-code/pull/7838)) by @qwen-code-dev-bot
- fix(web-shell): 在 composer 中保留粘贴的文本 ([#7824](https://github.com/QwenLM/qwen-code/pull/7824)) by @ytahdn
- fix(ci): 为容器作业添加 git safe.directory 配置 ([#7843](https://github.com/QwenLM/qwen-code/pull/7843)) by @qwen-code-dev-bot
- fix(ci): 为容器作业添加 --init 参数以回收僵尸进程 ([#7848](https://github.com/QwenLM/qwen-code/pull/7848)) by @qwen-code-dev-bot
- fix(core): 在结算后台 shell 前等待输出流刷新完成 ([#7833](https://github.com/QwenLM/qwen-code/pull/7833)) by @ComplexSimply
- fix(scripts): 重试模型调用并展示降级版的发布说明 ([#7535](https://github.com/QwenLM/qwen-code/pull/7535)) by @he-yufeng
- fix(ci): 防止 worktree 清理操作导致 verify 作业失败 ([#7857](https://github.com/QwenLM/qwen-code/pull/7857)) by @qwen-code-dev-bot
- fix(release): 发布所有通道包,而不仅仅是 channel-base ([#7845](https://github.com/QwenLM/qwen-code/pull/7845)) by @yiliang114
- fix(scripts): 强化重试分类逻辑并保留超时错误上下文 ([#7854](https://github.com/QwenLM/qwen-code/pull/7854)) by @yiliang114
- fix(core): 对永久性配额耗尽的 429 错误快速失败,而非静默重试 ([#7842](https://github.com/QwenLM/qwen-code/pull/7842)) by @yiliang114
- fix(web-shell): 隔离历史记录与会话草稿 ([#7810](https://github.com/QwenLM/qwen-code/pull/7810)) by @ytahdn
- fix(triage): 在归咎于 PR 之前,先重试一次瞬态的 npm ci ([#7884](https://github.com/QwenLM/qwen-code/pull/7884)) by @wenshao
- fix(webui): 在转录分页锚点处回退使用 history_truncated 标记的 recordId ([#7829](https://github.com/QwenLM/qwen-code/pull/7829)) by @wenshao
- fix(review): 让审查重试使用剩余的时间预算 ([#7852](https://github.com/QwenLM/qwen-code/pull/7852)) by @wenshao
- fix(integration): 为已提交提示词溯源测试配置 Docker 沙箱网络 (#7879) ([#7881](https://github.com/QwenLM/qwen-code/pull/7881)) by @qwen-code-dev-bot
- fix(cli): 报告真实的 $0.00 成本而非 N/A ([#7784](https://github.com/QwenLM/qwen-code/pull/7784)) by @chinesepowered
- fix(core): 拒绝 socks5h 和 socks4a 代理 URL ([#7786](https://github.com/QwenLM/qwen-code/pull/7786)) by @chinesepowered
- fix(core): 修正 checkContentLoop 中的字符类 ([#7788](https://github.com/QwenLM/qwen-code/pull/7788)) by @chinesepowered
- fix(web-shell): 使仅带索引的 /copy 命令生效 ([#7789](https://github.com/QwenLM/qwen-code/pull/7789)) by @chinesepowered
- fix(core): 拒绝 -i 不在末尾的合并 sed 标志 ([#7790](https://github.com/QwenLM/qwen-code/pull/7790)) by @chinesepowered
- fix(core): 将 Grep 模式放在 -e 之后传递,以避免前导连字符被误认为选项 ([#7863](https://github.com/QwenLM/qwen-code/pull/7863)) by @chinesepowered
- fix(core): 像其他所有 getErrorMessage 路径一样,限制裸 Error 消息的长度 ([#7865](https://github.com/QwenLM/qwen-code/pull/7865)) by @chinesepowered
- fix(cli): 使 wrapToVisualLines 像其兄弟函数一样计算零宽字符 ([#7873](https://github.com/QwenLM/qwen-code/pull/7873)) by @chinesepowered
- fix(core): 将分隔符和省略号计入预览预算 ([#7874](https://github.com/QwenLM/qwen-code/pull/7874)) by @chinesepowered
- fix(cli): 在重新打开分割围栏时,不计算部分尾部行 ([#7875](https://github.com/QwenLM/qwen-code/pull/7875)) by @chinesepowered
- fix(cli): 使 /copy <message> <index> 选择代码块 ([#7883](https://github.com/QwenLM/qwen-code/pull/7883)) by @chinesepowered
- fix(test): 恢复首次输出基准测试的测量有效性并修正其制品架构 ([#7820](https://github.com/QwenLM/qwen-code/pull/7820)) by @doudouOUC
- fix(daemon): 加固 Todo 停止守卫的延续逻辑 ([#7821](https://github.com/QwenLM/qwen-code/pull/7821)) by @doudouOUC
- fix(core): 从公共 git 目录读取 stash reflog ([#7774](https://github.com/QwenLM/qwen-code/pull/7774)) by @chinesepowered
- fix(core): 在 toOpenAPI30 中保留 Draft 4 布尔值的互斥边界 ([#7782](https://github.com/QwenLM/qwen-code/pull/7782)) by @chinesepowered
- fix(core): 将 maxDepth 应用于平面格式内存导入 ([#7851](https://github.com/QwenLM/qwen-code/pull/7851)) by @chinesepowered
- fix(core): 渲染思考部分的推理内容而非布尔标志 ([#7866](https://github.com/QwenLM/qwen-code/pull/7866)) by @chinesepowered
- fix(core): 为纯文本模型桥接工具结果图片 ([#7484](https://github.com/QwenLM/qwen-code/pull/7484)) by @LaZzyMan
- fix(cli): 修补 ink 以在间接子树移除时清除 staticNode ([#7816](https://github.com/QwenLM/qwen-code/pull/7816)) by @chiga0
- fix(core): 在 API 调用期间自动重试瞬态网络错误 ([#7898](https://github.com/QwenLM/qwen-code/pull/7898)) by @chiga0
- fix(cli): 隐藏来自之前轮次的过期粘性待办事项 ([#7900](https://github.com/QwenLM/qwen-code/pull/7900)) by @chiga0
- fix(serve): 在关闭时释放托管会话写入器锁 ([#7812](https://github.com/QwenLM/qwen-code/pull/7812)) by @doudouOUC
- fix(cli): 为 git 分支名称显示添加轮询回退机制 ([#7830](https://github.com/QwenLM/qwen-code/pull/7830)) by @qwen-code-dev-bot
- fix(cli): 从 @mention 工具卡片中移除冗余的“Read file”前缀 ([#7902](https://github.com/QwenLM/qwen-code/pull/7902)) by @qwen-code-dev-bot
- fix(safe-mode): 保留调用方提供的一级 MCP 服务器 ([#7827](https://github.com/QwenLM/qwen-code/pull/7827)) by @VitaliBabkin
- fix(ci): 保持 main 分支上合并后的 E2E 信号存活 ([#7795](https://github.com/QwenLM/qwen-code/pull/7795)) by @wenshao
- fix(core): 当输出流无法刷新时,短路刷新等待 ([#7905](https://github.com/QwenLM/qwen-code/pull/7905)) by @ComplexSimply
- fix(core): 在 splitCommands 中跟踪命令替换内部的引号 ([#7870](https://github.com/QwenLM/qwen-code/pull/7870)) by @chinesepowered
- fix(core): 将每个服务器和每个工具的 always-allow 结果计为批准 ([#7869](https://github.com/QwenLM/qwen-code/pull/7869)) by @chinesepowered
- fix(web-shell): 在启动新聊天时向主机报告预期的工作区 ([#7910](https://github.com/QwenLM/qwen-code/pull/7910)) by @wenshao
- fix(cli): 默认使用虚拟化的终端历史 ([#5738](https://github.com/QwenLM/qwen-code/pull/5738)) by @ZevGit
- fix(ci): 在清理过程中恢复工作区所有权以防止 EACCES ([#7931](https://github.com/QwenLM/qwen-code/pull/7931)) by @qwen-code-dev-bot
- fix(review): 当未重新传递 --effort 时恢复已解决的 effort ([#7855](https://github.com/QwenLM/qwen-code/pull/7855)) by @wenshao
- fix(scripts): 精简发布说明模型提示词并记录请求耗时 ([#7941](https://github.com/QwenLM/qwen-code/pull/7941)) by @yiliang114
- fix(release): 在发布版本升级期间将 channel-base 依赖固定为确切版本 ([#7953](https://github.com/QwenLM/qwen-code/pull/7953)) by @yiliang114
- fix(triage): 使构建过程守卫具备可诊断性和僵尸进程感知能力 ([#7858](https://github.com/QwenLM/qwen-code/pull/7858)) by @wenshao
- fix(ci): 为每个作业分配独立的代理包装器目录 ([#7951](https://github.com/QwenLM/qwen-code/pull/7951)) by @wenshao
### 性能优化
- perf(cli): 在守护进程路由中缓存 GitHub PR 列表,TTL 设为 60 秒 ([#7705](https://github.com/QwenLM/qwen-code/pull/7705)) by @wenshao
- perf(core): 将易变的自动记忆部分置于系统提示词末尾 ([#7651](https://github.com/QwenLM/qwen-code/pull/7651)) by @DragonnZhang
- perf(web-shell): 在 git 状态检查完成前预渲染 composer 的 git 标识 ([#7680](https://github.com/QwenLM/qwen-code/pull/7680)) by @wenshao
- perf(core): 首次使用时懒加载依赖项 ([#7686](https://github.com/QwenLM/qwen-code/pull/7686)) by @doudouOUC
- perf(cli): 替换 comment-json 配置解析器 ([#7747](https://github.com/QwenLM/qwen-code/pull/7747)) by @doudouOUC
- perf(acp): 会话创建后预加载提供者 ([#7767](https://github.com/QwenLM/qwen-code/pull/7767)) by @doudouOUC
- perf(core): 在稳定的系统前缀处添加早期 Anthropic 缓存断点 ([#7912](https://github.com/QwenLM/qwen-code/pull/7912)) by @DragonnZhang
- perf(ci): 将 E2E 测试套件运行时间从约 40 分钟缩短至约 24 分钟 ([#7798](https://github.com/QwenLM/qwen-code/pull/7798)) by @wenshao
### 文档
- docs(channels): 补充循环与主动推送机制的文档说明 ([#7628](https://github.com/QwenLM/qwen-code/pull/7628)) by @wenshao
### 内部改进
- refactor(autofix): 提取审查验证运行器 ([#7644](https://github.com/QwenLM/qwen-code/pull/7644)) by @qqqys
- test(web-shell): 在可视化测试套件中捕获 git 模式的新分支子状态 ([#7672](https://github.com/QwenLM/qwen-code/pull/7672)) by @wenshao
- 重构系统提示词组装逻辑,采用分层构建器以显式管理稳定层、上下文层和易变指令层。 ([#7707](https://github.com/QwenLM/qwen-code/pull/7707)) by @DragonnZhang
- 新增回归测试,验证恢复会话的对话记录分页能正确对边界进行 URL 编码,并在重试时保持状态。 ([#7657](https://github.com/QwenLM/qwen-code/pull/7657)) by @jay666mnj
- test(cli): 覆盖虚拟列表底部固定行为的测试用例 ([#7652](https://github.com/QwenLM/qwen-code/pull/7652)) by @jay666mnj
- ci: 当 npm 无法响应时,确保关键审计门禁机制严格把关 ([#7743](https://github.com/QwenLM/qwen-code/pull/7743)) by @wenshao
- test(integration): 修复工具控制权限测试用例的不稳定问题 ([#7725](https://github.com/QwenLM/qwen-code/pull/7725)) by @yiliang114
- revert: 移除陈旧基础分支的恢复机制 (#7602) ([#7640](https://github.com/QwenLM/qwen-code/pull/7640)) by @wenshao
- test(serve): 新增首字输出延迟基准测试 ([#7761](https://github.com/QwenLM/qwen-code/pull/7761)) by @doudouOUC
- test(channels): 在 CI 中运行飞书、微信和 QQ 机器人测试套件 ([#7853](https://github.com/QwenLM/qwen-code/pull/7853)) by @chinesepowered
## 新贡献者
- @jay666mnj 在 [#7674](https://github.com/QwenLM/qwen-code/pull/7674) 中完成了首次贡献
- @harjothkhara 在 [#7203](https://github.com/QwenLM/qwen-code/pull/7203) 中完成了首次贡献
- @PratikWayase 在 [#7709](https://github.com/QwenLM/qwen-code/pull/7709) 中完成了首次贡献
- @Sparkle6979 在 [#7720](https://github.com/QwenLM/qwen-code/pull/7720) 中完成了首次贡献
- @VitaliBabkin 在 [#7827](https://github.com/QwenLM/qwen-code/pull/7827) 中完成了首次贡献
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/v0.21.0...v0.21.1
<!-- qwen-release-notes:v1 -->
## Highlights
_See the complete change list below._
## Breaking Changes
No known breaking changes.
## Complete Change List
### Features
- feat(core): Align GenAI content telemetry fields ([#7667](https://github.com/QwenLM/qwen-code/pull/7667)) by @doudouOUC
- feat(core): add Goal v3 runtime orchestration ([#7664](https://github.com/QwenLM/qwen-code/pull/7664)) by @qqqys
- feat(triage): stop in-agent CI polling, finalize evidence and approval after CI completes ([#7693](https://github.com/QwenLM/qwen-code/pull/7693)) by @wenshao
- feat(serve): expose workspace Channel management API ([#7637](https://github.com/QwenLM/qwen-code/pull/7637)) by @qqqys
- feat(web-shell): add read-only GitHub pull requests panel ([#7683](https://github.com/QwenLM/qwen-code/pull/7683)) by @wenshao
- Adds a retrieval-only context_search tool for external corpora, configured by administrators without automatic recall or write capabilities. ([#7586](https://github.com/QwenLM/qwen-code/pull/7586)) by @doudouOUC
- Introduces the qwen review comment-status subcommand to quickly triage existing inline comments and reduce API calls during review runs. ([#7690](https://github.com/QwenLM/qwen-code/pull/7690)) by @wenshao
- Enforces a strict write contract for review submissions and adds a tripwire to detect and flag any bypass attempts via terminal commands. ([#7691](https://github.com/QwenLM/qwen-code/pull/7691)) by @wenshao
- Enables hot-reloading of workspace trust changes in the running daemon, applying new policies immediately without requiring a process restart. ([#7268](https://github.com/QwenLM/qwen-code/pull/7268)) by @doudouOUC
- Adds retryInitialDelayMs and retryMaxDelayMs settings to configure stream-side rate-limit retry delays for better provider compatibility. ([#7674](https://github.com/QwenLM/qwen-code/pull/7674)) by @jay666mnj
- Updates the /stats command and Session tab to display generation timing metrics including TTFT, duration, output tokens, and TPS. ([#7677](https://github.com/QwenLM/qwen-code/pull/7677)) by @destire-mio
- Adds a GitHub channel adapter that polls notifications and responds to mentions by posting comments using a signal-based wakeup architecture. ([#7632](https://github.com/QwenLM/qwen-code/pull/7632)) by @OrbitZore
- Adds optional retryInitialDelayMs and retryMaxDelayMs settings to configure SSE stream rate-limit retry delays for specific provider quota windows. ([#7666](https://github.com/QwenLM/qwen-code/pull/7666)) by @hogeheer499-commits
- Introduces an overridable default-disabled state for skills, allowing soft defaults that yield to explicit enablement while hard disables remain absolute. ([#7357](https://github.com/QwenLM/qwen-code/pull/7357)) by @samuelhsin
- feat(webui): add workspace Channel management hook ([#7728](https://github.com/QwenLM/qwen-code/pull/7728)) by @qqqys
- feat(review): redefine medium effort as a balanced verified pass ([#7733](https://github.com/QwenLM/qwen-code/pull/7733)) by @wenshao
- feat(review): mutation-test the tests in the test-coverage pass (Agent 5) ([#7735](https://github.com/QwenLM/qwen-code/pull/7735)) by @wenshao
- feat(review): borrow maintainer review lenses into the agent briefs ([#7736](https://github.com/QwenLM/qwen-code/pull/7736)) by @wenshao
- feat(web-shell): persist terminal history pagination errors ([#7709](https://github.com/QwenLM/qwen-code/pull/7709)) by @PratikWayase
- feat(triage): add sandboxed /verify deep-verification lane ([#7710](https://github.com/QwenLM/qwen-code/pull/7710)) by @wenshao
- feat(review): give the verifier a probe capability — run a runnable claim, don't just read it ([#7756](https://github.com/QwenLM/qwen-code/pull/7756)) by @wenshao
- feat(core): add model grade selection for subagent spawn (#7685) ([#7702](https://github.com/QwenLM/qwen-code/pull/7702)) by @yiliang114
- feat(dingtalk): support outbound image delivery ([#7698](https://github.com/QwenLM/qwen-code/pull/7698)) by @qqqys
- feat(web-shell): allow widening sidebar up to half the window width ([#7778](https://github.com/QwenLM/qwen-code/pull/7778)) by @wenshao
- feat(core): add Goal v3 worker tools ([#7729](https://github.com/QwenLM/qwen-code/pull/7729)) by @qqqys
- feat(review): script-lint as a deterministic gate — compose-review reads the report, no agent ([#7751](https://github.com/QwenLM/qwen-code/pull/7751)) by @wenshao
- feat(web-shell): add monitor task details ([#7817](https://github.com/QwenLM/qwen-code/pull/7817)) by @ytahdn
- feat(web-shell): Scope voice to composer workspace ([#7754](https://github.com/QwenLM/qwen-code/pull/7754)) by @doudouOUC
- feat(hooks): Add submitted prompt provenance ([#7762](https://github.com/QwenLM/qwen-code/pull/7762)) by @doudouOUC
- feat(autofix): retry deterministic rejection once ([#7796](https://github.com/QwenLM/qwen-code/pull/7796)) by @qqqys
- feat(web-shell): add Channel management page ([#7793](https://github.com/QwenLM/qwen-code/pull/7793)) by @qqqys
- feat(acp): add session-scoped runtime MCP ([#7847](https://github.com/QwenLM/qwen-code/pull/7847)) by @qqqys
- feat(core): persist and replay Goal v3 state ([#7815](https://github.com/QwenLM/qwen-code/pull/7815)) by @qqqys
- feat(core): add full-resolution image zoom tool ([#7809](https://github.com/QwenLM/qwen-code/pull/7809)) by @qqqys
- feat(web-shell): add composer footer renderer ([#7856](https://github.com/QwenLM/qwen-code/pull/7856)) by @dreamWB
- feat: Gate session writer lease behind opt-in ([#7894](https://github.com/QwenLM/qwen-code/pull/7894)) by @doudouOUC
- feat(ci): Deduplicate E2E failure issues by commenting on existing issue ([#7792](https://github.com/QwenLM/qwen-code/pull/7792)) by @yiliang114
- feat(triage): add revert-pattern high-risk path detection ([#7414](https://github.com/QwenLM/qwen-code/pull/7414)) by @yiliang114
- feat(web-shell): add native workspace folder picker ([#7849](https://github.com/QwenLM/qwen-code/pull/7849)) by @qqqys
- feat(web-shell): add Channel configuration flows ([#7893](https://github.com/QwenLM/qwen-code/pull/7893)) by @qqqys
- feat(core): Add ARMS session user ID ([#7921](https://github.com/QwenLM/qwen-code/pull/7921)) by @doudouOUC
- feat(channels): expose loop tools in daemon sessions ([#7891](https://github.com/QwenLM/qwen-code/pull/7891)) by @qqqys
- feat(web-shell): honor voice hold mode ([#7839](https://github.com/QwenLM/qwen-code/pull/7839)) by @callmeYe
- feat(web-shell): manage Channel pairing requests ([#7909](https://github.com/QwenLM/qwen-code/pull/7909)) by @qqqys
- feat(channels): dispatch GitHub notifications by reason ([#7826](https://github.com/QwenLM/qwen-code/pull/7826)) by @yiliang114
- feat(web-shell): add git branch picker, commit dialog, and create PR flow ([#7731](https://github.com/QwenLM/qwen-code/pull/7731)) by @wenshao
- feat(triage): surface the sandboxed lanes on the CI path ([#7917](https://github.com/QwenLM/qwen-code/pull/7917)) by @wenshao
- feat(web-shell): suggest BTW for side questions ([#7935](https://github.com/QwenLM/qwen-code/pull/7935)) by @carffuca
- feat(triage): make the verify report readable in Chinese ([#7918](https://github.com/QwenLM/qwen-code/pull/7918)) by @wenshao
### Bug Fixes
- fix(cli): measure insight days and hours in local time everywhere ([#7670](https://github.com/QwenLM/qwen-code/pull/7670)) by @ComplexSimply
- fix(ci): don't fail triage cleanup when there is nothing to clean ([#7688](https://github.com/QwenLM/qwen-code/pull/7688)) by @wenshao
- fix(ci): update qwen in the runner's active npm prefix ([#7689](https://github.com/QwenLM/qwen-code/pull/7689)) by @yiliang114
- fix(acp): sweep review worktree leases at the end of each prompt turn ([#7694](https://github.com/QwenLM/qwen-code/pull/7694)) by @wenshao
- fix(core): write a status sidecar so models stop misreading quiet background shells ([#7669](https://github.com/QwenLM/qwen-code/pull/7669)) by @ComplexSimply
- fix(core): exit_plan_mode returns guidance error from execute() instead of permission deny ([#7673](https://github.com/QwenLM/qwen-code/pull/7673)) by @qwen-code-dev-bot
- fix(core): tell the model when the user manually exits plan mode ([#7682](https://github.com/QwenLM/qwen-code/pull/7682)) by @zjunothing
- fix(core): give plugins from the same repository distinct extension ids ([#7676](https://github.com/QwenLM/qwen-code/pull/7676)) by @zjunothing
- fix(core): allow reading saved plan files without a confirmation prompt ([#7678](https://github.com/QwenLM/qwen-code/pull/7678)) by @zjunothing
- fix(cli): clear stale retry error when agent auto-recovers mid-turn ([#7681](https://github.com/QwenLM/qwen-code/pull/7681)) by @qwen-code-dev-bot
- fix(mcp): harden OAuth callback handling ([#7510](https://github.com/QwenLM/qwen-code/pull/7510)) by @gauravyad86
- fix(web-shell): add :focus-visible outline to GitHub PR list rows ([#7704](https://github.com/QwenLM/qwen-code/pull/7704)) by @wenshao
- fix(triage): resolve stage comment ids by marker at patch time, harden model injection ([#7703](https://github.com/QwenLM/qwen-code/pull/7703)) by @wenshao
- fix(triage): resolve finalize PRs from the open-PR list, not the commit association ([#7706](https://github.com/QwenLM/qwen-code/pull/7706)) by @wenshao
- Fixes inline math recognition to correctly handle single-character expressions, escaped dollars, and code spans across prose and tables. ([#7701](https://github.com/QwenLM/qwen-code/pull/7701)) by @CubeLander
- Fixes desktop file size display to correctly render terabyte and larger values instead of showing undefined for huge files. ([#7623](https://github.com/QwenLM/qwen-code/pull/7623)) by @chinesepowered
- Ensures const-derived enums are correctly stringified during OpenAPI 3.0 conversion to meet strict schema requirements. ([#7547](https://github.com/QwenLM/qwen-code/pull/7547)) by @chinesepowered
- Fixes schema conversion to properly handle nested objects even when property names match JSON Schema constraint keywords like maximum. ([#7546](https://github.com/QwenLM/qwen-code/pull/7546)) by @chinesepowered
- Silences xterm.js parser diagnostic logs in headless shell terminals to prevent error messages from leaking when commands emit invalid ANSI escape sequences. ([#7663](https://github.com/QwenLM/qwen-code/pull/7663)) by @mvanhorn
- Hardens the review skill by declaring the optional host argument in CommentStatusArgs and improving error handling for authentication or network failures. ([#7708](https://github.com/QwenLM/qwen-code/pull/7708)) by @wenshao
- Ensures StopFailure hooks fire correctly when loop detection triggers an early return during the streaming loop instead of only on API errors. ([#7592](https://github.com/QwenLM/qwen-code/pull/7592)) by @qwen-code-dev-bot
- Enables the Changes and History dialogs for worktree sessions in the Web Shell by threading the correct git working directory through the entire stack. ([#7695](https://github.com/QwenLM/qwen-code/pull/7695)) by @wenshao
- Strictly parses the heatmapDays query parameter to reject malformed values like negative numbers or decimals, falling back to the default instead of clamping invalid input. ([#7218](https://github.com/QwenLM/qwen-code/pull/7218)) by @VectorPeak
- Raises default live journal caps to 10,000 events and 8 MiB while exposing --max-journal-events and --max-journal-bytes flags for configuration. ([#7715](https://github.com/QwenLM/qwen-code/pull/7715)) by @wenshao
- Allows pinning and grouping secondary workspace sessions in the Web Shell sidebar without requiring the workspace to be locked first. ([#7716](https://github.com/QwenLM/qwen-code/pull/7716)) by @wenshao
- Corrects the review submit-gate audit to avoid falsely claiming a bypass when detecting valid same-account writes from other sources like triage bots. ([#7718](https://github.com/QwenLM/qwen-code/pull/7718)) by @wenshao
- Fixes QQ Bot session restoration by returning the input session ID from AcpBridge and ensuring session patching runs even when validation fails. ([#7722](https://github.com/QwenLM/qwen-code/pull/7722)) by @Eric-GoodBoy-Tech
- fix(core): prevent updates to extension-provided agents ([#7245](https://github.com/QwenLM/qwen-code/pull/7245)) by @destire-mio
- fix(core): fall back to system rg when bundled ripgrep cannot run ([#7203](https://github.com/QwenLM/qwen-code/pull/7203)) by @harjothkhara
- fix(core): avoid required tools in DashScope thinking ([#7661](https://github.com/QwenLM/qwen-code/pull/7661)) by @hogeheer499-commits
- fix(channels): use username as senderId in GitHub adapter to fix allowlist gate ([#7727](https://github.com/QwenLM/qwen-code/pull/7727)) by @OrbitZore
- fix(web-shell): parse 256-color and truecolor SGR sequences in parseAnsi ([#7620](https://github.com/QwenLM/qwen-code/pull/7620)) by @chinesepowered
- fix(triage): only the bot's own approval counts as already approved ([#7737](https://github.com/QwenLM/qwen-code/pull/7737)) by @wenshao
- fix(core): stop humanReadableCron naming intervals that never happen ([#7529](https://github.com/QwenLM/qwen-code/pull/7529)) by @chinesepowered
- fix(cli): keep IME cursor aligned after footer updates ([#7711](https://github.com/QwenLM/qwen-code/pull/7711)) by @water-in-stone
- fix(core): redact the plan argument from history after an approved exit_plan_mode ([#7197](https://github.com/QwenLM/qwen-code/pull/7197)) by @zjunothing
- fix(review): correct the borrowed lenses and vacuous-test severity (follow-up to #7735/#7736) ([#7746](https://github.com/QwenLM/qwen-code/pull/7746)) by @wenshao
- fix(core): reliably deliver manual plan-exit notices ([#7744](https://github.com/QwenLM/qwen-code/pull/7744)) by @doudouOUC
- fix(review): recover bilingual register from the live PR when the plan omits the Han flag ([#7739](https://github.com/QwenLM/qwen-code/pull/7739)) by @wenshao
- fix(cli): complete repeated skill slash commands ([#7720](https://github.com/QwenLM/qwen-code/pull/7720)) by @Sparkle6979
- fix(cli): handle escaped dollars around inline math ([#7741](https://github.com/QwenLM/qwen-code/pull/7741)) by @CubeLander
- fix(cli): show tool descriptions in multi-tool compact summaries ([#7589](https://github.com/QwenLM/qwen-code/pull/7589)) by @ovochouovo
- fix(ci): rename triage status marker to avoid duplicate-guard collision ([#7723](https://github.com/QwenLM/qwen-code/pull/7723)) by @yiliang114
- fix(core): route id-less continuation chunks to a colliding tool-call opener's slot ([#6981](https://github.com/QwenLM/qwen-code/pull/6981)) by @he-yufeng
- fix(autofix): answer every review thread, resolve the ones actually fixed ([#7758](https://github.com/QwenLM/qwen-code/pull/7758)) by @wenshao
- fix(core): treat properties as a name map in toOpenAPI30 ([#7760](https://github.com/QwenLM/qwen-code/pull/7760)) by @chinesepowered
- fix(core): keep leading whitespace in gitignore patterns ([#7763](https://github.com/QwenLM/qwen-code/pull/7763)) by @chinesepowered
- fix(core): stop trailing slash from anchoring nested gitignore patterns ([#7764](https://github.com/QwenLM/qwen-code/pull/7764)) by @chinesepowered
- fix(core): keep the model name when a model id carries a variant tag ([#7766](https://github.com/QwenLM/qwen-code/pull/7766)) by @chinesepowered
- fix(weixin): create the account credential file already private ([#7726](https://github.com/QwenLM/qwen-code/pull/7726)) by @chinesepowered
- fix(core): stop rewriting backslash escapes in gitignore patterns ([#7765](https://github.com/QwenLM/qwen-code/pull/7765)) by @chinesepowered
- fix(core): scope the timeout veto to the fragment it appears in ([#7776](https://github.com/QwenLM/qwen-code/pull/7776)) by @chinesepowered
- fix(core): decline sed patterns whose bracket expression starts with ] ([#7775](https://github.com/QwenLM/qwen-code/pull/7775)) by @chinesepowered
- fix(web-shell): stabilize mobile voice input ([#7806](https://github.com/QwenLM/qwen-code/pull/7806)) by @ytahdn
- fix(test): give every E2E case a clean directory again ([#7811](https://github.com/QwenLM/qwen-code/pull/7811)) by @wenshao
- fix(web-shell): allow shell commands in new tasks without a session ([#7724](https://github.com/QwenLM/qwen-code/pull/7724)) by @wenshao
- fix(triage): carry the /verify lane's hardening across to /tmux ([#7753](https://github.com/QwenLM/qwen-code/pull/7753)) by @wenshao
- fix(web-shell): render task notifications as system messages ([#7822](https://github.com/QwenLM/qwen-code/pull/7822)) by @ytahdn
- fix(ci): add default bash shell to container jobs in qwen-triage ([#7838](https://github.com/QwenLM/qwen-code/pull/7838)) by @qwen-code-dev-bot
- fix(web-shell): preserve pasted text in composer ([#7824](https://github.com/QwenLM/qwen-code/pull/7824)) by @ytahdn
- fix(ci): add git safe.directory for container jobs ([#7843](https://github.com/QwenLM/qwen-code/pull/7843)) by @qwen-code-dev-bot
- fix(ci): add --init to container jobs to reap zombie processes ([#7848](https://github.com/QwenLM/qwen-code/pull/7848)) by @qwen-code-dev-bot
- fix(core): wait for output stream flush before settling background shells ([#7833](https://github.com/QwenLM/qwen-code/pull/7833)) by @ComplexSimply
- fix(scripts): retry model calls and surface degraded release notes ([#7535](https://github.com/QwenLM/qwen-code/pull/7535)) by @he-yufeng
- fix(ci): prevent worktree cleanup from failing the verify job ([#7857](https://github.com/QwenLM/qwen-code/pull/7857)) by @qwen-code-dev-bot
- fix(release): publish all channel packages, not just channel-base ([#7845](https://github.com/QwenLM/qwen-code/pull/7845)) by @yiliang114
- fix(scripts): harden retry classification and preserve deadline error context ([#7854](https://github.com/QwenLM/qwen-code/pull/7854)) by @yiliang114
- fix(core): fast-fail permanent quota-exhaustion 429s instead of silent retry ([#7842](https://github.com/QwenLM/qwen-code/pull/7842)) by @yiliang114
- fix(web-shell): isolate history and session drafts ([#7810](https://github.com/QwenLM/qwen-code/pull/7810)) by @ytahdn
- fix(triage): retry a transient npm ci before blaming the PR for it ([#7884](https://github.com/QwenLM/qwen-code/pull/7884)) by @wenshao
- fix(webui): fall back to history_truncated marker recordId for transcript pagination anchor ([#7829](https://github.com/QwenLM/qwen-code/pull/7829)) by @wenshao
- fix(review): give the review retry the remaining time budget ([#7852](https://github.com/QwenLM/qwen-code/pull/7852)) by @wenshao
- fix(integration): configure Docker sandbox networking for submitted-prompt provenance test (#7879) ([#7881](https://github.com/QwenLM/qwen-code/pull/7881)) by @qwen-code-dev-bot
- fix(cli): report a genuine $0.00 cost instead of N/A ([#7784](https://github.com/QwenLM/qwen-code/pull/7784)) by @chinesepowered
- fix(core): reject socks5h and socks4a proxy URLs ([#7786](https://github.com/QwenLM/qwen-code/pull/7786)) by @chinesepowered
- fix(core): correct the character classes in checkContentLoop ([#7788](https://github.com/QwenLM/qwen-code/pull/7788)) by @chinesepowered
- fix(web-shell): make /copy with a bare index work ([#7789](https://github.com/QwenLM/qwen-code/pull/7789)) by @chinesepowered
- fix(core): decline combined sed flags where -i is not last ([#7790](https://github.com/QwenLM/qwen-code/pull/7790)) by @chinesepowered
- fix(core): pass the Grep pattern behind -e so a leading dash is not an option ([#7863](https://github.com/QwenLM/qwen-code/pull/7863)) by @chinesepowered
- fix(core): cap a bare Error's message like every other getErrorMessage path ([#7865](https://github.com/QwenLM/qwen-code/pull/7865)) by @chinesepowered
- fix(cli): make wrapToVisualLines count zero-width characters like its sibling ([#7873](https://github.com/QwenLM/qwen-code/pull/7873)) by @chinesepowered
- fix(core): charge the separator and ellipsis to the preview budget ([#7874](https://github.com/QwenLM/qwen-code/pull/7874)) by @chinesepowered
- fix(cli): do not count a partial trailing line when re-opening a split fence ([#7875](https://github.com/QwenLM/qwen-code/pull/7875)) by @chinesepowered
- fix(cli): make /copy <message> <index> select the code block ([#7883](https://github.com/QwenLM/qwen-code/pull/7883)) by @chinesepowered
- fix(test): Restore first-output benchmark measurement validity and correct its artifact schema ([#7820](https://github.com/QwenLM/qwen-code/pull/7820)) by @doudouOUC
- fix(daemon): harden Todo Stop Guard continuations ([#7821](https://github.com/QwenLM/qwen-code/pull/7821)) by @doudouOUC
- fix(core): read the stash reflog from the common git dir ([#7774](https://github.com/QwenLM/qwen-code/pull/7774)) by @chinesepowered
- fix(core): keep Draft 4 boolean exclusive bounds in toOpenAPI30 ([#7782](https://github.com/QwenLM/qwen-code/pull/7782)) by @chinesepowered
- fix(core): apply maxDepth to flat-format memory imports ([#7851](https://github.com/QwenLM/qwen-code/pull/7851)) by @chinesepowered
- fix(core): render a thought part's reasoning instead of the boolean flag ([#7866](https://github.com/QwenLM/qwen-code/pull/7866)) by @chinesepowered
- fix(core): bridge tool-result images for text-only models ([#7484](https://github.com/QwenLM/qwen-code/pull/7484)) by @LaZzyMan
- fix(cli): patch ink to clear staticNode on indirect subtree removal ([#7816](https://github.com/QwenLM/qwen-code/pull/7816)) by @chiga0
- fix(core): auto-retry transient network errors during API calls ([#7898](https://github.com/QwenLM/qwen-code/pull/7898)) by @chiga0
- fix(cli): hide stale sticky todos from previous turns ([#7900](https://github.com/QwenLM/qwen-code/pull/7900)) by @chiga0
- fix(serve): Release managed session writer locks on shutdown ([#7812](https://github.com/QwenLM/qwen-code/pull/7812)) by @doudouOUC
- fix(cli): add polling fallback for git branch name display ([#7830](https://github.com/QwenLM/qwen-code/pull/7830)) by @qwen-code-dev-bot
- fix(cli): remove redundant 'Read file' prefix from @mention tool card ([#7902](https://github.com/QwenLM/qwen-code/pull/7902)) by @qwen-code-dev-bot
- fix(safe-mode): preserve caller-supplied top-tier MCP servers ([#7827](https://github.com/QwenLM/qwen-code/pull/7827)) by @VitaliBabkin
- fix(ci): keep the post-merge E2E signal on main alive ([#7795](https://github.com/QwenLM/qwen-code/pull/7795)) by @wenshao
- fix(core): short-circuit the flush wait when the output stream cannot flush ([#7905](https://github.com/QwenLM/qwen-code/pull/7905)) by @ComplexSimply
- fix(core): track quotes inside a command substitution in splitCommands ([#7870](https://github.com/QwenLM/qwen-code/pull/7870)) by @chinesepowered
- fix(core): count the per-server and per-tool always-allow outcomes as approvals ([#7869](https://github.com/QwenLM/qwen-code/pull/7869)) by @chinesepowered
- fix(web-shell): report intended workspace to host when starting a new chat ([#7910](https://github.com/QwenLM/qwen-code/pull/7910)) by @wenshao
- fix(cli): default to virtualized terminal history ([#5738](https://github.com/QwenLM/qwen-code/pull/5738)) by @ZevGit
- fix(ci): restore workspace ownership in cleanup to prevent EACCES ([#7931](https://github.com/QwenLM/qwen-code/pull/7931)) by @qwen-code-dev-bot
- fix(review): recover the resolved effort when --effort is not re-threaded ([#7855](https://github.com/QwenLM/qwen-code/pull/7855)) by @wenshao
- fix(scripts): slim release-note model prompts and log request timing ([#7941](https://github.com/QwenLM/qwen-code/pull/7941)) by @yiliang114
- fix(release): pin channel-base dep to exact version during release bump ([#7953](https://github.com/QwenLM/qwen-code/pull/7953)) by @yiliang114
- fix(triage): make the build-process guard diagnosable and zombie-aware ([#7858](https://github.com/QwenLM/qwen-code/pull/7858)) by @wenshao
- fix(ci): give each job its own proxy wrapper directory ([#7951](https://github.com/QwenLM/qwen-code/pull/7951)) by @wenshao
### Performance
- perf(cli): cache GitHub PR list in the daemon route with a 60s TTL ([#7705](https://github.com/QwenLM/qwen-code/pull/7705)) by @wenshao
- perf(core): keep the volatile auto-memory section last in the system prompt ([#7651](https://github.com/QwenLM/qwen-code/pull/7651)) by @DragonnZhang
- perf(web-shell): paint the composer git chip before git status completes ([#7680](https://github.com/QwenLM/qwen-code/pull/7680)) by @wenshao
- perf(core): Lazy-load first-use dependencies ([#7686](https://github.com/QwenLM/qwen-code/pull/7686)) by @doudouOUC
- perf(cli): replace comment-json settings parser ([#7747](https://github.com/QwenLM/qwen-code/pull/7747)) by @doudouOUC
- perf(acp): Preload providers after session creation ([#7767](https://github.com/QwenLM/qwen-code/pull/7767)) by @doudouOUC
- perf(core): add early Anthropic cache breakpoint on the stable system prefix ([#7912](https://github.com/QwenLM/qwen-code/pull/7912)) by @DragonnZhang
- perf(ci): cut the E2E suite from ~40min to ~24min ([#7798](https://github.com/QwenLM/qwen-code/pull/7798)) by @wenshao
### Documentation
- docs(channels): Document loops and proactive delivery ([#7628](https://github.com/QwenLM/qwen-code/pull/7628)) by @wenshao
### Internal Changes
- refactor(autofix): extract review verification runner ([#7644](https://github.com/QwenLM/qwen-code/pull/7644)) by @qqqys
- test(web-shell): capture the git-mode new-branch sub-state in the visuals suite ([#7672](https://github.com/QwenLM/qwen-code/pull/7672)) by @wenshao
- Refactors system prompt assembly into a layered builder to explicitly manage stable, context, and volatile instruction layers. ([#7707](https://github.com/QwenLM/qwen-code/pull/7707)) by @DragonnZhang
- Adds regression tests to verify that restored-session transcript pagination correctly URL-encodes boundaries and preserves state during retry attempts. ([#7657](https://github.com/QwenLM/qwen-code/pull/7657)) by @jay666mnj
- test(cli): cover bottom-stuck virtualized list behavior ([#7652](https://github.com/QwenLM/qwen-code/pull/7652)) by @jay666mnj
- ci: keep the critical-audit gate honest when npm cannot answer ([#7743](https://github.com/QwenLM/qwen-code/pull/7743)) by @wenshao
- test(integration): deflake tool-control permission cases ([#7725](https://github.com/QwenLM/qwen-code/pull/7725)) by @yiliang114
- revert: drop the stale-base un-park recovery (#7602) ([#7640](https://github.com/QwenLM/qwen-code/pull/7640)) by @wenshao
- test(serve): Add first-output latency benchmark ([#7761](https://github.com/QwenLM/qwen-code/pull/7761)) by @doudouOUC
- test(channels): run the feishu, weixin and qqbot suites in CI ([#7853](https://github.com/QwenLM/qwen-code/pull/7853)) by @chinesepowered
## New Contributors
- @jay666mnj made their first contribution in [#7674](https://github.com/QwenLM/qwen-code/pull/7674)
- @harjothkhara made their first contribution in [#7203](https://github.com/QwenLM/qwen-code/pull/7203)
- @PratikWayase made their first contribution in [#7709](https://github.com/QwenLM/qwen-code/pull/7709)
- @Sparkle6979 made their first contribution in [#7720](https://github.com/QwenLM/qwen-code/pull/7720)
- @VitaliBabkin made their first contribution in [#7827](https://github.com/QwenLM/qwen-code/pull/7827)
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.21.0...v0.21.1