← 返回更新日志

OpenClaw v2026.5.4-beta.3 预发布

2026-05-05 · GitHub 原文
## 2026.5.4 ### 亮点 - **Google Meet/Voice Call**: 使 Twilio 拨入加入能够通过实时 Gemini 语音桥接进行通话,具备节奏化音频流、背压感知缓冲、抢断队列清除,以及在实时语音期间无 TwiML 回退功能,为 Meet 参与者提供响应更快的 OpenClaw 语音代理。 (#77064) 感谢 @scoootscooob。 ### 变更 - **Gateway/Windows**: 将默认回环网关监听器仅绑定到 Windows 上的 `127.0.0.1`,以防止 libuv 的双栈 `::1` 行为导致本地 HTTP 请求卡死。 (#69701, 修复 #69674) 感谢 @SARAMALI15792。 - **Plugins/migration**: 当 `plugins.entries` 或 `plugins.allow` 引用未安装的官方外部插件时,发出基于目录的安装提示,以便升级后的配置将操作员引导至 `openclaw plugins install <spec>`,而不是告知他们移除有效的插件配置。 (#77483) 感谢 @hclsys。 - **OpenAI/Codex media**: 在运行时和清单元数据中宣传 Codex 音频转录,并将活动的 Codex 聊天模型路由到 OpenAI 转录默认设置,而不是将聊天模型 ID 发送到音频转录。感谢 @vincentkoc。 - **Dependencies**: 更新运行时和提供商软件包,包括 Pi 0.73.0、ACPX 适配器、OpenAI、Anthropic、Slack 和 TypeScript 原生预览,同时保持 Bedrock 运行时安装程序覆盖在 Windows ARM Node 24 npm 解析器失败以下固定。感谢 @vincentkoc。 - **Agents/performance**: 将解析后的工作区传递通过 BTW、压缩、嵌入式运行模型生成和 PDF 模型设置,以便显式代理目录模型刷新可以复用当前工作区范围的插件元数据快照,而不是回退到冷插件元数据扫描。 (#77519, #77532) 感谢 @vincentkoc。 - **Plugins/performance**: 允许未范围的模型目录和清单合约读取器复用当前工作区兼容的插件元数据快照,在保持环境/配置/工作区兼容性检查的同时,避免热控制平面路径上重复的冷插件元数据扫描。 (#77519, #77532) 感谢 @vincentkoc。 - **Config/plugin auto-enable**: 在自动允许列出的已配置频道时,优先选择声明插件清单 ID 而不是内置频道别名,以便企业微信/元宝风格的别名解析为已安装的插件 ID。感谢 @Beandon13。 - **Secrets/apply**: 在清理提供商目标密钥时保留 auth-profile `keyRef` 和 `tokenRef` 字段,因此规范的 SecretRef 元数据在 `secrets apply` 后得以保留,而无需保留明文值。感谢 @Beandon13。 - **Plugins/active-memory**: 在解析回忆子代理的频道时跳过包含 `:` 的会话存储频道条目,因此 QQ 点对点代理 ID(例如 `c2c:10D4F7C2…`)和其他范围的对话 ID 不会到达捆绑插件的 `dirName` 验证并导致回忆运行崩溃。相同的保护已应用于显式 `channelId` 参数 (#76704);这将其扩展到了存储衍生的频道。 (#77396) 感谢 @hclsys。 - **Secrets/external channel contracts**: 在解析 `secret-contract-api` 边车时也查找 `<rootDir>/dist/`,因此 npm 发布的外部化频道插件(例如自 2026.5.2 起的 `@openclaw/discord`)其编译产物位于 `dist/` 下,实际将其频道 SecretRef 合约贡献给运行时快照。否则,环境支持的 `channels.discord.token` SecretRef 在 2026.5.3 的网关启动时静默解析失败,导致频道显示为“未配置”,即使 #76449 已落地通用外部合约加载器。感谢 @mogglemoss。 - **Models/auth**: 添加 `openclaw models auth list [--provider <id>] [--json]`,以便用户检查保存的每个代理身份验证配置文件,而无需转储密钥或进入旧的“参数过多”路径。感谢 @vincentkoc。 - **Control UI/header**: 在仪表板面包屑中显示活动代理名称,而不添加当前会话密钥,使非聊天视图保持定向而不拥挤顶栏。感谢 @BunsDev。 - **Control UI/cron**: 使“新建任务”侧边栏可折叠,以便任务列表可以回收空间,同时保持表单一键可达。感谢 @BunsDev。 - **Gateway/startup**: 将模型目录测试助手、运行会话查找代码、QR 配对助手和 TypeBox 内存工具架构构造移出热启动导入路径,减少默认网关基准插件加载和内存压力。感谢 @vincentkoc。 - **Control UI/performance**: 在支持的情况下,在调试事件日志中记录浏览器长动画帧或长任务条目,从而更容易从 UI 归因缓慢的仪表板渲染。感谢 @vincentkoc。 - **Slack/streaming**: 为 Block Kit 进度草稿添加 `streaming.progress.render: "rich"`,该草稿由结构化进度行数据支持。感谢 @vincentkoc。 - **Slack/streaming**: 当 Block Kit 限制修剪长进度草稿时,保留最新的富进度行。感谢 @vincentkoc。 - **Channels/streaming**: 默认限制进度草稿工具行,以便编辑的进度框避免长换行导致的跳动重排。感谢 @vincentkoc。 - **Agents/verbose**: 对 `/verbose` 和进度草稿默认使用紧凑的解释模式工具摘要,通过 `agents.defaults.toolProgressDetail: "raw"` 和每个代理覆盖来调试原始命令/详细输出。感谢 @vincentkoc。 - **Control UI/chat**: 向聊天会话选择器添加代理优先过滤器,在手机/平板/桌面宽度下保持聊天控件/组合器响应,保持桌面聊天控件在一行,避免初始聊天加载期间重复头像刷新,并在向下滚动记录时隐藏该行。感谢 @BunsDev。 - **Control UI/chat**: 将连续重复的文本消息折叠为一个带计数的气泡,以便无操作心跳确认保持紧凑而不隐藏附近上下文。感谢 @BunsDev。 - **Agents/subagents**: 当直接完成回退必须绕过请求代理宣布回合时,保留每个分组子结果。感谢 @vincentkoc。 - **TTS/telephony**: 在电话合成提供商中尊重提供商语音/模型覆盖,以便 Google Meet 代理语音日志与实际产生音频的后端匹配。感谢 @vincentkoc。 - **Voice Call/realtime**: 限制节奏化 Twilio 音频队列并在提供商音频在 websocket 背压保护器后面积累之前关闭过载的实时流。感谢 @vincentkoc。 - **Docs**: 澄清 IRC 在运营商管理的前向代理路由之外使用原始 TCP/TLS 套接字,因此在启用 IRC 之前应明确批准直接 IRC 出口。感谢 @jesse-merhi。 - **Gateway/performance**: 将非就绪边车推迟到就绪信号之后,避免热路径频道插件桶导入,并在 Gateway 启动期间快速路径信任捆绑插件元数据。感谢 @vincentkoc。 - **Gateway/performance**: 避免在原生可加载插件启动路径上导入 `jiti`,因此除非实际需要回退加载,否则编译捆绑插件表面无需支付源转换加载器成本。感谢 @vincentkoc。 - **Gateway/diagnostics**: 在 `pnpm gateway:watch` 中添加启动阶段跨度、活动工作标签、过时的终端桥接标记和默认同步 I/O 跟踪,以便从日志和稳定性诊断更容易归因缓慢的 Gateway 周转。感谢 @vincentkoc。 - **Plugins/loader**: 在原生快速路径上保留真实的编译插件模块求值错误,而不是将每个抛出的 `.js` 模块视为源转换回退未命中。感谢 @vincentkoc。 - **QA/Mantis**: 添加 `pnpm openclaw qa mantis slack-desktop-smoke` 在 Crabbox VNC 桌面内运行 Slack 实时 QA,打开 Slack Web,并捕获 Slack QA 工件旁边的桌面截图。感谢 @vincentkoc。 - **QA/Mantis**: 将运行时环境通过桌面浏览器 Crabbox 和工件复制子命令传递,以便嵌入式 Mantis 调用者可以提供 Crabbox 凭据,而无需修改父进程。感谢 @vincentkoc。 - **QA/Mantis**: 即使远程 Slack QA 失败也返回复制的 Slack 桌面截图路径,以便 CLI 仍打印失败截图工件。感谢 @vincentkoc。 - **QA/Mantis**: 从桌面冒烟预热接受 Blacksmith Testbox `tbx_...` 租用 ID,以便提供商覆盖在检查/运行之前不会失败。感谢 @vincentkoc。 - **QA/Codex harness**: 添加有针对性的实时 Docker/Testbox 诊断、身份验证预检检查、缓存挂载修复和应用服务器协议检出发现,以便维护者 harness 失败更容易重现。感谢 @vincentkoc。 - **Plugins/update**: 将官方外部化捆绑 npm 迁移和 ClawHub 到 npm 回退视为受信任的源链接安装,因此仅预发布的官方插件包可以从捆绑构建迁移而不会因被视为不安全的预发布解析而被拒绝。感谢 @vincentkoc。 - **Plugins/update**: 一旦 ClawHub 包可用,将 ClawHub 首选外部化插件安装移回 ClawHub,在之前的 npm 回退之后。感谢 @vincentkoc。 - **Plugins/update**: 清理已外部化固定 npm 和 ClawHub 插件安装的过时捆绑加载路径,以便发布频道同步不会在已安装的外部包之前留下已移除的捆绑路径。感谢 @vincentkoc。 - **Telegram**: 在代理消息工具中接受插件拥有的数字论坛主题目标,并在就地包更新期间将回复分发提供商块保留在稳定的运行时别名后面。修复 #77137。感谢 @richardmqq。 - **Google Meet**: 保留 `realtime.introMessage: ""`,以便实时 Chrome 加入保持静默,而不是恢复默认语音介绍。感谢 @vincentkoc。 - **Plugins/SDK**: 添加有界的 `before_agent_finalize` 重试指令,以便工作流插件可以请求另一个模型通道。感谢 @100yenadmin。 - **Discord/status**: 将降级的 Discord 传输和网关事件循环饥饿信号添加到 `openclaw channels status`、`openclaw status --deep` 和获取超时日志,以便间歇性套接字重置看起来不像健康运行的频道。 (#76327) 感谢 @joshavant。 - **Providers/OpenRouter**: 添加可选响应缓存参数,仅在验证的 OpenRouter 路由上发送 OpenRouter 的 `X-OpenRouter-Cache`、`X-OpenRouter-Cache-TTL` 和缓存清除标头。感谢 @vincentkoc。 - **Providers/OpenRouter**: 扩展应用归因类别,以便 OpenClaw 在验证的 OpenRouter 路由上宣传编码、编程、写作、聊天和个人代理使用情况。感谢 @vincentkoc。 - **Plugins/update**: 使包升级干净地交换 pnpm/npm-prefix 安装,保持遗留插件安装运行时块工作,并且在 beta 频道中,当插件 beta 版本缺失或安装验证失败时,将默认行 npm 插件回退到 default/latest。感谢 @vincentkoc 和 @joshavant。 - **Channels/WhatsApp**: 支持显式 WhatsApp 频道/通讯稿 `@newsletter` 出站消息目标,使用频道会话元数据而不是 DM 路由。修复 #13417;继承 #13424 的狭义出站目标思想。感谢 @vincentkoc 和 @agentz-manfred。 - **Exec approvals**: 添加基于 tree-sitter 的 shell 命令解释器,用于未来审批和命令审查界面。 (#75004) 感谢 @jesse-merhi。 - **Agents/sandbox**: 将沙盒容器和浏览器注册表条目存储为每个运行时分片文件,减少不相关的会话锁争用,同时 `openclaw doctor --fix` 迁移遗留单体注册表文件。 (#74831) 感谢 @luckylhb90。 - **Plugins/ClawHub**: 使用 `RateLimit-Reset`/`Retry-After` 中的重置窗口注释 ClawHub 的 429 错误,并在请求未认证时附加 `Sign in for higher rate limits.` 提示,以便用户可以看到下载何时恢复以及如何提升限制。感谢 @romneyda。 - **Plugins/runtime state**: 为原子键存储去重声明添加 `registerIfAbsent`,返回插件是否成功声明键而不覆盖现有实时值。感谢 @amknight。 - **Plugin SDK**: 添加插件拥有的 `SessionEntry` 槽投影和作用域信任策略会话扩展读取。 (#75609; 替换部分 #73384/#74483) 感谢 @100yenadmin。 - **Sandbox/Windows**: 接受驱动器绝对 Docker 绑定源,同时保持沙盒阻止路径和允许根策略比较 Windows 不区分大小写。 (#42174) 感谢 @6607changchun。 ### 修复 - **Plugins/install**: 通过请求浮动的 npm 和 ClawHub 规格并带有 `@beta` 来尊重引导和医生管理的插件安装的 beta 更新频道,同时将持久安装记录保留在目录默认值上。感谢 @vincentkoc。 - **WhatsApp/onboarding**: 将设置和配对允许列表条目规范化为 WhatsApp 的仅数字电话 ID,同时接受 E.164、JID 和 `whatsapp:` 输入,以便个人电话允许列表在设置后匹配 WhatsApp Web 发送者 ID。感谢 @vincentkoc。 - **Gateway/startup**: 加载拥有显式配置的图像、视频或音乐生成默认值的提供商插件,以便生成工具在网关重启后激活,而不是保持仅目录状态。修复 #77244。感谢 @buyuangtampan、@Nikoxx99 和 @vincentkoc。 - **Slack/subagents**: 当存在环境会话线程上下文时,在原始 Slack 线程中保留恢复的父 `message.send` 调用,并抑制来自后续发现的成功静默子完成行。感谢 @bek91。 - **Slack/mentions**: 记录成功可见线程 Slack 发送的线程参与,包括消息工具和媒体传递路径,以便未提及的机器人参与线程回复可以绕过提及门控,如文档所述。修复 #77648。感谢 @bek91。 - **Infra/Windows**: 在 `resolvePreferredOpenClawTmpDir` 中跳过 Windows 上的 POSIX `/tmp/openclaw` 首选路径,以便日志文件、TTS 临时文件和其他写入落在 `%TEMP%\openclaw-<uid>` 中,而不是 `C:\tmp\openclaw`。修复 #60713。感谢 @juan-flores077。 - **Media/Windows**: 在 fsync 之前以读/写方式打开保存的附件临时文件,以便 Windows WebChat 和 `chat.send` 媒体卸载不再在持久性刷新期间因 EPERM 而失败。 (#76593) 感谢 @qq230849622-a11y。 - **Agents/tools**: 在构建嵌入式运行器工具系列和捆绑 MCP/LSP 运行时时尊重狭义运行时工具允许列表,以便请求诸如 `update_plan`、`browser`、`x_search`、频道登录工具或 `group:plugins` 等工具的 cron/subagent 运行不再以缺失工具或不相关的引导工作开始。 (#77519, #77532) 感谢 @vincentkoc。 - **Codex plugin**: 镜像实验性上游应用服务器协议并在漂移检查之前格式化生成的 TypeScript,保持 OpenClaw 的 `experimentalApi` 桥接与最新 Codex 兼容,同时保留格式化程序门。感谢 @vincentkoc。 - **Telegram/media**: 从保存的 MIME 元数据而不是 Telegram `photo` 形状派生的无标题入站媒体占位符,因此非图像和混合附件不再以 `<media:image>` 形式到达模型。修复 #69793。感谢 @aspalagin。 - **Telegram/streaming**: 将活动预览重用作长文本最终块的第一块,因此多块回复不再创建瞬态额外气泡,出现然后消失。感谢 @vincentkoc。 - **Agents/cache**: 将每回合运行时上下文保留在普通聊天系统提示之外,同时交付隐藏的当前回合上下文,在聊天继续上恢复提示缓存重用。修复 #77431。感谢 @Udjin79。 - **Gateway/startup**: 在 `agent model` 启动日志行中包含解析的思考和快速模式默认值,默认未设置启动思考为 `medium` 而不混合推理可见性。感谢 @vincentkoc。 - **Gateway/update**: 在更新后重启验证期间从已安装配置解析本地网关探针身份验证,因此令牌/设备认证的 VPS 网关在包交换后不会因不健康的端口冲突而错误报告。感谢 @vincentkoc。 - **Agents/Tools**: 在 `pi-embedded-runner` 中添加自动压缩重试后的后压缩循环保护,并在代理发出相同的 `(tool, args, result)` 三元组 `windowSize` 次(默认 3)在该窗口内时,以 `compaction_loop_persisted` 中止运行。通过现有 `tools.loopDetection.enabled` 禁用;通过 `tools.loopDetection.postCompactionGuard.windowSize` 调整。针对上下文溢出 + 压缩未破坏工具调用循环的故障模式。引用 #77474;继承 #21597。感谢 @efpiva。 - **Gateway/watch**: 在 `pnpm gateway:watch --benchmark` 期间抑制同步 I/O 跟踪输出,除非明确请求,因此 CPU 配置文件不再用堆栈跟踪淹没终端。感谢 @vincentkoc。 - **Gateway/watch**: 当基准同步 I/O 跟踪明确启用时,将跟踪块输出到基准输出日志,并从终端面板过滤它们,同时保持正常 Gateway 日志可见。感谢 @vincentkoc。 - **Plugins/runtime-deps**: 在内存核心插件运行时依赖集中包含 `json5`,以便打包的 `memory_search` 沙盒可以解析生成解析 JSON5 配置的 OpenClaw 运行时块。修复 #77461。感谢 @vincentkoc。 - **Plugins/Windows**: 当 npm 插件安装失败并出现 `spawn git ENOENT` 时显示 Git 安装提示,并记录 WhatsApp 插件的 Git-on-PATH 要求用于 Baileys/libsignal 安装。感谢 @vincentkoc。 - **Codex harness**: 保留应用服务器使用限制重置详情并通过仅工具源回复模式传递 OpenClaw 拥有的运行时失败通知,因此 Telegram 和其他聊天频道告诉用户当 Codex 订阅限制或 API 失败阻止回合时,而不是保持静默。 (#77557) 感谢 @pashpashpash。 - **Agents/OpenAI**: 默认直接 OpenAI Responses 模型到 SSE 传输而不是 WebSocket 自动选择,防止 pi 运行时聊天回合在 WebSocket 路径停滞而 OpenAI HTTP 流工作时挂起。感谢 @vincentkoc。 - **Plugins/update**: 在跳过未更改的 npm 插件更新之前修复缺失的插件本地 `openclaw` 对等链接,因此当前外部 Codex 安装可以在 OTA 修复期间恢复 `openclaw/plugin-sdk/*` 解析。 (#77544) 感谢 @ProspectOre。 - **Discord/replies**: 将失败的最后回复传递视为失败回合,而不是将其计为已传递的自动可见回复,因此公会/频道回合不再在最终消息被丢弃时显示完成。修复 #77520。感谢 @Patrick-Erichsen。 - **Discord**: 为 Discord REST 和网关 WebSocket 启动路径优先选择 IPv4,因此仅 IPv4 网络在 Gateway READY 和入站消息调度之前不再停滞。修复 #77398;引用 #77526。感谢 @Beandon13。 - **Channels/plugins**: 通过频道 ID 而不是清单插件 ID 对捆绑包状态探针、env/config 存在和只读命令默认值进行键控,保留其包 ID 与频道别名不同的频道插件的设置和本机命令检测。感谢 @vincentkoc。 - **Docker**: 从运行时映像中修剪包排除插件 dist 目录,除非构建明确选择该插件加入,因此官方外部插件如飞书保持按需安装而不是运送部分元数据而没有编译运行时输出。修复 #77424。感谢 @vincentkoc。 - **Model switching**: 当 `/model ... --runtime ...` 目标被阻止的模型时,包括精确的附加允许列表修复命令,并使 Telegram 的模型选择器说明它仅更改会话模型而保持运行时不变。感谢 @vincentkoc。 - **Mattermost**: 澄清模型选择器仅更改会话模型,运行时切换需要 `/oc_model <provider/model> --runtime <runtime>`。感谢 @vincentkoc。 - **Doctor/config**: 当 `doctor --fix` 从配置中剥离过时密钥字段时保持活动 `auth.profiles` 元数据完整,修复遗留 `<provider>:default` API 密钥配置文件元数据,当模型回退或显式 `model@profile` 引用仍依赖它时。修复 #77400。感谢 @vincentkoc。 - **Doctor/plugins**: 在发布配置插件修复集中包括 `plugins.allow` 仅官方插件 ID,以便 `doctor --fix` 安装已配置但未加载的官方外部插件,而不是将它们作为过时允许条目移除。修复 #77155。感谢 @hclsys。 - **Doctor/sessions**: 当 `doctor --fix` 看到插件拥有的模型/运行时/身份验证/会话绑定在当前配置路由之外时,清除会话存储中的自动创建过时会话路由状态,同时保留显式用户模型选择供手动审查。引用 #68615。感谢 @vincentkoc。 - **CLI/update**: 禁用并跳过包更新插件同步失败的插件,因此损坏的 npm/ClawHub/git/marketplace 插件不能将成功的 OpenClaw 包更新转变为失败更新结果。感谢 @vincentkoc。 - **CLI/update**: 在包管理器更新期间使用绝对 POSIX npm 脚本 shell,因此受限 PATH 环境仍可在从 `--tag main` 更新时运行依赖生命周期脚本。修复 #77530。感谢 @PeterTremonti。 - **Diagnostics**: 将内部诊断事件总线授予官方安装的诊断导出器插件,因此 npm 安装的 `@openclaw/diagnostics-prometheus` 可以发出指标,而不将能力扩展到任意全局插件。修复 #76628。感谢 @RayWoo。 - **Browser**: 在现有会话截图之前执行严格的 SSRF 当前 URL 检查,匹配现有会话快照处理。感谢 @vincentkoc。 - **Active Memory**: 为回忆工作者提供有界最新消息搜索查询,以便频道/运行时元数据不会成为内存搜索字符串。修复 #65309。感谢 @joeykrug、@westley3601、@pimenov 和 @tasi333。 - **Gateway/chat**: 在排空相同会话后续回合之前清除活动回复运行保护,因此顺序 `chat.send` 调用不再每次交替触发 `ReplyRunAlreadyActiveError`。修复 #77485。感谢 @bws14email。 - **Agents/media**: 避免在流式回复文本在最终 `MEDIA:` 指令之前到达时发送两次生成的图像、视频和音乐附件。感谢 @vincentkoc。 - **CLI/sessions**: 默认将 `openclaw sessions` 输出限制为最新的 100 行,并添加 `--limit <n|all>` 加上 JSON 分页元数据,因此重复机器轮询大型会话存储不会扩展为无限制的每行丰富化/输出工作。修复 #77500。感谢 @Kaotic3。 - **Doctor/config**: 恢复遗留群聊配置迁移 `routing.allowFrom`、`routing.groupChat.*` 和 `channels.telegram.requireMention`,以便升级保持 WhatsApp、Telegram 和 iMessage 组提及门和历史设置,而不是使配置无效或静默阻止。感谢 @scoootscooob。 - **CLI/update**: 使包更新后续进程写入完成结果并明确退出,因此 Windows 打包升级在新包完成后期核心插件工作后不会挂起。感谢 @vincentkoc。 - **Release validation**: 除非明确配置 Slack 凭据,否则跳过 Slack 实时 QA,因此发布门可以在 Slack 仍本地和凭据门控时证明非 Slack 表面。感谢 @vincentkoc。 - **Plugins/update**: 将 OpenClaw CalVer 校正版本如 `2026.5.3-1` 视为满足基础插件 API 范围,因此校正构建可以安装需要基础运行时 API 的插件。修复 #77293。 (#77450) 感谢 @p3nchan。 - **Discord/Gateway startup**: 使用退避重试 Discord READY 等待,推迟启动 `sessions.list` 和本机批准就绪失败直到边车恢复,并在最终回复清理移除所有文本时保留仅组件 Discord 负载。 (#77478) 感谢 @NikolaFC。 - **CLI/launcher**: 将终止信号转发到编译缓存重生子进程,因此杀死包装进程不再让安全审计工作程序孤立。修复 #77458。感谢 @jaikharbanda。 - **Plugins/registry**: 当过时持久注册表可能在包管理器升级后隐藏它们时,从拥有的 npm 根目录恢复托管 npm 外部插件。修复 #77266。感谢 @p3nchan。 - **fix(gateway)**: 固定未绑定的 websocket 身份验证范围 [AI]。 (#77413) 感谢 @pgondhi987。 - **Gate zalouser startup name matching [AI]。(#77411)** 感谢 @pgondhi987。 - **Active Memory**: 向回忆工作者发送有界最新消息搜索查询,以便频道/运行时元数据不会成为内存搜索字符串。修复 #65309。感谢 @joeykrug、@westley3601、@pimenov 和 @tasi333。 - **fix(device-pair)**: 对配对命令要求配对范围 [AI]。(#76377) 感谢 @pgondhi987。 - **Providers/OpenRouter**: 保持 DeepSeek V4 `reasoning_effort` 在 OpenRouter 支持值上,将过时 `max` 思考覆盖映射到 `xhigh`,因此 `openrouter/deepseek/deepseek-v4-pro` 不再因 OpenRouter 无效努力 400 而失败。修复 #77350。 (#77423) 感谢 @krllagent、@mushuiyu886 和 @sallyom。 - **fix(qqbot)**: 保持私有命令在框架表面之外 [AI]。(#77212) 感谢 @pgondhi987。 - **Claude CLI**: 通过 CLI 后端接缝传递 Claude Code 的会话范围 `--effort` 标志来尊重非关闭 `/think` 级别,因此聊天桥接不再显示惰性思考控制。修复 #77303。感谢 @Petr1t。 - **Agents/subagents**: 刷新延迟的最后交付负载,当相同会话完成输出更改时,因此重试的父通知使用最终子摘要而不是过时进度文本。感谢 @vincentkoc。 - **Agents/media**: 将异步音乐和视频完成结果路由回请求代理,在需要消息工具时保留自动回复,同时仅用于消息工具仅组/频道传递。感谢 @vincentkoc。 - **active-memory**: 当没有内存插件(`memory-core` 或 `memory-lancedb`)加载时,优雅地跳过内存子代理而不是记录混淆的允许列表错误,因此没有内存后端的活动内存不再在网关日志中产生误导性的“没有可调用工具剩余”警告。修复 #77506。感谢 @hclsys。 - **Memory/wiki**: 在回填未使用结果容量的同时保留 `corpus=all` 搜索中两个语料库的表示,因此内存命中不会被数值更高的维基整数分数饿死。修复 #77337。感谢 @hclsys。 - **Docker/compose**: 在网关和 CLI 服务上固定容器侧 `OPENCLAW_CONFIG_DIR` 和 `OPENCLAW_WORKSPACE_DIR`,以便 `scripts/docker/setup.sh` 写入 `.env` 的主机路径(用作 Compose 绑定挂载源)不能通过 `env_file` 导入泄漏到运行时代码。修复 macOS Docker 设置上的回归,其中第一个代理回复因 `EACCES: permission denied, mkdir '/Users'` 而死亡,因为主机风格工作区路径被持久化到 `agents.defaults.workspace`。修复 #77436。感谢 @lonexreb。 - **Telegram**: 在助手消息边界之后清理仅工具草稿预览,因此当没有匹配的最终预览到达时,瞬态 `Surfacing...` 工具状态气泡不会 lingering。感谢 @BunsDev。 - **Slack**: 在套接字模式启动重试日志中报告 `unknown error` 而不是 `undefined`,并明确标记重试原因。感谢 @vincentkoc。 - **Telegram**: 让显式论坛主题 `requireMention` 设置覆盖持久化的 `/activate` 和 `/deactivate` 状态,因此每个主题提及门一致工作。修复 #49864。感谢 @Panniantong。 - **Cron**: 在请求工具不可用时在 `cron show`、状态和运行历史中显示失败的隔离运行诊断,因此阻塞的 cron 运行报告实际的工具策略失败而不是误导性的绿色结果。修复 #75763。感谢 @RyanSandoval。 - **TUI/escape abort**: 在 `chat.send` 解析后跟踪飞行中 runId,以便在第一个网关事件之前的间隙按 Esc 中止运行,而不是重复打印 `no active run`。修复 #1296。感谢 @Lukavyi 和 @romneyda。 - **TUI/render**: 停止长令牌消毒器在行内代码跨度、围栏代码块、表边框和裸连字符/点标识符内注入文字空格,因此复制的包名、实体 ID 和 shell 行延续保持字节对字节完整,同时窄终端保护仍然块不可识别的长散文标记。修复 #48432、#39505。感谢 @DocOellerson、@xeusoc、@CCcassiusdjs、@akramcodez、@brokemac79、@romneyda。 - **Plugin skills**: 通过生成的插件技能目录(`~/.openclaw/plugin-skills/`)发布插件声明的技能,同时保持直接提示加载完整,因此代理基于文件的发现路径找到插件技能 `SKILL.md` 文件并且非活动插件链接被清理。修复 #77296。 (#77328) 感谢 @zhangguiping-xydt。 - **Gateway/status**: 将 Linux 托管网关服务标记为 `systemd user`,使状态输出明确关于用户服务范围而不是暗示系统级单元。感谢 @vincentkoc。 - **Plugins/install**: 当重新安装切换源时移除先前的托管插件目录,因此过时 ClawHub 和 npm 副本在安装获胜后不再在发现中保留重复插件 ID。感谢 @vincentkoc。 - **Plugins/install**: 允许官方插件重新安装恢复修复仅源的已安装运行时阴影,因此 `openclaw plugins install npm:@openclaw/discord --force` 可以替换坏包而不是在过时配置验证处停止。感谢 @vincentkoc。 - **CLI/update**: 阶段 pnpm 检测的 npm 布局全局包更新通过干净的 npm 前缀交换,保持插件安装运行时导入在稳定别名后面,并将遗留安装运行时别名 shipped 回 `2026.3.22`,防止过时覆盖块破坏插件更新后同步。感谢 @vincentkoc。 - **Plugins/commands**: 允许官方 ClawHub Codex 插件包保留保留的 `/codex` 命令所有权,匹配现有 npm 管理的 Codex 包行为。感谢 @vincentkoc。 - **Auth/OpenAI Codex**: 重写无效的每个代理 Codex 身份验证顺序和会话配置文件覆盖向健康的重新登录配置文件,因此撤销的 OAuth 帐户在再次登录后不会保持固定。感谢 @BunsDev。 - **Plugins/commands**: 将 QQBot 框架斜杠命令范围限定到 QQBot 频道,因此 `/bot-*` 命令处理程序和本机规范不会泄漏到不相关的聊天表面。感谢 @vincentkoc。 - **fix**: 强化后端消息操作网关路由 [AI]。(#76374) 感谢 @pgondhi987。 - **Gate QQBot streaming command auth [AI]。(#76375)** 感谢 @pgondhi987。 - **Plugins/discovery**: 忽略仅暴露 TypeScript 源条目而没有编译运行时输出的托管 npm 插件包,因此过时/损坏的安装不能在设置期间隐藏工作的捆绑或可重新安装的频道插件。感谢 @vincentkoc。 - **CLI/update**: 将 OpenClaw 稳定校正版本如 `2026.5.3-1` 视为比其基础稳定版本更新,因此包更新不再要求降级确认。感谢 @vincentkoc。 - **Plugins/install**: 对受信任的官方 OpenClaw npm 安装抑制危险模式扫描器警告,因此安装 `@openclaw/discord` 不再为官方包打印凭证 harvesting 警告。感谢 @vincentkoc。 - **Plugins/commands**: 对来自所有者门控 `/plugins install` 命令的受信任目录 npm 安装抑制危险模式扫描器警告,因此聊天驱动安装匹配 CLI 安装信任路径。感谢 @vincentkoc。 - **Plugins/release**: 使发布的 npm 运行时验证器拒绝空白 `openclaw.runtimeExtensions` 条目而不是将它们视为不存在并通过推断输出传递。感谢 @vincentkoc。 - **Plugins/security**: 在插件安装扫描中匹配源规则上下文时忽略行内和块注释,因此仅注释的 `fetch`/`post` 引用靠近环境默认值不会阻止干净插件。感谢 @vincentkoc。 - **Doctor/plugins**: 在 `doctor --fix` 期间移除捆绑插件的过时托管安装记录,即使捆绑插件未明确配置,因此医生清理不能留下孤立的安装元数据。感谢 @vincentkoc。 - **Web fetch**: 通过选定的获取提供商范围提供商回退缓存条目,因此配置重新加载不能重用另一个提供商的缓存回退负载。感谢 @vincentkoc。 - **Web search**: 在工具执行期间尊重延迟绑定的 `tools.web.search.enabled: false`,因此配置重新加载不能留下已创建的 `web_search` 工具可运行。感谢 @vincentkoc。 - **Plugins/packages**: 拒绝存在但失败包边界检查的推断内置运行时条目,而不是回退到已安装包的 TypeScript 源。感谢 @vincentkoc。 - **Plugins/loader**: 在原生评估已到达缺失依赖后,不通过源转换器重试原生加载的 JavaScript 插件模块,避免重复顶级副作用。感谢 @vincentkoc。 - **Plugins/packages**: 拒绝空白 `openclaw.runtimeExtensions` 条目而不是静默忽略它们并回退到推断的 TypeScript 运行时条目。感谢 @vincentkoc。 - **Doctor/plugins**: 从托管包锁以及 `package.json` 和 `node_modules` 中移除过时托管 npm 插件阴影条目,因此未来 npm 操作不保持引用修复的捆绑插件阴影。感谢 @vincentkoc。 - **Plugins/runtime state**: 当命名空间驱逐在同一毫秒内运行现有条目时保持正在注册的键,因此 `register` 和 `registerIfAbsent` 在驱逐自己的新鲜值时报告成功。感谢 @vincentkoc。 - **Plugins/providers**: 使捆绑提供商发现默认对新配置尊重限制性 `plugins.allow`,同时医生将遗留限制性允许列表配置迁移到 `plugins.bundledDiscovery: "compat"` 以保留升级行为。感谢 @dougbtv。 - **Control UI/Talk**: 使失败的 Talk 启动错误可解除,并在解除时清除过时 Talk 错误状态,因此缺失实时语音提供商配置不会留下永久聊天横幅。修复 #77071。感谢 @ijoshdavis。 - **Control UI/Talk**: 在解除运行时错误横幅时停止和清除失败的实时 Talk 会话,因此下一个 Talk 点击启动新会话而不是仅停止过时的那个。感谢 @vincentkoc。 - **Control UI/Talk**: 在下一个 Talk 点击时从失败的实时 Talk 会话重试,而不是首先需要单独的过时会话停止点击。感谢 @vincentkoc。 - **Canvas host**: 在浏览器画布主机 URL 和启动挂载日志中保留 Gateway TLS 方案,因此直接 HTTPS 网关不宣传不安全的画布链接。感谢 @vincentkoc。 - **WhatsApp/login**: 通过注入的运行时将登录成功和失败消息路由,因此设置/引导表面捕获所有登录输出,而不仅仅是 QR。感谢 @vincentkoc。 - **Google Chat**: 为每个身份验证客户端创建隔离的 Google 身份验证传输,因此 google-auth-library 拦截器变异不会在 webhook 验证和访问令牌客户端之间累积。感谢 @vincentkoc。 - **Doctor/plugins**: 在 `doctor --fix` 期间移除捆绑 `@openclaw/*` 插件的孤立或恢复托管 npm 副本,因此过时包清单不能遮蔽当前捆绑插件配置模式。感谢 @vincentkoc。 - **Control UI/performance**: 限制共享事件日志中的长任务和长动画帧诊断,因此缓慢渲染遥测不会从 Debug 和 Overview 视图中逐出网关/插件事件。感谢 @vincentkoc。 - **Gateway/startup**: 仅在 HTTP 服务器绑定后记录画布主机挂载,因此启动日志不再在画布主机可以服务请求之前报告它已挂载。感谢 @vincentkoc。 - **Control UI/i18n**: 用配置的分钟计数渲染 Sessions 活动过滤器工具提示在每个区域设置中,并使 i18n 检查拒绝占位符漂移。感谢 @BunsDev。 - **Web fetch**: 从活动运行时快照延迟绑定 `web_fetch` 配置和提供商回退元数据,匹配 `web_search` 以便长寿命工具不使用过时的获取提供商设置。感谢 @vincentkoc。 - **Discord**: 当异步机器人探测抛出时清除过时启动探测机器人/应用程序状态,而不仅仅当它返回降级的探测结果时。感谢 @vincentkoc。 - **Web search**: 通过清单所有权范围显式捆绑 `web_search` 提供商运行时加载,因此选择 DuckDuckGo/Gemini 等不导入不相关的捆绑提供商或记录其可选依赖失败。感谢 @vincentkoc。 - **Plugins/discovery**: 将已安装 `origin: "global"` 插件包的仅源 TypeScript 运行时检查从配置阻塞错误降级为警告,并让运行时通过 jiti 回退到 TypeScript 源,因此单个损坏的已安装包不再阻止 `plugins install` 用于不相关插件;新安装仅源包的安装时拒绝不变。感谢 @romneyda。 - **Providers/OpenAI Codex**: 在显示手动重定向粘贴提示之前停止 OAuth 进度旋转器,因此回调超时不会在终端中垃圾邮件 `Browser callback did not finish`。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 在更改绑定、权限、模型覆盖、活动回合或反馈上传之前,对 malformed `/codex` 控制命令和诊断确认失败关闭。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 在将 Codex 应用服务器命令读out、失败回复、批准提示、 elicitation 提示和 `request_user_input` 文本发布回聊天之前清理它们。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 保留本地绑定回合图像路径,拒绝过时相同线程回合通知,强制执行仅选项用户输入提示,并将失败的动态工具结果作为不成功的工具调用返回给 Codex。感谢 @vincentkoc。 - **Providers/DeepSeek**: 通过轻量级提供商策略表面公开 DeepSeek V4 `xhigh` 和 `max` 思考级别,因此控制 UI `/think` 选择器在运行时插件注册表不活动时保持显示最大推理选项。修复 #77139。感谢 @bittoby。 - **Release/beta smoke**: 当 `gh workflow run` 返回无运行 URL 时从 `gh run list` 解析调度的 Telegram beta E2E 运行,因此维护者助手在调度后不立即失败。感谢 @vincentkoc。 - **Media/images**: 当可选 Sharp 转换不可用时,保持 HEIC/HEIF 附件失败关闭,而不是发送仍需要转换的原始文件。感谢 @vincentkoc。 - **Google Meet**: 将调用者的当前代理记录分叉到代理模式会议顾问会话,因此 Meet 回复继承工具调用加入会议的上下文。感谢 @vincentkoc。 - **iOS/mobile pairing**: 在 QR/设置代码签发之前拒绝非回环 `ws://` 设置 URL,并让 iOS Gateway 设置屏幕扫描 QR 码或粘贴完整设置代码消息。感谢 @BunsDev。 - **Control UI**: 在窄和平板宽度下保持 Gateway Access 输入和区域选择器在卡片内。感谢 @BunsDev。 - **Agents/trajectory**: 限制运行时轨迹捕获和产出排队边车写入,以便过大轨迹停止记录而不是垄断 Gateway 清理。修复 #77124。感谢 @loyur。 - **Telegram/streaming**: 在共享压缩之前清理工具进度草稿预览反引号,因此长反引号沉重进度文本仍然渲染在安全代码格式化预览内而不是折叠为省略号。感谢 @vincentkoc。 - **UI/chat**: 从聊天队列文本规则中移除不支持的 `line-clamp` 声明,在不改变可见截断行为的情况下消除 Firefox 控制台噪音。感谢 @ZanderH-code。 - **Control UI**: 通过宣布会话切换、闪烁活动会话选择器、显示行内 Save/Apply/Update 进度以及区分过滤空会话列表与真正空会话存储,为重复操作添加明确反馈。感谢 @BunsDev。 - **Agents/Pi**: 为合成中回合溢出继续提示抑制持久性,因此转录重试恢复不将“从转录继续”提示写入新用户回合。感谢 @vincentkoc。 - **Agents/tools**: 在消息工具发送之前从可见富呈现标题、块、按钮和选择标签中剥离推理文本,因此结构化频道负载不能泄漏隐藏规划。感谢 @vincentkoc。 - **Telegram**: 将回复分发延迟提供商运行时块保留在稳定的 dist 名称后面,并在最终交付后删除 `/reasoning stream` 预览,因此包更新和实时推理草稿不离开 Telegram 回合损坏或嘈杂。感谢 @BunsDev。 - **Discord**: 启动网关监视器而不等待启动机器人/应用程序探测,因此 WSL2 主机具有慢 `/users/@me` REST 路径仍在线频道,而状态丰富化异步完成。修复 #77103。感谢 @Suited78。 - **Exec approvals**: 当 `-S`/`-s` 与其他 env 短选项组合时检测 `env -S` 分割字符串命令载体风险,因此批准解释不错过隐藏在 `env -iS...` 后面的分割负载。感谢 @vincentkoc。 - **Google Meet**: 记录语音合成后具体的代理模式 TTS 提供商、模型、语音、输出格式和采样率,因此 Meet 日志显示哪个语音后端说了每个回复。感谢 @vincentkoc。 - **Voice Call**: 当实时提供商正常关闭时标记实时呼叫完成,因此 Twilio/OpenAI/Google 实时停止事件不留下活动呼叫记录。感谢 @vincentkoc。 - **Gateway/update**: 将关闭路径保留在稳定的运行时块后面,并为最近 `server-close-*` 哈希 shipped 兼容别名,因此手动 npm 包替换不能使已经在运行的 Gateway 无法干净关闭。修复 #77087。感谢 @westlife219。 - **Control UI/media**: 为助手媒体获取铸造短期作用域票证并渲染持票 URL 而不是在聊天图像 URL 中暴露长期身份验证令牌。修复 #70830 和 #77097。感谢 @hclsys。 - **Exec approvals**: 将 POSIX `exec` 视为行内 eval、shell 包装器和 eval/source 检测的命令载体,因此 `/approve` shell 执行和行内解释器负载仍被阻止在该 env 形式后面。感谢 @vincentkoc。 - **Google Meet**: 记录启动 Chrome 和配对节点 Meet 回叫桥时解析的音频提供商模型,因此代理模式加入显示 STT 模型和双向加入显示实时语音模型。感谢 @vincentkoc。 - **Diagnostics**: 在 cron 恢复上下文中处理缺失的会话尾部文件而不触发扩展测试类型检查。感谢 @vincentkoc。 - **QA/Slack**: 更新 Slack 调度预览回退测试 SDK 模拟用于结构化进度草稿助手,因此富进度草稿回归套件覆盖新导入而不是在断言运行前失败。感谢 @vincentkoc。 - **Release validation**: 允许聚焦 QA 实时重运行选择 Matrix 和 Telegram 而不运行 Slack,因此已知 Slack 凭据池中断不阻止非 Slack 实时证明。感谢 @vincentkoc。 - **Plugins/loader**: 将捆绑插件包 `test-api.js` 别名保留在私有 QA 模式后面,因此源转换在正常插件加载期间不暴露仅测试公共表面。感谢 @vincentkoc。 - **Gateway/startup**: 启动 cron 并在就绪后记录内存跟踪,即使延迟维护定时器在就绪后失败,因此非致命定时器设置问题不静默离开计划作业空闲。感谢 @vincentkoc。 - **Exec approvals**: 在批准命令和严格行内 eval 检查之前展开 BSD/macOS `env -P <path>` 载体命令,因此 `/approve` shell 执行和行内解释器负载仍被阻止在该 env 形式后面。感谢 @vincentkoc。 - **Agents/session status**: 在 `session_status({ sessionKey: "current" })` 在活动运行会话上保持语义,甚至在该运行没有持久化会话存储条目之前,而不是回退到沙盒策略键。感谢 @vincentkoc。 - **QA/Slack**: 在源模式 QA 运行期间解析捆绑官方插件公共表面包别名,因此发布 Slack 实时验证可以加载 `@openclaw/slack/api.js` 而不需要工作区符号链接。感谢 @vincentkoc。 - **Codex**: 当沙盒策略使用单独的会话密钥时,将实时运行会话密钥传递到应用服务器动态工具,因此 `session_status({ sessionKey: "current" })` 报告活动运行而不是沙盒策略键。感谢 @vincentkoc。 - **Web search**: 当活动运行时元数据或活动插件注册表不完整时,保持一流助手 `web_search` 自动检测和配置的运行时提供商可见。修复 #77073。感谢 @joeykrug。 - **Plugins/tools**: 将清单可选同级工具标记为可选,即使它们来自共享非可选工厂,因此缓存/状态/MCP 元数据保持 opt-in 工具策略准确。感谢 @vincentkoc。 - **Matrix**: 将 `streaming.progress.toolProgress` 范围限定到进度草稿模式,因此部分和安静 Matrix 预览不丢失工具进度,除非 `streaming.preview.toolProgress` 被禁用。感谢 @vincentkoc。 - **Gateway/validation**: 隔离网关服务器验证文件,在请求跟踪覆盖中忽略不相关的启动日志,并在卡住的共享身份验证套接字上快速失败,减少贡献者错误的主分支 CI 失败。感谢 @amknight。 - **Channels/streaming**: 将 `streaming.progress.toolProgress` 范围限定到进度草稿模式,因此禁用紧凑进度行不静默部分/块预览工具更新。感谢 @vincentkoc。 - **Plugins/update**: 将 OpenClaw 稳定校正版本如 `2026.5.3-1` 视为 npm 安装、插件更新和捆绑版本比较的稳定版本,因此 `latest` 可以推进官方插件而不需要预发布选择。感谢 @vincentkoc。 - **Control UI**: 将 Appearance tweakcn 浏览操作和文档指向实时 tweakcn 编辑器路由而不是删除的 `/themes` 页面。修复 #77048。 - **Control UI**: 通过消毒 markdown 管道渲染 Dream Diary 散文,因此日记粗体/斜体/标题 markdown 不再显示为字面源文本。修复 #62413。 - **Control UI**: 渲染输出作为文本块数组到达的工具结果,并给扩展工具输出可滚动块,因此 read/exec 输出在 WebChat 中保持可见。修复 #77054。 - **MCP**: 在主要文本内容中包括序列化对话/消息负载用于 `conversations_list` 和 `messages_read`,同时为 capable 客户端保留 `structuredContent`。修复 #77024。 - **Media**: 在 post-write 媒体 fsync 步骤中将 `EPERM` 视为尽力而为,允许 WebChat 和频道上传在拒绝 fsync 的 Windows 文件系统上成功写入后完成。修复 #76844。 - **Media/Telegram**: 当可选图像优化不可用时发送在限制内的原始图像,因此 Telegram MEDIA 回复和消息工具图像发送不失败,仅仅因为 `sharp` 缺失。修复 #77081。 (#77117) 感谢 @pfrederiksen。 - **Diagnostics**: 在 cron 恢复上下文中包括最后进度、cron 作业/运行 ID、停止的 cron 作业名称和最后助手记录片段在停滞会话和卡住会话恢复日志中,以便 cron 停滞显示什么被停止。感谢 @vincentkoc。 - **Streaming channels**: 添加 `streaming.preview.commandText: "status"` / `streaming.progress.commandText: "status"` 在预览进度行中隐藏命令/exec 文本,同时保持释放的原始命令文本默认。修复 #77072。 - **Agents/cron**: 让显式 cron `timeoutSeconds` 驱动 CLI 无输出和嵌入式 LLM 空闲看门狗而不是被恢复默认限制。修复 #76289。 - **Plugins/catalog**: 为外部频道插件抑制缺失 `channelConfigs` 兼容性诊断,这些插件被禁用、拒绝或在限制性允许列表之外。修复 #76095。 - **Diagnostics**: 保持 webhook/消息 OTEL 属性和 Prometheus 传递标签低基数并从跨度省略原始聊天/消息 ID,因此进度草稿和消息工具模式不泄漏高基数消息标识符。感谢 @vincentkoc。 - **Google Meet**: 停止向代理和配置 UI 宣传遗留 `mode: "realtime"`,同时保持它作为 `mode: "agent"` 的隐藏兼容别名,因此新加入使用 STT -> OpenClaw 代理 -> TTS 路径而不是选择直接实时语音回退。感谢 @vincentkoc。 - **Google Meet**: 为生成命令对 SoX 音频命令添加 `chrome.audioBufferBytes` 并将 SoX 的 8192 字节默认缓冲区降低到 4096 字节以减少 Chrome 回叫延迟。感谢 @vincentkoc。 - **Google Meet**: 将实时提供商配置拆分为代理模式转录和双向模式语音提供商,并使用 `doctor --fix` 迁移遗留 Gemini Live 双向配置,因此 Gemini Live 可以支持直接双向回退而不破坏默认 OpenClaw 代理回叫路径。感谢 @vincentkoc。 - **Google Meet**: 在加入介绍就绪期间保持等待 Meet 麦克风取消静音,而不是当 Meet 短暂报告本地麦克风静音时永久跳过回叫。感谢 @vincentkoc。 - **Google Meet**: 在插件清单模式和设置提示中公开 `voiceCall.postDtmfSpeechDelayMs`,因此基于清单的配置编辑接受运行时支持的 Twilio 延迟键。感谢 @vincentkoc。 - **Google Meet**: 当 `realtime.transcriptionProvider` 未设置时,保持显式非 Google `realtime.provider` 值作为转录提供商兼容回退。感谢 @vincentkoc。 - **Google Meet**: 使 Twilio 设置状态需要启用的 `voice-call` 插件条目而不是将缺失条目视为就绪。感谢 @vincentkoc。 - **Telegram**: 在回复交付中渲染共享交互式回复按钮,因此插件批准消息显示内联键盘。 (#76238) 感谢 @keshavbotagent。 - **Cron/sessions**: 保持没有磁盘记录的 cron 元数据行不可恢复,直到记录存在,因此医生和 `sessions cleanup --fix-missing` 不再报告或修剪预记录 cron 行作为损坏会话。引用 #77011。感谢 @vincentkoc。 - **OpenAI Codex**: 当过时 `/codex bind` 边车在重启后存活时重新创建缺失的绑定应用服务器线程,在重试入站回合之前保留选择的身份验证配置文件和回合覆盖。 (#76936) 感谢 @keshavbotagent。 - **Agents/cli-runner**: 在准备时丢弃保存的 `claude-cli` 恢复 sessionId,当其磁盘记录不再存在于 `~/.claude/projects/` 中时,因此来自半安装 `update.run` 的过时绑定不能将后续运行(自动回复/Telegram 直接)困在 `claude --resume` 超时循环中;运行重新开始,新 sessionId 通过现有后运行流程写回。 (#77030; 引用 #77011) 感谢 @openperf。 - **Release validation**: 通过 Windows 安全 Node/npm 模拟安装跨操作系统 TypeScript harness,因此原生 Windows 包检查到达 OpenClaw 冒烟套件而不是在工件捕获之前退出。感谢 @vincentkoc。 - **Release validation**: 让 Windows 打包升级检查在 shipped 2026.5.2 更新程序命中其原生模块交换清理回退后继续,通过包元数据和下游冒烟验证回退安装的候选,而不是在立即更新状态探针上崩溃。感谢 @vincentkoc。 - **Doctor/plugins**: 当另一个配置插件是同一频道的有效所有者时,跳过频道衍生的官方插件安装,因此 `doctor --repair` 不重新安装 `feishu` 而 `openclaw-lark` 处理 `channels.feishu`。修复 #76623。感谢 @fuyizheng3120。 - **Gateway/sessions**: 记忆重复思考选项丰富化并在列出会话时跳过未使用成本回退检查,减少大型多代理存储上的每行工作。修复 #76931。 - **Gateway/sessions**: 绑定默认 `sessions.list` RPC 响应并报告截断元数据,防止 Slack 重度长期存储强制无界 Gateway 行构造。修复 #77062。 - **Agents/tools**: 对插件工具注册和实时运行时配置获取器使用仅配置运行时快照,避免核心插件工具准备路径上昂贵的完整密钥快照克隆。修复 #76295。 - **Agents/tools**: 在构建嵌入式运行器工具系列和捆绑 MCP/LSP 运行时时尊重有效工具拒绝列表,因此 `tools.deny: ["pdf"]` 在后期策略过滤之前跳过 PDF 设置。修复 #76997。 - **MCP/plugin tools**: 在通过独立 MCP 桥接公开插件工具时应用全局 `tools.profile`、`tools.alsoAllow` 和 `tools.deny` 策略,因此 ACP 客户端看不到策略隐藏的插件工具或错过 opt-in 可选工具。感谢 @vincentkoc。 - **Plugin tools**: 在选择插件工具运行时尊重显式工具拒绝列表,因此被拒绝的插件工具在直接命令或网关表面之前不物化,用于后期策略过滤。感谢 @vincentkoc。 - **Plugin tools**: 通过清单每工具可选策略过滤工厂返回的工具,因此来自共享运行时工厂的可选同级工具保持隐藏,除非明确允许。感谢 @vincentkoc。 - **Agents/transcripts**: 仅在实际入站用户回合持久化后从当前记录重试上下文溢出压缩,并保持 WebChat 代理运行实时交付不写入重复 Pi 管理的助手回合。修复 #76424。 (#77033) 感谢 @vincentkoc。 - **Agents/bootstrap**: 将挂起的 `BOOTSTRAP.md` 和压缩截断通知保留在系统提示项目上下文中,而不是将设置文本或原始警告诊断复制到 WebChat 用户/运行时上下文。修复 #76946。感谢 @vincentkoc。 - **Gateway/install**: 在 macOS LaunchAgent 环境文件中保留 `.env` 管理值,同时仍跟踪 `OPENCLAW_SERVICE_MANAGED_ENV_KEYS`,因此重新生成的服务不会在没有管理身份验证/提供商密钥的情况下启动。修复 #75374。感谢 @vincentkoc。 - **Gateway/restart**: 当 `lsof` 仅报告 Node 进程名称时通过 argv 验证监听器 PID,因此过时网关清理可以找到 macOS `cnode` 监听器。修复 #70664。感谢 @vincentkoc。 - **Gateway/logging**: 在创建文件记录器之前扩展 `logging.file` 中的前导 `~`,防止主目录相对日志路径的启动崩溃循环。修复 #73587。感谢 @vincentkoc。 - **Channels/CLI**: 当提供商使用获取失败时保持 `openclaw channels list --json` 可用,并报告每个提供商使用错误而不中止频道列表。引用 #67595。感谢 @vincentkoc。 - **Doctor/plugins**: 在缺失插件修复期间不将 `plugins.allow` 条目视为配置插件,因此限制性允许列表不再安装允许但未使用的插件。感谢 @vincentkoc。 - **Agents/messaging**: 在相同目标 `message` 工具发送后传递不同的最终评论,同时仍然去重文本/媒体已由工具发送,因此简短结束语不再被静默丢弃。修复 #76915。感谢 @hclsys。 - **Agents/messaging**: 在匹配消息工具回复去重路由时保留字符串线程 ID,避免数字外观主题 ID 在频道插件比较之前的精度损失。感谢 @vincentkoc。 - **Channels/streaming**: 在 Slack、Discord、Telegram、Matrix 和 Microsoft Teams 进度草稿中尊重 `agents.defaults.toolProgressDetail: "raw"`,因此工具启动行包括原始命令/详细输出在调试时。感谢 @vincentkoc。 - **Channels/streaming**: 从压缩原始进度草稿行中剥离不匹配的行内代码反引号,避免长命令细节缩短后 stray markdown 标记。感谢 @vincentkoc。 - **Discord/Slack/Mattermost**: 使草稿预览工具进度配置帮助与运行时行为对齐,当 `streaming.preview.toolProgress` 为 false 时隐藏中间工具更新。感谢 @vincentkoc。 - **Feishu**: 对流式卡片工具状态行使用共享频道进度格式化程序,包括原始命令/详细输出和消息工具过滤。感谢 @vincentkoc。 - **Mattermost**: 对工具状态预览使用共享进度草稿格式化程序,包括当 `agents.defaults.toolProgressDetail: "raw"` 启用时的原始命令/详细输出。感谢 @vincentkoc。 - **Mattermost**: 在草稿预览活动时抑制独立默认工具进度消息,包括当草稿工具行被禁用时。感谢 @vincentkoc。 - **Telegram**: 通过发送共享回退按钮标签文本与内联键盘一起,交付仅按钮交互式回复,而不是将回复作为空丢弃。感谢 @vincentkoc。 - **OpenAI Codex**: 在没有显式身份验证配置文件启动应用服务器客户端时尊重 `auth.order.openai-codex`,因此状态/模型探针和隐式启动使用配置的 Codex 帐户而不是回退到默认配置文件。感谢 @vincentkoc。 - **OpenAI Codex**: 让 SSRF 守卫提供商请求继承 OpenClaw 的 undici IPv4/IPv6 回退策略,因此 ChatGPT 支持的 Codex 运行在 DNS 仍返回不可达 IPv6 地址时在 IPv4 工作主机上恢复。修复 #76857。感谢 @jplavoiemtl 和 @SymbolStar。 - **Plugin updates**: 当默认/最新规格仍解析到安装程序应用稳定回退应替换的已安装预发布时,不将受信任的官方 npm 更新短路为未更改。感谢 @vincentkoc。 - **Plugin updates**: 清理仅遗留安装记录仅保存解析包名的已外部化 npm 安装的过时捆绑加载路径。感谢 @vincentkoc。 - **Plugin tools**: 即使另一个默认工具来自同一插件可用且 `tools.alsoAllow` 命名可选工具,也保持身份验证不可用可选工具隐藏。感谢 @vincentkoc。 - **Realtime transcription**: 在提供商就绪之前报告套接字关闭为关闭前就绪失败,而不是将它们标记为 OpenAI、xAI 和 Deepgram 流式转录的连接超时。感谢 @vincentkoc。 - **OpenAI/Google Meet**: 当套接字在 `session.updated` 之前关闭时失败实时语音连接尝试,避免卡住的 Meet 加入等待从未就绪的桥接。感谢 @vincentkoc。 - **Google Meet**: 在抑制实时回声记录时避免将重复参与者单词视为多个助手重叠匹配。感谢 @vincentkoc。 - **Google Meet**: 使 `mode: "agent"` 成为默认 Chrome 回叫路径,使用实时转录输入和常规 OpenClaw TTS 语音输出,同时保持直接实时语音答案可用作为 `mode: "bidi"` 并接受 `mode: "realtime"` 作为代理模式兼容别名。感谢 @vincentkoc。 - **Codex harness**: 保持 `codex_app_server.*` 遥测发布由 harness 拥有而不是从核心运行程序重新发布相同回调事件。感谢 @vincentkoc。 - **Slack/Discord**: 当部分预览流式传输具有 `streaming.preview.toolProgress: false` 时抑制独立工具进度 chatter,匹配文档安静预览行为。感谢 @vincentkoc。 - **Matrix**: 在发布选项反应之前绑定本机批准反应目标,因此线程提示上的快速批准反应在批准处理程序完成设置时不会丢弃。感谢 @vincentkoc。 - **Google Meet**: 使实时回叫代理驱动默认带有 `realtime.strategy: "agent"`,保持先前直接双向模型行为可用作为 `realtime.strategy: "bidi"`,将 Meet 选项卡扬声器输出路由到 `BlackHole 2ch` 自动用于本地 Chrome 实时加入,在咨询代理之前合并附近语音记录片段,并避免从服务器 VAD 或过时播放管道错误切断代理语音。感谢 @vincentkoc。 - **Google Meet**: 抑制来自实时输入路径的排队助手播放和类助手记录回声,因此会议不将代理自己的语音作为新用户回合听到并循环或切断自己。感谢 @vincentkoc。 - **Google Meet**: 保持 Chrome 实时传输测试在 Linux 预发布分片上密封,同时保留仅 macOS 运行时保护。感谢 @vincentkoc。 - **QA/Matrix**: 让实时工具进度预览和错误检查验证进度替换事件,而不依赖于预览说 `Working`、`tool: read`、无标签/无路径 `read from` 或观察到的原始草稿根。感谢 @vincentkoc。 - **QA/Matrix**: 保持 target=both 批准场景专注于频道和 DM 元数据传递,通过两个 Matrix 事件观察后通过网关解决接受的批准。感谢 @vincentkoc。 - **QA/Matrix**: 在启动线程批准决策超时之前等待实时批准反应回显。感谢 @vincentkoc。 - **QA/Matrix**: 在确认批准反应回显时重用启动驱动同步流,避免实时发布运行中的遗漏自反应。感谢 @vincentkoc。 - **Channels/WhatsApp**: 在入站调度期间应用共享组/频道可见回复模式,因此组回复默认保持仅消息工具,而不覆盖直接聊天 harness 默认值。引用 #75178 和 #67394。感谢 @scoootscooob。 - **Plugins/Codex**: 为 `/codex bind` 应用服务器回合保留 Codex 原生 OAuth 路由,因此绑定会话保持选择的 Codex 身份验证配置文件而不是回退到公共 OpenAI 凭据。 (#76714) 感谢 @keshavbotagent。 - **Telegram**: 保持状态检查指向活动聊天,因此询问当前会话不再报告旧直接消息对话。 (#76708) 感谢 @amknight。 - **Gateway/install**: 在重新生成托管网关服务时优先支持系统 Node 而不是 nvm/fnm/volta/asdf/mise,因此 `gateway install --force` 不再重新创建医生立即标记为版本管理器支持的配置。修复 #76339。感谢 @brokemac79 和 @BunsDev。 - **Google Chat**: 在 google-auth-library 读取缓存控制之前规范化 Google 身份验证证书响应标头,因此入站 webhook 身份验证不再拒绝 `res?.headers.get is not a function`。修复 #76880。感谢 @donbowman。 - **WhatsApp**: 通过活动运行时将登录成功和失败消息路由用于初始和重启套接字,因此 `openclaw channels login --channel whatsapp` 不会丢失 QR 在直接 stdout 写入后面。修复 #76213。感谢 @dougvk。 - **Proxy/debugging**: 在托管代理模式活动期间禁用调试代理直接上游转发用于代理请求和 CONNECT 隧道,除非 `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` 为批准的本地诊断明确设置。感谢 @jesse-merhi 和 @mjamiv。 - **Direct APNs**: 通过活动托管代理路由直接 HTTP/2 传递,带有编辑的代理诊断,因此推送请求尊重配置的出口控制和 `openclaw proxy validate --apns-reachable` 可以在部署前证明 APNs 通过代理可达。 (#74905) 感谢 @jesse-merhi。 - **Agents/subagents**: 检测仅前缀完成宣布回复并在捕获子结果可用时回退,因此请求聊天不再静默丢失长子代理报告大部分。修复 #76412。感谢 @inxaos 和 @davemorin。 - **TUI**: 用普通用户面向副本替换过时响应看门狗通知,因此停滞回复不再表面后端或流式内部。 (#77120) 感谢 @davemorin。 - **Security/Windows**: 通过 Windows 安装根验证器验证 `SystemRoot`/`WINDIR` env 值,并在解析 `icacls.exe`/`whoami.exe` 用于 `openclaw security audit` 时将它们添加到危险主机 env 策略,因此工作区 `.env` 覆盖和裸命令名称不能将 Windows ACL 助手重定向到攻击者控制的二进制文件。 (#74458) 感谢 @mmaps。 - **Security/Windows**: 将 Windows 注册表探针 `reg.exe` 解析固定到 Windows 安装根在安装根探测中的规范 Windows 安装根,因此 `SystemRoot`/`WINDIR` env 覆盖不能在 Windows 主机检测期间重定向注册表查询。 (#74454) 感谢 @mmaps。 - **QQBot**: 在将框架命令上下文转换为引擎斜杠命令上下文时保留框架命令授权决定,因此下游斜杠处理程序看到 `commandAuthorized` 匹配频道的解析 `isAuthorizedSender` 而不是硬编码 `true`。 (#77453) 感谢 @drobison00。 - **Security/Windows**: 阻止 `LOCALAPPDATA` 来自工作区 `.env` 并从受信任的进程本地 `LOCALAPPDATA` 解析 Windows 更新流便携 Git 路径前置,因此工作区提供的值不能在 `openclaw update` 期间重定向 `git` 发现。 (#77470) 感谢 @drobison00。 - **Browser/SSRF**: 在现有会话截图之前执行现有标签页 URL 导航策略,在已选标签页上收集标签页范围调试、导出和读路由(控制台、页面错误、网络请求、跟踪开始/停止、响应体、截图、快照、存储等),因此阻止的标签页返回策略错误而不是首先被读取并在响应时间编辑。 (#75731) 感谢 @eleqtrizit。 - **Security/Windows**: 将 `.cmd`/`.bat` 进程包装器路由通过共享 Windows 安装根解析器而不是 `process.env.ComSpec`,因此工作区 dotenv 阻塞的 `SystemRoot`/`WINDIR` 覆盖和不安全值如 UNC 路径或路径列表不能重定向 Windows 上的 `cmd.exe` 选择。 (#77472) 感谢 @drobison00。 - **Agents/bootstrap**: 当 `agent:bootstrap` 钩子注入 `BOOTSTRAP.md` 内容时在决定引导是否挂起时尊重它,因此钩子提供的所需设置说明包含在系统提示中。 (#77501) 感谢 @ificator。