<!-- 使用 release/v0.18.4 分支中 .github/release.yml 的配置生成发布说明 -->
## 更新内容
* chore(release): v0.18.3 by @qwen-code-ci-bot in https://github.com/QwenLM/qwen-code/pull/5255
* fix(core): 在文件历史记录中跟踪支持的 sed 编辑 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5141
* fix(vscode-ide-companion): 为每个 IDE 会话创建独立的 McpServer by @huww98 in https://github.com/QwenLM/qwen-code/pull/5264
* fix(core): 对于自上而下的位图,将 BMP 高度读取为有符号 int32 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5227
* docs: 添加包含 qwen sessions list 的 CLI 子命令部分 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5254
* feat(serve): 使 ACP 权限超时时间可配置 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5260
* fix(cli): 保留对话中途的图片消息 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5183
* docs: 修复 SSE 环大小错误并添加 /workflows 命令 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5205
* fix(core): 按内容检测 dat 文件 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5256
* fix(model): 当多个提供商共享同一模型 ID 时记住已选择的提供商 (#5173) by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5179
* docs: 重构 README 以提升清晰度与重点 by @pomelo-nwu in https://github.com/QwenLM/qwen-code/pull/5257
* feat(i18n): 对 TUI 和 web-shell 徽章中的工具显示名称进行本地化 by @wenshao in https://github.com/QwenLM/qwen-code/pull/5220
* fix(daemon): 集中化对话中途事件常量 + 恢复超时的 drains by @wenshao in https://github.com/QwenLM/qwen-code/pull/5266
* fix(core): 保持 DeepSeek 预设仅为文本 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5268
* fix(cli): 移除可能导致 React #185 报错的 AgentView 清理 setState (#5199) by @wenshao in https://github.com/QwenLM/qwen-code/pull/5286
* fix(core): 从正确的字节偏移量读取 WebP VP8X 画布高度 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5194
* fix(cli): 在补全中支持 Ctrl+P/N by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5259
* feat(serve): 在 GET /health?deep=true 中添加守护进程空闲检测 by @jifeng in https://github.com/QwenLM/qwen-code/pull/4934
* fix(core): 绝不让遥测文件导出器导致进程崩溃 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5246
* fix(cli): 修正上下文文件名设置 schema by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5269
* feat(hooks): 将原始 API 调用 ID (toolCallId) 传递给钩子系统 by @shiloong in https://github.com/QwenLM/qwen-code/pull/4918
* fix(core): 每次对话的工具调用熔断器 — 始终开启的上限 + 可选的循环启发式算法 (#5234) by @wenshao in https://github.com/QwenLM/qwen-code/pull/5279
* fix(desktop): 处理 git 分支徽章的边缘情况 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5247
* feat(core,cli): 工作流工具令牌预算 + 每次运行的 UI 展示 (P5) by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/5231
* feat(extensions): 为扩展的 displayName 和 description 添加 i18n 支持 by @callmeYe in https://github.com/QwenLM/qwen-code/pull/5289
* feat(loop): 将仅提示的 /loop 连接到按需唤醒 by @qqqys in https://github.com/QwenLM/qwen-code/pull/5197
* fix(cli): 修正沙箱设置 schema by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5272
* test(cli): 启用加载配置模型选择的测试覆盖率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5274
* docs(cli): 记录 tmux 滚动问题的变通方案 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5248
* test(cli): 覆盖选择列表向上滚动 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5276
* fix(weixin): 显示允许的图像目录 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5296
* fix(cli): 拒绝格式错误的 OSC rgb 颜色 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5307
* test(cli): 启用表格前景色重置的测试覆盖率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5278
* test(core): 启用无头代理终止的测试覆盖率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5282
* fix(web-shell): 总结 grep_search 结果 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5294
* fix(core): 读取短格式 VP8L WebP 尺寸 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5292
* fix(core): 跟踪附加的 stdout fd 重定向 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5317
* fix(dingtalk): 拆分过长的 markdown 行 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5299
* fix(cli): 保留多行 shell 历史记录 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5335
* fix(cli): 验证 GitHub 远程主机 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5327
* test(cli): 启用命令搜索长建议的测试覆盖率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5283
* fix(core): 保留已迁移的命令描述字符串 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5321
* fix(cli): 强制执行 stdin 字节限制 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5331
* fix(core): 在转换为 ~ 路径时尊重主目录路径边界 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5333
* fix(cli): 按显示宽度截断会话选择器文本 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5338
* fix(core): 支持 GIF 图像令牌元数据 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5340
* fix(cli): 处理会话搜索的字素 (graphemes) by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5342
* fix(cli): 规范化英文输出语言 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5346
* fix(core): 解析 OAuth 资源元数据参数 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5344
* fix(core): 处理过期的 worktree 会话标记 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5229
* feat(loop): 添加秒级会话唤醒引擎 by @qqqys in https://github.com/QwenLM/qwen-code/pull/5182
* fix(core): 忽略重复的提供商工具调用 ID by @YingchaoX in https://github.com/QwenLM/qwen-code/pull/5038
* fix(cli): 在完整转录模式下显示思考过程 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5354
* feat(desktop): 在 brand-create 中编译 macOS 26+ Liquid Glass Assets.car by @pomelo-nwu in https://github.com/QwenLM/qwen-code/pull/5284
* fix(cli): 返回全新的空 MCP JSON 结果 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5349
* fix(weixin): 规范化 Markdown 图片语法 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5297
* fix(core): 在无头 SSH 中跳过睡眠抑制器 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5295
* fix(cli): 拒绝格式错误的终端序列 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5305
* fix(cli): 展开 Windows 风格的波浪号路径 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5298
* fix(core): 验证 OAuth expires_in 值 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5356
* fix(core): 拒绝格式错误的 cron 数值字段 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5352
* fix(cli): 解析沙箱镜像注册表端口 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5325
* fix(cli): 保留空的 MCP 提示参数 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5323
* fix(core): 拒绝无效的 cron 任务条目 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5309
* fix(cli): 避免代理组合器卸载重置 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5302
* fix(cli): 验证通道服务 PID 文件 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5300
* fix(core): 保留无效的 schema 长度字符串 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5312
* fix(weixin): 确认 WEBP 签名,而不仅仅是 RIFF 前缀 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5285
* feat(channel): 添加 QQ 机器人 (QQ Bot) 通道适配器 by @Eric-GoodBoy-Tech in https://github.com/QwenLM/qwen-code/pull/5202
* fix(cli): 拒绝格式错误的 ACP 超时字符串 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5315
* fix(cli): 通过文件 URL 导入扩展通道 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5301
* fix(cli): 限制流式思考渲染缓冲区 by @kkhomej33-netizen in https://github.com/QwenLM/qwen-code/pull/5314
* feat(core): 进入计划模式时自动显示 exit_plan_mode 工具 by @aspnmy in https://github.com/QwenLM/qwen-code/pull/5311
* fix(cli): 窗口标题显示会话名称而非模型活动状态 by @ZijianZhang989 in https://github.com/QwenLM/qwen-code/pull/5288
* fix(core): 保持 qwen3.6-flash 和 kimi-k2.6 预设仅为文本 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5328
* feat(skills): 添加 desktop-pet 技能,用于创建像素艺术伴侣 by @xxlaura in https://github.com/QwenLM/qwen-code/pull/4808
* fix(cli): 将四舍五入为 60s 的不足一分钟时长渲染为 "1m" by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5287
* fix: 展开 Windows ~\\ 主目录路径,并在桌面会话列表中隐藏虚拟(会话)条目 by @mvanhorn in https://github.com/QwenLM/qwen-code/pull/5253
* feat(stats): 暴露令牌用量以提供成本可见性 by @shenyankm in https://github.com/QwenLM/qwen-code/pull/4564
* fix(plan-gate): 将门控代理的 AbortSignal 从父信号链中隔离 by @CubeLander in https://github.com/QwenLM/qwen-code/pull/5185
* fix(core): 在侧边查询中遵循输出语言设置 by @Jerry2003826 in https://github.com/QwenLM/qwen-code/pull/4519
* fix(cli): 避免设置过期的 git 分支监听器 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5271
* fix(desktop): 在 RIFF 魔术字节嗅探中检测 WebP 和 AVI by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5336
* fix(input): 恢复在 #4779 中回滚的 IME 光标定位 by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/4993
* fix(cli): 在按 Enter 接受时关闭 @path 补全下拉菜单 by @Alex-ai-future in https://github.com/QwenLM/qwen-code/pull/4841
* fix(core): 当钥匙串不可用时,扩展密钥回退到加密文件存储 by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5221
* fix(core): 支持会话元数据字段中的空白字符 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5353
* fix(core): 防止在 /quit 期间自动内存提取时发生 OOM(#5147) by @ZijianZhang989 in https://github.com/QwenLM/qwen-code/pull/5181
* refactor(tools): 将 TodoWrite 工具的显示名称重命名为 TodoList by @wenshao in https://github.com/QwenLM/qwen-code/pull/5319
* fix(core): 在缓冲区边界处使令牌过期 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5360
* fix(cli): 在修改前验证恢复检查点 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5358
* fix(core): 在运行时遵循 ripgrep 内置设置 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5362
* fix(core): 首次保存时创建令牌文件 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5367
* fix(cli): 为扩展保留工作区信任状态 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5369
* fix(cli): 在权限取消后停止 by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5258
* fix(core): 在搜索权限检查前解析波浪号路径 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5378
* fix(cli): 遵守沙箱路径边界 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5375
* fix(cli): 更新 acp 取消测试标志 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5384
* fix(core): 在 MCP 工具错误时避免重新连接 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5382
* fix(core): 接受大写的 Web 获取方案 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5391
* fix(cli): 保留 MCP 环境变量值中的等号 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5377
* feat(cli): 在输入框占位符中显示后续建议 by @MikeWang0316tw in https://github.com/QwenLM/qwen-code/pull/5145
* fix(core): 避免全局前缀缓存重复使用 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5364
* fix(core): 验证 grep 结果限制 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5389
* fix(core): 解析包含冒号路径的 grep 结果 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5372
* feat(config): 通过 chokidar 监听器添加设置文件变更检测… by @water-in-stone in https://github.com/QwenLM/qwen-code/pull/4933
* fix(acp): 清理子进程的环境变量 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5395
* fix(core): 向 systemd-inhibit 传递 --no-ask-password 以防止 TUI 损坏 by @OrbitZore in https://github.com/QwenLM/qwen-code/pull/5318
* fix(cli): 解析包含 Windows 驱动器的沙箱挂载 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5388
* fix(core): 将 GLM-5.2 添加到 Z.AI 预设 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5397
* fix(openai): 添加字符串工具结果兼容模式 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5399
* fix(cli): 明确累计状态栏令牌标签 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5400
* feat(cli): 显示可选响应令牌速率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5401
* fix(cli): 减少保留的交互式工具输出内存 by @kkhomej33-netizen in https://github.com/QwenLM/qwen-code/pull/4971
* fix(cli): 从阶段令牌差值计算响应速率 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5402
* fix(cli): 明确不可用模型配置提示 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5403
* feat(cli): 通过 `qwen serve` 提供 Web Shell UI by @wenshao in https://github.com/QwenLM/qwen-code/pull/5392
* fix(cli): 将 cron 调度器启动绑定到配置初始化 (#5022) by @qwen-code-ci-bot in https://github.com/QwenLM/qwen-code/pull/5230
* fix(core): 保持预估令牌拆分总和等于总量 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5420
* fix(core): 共享内存文件名配置状态 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5419
* fix(channel): 限定 qqbot 会话备份路径范围 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5417
* fix(channel): 跟踪 qqbot 关闭重连计时器 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5416
* fix(auth): 安装时保留自定义提供商模型 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5404
* fix(core): 针对微压缩缓存禁用触发机制 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5407
* fix(channel): 保持 qqbot 令牌刷新重试 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5414
* fix(cli): 保持按键处理程序为最新 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5421
* refactor(serve): 将会话标题/displayName 统一为单个 displayName 字段 by @chiga0 in https://github.com/QwenLM/qwen-code/pull/5002
* feat(cli): 恢复时添加持久化历史折叠功能并优化命令 by @Gove2004 in https://github.com/QwenLM/qwen-code/pull/4085
* fix(cli): 收窄设置枚举模式 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5418
* fix(channel): 限制 qqbot 网关重连重试次数 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5415
* fix(core): 阻止广泛的 shell 自杀命令 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5409
* fix(cli): 保存时保留 trustedFolders 注释 by @Zoean-z in https://github.com/QwenLM/qwen-code/pull/4746
* fix(hooks): 移除废弃的 updatedMCPToolOutput 字段 (#5422) by @ken-jo in https://github.com/QwenLM/qwen-code/pull/5423
* feat(web-shell): 添加扩展管理 by @ytahdn in https://github.com/QwenLM/qwen-code/pull/5398
* fix(cli): 在 mcp 添加传输检测中接受大写 URL 方案 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5426
* fix(extensions): 解析安装源时接受大写 URL 方案 by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5429
* fix(core): 计划门不可用时提供逃生路径 by @Alex-ai-future in https://github.com/QwenLM/qwen-code/pull/5430
* feat(extensions): 交互式多标签页 /extensions 管理器(已安装 / 发现 / 源) by @BZ-D in https://github.com/QwenLM/qwen-code/pull/4850
* fix(cli): 稳定扩展列表间距 by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/5445
* fix(weixin): 处理大写 CDN 上传方案 by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5439
## 新贡献者
* @shiloong 在 https://github.com/QwenLM/qwen-code/pull/4918 首次贡献
* @Eric-GoodBoy-Tech 在 https://github.com/QwenLM/qwen-code/pull/5202 首次贡献
* @aspnmy 在 https://github.com/QwenLM/qwen-code/pull/5311 首次贡献
* @xxlaura 在 https://github.com/QwenLM/qwen-code/pull/4808 首次贡献
* @mvanhorn 在 https://github.com/QwenLM/qwen-code/pull/5253 首次贡献
* @CubeLander 在 https://github.com/QwenLM/qwen-code/pull/5185 首次贡献
* @water-in-stone 在 https://github.com/QwenLM/qwen-code/pull/4933 首次贡献
* @OrbitZore 在 https://github.com/QwenLM/qwen-code/pull/5318 首次贡献
* @Gove2004 在 https://github.com/QwenLM/qwen-code/pull/4085 首次贡献
* @Zoean-z 在 https://github.com/QwenLM/qwen-code/pull/4746 首次贡献
* @ken-jo 在 https://github.com/QwenLM/qwen-code/pull/5423 首次贡献
**完整更新日志**: https://github.com/QwenLM/qwen-code/compare/v0.18.3...v0.18.4
<!-- Release notes generated using configuration in .github/release.yml at release/v0.18.4 -->
## What's Changed
* chore(release): v0.18.3 by @qwen-code-ci-bot in https://github.com/QwenLM/qwen-code/pull/5255
* fix(core): Track supported sed edits in file history by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5141
* fix(vscode-ide-companion): create independent McpServer per IDE session by @huww98 in https://github.com/QwenLM/qwen-code/pull/5264
* fix(core): read BMP height as signed int32 for top-down bitmaps by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5227
* docs: add CLI subcommands section with qwen sessions list by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5254
* feat(serve): make ACP permission timeout configurable by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5260
* fix(cli): Preserve mid-turn image messages by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5183
* docs: fix SSE ring size errors and add /workflows command by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5205
* fix(core): detect dat files by content by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5256
* fix(model): remember selected provider when multiple share a model id (#5173) by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5179
* docs: Revamp README for clarity and focus by @pomelo-nwu in https://github.com/QwenLM/qwen-code/pull/5257
* feat(i18n): localize tool display names in TUI and web-shell badges by @wenshao in https://github.com/QwenLM/qwen-code/pull/5220
* fix(daemon): centralize mid-turn event constant + recover timed-out drains by @wenshao in https://github.com/QwenLM/qwen-code/pull/5266
* fix(core): keep DeepSeek presets text-only by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5268
* fix(cli): drop AgentView cleanup setState that can trip React #185 (#5199) by @wenshao in https://github.com/QwenLM/qwen-code/pull/5286
* fix(core): read WebP VP8X canvas height from the correct byte offset by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5194
* fix(cli): support Ctrl+P/N in completions by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5259
* feat(serve): add daemon idle detection to GET /health?deep=true by @jifeng in https://github.com/QwenLM/qwen-code/pull/4934
* fix(core): never let telemetry file exporters crash the process by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5246
* fix(cli): correct context filename settings schema by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5269
* feat(hooks): pass original API call ID (toolCallId) to hook system by @shiloong in https://github.com/QwenLM/qwen-code/pull/4918
* fix(core): per-turn tool-call circuit breaker — always-on cap + opt-in loop heuristics (#5234) by @wenshao in https://github.com/QwenLM/qwen-code/pull/5279
* fix(desktop): handle git branch badge edge cases by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5247
* feat(core,cli): Workflow tool token budget + per-run UI surfacing (P5) by @LaZzyMan in https://github.com/QwenLM/qwen-code/pull/5231
* feat(extensions): add i18n support for extension displayName and description by @callmeYe in https://github.com/QwenLM/qwen-code/pull/5289
* feat(loop): wire prompt-only /loop to self-paced wakeups by @qqqys in https://github.com/QwenLM/qwen-code/pull/5197
* fix(cli): correct sandbox settings schema by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5272
* test(cli): enable load config model selection coverage by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5274
* docs(cli): document tmux scroll workaround by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5248
* test(cli): cover selection list scroll up by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5276
* fix(weixin): show allowed image directories by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5296
* fix(cli): reject malformed OSC rgb colors by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5307
* test(cli): enable table foreground reset coverage by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5278
* test(core): enable agent headless termination coverage by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5282
* fix(web-shell): summarize grep_search results by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5294
* fix(core): read short VP8L WebP dimensions by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5292
* fix(core): track attached stdout fd redirects by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5317
* fix(dingtalk): split oversized markdown lines by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5299
* fix(cli): preserve multiline shell history by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5335
* fix(cli): validate GitHub remote hosts by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5327
* test(cli): enable command search long suggestion coverage by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5283
* fix(core): preserve migrated command description strings by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5321
* fix(cli): enforce stdin byte limit by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5331
* fix(core): respect home path boundary when tildeifying by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5333
* fix(cli): truncate session picker text by display width by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5338
* fix(core): support GIF image token metadata by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5340
* fix(cli): handle session search graphemes by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5342
* fix(cli): normalize english output language by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5346
* fix(core): parse OAuth resource metadata params by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5344
* fix(core): handle stale worktree session markers by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5229
* feat(loop): add second-resolution session wakeup engine by @qqqys in https://github.com/QwenLM/qwen-code/pull/5182
* fix(core): ignore duplicate provider tool-call ids by @YingchaoX in https://github.com/QwenLM/qwen-code/pull/5038
* fix(cli): show thinking in full transcript mode by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5354
* feat(desktop): compile macOS 26+ Liquid Glass Assets.car in brand-create by @pomelo-nwu in https://github.com/QwenLM/qwen-code/pull/5284
* fix(cli): return fresh empty mcp json results by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5349
* fix(weixin): normalize markdown image syntax by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5297
* fix(core): skip sleep inhibitor in headless ssh by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5295
* fix(cli): reject malformed terminal sequences by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5305
* fix(cli): expand windows-style tilde paths by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5298
* fix(core): validate oauth expires_in values by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5356
* fix(core): reject malformed cron numeric fields by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5352
* fix(cli): parse sandbox image registry ports by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5325
* fix(cli): preserve empty MCP prompt args by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5323
* fix(core): reject invalid cron task entries by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5309
* fix(cli): avoid agent composer unmount reset by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5302
* fix(cli): validate channel service pidfile by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5300
* fix(core): preserve invalid schema length strings by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5312
* fix(weixin): confirm the WEBP signature, not just the RIFF prefix by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5285
* feat(channel): add QQ Bot (QQ机器人) channel adapter by @Eric-GoodBoy-Tech in https://github.com/QwenLM/qwen-code/pull/5202
* fix(cli): reject malformed ACP timeout strings by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5315
* fix(cli): import extension channels via file urls by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5301
* fix(cli): bound streaming thought render buffers by @kkhomej33-netizen in https://github.com/QwenLM/qwen-code/pull/5314
* feat(core): auto-reveal exit_plan_mode tool when entering plan mode by @aspnmy in https://github.com/QwenLM/qwen-code/pull/5311
* fix(cli): window title shows session name instead of model activity status by @ZijianZhang989 in https://github.com/QwenLM/qwen-code/pull/5288
* fix(core): keep qwen3.6-flash and kimi-k2.6 presets text-only by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5328
* feat(skills): add desktop-pet skill for creating pixel-art companions by @xxlaura in https://github.com/QwenLM/qwen-code/pull/4808
* fix(cli): render a sub-minute duration that rounds to 60s as "1m" by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5287
* fix: Expand Windows ~\\ home paths and hide phantom (session) entries in the desktop session list by @mvanhorn in https://github.com/QwenLM/qwen-code/pull/5253
* feat(stats): expose token usage for cost visibility by @shenyankm in https://github.com/QwenLM/qwen-code/pull/4564
* fix(plan-gate): isolate gate agent AbortSignal from parent signal chain by @CubeLander in https://github.com/QwenLM/qwen-code/pull/5185
* fix(core): honor output language in side queries by @Jerry2003826 in https://github.com/QwenLM/qwen-code/pull/4519
* fix(cli): avoid stale git branch watcher setup by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5271
* fix(desktop): detect WebP and AVI in RIFF magic-byte sniffing by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5336
* fix(input): restore IME cursor positioning reverted in #4779 by @BenGuanRan in https://github.com/QwenLM/qwen-code/pull/4993
* fix(cli): close @path completion dropdown on Enter accept by @Alex-ai-future in https://github.com/QwenLM/qwen-code/pull/4841
* fix(core): fall back to encrypted-file storage for extension secrets when keychain is unavailable by @DragonnZhang in https://github.com/QwenLM/qwen-code/pull/5221
* fix(core): support whitespace in session metadata fields by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5353
* fix(core): prevent OOM in auto-memory extraction during /quit (#5147) by @ZijianZhang989 in https://github.com/QwenLM/qwen-code/pull/5181
* refactor(tools): rename TodoWrite tool display name to TodoList by @wenshao in https://github.com/QwenLM/qwen-code/pull/5319
* fix(core): expire tokens at buffer boundary by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5360
* fix(cli): validate restore checkpoints before mutation by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5358
* fix(core): honor ripgrep builtin setting at runtime by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5362
* fix(core): create token file on first save by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5367
* fix(cli): preserve workspace trust state for extensions by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5369
* fix(cli): Stop after cancelled permissions by @doudouOUC in https://github.com/QwenLM/qwen-code/pull/5258
* fix(core): resolve tilde paths before search permission checks by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5378
* fix(cli): respect sandbox path boundaries by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5375
* fix(cli): update acp cancel test flag by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5384
* fix(core): avoid reconnecting on MCP tool errors by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5382
* fix(core): accept uppercase web fetch schemes by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5391
* fix(cli): preserve equals in mcp env values by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5377
* feat(cli): show follow-up suggestion in input placeholder by @MikeWang0316tw in https://github.com/QwenLM/qwen-code/pull/5145
* fix(core): avoid glob prefix cache reuse by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5364
* fix(core): validate grep result limits by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5389
* fix(core): parse grep results with colon paths by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5372
* feat(config): add settings file change detection via chokidar watcher… by @water-in-stone in https://github.com/QwenLM/qwen-code/pull/4933
* fix(acp): scrub simple env for spawned children by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5395
* fix(core): pass --no-ask-password to systemd-inhibit to prevent TUI corruption by @OrbitZore in https://github.com/QwenLM/qwen-code/pull/5318
* fix(cli): parse sandbox mounts with windows drives by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5388
* fix(core): add GLM-5.2 to Z.AI preset by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5397
* fix(openai): add string tool result compatibility mode by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5399
* fix(cli): clarify cumulative statusline token labels by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5400
* feat(cli): show optional response token rate by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5401
* fix(cli): reduce retained interactive tool output memory by @kkhomej33-netizen in https://github.com/QwenLM/qwen-code/pull/4971
* fix(cli): calculate response rate from phase token delta by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5402
* fix(cli): clarify unavailable model configuration hint by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5403
* feat(cli): serve the Web Shell UI from `qwen serve` by @wenshao in https://github.com/QwenLM/qwen-code/pull/5392
* fix(cli): gate cron scheduler startup on config initialization (#5022) by @qwen-code-ci-bot in https://github.com/QwenLM/qwen-code/pull/5230
* fix(core): keep estimated token split summing to total by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5420
* fix(core): share memory filename config state by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5419
* fix(channel): scope qqbot session backup path by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5417
* fix(channel): track qqbot close reconnect timer by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5416
* fix(auth): preserve custom provider models on install by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5404
* fix(core): target microcompaction cache disarms by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5407
* fix(channel): keep qqbot token refresh retrying by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5414
* fix(cli): keep keypress handlers current by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5421
* refactor(serve): unify session title/displayName into single displayName field by @chiga0 in https://github.com/QwenLM/qwen-code/pull/5002
* feat(cli): add persistent history collapse on resume with refined commands by @Gove2004 in https://github.com/QwenLM/qwen-code/pull/4085
* fix(cli): narrow settings enum schemas by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5418
* fix(channel): bound qqbot gateway reconnect retries by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5415
* fix(core): block broad shell self-kill commands by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5409
* fix(cli): preserve trustedFolders comments on save by @Zoean-z in https://github.com/QwenLM/qwen-code/pull/4746
* fix(hooks): remove the dead updatedMCPToolOutput field (#5422) by @ken-jo in https://github.com/QwenLM/qwen-code/pull/5423
* feat(web-shell): add extension management by @ytahdn in https://github.com/QwenLM/qwen-code/pull/5398
* fix(cli): accept uppercase URL schemes in mcp add transport detection by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5426
* fix(extensions): accept uppercase URL schemes when parsing install sources by @he-yufeng in https://github.com/QwenLM/qwen-code/pull/5429
* fix(core): provide escape path when plan gate is unavailable by @Alex-ai-future in https://github.com/QwenLM/qwen-code/pull/5430
* feat(extensions): interactive multi-tab /extensions manager (Installed / Discover / Sources) by @BZ-D in https://github.com/QwenLM/qwen-code/pull/4850
* fix(cli): stabilize extension list spacing by @yiliang114 in https://github.com/QwenLM/qwen-code/pull/5445
* fix(weixin): handle uppercase CDN upload schemes by @tt-a1i in https://github.com/QwenLM/qwen-code/pull/5439
## New Contributors
* @shiloong made their first contribution in https://github.com/QwenLM/qwen-code/pull/4918
* @Eric-GoodBoy-Tech made their first contribution in https://github.com/QwenLM/qwen-code/pull/5202
* @aspnmy made their first contribution in https://github.com/QwenLM/qwen-code/pull/5311
* @xxlaura made their first contribution in https://github.com/QwenLM/qwen-code/pull/4808
* @mvanhorn made their first contribution in https://github.com/QwenLM/qwen-code/pull/5253
* @CubeLander made their first contribution in https://github.com/QwenLM/qwen-code/pull/5185
* @water-in-stone made their first contribution in https://github.com/QwenLM/qwen-code/pull/4933
* @OrbitZore made their first contribution in https://github.com/QwenLM/qwen-code/pull/5318
* @Gove2004 made their first contribution in https://github.com/QwenLM/qwen-code/pull/4085
* @Zoean-z made their first contribution in https://github.com/QwenLM/qwen-code/pull/4746
* @ken-jo made their first contribution in https://github.com/QwenLM/qwen-code/pull/5423
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.18.3...v0.18.4