## 更新内容
* feat(acp): 为 ACP 集成添加完整的钩子支持 by @DennisYu07 在 https://github.com/QwenLM/qwen-code/pull/3248
* feat: 优化紧凑模式用户体验 — 快捷键、设置同步与安全性 by @chiga0 在 https://github.com/QwenLM/qwen-code/pull/3100
* feat(hooks): 添加 HTTP 钩子、函数钩子和异步钩子支持 by @DennisYu07 在 https://github.com/QwenLM/qwen-code/pull/2827
* fix(sdk): 避免在 ProcessTransport 中泄漏进程退出监听器 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3295
* fix(cli): 防止 statusline 生成 EBADF 导致 CLI 崩溃 (#3264) by @wenshao 在 https://github.com/QwenLM/qwen-code/pull/3310
* fix(cli): 在摘要更改前保持“开始新聊天会话”状态 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3308
* feat(memory): 实现托管式自动记忆与自动梦境系统 by @LaZzyMan 在 https://github.com/QwenLM/qwen-code/pull/3087
* fix(cli): 将更新通知延迟至模型响应完成后显示 by @pic4xiu 在 https://github.com/QwenLM/qwen-code/pull/3321
* test(core): 稳定 glob 截断相关测试 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3322
* docs: 修复 Windows 安装命令以同时兼容 CMD 和 PowerShell by @Skyline-9 在 https://github.com/QwenLM/qwen-code/pull/3252
* feat(cli): 支持多行状态栏输出 by @wenshao 在 https://github.com/QwenLM/qwen-code/pull/3311
* fix(core): 限制技能监听器深度以防止文件描述符耗尽 by @tanzhenxin 在 https://github.com/QwenLM/qwen-code/pull/3320
* fix(core): 切换模型时从历史记录中移除思考块 by @tanzhenxin 在 https://github.com/QwenLM/qwen-code/pull/3315
* docs: 更新认证方法以反映 OAuth 已停用 by @joeytoday 在 https://github.com/QwenLM/qwen-code/pull/3325
* fix(core): 添加 Shell 参数引号使用指南以防止特殊字符错误 by @LaZzyMan 在 https://github.com/QwenLM/qwen-code/pull/3327
* refactor(core): 将 fork 子代理参数从 execute() 移至构造阶段 by @tanzhenxin 在 https://github.com/QwenLM/qwen-code/pull/3255
* feat(skills): 添加 /batch 技能以支持并行批处理操作 by @doudouOUC 在 https://github.com/QwenLM/qwen-code/pull/3079
* feat: 支持无头模式及 SDK 的后台子代理 by @tanzhenxin 在 https://github.com/QwenLM/qwen-code/pull/3076
* feat(core): 从 .qwen/rules/ 添加基于路径的上下文规则注入 by @wenshao 在 https://github.com/QwenLM/qwen-code/pull/3339
* test(integration): 在交互式测试中适配新的 cron 通知格式 by @tanzhenxin 在 https://github.com/QwenLM/qwen-code/pull/3402
* feat(cli): 为 TUI 添加双输出边车模式 by @chiga0 在 https://github.com/QwenLM/qwen-code/pull/3352
* feat: 将 `M-d` 绑定至合理(类 Emacs)的默认值 by @pedrormjunior 在 https://github.com/QwenLM/qwen-code/pull/3358
* fix(cli): 减少终端重绘时的光标移动 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3381
* fix(dingtalk): 仅在续传数据块后追加 '(cont.)' 后缀,而非首块 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2977
* fix(dingtalk): 移除 @mention 后保留空文本而非回退 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2978
* fix(dingtalk): 移除 reactionContext 映射以阻止被拦截消息的内存泄漏 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2979
* fix(sandbox): 当镜像名称无冒号时回退至 'latest' 标签 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2962
* fix(scripts): 清理脚本中移除重复的 bundle rmSync 调用 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2964
* fix(integration-tests): 遵循 stdinDoesNotEnd 选项 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2966
* fix(scripts): 修复无描述枚举设置生成的 JSON schema 中的 `"undefined Options: ..."` 问题 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2963
* fix(text-buffer): 统一偏移量到位置的转换逻辑 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2969
* fix(weixin): 检查完整的 4 字节 PNG 魔数签名 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2970
* fix(cli): 崩溃后重建 AcpBridge 时重新注册断开连接监听器 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2975
* fix(sdk): 在 Stream.return() 中处理待处理的 next() 承诺以防止挂起 by @chinesepowered 在 https://github.com/QwenLM/qwen-code/pull/2981
* fix(cli): 在 AskUserQuestionDialog 中按数字键时自动提交 by @doudouOUC 在 https://github.com/QwenLM/qwen-code/pull/3407
* feat(core): 检测工具验证重试循环并注入停止指令 by @euxaristia 在 https://github.com/QwenLM/qwen-code/pull/3178
* fix(tool-registry): 添加带并发去重功能的延迟工厂注册 by @doudouOUC 在 https://github.com/QwenLM/qwen-code/pull/3297
* 修复类名拼写错误 by @szepeviktor 在 https://github.com/QwenLM/qwen-code/pull/2189
* test(core): 更新调度器注册表模拟 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3415
* fix(cli): 等待双输出流关闭 by @reidliu41 在 https://github.com/QwenLM/qwen-code/pull/3416
* feat(mcp): 为 OAuth 授权 URL 添加 OSC 52 复制快捷键 by @BZ-D 在 https://github.com/QwenLM/qwen-code/pull/3393
* feat(vscode-ide-companion): 添加专用的代理执行显示 by @yiliang114 在 https://github.com/QwenLM/qwen-code/pull/2590
* perf(vscode): 修复长对话中的输入延迟 by @yiliang114 在 https://github.com/QwenLM/qwen-code/pull/2550
* feat(cli): 添加早期输入捕获以防止启动期间按键丢失 by @doudouOUC 在 https://github.com/QwenLM/qwen-code/pull/3319
* fix(build): 通过 node --import 直接调用 tsx 替代 npx by @euxaristia 在 https://github.com/QwenLM/qwen-code/pull/3237
* ci(stale): 为拉取请求启用 60+30 天过期/关闭策略 by @wenshao 在 https://github.com/QwenLM/qwen-code/pull/3375
* feat(cli): 支持在 statusLine 中使用 refreshInterval 进行定期刷新 by @wenshao in https://github.com/QwenLM/qwen-code/pull/3383
* fix(core): 在仓库初始化期间支持旧版 Git by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3436
* feat(core): 添加动态 swarm worker 工具 by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3433
* fix(cli): /clear 命令可关闭活跃的 /btw 侧边问题对话框 by @sharziki in https://github.com/QwenLM/qwen-code/pull/3431
* fix(cli): 使 /btw 能够使用实时对话上下文 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3429
* fix: 当上下文使用量超出限制时显示 ">100%" by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/2766
* fix(ui): 限制 shell 输出宽度以防止框体溢出 by @euxaristia in https://github.com/QwenLM/qwen-code/pull/2857
* feat(tools): 为 WebFetch 工具添加对 Markdown for Agents 的支持 by @gin-lsl in https://github.com/QwenLM/qwen-code/pull/2734
* fix(core): 在清理过程中移除 abort 监听器 by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3438
* feat(core): 通过停滞检测 + 验证重试检查增强循环检测 by @euxaristia in https://github.com/QwenLM/qwen-code/pull/3236
* feat(cli): 添加 /doctor 诊断命令 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3404
* feat(vscode-companion): 启用 Plan Mode 切换开关及审批 UI by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2551
* feat(cli): 添加 /recap 会话回顾功能,返回时自动显示 by @wenshao in https://github.com/QwenLM/qwen-code/pull/3434
* fix(vscode-ide-companion): 保留分片流消息的顺序 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3450
* feat(cli): 添加 bare 启动模式 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3448
* feat(vscode-ide-companion): 支持 /insight 命令 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2593
* feat(cli): 添加 slashCommands.disabled 设置以控制斜杠命令 by @ihubanov in https://github.com/QwenLM/qwen-code/pull/3445
* feat(core): 添加 PDF 文本提取回退机制及 Jupyter notebook 解析 by @wenshao in https://github.com/QwenLM/qwen-code/pull/3160
* feat(cli): 为 `mcp add` 添加 OAuth 配置参数 by @BZ-D in https://github.com/QwenLM/qwen-code/pull/3442
* refactor(cli): 使用基于能力的过滤机制替换斜杠命令白名单(第一阶段) by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/3283
* fix(core): 为 MCP stdio 服务器规范化 Windows PATH by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3451
* feat(cli): 添加工具执行进度消息 by @wenshao in https://github.com/QwenLM/qwen-code/pull/3155
* Revert "feat(core): add dynamic swarm worker tool" by @wenshao in https://github.com/QwenLM/qwen-code/pull/3468
* fix(core): 防止格式错误的权限规则成为全局工具捕获项 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3467
* feat(cli): 使 ACP 消息重写超时时间可配置 by @zhangxy-zju in https://github.com/QwenLM/qwen-code/pull/3475
* fix(cli): 将 /recap 固定在输入框上方,并使默认值与 fastModel 对齐 by @wenshao in https://github.com/QwenLM/qwen-code/pull/3478
* feat(cli): 将 /stats 行归属到发起的子代理 by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3229
* test(integration): 将设置迁移探测从 --help 切换为 mcp list by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3486
## 新贡献者
* @Skyline-9 首次贡献于 https://github.com/QwenLM/qwen-code/pull/3252
* @pedrormjunior 首次贡献于 https://github.com/QwenLM/qwen-code/pull/3358
* @szepeviktor 首次贡献于 https://github.com/QwenLM/qwen-code/pull/2189
* @sharziki 首次贡献于 https://github.com/QwenLM/qwen-code/pull/3431
* @gin-lsl 首次贡献于 https://github.com/QwenLM/qwen-code/pull/2734
* @ihubanov 首次贡献于 https://github.com/QwenLM/qwen-code/pull/3445
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/v0.14.5...v0.15.0-preview.1
## What's Changed
* feat(acp): add complete hooks support for ACP integration by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/3248
* feat: optimize compact mode UX — shortcuts, settings sync, and safety by @chiga0 in https://github.com/QwenLM/qwen-code/pull/3100
* feat(hooks): Add HTTP Hook, Function Hook and Async Hook support by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/2827
* fix(sdk): avoid leaking process exit listeners in ProcessTransport by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3295
* fix(cli): prevent statusline spawn EBADF from crashing CLI (#3264) by @wenshao in https://github.com/QwenLM/qwen-code/pull/3310
* fix(cli): remember "Start new chat session" until summary changes by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3308
* feat(memory): managed auto-memory and auto-dream system by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/3087
* fix(cli): defer update notifications until model response completes by @pic4xiu in https://github.com/QwenLM/qwen-code/pull/3321
* test(core): stabilize glob truncation tests by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3322
* docs: fix Windows install command to work in both CMD and PowerShell by @Skyline-9 in https://github.com/QwenLM/qwen-code/pull/3252
* feat(cli): support multi-line status line output by @wenshao in https://github.com/QwenLM/qwen-code/pull/3311
* fix(core): limit skill watcher depth to prevent FD exhaustion by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3320
* fix(core): strip thinking blocks from history on model switch by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3315
* docs: update authentication methods to reflect OAuth discontinuation by @joeytoday in https://github.com/QwenLM/qwen-code/pull/3325
* fix(core): add shell argument quoting guidance to prevent special char errors by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/3327
* refactor(core): move fork subagent params from execute() to construction time by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3255
* feat(skills): add /batch skill for parallel batch operations by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3079
* feat: background subagents with headless and SDK support by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3076
* feat(core): add path-based context rule injection from .qwen/rules/ by @wenshao in https://github.com/QwenLM/qwen-code/pull/3339
* test(integration): match new cron notification format in interactive tests by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3402
* feat(cli): add dual-output sidecar mode for TUI by @chiga0 in https://github.com/QwenLM/qwen-code/pull/3352
* feat: bind `M-d` to a reasonable (Emacs-like) default by @pedrormjunior in https://github.com/QwenLM/qwen-code/pull/3358
* fix(cli): reduce terminal redraw cursor movement by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3381
* fix(dingtalk): only suffix '(cont.)' on continuation chunks, not the first by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2977
* fix(dingtalk): preserve empty text after @mention strip instead of falling back by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2978
* fix(dingtalk): remove reactionContext map to stop leak on blocked messages by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2979
* fix(sandbox): fall back to 'latest' tag when image name has no colon by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2962
* fix(scripts): remove duplicate bundle rmSync in clean script by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2964
* fix(integration-tests): honor stdinDoesNotEnd option by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2966
* fix(scripts): Fix `"undefined Options: ..."` in generated JSON schema for enum settings without descriptions. by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2963
* fix(text-buffer): unify offset-to-position logic by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2969
* fix(weixin): check full 4-byte PNG magic signature by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2970
* fix(cli): re-arm disconnected listener on rebuilt AcpBridge after crash by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2975
* fix(sdk): settle pending next() promise in Stream.return() to prevent hangs by @chinesepowered in https://github.com/QwenLM/qwen-code/pull/2981
* fix(cli): auto-submit on number key press in AskUserQuestionDialog by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3407
* feat(core): detect tool validation retry loops and inject stop directive by @euxaristia in https://github.com/QwenLM/qwen-code/pull/3178
* fix(tool-registry): add lazy factory registration with inflight concurrency dedup by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3297
* Fix typo in class name by @szepeviktor in https://github.com/QwenLM/qwen-code/pull/2189
* test(core): update scheduler registry mock by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3415
* fix(cli): wait for dual output stream shutdown by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3416
* feat(mcp): add OSC 52 copy hotkey for OAuth authorization URL by @BZ-D in https://github.com/QwenLM/qwen-code/pull/3393
* feat(vscode-ide-companion): add dedicated agent execution display by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2590
* perf(vscode): fix input lag in long conversations by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2550
* feat(cli): add early input capture to prevent keystroke loss during startup by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3319
* fix(build): invoke tsx directly via node --import instead of npx by @euxaristia in https://github.com/QwenLM/qwen-code/pull/3237
* ci(stale): enable 60+30 stale/close policy for pull requests by @wenshao in https://github.com/QwenLM/qwen-code/pull/3375
* feat(cli): support refreshInterval in statusLine for periodic refresh by @wenshao in https://github.com/QwenLM/qwen-code/pull/3383
* fix(core): support older Git during repository initialization by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3436
* feat(core): add dynamic swarm worker tool by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3433
* fix(cli): /clear dismisses active /btw side-question dialog by @sharziki in https://github.com/QwenLM/qwen-code/pull/3431
* fix(cli): let /btw use live conversation context by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3429
* fix: display ">100%" when context usage exceeds limit by @DennisYu07 in https://github.com/QwenLM/qwen-code/pull/2766
* fix(ui): constrain shell output width to prevent box overflow by @euxaristia in https://github.com/QwenLM/qwen-code/pull/2857
* feat(tools): add Markdown for Agents support to WebFetch tool by @gin-lsl in https://github.com/QwenLM/qwen-code/pull/2734
* fix(core): remove abort listener during cleanup by @reidliu41 in https://github.com/QwenLM/qwen-code/pull/3438
* feat(core): enhanced loop detection with stagnation + validation-retry checks by @euxaristia in https://github.com/QwenLM/qwen-code/pull/3236
* feat(cli): add /doctor diagnostic command by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3404
* feat(vscode-companion): enable Plan Mode toggle and approval UI by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2551
* feat(cli): add session recap with /recap and auto-show on return by @wenshao in https://github.com/QwenLM/qwen-code/pull/3434
* fix(vscode-ide-companion): preserve split stream message ordering by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3450
* feat(cli): add bare startup mode by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3448
* feat(vscode-ide-companion): support /insight command by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/2593
* feat(cli): add slashCommands.disabled setting to gate slash commands by @ihubanov in https://github.com/QwenLM/qwen-code/pull/3445
* feat(core): PDF text extraction fallback and Jupyter notebook parsing by @wenshao in https://github.com/QwenLM/qwen-code/pull/3160
* feat(cli): add OAuth configuration flags to `mcp add` by @BZ-D in https://github.com/QwenLM/qwen-code/pull/3442
* refactor(cli): replace slash command whitelist with capability-based filtering (Phase 1) by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/3283
* fix(core): normalize Windows PATH for MCP stdio servers by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/3451
* feat(cli): add tool execution progress messages by @wenshao in https://github.com/QwenLM/qwen-code/pull/3155
* Revert "feat(core): add dynamic swarm worker tool" by @wenshao in https://github.com/QwenLM/qwen-code/pull/3468
* fix(core): prevent malformed permission rules from becoming tool-wide catch-alls by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/3467
* feat(cli): make ACP message rewrite timeout configurable by @zhangxy-zju in https://github.com/QwenLM/qwen-code/pull/3475
* fix(cli): pin /recap above input and align defaults with fastModel by @wenshao in https://github.com/QwenLM/qwen-code/pull/3478
* feat(cli): attribute /stats rows to the originating subagent by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3229
* test(integration): switch settings-migration probe from --help to mcp list by @tanzhenxin in https://github.com/QwenLM/qwen-code/pull/3486
## New Contributors
* @Skyline-9 made their first contribution in https://github.com/QwenLM/qwen-code/pull/3252
* @pedrormjunior made their first contribution in https://github.com/QwenLM/qwen-code/pull/3358
* @szepeviktor made their first contribution in https://github.com/QwenLM/qwen-code/pull/2189
* @sharziki made their first contribution in https://github.com/QwenLM/qwen-code/pull/3431
* @gin-lsl made their first contribution in https://github.com/QwenLM/qwen-code/pull/2734
* @ihubanov made their first contribution in https://github.com/QwenLM/qwen-code/pull/3445
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.14.5...v0.15.0-preview.1