<!-- 使用 release/v0.21.1-nightly.20260731.702932cc7 分支上的 .github/release.yml 配置生成的发布说明 -->
## 更新内容
* fix(ci): 在 qwen-triage 的容器作业中添加默认 bash shell by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7838
* fix(web-shell): 在 composer 中保留粘贴的文本 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7824
* feat(web-shell): 添加监控任务详情 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7817
* fix(ci): 为容器作业添加 git safe.directory by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7843
* fix(ci): 为容器作业添加 --init 以回收僵尸进程 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7848
* fix(core): 在结算后台 shell 前等待输出流刷新 by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7833
* fix(scripts): 重试模型调用并展示降级版发布说明 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/7535
* feat(web-shell): 将语音范围限定为 composer 工作区 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7754
* feat(hooks): 添加已提交提示词的来源追踪 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7762
* fix(ci): 防止 worktree 清理操作导致 verify 作业失败 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7857
* perf(acp): 在会话创建后预加载 providers by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7767
* test(channels): 在 CI 中运行 feishu、weixin 和 qqbot 测试套件 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7853
* feat(autofix): 对确定性拒绝重试一次 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7796
* fix(release): 发布所有 channel 包,而不仅仅是 channel-base by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7845
* feat(web-shell): 添加 Channel 管理页面 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7793
* feat(acp): 添加会话级运行时 MCP by @qqqys in https://github.com/QwenLM/qwen-code/pull/7847
* feat(core): 持久化并回放 Goal v3 状态 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7815
* feat(core): 添加全分辨率图像缩放工具 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7809
* fix(scripts): 强化重试分类逻辑并保留超时错误上下文 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7854
* feat(web-shell): 添加 composer 页脚渲染器 by @dreamWB in https://github.com/QwenLM/qwen-code/pull/7856
* fix(core): 对永久性配额耗尽的 429 错误快速失败,而非静默重试 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7842
* fix(web-shell): 隔离历史记录与会话草稿 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7810
* fix(triage): 在归咎于 PR 之前,先对临时性 npm ci 失败进行重试 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7884
* fix(webui): 在转录分页锚点回退时使用 history_truncated 标记的 recordId by @wenshao in https://github.com/QwenLM/qwen-code/pull/7829
* feat: 将会话写入者租约限制为可选开启 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7894
* fix(review): 将剩余的时间预算分配给 review 重试 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7852
* fix(integration): 为已提交提示词来源测试配置 Docker 沙箱网络 (#7879) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7881
* fix(cli): 报告真实的 $0.00 费用而非 N/A by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7784
* fix(core): 拒绝 socks5h 和 socks4a 代理 URL by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7786
* fix(core): 修正 checkContentLoop 中的字符类 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7788
* fix(web-shell): 使仅带索引的 /copy 命令生效 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7789
* fix(core): 拒绝 -i 不在末尾的合并 sed 标志 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7790
* fix(core): 将 Grep 模式放在 -e 之后传递,以避免前导连字符被误认为选项 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7863
* feat(ci): 通过在现有 issue 上评论来去重 E2E 失败问题 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7792
* fix(core): 像其他 getErrorMessage 路径一样限制裸 Error 的消息长度 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7865
* fix(cli): 使 wrapToVisualLines 像其兄弟函数一样计算零宽字符 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7873
* fix(core): 将分隔符和省略号计入预览预算 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7874
* fix(cli): 在重新打开分割围栏时不计算不完整的末尾行 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7875
* fix(cli): 使 /copy <message> <index> 能够选择代码块 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7883
* feat(triage): 添加 revert-pattern 高风险路径检测 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7414
* feat(web-shell): 添加原生工作区文件夹选择器 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7849
* feat(web-shell): 添加 Channel 配置流程 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7893
* fix(test): 恢复 first-output 基准测试的测量有效性并修正其产物 schema by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7820
* fix(daemon): 强化 Todo Stop Guard 的延续逻辑 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7821
* fix(core): 从公共 git 目录读取 stash reflog by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7774
* fix(core): 在 toOpenAPI30 中保留 Draft 4 布尔值互斥边界 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7782
* fix(core): 将 maxDepth 应用于扁平格式的记忆导入 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7851
* fix(core): 渲染思考部分的推理内容而非布尔标志 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7866
* fix(core): 为纯文本模型桥接工具结果图片 by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/7484
* fix(cli): 修补 ink 以在间接子树移除时清除 staticNode by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7816
* fix(core): 在 API 调用期间自动重试临时网络错误 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7898
* fix(cli): 隐藏来自之前轮次的过期粘性待办事项 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7900
* fix(serve): 在关闭时释放托管会话的写入器锁 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7812
* perf(core): 在稳定的系统前缀上添加早期 Anthropic 缓存断点 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7912
* fix(cli): 为 git 分支名称显示添加轮询回退机制 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7830
* fix(cli): 从 @mention 工具卡片中移除冗余的“Read file”前缀 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7902
* feat(core): 添加 ARMS 会话用户 ID by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7921
* fix(safe-mode): 保留调用方提供的一级 MCP 服务器 by @VitaliBabkin in https://github.com/QwenLM/qwen-code/pull/7827
* fix(ci): 保持 main 分支上合并后的 E2E 信号存活 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7795
* fix(core): 当输出流无法刷新时跳过刷新等待 by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7905
* fix(core): 在 splitCommands 中追踪命令替换内的引号 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7870
* fix(core): 将每个服务器和每个工具的 always-allow 结果计为已批准 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7869
* fix(web-shell): 开始新聊天时向主机报告预期的工作区 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7910
* fix(cli): 默认使用虚拟化终端历史记录 by @ZevGit in https://github.com/QwenLM/qwen-code/pull/5738
* fix(ci): 在清理过程中恢复工作区所有权以防止 EACCES 错误 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7931
* perf(ci): 将 E2E 套件运行时间从约 40 分钟缩短至约 24 分钟 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7798
* feat(channels): 在守护进程会话中暴露循环工具 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7891
* fix(review): 当未重新线程化 --effort 时恢复已解决的耗时 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7855
* feat(web-shell): 支持语音保持模式 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/7839
* feat(web-shell): 管理 Channel 配对请求 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7909
* feat(channels): 按原因分发 GitHub 通知 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7826
* feat(web-shell): 添加 git 分支选择器、提交对话框和创建 PR 流程 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7731
* feat(triage): 在 CI 路径上显示沙盒通道 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7917
* fix(scripts): 精简发布说明模型提示词并记录请求耗时 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7941
* feat(web-shell): 为旁支问题建议 BTW by @carffuca in https://github.com/QwenLM/qwen-code/pull/7935
* fix(release): 在发布版本升级期间将 channel-base 依赖固定为精确版本 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7953
* feat(triage): 使验证报告支持中文可读 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7918
* fix(triage): 使构建过程守卫具备可诊断性和僵尸进程感知能力 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7858
* fix(ci): 为每个作业分配独立的代理包装目录 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7951
* feat(autofix): 在五轮修改后延迟建议 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7913
* feat(core): 将 Goal v3 连接到回合引擎 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7895
* feat(core): 限制图片读取以实现可靠缩放 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7911
* fix(integration): 根据环境变量超时时间调整交互式先读后写等待时间 (#7942) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7943
* test(integration): 修复 asyncGenerator canUseTool 内容断言的不稳定问题 (#7937) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7939
* fix(ci): 在签出前清理过期的 .qwen/ 目录以防止权限拒绝 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7977
* feat(triage): 将未验证语句设为机械式 2b-bis 触发器 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7965
* fix(ci): 恢复验证工作区权限 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7992
* feat(external-context): 添加已提交提示词的自动召回 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7877
* fix(ci): 更新 ECS 运行器使用的 Qwen 二进制文件 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8000
* feat(web-shell): 使用 markdown-chart 渲染流式图表 by @zhangxy-zju in https://github.com/QwenLM/qwen-code/pull/7916
* feat: 增强 ripgrep 的健壮性 by @water-in-stone in https://github.com/QwenLM/qwen-code/pull/7888
* fix(core): 标记从未扩展过项预算的文件夹 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7868
* fix(feishu): 确保代码块分块在消息大小限制内 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7850
* fix(web-shell): 在会话 URL 中保留 token 和基础路径 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7926
* ci: 添加独立的 DSW SWE-bench 发布流水线 by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/7656
* fix(web-shell): 优化 Channel 配对请求 by @qqqys in https://github.com/QwenLM/qwen-code/pull/7997
* fix(cli): 修正全屏模式下硬件光标偏移一位的问题 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7998
* fix(cli): 防止 Windows 上 SGR 鼠标事件被误吞为粘贴 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7988
* feat(channels): 添加钉钉交互卡片 by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/6930
* feat(web-shell): 完善高级表格控件 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7999
* fix(serve): 允许对大文本文件进行有界读取 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7947
* fix(web-shell): 在卡片中优先使用制品类型元数据 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7973
* fix(web-shell): 降低 Composer 输入延迟 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8015
* fix(webui): 稳定会话历史分页 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8001
* fix(release): 当上一版本与目标分叉时跳过 notes-start-tag (#7969) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7970
* fix(sdk): 将守护进程浏览器包预算提高至 177KB by @wenshao in https://github.com/QwenLM/qwen-code/pull/8024
* fix(cli): 将 Kitty Super (Command) 修饰键映射为 meta by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7996
* fix(daemon): 区分处理中的 Channel 工作器诊断信息 by @destire-mio in https://github.com/QwenLM/qwen-code/pull/7932
* feat(triage): 验证评论以定性结论开头,折叠中文内容 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7974
* fix(review): 在构建测试安装和构建前预检可用磁盘空间 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7986
* test(integration): 将不稳定的 E2E 测试迁移至 fake-openai-server by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7934
* feat(triage): 在 ECS 上运行外部 /verify,并在工作区清理后执行 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7985
* fix(cli): 保留 Ctrl+Shift+C 用于终端复制,而非退出/清除 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/8011
* fix(core): 自动记录制品文件写入 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7914
* fix(cli): MCP 提示词补全不再阻塞可选参数的 Enter 键 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7995
* feat(hooks): 添加 security.allowPrivateNetworkHooks 以允许受信任作用域绕过 SSRF 范围检查 by @xurik in https://github.com/QwenLM/qwen-code/pull/7968
* feat(web-shell): 添加带溢出处理的分割窗格头部操作插槽 by @samuelhsin in https://github.com/QwenLM/qwen-code/pull/7808
* feat(channels): 添加 GitLab 轮询 Channel 适配器 by @OrbitZore in https://github.com/QwenLM/qwen-code/pull/7862
* fix(channels): 在守护进程会话中禁用原生 cron by @qqqys in https://github.com/QwenLM/qwen-code/pull/8034
* feat(channels): 添加配对审批管理 API by @qqqys in https://github.com/QwenLM/qwen-code/pull/8045
* feat(github-channel): 过滤通知原因 by @xianjianlf2 in https://github.com/QwenLM/qwen-code/pull/8031
* fix(channels): 拒绝不可用的 GitHub 自允许列表 by @zjunothing in https://github.com/QwenLM/qwen-code/pull/8055
* fix(core): 从 send_message 工具模式中移除顶层 oneOf by @netbrah in https://github.com/QwenLM/qwen-code/pull/7989
* fix(cli): 防止调整大小重绘引发滚动风暴 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/8009
* feat(review): 将针对非平凡差异的零问题 Approve 标记为低信号 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7987
* fix(core): 恢复时重新绑定 fork 能力 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7927
* feat(core): 在上下文窗口阈值内预加载延迟工具 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7922
* fix(channels): 使 GitHub 最终响应发布为单次执行 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8033
* fix(ci): 在 PR 审查作业的 checkout 之前恢复工作区所有权 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8062
* fix(release): 将预览版基础版本提升至已发布稳定版之上 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7978
* test(web-shell): 扩展恢复的历史记录分页回归测试覆盖范围 by @PratikWayase in https://github.com/QwenLM/qwen-code/pull/7907
* fix(serve): 添加认证会话写入器交接 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7976
* test(integration): 测量即时提示词分发阶段 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7994
* fix(core): 允许在仅思考阶段进行传输流重试 by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7938
* fix(github-channel): 验证并文档化 reasonFilter by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8035
* fix(core): 防止 CJK 字符导致输出截断时 char/4 计数偏低 by @zambalee in https://github.com/QwenLM/qwen-code/pull/7963
* fix(core): 在工具调用轮次间保留活跃的 Todo 上下文 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7919
* feat(review): 添加 `review run` —— 支持机器可读结论的无头审查 by @wenshao in https://github.com/QwenLM/qwen-code/pull/7983
* fix(cli): 在工作区入口标记 QWEN_CODE_CLI 并发布 QWEN_CODE_MODEL by @wenshao in https://github.com/QwenLM/qwen-code/pull/7993
* feat(verify-pr): 新增维护者验证轮次中的七种技巧 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8010
* feat(triage): 将 /verify 智能体预算从 25m 提升至 120m by @wenshao in https://github.com/QwenLM/qwen-code/pull/8014
* fix(autofix): 累计超时熔断机制、精简重试提示词、真实交接话术 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8044
* feat(autofix): 每推送十轮后发布接管里程碑摘要 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8046
* fix(autofix): 由命令本身发布接管交互确认 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8043
* test(e2e): 在偶发的子智能体用例中强制委派 (#8070) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8073
* fix(web-shell): 稳定增强型表格控件 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8041
* feat(github-channel): 新增临时工作状态反应 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8061
* fix(integration): 使交互式先读后写测试确定性化 (#8060) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8064
* feat(autofix): 退避扫描检查空闲候选项 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8049
* fix(web-shell): 显示待处理消息的服务器队列状态 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8065
* fix(web-shell): 改进工件预览 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8078
* feat(triage): 使 /verify 证据截图真正可行 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8016
* fix(ci): 在分配运行器前启用附件守卫检查 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8095
* fix(web-shell): 翻译遗留的 /skills 调用 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8103
* fix(verify-pr): 在范围选择中控制证据捕获预算 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8104
* fix(web-shell): 显示提示词发送失败及重试操作 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8106
* fix(web-shell): 使问题提交支持重试 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8096
* fix(web-shell): 保留已批准的工具有效结果 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8099
* fix(autofix): 在 PR 上回复轮次上限拒绝信息,而非仅记录在日志中 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8067
* fix(autofix): 通过合并移动后的头节点并重试来挽救竞态失败的推送 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8042
* feat(autofix): 在仅关键模式下按来源分配反馈预算 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8071
* feat(core): 标记 UserPromptSubmit 钩子上下文并记录显示来源 by @zjgzx1988 in https://github.com/QwenLM/qwen-code/pull/7956
* fix(core): 在会话关闭期间中止工作流 by @qqqys in https://github.com/QwenLM/qwen-code/pull/8107
* fix(test): 解决 setModel E2E 测试中结果消息的轮次完成问题 (#8072) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8075
* feat(serve): 按字节游标分页显示大型文本文件 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/8002
* fix(test): 为多模型 E2E 轮次增加更多 CI 超时缓冲时间 (#8108) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8111
* fix(serve): 防止重复扫描工作区技能 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/8080
* feat(review): 在测试效能中引入语句级变异探测 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8020
* feat(web-shell): 新增上下文任务面板 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7929
* feat(agent): 新增 fork 工具执行白名单 by @destire-mio in https://github.com/QwenLM/qwen-code/pull/8066
* fix(serve): 隔离守护进程会话维护写入器 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7975
* fix(serve): 通过将侧任务回滚路由至工作区会话服务来恢复构建 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8144
* fix(web-shell): 隔离工作树会话执行 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8068
* feat(web-shell): 管理配对审批 by @qqqys in https://github.com/QwenLM/qwen-code/pull/8081
* fix(test): 允许权限模式 E2E 响应较慢 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8149
* fix(test): 使自动编辑权限 E2E 测试确定性化 by @wenshao in https://github.com/QwenLM/qwen-code/pull/8154
## 新贡献者
* @VitaliBabkin 首次贡献于 https://github.com/QwenLM/qwen-code/pull/7827
* @xianjianlf2 首次贡献于 https://github.com/QwenLM/qwen-code/pull/8031
* @zambalee 首次贡献于 https://github.com/QwenLM/qwen-code/pull/7963
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/dsw-manual-poc-20260727-1...v0.21.1-nightly.20260731.702932cc7
<!-- Release notes generated using configuration in .github/release.yml at release/v0.21.1-nightly.20260731.702932cc7 -->
## What's Changed
* fix(ci): add default bash shell to container jobs in qwen-triage by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7838
* fix(web-shell): preserve pasted text in composer by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7824
* feat(web-shell): add monitor task details by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7817
* fix(ci): add git safe.directory for container jobs by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7843
* fix(ci): add --init to container jobs to reap zombie processes by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7848
* fix(core): wait for output stream flush before settling background shells by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7833
* fix(scripts): retry model calls and surface degraded release notes by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/7535
* feat(web-shell): Scope voice to composer workspace by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7754
* feat(hooks): Add submitted prompt provenance by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7762
* fix(ci): prevent worktree cleanup from failing the verify job by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7857
* perf(acp): Preload providers after session creation by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7767
* test(channels): run the feishu, weixin and qqbot suites in CI by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7853
* feat(autofix): retry deterministic rejection once by @qqqys in https://github.com/QwenLM/qwen-code/pull/7796
* fix(release): publish all channel packages, not just channel-base by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7845
* feat(web-shell): add Channel management page by @qqqys in https://github.com/QwenLM/qwen-code/pull/7793
* feat(acp): add session-scoped runtime MCP by @qqqys in https://github.com/QwenLM/qwen-code/pull/7847
* feat(core): persist and replay Goal v3 state by @qqqys in https://github.com/QwenLM/qwen-code/pull/7815
* feat(core): add full-resolution image zoom tool by @qqqys in https://github.com/QwenLM/qwen-code/pull/7809
* fix(scripts): harden retry classification and preserve deadline error context by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7854
* feat(web-shell): add composer footer renderer by @dreamWB in https://github.com/QwenLM/qwen-code/pull/7856
* fix(core): fast-fail permanent quota-exhaustion 429s instead of silent retry by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7842
* fix(web-shell): isolate history and session drafts by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7810
* fix(triage): retry a transient npm ci before blaming the PR for it by @wenshao in https://github.com/QwenLM/qwen-code/pull/7884
* fix(webui): fall back to history_truncated marker recordId for transcript pagination anchor by @wenshao in https://github.com/QwenLM/qwen-code/pull/7829
* feat: Gate session writer lease behind opt-in by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7894
* fix(review): give the review retry the remaining time budget by @wenshao in https://github.com/QwenLM/qwen-code/pull/7852
* fix(integration): configure Docker sandbox networking for submitted-prompt provenance test (#7879) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7881
* fix(cli): report a genuine $0.00 cost instead of N/A by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7784
* fix(core): reject socks5h and socks4a proxy URLs by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7786
* fix(core): correct the character classes in checkContentLoop by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7788
* fix(web-shell): make /copy with a bare index work by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7789
* fix(core): decline combined sed flags where -i is not last by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7790
* fix(core): pass the Grep pattern behind -e so a leading dash is not an option by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7863
* feat(ci): Deduplicate E2E failure issues by commenting on existing issue by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7792
* fix(core): cap a bare Error's message like every other getErrorMessage path by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7865
* fix(cli): make wrapToVisualLines count zero-width characters like its sibling by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7873
* fix(core): charge the separator and ellipsis to the preview budget by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7874
* fix(cli): do not count a partial trailing line when re-opening a split fence by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7875
* fix(cli): make /copy <message> <index> select the code block by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7883
* feat(triage): add revert-pattern high-risk path detection by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7414
* feat(web-shell): add native workspace folder picker by @qqqys in https://github.com/QwenLM/qwen-code/pull/7849
* feat(web-shell): add Channel configuration flows by @qqqys in https://github.com/QwenLM/qwen-code/pull/7893
* fix(test): Restore first-output benchmark measurement validity and correct its artifact schema by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7820
* fix(daemon): harden Todo Stop Guard continuations by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7821
* fix(core): read the stash reflog from the common git dir by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7774
* fix(core): keep Draft 4 boolean exclusive bounds in toOpenAPI30 by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7782
* fix(core): apply maxDepth to flat-format memory imports by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7851
* fix(core): render a thought part's reasoning instead of the boolean flag by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7866
* fix(core): bridge tool-result images for text-only models by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/7484
* fix(cli): patch ink to clear staticNode on indirect subtree removal by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7816
* fix(core): auto-retry transient network errors during API calls by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7898
* fix(cli): hide stale sticky todos from previous turns by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7900
* fix(serve): Release managed session writer locks on shutdown by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7812
* perf(core): add early Anthropic cache breakpoint on the stable system prefix by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7912
* fix(cli): add polling fallback for git branch name display by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7830
* fix(cli): remove redundant 'Read file' prefix from @mention tool card by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7902
* feat(core): Add ARMS session user ID by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7921
* fix(safe-mode): preserve caller-supplied top-tier MCP servers by @VitaliBabkin in https://github.com/QwenLM/qwen-code/pull/7827
* fix(ci): keep the post-merge E2E signal on main alive by @wenshao in https://github.com/QwenLM/qwen-code/pull/7795
* fix(core): short-circuit the flush wait when the output stream cannot flush by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7905
* fix(core): track quotes inside a command substitution in splitCommands by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7870
* fix(core): count the per-server and per-tool always-allow outcomes as approvals by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7869
* fix(web-shell): report intended workspace to host when starting a new chat by @wenshao in https://github.com/QwenLM/qwen-code/pull/7910
* fix(cli): default to virtualized terminal history by @ZevGit in https://github.com/QwenLM/qwen-code/pull/5738
* fix(ci): restore workspace ownership in cleanup to prevent EACCES by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7931
* perf(ci): cut the E2E suite from ~40min to ~24min by @wenshao in https://github.com/QwenLM/qwen-code/pull/7798
* feat(channels): expose loop tools in daemon sessions by @qqqys in https://github.com/QwenLM/qwen-code/pull/7891
* fix(review): recover the resolved effort when --effort is not re-threaded by @wenshao in https://github.com/QwenLM/qwen-code/pull/7855
* feat(web-shell): honor voice hold mode by @callmeYe in https://github.com/QwenLM/qwen-code/pull/7839
* feat(web-shell): manage Channel pairing requests by @qqqys in https://github.com/QwenLM/qwen-code/pull/7909
* feat(channels): dispatch GitHub notifications by reason by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7826
* feat(web-shell): add git branch picker, commit dialog, and create PR flow by @wenshao in https://github.com/QwenLM/qwen-code/pull/7731
* feat(triage): surface the sandboxed lanes on the CI path by @wenshao in https://github.com/QwenLM/qwen-code/pull/7917
* fix(scripts): slim release-note model prompts and log request timing by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7941
* feat(web-shell): suggest BTW for side questions by @carffuca in https://github.com/QwenLM/qwen-code/pull/7935
* fix(release): pin channel-base dep to exact version during release bump by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7953
* feat(triage): make the verify report readable in Chinese by @wenshao in https://github.com/QwenLM/qwen-code/pull/7918
* fix(triage): make the build-process guard diagnosable and zombie-aware by @wenshao in https://github.com/QwenLM/qwen-code/pull/7858
* fix(ci): give each job its own proxy wrapper directory by @wenshao in https://github.com/QwenLM/qwen-code/pull/7951
* feat(autofix): defer suggestions after five change rounds by @qqqys in https://github.com/QwenLM/qwen-code/pull/7913
* feat(core): connect Goal v3 to the turn engine by @qqqys in https://github.com/QwenLM/qwen-code/pull/7895
* feat(core): bound image reads for reliable zoom by @qqqys in https://github.com/QwenLM/qwen-code/pull/7911
* fix(integration): scale interactive read-then-write waits with env timeout (#7942) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7943
* test(integration): deflake asyncGenerator canUseTool content assertion (#7937) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7939
* fix(ci): clean stale .qwen/ before checkout to prevent Permission denied by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7977
* feat(triage): make the not-verified sentence a mechanical 2b-bis trigger by @wenshao in https://github.com/QwenLM/qwen-code/pull/7965
* fix(ci): restore verify workspace permissions by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7992
* feat(external-context): Add submitted-prompt auto recall by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7877
* fix(ci): update the Qwen binary used by ECS runners by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8000
* feat(web-shell): render streaming charts with markdown-chart by @zhangxy-zju in https://github.com/QwenLM/qwen-code/pull/7916
* feat: robust ripgrep by @water-in-stone in https://github.com/QwenLM/qwen-code/pull/7888
* fix(core): mark folders the item budget never expanded by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7868
* fix(feishu): keep code-fence chunks within the message size limit by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/7850
* fix(web-shell): preserve token and base path in session URLs by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7926
* ci: add isolated DSW SWE-bench release pipeline by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/7656
* fix(web-shell): polish Channel pairing requests by @qqqys in https://github.com/QwenLM/qwen-code/pull/7997
* fix(cli): correct hardware cursor off-by-one in fullscreen mode by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7998
* fix(cli): prevent SGR mouse events from being swallowed as paste on Windows by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7988
* feat(channels): add DingTalk interactive cards by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/6930
* feat(web-shell): refine advanced table controls by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7999
* fix(serve): allow bounded reads of large text files by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7947
* fix(web-shell): prefer artifact type metadata in cards by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7973
* fix(web-shell): reduce composer input latency by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8015
* fix(webui): stabilize session history pagination by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8001
* fix(release): skip notes-start-tag when previous release diverges from target (#7969) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7970
* fix(sdk): raise daemon browser bundle budget to 177KB by @wenshao in https://github.com/QwenLM/qwen-code/pull/8024
* fix(cli): map Kitty Super (Command) modifier to meta by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7996
* fix(daemon): distinguish draining channel worker diagnostics by @destire-mio in https://github.com/QwenLM/qwen-code/pull/7932
* feat(triage): lead the verify comment with a qualitative verdict, fold the Chinese by @wenshao in https://github.com/QwenLM/qwen-code/pull/7974
* fix(review): preflight free disk before build-test installs and builds by @wenshao in https://github.com/QwenLM/qwen-code/pull/7986
* test(integration): migrate flaky E2E tests to fake-openai-server by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7934
* feat(triage): run external /verify on ECS behind a workspace wipe by @wenshao in https://github.com/QwenLM/qwen-code/pull/7985
* fix(cli): reserve Ctrl+Shift+C for terminal copy, not quit/clear by @chiga0 in https://github.com/QwenLM/qwen-code/pull/8011
* fix(core): auto-record artifact file writes by @chiga0 in https://github.com/QwenLM/qwen-code/pull/7914
* fix(cli): MCP prompt completion no longer blocks Enter for optional params by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/7995
* feat(hooks): add security.allowPrivateNetworkHooks to bypass SSRF range checks for trusted scopes by @xurik in https://github.com/QwenLM/qwen-code/pull/7968
* feat(web-shell): add split pane header action slot with overflow by @samuelhsin in https://github.com/QwenLM/qwen-code/pull/7808
* feat(channels): add GitLab polling channel adapter by @OrbitZore in https://github.com/QwenLM/qwen-code/pull/7862
* fix(channels): disable native cron in daemon sessions by @qqqys in https://github.com/QwenLM/qwen-code/pull/8034
* feat(channels): add pairing approval management API by @qqqys in https://github.com/QwenLM/qwen-code/pull/8045
* feat(github-channel): filter notification reasons by @xianjianlf2 in https://github.com/QwenLM/qwen-code/pull/8031
* fix(channels): reject unusable GitHub self-allowlists by @zjunothing in https://github.com/QwenLM/qwen-code/pull/8055
* fix(core): drop top-level oneOf from send_message tool schema by @netbrah in https://github.com/QwenLM/qwen-code/pull/7989
* fix(cli): stop resize repaint from causing scroll storm by @chiga0 in https://github.com/QwenLM/qwen-code/pull/8009
* feat(review): disclose a zero-finding Approve on a non-trivial diff as low signal by @wenshao in https://github.com/QwenLM/qwen-code/pull/7987
* fix(core): rebind fork capabilities on resume by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7927
* feat(core): preload deferred tools within a context-window threshold by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/7922
* fix(channels): make GitHub final response publication single-shot by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8033
* fix(ci): restore workspace ownership before checkout in PR review job by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8062
* fix(release): bump preview base past published stable by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7978
* test(web-shell): expand restored-history pagination regression coverage by @PratikWayase in https://github.com/QwenLM/qwen-code/pull/7907
* fix(serve): Add certified session writer handoff by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7976
* test(integration): Measure immediate prompt dispatch stages by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7994
* fix(core): allow transport stream retry during the thinking-only phase by @ComplexSimply in https://github.com/QwenLM/qwen-code/pull/7938
* fix(github-channel): validate and document reasonFilter by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8035
* fix(core): guard against CJK-driven char/4 under-count in output clamp by @zambalee in https://github.com/QwenLM/qwen-code/pull/7963
* fix(core): preserve active Todo context across tool turns by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/7919
* feat(review): add `review run` — headless review with a machine-readable verdict by @wenshao in https://github.com/QwenLM/qwen-code/pull/7983
* fix(cli): stamp QWEN_CODE_CLI at the workspace entry and publish QWEN_CODE_MODEL by @wenshao in https://github.com/QwenLM/qwen-code/pull/7993
* feat(verify-pr): add seven techniques from maintainer verification rounds by @wenshao in https://github.com/QwenLM/qwen-code/pull/8010
* feat(triage): raise the /verify agent budget from 25m to 120m by @wenshao in https://github.com/QwenLM/qwen-code/pull/8014
* fix(autofix): cumulative timeout breaker, narrowed retry prompt, truthful handoff wording by @wenshao in https://github.com/QwenLM/qwen-code/pull/8044
* feat(autofix): post a takeover milestone digest every tenth pushed round by @wenshao in https://github.com/QwenLM/qwen-code/pull/8046
* fix(autofix): post the takeover engage ack from the command itself by @wenshao in https://github.com/QwenLM/qwen-code/pull/8043
* test(e2e): force delegation in flaky subagent case (#8070) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8073
* fix(web-shell): stabilize enhanced table controls by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8041
* feat(github-channel): add transient working reaction by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/8061
* fix(integration): make interactive read-then-write test deterministic (#8060) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8064
* feat(autofix): back off scan inspection of idle candidates by @wenshao in https://github.com/QwenLM/qwen-code/pull/8049
* fix(web-shell): show server queue status for pending messages by @wenshao in https://github.com/QwenLM/qwen-code/pull/8065
* fix(web-shell): improve artifact previews by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8078
* feat(triage): make /verify evidence screenshots actually possible by @wenshao in https://github.com/QwenLM/qwen-code/pull/8016
* fix(ci): gate the attachment guard before it allocates a runner by @wenshao in https://github.com/QwenLM/qwen-code/pull/8095
* fix(web-shell): translate legacy /skills invocations by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8103
* fix(verify-pr): budget evidence capture in scope selection by @wenshao in https://github.com/QwenLM/qwen-code/pull/8104
* fix(web-shell): show prompt send failure and retry action by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8106
* fix(web-shell): make question submission retryable by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8096
* fix(web-shell): preserve approved tool results by @ytahdn in https://github.com/QwenLM/qwen-code/pull/8099
* fix(autofix): answer round-cap refusals on the PR instead of only in logs by @wenshao in https://github.com/QwenLM/qwen-code/pull/8067
* fix(autofix): salvage race-lost pushes by merging the moved head and retrying by @wenshao in https://github.com/QwenLM/qwen-code/pull/8042
* feat(autofix): per-source feedback budget in Critical-only mode by @wenshao in https://github.com/QwenLM/qwen-code/pull/8071
* feat(core): tag UserPromptSubmit hook context and record display provenance by @zjgzx1988 in https://github.com/QwenLM/qwen-code/pull/7956
* fix(core): abort workflows during session shutdown by @qqqys in https://github.com/QwenLM/qwen-code/pull/8107
* fix(test): resolve turn completion on result messages in setModel E2E test (#8072) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8075
* feat(serve): page large text files by byte cursor by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/8002
* fix(test): give multi-model E2E turns more CI timeout headroom (#8108) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/8111
* fix(serve): Prevent repeated workspace skill rescans by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/8080
* feat(review): statement-level mutation probes in test-efficacy by @wenshao in https://github.com/QwenLM/qwen-code/pull/8020
* feat(web-shell): add contextual task panels by @ytahdn in https://github.com/QwenLM/qwen-code/pull/7929
* feat(agent): add fork tool execution allowlist by @destire-mio in https://github.com/QwenLM/qwen-code/pull/8066
* fix(serve): Isolate daemon session maintenance writers by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/7975
* fix(serve): restore build by routing side-task rollback through the workspace session service by @wenshao in https://github.com/QwenLM/qwen-code/pull/8144
* fix(web-shell): isolate worktree session execution by @wenshao in https://github.com/QwenLM/qwen-code/pull/8068
* feat(web-shell): manage pairing approvals by @qqqys in https://github.com/QwenLM/qwen-code/pull/8081
* fix(test): allow slow permission mode E2E responses by @wenshao in https://github.com/QwenLM/qwen-code/pull/8149
* fix(test): make auto-edit permission E2E deterministic by @wenshao in https://github.com/QwenLM/qwen-code/pull/8154
## New Contributors
* @VitaliBabkin made their first contribution in https://github.com/QwenLM/qwen-code/pull/7827
* @xianjianlf2 made their first contribution in https://github.com/QwenLM/qwen-code/pull/8031
* @zambalee made their first contribution in https://github.com/QwenLM/qwen-code/pull/7963
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/dsw-manual-poc-20260727-1...v0.21.1-nightly.20260731.702932cc7