<!-- 使用 .github/release.yml 中的配置(提交哈希 e443e2d2384e3ba61d783bd96a265082298f4fe8)生成发布说明 -->
## 更新内容
* fix(cli): 将 ACP 权限队列的作用域限制在会话内 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/11802
* feat(channels): 添加支持钉钉的共享输出模式 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11822
* feat(web-shell): 在标签页之间滑动显示当前激活的指示器 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11844
* refactor(goal): 删除第一代 Stop-hook Goal 实现 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11900
* fix(ci): 将自动修复运行器标签与排队审查分离 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11912
* feat(daemon): 本地枚举已安装的扩展技能 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11281
* feat(web-shell): 在全局轮次导航中跟随阅读位置 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11801
* feat(workflows): 通过 +Nk 指令共享每轮次 token 预算 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11917
* feat(serve): 添加基于预算的 ACP 子进程准入机制 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11911
* feat(cli): 为 Linux 添加 bwrap 内核沙箱后端 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11614
* fix(cli): 恢复共享 Skill 状态及运行器 CI 检查 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11933
* fix(vscode): 弃用旧版 ACP 输入桥接 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11928
* feat(core): 支持外部推理配置及默认值 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11856
* feat(settings): 默认开启跨会话消息传递 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11840
* fix(web-shell): 在会话侧边栏显示 Qwen Live 任务 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11830
* fix(ci): 隔离运行器计划测试夹具的模块作用域 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11938
* feat(core): 按名称运行已保存的工作流,并将工作流权限绑定到脚本内容 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11943
* feat(workflow): 在运行和恢复期间保留源引用 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11931
* refactor(vscode): 移除未使用的 token 限制镜像 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11946
* fix(core): 在调用时传递 PTY 加载原因,而非保存在模块状态中 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11923
* feat(workflow): 关联智能体调度与嵌套工作流调用 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11932
* docs(goal): 在实现移除后弃用 Stop-hook 时代的文档说明 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11922
* fix(core): 在修剪 hook 匹配器时保留转义的后导空白 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11871
* feat(workflows): 添加尺寸指南、结构预览及大型运行警告 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11939
* fix(core): 展开 ${session_id} 并在 Responses 协议线上添加 User-Agent by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11947
* feat(workflows): 允许模型调用声明了 whenToUse 的扩展工作流 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11957
* feat(daemon): 为 prompt 和 replay API 支持摘要投影 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11920
* ci(desktop): CLI 发布时同步发布桌面应用 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11575
* test(cli): 修复 Windows 环境下的 bwrap 沙箱测试套件 (#11968) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11970
* fix(core): 在 MiniMax chat-completions 协议线上保留工具参数 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11842
* fix(web-shell): 阅读时停止审批面板的自动调整大小 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11930
* fix(release): 基于磁盘最低用量限制池路由验证任务 by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11972
* feat(web-shell): 添加脚注预览及每轮次来源 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11480
* fix(web-shell): 保留工具描述路径中的分隔符 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11977
* feat(telemetry): 生成 Goal 生命周期事件与指标 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11927
* feat(cli): 打开 /hooks 时重新加载 hook 注册表 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11904
* fix(core): 将 Goal 轮次结束状态持久化至模型历史之外 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11924
* feat(serve): 当准入满载时回收空闲的 ACP 子进程 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11940
* feat(web-shell): 连接至选定的远程守护进程 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11548
* fix(web-shell): 将摘要置于轮次输出下方并进行去重 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11986
* feat(web-shell): 从展开的工具详情中预览文件 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11982
* fix(ci): 修复 e2e-test-linux 中的 docker 锁缓存所有权问题 (#11990) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11992
* feat(serve): 使用参数、sourceRef 及调用方提供的脚本启动工作流运行 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11979
* refactor(serve): 分离 ACP 控制平面与通道框架 by @wenshao in https://github.com/QwenLM/qwen-code/pull/11916
* fix(cli): 在无头轮次运行前注册可由模型调用的命令 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11994
* fix(vscode): 从远程窗口的 webview 访问工作区守护进程 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11983
* feat(web-shell): 自定义上下文详情并折叠快照 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11996
* docs(serve): 明确守护进程事件恢复契约 by @wenshao in https://github.com/QwenLM/qwen-code/pull/12015
* test(serve): 强化 REST 文档契约检查 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12009
* feat(goal): 对前台子代理和验证器令牌使用进行计费 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11998
* docs(users): 将新用户引导指向 Token Plan 而非 Coding Plan by @wenshao in https://github.com/QwenLM/qwen-code/pull/11980
* feat(dingtalk): 在私信中携带发送者身份 by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/12017
* feat(goal): 显示轮次和活跃时间预算 by @qqqys in https://github.com/QwenLM/qwen-code/pull/11999
* fix(cli): 使 ink useBoxMetrics 循环保护机制独立于机器速度 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11835
* fix(ci): 跳过已完成的桌面端发布 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12013
* fix(web-shell): 在独立 Web Shell 中遵循 ui.theme 和 general.language 设置 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11961
* feat(omni): 将多模态媒体管线集成到主分支 by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/12019
* docs(daemon): 完善集成路径指南 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12005
* docs(serve): 记录已合并的 ACP 边界接受情况 by @wenshao in https://github.com/QwenLM/qwen-code/pull/12024
* fix(ci): 在打包 VSIX 前等待已发布的导出渲染器 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12036
* fix(web-shell): 修复在两条导航路径中丢失守护进程凭据的问题 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12011
* fix(acp): 恢复托管的自动记忆提取功能 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12018
* fix(cli): 修复与 ink 对比发现的十二项 OpenTUI 功能差距 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/11806
* fix(core): 跨工具往返调用正确统计 Stop-hook 阻塞 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12062
* feat(workflows): 允许 agent() 将子代理限制在显式工具白名单内 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12051
* fix(core): 避免在斜杠命令完成后出现误中断 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12052
* test(cli): 更新循环保护注释以匹配已交付的机制 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12065
* fix(web-shell): 页面刷新后恢复上下文使用 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12070
* docs(hooks): 合并重复的 Browsing 章节 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12071
* feat: 按模型选择 OpenAI wire API by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11538
* fix(desktop): 在删除冒烟测试工作区前等待守护进程排空 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12049
* fix(core,cli): 修复 Windows 流水线剩余的三项失败 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12063
* fix(ci): 在分派基准测试前等待 npm 发布完成 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12086
* feat(core): 在进度事件中识别钩子调用并公告消息总线 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12075
* feat(external-context): 支持可配置的 Mem0 提供程序 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/9952
* fix(extensions): 更新后显示进度并清除更新标志 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11886
* fix(acp): 在回放转录时保留用户资源链接 by @XIQIXIQIXIQI in https://github.com/QwenLM/qwen-code/pull/12088
* feat(web-shell): 支持主机设置项排除 by @Lilian0122 in https://github.com/QwenLM/qwen-code/pull/11975
* feat(web-shell): 将过大粘贴内容折叠为附件卡片 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12084
* feat(browser-use): 添加基于 Playwright 的 Browser SDK by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11241
* feat(workflows): 添加仅名称锁,将 Workflow 工具限制为命名工作流 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12078
* fix(core): 按各自来源加载系统级钩子 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12077
* fix(core): 正确报告 http、prompt 和 function 钩子运行器的实际结果 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12081
* fix(core): 清理文件系统重命名路径时的已知路径问题 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12087
* fix(vscode): 拒绝不支持的 IPv6 远程 webview URL by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12092
* feat(web-shell): 从工作区分支选择器管理 git 远程仓库 by @wenshao in https://github.com/QwenLM/qwen-code/pull/11163
* fix(web-shell): 为 tools.workflowNameOnly 设置项添加别名 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12100
* test(core): 在不包含调用 ID 的情况下比较钩子进度结果 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12104
* fix(web-shell): 在设置面板中为 tools.workflowNameOnly 添加别名 (#12094) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/12103
* docs(core): 告知 /goal-draft propose_goal 强制实施的目标限制 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12101
* feat(cli): 将 Goal 状态记录写入会话导出 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12099
* feat(goal): 根据对话记录尾部判断终端提案 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12105
* fix(cli): 在 /context 中优先使用按会话缓存的 token 计数 by @kabishou11 in https://github.com/QwenLM/qwen-code/pull/12066
* refactor(goal): 停止在所有界面显示检查点健康状态 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12114
* feat(web-shell): 添加 PWA 安装支持及 Android 开发终端 by @jabrailkhalil in https://github.com/QwenLM/qwen-code/pull/11722
* fix(core): 在记录的对话中保留 MCP 应用 HTML,以便回放时能正确渲染 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12131
* fix(core): 在 V4 限制下解析 DeepSeek 官方 API 的 deepseek-flash 名称 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/11909
* refactor(goal): 删除证据检查点及目录相关代码 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12120
* refactor(cli): 使用 OpenTUI 已使用的视图绘制 Ink Goal 卡片 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12110
* test(serve): 将引导操作绑定到其对应的协议部分 by @mohammedmessaoudene-cmd in https://github.com/QwenLM/qwen-code/pull/11808
* fix(core): 在模型名称规范化过程中保留 DeepSeek V4 的生成后缀 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/12124
* fix(core): 在 isAsyncOperator 中仅将空格/制表符/换行符视为单词分隔符 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11865
* fix(mcp): 显示 MCP 应用资源加载警告 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11960
* fix(serve): 当工作区为家目录时,从用户作用域读取频道设置 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11083
* fix(core): 从日志历史中清除已删除会话的提示词 by @L4XB in https://github.com/QwenLM/qwen-code/pull/11769
* fix(workflows): 拒绝没有日志的恢复请求,并在重启时保持运行的 sourceRef by @qqqys in https://github.com/QwenLM/qwen-code/pull/12097
* refactor(goal): 将 Goal 工具每次模型请求的开销降低五分之二 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12123
* feat(core): 在钩子列表中定义 enabled 和 disabledReason by @qqqys in https://github.com/QwenLM/qwen-code/pull/12139
* test(cli): 在提供程序顺序测试中,将 Grok 排在 MiniMax 之前进行逐步测试 by @harjothkhara in https://github.com/QwenLM/qwen-code/pull/10089
* feat(core): 导出钩子事件显示元数据及纯超时辅助函数 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12138
* docs(ci): 说明为何审查 PR 扫描需要整个工作区隔离 by @CanReader in https://github.com/QwenLM/qwen-code/pull/10493
* docs(daemon): 完善 REST 集成覆盖说明 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12144
* docs(config): 注明 baseUrl 是托管 OpenAI 兼容网关的 /v1 根路径 (#10362) by @now-ing in https://github.com/QwenLM/qwen-code/pull/11155
* fix(web-shell): 当首次提示会话的附加被取代时予以保留 by @cactuser-Lu in https://github.com/QwenLM/qwen-code/pull/12149
* feat(browser-use): 添加 Chrome 原生消息传递中继 by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11242
* fix(goal): 提示恢复过程中跳过了哪些较新的记录 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12148
* fix(review): 在 dimension-agent 简报中填入 PR 工作树的绝对路径 by @kabishou11 in https://github.com/QwenLM/qwen-code/pull/11926
* feat(workflows): 为每次运行记录检查点,并展示被重启中断的运行 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12159
* fix(web-shell): 允许在会话创建期间进行顺序 SDK 请求 by @shenyankm in https://github.com/QwenLM/qwen-code/pull/11913
* feat(web-shell): 从结构化元数据中渲染压缩结果 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12141
* test(sdk): 按消息验证内容块停止逻辑 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12158
* feat(core): 为子智能体添加容器执行支持 by @wenshao in https://github.com/QwenLM/qwen-code/pull/11711
* feat(web-shell): 跨所有分支以车道图形式绘制提交历史,并支持搜索 by @wenshao in https://github.com/QwenLM/qwen-code/pull/12152
* refactor(goal): 废弃在 Goal 状态记录到日志之前记录的 Goal 的恢复功能 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12155
* feat(live): 将 Web 终端接纳为浏览器 Live Host by @qqqys in https://github.com/QwenLM/qwen-code/pull/12166
* fix(web-shell): 缩小画布时保持 Mermaid 画布位置固定 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12177
* fix(core): 停止在会话恢复中标记未回复的通知 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12007
* fix(cli): 将完整轮次的工具取消操作排除在错误路径之外 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11154
* feat(web-shell): 添加按轮次标记的“已满足/未满足”状态 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12174
* feat(live): 从 realtimeOnly modelProviders 路由解析 Live Voice 模型 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12173
* refactor(goal)!: 停止触发 active_goal 流事件 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12181
* feat(web-shell): 将包随 CLI 版本一同发布 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12178
* refactor(goal): 在 ACP 线路上保留一个 Goal 卡片并为其模块命名 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12187
* perf(core): 为扩展目录路由实现仅清单刷新 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/12153
* feat(core): 从常驻工具集中组装系统提示词 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12145
* feat(web-shell): 支持在浏览器中保持实时语音通话连接 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12189
* refactor(goal): 通过核心读取器读取不可读状态的运行卡片 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12194
* fix(release): 暂时暂停 web-shell 的发布 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12202
* test(core): 在 authoring-hint 测试中,恢复前等待完整运行退出 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12196
* feat(web-shell): 在状态栏显示目标(Goal)的回合数与活跃时间上限 by @qqqys in https://github.com/QwenLM/qwen-code/pull/12201
* feat(serve): 允许用户停止工作区运行时以释放 ACP 容量 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/12008
* fix(core): 按字节长度解析 LSP 帧,以防止非 ASCII 响应被丢弃 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12210
* fix(desktop): 将 node-pty 预构建产物纳入捆绑运行时 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12225
* docs(verify-pr): 添加本地后续发现、发布路径及构建说明 by @wenshao in https://github.com/QwenLM/qwen-code/pull/12232
* feat(web-shell): 将 Plan 条目移至 composer 添加菜单 by @wenshao in https://github.com/QwenLM/qwen-code/pull/12218
## 新贡献者
* @Lilian0122 在 https://github.com/QwenLM/qwen-code/pull/11975 完成了首次贡献
* @jabrailkhalil 在 https://github.com/QwenLM/qwen-code/pull/11722 完成了首次贡献
* @mohammedmessaoudene-cmd 在 https://github.com/QwenLM/qwen-code/pull/11808 完成了首次贡献
* @L4XB 在 https://github.com/QwenLM/qwen-code/pull/11769 完成了首次贡献
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/cua-driver-rs-v0.20.9...desktop-v0.24.1
<!-- Release notes generated using configuration in .github/release.yml at e443e2d2384e3ba61d783bd96a265082298f4fe8 -->
## What's Changed
* fix(cli): scope the ACP permission queue to the session by @chiga0 in https://github.com/QwenLM/qwen-code/pull/11802
* feat(channels): add shared output modes with DingTalk support by @qqqys in https://github.com/QwenLM/qwen-code/pull/11822
* feat(web-shell): slide the active pill between tabs by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11844
* refactor(goal): delete the first-generation Stop-hook Goal implementation by @qqqys in https://github.com/QwenLM/qwen-code/pull/11900
* fix(ci): separate autofix runner labels from queued reviews by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11912
* feat(daemon): enumerate installed extension skills locally by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11281
* feat(web-shell): follow the reading position in the global turn navigation by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11801
* feat(workflows): share a per-turn token budget from a +Nk directive by @qqqys in https://github.com/QwenLM/qwen-code/pull/11917
* feat(serve): add budget-based ACP child admission by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11911
* feat(cli): add bwrap kernel sandbox backend for Linux by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11614
* fix(cli): restore shared Skill status and runner CI checks by @qqqys in https://github.com/QwenLM/qwen-code/pull/11933
* fix(vscode): retire legacy ACP input bridges by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11928
* feat(core): support external reasoning profiles and defaults by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11856
* feat(settings): turn cross-session messaging on by default by @qqqys in https://github.com/QwenLM/qwen-code/pull/11840
* fix(web-shell): show Qwen Live tasks in session sidebar by @qqqys in https://github.com/QwenLM/qwen-code/pull/11830
* fix(ci): isolate runner schedule fixture module scope by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11938
* feat(core): run saved workflows by name and pin workflow grants to script content by @qqqys in https://github.com/QwenLM/qwen-code/pull/11943
* feat(workflow): preserve source references across runs and resumes by @qqqys in https://github.com/QwenLM/qwen-code/pull/11931
* refactor(vscode): remove unused token limit mirror by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11946
* fix(core): carry the PTY load reason on the call, not in module state by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11923
* feat(workflow): correlate agent dispatches and nested workflow calls by @qqqys in https://github.com/QwenLM/qwen-code/pull/11932
* docs(goal): retire the Stop-hook era prose after the implementation was removed by @qqqys in https://github.com/QwenLM/qwen-code/pull/11922
* fix(core): keep escaped trailing whitespace when trimming hook matchers by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11871
* feat(workflows): size guideline, structure preview and large-run warning by @qqqys in https://github.com/QwenLM/qwen-code/pull/11939
* fix(core): expand ${session_id} and stamp User-Agent on the Responses wire by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11947
* feat(workflows): let the model invoke extension workflows that declare whenToUse by @qqqys in https://github.com/QwenLM/qwen-code/pull/11957
* feat(daemon): support summary projection for prompt and replay APIs by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11920
* ci(desktop): publish the desktop app when the CLI releases by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11575
* test(cli): unbreak the bwrap sandbox suites on the Windows lane (#11968) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11970
* fix(core): keep tool parameters on the MiniMax chat-completions wire by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11842
* fix(web-shell): stop the approval sheet resizing while reading by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11930
* fix(release): gate pool-routed validation jobs on a disk floor by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11972
* feat(web-shell): add footnote previews and per-turn sources by @callmeYe in https://github.com/QwenLM/qwen-code/pull/11480
* fix(web-shell): preserve separators in tool description paths by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11977
* feat(telemetry): emit a Goal lifecycle event and metrics by @qqqys in https://github.com/QwenLM/qwen-code/pull/11927
* feat(cli): reload hook registry when /hooks opens by @qqqys in https://github.com/QwenLM/qwen-code/pull/11904
* fix(core): persist Goal turn endings outside model history by @qqqys in https://github.com/QwenLM/qwen-code/pull/11924
* feat(serve): reclaim idle ACP children when admission is full by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11940
* feat(web-shell): connect to a selected remote daemon by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11548
* fix(web-shell): keep the recap below a turn's outputs and dedupe it by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11986
* feat(web-shell): preview files from expanded tool details by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11982
* fix(ci): heal the docker lock cache ownership in e2e-test-linux (#11990) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/11992
* feat(serve): start workflow runs with args, sourceRef and a caller-supplied script by @qqqys in https://github.com/QwenLM/qwen-code/pull/11979
* refactor(serve): separate ACP control plane and channel harness by @wenshao in https://github.com/QwenLM/qwen-code/pull/11916
* fix(cli): register model-invocable commands before headless turns by @qqqys in https://github.com/QwenLM/qwen-code/pull/11994
* fix(vscode): reach the workspace daemon from a remote window's webview by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11983
* feat(web-shell): customize context details and collapse snapshots by @ytahdn in https://github.com/QwenLM/qwen-code/pull/11996
* docs(serve): clarify daemon event recovery contracts by @wenshao in https://github.com/QwenLM/qwen-code/pull/12015
* test(serve): harden REST docs contract checks by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12009
* feat(goal): bill foreground subagents and verifier token usage by @qqqys in https://github.com/QwenLM/qwen-code/pull/11998
* docs(users): point onboarding at Token Plan instead of Coding Plan by @wenshao in https://github.com/QwenLM/qwen-code/pull/11980
* feat(dingtalk): carry sender identity in direct messages by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/12017
* feat(goal): show turn and active-time budgets by @qqqys in https://github.com/QwenLM/qwen-code/pull/11999
* fix(cli): make the ink useBoxMetrics loop guard independent of machine speed by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11835
* fix(ci): skip completed desktop releases by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12013
* fix(web-shell): honor ui.theme and general.language in the standalone Web Shell by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11961
* feat(omni): integrate multimodal media pipeline into main by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/12019
* docs(daemon): complete integration path guide by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12005
* docs(serve): record merged ACP boundary acceptance by @wenshao in https://github.com/QwenLM/qwen-code/pull/12024
* fix(ci): wait for the published export renderer before packaging the VSIX by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12036
* fix(web-shell): stop dropping the daemon credential on two navigation paths by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12011
* fix(acp): restore managed auto-memory extraction by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12018
* fix(cli): close twelve OpenTUI parity gaps found against ink by @chiga0 in https://github.com/QwenLM/qwen-code/pull/11806
* fix(core): count Stop-hook blocks across tool round trips by @qqqys in https://github.com/QwenLM/qwen-code/pull/12062
* feat(workflows): let agent() narrow a subagent to an explicit tool allowlist by @qqqys in https://github.com/QwenLM/qwen-code/pull/12051
* fix(core): avoid false interruption after completed slash commands by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12052
* test(cli): refresh the loop-guard comments to the shipped mechanism by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12065
* fix(web-shell): restore context usage after page refresh by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12070
* docs(hooks): merge the duplicated Browsing sections by @qqqys in https://github.com/QwenLM/qwen-code/pull/12071
* feat: select the OpenAI wire API per model by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11538
* fix(desktop): wait out the daemon drain before removing the smoke workspace by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12049
* fix(core,cli): green the Windows lane's three remaining failures by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12063
* fix(ci): wait for the release on npm before dispatching the benchmark by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12086
* feat(core): identify hook invocations in progress events and announce the message bus by @qqqys in https://github.com/QwenLM/qwen-code/pull/12075
* feat(external-context): Support configurable Mem0 providers by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/9952
* fix(extensions): show progress and clear the update flag after an update by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11886
* fix(acp): preserve user resource links in transcript replay by @XIQIXIQIXIQI in https://github.com/QwenLM/qwen-code/pull/12088
* feat(web-shell): support host settings item exclusions by @Lilian0122 in https://github.com/QwenLM/qwen-code/pull/11975
* feat(web-shell): fold oversized pastes into an attachment card by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12084
* feat(browser-use): add Playwright-based Browser SDK by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11241
* feat(workflows): add a name-only lock that restricts the Workflow tool to named workflows by @qqqys in https://github.com/QwenLM/qwen-code/pull/12078
* fix(core): load system-scope hooks under their own source by @qqqys in https://github.com/QwenLM/qwen-code/pull/12077
* fix(core): report real outcomes from the http, prompt and function hook runners by @qqqys in https://github.com/QwenLM/qwen-code/pull/12081
* fix(core): scrub a known path the filesystem re-spells by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12087
* fix(vscode): reject unsupported IPv6 remote webview URLs by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12092
* feat(web-shell): manage git remotes from the workspace branch picker by @wenshao in https://github.com/QwenLM/qwen-code/pull/11163
* fix(web-shell): alias the tools.workflowNameOnly settings row by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12100
* test(core): compare hook progress outcomes without the invocation id by @qqqys in https://github.com/QwenLM/qwen-code/pull/12104
* fix(web-shell): alias tools.workflowNameOnly in the settings panel (#12094) by @qwen-code-dev-bot in https://github.com/QwenLM/qwen-code/pull/12103
* docs(core): tell /goal-draft the objective limit propose_goal enforces by @qqqys in https://github.com/QwenLM/qwen-code/pull/12101
* feat(cli): write Goal state records into session exports by @qqqys in https://github.com/QwenLM/qwen-code/pull/12099
* feat(goal): judge terminal proposals from the transcript tail by @qqqys in https://github.com/QwenLM/qwen-code/pull/12105
* fix(cli): prefer per-session cached token count in /context by @kabishou11 in https://github.com/QwenLM/qwen-code/pull/12066
* refactor(goal): stop showing checkpoint health on every surface by @qqqys in https://github.com/QwenLM/qwen-code/pull/12114
* feat(web-shell): add PWA installability and Android development shell by @jabrailkhalil in https://github.com/QwenLM/qwen-code/pull/11722
* fix(core): keep MCP App html in recorded transcripts so replay can render by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12131
* fix(core): resolve DeepSeek's official API deepseek-flash name at V4 limits by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/11909
* refactor(goal): delete the evidence checkpoint and catalog code by @qqqys in https://github.com/QwenLM/qwen-code/pull/12120
* refactor(cli): draw the ink Goal cards from the view OpenTUI already uses by @qqqys in https://github.com/QwenLM/qwen-code/pull/12110
* test(serve): bind guide operations to their protocol sections by @mohammedmessaoudene-cmd in https://github.com/QwenLM/qwen-code/pull/11808
* fix(core): keep the DeepSeek V4 generation suffix through model-name normalization by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/12124
* fix(core): treat only space/tab/newline as word separators in isAsyncOperator by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11865
* fix(mcp): show MCP App resource load warnings by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/11960
* fix(serve): read channel settings from user scope when workspace is home by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11083
* fix(core): purge a deleted session's prompts from the log history by @L4XB in https://github.com/QwenLM/qwen-code/pull/11769
* fix(workflows): refuse a resume that has no journal, and keep a run's sourceRef across restarts by @qqqys in https://github.com/QwenLM/qwen-code/pull/12097
* refactor(goal): cut what the Goal tools cost every model request by two fifths by @qqqys in https://github.com/QwenLM/qwen-code/pull/12123
* feat(core): define enabled and disabledReason in the hooks listing by @qqqys in https://github.com/QwenLM/qwen-code/pull/12139
* test(cli): step through Grok before MiniMax in the provider-order test by @harjothkhara in https://github.com/QwenLM/qwen-code/pull/10089
* feat(core): export hook event display metadata and pure timeout helpers by @qqqys in https://github.com/QwenLM/qwen-code/pull/12138
* docs(ci): explain why the review-pr sweep needs a whole-workspace quarantine by @CanReader in https://github.com/QwenLM/qwen-code/pull/10493
* docs(daemon): complete REST integration coverage by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12144
* docs(config): note baseUrl is the /v1 root for hosted OpenAI-compatible gateways (#10362) by @now-ing in https://github.com/QwenLM/qwen-code/pull/11155
* fix(web-shell): keep first-prompt session when its attach is superseded by @cactuser-Lu in https://github.com/QwenLM/qwen-code/pull/12149
* feat(browser-use): add Chrome Native Messaging relay by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/11242
* fix(goal): say which newer records recovery walked past by @qqqys in https://github.com/QwenLM/qwen-code/pull/12148
* fix(review): put PR worktree absolute path in dimension-agent briefs by @kabishou11 in https://github.com/QwenLM/qwen-code/pull/11926
* feat(workflows): record a checkpoint for every run and surface runs a restart interrupted by @qqqys in https://github.com/QwenLM/qwen-code/pull/12159
* fix(web-shell): allow sequential SDK requests during session creation by @shenyankm in https://github.com/QwenLM/qwen-code/pull/11913
* feat(web-shell): render the compression outcome from structured meta by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12141
* test(sdk): validate content block stops per message by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12158
* feat(core): add container execution for subagents by @wenshao in https://github.com/QwenLM/qwen-code/pull/11711
* feat(web-shell): draw the commit history as a lane graph, across all branches, with search by @wenshao in https://github.com/QwenLM/qwen-code/pull/12152
* refactor(goal): retire recovery of Goals recorded before Goal state was journaled by @qqqys in https://github.com/QwenLM/qwen-code/pull/12155
* feat(live): admit the Web Shell as a browser Live Host by @qqqys in https://github.com/QwenLM/qwen-code/pull/12166
* fix(web-shell): keep the mermaid canvas fixed while zooming out by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12177
* fix(core): stop session recovery from flagging unanswered notifications by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12007
* fix(cli): keep full-turn tool cancellation out of the error path by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/11154
* feat(web-shell): add per-turn satisfied / not satisfied marks by @ytahdn in https://github.com/QwenLM/qwen-code/pull/12174
* feat(live): resolve the Live Voice model from a realtimeOnly modelProviders route by @qqqys in https://github.com/QwenLM/qwen-code/pull/12173
* refactor(goal)!: stop emitting the active_goal stream event by @qqqys in https://github.com/QwenLM/qwen-code/pull/12181
* feat(web-shell): publish the package with the cli release by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12178
* refactor(goal): keep one Goal card on the ACP wire and name the module for it by @qqqys in https://github.com/QwenLM/qwen-code/pull/12187
* perf(core): manifest-only refresh for the extension catalog route by @callmeYe in https://github.com/QwenLM/qwen-code/pull/12153
* feat(core): assemble the system prompt from the resident tool set by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12145
* feat(web-shell): hold a Live Voice call from the browser by @qqqys in https://github.com/QwenLM/qwen-code/pull/12189
* refactor(goal): read the unreadable-state running card through the core reader by @qqqys in https://github.com/QwenLM/qwen-code/pull/12194
* fix(release): temporarily pause web-shell publishing by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12202
* test(core): await full run exit before resuming in the authoring-hint test by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12196
* feat(web-shell): show a Goal's turn and active-time ceilings on the status strip by @qqqys in https://github.com/QwenLM/qwen-code/pull/12201
* feat(serve): let users stop workspace runtimes to release ACP capacity by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/12008
* fix(core): parse LSP frames by byte length so non-ASCII responses are not dropped by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12210
* fix(desktop): stage the node-pty prebuild into the bundled runtime by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/12225
* docs(verify-pr): add local follow-up discovery, publish path, and build recipes by @wenshao in https://github.com/QwenLM/qwen-code/pull/12232
* feat(web-shell): move the Plan entry into the composer add menu by @wenshao in https://github.com/QwenLM/qwen-code/pull/12218
## New Contributors
* @Lilian0122 made their first contribution in https://github.com/QwenLM/qwen-code/pull/11975
* @jabrailkhalil made their first contribution in https://github.com/QwenLM/qwen-code/pull/11722
* @mohammedmessaoudene-cmd made their first contribution in https://github.com/QwenLM/qwen-code/pull/11808
* @L4XB made their first contribution in https://github.com/QwenLM/qwen-code/pull/11769
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/cua-driver-rs-v0.20.9...desktop-v0.24.1