← 返回更新日志

OpenClaw v2026.5.12-beta.4 预发布

2026-05-13 · GitHub 原文
### 修复 - Codex 运行时:允许官方安装的 `@openclaw/codex` 包使用其私有任务运行时 SDK 辅助工具,修复迁移后的 OpenAI/Codex 测试版运行中出现的 `MODULE_NOT_FOUND` 错误。 - Codex 迁移:使 Enter 键在继续之前激活高亮的复选框行,这样即使计划项开始处于预选状态,"暂时跳过"和批量选择行也能正常工作。 - Codex 框架:当 OpenAI 身份验证位于代理的身份配置文件存储中而非环境变量中时,保持基于身份配置文件的媒体工具(如 `image_generate`)的可用性。 - WhatsApp/安装:允许 Baileys 在 pnpm 11 下使用固定的 libsignal git 子依赖,以便源代码安装和本地检查能够完成。 - fix(memory-wiki):需要管理员权限才能进行摄入 [AI]。(#80897) 感谢 @pgondhi987。 - memory-wiki:需要写入权限才能进行 Obsidian 搜索 [AI]。(#80904) 感谢 @pgondhi987。 - 构建:跳过从构建条目中排除的捆绑插件的复制元数据,防止更新/状态重建广告缺失的 QQ 机器人运行时文件。(#80925) - 控制 UI/会话:在会话选择器下拉菜单中,使用视觉上的 `└─ ` 前缀将子代理会话嵌套在其父会话下,使父子关系清晰。修复 #77628。(#78623) 感谢 @chinar-amrutkar。 - 自动回复:当配置的模型后端失败且回退未产生可见回复时,显示可见的错误,同时保留有意的静默轮次和仅副作用传递。(#80917) 感谢 @dutifulbob。 - 代理/执行:跳过子代理会话执行完成的冗余心跳唤醒,防止父会话出现虚假的 LLM 调用。修复 #66748。(#66749) 感谢 @ggzeng。 - 提供者流:保持兼容 OpenAI 的 SSE 和 JSON 回退流在分块间持续排空,并以有界的第一事件诊断而非停滞来处理失败的 Azure Responses 流。参考 #80926。(#80927) 感谢 @galiniliev 和 @CaptainTimon。 - 代理:将带有支持请求 ID 的通用提供者内部错误重写为用户友好的临时错误文本。(#49401) 感谢 @y471823206。 - WhatsApp:在关闭套接字之前,处理完待处理的去抖动入站消息。(#81246) 感谢 @mcaxtr。 - Telegram:在可见回复和持久镜像中保留受支持的 HTML 标签,使格式化消息正确呈现,而不是降级为转义文本。(#80977) 感谢 @obviyus。 ### 变更 - 网关/OpenAI HTTP:在入站 `/v1/chat/completions` 请求上尊重 `max_completion_tokens` 和 `max_tokens`,使客户端提供的令牌上限通过 `streamParams.maxTokens` 到达上游提供者,两者都发送时 `max_completion_tokens` 优先。感谢 @Lellansin。 - 模型/OpenAI CLI 认证:使 `openclaw models auth login --provider openai` 默认启动 ChatGPT/Codex 账户登录,而 `--method api-key` 保持为明确的 OpenAI API 密钥设置路径。 - Google/Gemini:在明确的 SDK OAuth 认证结果配置补丁中规范化已退役的 Gemini 3 Pro Preview ID,使提供者辅助工具为 Gemini 3.1 测试发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在 SDK OAuth 认证结果默认配置补丁中规范化已退役的 Gemini 3 Pro Preview ID,使辅助工具构建的提供者认证流为 Gemini 3.1 测试发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在写入配置之前,规范化由直接 `openclaw models auth login --set-default` 提供者认证流返回的已退役 Gemini 3 Pro Preview ID,使 Gemini 测试目标为 `google/gemini-3.1-pro-preview`。 - Google/Gemini:当 API 密钥引导仅重新应用代理默认值时,在提供者目录行中规范化已退役的 Gemini 3 Pro Preview ID,使发出的配置保持测试 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在 Google 向前兼容模型解析期间,规范化提供者限定的已退役 Gemini 3 Pro Preview 引用,使发出的配置在 Gemini 3.1 测试中使用 `google/gemini-3.1-pro-preview`。 - Google/Gemini:规范化代理前缀的已退役 Gemini 3 Pro Preview 目录行,使发出的配置在 Gemini 3.1 测试中使用 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在写入配置之前,在每代理模型覆盖中规范化已退役的 Gemini 3 Pro Preview ID,使特定代理的配置在 Gemini 3.1 测试中发出 `google/gemini-3.1-pro-preview`。 - 文档/子代理:在子代理和配置参考中记录 `agents.defaults.subagents.announceTimeoutMs`。(#75509) 感谢 @akrimm702。 - Cron:增加直接的 `cron.get`、`openclaw cron get <id>` 和代理工具 `get` 支持,用于按 ID 检查一个存储的 cron 作业。(#75117) 感谢 @samzong。 - 代理/工具:增加基于发送者的工具策略,使用规范的通道作用域发送者密钥,使操作员可以在全局、代理、组、核心、捆绑和插件工具表面上按请求者身份限制危险工具。(#66933) 感谢 @JerranC。 - ACP:通过 ACP 会话列表和会话信息快照暴露网关会话谱系元数据,使客户端无需私有网关侧通道即可渲染子代理图。(#73458) 感谢 @samzong。 - 频道/iMessage:增加 `openclaw channels status --channel <name>` 过滤并记录 BlueBubbles 到 imsg 的切换路径,使操作员可以探测 iMessage 而无需同时启动两个频道监视器。(#80706) 感谢 @omarshahine。 - CI:在插件预发布中添加非阻塞的 `plugin-inspector-advisory` 工件,使发布运行捕获捆绑插件兼容性分类而不改变阻塞门。 - 运行时/Fly:从其运行时环境变量检测 Fly Machines 作为容器环境,使网关绑定和 Bonjour 默认值与远程容器启动匹配。(#80209) 感谢 @liorb-mountapps。 - 提供者/fal:将 GPT Image 2 和 Nano Banana 2 参考图像编辑请求路由到 `/edit` 并携带 `image_urls` 数组,使用 `aspect_ratio` 和 `resolution` 参数强制执行 NB2 编辑几何,将 Fal 编辑模式输入图像上限提升至 GPT Image 2 的 10 和 Nano Banana 2 的 14,并允许编辑模式中的宽高比提示。(#77295) 感谢 @leoge007。 - 控制 UI:当应用模块从未注册时显示纯 HTML 恢复面板,为空白仪表板页面提供重试路径和浏览器扩展故障排除链接。修复 #44107。感谢 @BunsDev。 - 文档:将广泛的工具导航重命名为“能力”,将自动化和代理协调保留为章节,并将工具概述集中在工具、技能和插件上。https://docs.openclaw.ai/tools - 构建:启用额外的低变动 oxlint 规则,用于 promise、TypeScript 和运行时陷阱检查。 - 构建:为聚焦、禁用、条件、钩子、匹配器和期望风险启用更严格的 Vitest lint 规则。 - 构建:在共享格式化配置中固定显式 oxfmt 默认值,以保持格式化行为在升级过程中稳定。 - TypeScript:对隐式返回、副作用导入、覆盖和未使用的生产代码启用更严格的编译器检查。 - 日志记录:增加针对性的模型传输、负载、SSE 和代码模式诊断,并处理脱敏的 URL。 - 代理:允许 `session.agentToAgent.maxPingPongTurns` 最高 20,同时默认保持 5,以支持更长的代理到代理回复链。修复 #52382。(#52400) 感谢 @thirumaleshp。 - 代理:增加每代理 `tools.message.crossContext` 覆盖,使沙盒/公共代理可以在不更改全局机器人策略的情况下限制消息发送到当前对话。 - 代理:增加每代理 `tools.message.actions.allow` 覆盖,使沙盒/公共代理可以暴露和强制执行仅发送消息的工具。 - 代理:从紧凑的命令进度预览中省略沙盒工作区标记,同时保持内部沙盒诊断不变。 - 代理:将进度草稿命令预览行加宽 50%,使 Discord 内联工具更新保留更多有用的命令上下文。 - Codex 应用服务器:在有界轮次中断后淘汰超时的应用服务器客户端,使 Discord 代理在尝试超时后不会重用 CPU 旋转的 Codex 进程。 - Codex 应用服务器:将迁移的本机插件破坏性操作策略默认设置为启用,同时保留显式的全局和每插件 false 覆盖。 - 构建:将工作区包管理升级到 pnpm 11,并保持 Docker、安装、更新和发布工作流在 pnpm 11 配置表面。(#79414) 感谢 @altaywtf。 - 构建:使 Telegram QA 工作流和 git 源代码安装与 pnpm 11 工作区构建允许列表表面对齐。(#80588) 感谢 @altaywtf。 - 模型:在兼容 OpenAI 的请求之前,为按需本地模型服务器增加提供者级别的 `localService` 启动,包括一次性模型探测。 - 代理:修剪默认系统提示指导和仅发送消息工具模式,以减少提示令牌,同时保留 GPT-5 个性指导。 - 上下文:增加 `/context map` 以发送当前会话上下文贡献者的树图图像。(#79867) - Slack:为机器人 `chat.postMessage` 回复增加 `unfurlLinks` 和 `unfurlMedia` 配置,包括每账户覆盖,以便无需工作区范围设置即可抑制 Slack 链接和媒体预览。修复 #48435。(#80145) 感谢 @esegev1 和 @HemantSudarshan。 - Slack:增加对文本和 Block Kit 线程回复的显式 `replyBroadcast` 支持,使代理可以选择 Slack 的父频道 `reply_broadcast` 行为。(#64365) 感谢 @tony88331。 - Slack:在入站提示上下文中保留提及目标/源元数据,使代理可以区分直接机器人提及和提及他人的隐式线程唤醒。修复 #79025。(#75356) 感谢 @tmimmanuel。 - Slack:规范化本机 DM 频道 ID 的出站传递镜像路由到对等用户会话,使对 `D...` 目标的 `message.send` 调用不会将同一 Slack DM 线程拆分为频道会话。修复 #80091。(#80111) 感谢 @bek91。 - 插件 SDK:废弃已存在至少一个月且没有捆绑扩展生产导入的公共子路径,保留旧的 barrel/test/zod 子路径包导出以保持向后兼容性,并在 SDK 表面报告中跟踪两组。 - 插件 SDK:废弃当前仅被一两个捆绑插件所有者使用的公共子路径,保持其可导入性,同时将新插件代码引导到聚焦的共享 SDK 接缝或插件拥有的 API。 - 插件 SDK:在将 Chutes、GitHub Copilot 和 OpenAI Codex 认证流移回提供者拥有的模块后,删除所有者特定的 `provider-auth-login` 公共子路径。 - 插件 SDK:在将捆绑调用者移回提供者拥有的模块后,从公共导出中删除提供者特定的模型、流和 xAI 兼容性辅助工具。 - 插件 SDK:将运行时提供的活动模型元数据暴露给本机插件工具工厂,用于诊断和插件拥有的策略决策。修复 #77857。感谢 @jamiezigelbaum。 - QA/Mantis:增加 Telegram 实时 PR 证据自动化,使用 Convex 租赁的凭据、Crabbox 转录捕获、运动 GIF 预览和内联 PR 评论。 - QA/Mantis:增加 Telegram 桌面场景构建器,租赁 Crabbox,安装本机 Telegram Desktop,使用租赁的机器人凭据配置 OpenClaw Telegram 网关,并记录 VNC 截图/视频工件。 - Discord/语音:为说话者轮次、播放重置、插话检测和音频截断分析增加实时语音诊断。 - Talk:增加 `talk.realtime.instructions`,使操作员可以附加实时语音风格指令,同时保留 OpenClaw 内置的代理咨询指导。(#79081) 感谢 @VACInc。 - Discord/语音:默认测试和源代码安装使用纯 JS 的 `opusscript` 解码器,忽略可选的本地 `@discordjs/opus` 构建,避免在专用语音性能通道之外进行缓慢的本机附加编译。 - Discord/语音:增加可选的本地 `@discordjs/opus` 安装脚本和解码器偏好,用于实时语音性能通道,而不会让无关的 Docker/测试承担本机附加构建成本。 - Discord/语音:增加 `voice.allowedChannels`,将语音加入和机器人语音状态移动限制到配置的频道,同时保持未设置时的开放语音行为。 - 网关/技能:增加可选的私有技能存档上传安装路径,由 `skills.install.allowUploadedArchives` 控制,使受信任的网关客户端仅在操作员显式启用代码安装表面时才能暂存和安装基于 zip 的技能。(#74430) 感谢 @samzong。 - Codex 应用服务器:仅对框架线程启用 Codex 本机代码模式,使延迟的 OpenClaw 动态工具通过 Codex 自己的可搜索代码执行表面运行,而不是 PI 风格的包装器。 - 依赖项:刷新工作区固定和补丁目标,包括 ACPX `@agentclientprotocol/claude-agent-acp` `0.33.1`、Codex ACP `0.14.0`、Baileys `7.0.0-rc10`、Google GenAI `2.0.1`、OpenAI `6.37.0`、AWS SDK `3.1045.0`、Kysely `0.29.0`、Tlon skill `0.3.6`、Aimock `1.19.5` 和 tsdown `0.22.0`。 - 依赖项:刷新工作区固定,用于 Anthropic SDK、Smithy 共享 ini 加载、Playwright、YAML、Aimock、TypeScript 本机预览、Vitest、Oxlint/Oxfmt、Vite 和 pnpm 11.1.0。 - 依赖项:在捆绑包中硬固定非对等直接依赖项规范,并添加更改检查守卫,使运行时安装解析维护者测试的确切版本。 - 依赖项:将嵌入的 Pi 包移动到 `@earendil-works` 命名空间,刷新 Twitch Twurple 包,并将 `@openclaw/fs-safe` 从 GitHub 发布固定移动到已发布的 npm 包。 - 构建:通过 Crabbox 路由 Testbox 更改检查委托,并删除 OpenClaw 特定的 Blacksmith Testbox 辅助脚本。 - 代理/压缩:在嵌入压缩和轮次后运行时上下文中保留作用域后台 exec/process 会话引用,而不暴露来自无关作用域的会话。修复 #79284。(#79307) 感谢 @TurboTheTurtle。 - 代理/process:告诉代理在发送交互输入之前使用 `process log` 检查后台会话,并使用 `log`/`poll` 中的 `waitingForInput`/`stdinWritable` 提示。 - CLI/入门:改进设置、入门、配置和频道命令的路径引导,使终端流程解释下一个有用的命令,而不是依赖简短的设置标签。 - 代理/Codex:删除可配置的 Codex 动态工具配置文件,使 Codex 应用服务器始终拥有工作区、编辑、补丁、执行、进程和计划工具,同时保持 OpenClaw 集成工具可用。 - macOS 应用:将 Peekaboo 桥接依赖更新到 Peekaboo 3.0.0。 - 依赖项:刷新工作区固定,并将 WhatsApp 插件从 `@whiskeysockets/baileys` 迁移到 `baileys`,同时保持 `7.0.0-rc10` 运行时。 - 插件 SDK:在分组的会话命名空间下增加捆绑插件的会话操作、`sendSessionAttachment` 以及基于 Cron 的 `scheduleSessionTurn`/标签清理。替代 #75578/#75581/#75588 以及 #73384/#74483 的一部分。感谢 @100yenadmin。 - 插件 SDK/媒体理解:增加 `extractStructuredWithModel(...)` 以及可选的提供者端 `extractStructured(...)` 接缝,使受信任的插件可以通过提供者拥有的运行时(如 Codex)运行有界图像优先的结构化提取,并带有可选的补充文本上下文。 - 执行审批:增加 `tools.exec.commandHighlighting`,使审批提示中基于解析器的命令高亮可以全局或按代理启用。(#79348) 感谢 @jesse-merhi。 - Codex 应用服务器:将本机 Codex 子代理生成生命周期事件镜像到任务注册表,使应用服务器子代理出现在任务/状态表面,而不依赖转录文本。(#79512) 感谢 @mbelinky。 ### 修复 - CLI/媒体:默认使用全块字符渲染终端 QR 码,使捆绑的 `qrcode` 终端渲染器不会在紧凑半块模式下发出病态密集的 ANSI 最后一行,从而在某些终端中破坏扫描。修复 #77820。感谢 @KrasimirKralev。 - 代理/压缩:从排队的运行工作区而非运行器进程 cwd 读取压缩后的 AGENTS.md 刷新上下文,使基于 CLI 的后续轮次在压缩后重新注入正确的工作区启动规则。修复 #70541。(#75532) 感谢 @vyctorbrzezowski。 - 代理/读取工具:将超过 EOF 的正偏移视为空范围,而不是暴露上游读取错误,使过时的分页游标不再崩溃工具调用,同时不相关的读取失败仍会响亮失败。修复 #62466。(#75536) 感谢 @vyctorbrzezowski。 - Google/Gemini:规范化留在 Google API 密钥引导模型允许列表和回退中的已退役 Gemini 3 Pro Preview 引用,使设置发出的配置保持测试 `google/gemini-3.1-pro-preview` 而非 `google/gemini-3-pro-preview`。 - Telegram/上下文:将选定的主题上下文绑定到活动会话,使来自 `/new` 或 `/reset` 之前的消息不会在后续轮次中重放。(#80848) 感谢 @VACInc。 - Google/Gemini:在解析确切配置的代理提供者引用时,规范化已退役的嵌套 Gemini 3 Pro Preview ID,使 `kilocode/google/gemini-3-pro-preview` 解析为 `kilocode/google/gemini-3.1-pro-preview` 用于 Gemini 3.1 测试。 - CLI:从脱敏的输出字段中剥离通用的 OSC 终端转义负载,防止剪贴板/标题转义主体泄漏到承诺表和其他终端安全文本中。感谢 @shakkernerd。 - Codex 应用服务器:通过稳定的连接器 ID 匹配基于连接器的插件审批诱导,使启用的破坏性操作不再回退到仅显示名称的拒绝。 - 构建:用 Node 原生类型剥离替换选定的构建实用程序 `tsx` 预加载,使 Node 26 构建路径不再发出 `DEP0205` 模块加载器弃用警告。(#78584) 感谢 @keshavbotagent。 - 媒体生成:当工具调用省略 `timeoutMs` 时,尊重配置的音乐和视频生成超时,匹配图像生成行为。(#80687) - CLI/更新/状态:将测试版通道插件回退和模型定价刷新失败标记为警告,使混合测试版/最新插件队列保持可见,同时不会使核心更新或网关可达性看起来失败。修复 #80689。感谢 @BKF-Gitty。 - Doctor/插件:在 `doctor --fix` 期间重新链接托管 npm 插件的 `openclaw` 对等依赖,同时拒绝遵循插件包本地的 `node_modules` 符号链接。(#77412) 感谢 @TheCrazyLex。 - iMessage:将入站 tapbacks 作为反应系统事件而非正常消息路由,默认通知机器人作者消息,同时允许 `reactionNotifications: "off" | "own" | "all"` 覆盖。修复 #60274;参考 #39031 和 #39322。感谢 @hyperclaw。 - 控制 UI/性能:将节点轮询限定在活动节点选项卡,去抖动过期的会话列表协调,并限制聊天侧会话刷新,使长时间运行的仪表板避免后台重新加载抖动。感谢 @BunsDev。 - 插件/频道:将到达旧版插件加载器的捆绑频道入口文件解释为设置运行时加载器不匹配,而非通用的缺少注册失败。感谢 @chinar-amrutkar。 - 插件/会话结束:为网关进程停止时仍处于活动状态的每个会话,发射带原因 `shutdown`(或预期重启时的 `restart`)的类型化 `session_end` 插件钩子。以前 SIGTERM/SIGINT/重启路径在未枚举活动会话的情况下关闭网关,留下下游 `session_end` 插件(例如 claude-mem)在多次重启中累积幽灵行。新的关闭终结器排空一个内存跟踪器,该跟踪器由 `session_start` 填充,并由 replace / reset / delete / compaction 发射器遗忘,因此以前已完成的会话永远不会被重复发射。排空限制在 2 秒总预算内,因此慢速插件无法阻塞进程退出。将 `"shutdown"` 和 `"restart"` 添加到 `PluginHookSessionEndReason`。修复 #57790。感谢 @pandadev66。 - Codex 应用服务器:当 OpenClaw 沙盒处于活动状态时,将 Codex 代码模式沙盒限制为工作区写入,防止 Docker 网关套接字访问变成危险的全访问 Codex 轮次。 - TUI:在网关断开连接和有界关闭排空后,立即对 Ctrl+C/SIGINT 退出,使终端拆除不会滞留会话。修复 #75379。(#75381) 感谢 @udaymanish6。 - Matrix:默认将出站 Markdown 表格转换为项目符号列表,而不是围栏代码块。修复 #78990。(#80890) 感谢 @kinjitakabe。 - Bonjour/网关:将活动的 ciao 探测和新的名称冲突重命名视为进行中,使 mDNS watchdog 在重试前等待探测稳定,防止在 Windows、WSL 和其他多播不友好主机上快速重复播报循环。(#74778) 参考 #74242。感谢 @fuller-stack-dev。 - 提供者/MiniMax:当消息转换过滤一轮次为空负载时,发送最小的 Anthropic 兼容用户回退,使 MiniMax M2.7 在工具密集会话后不再返回 `chat content is empty`。修复 #74589。感谢 @neeravmakwana 和 @DerekEXS。 - 工具/媒体:在预构建内置媒体生成和 PDF 工具时,从仅 `tools.alsoAllow` 的策略中保留隐式的允许所有语义,使配置的媒体工具变为活动状态,而无需强制设置 `tools.allow: ["*", ...]`。修复 #77841。感谢 @trialanderrorstudios。 - Codex/Telegram:将代码模式工具进度与最终回复分离,使用本机工具标签渲染桥接工具调用,并修复持久化缺失的工具结果以实现更安全的后续轮次。(#80663) 感谢 @jalehman。 - 内存/搜索:当元 `sqlite-vec` 包在全局安装中缺失时,直接加载平台特定的 `sqlite-vec-<platform>-<arch>` 变体,使向量召回在 `npm install -g openclaw@latest` 升级中继续工作,此时 optionalDependencies 仅在磁盘上留下平台变体。修复 #77838。感谢 @corevibe555 和 @Simon2256928。 - Cron:在任务注册表中保持长时间的手动 cron 运行活动直到完成,防止在持久恢复协调之前出现瞬态 `lost` 标记。修复 #78233。(#78243) 感谢 @Feelw00。 - Doctor/GitHub CLI:当 GitHub 技能可用但 `gh` 认证位于与代理进程不同的操作员 HOME 下时,显示 `GH_CONFIG_DIR` 提示,而不会警告已禁用或已过滤的技能。修复 #78063。(#78095) 感谢 @tmimmanuel。 - 网关:在传递仍在进行中时,对同时的 `send`、`poll` 和 `message.action` 请求进行去重,防止对相同幂等键进行重复的出站工作。(#68341) 感谢 @thesomewhatyou。 - Cron:通过强制 `target: "last"` 时丢弃继承的显式心跳目标,使主会话 `systemEvent` 心跳唤醒保持在绑定的会话路由上,适用于直接和排队唤醒路径。修复 #73900。感谢 @richardmqq。 - Telegram:对视频媒体尊重强制文档传递,使 `--force-document` 将 MP4 作为文档而非类型视频发送。修复 #80389。(#80405) 感谢 @jbetala7。 - 网关:当 APNs 注册缺失时,清除推测性节点唤醒状态,防止未注册或错误类型的节点 ID 保留唤醒节流条目。修复 #68847。(#68848) 感谢 @Feelw00。 - 自动回复:防止延迟的后续队列排空终结器删除在 `/stop` 后注册的替换队列,防止立即的后续消息成为孤儿。修复 #68838。(#68839) 感谢 @Feelw00。 - 飞书:将手动应用 ID/应用密钥设置设为默认的频道绑定路径,同时保留二维码扫描创建作为可选的最佳努力流程,并为不响应二维码的国内飞书移动客户端记录手动回退。修复 #80591。感谢 @wei-wei-zhao。 - 内存:通过压缩最旧的自动提升部分并保留用户编写的笔记,限制梦想提升写入到 `MEMORY.md`,使活动内存保持在引导预算以下。修复 #73691。(#74088) 感谢 @YB0y。 - Telegram:在本机 `/status` 和 `/think` 菜单中显示已解决的思考默认值,同时保留显式的会话覆盖。(#80341) 感谢 @VACInc。 - 频道:根据活动回退快照缓存所选的频道注册表查找,使固定空注册表在活动注册表交换后刷新本机命令和别名路由。(#80333) 感谢 @samzong。 - Codex 应用服务器:重用本机 Codex CLI OAuth 用于隔离的应用服务器框架登录、刷新和应用库存缓存键,使经过 ChatGPT 验证的 Codex 运行不再回退到未验证的 OpenAI API 调用。(#79877) 感谢 @jeffjhunter。 - 网关:将 `sessions.resolve` 的 sessionId 和标签存储加载限定到请求的代理,使大型无关代理存储不会为作用域查找而被解析。修复 #51264。(#79474) 感谢 @samzong。 - 网关:在符合条件的 WebSocket 和节点订阅者之间共享序列化的流事件信封,同时保留每个客户端的序列号。(#80299) 感谢 @samzong。 - 网关:合并重复的 `openclaw doctor` 服务配置面板,同时保留拒绝修复的 `--force` 提示。修复 #80287。(#78688) 感谢 @YB0y。 - 浏览器:在浏览器状态中报告 Chrome MCP 现有会话页面就绪,同时不让状态探测超过客户端超时。修复 #80268。(#80280) 感谢 @ai-hpc。 - WhatsApp:将打开阶段的 Baileys 428 connectionClosed 通过 WhatsApp 重新连接策略路由,并保持打开后的 428 关闭可重试,使瞬态设置套接字关闭使用 WhatsApp 诊断重试,而不是作为裸露的 `channel exited` 错误逃逸。修复 #75736;缓解 #77443。感谢 @dataCenter430。 - 代理:为嵌入运行禁用 Pi 的默认文件系统资源发现,同时保持 OpenClaw 内联扩展工厂活动,防止首次 WhatsApp 触发的代理启动期间出现 Windows 事件循环停滞。修复 #77443。感谢 @dataCenter430。 - 提供者/自托管:从 `/props.default_generation_settings.n_ctx` 读取模型范围的 llama.cpp 运行时上下文,同时保留顶级 `n_ctx` 作为回退,使会话预算反映加载的上下文窗口。修复 #73664。(#74057) 感谢 @brokemac79。 - 内存:在读取 Markdown 文件之前,拒绝配置的额外内存路径中的符号链接目录组件。(#80331) 感谢 @samzong。 - 会话/转录:用共享的流辅助工具(`streamSessionTranscriptLines` 和 `streamSessionTranscriptLinesReverse`)替换整个文件的 `readFile` 扫描,用于幂等查找、最新/尾部助手文本读取、传递镜像去重和压缩分叉加载,使长时间运行的会话不再在内存中实现完整的转录。前向扫描使用 `readline` 在有界的 `createReadStream` 上;反向扫描从文件末尾读取有界块并最新优先解码完整的 JSONL 行,无需固定尾部上限。合成 200 MiB 转录:峰值 RSS 增量从 +252 MiB 降至 +27 MiB,同时保留格式错误行的容忍度和幂等键返回语义。修复 #54296。感谢 @jack-stormentswe。 - 浏览器/CDP:从原始 CDP 和持久 Playwright 选项卡选择中过滤浏览器内部目标,使导航打开真实页面选项卡。修复 #55734。感谢 @Demine4。 - WhatsApp:在处理新的入站 DM 之前,将热重载的 `dmPolicy` 和 `allowFrom` 设置应用于活动 Web 监听器。修复 #80538。感谢 @Ampaskopi129。 - 插件:让 `openclaw doctor --fix` 修复其包入口点因本地状态移动而无法通过包目录边界验证的托管插件安装。修复 #80592。感谢 @wei-wei-zhao。 - 语音通话:将语音发起的执行审批后续操作恢复为内部非传递轮次,而不是拒绝为 `unknown channel: voice`。修复 #80540。感谢 @patrickmch。 - 控制 UI:在活动聊天运行期间点击停止时,保留编辑器草稿,防止移动端意外丢失提示。修复 #80586。感谢 @KCALLC。 - 基础设施/重试:当提示可以尊重时,使带抖动的重试延迟保持在不低于服务器提供的 Retry-After 下限。修复 #68541。(#68543) 感谢 @Feelw00。 - 文档:澄清 `/model provider/model` 是确切的会话路由,而重复的裸模型 ID 仅在非会话覆盖路径上使用配置的回退顺序。参考 #80562。感谢 @gaodaabao。 - 脱敏持久化的秘密形状负载 [AI]。(#79006) 感谢 @pgondhi987。 - 代理:将 `.openclaw/sandboxes` exec 工作目录标记为紧凑工具摘要中的沙盒运行,而不是显示完整路径。 - OpenAI Codex:暴露浏览器 OAuth 和设备代码登录失败,而不是将失败的登录视为空成功认证结果。参考 #80363。 - CLI 代理:将运行时仅的当前轮次发送者/回复上下文带入 CLI 模型提示,同时保持提示构建钩子输入和转录文本干净。 - 控制 UI:使工作区文件存在性检查不再将 `fs-safe` stat 辅助工具失败视为文件缺失,恢复 Windows 工作区现有文件的代理文件状态。修复 #79953。感谢 @lovelefeng-glitch。 - Microsoft Foundry:当 Azure 订阅提示返回的 ID 不在启用的订阅列表中时,报告显式错误,而不是从不安全的订阅断言继续。(#62742) 感谢 @oliviareid-svg。 - fix(matrix):基于名称的允许列表解析的门控 [AI]。(#79007) 感谢 @pgondhi987。 - Slack:在新线程会话中包含机器人自身的根/父消息,使线程内回复到达代理时附带用户正在响应的父文本,而不仅仅是 `reply_to_id` 元数据。修复 #79338。感谢 @sxxtony。 - Docker:使镜像构建保持在源 pnpm 工作区策略上,使 pnpm 11 可以在没有仅 Docker 工作区重写的情况下修剪生产依赖。 - 代理/压缩:恢复信息级网关日志,用于嵌入压缩的开始、完成和不完整结果。(#71961) 感谢 @rubencu。 - Telegram:通过共享频道上下文路径构建回复感知的入站轮次,使代理看到当前消息内联的当前回复目标。 - Telegram:恢复混合了 JSON 数组和行分隔条目条的旧版消息缓存文件,使重启的网关保留回复窗口上下文。(#80567) - Telegram:在消息编辑时更新回复上下文缓存,使流式机器人回复在后续代理上下文中以其最终文本而非初稿出现。 - 技能/Windows:在主页前缀压缩后,将压缩的技能提示位置规范化为正斜杠,使 Windows 技能路径对模型文件工具保持可读。(#52200) 感谢 @chienchandler。 - 控制 UI/Windows:更新 `@openclaw/fs-safe`,使代理工作区文件存在性检查在 Windows 上正确回退,防止现有 AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md 和 MEMORY.md 文件显示为缺失。修复 #79953。感谢 @lovelefeng-glitch。 - 内存:跳过无法管理网关 cron 的普通 cron 和心跳钩子上下文的托管梦想 cron 协调警告。(#77027) 感谢 @rubencu。 - Cron:将 Codex 应用服务器轮次接受、CLI 进程生成和工具启动视为执行里程碑,防止隔离运行在工作开始后触发早期启动 watchdog。 - Codex 应用服务器:将当前轮次 `<turn_aborted>` 原始标记视为终止,使中断的本机工具轮次释放 Discord 代理会话,而不是等待外部超时。 - 元宝:将 `openclaw-plugin-yuanbao` 升级到 2.13.1,以支持群聊的 `sourceReplyDeliveryMode: "automatic"`。(#79814) 感谢 @loongfay。 - 内存:使 `memory_search` 结果的 `corpus` 标签与命中源对齐,使会话转录命中显示为 `sessions`,内存文件命中保持 `memory`。修复 #72885。(#71898, #72886) 感谢 @rubencu。 - Codex 应用服务器:默认将本机插件应用工具审批设为自动,使非破坏性读取工具在破坏性操作被禁用时运行。 - 插件:允许全局扩展目录中未跟踪的本地源插件加载 TypeScript 包入口,同时保持托管安装对编译运行时输出的严格性。修复 #80503。感谢 @Kaspre。 - Google/Gemini:在将清单目录行转换为发出的提供者配置时,规范化已退役的嵌套 Gemini 3 Pro Preview ID,使用 `google/gemini-3.1-pro-preview` 进行测试,而非 `google/gemini-3-pro-preview`。 - Google/Gemini:在保存的模型允许列表和回退链中规范化已退役的嵌套 Gemini 3 Pro Preview ID,使代理路由如 `openrouter/google/gemini-3-pro-preview` 持久化为 Gemini 3.1 Pro Preview。 - Google/Gemini:在配置的代理/提供者认证模型目录中规范化已退役的嵌套 Gemini 3 Pro Preview ID,使重新生成的配置保持测试 `google/gemini-3.1-pro-preview` 而非 `google/gemini-3-pro-preview`。 - Google/Gemini:在引导提供者目录预设时规范化已退役的嵌套 Gemini 3 Pro Preview ID,使设置发出的代理配置测试 `google/gemini-3.1-pro-preview` 而非 `google/gemini-3-pro-preview`。 - Google/Gemini:在通用配置写入期间,在提供者目录行中规范化已退役的 Gemini 3 Pro Preview ID,使无关的配置更改保持测试 `google/gemini-3.1-pro-preview`。 - 模型:对于具有重复模型 ID 的覆盖选择,使配置的回退链保持在配置的主模型之前,防止回退跳转到错误的提供者。修复 #80562。 - 本机应用:公告网关协议兼容性范围,使聊天和节点会话在添加 v4 客户端更新后可以连接到 v3 网关。 - 网关/代理:在包更新后保持过时的 `sessions_send` ACP 管理器和 `web_fetch` 运行时块可导入,防止活动网关在重启前中断。修复 #78804。感谢 @Gomesy72。 - 网关/安装:在 `openclaw gateway install` 中保留服务环境值源元数据,使 systemd 重装路径将 env 文件支持的密钥保留在内联单元元数据之外。参考 #77406, #77427。感谢 @stainlu 和 @brokemac79。 - 自动回复/重置:在裸 `/new` 和 `/reset` 模型提示中包括入站发送者上下文,同时将启动指令排除在转录提示之外,使代理在第一次重置轮次中看到发送者身份。修复 #77360。感谢 @srb11e。 - 网关:在附加后启动期间避免同步重启哨兵状态探测,防止慢速 Windows 或重定向状态目录阻塞频道轮次。修复 #79264。感谢 @liyi58。 - 代理/认证:用一次锁定的存储写入更新成功的模型认证配置文件状态,减少重复的 `auth-profiles.json` 保存带来的后模型回复延迟。感谢 @mcaxtr。 - 代理/图像:即使 `agents.defaults.imageModel` 未设置,也尊重显式的 `image` 工具模型覆盖,为配置的多模态提供者恢复一次性视觉调用。修复 #79341。感谢 @haumanto。 - Doctor/更新:在非交互式更新模式服务修复期间,保持活的 systemd 网关单元不变,使更新时的 doctor 不会静默覆盖操作员拥有的单元指令。参考 #80462。 - 更新:在验证确切的 npm 包安装目标时,接受可选的 `v` 前缀,使 `openclaw update --tag v2026...` 在安装匹配的裸包版本后不会回滚。参考 #74069;#80480。感谢 @Kaspre。 - Doctor:将 `plugins.deny` 中缺失的插件 ID 视为过时配置警告而非致命验证错误,并在过时插件清理期间将其移除,使更新修复不会为仅拒绝的过时插件引用恢复上次已知良好配置。参考 #77802。感谢 @Kaspre。 - Codex 应用服务器:通过上下文引擎提示投影保留提示本地的当前轮次上下文,使已回复的 Telegram 消息对 Codex 模型输入保持可见。 - Telegram:通过网关消息操作传递代理范围的媒体根目录,使来自活动代理的工作区本地媒体不会被视为跨代理访问而被拒绝。感谢 @frankekn。 - CLI/网关:使 `gateway status --deep` 具有插件感知能力,使配置的插件清单警告(包括缺失的频道配置元数据)在安装和更新冒烟检查期间保持可见。 - Doctor/状态:澄清网关令牌源冲突警告,并在托管网关服务凭据上下文中抑制它们。 - 飞书:接受其操作员身份嵌套在 `operator.user_id` 下的 Schema 2 卡片回调,使卡片按钮能够被分发而不是被丢弃为格式错误。修复 #71670。(#71787) 感谢 @rubencu。 - 飞书:当正常的群组引用回复目标为已撤回或缺失的消息时,回退到顶级群组发送,防止回复静默消失,同时保留本机主题安全性。修复 #79349。感谢 @arlen8411。 - Doctor:当配置的默认代理不是 `main` 时,停止将活动兼容代理目录标记为孤立。修复 #74313。(#74438) 感谢 @carlos4s。 - 认证/Claude CLI:将更新的托管外部 CLI OAuth 凭据持久化回 `auth-profiles.json`,防止过时的 `anthropic:claude-cli` 配置文件反复引导并淹没调试日志。修复 #80129。感谢 @Caulderein。 - 上下文:仅从实际运行上下文渲染 `/context map`,并持久化 Codex 应用服务器运行报告,而不将延迟的工具搜索模式计数为提示加载的工具模式。 - Codex 应用服务器:向诊断报告 Codex 本机工具执行,使长时间运行的本机 `bash`、web、文件和 MCP 工具不再被 watchdog 视为过时的嵌入运行。(#80217) - Codex 应用服务器:在订阅使用限制失败后刷新 Codex 账户速率限制,使 Discord 和其他频道回复可以显示下一次重置时间,而不是说 Codex 未返回任何内容。感谢 @pashpashpash。 - 代理/认证:让基于 Codex 的 OpenAI 代理轮次使用 `auth.order.openai` 条目用于 Codex 兼容的 OAuth 和 API 密钥配置文件,同时保持现有的 `openai-codex` 配置文件顺序有效。 - Codex 应用服务器:为本机工具完成发出异步 `after_tool_call` 观察,这些完成未由本机钩子中继覆盖,使可观察性插件可以记录 Codex 本机工具。(#80372) 感谢 @VACInc。 - 任务:通过请求者会话路由组和频道任务完成,使父代理可以发送可见摘要,而不是停在通用任务状态行。修复 #77251。(#77365) 感谢 @funmerlin。 - Telegram:在渲染的回复中保留手动缩进的项目符号块与后续编号部分之间的空白行。修复 #76998。感谢 @evgyur。 - 代理/沙盒:允许只读沙盒会话读取 `/agent` 工作区挂载,同时保持写/编辑/apply_patch 仅工作区保护,恢复 `workspaceAccess: "ro"` 的 `read /agent/...`。修复 #39497。感谢 @stainlu 和 @teosborne。 - Slack:通过草稿预览发送传递配置的代理身份,使部分流式回复在初始 Slack 消息上保留自定义用户名/头像。修复 #38235。(#38237) 感谢 @lacymorrow。 - Slack:支持 `allowBots: "mentions"` 用于提及接收机器人的机器人作者消息,匹配记录的 Discord 风格模式,而不接受每条机器人消息。修复 #43587。(#43588) 感谢 @raw34。 - Slack:当入站 DM 文件事件省略或有过时的附件 URL 时,使用 `files.info` 刷新私有文件 URL,防止文件附件在媒体水合之前被丢弃。修复 #50129。(#50200) 感谢 @smartchainark。 - Slack:增加作用域消息工具格式化提示,使代理对纯发送使用 Markdown,对 Block Kit 字段使用直接 mrkdwn。修复 #34609。(#50979) 感谢 @carrotRakko。 - Slack:将 `download-file` 文件 ID 与消息时间戳分开描述,并在代理传递 `messageId` 而非 `fileId` 时返回有针对性的恢复错误。(#74155) 感谢 @jarvis-ai-gregmoser。 - Slack:为 `requireMention=false` 频道保留已处理的房间消息,使始终在线的 Slack 房间在轮次之间保留最近的对话上下文。(#38658) 感谢 @syedamaann。 - Slack:为直接出站发送编译交互式回复指令,而不绕过 `interactiveReplies` 能力门,为 Slack CLI 和 cron 传递保留 Block Kit。(#78220) 感谢 @kazamak。 - Slack:将 DM 最后路由更新限定到活动的非主 DM 会话(包括线程 DM 轮次),使隔离的 Slack DM 会话不会覆盖共享的主路由。(#73085) 感谢 @clawSean。 - Slack/ACP:当没有运行时绑定时,通过配置的 ACP 绑定路由 Slack 频道和 DM 消息,使绑定的线程回复固定到持久的 ACP 会话,并丢弃不可用的配置目标,而不是回退到 `main`。(#73101) 感谢 @Raasl。 - Slack:将未解决的线程回复标记为有歧义并跳过,而不是将其视为根频道消息,使线程延续保持在 SDK 支持的参与存储上。(#75630) 感谢 @soichiyo。 - Slack:允许同频道消息工具发送使用 `topLevel: true` 或 `threadId: null` 选择退出继承的线程上下文,使代理可以从 Slack 线程内部发布新的父频道消息。修复 #79807。感谢 @vexclawx31。 - Slack:偏好完整的富文本块内容而非截断的套接字模式消息预览,使长入站 Slack 消息完整到达代理。修复 #79027。感谢 @BobAccentWebDev。 - Slack:在设置、探测、流和回复日志中包含结构化的 Slack API 错误详细信息,同时保留令牌脱敏。(#53966) 感谢 @deucemask。 - 网关/代理:当活动运行排队失败时保留结构化原因,并弃用旧版布尔排队辅助工具,使转向和子代理唤醒诊断能够区分已完成、非流式和压缩运行。修复 #80156。感谢 @markus-lassfolk。 - 系统事件:在队列中对关键事件进行去重,同时保留非关键、传递路由和信任边界事件的身份。(#73040) 感谢 @statxc。 - 代理/UI:通过隐藏冗余的 shell 工具名称、将已知的工作区路径替换为简短的上下文标记,并保留紧凑命令行 Discord 跟踪清理,来压缩执行和工具进度行。 - ACPX:默认运行并等待嵌入的 ACP 后端启动探测,使网关 `ready` 信号不再在 acpx 运行时变为可用或报告探测失败之前发出;设置 `OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=0` 恢复惰性启动。修复 #79596。感谢 @bzelones。 - 网关/状态:将模型定价引导和刷新失败作为降级健康/状态警告显示,同时保持网关活性健康。修复 #79599。感谢 @bzelones。 - 兼容 OpenAI 的模型:默认从重放的 Chat Completions 历史中剥离先前的助手推理字段,防止 oMLX/vLLM Qwen 后续轮次因过时的 `reasoning` 负载而拒绝或停滞。修复 #46637。感谢 @zipzagster 和 @lexhoefsloot。 - CLI/入门:为非 Azure 自定义提供者生成安全的生成上下文窗口,并修复旧版 4k 向导条目,而不覆盖显式的有效小型模型限制,防止首次轮次压缩循环。修复 #79428。(#79911) 感谢 @Jefsky。 - 兼容 OpenAI 的模型:增加 `compat.strictMessageKeys`,将 Chat Completions 重放消息剥离为仅 `role` 和 `content`,用于拒绝 OpenAI 风格工具和元数据键的严格提供者。修复 #50374。感谢 @choutos。 - Bedrock Mantle:增加 `plugins.entries.amazon-bedrock-mantle.config.discovery.enabled=false`,以抑制自动 Mantle 发现和 IAM 承载令牌生成,同时保持插件启用。修复 #67288。感谢 @kanekoh。 - Ollama:阻止本机 `/api/chat` 请求将目录 `contextWindow` 或 `maxTokens` 复制到 `options.num_ctx`,除非显式配置了 `params.num_ctx`,避免本地大上下文模型上病态的提示摄入延迟。修复 #62267。感谢 @BenSHPD。 - Ollama:保持模型空闲 watchdog 对通过本地 Ollama 主机路由的 `*:cloud` 模型启用,使基于云的工具循环停滞在可见时失败,而不是继承本地模型的无空闲行为。修复 #79350。感谢 @geek111。 - 语音/Ollama:对经典嵌入语音响应尊重路由的语音代理 `tools.allow`,包括空允许列表,使无工具的 Ollama 代理不会收到工具模式。修复 #79506。感谢 @donkeykong91。 - 代理/doctor:当频道路由的代理无法调用 `message` 工具时发出警告,使操作员可以在显式频道操作(如附件或线程回复)失败之前修复工具策略不匹配。参考 #80128。感谢 @jeffjhunterai。 - 网关:在首次进程内重启循环启动后,从磁盘重新读取配置,防止 SIGUSR1 重启重用过时的启动快照并丢弃启动后写入的配置。修复 #79947。感谢 @TheLevti。 - Codex 应用服务器:从 Codex `savedPath` 事件传递本机图像生成输出作为回复媒体,使空白文本的图像生成轮次仍然附加生成的文件。感谢 @keshavbotagent。 - 网络/SSRF:在双栈主机也发布 AAAA 记录时,保持固定的自动 DNS 查找在 IPv4 上,并将 `EADDRNOTAVAIL` 视为瞬态网关网络故障而非致命崩溃。修复 #80078。感谢 @takamasa-aiso。 - 控制 UI:在会话表中显示紧凑的单行活动/空闲/终端运行状态徽章,并将活动分钟过滤器重命名为其“在...内更新”的含义。修复 #78307。感谢 @BunsDev。 - 控制 UI:将会话列表刷新限定到代理,并跳过仅配置列表的磁盘仅代理存储发现,防止首次消息后会话切换停滞在大型 Windows 存储上。修复 #79675。感谢 @lovelefeng-glitch, @BunsDev。 - 控制 UI:允许 Appearance tweakcn 主题导入通过服务的 CSP,使浏览器本地自定义主题链接不再因 `connect-src` 违规而失败。修复 #78504。感谢 @BunsDev。 - 控制 UI/配置:删除插件启用切换在保存前恢复时表单自动添加的插件允许列表条目,使恢复可见切换清除脏状态而不持久化意外的允许列表更改。(#78329) 感谢 @samzong。 - 网关/移动:在切换重新连接时重用引导发布的设备令牌作用域,并将设备令牌作用域不匹配与令牌不匹配分开显示,同时保留完整的共享令牌仪表板/本机会话。修复 #79292。感谢 @BunsDev。 - 媒体/主机读取:在共享的主机本地媒体验证器中,允许缓冲区验证的 gzip、tar 和 7z 存档,以及 ZIP 和文档附件。 - 插件/安装:在 npm 的 `Invalid comparator: npm:` 失败后,在没有 npm 别名覆盖的情况下重试托管 npm 插件安装,使旧版 npm 可以安装官方插件而不是中止。(#80539) 感谢 @rubencu。 - 插件/doctor:当插件诊断指向已删除的源路径时,使持久化的插件注册表快照失效,使 `openclaw doctor` 在本地扩展被托管 npm 插件替换后停止重复过时的警告。修复 #80087。(#80134) 感谢 @hclsys。 - Doctor/OpenAI Codex:在自动修复旧版 `openai-codex/*` 模型引用为规范 `openai/*` 时,通过添加提供者/模型范围的 Codex 运行时策略,保留 Codex 认证意图,防止修复的配置回退到直接 OpenAI API 密钥认证。修复 #78533 和 #78570。感谢 @superck110 和 @Azmodump。 - CLI/代理:从 `sendDurableMessageBatch` 在 `deliverAgentCommandResult` 和 `openclaw agent --json --deliver` 中暴露持久消息传递状态,将抑制的钩子结果作为终端不重试结果保留,同时暴露部分和失败的发送用于自动化。取代 #53961 和 #57755。感谢 @Kaspre。 - 代理:在提供者流设置仍待定时应用 LLM 空闲 watchdog,防止流前模型静默挂起等待完整代理超时。 - Cron:让隔离的自清理运行检查自己的作业运行历史,同时阻止其他 cron 作业和变异操作。修复 #80019。感谢 @hclsys。 - Cron:使用阶段特定超时错误报告隔离的代理轮次设置和模型前停滞,而不是在没有模型调用开始时等待完整作业预算。修复 #74803。感谢 @jeffsteinbok-openclaw 和 @dgkim311。 - CLI/插件:将插件 CLI 元数据之外的任意未知子命令视为普通未知命令,而不是建议 `plugins.allow`,同时为真实插件命令根保留允许列表指导。修复 #80109。(#80123) 感谢 @kagura-agent。 - CLI/配置:持久化等于运行时默认值的显式 `config set` 和 `config patch` 值,而不是报告成功同时丢弃它们。修复 #79856。(#80106) 感谢 @abodanty 和 @hclsys。 - OpenAI/实时语音:接受兼容 Codex 的旧版音频和转录事件别名,使提供者协议漂移不会丢弃助手音频或字幕。 - Discord/语音:防止默认代理代理实时会话在强制 OpenClaw 咨询答案之前自动说话填充内容,在实时响应完成后完成 Discord 播放,并排队后续精确语音答案直到播放空闲,以避免句中替换。 - 网关:对格式错误的编码会话终止 HTTP 路径返回确定性的 `400 invalid_request_error` 响应,而不是让路由形状的请求落入后续网关处理程序。(#72439) 感谢 @rubencu。 - 控制 UI:从 `/__openclaw__/` SPA 路由提供根 PWA 和网站图标资源,使标签图标、安装元数据和服务工作线程在内部导航后不会 404。修复 #80072。感谢 @CodeNovice2017。 - 执行/安全二进制:在不区分大小写的文件系统上,使用路径特定的大小写折叠比较受信任的安全二进制目录,使 Windows 和默认 macOS 路径匹配,而不削弱区分大小写的挂载。(#42131) 感谢 @hkochar。 - OpenAI/实时语音:在本地尊重禁用的输入音频中断,使服务器 VAD 语音开始事件在操作员设置 `interruptResponseOnInputAudio: false` 后不会清除 Discord 播放。 - Telegram:保持无响应的 DM 轮次安静,而不是将其重写为可见的静默回复消息。修复 #78188。(#78228) 感谢 @Beandon13。 - Telegram:在原始回调回退之前处理托管的选择按钮回调,同时保留包含分隔符的选项值,如 `env|prod`。(#79816) 感谢 @moeedahmed。 - 兼容 OpenAI 的模型:处理返回给流请求的 JSON 聊天完成主体,保留推理字段和可见文本,而不是完成空的代理轮次。修复 #77870。 - Discord/模型:在加载路由、模型和偏好数据之前,推迟模型选择器组件交互,防止网关负载下的“此交互失败”超时。修复 #77283。感谢 @colin-chang。 - xAI:暴露 `/think low|medium|high` 用于具有推理能力的 Grok 模型,并在本机 Responses 负载上保留 `reasoning.effort`,同时为非推理路由保留仅关闭行为。修复 #79210。感谢 @colinmcintosh。 - CLI/媒体:让显式的图像描述模型引用使用捆绑的静态提供者目录和通用模型支持的图像钩子,使 `openclaw infer image describe --model zai/glm-4.6v` 像直接模型运行一样工作,并且 Anthropic 认证探测避免过时的 Claude 3 Haiku 目录条目。 - 模型/Anthropic:当配置了 Anthropic 默认模型时,将 `anthropic/claude-haiku-4-5` 添加到 Anthropic API 密钥代理允许列表默认值,使 cron 模型覆盖可以选择当前的 Haiku 别名。修复 #78000。 - 代理/压缩:在 CLI 转录压缩解析默认引擎之前初始化内置上下文引擎,防止在 CLI 会话持久化期间出现干净进程的 `legacy` 引擎注册失败。修复 #79446。感谢 @TurboTheTurtle。 - 代理/兼容 Anthropic:为显式声明 `supportsReasoningEffort: false` 的自定义兼容 Anthropic 模型剥离重放的思考块,防止兼容 Kimi 的提供者重新发送不支持的 `thinking` 内容。修复 #47452。 - Kimi:通过提供所需的思考预算和足够的输出空间(用于隐藏推理加最终文本),保持兼容 Anthropic 的思考流有效。(#80481) 感谢 @InTheCloudDan。 - 浏览器:对现有会话 Chrome MCP 状态和非深度 doctor 探测等待更长时间,使缓慢的首次附加不会错误报告离线,同时保持原始 CDP 状态探测短。(#77473) 感谢 @rubencu。 - 网关/日志记录:在前台网关快速路径解析之前安装控制台捕获,并抑制已知的 libsignal 会话转储(即使在详细模式下),防止原始终端日志打印 WhatsApp 会话密钥材料。(#76306) 感谢 @rubencu。 - 执行审批:将 `exec.approval.list` 保持在轻量级策略摘要路径上,使列出待处理审批不再加载丰富的树状命令解释器。(#76943) 感谢 @rubencu。 - 代理:在助理声称成功后的 `exec`/`bash` 工具调用失败时显示简洁的默认可见警告,同时除非启用详细细节,否则隐藏原始 stderr。修复 #60497。(#80003) 感谢 @jbetala7。 - 频道/iMessage:在非敏感健康快照中保留脱敏的失败探测详细信息,使全磁盘访问失败不再在状态输出中显示为已配置/正常。修复 #79795。 - 代理:在分发之前停止空白模型发出的工具调用,同时保留基于 ID 的工具名称恢复,防止 Kimi/NVIDIA 空白名称重试循环,而不创建可调用的 `_blank` 哨兵。修复 #34129。(#56391) 感谢 @smartchainark。 - 代理/Telegram:传递规范的最终助手答案,而不是重放累积的预工具文本块,防止重复的 Telegram 回复和原始外观的工具输出片段泄漏到聊天传递中。修复 #79621 和 #79986。感谢 @nonzeroclaw 和 @dudaefj。 - 自动回复/TUI:在主模型生命周期错误后,通过发出回退进度并推迟终端 TUI 错误直到恢复有机会完成,保持回退超时恢复可传递。修复 #80000。(#80009) 感谢 @TurboTheTurtle。 - 心跳:当配置的默认模型更改时,清除过时的自动回退模型覆盖,使心跳运行遵循更新后的 `agents.defaults.model.primary`,无需手动重置。修复 #74284。感谢 @brtkwr 和 @bitloi。 - CLI/代理:让 `openclaw agent --model` 使用后端/管理员网关作用域,而不让缓存的设备令牌作用域静默降级请求的作用域。(#78837) 感谢 @VACInc。 - CLI/帮助:保持帮助和版本调用无配置,同时改进共享端口、频道、插件、任务、会话、消息、配对和认证恢复文本。 - CLI/配置:用有效示例和纯字符串转义出口解释严格的 JSON 解析失败。 - CLI/密钥:将离线的网关重载失败转换为可操作的恢复文本。 - CLI/频道:用下一个命令解释缺失或有歧义的频道选择。 - CLI/频道:推迟引导式频道状态收集,直到选中频道,使 `openclaw channels add` 的第一屏更简洁。 - CLI/频道:在取消时干净退出引导式频道设置,而不是打印内部向导错误。 - 插件/CLI:将禁用的 Matrix 和 LanceDB 内存命令根路由到插件启用指导,而不是通用未知命令错误。 - 浏览器/Docker:从 `PLAYWRIGHT_BROWSERS_PATH` 和 Linux 上默认的 Playwright 缓存检测 Playwright 管理的 Chromium,使持久化 `/home/node/.cache/ms-playwright` 的 Docker 安装不再需要 `browser.executablePath`。 - Ollama:即使 Ollama Cloud `/api/show` 省略了 `thinking` 能力,也使 DeepSeek V4 云模型保持思考能力,使 `/think high` 不再拒绝 `ollama/deepseek-v4-*:cloud`。 - ACPX/Claude ACP:当自主任务通知结果在同一会话期间到达时,保持前台提示等待自己的结果,并重新定位补丁以用于 Claude Agent ACP `0.33.1`。 - WhatsApp:防止 Baileys 媒体上传在 `7.0.0-rc10` 中将非 Dispatcher 代理传递给 undici,并修补捆绑的 Baileys 声明,使最新的 tsdown 构建保持警告干净。 - 构建:通过外部化已知的第三方声明边缘并用显式的内置频道字段替换相对的频道配置模块增强,保持 tsdown `0.22.0` 警告干净。 - ACP 会话:将规范运行时选项映射到后端通告的 ACP 配置键(如 Claude 的 `effort`),同时保持持久化的 OpenClaw 状态规范。(#79926) 感谢 @InTheCloudDan。 - 模型/Discord:在 `agents.defaults.models` 中支持 `provider/*` 条目,使 `/model`、`/models` 和模型选择器可以为选中的提供者显示动态发现的模型,而无需精确的模型允许列表。修复 #79485。感谢 @rendrag-git。 - 网关/watch:在从源代码签出启动网关之前,重建或重新暂存缺失的捆绑插件 dist 和运行时后构建输出,防止不完整的监视模式运行时树。(#70805) 感谢 @rubencu。 - CLI/更新:允许在自更新期间从之前的网关协议进行重启健康探测,并让插件干运行报告确切的 npm 目标版本而非 `unknown`,同时保留不变的状态。 - OpenAI/Codex:在规范 `openai/*` 迁移后,将持久化的 `openai-codex` OAuth 配置文件元数据转发到 Codex 插件框架尝试中,使仅 OAuth 安装继续使用本机 Codex 认证,而不是回退到直接 OpenAI API 密钥认证。修复 #79978。 - OpenAI/Codex:将网关缺失密钥恢复和向导文档指向规范的 `openai/gpt-5.5` 加上 Codex OAuth 路由,并修复轨迹导出错误,使其建议有效的 `openclaw sessions` 命令。 - Google/Gemini:在配置加载和无关配置写入期间,在 `google/gemini-3-pro-preview` 主模型、回退和模型映射引用中规范化已退役的 ID,使保存的配置继续以 Gemini 3.1 Pro Preview 为目标。 - Google/Gemini:在发出的 Google 提供者模型配置中规范化已退役的 Gemini 3 Pro Preview ID,使重新生成的 models.json 行测试 `google/gemini-3.1-pro-preview`。 - Google/Gemini:为显式的兼容 OpenAI 的 Google 和 Gemini CLI 提供者配置规范化已退役的 Gemini 3 Pro Preview ID,使发出的配置以 `google/gemini-3.1-pro-preview` 为目标。 - Google/Gemini:规范化从现有合并的 models.json 提供者保留的已退役 Gemini 3 Pro Preview ID,使配置发射继续以 `google/gemini-3.1-pro-preview` 为目标。 - Google/Gemini:在提供者认证配置补丁中规范化已退役的 Gemini 3 Pro Preview ID,使设置发出的提供者目录测试 `google/gemini-3.1-pro-preview`。 - GitHub Copilot:使用与运行时请求相同的 `vscode-chat` 集成身份生成短期 Copilot API 令牌,并刷新缺失该身份的旧版缓存令牌,使支持图像的 Copilot 模型不再继承 `copilot-language-server` 作用域。修复 #79946, #80074。感谢 @TurboTheTurtle。 - 插件/doctor:当 `openclaw doctor --fix` 移除遮蔽捆绑插件的 npm 包时,删除过时的托管 npm 安装记录,使重建的注册表不再复活已移除的包元数据。 - Doctor:当每代理模型配置省略 `fallbacks` 键且 `agents.defaults.model.fallbacks` 非空时发出警告。涵盖字符串形式(`"model": "..."`)和部分对象形式(`"model": { "primary": "..." }`)——两者在运行时静默覆盖默认链。使用 `"fallbacks": []` 显式选择退出回退,或添加 `"fallbacks": [...]` 继承或覆盖。修复 #79369。感谢 @Kaspre。 - Discord/语音:重用或抑制延迟的实时咨询工具调用,而不窃取更新的说话者上下文或两次说出强制回退答案。 - Discord/语音:跳过可能不完整的实时强制咨询转录片段和不可操作的结束语,使过时的部分语音不会在下一轮次排队延迟答案。 - Discord/语音:防止实时强制咨询清除活动的精确语音播放,使背对背语音答案排队而不是相互切断。 - Discord/语音:从发出的 Discord PCM 合成实时播放时间戳,使 OpenAI 实时插话截断不再看到 `audioEndMs=0` 而跳过合法的中断。 - 插件 SDK:当捆绑插件回退被禁用时,保持激活的链接插件运行时外观可加载。感谢 @shakkernerd。 - 飞书:当活动会话为 group_topic 或 group_topic_sender 时,自动将 `message(action="send")` 回复线程化到主题内,并通过文本、卡片和媒体出站适配器传播 `replyInThread`,使主题范围会话不再在群组根发布。修复 #74903。(#77151) 感谢 @ai-hpc。 - WhatsApp:将路由上下文传递到语音笔记转录回波预检中,使回波转录可以传递到原始聊天。修复 #79778。(#79788) 感谢 @hclsys。 - Cron/故障转移:将结构化的兼容 OpenAI 的 `server_error` 负载分类为 `server_error`,在 cron 状态中暴露该原因,并让一次性 cron 重试策略尊重 `retryOn: ["server_error"]`,而不需要原始的 `5xx` 文本。(#45594) 感谢 @clovericbot。 - Slack:在交互式回复按钮/选择点击后唤醒已解析的线程会话,并将 Slack 传递上下文通过队列的交互事件传递,使点击继续可见对话。修复 #79676 和 #61502。(#79836) 感谢 @velvet-shark, @tianxiaochannel-oss88, 和 @Saicheg。 - WhatsApp/流式:当文本结束块回复跨工具调用周期重复先前前言时,仅发送新的后缀,防止累积的 WhatsApp 前言消息。修复 #78946。(#79120) 感谢 @brokemac79 和 @papawattu。 - 测试/安全审计:将 `audit-exec-surface.test.ts` 沙盒化到每个用例的 OpenClaw 主页临时目录,将 `OPENCLAW_HOME`(在 `resolveRawHomeDir` 中优先于 `HOME`/`USERPROFILE`)与 `HOME` 和 `USERPROFILE` 一起重定向,使其 `saveExecApprovals(...)` 调用永远不会触及运行套件的主机上真实的 `~/.openclaw/exec-approvals.json`。同级 exec-approvals 测试已使用临时目录模式;此文件没有,因此针对贡献者本地签出运行 `pnpm test` 正在静默将其真实审批截断为 `{ "version": 1, "agents": {} }`。(#79885) 感谢 @omarshahine。 - ACP/网关:通过生命周期边界保留 `AcpRuntimeError` 原因链(代码/方法/JSON-RPC 详情),使网关日志、Telegram 回复和工具结果文本显示实际的上游失败,而不是不透明的 `Internal error`/`[object Object]`,并在原因链到达日志或回复表面之前应用脱敏。 - 频道/iMessage:当安装的 imsg 版本宣传该能力时(通过 `imsg send-rich --help` 探测一次并缓存在私有 API 状态上),将 `action: "reply"` 附件通过 `imsg send-rich --file` 连接。回复现在通过共享的出站解析器水合 `media`/`mediaUrl`/`fileUrl`/`mediaUrls[0]`/`filePath`/`path`/base64 `buffer`+`filename`,通过现有的 `withTempFile` 辅助工具暂存缓冲区,拒绝 `http(s)://` URL 附件并给出针对性的错误指向调用者使用 `send` 的完整附件解析器管道,并在旧版 imsg 版本上回退到显式的 `imsg#114 not landed yet` 错误。依赖于上游 `openclaw/imsg#114` 能力在可安装版本中落地;在此之前新路径保持关闭,用户看到相同的显式回退 `#79822` 引入的。(#79864) 感谢 @omarshahine。 - Telegram:保留首次预览去抖动,同时追加真正的部分流增量,使编辑的草稿预览不再在提供者发出增量输出时重复早期文本。(#80045) 感谢 @TurboTheTurtle。 - 代理/Anthropic:为 Claude Opus/Sonnet 4 模型报告 1M 会话上下文,即使本地模型配置仍宣传 200k,匹配模型发现并防止过早的状态/UI 溢出。修复 #66766。 - 模型/OpenRouter:当缺失认证的直接提供者行仅被嵌套的 OpenRouter 模型 ID(如 `openrouter/google/...`)复制时,在 `/model status` 中隐藏它们,同时保留显式配置的直接提供者。修复 #62317。 - 模型:当另一个提供者拥有相同的裸模型别名时,保留显式选择的提供者/模型如 `opencode-go/deepseek-v4-pro`。修复 #79325。 - 模型/配置:当模型仅存在于 `agents.defaults.models` 中时,解释缺失的 `models.providers.<provider>.models[]` 注册,而不是返回裸的未知模型错误。修复 #80089。 - MCP/工具:为以数字开头的捆绑 MCP 服务器/工具片段添加前缀,使生成的工具名称对 Moonshot/Kimi 和其他严格提供者有效。修复 #79179。 - 模型/OpenRouter:将 `403 API key budget limit exceeded` 视为计费,使模型回退前进而不是重试耗尽的主模型。修复 #60191。感谢 @omgitsgela。 - 模型/OpenRouter:修复丢失外部 `openrouter/` 提供者包装器的过时会话覆盖,使会话返回到配置的 OpenRouter 模型,而不是作为未知的直接提供者模型失败。修复 #78161。感谢 @hjamal7-bit。 - Google/Gemini:将 API 密钥引导默认恢复为 `google/gemini-3.1-pro-preview`,使新的 Gemini 测试配置练习 Gemini 3.1 Pro Preview。 - Telegram:在模型选择器中显示嵌套的 OpenRouter 模型 ID 的完整提供者/模型标签,使 `openrouter/openai/gpt-5.4-mini` 不再显示为 `openai/gpt-5.4-mini`。修复 #67792。(#72752) 感谢 @iot2edge。 - 模型/OpenRouter:保留活动的 `supported_parameters` 工具支持元数据,使不支持工具的 Perplexity Sonar 模型不再收到代理工具负载并无必要地回退。修复 #64175。感谢 @Catfish-75。 - 模型/OpenRouter:将 MoonshotAI Kimi K2.5 添加到捆绑的 OpenRouter 目录,使引导/模型选择器可以在不等待实时发现的情况下提供它。修复 #14601。 - 模型/OpenRouter:使 keyRef/tokenRef 支持的认证配置文件对只读 PI 模型发现可见,使 OpenRouter 模型在模型选择器中保持可用,而无需存储明文密钥。修复 #58106。感谢 @ThalynLabs。 - 模型/list:在默认配置视图中包括显式配置的提供者行和只读认证支持的目录行,而不加载 PI 的完整注册表,使控制 UI 选择器与可用的模型认证对齐。参考 #79381。感谢 @ismael-81。 - 安全/审计:在报告小型模型 web/浏览器暴露时,尊重 `tools.byProvider["provider/model"].deny`,使每模型 OpenRouter 缓解措施清除 `models.small_params` 暴露信号。修复 #80118。 - 模型/Moonshot:接受直接的 `moonshotai/...` 和 `moonshot-ai/...` 引用作为规范 `moonshot/...` 的别名,使复制的 OpenRouter Kimi ID 不再作为未知的直接模型失败。修复 #73876。(#74946) 感谢 @jeffrey701。 - Kimi Code:在捆绑目录、引导和文档中使用 Kimi 稳定的 `kimi-for-coding` API 模型 ID,同时规范化旧版 `kimi-code` 和 `k2p5` 引用。修复 #79965。 - Telegram:将缓存的回复目标和附近的群组聊天渲染为一个选定的对话上下文窗口,使过时的回复不再将 JSON 回复链与本地聊天上下文分开。 - Volcengine/Kimi:为直接和编码计划模型剥离提供者不支持的工具模式长度和项目约束关键词,使托管的 Kimi 运行不会因 `minLength` 拒绝消息工具。修复 #38817。 - DeepSeek:为不拥有的兼容 OpenAI 的代理提供者回填 V4 `reasoning_content` 重放字段,防止捆绑的 DeepSeek 和 OpenRouter 路由之外的后续请求失败。修复 #79608。 - iMessage:当操作因 imsg 私有 API 桥未附加而被阻止时,发出 WARN 日志,使操作员在 `~/.openclaw/logs/openclaw.log` 中看到静默丢弃,而不必读取每会话轨迹 JSONL `tool.result` 负载。通常在网关重启后取消注入来自 Messages.app 的 dylib 时发生。(#80035) 感谢 @omarshahine。 - Codex:在模式验证之前交叉填充缺失的 `thread.id` 和 `thread.sessionId`,使省略 `sessionId` 的实时 Codex 应用服务器响应不再使 `thread/start` 或 `thread/resume` 失败。修复 #80124。(#80137) 感谢 @kagura-agent。 - 代理/Pi:等待嵌入的取消清理稳定后再释放会话写锁,防止后续轮次与之前的提示拆卸竞争。(#80239) 感谢 @samzong。 - WhatsApp:将 OpenClaw watchdog 触发的 Web 重新连接从运行时错误降级为恢复警告,并在下一次健康连接后清除已恢复的重新连接状态。(#77026) 感谢 @rubencu。 - ACPX/Windows:在 Windows 上隐藏 MCP 代理目标子进程窗口,使 ACP 支持的代理不会因终端窗口处理而闪烁或失败。修复 #60672。(#60678) 感谢 @KChow-ctrl。 - 代理:当相同的调用不断返回相同结果时,在临界阈值中止通用的重复无进度工具循环。(#80668) 感谢 @frankekn。 - 执行审批:在那些命令语言具有本机高亮支持之前,省略非 POSIX Windows 和 shell 包装器审批命令的生成命令高亮。(#80566) 感谢 @jesse-merhi。 - Telegram:保持详细的工具进度和结果草稿与最终助手答案分开,使工具输出不再混合到最终的 Telegram 消息中。(#80294) 感谢 @jalehman。 - 插件 SDK/Windows:为根 `openclaw/plugin-sdk` dist 别名启用本机 require 快速路径,而不是强制 Jiti 变换。(#80878) 感谢 @medns。