<!-- qwen-release-notes:v1 -->
## 亮点
_详见下方的完整变更列表。_
## 不兼容变更
- refactor(goal)!: 停止发送 active_goal 流事件 ([#12181](https://github.com/QwenLM/qwen-code/pull/12181)) by @qqqys
## 完整变更列表
### 新功能
- feat(workflows): 让 agent() 将子智能体限制为明确的工具白名单 ([#12051](https://github.com/QwenLM/qwen-code/pull/12051)) by @qqqys
- feat: 按模型选择 OpenAI wire API ([#11538](https://github.com/QwenLM/qwen-code/pull/11538)) by @tanzhenxin
- feat(core): 在进度事件中识别钩子调用并公布消息总线 ([#12075](https://github.com/QwenLM/qwen-code/pull/12075)) by @qqqys
- feat(external-context): 支持可配置的 Mem0 提供商 ([#9952](https://github.com/QwenLM/qwen-code/pull/9952)) by @yiliang114
- feat(web-shell): 支持主机设置项排除 ([#11975](https://github.com/QwenLM/qwen-code/pull/11975)) by @Lilian0122
- feat(web-shell): 将过大的粘贴内容折叠为附件卡片 ([#12084](https://github.com/QwenLM/qwen-code/pull/12084)) by @ytahdn
- feat(browser-use): 添加基于 Playwright 的浏览器 SDK ([#11241](https://github.com/QwenLM/qwen-code/pull/11241)) by @tanzhenxin
- feat(workflows): 添加仅名称锁,将 Workflow 工具限制为命名工作流 ([#12078](https://github.com/QwenLM/qwen-code/pull/12078)) by @qqqys
- feat(web-shell): 从工作区分支选择器管理 git 远程仓库 ([#11163](https://github.com/QwenLM/qwen-code/pull/11163)) by @wenshao
- feat(cli): 将 Goal 状态记录写入会话导出 ([#12099](https://github.com/QwenLM/qwen-code/pull/12099)) by @qqqys
- feat(goal): 从对话记录尾部判断终端提案 ([#12105](https://github.com/QwenLM/qwen-code/pull/12105)) by @qqqys
- feat(web-shell): 添加 PWA 可安装性及 Android 开发终端 ([#11722](https://github.com/QwenLM/qwen-code/pull/11722)) by @jabrailkhalil
- feat(core): 在钩子列表中定义 enabled 和 disabledReason ([#12139](https://github.com/QwenLM/qwen-code/pull/12139)) by @qqqys
- feat(core): 导出钩子事件显示元数据及纯超时辅助函数 ([#12138](https://github.com/QwenLM/qwen-code/pull/12138)) by @qqqys
- feat(browser-use): 添加 Chrome Native Messaging 中继 ([#11242](https://github.com/QwenLM/qwen-code/pull/11242)) by @tanzhenxin
- feat(workflows): 为每次运行记录检查点,并展示因重启而中断的运行 ([#12159](https://github.com/QwenLM/qwen-code/pull/12159)) by @qqqys
- feat(web-shell): 从结构化元数据渲染压缩结果 ([#12141](https://github.com/QwenLM/qwen-code/pull/12141)) by @ytahdn
- feat(core): 为子智能体添加容器执行功能 ([#11711](https://github.com/QwenLM/qwen-code/pull/11711)) by @wenshao
- feat(web-shell): 以车道图形式绘制跨所有分支的提交历史,并支持搜索 ([#12152](https://github.com/QwenLM/qwen-code/pull/12152)) by @wenshao
- feat(live): 将 Web Shell 接纳为浏览器 Live Host ([#12166](https://github.com/QwenLM/qwen-code/pull/12166)) by @qqqys
- feat(web-shell): 添加每轮满意度/不满意度标记 ([#12174](https://github.com/QwenLM/qwen-code/pull/12174)) by @ytahdn
- feat(live): 从 realtimeOnly modelProviders 路由解析 Live Voice 模型 ([#12173](https://github.com/QwenLM/qwen-code/pull/12173)) by @qqqys
- feat(web-shell): 随 CLI 版本发布该包 ([#12178](https://github.com/QwenLM/qwen-code/pull/12178)) by @yiliang114
- feat(core): 从常驻工具集组装系统提示词 ([#12145](https://github.com/QwenLM/qwen-code/pull/12145)) by @yiliang114
- feat(web-shell): 在浏览器中发起 Live Voice 通话 ([#12189](https://github.com/QwenLM/qwen-code/pull/12189)) by @qqqys
- feat(web-shell): 在状态栏显示 Goal 的轮次与活跃时间上限 ([#12201](https://github.com/QwenLM/qwen-code/pull/12201)) by @qqqys
- feat(serve): 允许用户停止工作区运行时以释放 ACP 容量 ([#12008](https://github.com/QwenLM/qwen-code/pull/12008)) by @doudouOUC
- feat(web-shell): 将 Plan 入口移至 composer 添加菜单 ([#12218](https://github.com/QwenLM/qwen-code/pull/12218)) by @wenshao
### 错误修复
- fix(ci): 在打包 VSIX 之前等待已发布的导出渲染器 ([#12036](https://github.com/QwenLM/qwen-code/pull/12036)) by @yiliang114
- fix(web-shell): 修复在两条导航路径中丢失守护进程凭据的问题 ([#12011](https://github.com/QwenLM/qwen-code/pull/12011)) by @yiliang114
- fix(acp): 恢复托管的自动记忆提取功能 ([#12018](https://github.com/QwenLM/qwen-code/pull/12018)) by @yiliang114
- fix(cli): 修复与 ink 对比发现的十二个 OpenTUI 兼容性问题 ([#11806](https://github.com/QwenLM/qwen-code/pull/11806)) by @chiga0
- fix(core): 跨工具往返调用统计 Stop-hook 块 ([#12062](https://github.com/QwenLM/qwen-code/pull/12062)) by @qqqys
- fix(core): 避免完成斜杠命令后出现误中断 ([#12052](https://github.com/QwenLM/qwen-code/pull/12052)) by @ytahdn
- fix(web-shell): 页面刷新后恢复上下文使用 ([#12070](https://github.com/QwenLM/qwen-code/pull/12070)) by @ytahdn
- fix(desktop): 在删除冒烟测试工作区前等待守护进程排空 ([#12049](https://github.com/QwenLM/qwen-code/pull/12049)) by @yiliang114
- fix(core,cli): 修复 Windows 流水线剩余的三项测试失败 ([#12063](https://github.com/QwenLM/qwen-code/pull/12063)) by @yiliang114
- fix(ci): 在分派基准测试前等待 npm 发布完成 ([#12086](https://github.com/QwenLM/qwen-code/pull/12086)) by @yiliang114
- fix(extensions): 更新后显示进度并清除更新标志 ([#11886](https://github.com/QwenLM/qwen-code/pull/11886)) by @yiliang114
- fix(acp): 在回放转录内容时保留用户资源链接 ([#12088](https://github.com/QwenLM/qwen-code/pull/12088)) by @XIQIXIQIXIQI
- fix(core): 在其各自源下加载系统级钩子 ([#12077](https://github.com/QwenLM/qwen-code/pull/12077)) by @qqqys
- fix(core): 报告 http、prompt 和 function 钩子运行器的真实结果 ([#12081](https://github.com/QwenLM/qwen-code/pull/12081)) by @qqqys
- fix(core): 修复文件系统路径重新拼写导致的已知路径问题 ([#12087](https://github.com/QwenLM/qwen-code/pull/12087)) by @yiliang114
- fix(vscode): 拒绝不受支持的 IPv6 远程 webview URL ([#12092](https://github.com/QwenLM/qwen-code/pull/12092)) by @yiliang114
- fix(web-shell): 为 tools.workflowNameOnly 设置项添加别名 ([#12100](https://github.com/QwenLM/qwen-code/pull/12100)) by @yiliang114
- fix(web-shell): 在设置面板中为 tools.workflowNameOnly 添加别名 (#12094) ([#12103](https://github.com/QwenLM/qwen-code/pull/12103)) by @qwen-code-dev-bot
- fix(cli): 在 /context 中优先使用按会话缓存的 token 计数 ([#12066](https://github.com/QwenLM/qwen-code/pull/12066)) by @kabishou11
- fix(core): 在记录的转录内容中保留 MCP App 的 HTML 以便回放渲染 ([#12131](https://github.com/QwenLM/qwen-code/pull/12131)) by @yiliang114
- fix(core): 在 V4 限制下解析 DeepSeek 官方 API 的 deepseek-flash 名称 ([#11909](https://github.com/QwenLM/qwen-code/pull/11909)) by @he-yufeng
- fix(core): 在模型名称规范化过程中保留 DeepSeek V4 的生成后缀 ([#12124](https://github.com/QwenLM/qwen-code/pull/12124)) by @he-yufeng
- fix(core): 在 isAsyncOperator 中仅将空格/制表符/换行符视为单词分隔符 ([#11865](https://github.com/QwenLM/qwen-code/pull/11865)) by @yiliang114
- fix(mcp): 显示 MCP App 资源加载警告 ([#11960](https://github.com/QwenLM/qwen-code/pull/11960)) by @doudouOUC
- fix(serve): 当工作区为 home 时从用户作用域读取 channel 设置 ([#11083](https://github.com/QwenLM/qwen-code/pull/11083)) by @yiliang114
- fix(core): 从日志历史中清除已删除会话的提示词 ([#11769](https://github.com/QwenLM/qwen-code/pull/11769)) by @L4XB
- fix(workflows): 拒绝没有日志的恢复请求,并在重启时保持运行的 sourceRef ([#12097](https://github.com/QwenLM/qwen-code/pull/12097)) by @qqqys
- fix(web-shell): 当首次提示会话的附加被替代时保留该会话 ([#12149](https://github.com/QwenLM/qwen-code/pull/12149)) by @cactuser-Lu
- fix(goal): 提示恢复过程中跳过了哪些较新的记录 ([#12148](https://github.com/QwenLM/qwen-code/pull/12148)) by @qqqys
- fix(review): 在 dimension-agent 简报中填入 PR 工作树的绝对路径 ([#11926](https://github.com/QwenLM/qwen-code/pull/11926)) by @kabishou11
- fix(web-shell): 允许在会话创建期间进行顺序 SDK 请求 ([#11913](https://github.com/QwenLM/qwen-code/pull/11913)) by @shenyankm
- fix(web-shell): 缩放时保持 mermaid 画布固定 ([#12177](https://github.com/QwenLM/qwen-code/pull/12177)) by @ytahdn
- fix(core): 防止会话恢复标记未回复的通知 ([#12007](https://github.com/QwenLM/qwen-code/pull/12007)) by @yiliang114
- fix(cli): 将完整轮次的工具取消操作排除在错误路径之外 ([#11154](https://github.com/QwenLM/qwen-code/pull/11154)) by @yiliang114
- fix(release): 暂时暂停 web-shell 发布 ([#12202](https://github.com/QwenLM/qwen-code/pull/12202)) by @yiliang114
- fix(core): 按字节长度解析 LSP 帧,避免丢弃非 ASCII 响应 ([#12210](https://github.com/QwenLM/qwen-code/pull/12210)) by @yiliang114
- fix(desktop): 将 node-pty 预编译文件打包到运行时中 ([#12225](https://github.com/QwenLM/qwen-code/pull/12225)) by @yiliang114
### Performance
- perf(core): 扩展目录路由仅刷新清单 ([#12153](https://github.com/QwenLM/qwen-code/pull/12153)) by @callmeYe
### Documentation
- docs(serve):记录已合并的 ACP 边界接受机制 ([#12024](https://github.com/QwenLM/qwen-code/pull/12024)) by @wenshao
- docs(hooks):合并重复的 Browsing 章节 ([#12071](https://github.com/QwenLM/qwen-code/pull/12071)) by @qqqys
- docs(core):告知 /goal-draft propose_goal 强制实施的目标限制 ([#12101](https://github.com/QwenLM/qwen-code/pull/12101)) by @qqqys
- docs(ci):解释为何 review-pr 扫描需要整个工作区隔离 ([#10493](https://github.com/QwenLM/qwen-code/pull/10493)) by @CanReader
- docs(daemon):完善 REST 集成覆盖范围 ([#12144](https://github.com/QwenLM/qwen-code/pull/12144)) by @yiliang114
- docs(config):注明 baseUrl 是托管 OpenAI 兼容网关的 /v1 根路径 (#10362) ([#11155](https://github.com/QwenLM/qwen-code/pull/11155)) by @now-ing
- docs(verify-pr):添加本地后续发现、发布路径和构建配方 ([#12232](https://github.com/QwenLM/qwen-code/pull/12232)) by @wenshao
### 内部变更
- test(cli):将循环守卫注释更新为实际运行机制 ([#12065](https://github.com/QwenLM/qwen-code/pull/12065)) by @yiliang114
- test(core):在不使用调用 ID 的情况下比较钩子进度结果 ([#12104](https://github.com/QwenLM/qwen-code/pull/12104)) by @qqqys
- refactor(goal):停止在所有界面显示检查点健康状态 ([#12114](https://github.com/QwenLM/qwen-code/pull/12114)) by @qqqys
- refactor(goal):删除证据检查点和目录代码 ([#12120](https://github.com/QwenLM/qwen-code/pull/12120)) by @qqqys
- refactor(cli):从 OpenTUI 已使用的视图中渲染 ink Goal 卡片 ([#12110](https://github.com/QwenLM/qwen-code/pull/12110)) by @qqqys
- test(serve):将引导操作绑定到其协议部分 ([#11808](https://github.com/QwenLM/qwen-code/pull/11808)) by @mohammedmessaoudene-cmd
- refactor(goal):将 Goal 工具每次模型请求的成本降低五分之二 ([#12123](https://github.com/QwenLM/qwen-code/pull/12123)) by @qqqys
- test(cli):在 provider-order 测试中先逐步检查 Grok 再检查 MiniMax ([#10089](https://github.com/QwenLM/qwen-code/pull/10089)) by @harjothkhara
- test(sdk):验证每条消息的内容块停止条件 ([#12158](https://github.com/QwenLM/qwen-code/pull/12158)) by @yiliang114
- refactor(goal):弃用记录在 Goal 状态开始记日志之前的 Goals 恢复功能 ([#12155](https://github.com/QwenLM/qwen-code/pull/12155)) by @qqqys
- refactor(goal):在 ACP 线路上保留一个 Goal 卡片并为其模块命名 ([#12187](https://github.com/QwenLM/qwen-code/pull/12187)) by @qqqys
- refactor(goal):通过核心读取器读取处于不可读状态的运行卡片 ([#12194](https://github.com/QwenLM/qwen-code/pull/12194)) by @qqqys
- test(core):在 authoring-hint 测试中恢复前等待完整运行退出 ([#12196](https://github.com/QwenLM/qwen-code/pull/12196)) by @yiliang114
## 新贡献者
- @Lilian0122 在 [#11975](https://github.com/QwenLM/qwen-code/pull/11975) 中首次贡献
- @jabrailkhalil 在 [#11722](https://github.com/QwenLM/qwen-code/pull/11722) 中首次贡献
- @mohammedmessaoudene-cmd 在 [#11808](https://github.com/QwenLM/qwen-code/pull/11808) 中首次贡献
- @L4XB 在 [#11769](https://github.com/QwenLM/qwen-code/pull/11769) 中首次贡献
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/v0.24.0...v0.24.1
<!-- qwen-release-notes:v1 -->
## Highlights
_See the complete change list below._
## Breaking Changes
- refactor(goal)!: stop emitting the active_goal stream event ([#12181](https://github.com/QwenLM/qwen-code/pull/12181)) by @qqqys
## Complete Change List
### Features
- feat(workflows): let agent() narrow a subagent to an explicit tool allowlist ([#12051](https://github.com/QwenLM/qwen-code/pull/12051)) by @qqqys
- feat: select the OpenAI wire API per model ([#11538](https://github.com/QwenLM/qwen-code/pull/11538)) by @tanzhenxin
- feat(core): identify hook invocations in progress events and announce the message bus ([#12075](https://github.com/QwenLM/qwen-code/pull/12075)) by @qqqys
- feat(external-context): Support configurable Mem0 providers ([#9952](https://github.com/QwenLM/qwen-code/pull/9952)) by @yiliang114
- feat(web-shell): support host settings item exclusions ([#11975](https://github.com/QwenLM/qwen-code/pull/11975)) by @Lilian0122
- feat(web-shell): fold oversized pastes into an attachment card ([#12084](https://github.com/QwenLM/qwen-code/pull/12084)) by @ytahdn
- feat(browser-use): add Playwright-based Browser SDK ([#11241](https://github.com/QwenLM/qwen-code/pull/11241)) by @tanzhenxin
- feat(workflows): add a name-only lock that restricts the Workflow tool to named workflows ([#12078](https://github.com/QwenLM/qwen-code/pull/12078)) by @qqqys
- feat(web-shell): manage git remotes from the workspace branch picker ([#11163](https://github.com/QwenLM/qwen-code/pull/11163)) by @wenshao
- feat(cli): write Goal state records into session exports ([#12099](https://github.com/QwenLM/qwen-code/pull/12099)) by @qqqys
- feat(goal): judge terminal proposals from the transcript tail ([#12105](https://github.com/QwenLM/qwen-code/pull/12105)) by @qqqys
- feat(web-shell): add PWA installability and Android development shell ([#11722](https://github.com/QwenLM/qwen-code/pull/11722)) by @jabrailkhalil
- feat(core): define enabled and disabledReason in the hooks listing ([#12139](https://github.com/QwenLM/qwen-code/pull/12139)) by @qqqys
- feat(core): export hook event display metadata and pure timeout helpers ([#12138](https://github.com/QwenLM/qwen-code/pull/12138)) by @qqqys
- feat(browser-use): add Chrome Native Messaging relay ([#11242](https://github.com/QwenLM/qwen-code/pull/11242)) by @tanzhenxin
- feat(workflows): record a checkpoint for every run and surface runs a restart interrupted ([#12159](https://github.com/QwenLM/qwen-code/pull/12159)) by @qqqys
- feat(web-shell): render the compression outcome from structured meta ([#12141](https://github.com/QwenLM/qwen-code/pull/12141)) by @ytahdn
- feat(core): add container execution for subagents ([#11711](https://github.com/QwenLM/qwen-code/pull/11711)) by @wenshao
- feat(web-shell): draw the commit history as a lane graph, across all branches, with search ([#12152](https://github.com/QwenLM/qwen-code/pull/12152)) by @wenshao
- feat(live): admit the Web Shell as a browser Live Host ([#12166](https://github.com/QwenLM/qwen-code/pull/12166)) by @qqqys
- feat(web-shell): add per-turn satisfied / not satisfied marks ([#12174](https://github.com/QwenLM/qwen-code/pull/12174)) by @ytahdn
- feat(live): resolve the Live Voice model from a realtimeOnly modelProviders route ([#12173](https://github.com/QwenLM/qwen-code/pull/12173)) by @qqqys
- feat(web-shell): publish the package with the cli release ([#12178](https://github.com/QwenLM/qwen-code/pull/12178)) by @yiliang114
- feat(core): assemble the system prompt from the resident tool set ([#12145](https://github.com/QwenLM/qwen-code/pull/12145)) by @yiliang114
- feat(web-shell): hold a Live Voice call from the browser ([#12189](https://github.com/QwenLM/qwen-code/pull/12189)) by @qqqys
- feat(web-shell): show a Goal's turn and active-time ceilings on the status strip ([#12201](https://github.com/QwenLM/qwen-code/pull/12201)) by @qqqys
- feat(serve): let users stop workspace runtimes to release ACP capacity ([#12008](https://github.com/QwenLM/qwen-code/pull/12008)) by @doudouOUC
- feat(web-shell): move the Plan entry into the composer add menu ([#12218](https://github.com/QwenLM/qwen-code/pull/12218)) by @wenshao
### Bug Fixes
- fix(ci): wait for the published export renderer before packaging the VSIX ([#12036](https://github.com/QwenLM/qwen-code/pull/12036)) by @yiliang114
- fix(web-shell): stop dropping the daemon credential on two navigation paths ([#12011](https://github.com/QwenLM/qwen-code/pull/12011)) by @yiliang114
- fix(acp): restore managed auto-memory extraction ([#12018](https://github.com/QwenLM/qwen-code/pull/12018)) by @yiliang114
- fix(cli): close twelve OpenTUI parity gaps found against ink ([#11806](https://github.com/QwenLM/qwen-code/pull/11806)) by @chiga0
- fix(core): count Stop-hook blocks across tool round trips ([#12062](https://github.com/QwenLM/qwen-code/pull/12062)) by @qqqys
- fix(core): avoid false interruption after completed slash commands ([#12052](https://github.com/QwenLM/qwen-code/pull/12052)) by @ytahdn
- fix(web-shell): restore context usage after page refresh ([#12070](https://github.com/QwenLM/qwen-code/pull/12070)) by @ytahdn
- fix(desktop): wait out the daemon drain before removing the smoke workspace ([#12049](https://github.com/QwenLM/qwen-code/pull/12049)) by @yiliang114
- fix(core,cli): green the Windows lane's three remaining failures ([#12063](https://github.com/QwenLM/qwen-code/pull/12063)) by @yiliang114
- fix(ci): wait for the release on npm before dispatching the benchmark ([#12086](https://github.com/QwenLM/qwen-code/pull/12086)) by @yiliang114
- fix(extensions): show progress and clear the update flag after an update ([#11886](https://github.com/QwenLM/qwen-code/pull/11886)) by @yiliang114
- fix(acp): preserve user resource links in transcript replay ([#12088](https://github.com/QwenLM/qwen-code/pull/12088)) by @XIQIXIQIXIQI
- fix(core): load system-scope hooks under their own source ([#12077](https://github.com/QwenLM/qwen-code/pull/12077)) by @qqqys
- fix(core): report real outcomes from the http, prompt and function hook runners ([#12081](https://github.com/QwenLM/qwen-code/pull/12081)) by @qqqys
- fix(core): scrub a known path the filesystem re-spells ([#12087](https://github.com/QwenLM/qwen-code/pull/12087)) by @yiliang114
- fix(vscode): reject unsupported IPv6 remote webview URLs ([#12092](https://github.com/QwenLM/qwen-code/pull/12092)) by @yiliang114
- fix(web-shell): alias the tools.workflowNameOnly settings row ([#12100](https://github.com/QwenLM/qwen-code/pull/12100)) by @yiliang114
- fix(web-shell): alias tools.workflowNameOnly in the settings panel (#12094) ([#12103](https://github.com/QwenLM/qwen-code/pull/12103)) by @qwen-code-dev-bot
- fix(cli): prefer per-session cached token count in /context ([#12066](https://github.com/QwenLM/qwen-code/pull/12066)) by @kabishou11
- fix(core): keep MCP App html in recorded transcripts so replay can render ([#12131](https://github.com/QwenLM/qwen-code/pull/12131)) by @yiliang114
- fix(core): resolve DeepSeek's official API deepseek-flash name at V4 limits ([#11909](https://github.com/QwenLM/qwen-code/pull/11909)) by @he-yufeng
- fix(core): keep the DeepSeek V4 generation suffix through model-name normalization ([#12124](https://github.com/QwenLM/qwen-code/pull/12124)) by @he-yufeng
- fix(core): treat only space/tab/newline as word separators in isAsyncOperator ([#11865](https://github.com/QwenLM/qwen-code/pull/11865)) by @yiliang114
- fix(mcp): show MCP App resource load warnings ([#11960](https://github.com/QwenLM/qwen-code/pull/11960)) by @doudouOUC
- fix(serve): read channel settings from user scope when workspace is home ([#11083](https://github.com/QwenLM/qwen-code/pull/11083)) by @yiliang114
- fix(core): purge a deleted session's prompts from the log history ([#11769](https://github.com/QwenLM/qwen-code/pull/11769)) by @L4XB
- fix(workflows): refuse a resume that has no journal, and keep a run's sourceRef across restarts ([#12097](https://github.com/QwenLM/qwen-code/pull/12097)) by @qqqys
- fix(web-shell): keep first-prompt session when its attach is superseded ([#12149](https://github.com/QwenLM/qwen-code/pull/12149)) by @cactuser-Lu
- fix(goal): say which newer records recovery walked past ([#12148](https://github.com/QwenLM/qwen-code/pull/12148)) by @qqqys
- fix(review): put PR worktree absolute path in dimension-agent briefs ([#11926](https://github.com/QwenLM/qwen-code/pull/11926)) by @kabishou11
- fix(web-shell): allow sequential SDK requests during session creation ([#11913](https://github.com/QwenLM/qwen-code/pull/11913)) by @shenyankm
- fix(web-shell): keep the mermaid canvas fixed while zooming out ([#12177](https://github.com/QwenLM/qwen-code/pull/12177)) by @ytahdn
- fix(core): stop session recovery from flagging unanswered notifications ([#12007](https://github.com/QwenLM/qwen-code/pull/12007)) by @yiliang114
- fix(cli): keep full-turn tool cancellation out of the error path ([#11154](https://github.com/QwenLM/qwen-code/pull/11154)) by @yiliang114
- fix(release): temporarily pause web-shell publishing ([#12202](https://github.com/QwenLM/qwen-code/pull/12202)) by @yiliang114
- fix(core): parse LSP frames by byte length so non-ASCII responses are not dropped ([#12210](https://github.com/QwenLM/qwen-code/pull/12210)) by @yiliang114
- fix(desktop): stage the node-pty prebuild into the bundled runtime ([#12225](https://github.com/QwenLM/qwen-code/pull/12225)) by @yiliang114
### Performance
- perf(core): manifest-only refresh for the extension catalog route ([#12153](https://github.com/QwenLM/qwen-code/pull/12153)) by @callmeYe
### Documentation
- docs(serve): record merged ACP boundary acceptance ([#12024](https://github.com/QwenLM/qwen-code/pull/12024)) by @wenshao
- docs(hooks): merge the duplicated Browsing sections ([#12071](https://github.com/QwenLM/qwen-code/pull/12071)) by @qqqys
- docs(core): tell /goal-draft the objective limit propose_goal enforces ([#12101](https://github.com/QwenLM/qwen-code/pull/12101)) by @qqqys
- docs(ci): explain why the review-pr sweep needs a whole-workspace quarantine ([#10493](https://github.com/QwenLM/qwen-code/pull/10493)) by @CanReader
- docs(daemon): complete REST integration coverage ([#12144](https://github.com/QwenLM/qwen-code/pull/12144)) by @yiliang114
- docs(config): note baseUrl is the /v1 root for hosted OpenAI-compatible gateways (#10362) ([#11155](https://github.com/QwenLM/qwen-code/pull/11155)) by @now-ing
- docs(verify-pr): add local follow-up discovery, publish path, and build recipes ([#12232](https://github.com/QwenLM/qwen-code/pull/12232)) by @wenshao
### Internal Changes
- test(cli): refresh the loop-guard comments to the shipped mechanism ([#12065](https://github.com/QwenLM/qwen-code/pull/12065)) by @yiliang114
- test(core): compare hook progress outcomes without the invocation id ([#12104](https://github.com/QwenLM/qwen-code/pull/12104)) by @qqqys
- refactor(goal): stop showing checkpoint health on every surface ([#12114](https://github.com/QwenLM/qwen-code/pull/12114)) by @qqqys
- refactor(goal): delete the evidence checkpoint and catalog code ([#12120](https://github.com/QwenLM/qwen-code/pull/12120)) by @qqqys
- refactor(cli): draw the ink Goal cards from the view OpenTUI already uses ([#12110](https://github.com/QwenLM/qwen-code/pull/12110)) by @qqqys
- test(serve): bind guide operations to their protocol sections ([#11808](https://github.com/QwenLM/qwen-code/pull/11808)) by @mohammedmessaoudene-cmd
- refactor(goal): cut what the Goal tools cost every model request by two fifths ([#12123](https://github.com/QwenLM/qwen-code/pull/12123)) by @qqqys
- test(cli): step through Grok before MiniMax in the provider-order test ([#10089](https://github.com/QwenLM/qwen-code/pull/10089)) by @harjothkhara
- test(sdk): validate content block stops per message ([#12158](https://github.com/QwenLM/qwen-code/pull/12158)) by @yiliang114
- refactor(goal): retire recovery of Goals recorded before Goal state was journaled ([#12155](https://github.com/QwenLM/qwen-code/pull/12155)) by @qqqys
- refactor(goal): keep one Goal card on the ACP wire and name the module for it ([#12187](https://github.com/QwenLM/qwen-code/pull/12187)) by @qqqys
- refactor(goal): read the unreadable-state running card through the core reader ([#12194](https://github.com/QwenLM/qwen-code/pull/12194)) by @qqqys
- test(core): await full run exit before resuming in the authoring-hint test ([#12196](https://github.com/QwenLM/qwen-code/pull/12196)) by @yiliang114
## New Contributors
- @Lilian0122 made their first contribution in [#11975](https://github.com/QwenLM/qwen-code/pull/11975)
- @jabrailkhalil made their first contribution in [#11722](https://github.com/QwenLM/qwen-code/pull/11722)
- @mohammedmessaoudene-cmd made their first contribution in [#11808](https://github.com/QwenLM/qwen-code/pull/11808)
- @L4XB made their first contribution in [#11769](https://github.com/QwenLM/qwen-code/pull/11769)
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.24.0...v0.24.1