← 返回更新日志

OpenClaw v2026.4.24

2026-04-25 · GitHub 原文
## 2026.4.24 ### 亮点 - Google Meet 作为内置参与者插件加入 OpenClaw,支持个人 Google 认证、Chrome/Twilio 实时会话、配对节点 Chrome 支持、工件/出席记录导出,以及针对已打开 Meet 标签页的恢复工具。 - DeepSeek V4 Flash 和 V4 Pro 已加入内置目录,V4 Flash 设为入门默认模型,并修复了 DeepSeek 思考/重放行为在后续工具调用轮次中的问题。 - Talk、语音通话和 Google Meet 现支持实时语音循环,可调用完整的 OpenClaw 智能体以获取更深度的工具支持回答。 - 浏览器自动化新增坐标点击、更长的默认操作预算、按配置文件覆盖无头模式,以及更稳定的标签页复用与恢复机制。 - 插件与模型基础设施启动更轻量:采用静态模型目录、清单支持的模型行、延迟加载的提供者依赖,以及打包安装的外部运行时依赖修复。 ### 重大变更 - 插件 SDK/工具结果转换:移除仅适用于 Pi 的 `api.registerEmbeddedExtensionFactory(...)` 兼容路径。内置工具结果重写必须使用 `api.registerAgentToolResultMiddleware(...)`,并通过 `contracts.agentToolResultMiddleware` 声明目标运行环境,以确保转换在 Pi 和 Codex 应用服务器动态工具中一致运行。感谢 @vincentkoc。 ### 更新 - 控制界面/Talk:新增由 OpenAI Realtime 支持的浏览器 WebRTC 实时语音会话,包含 Gateway 生成的临时客户端密钥,以及移交至完整 OpenClaw 智能体的 `openclaw_agent_consult` 功能。 - 插件/Google Meet:新增内置参与者插件,支持个人 Google 认证、显式会议 URL 加入、Chrome 和 Twilio 实时传输、配对节点 `chrome-node` 支持(用于 Parallels 风格的 Chrome/BlackHole/SoX 主机),以及实时语音会话内的完整智能体咨询。(#70765) - 插件/Google Meet:新增会议记录、录音、转录文本、智能笔记和参与者会话的工件与出席工作流,包括 markdown/文件输出、最新记录查询以及 `--all-conference-records` 历史记录扫描。 - 插件/Google Meet:新增 OAuth 和浏览器状态诊断/恢复流程,包括 `googlemeet doctor --oauth` 以及 `recover_current_tab`/`recover-tab`,使智能体能够检查已打开的 Meet 标签页而无需重复打开。 - 插件/语音通话:公开共享的 `openclaw_agent_consult` 实时工具,使实时电话呼叫能够向完整 OpenClaw 智能体提问以获取更深度的工具支持回答。 - 插件/语音通话:新增 `voicecall setup` 和默认以试运行模式执行的 `voicecall smoke` 命令,以便在实际拨号测试前检查 Twilio/提供者就绪状态。 - 提供者/Google:新增用于后端语音通话和 Google Meet 音频桥接的 Gemini Live 实时语音提供者,支持双向音频和函数调用。 - 提供者/Google:允许 Gemini TTS 在提示词前追加配置的 `audioProfile` 和 `speakerName` 文本,以实现可复用的语音风格控制。感谢 @tdack。 - 网关/VoiceClaw:新增由 Gemini Live 支持的实时大脑 WebSocket 端点,包含所有者认证门控和异步 OpenClaw 工具移交。(#70938) 感谢 @yagudaev。 - 控制界面:优化智能体工具访问面板,新增紧凑的实时工具芯片、可折叠的工具组、直接的单工具开关,以及更清晰的运行时/来源溯源信息。(#71405) 感谢 @BunsDev。 - 控制界面/聊天:为排队消息新增“引导”操作,以便将浏览器后续步骤注入当前运行中,而无需重新输入。 - 浏览器:为托管和现有会话自动化新增视口坐标点击功能,并增加 CLI 使用的 `openclaw browser click-coords` 命令。(#54452) 感谢 @dluttz。 - 浏览器:新增 `browser.actionTimeoutMs` 配置项,默认操作预算设为 60 秒,以确保正常的长时间浏览器等待不会在客户端传输边界处失败。(#62589) 感谢 @andyylin。 - 浏览器/配置:支持针对本地启动浏览器配置文件的 `browser.profiles.<name>.headless` 覆盖设置,使单个配置文件可独立运行无头模式,而无需强制所有浏览器配置文件均为无头模式。感谢 @nakamotoliu。 - Matrix:要求完整的交叉签名身份信任以进行自设备验证,并新增 `openclaw matrix verify self` 命令,使操作员能够从 CLI 建立该信任。(#70401) 感谢 @gumadeiras。 - Gradium:新增内置文本转语音提供者,支持语音备忘录和电话输出。(#64958) 感谢 @LaurentMazare。 - 内存核心/混合搜索:在混合内存搜索结果中,除综合 `score` 外,还暴露原始 `vectorScore` 和 `textScore`,以便调用者在应用时间衰减或 MMR 重排序前检查向量与文本检索的贡献度。修复 #68166。(#68286) 感谢 @ajfonthemove。 - 依赖/内存:默认不再安装 `node-llama-cpp`;本地嵌入现在仅在操作员安装可选运行时包时加载它。感谢 @vincentkoc。 - 提供者/DeepSeek:将 DeepSeek V4 Flash 和 V4 Pro 加入内置目录,并将 V4 Flash 设为入门默认模型。感谢 @lsdsjy。 - 依赖/Pi:将内置 Pi 包更新至 `0.70.2`,使用 Pi 上游的 `gpt-5.5` 和 DeepSeek V4 目录元数据,并仅保留本地 `gpt-5.5-pro` 的前向兼容处理。感谢 @lsdsjy。 - 模型/CLI:通过为内置提供者使用安全静态目录、缩小行来源编排范围,以及减少默认 `openclaw models list` 的广泛注册表枚举,加快模型列表加载速度。(#70632, #70883, #70867) 感谢 @shakkernerd。 - 模型/命令:弃用 `/models add`,使聊天尝试时返回弃用提示而非写入模型配置,并从 `/models` 提供者菜单中移除添加操作。(#71175) 感谢 @Takhoffman。 - 模型/目录:新增基于清单的模型行、重复提供者/模型冲突报告,以及共享的 `src/model-catalog` 标准化处理,供提供者索引、缓存、入门流程和列表消费者使用,且无需加载提供者运行时。(#71368, #71360) 感谢 @shakkernerd。 - Codex 工具链/上下文引擎:在 Codex 应用服务器会话中运行上下文引擎的引导、组装、回合后维护及引擎专属压缩,同时保持原生 Codex 线程状态和压缩过程可审计。(#70809) 感谢 @jalehman。 - Codex 运行时计划:整合契约优先的 Pi/Codex 功能对等覆盖范围,并在应用服务器配置文件的登录和刷新路径中接受旧的 Codex 身份验证提供程序别名。(#71096) 感谢 @100yenadmin。 - Codex 工具链:将 Codex 原生工具钩子桥接到 OpenClaw 插件钩子和审批流程中,采用有界中继负载并防止审批垃圾信息。(#71008) 感谢 @pashpashpash。 - 插件 SDK/Codex 工具链:添加由提供程序控制的传输/身份验证/后续处理接口及工具链结果分类,使 Codex 风格的运行时能够参与回退策略,而无需核心代码进行特殊处理。(#70772) 感谢 @100yenadmin。 - 网关/节点:新增默认禁用的 `gateway.nodes.pairing.autoApproveCidrs` 配置,用于从明确信任的 CIDR 进行首次节点配对,同时保持操作员/浏览器配对及所有升级流程为手动。修复 #60800。感谢 @sahilsatralkar。 - WebChat/会话:将仅运行时使用的提示词上下文排除在可见的对话记录历史之外,并从会话历史界面中清理旧的包装器。感谢 @91wan。 - 智能体/引导:新增 `agents.defaults.contextInjection: "never"` 配置,以禁用对完全自主管理提示词生命周期的智能体的工作区引导文件注入。(#65006) 感谢 @xDarkicex。 - 插件/清单:新增 `modelCatalog` 契约,用于管理提供程序专属的模型行、别名、屏蔽规则及发现模式元数据,且无需加载插件运行时。(#71342) 感谢 @shakkernerd。 - 插件/设置:将显式的 `setup.requiresRuntime: false` 视为仅描述符的设置契约,同时在旧版 setup-api 回退路径中保留省略的值。感谢 @vincentkoc。 - 插件/设置:当 setup-api 注册信息与 `setup.providers` 或 `setup.cliBackends` 不一致时,报告描述符/运行时差异,但不拒绝旧版设置插件。感谢 @vincentkoc。 - 插件/设置:在通用提供程序身份验证/环境变量查找中包含 `setup.providers[].envVars`,并警告仍依赖已弃用的 `providerAuthEnvVars` 兼容性元数据的非内置插件。感谢 @vincentkoc。 - 插件/设置:在回退到设置运行时之前,从描述符安全的 `setup.providers[].authMethods` 派生通用提供程序设置选项。感谢 @vincentkoc。 - 插件/设置:在提供程序设置流程中直接展示清单中的提供程序身份验证选项,然后再回退到设置运行时或安装目录选项。感谢 @vincentkoc。 - 插件/设置:当仅描述符设置插件仍附带被忽略的设置运行时条目时发出警告,在保持 `setup.requiresRuntime: false` 语义明确的同时不破坏现有元数据。感谢 @vincentkoc。 - 插件/频道:当无可用设置条目或设置描述符声明无需运行时,使用清单中的 `channelConfigs` 进行只读外部频道发现。感谢 @vincentkoc。 - 插件钩子:在消息钩子上下文和运行生命周期事件中暴露一等公民的 run、message、sender、session 和 trace 关联字段。感谢 @vincentkoc。 - 插件/PDF:将本地 PDF 提取功能移至内置的 `document-extract` 插件中,使核心代码不再依赖 `pdfjs-dist` 或 PDF 图像渲染依赖。感谢 @vincentkoc。 - 提供程序/Anthropic Vertex:将 Vertex SDK 运行时移至内置提供程序插件之后,使核心代码不再持有该提供程序专属依赖。感谢 @vincentkoc。 - 插件/激活:暴露激活计划原因及更丰富的计划 API,使调用方能够检查插件被选中的原因,同时保留现有的 ID 列表激活行为。(#70943) 感谢 @vincentkoc。 - 插件/源元数据:在提供程序和频道目录中暴露标准化的安装源事实,以便在运行时加载前,引导流程能够解释 npm 锁定、完整性状态和本地可用性。(#70951) 感谢 @vincentkoc。 - 插件/目录:将官方外部企业微信频道源锁定到确切的 npm 版本及分发完整性校验,并设置防护机制确保官方外部源保持完整性锁定。(#70997) 感谢 @vincentkoc。 - 插件/源元数据:当 `openclaw.install.defaultChoice` 无效或指向缺失的源时发出警告,在保持目录诊断明确的同时不破坏现有插件。感谢 @vincentkoc。 - 插件/源元数据:当存在 `openclaw.install.expectedIntegrity` 但缺乏有效 npm 源时发出警告,在保持孤立完整性元数据可见的同时不拒绝现有插件。感谢 @vincentkoc。 - 插件/源元数据:当提供程序或频道目录的包标识与 `openclaw.install.npmSpec` 发生偏离时发出警告,在保持诊断可见的同时不拒绝兼容的外部目录。感谢 @vincentkoc。 - 插件/Bonjour:将局域网网关发现广播功能移至默认启用的内置插件中,并独立依赖 `@homebridge/ciao`,使用户可以禁用 Bonjour 而不影响广域网发现。感谢 @vincentkoc。 - 插件/兼容性:新增中央插件兼容性注册表及文档,记录 SDK/配置/设置/运行时的弃用情况,包括旧版工具链命名及其他面向插件别名的带日期迁移元数据。感谢 @vincentkoc。 - TUI/依赖:从 OpenClaw TUI 代码块渲染器中移除对 `cli-highlight` 的直接引用,在保留主题代码高亮的同时消除额外的根依赖。感谢 @vincentkoc。 - 依赖/SBOM:新增基于所有权归属的依赖风险报告,涵盖根依赖闭包大小、原生/构建风险包及缺失的所有者记录。感谢 @vincentkoc。 - 诊断/OTEL:将运行、模型调用和工具执行诊断生命周期事件导出为 OTEL span,且不保留实时 span 状态。感谢 @vincentkoc。 - 诊断/OTEL:接受可选的 `diagnostics.otel.captureContent` 控制项,用于未来的模型/工具内容 span 属性,同时默认禁用原始内容导出。感谢 @vincentkoc。 - 诊断/OTEL:添加轻量级诊断追踪上下文载体,用于未来的跨度关联,且无需向核心添加 OTEL SDK 状态。感谢 @vincentkoc。 - 诊断/OTEL:将诊断追踪上下文附加到导出的 OTEL 日志中,使日志记录能够与未来的跨度关联,且无需添加保留的进程状态。感谢 @vincentkoc。 - 诊断/OTEL:通过代理和工具钩子上下文传递不可变的单次运行诊断追踪上下文,并从验证后的上下文生成父级导出诊断跨度,且不保留全局追踪状态。感谢 @vincentkoc。 - 诊断/OTEL:使导出器启动具备重启安全性,确保配置重载不会保留过时的 SDK、日志传输通道或诊断事件监听器。感谢 @vincentkoc。 - 诊断/OTEL:生成有界执行进程诊断信息,并将其导出为 `openclaw.exec` 跨度,且不暴露命令文本、工作目录或容器标识符。(#70424) 感谢 @jlapenna。 - 诊断/OTEL:支持 `OPENCLAW_OTEL_PRELOADED=1`,使插件能够复用已注册的 OpenTelemetry SDK,同时保持 OpenClaw 诊断监听器连接。(#70424) 感谢 @jlapenna。 - 诊断:生成包含追踪上下文、时间戳和脱敏错误元数据的结构化工具执行诊断事件。感谢 @vincentkoc。 - 诊断:生成包含追踪上下文、持续时间和非消息错误元数据的结构化运行与模型调用诊断事件。感谢 @vincentkoc。 - CLI/网关:通过跳过只读状态路径上的插件加载,加快 `gateway status` 的启动速度。(#71364) 感谢 @andyylin。 ### 修复 - 打包安装:当捆绑插件运行时镜像回退到复制共享块时,保留包根运行时依赖及其导出的子路径,修复 Windows 上 npm 更新可能无法加载复制的 `dist` 模块的问题。 - 心跳:通过共享安全定时器助手限制过大的调度延迟,防止超过 Node 超时上限的 `every` 值导致 1 毫秒崩溃循环。修复 #71414。(#71478) 感谢 @hclsys。 - 代理/心跳:停止在非心跳运行中注入心跳系统提示词,防止普通用户回复被错误抑制为 `HEARTBEAT_OK` 确认。修复 #69079。(#69278) 感谢 @stainlu。 - MCP:在运行结束时停用一次性嵌入式捆绑 MCP 运行时,当运行时工具白名单无法访问捆绑 MCP 工具时跳过 bundle-MCP 启动,并为泄漏的会话运行时添加 `mcp.sessionIdleTtlMs` 空闲驱逐机制。修复 #71106、#71110、#70389 和 #70808。 - 网关/重启延续:在删除重启哨兵前,将重启延续任务可靠地移交至会话交付队列,在崩溃重启后恢复队列中的延续工作,当无通道路由在重启后存活时回退至仅会话唤醒。(#70780) 感谢 @fuller-stack-dev。 - 代理/工具结果修剪:针对由 void 或未定义工具处理程序结果创建的格式错误的 `{ type: "text" }` 块,加固工具结果字符估算器和上下文修剪循环,对非字符串文本负载进行序列化以进行大小核算,防止其作为零大小绕过修剪。修复 #34979。(#51267) 感谢 @cgdusek。 - 守护进程/服务环境:在 macOS 和 Linux 上生成的网关服务 PATH 中添加 Nix Home Manager 配置文件的 bin 目录,遵循 `NIX_PROFILES` 从右到左的优先级,未设置时回退至 `~/.nix-profile/bin`。修复 #44402。(#59935) 感谢 @jerome-benoit。 - 飞书:在 HTTP 400 启动失败后回退流式卡片创建,使不支持的卡片设置能够回退而不会延迟每条消息。修复 #56981。感谢 @JinnanDuan。 - 飞书/主题组:按 `thread_id` 对原生飞书/Lark 主题组会话进行键控,使具有不同 `root_id` 格式的初始消息和回复保持在同一个 `group_topic` 对话中。修复 #71438。感谢 @1335848090。 - 飞书:当空闲状态在最终负载到达前关闭流式卡片时,抑制重复的最终卡片投递。(#68491) 感谢 @MoerAI。 - Signal:保留发送方附件的文件名,并从文件名解析缺失的 MIME 类型,使 Linux 上缺少 `contentType` 的 `signal-cli` 语音笔记仍能进入音频转录。修复 #48614。感谢 @mindfury。 - Telegram/代理:在通过消息工具已提交回复后,抑制虚假的“代理无法生成响应”回退提示。(#70623) 感谢 @chinar-amrutkar。 - 模型/CLI:在 `openclaw models list` 中于原生 `contextWindow` 旁显示提供商运行时 `contextTokens`,并使 `openai-codex/gpt-5.5` 与 Codex 的 272K 运行时上限及 400K 原生窗口对齐。修复 #71403。 - 仪表板/安全:避免将分词化的 Control UI URL 或 SSH 提示写入运行时日志,防止网关 bearer 片段出现在可通过 `logs.tail` 读取的控制台捕获日志中。(#70029) 感谢 @Ziy1-Tan。 - 提供商/OpenRouter:将 DeepSeek 引用视为符合缓存 TTL 条件,而不注入 Anthropic 缓存控制标记,使上下文修剪与 OpenRouter 管理的提示词缓存保持一致。(#51983) 感谢 @QuinnH496。 - 控制 UI/浏览器:推迟临时目录访问模式常量的初始化,直至仅 Node 环境的临时目录解析逻辑运行,防止在 `node:fs` 常量被存根时浏览器捆绑包崩溃。(#48930) 感谢 @Valentinws。 - Discord/定时任务:仅从规范化的最终助手文本中投递一次纯文本隔离的定时任务和心跳公告输出,避免在流式块负载与最终答案包含相同内容时产生重复的 Discord 帖子。修复 #71406。感谢 @alexgross21。 - macOS 网关:在启动修复回退前等待 launchd 重新加载已退出的网关 LaunchAgent,防止配置触发的重启导致服务未加载。修复 #45178。感谢 @vincentkoc。 - macOS 网关:在重启回退期间容忍 launchctl bootstrap 的已加载退出状态,并在 bootstrap 后使用非终止型 kickstart,避免可能导致 LaunchAgent 卸载的第二次竞态条件。修复 #41934。感谢 @zerone0x。 - macOS 网关:在重启回退引导前重写过期的 LaunchAgent plist 文件,使其在 `gateway restart` 需要重新注册 launchd 时的行为与安装修复保持一致。感谢 @maybegeeker。 - TTS/钩子:保留 `message_sending` 和 `message_sent` 钩子中的纯音频 TTS 转录文本,而不将其渲染为媒体标题。感谢 @zqchris。 - WhatsApp/TTS:在共享媒体负载发送和 WhatsApp 出站适配器中保留 `audioAsVoice`,使 `[[audio_as_voice]]` 回复负载在通过 `sendPayload` 路由时保持语音消息意图。修复 #66053。感谢 @masatohoshino。 - 控制界面/WebChat:在可见聊天记录中隐藏心跳提示、`HEARTBEAT_OK` 确认以及仅内部使用的运行时上下文对话轮次,同时保持底层转录文本完整。修复 #71381。感谢 @gerald1950ggg-ai。 - 控制界面/聊天:当最终历史记录刷新短暂返回旧快照时,保持乐观的用户和助手尾部消息可见,防止消息卡片在下次刷新前闪烁消失。修复 #71371。感谢 @WolvenRA。 - Talk/TTS:在发现提供商列表之前,从当前运行时注册表中解析配置的扩展语音提供商,使 Talk 模式不再将有效的插件语音提供商拒为不支持。 - 会话/子智能体:阻止过期的已结束运行和仅存储的子节点反向链接在 `childSessions` 中重新出现,同时保持活跃后代和最近结束的子节点可见。修复 #57920。 - 子智能体:在可恢复的等待传输故障后恢复子会话,且不暴露额外的等待状态,并保持终端生命周期计时器顺序确定性。(#71423) 感谢 @ZiPengWei。 - 子智能体:阻止过期的未结束运行永远被计为活跃或待处理,同时保留可恢复子会话的重启中止恢复。修复 #71252。感谢 @hclsys。 - 网关/工具:当不存在核心实现时,允许 `POST /tools/invoke` 访问由插件支持的目录工具(如 `browser`),同时仍优先为真实核心名称使用内置工具。感谢 @chat2way。 - 浏览器/安全:`browser.request` 网关方法需具备 `operator.admin` 权限,以匹配该路由暴露的主机/浏览器节点控制权限。感谢 @RichardCao。 - 浏览器/配置文件:允许本地托管配置文件覆盖 `browser.executablePath`,使不同配置文件可启动不同的 Chromium 内核浏览器。感谢 @nobrainer-tech。 - 智能体/重放:在严格提供商重放前修复错位或缺失的工具结果,对 OpenAI Responses 历史使用兼容 Codex 的 `aborted` 输出,并在重试前丢弃部分中止/错误传输轮次。 - 浏览器/启动:对每个配置文件去重并发延迟启动调用,使同时的浏览器工具请求不再竞态导致重复启动 Chrome 和 `PortInUseError`。(#61772) 感谢 @sukhdeepjohar。 - 浏览器/配置文件:通过清除死锁/外部锁并重试启动一次,从崩溃或主机迁移后的过期 Chromium `Singleton*` 配置文件锁中恢复。感谢 @seanc-dev。 - 浏览器/现有会话:保持 Chrome MCP 状态探测仅通过传输层且为临时性,并重试一次过期的缓存 Playwright 附加操作,使空闲配置文件检查不再污染下一次真实附加。(#57245) 感谢 @josephbergvinson。 - 定时任务/执行:仅对 `delivery.mode="none"` 的静默定时任务抑制自动后台执行完成唤醒,同时保持 webhook 和公告运行可观测。(#71391) 感谢 @goldmar。 - 回复媒体:允许沙盒回复传递 OpenClaw 管理的 `media/outbound` 和 `media/tool-*` 附件,而不将其视为沙盒逃逸,同时保留对托管媒体根目录的别名逃逸检查。修复 #71138。感谢 @mayor686、@truffle-dev 和 @neeravmakwana。 - CLI/智能体:通过将网关、插件和嵌入式回退诊断信息在执行开始前路由至 stderr,保留 `openclaw agent --json` 的 stdout 专用于 JSON 响应。修复 #71319。 - 智能体/Gemini:对仅推理、空和仅规划的 Gemini 轮次进行重试,而不是让会话无声卡死。修复 #71074。(#71362) 感谢 @neeravmakwana。 - 提供商/DeepSeek:启用 DeepSeek V4 思考模式时,为重放的助手工具调用轮次添加缺失的 `reasoning_content` 占位符,使将现有会话切换至 `deepseek-v4-flash` 或 `deepseek-v4-pro` 不再触发提供商的 400 重放检查。修复 #71372。感谢 @yangyang1719。 - 执行审批:允许纯命令名白名单模式匹配 PATH 解析后的可执行文件基名,而不信任 `./tool` 或绝对路径选择的二进制文件。修复 #71315。感谢 @chen-zhang-cs-code 和 @dengluozhang。 - 配置/恢复:当无效性仅限于 `plugins.entries.*` 时,跳过整个文件的“最后已知良好”回滚,在插件模式或主机版本不匹配期间保留无关的用户设置。修复 #71289。感谢 @jalehman。 - 智能体/工具:防止已解析的回复运行配置被过期的运行时快照覆盖,并让空的 Web 运行时元数据回退至配置的提供商自动检测,使标准轮次和排队轮次暴露相同的工具集。修复 #71355。感谢 @c-g14。 - 智能体/TTS:将解析后的共享配置传入 `tts` 工具,使工具触发的语音使用配置的提供商和音色,而不是回退到重新加载配置。 - 回复媒体:当相同媒体已通过块流发送时,从最终回复中剥离 `MEDIA:` 附件,防止重复的 Telegram 语音笔记和文件。修复 #65468。感谢 @aurora-openclaw。 - 智能体/TTS:当工具生成的回复与精确的 `NO_REPLY` 哨兵配对时,保留语音媒体,剥离哨兵文本而不是丢弃音频负载。修复 #66092。 - 压缩:手动 `/compact` 时尊重显式的 `agents.defaults.compaction.keepRecentTokens`,重新提炼安全摘要以避免对已有摘要进行滚雪球式累积,并默认启用安全摘要质量检查。修复 #71357。感谢 @WhiteGiverMa。 - 会话:在加载时维护期间遵循配置的 `session.maintenance` 设置,而不是回退到默认的条目上限。修复 #71356。感谢 @comolago。 - 浏览器/沙箱:将解析后的 `browser.ssrfPolicy` 传入沙箱浏览器桥接,并在有效策略变更时刷新缓存的桥接,使沙箱浏览器导航遵循私有网络加入选项。修复 #45153 和 #57055。感谢 @jzakirov、@zuoanCo 和 @kybrcore。 - 浏览器/代理:防止 Gateway/提供商代理环境变量代理 OpenClaw 管理的浏览器,使 `HTTP_PROXY` 和 `HTTPS_PROXY` 不再阻塞普通浏览器导航。修复 #71358。感谢 @Sanjays2402。 - 智能体/MCP:使用支持 draft 的 bundle-MCP 客户端验证器验证 draft-2020-12 MCP 工具输出模式,使外部 MCP 服务器不再因缺失模式引用而导致目录/工具执行失败。修复 #68772 和 #70196。感谢 @mwiesen。 - 仪表板/Windows:通过系统 URL 处理程序打开控制 UI 和 OAuth URL,无需 `cmd.exe` 解析或基于 PATH 的 `rundll32` 查找,并拒绝非 HTTP 的浏览器打开输入。修复 #71098。感谢 @Sanjays2402。 - 配置/医生:拒绝 SecretRef 凭证路径上的旧版 `secretref-env:<ENV_VAR>` 标记字符串,并使用 `openclaw doctor --fix` 将有效标记迁移到结构化环境变量 SecretRef。修复 #51794。感谢 @halointellicore。 - 插件 SDK/浏览器:通过浏览器配置门面导出解析后的浏览器标签页清理配置类型,保持 SDK 子路径契约一致。 - 提供商/OpenAI:分离 API 密钥和 Codex 登录引导组,并避免在模型路由切换后重放过期的 OpenAI Responses 推理块。 - 提供商/OpenAI 兼容:仅在提供商通过 `compat.supportsPromptCacheKey` 选择加入时,才在 Completions 请求中转发 `prompt_cache_key`,保持默认代理负载不变。修复 #69272。 - 提供商/OpenAI 兼容:跳过自定义提供商返回的 null 或非对象流式块,而不是在部分输出后导致轮次失败。修复 #51112。 - 提供商/OpenAI 兼容:将单数 MLX 风格的 `finish_reason: "tool_call"` 视为工具调用而非提供商错误。修复 #61499。 - 文档/TTS:明确旧版扁平 TTS 提供商配置块由 `openclaw doctor --fix` 修复,而非在加载时被严格运行时模式接受。修复 #56220。 - 插件/OpenCode:剥离 OpenCode 图像理解中不支持的已禁用 Responses 推理负载。修复 #70252。 - 插件/OpenCode/OpenCode Go:注册图像理解元数据,使图像工具可用于支持视觉的 OpenCode 目录模型。修复 #70482 和 #61789。 - 插件/OpenCode Go:将默认 Go 目录模型更新为 `opencode-go/kimi-k2.6`。感谢 @masrlinu。 - 提供商/ElevenLabs:为 PCM 电话合成省略仅支持 MP3 的 `Accept` 头,使 `pcm_22050` 的语音呼叫请求不再接收 MP3 音频。修复 #67340。感谢 @marcchabot。 - 提供商/MiniMax TTS:在发送 T2A 请求前截断小数音高覆盖值,以符合 MiniMax 的整数音高契约,同时保留小数速度和音量。修复 #62144。 - 提供商/MiniMax TTS:将语音笔记目标转码为 Opus,使飞书/Telegram 接收原生语音消息而非 MP3 文件附件。修复 #63540、#64134 和 #70445。 - 提供商/Microsoft TTS:即使其他语音插件已注册,仍保持白名单内置语音提供商可被发现,使 Edge/Microsoft TTS 可与 OpenAI 并存。修复 #62117 和 #66850。 - 提供商/Microsoft TTS:将 Edge TTS 标准化为 Microsoft 提供商后,仍遵循旧版 `messages.tts.providers.edge` 语音设置。修复 #64153。 - 提供商/OpenRouter:添加基于 OpenAI 兼容 `/audio/speech` 端点和 `OPENROUTER_API_KEY` 的 OpenRouter TTS 提供商。修复 #71268。 - macOS 语音模式:在回退到系统语音前,通过网关 `talk.speak` 重试失败的本地 ElevenLabs 流播放,使流播放失败时配置的 ElevenLabs 语音仍可播放。修复 #65662。 - 插件/语音呼叫:默认清理过期的未接听呼叫,遵循配置的 TTS 超时时间用于 Twilio 媒体流播放,并使空电话音频失败而非静默完成。修复 #42071;取代 #60957。感谢 @Ryce 和 @sliekens。 - 插件/语音呼叫:当 Twilio、Telnyx 或 Plivo 将回退到回环/私有 webhook URL 时快速失败,使呼叫不会以不可达的回调端点开始。感谢 @artemgetmann。 - 插件/语音呼叫:当插话或流终止清空播放队列时,解析已排队但未播放的 Twilio TTS 条目,使等待 `queueTts()` 的呼叫者不会挂起。感谢 @kevinWangSheng。 - 插件/语音呼叫:终止与提供商的过期恢复呼叫会话,并仅以剩余持续时间重启恢复的最大持续时间计时器,防止 Gateway 重启后出现过期的外呼重试循环。修复 #48739。感谢 @mira-solari。 - 插件/语音呼叫:在 Telnyx 外呼对话问候语后启动提供商 STT,并将配置的 Telnyx 语音 ID 传递至 speak 动作。修复 #56091。感谢 @Roshan。 - 技能:当缺少 `metadata.openclaw` 时,遵循旧版 `metadata.clawdbot` 要求和安装程序提示,使旧版技能在缺少必需二进制文件时不再显示为就绪。修复 #71323。感谢 @chen-zhang-cs-code。 - 浏览器/配置:在启动 Chromium 前展开 `browser.executablePath` 中的 `~`,使基于家目录的自定义浏览器路径不再因 `ENOENT` 失败。修复 #67264。感谢 @Quratulain-bilal。 - 频道/流式传输:默认保持 Telegram 工具进度预览更新启用以匹配已发布行为,记录 `streaming.preview.toolProgress: false` 用于仅禁用这些状态行,并防止预览进度文本触发 Telegram Markdown 链接、Discord 提及或 Slack mrkdwn 提及。修复 #71320。感谢 @neeravmakwana。 - Gateway/会话:在原子重写之前,将过大的 `sessions.json` 复制到轮换备份中,而不是直接重命名在线存储,这样在轮换期间崩溃也能保持现有会话到转录映射的权威性。修复 #68229。感谢 @jjjojoj。 - 提供商/OpenAI 兼容:从代理负载中移除仅适用于 OpenAI 的 Completions `store`,并允许 `extra_body`/`extraBody` 透传参数以支持提供商特定的请求字段。修复 #61826 和 #69717。 - Discord/子代理:通过保持请求者代理的通告路径为主路径,仅在通告未产生可见输出时才回退到直接线程发送,从而保留线程绑定的完成结果投递。(#71064) 感谢 @DolencLuka。 - Discord/代理:使用 undici `FormData` 序列化代理的多部分附件上传,从而使 Discord 媒体发送能通过配置的 REST 代理正常工作。(#71383) 感谢 @TC500。 - 浏览器/工具:为 Chrome MCP 现有会话管理调用提供更长的默认超时时间,通过标签页管理传递明确的工具超时设置,并恢复过期的已选页面 MCP 会话,而非强制手动重置。 - 浏览器/沙箱:清理主代理浏览器会话打开的空闲跟踪标签页,同时保留子代理、定时任务和 ACP 会话的活动标签页复用及生命周期清理。修复 #71165。感谢 @dwbutler。 - 插件/语音通话:在进程内插件上下文之间复用 webhook 运行时,避免在 Gateway 已占用语音 webhook 端口时运行代理工具或 CLI 命令导致 `EADDRINUSE` 错误。修复 #58115。感谢 @sfbrian。 - 插件/语音通话:在 `call.initiated` 时接听已接受的 Telnyx 入站呼叫控制链路,这样到达 OpenClaw 的 webhook 将不再让呼叫者一直响铃直到挂断。修复 #58231 和 #40131。感谢 @KonsultDigital。 - 插件/语音通话:合并同一运行时实例上的并发 webhook 服务器启动请求,避免在启动路径竞争时发生第二次 `listen()` 绑定。感谢 @education-01。 - 插件/语音通话:在嵌入式代理运行前将语音响应会话固定到 `responseModel`,避免在全局默认模型不同时发生实时会话模型切换失败。修复 #60118。感谢 @xinbenlv。 - 插件/语音通话:为语音响应生成添加 `agentId`,使电话呼叫可以使用专用的代理工作区,而非始终通过 `main` 路由。修复 #42155。感谢 @TheOpie。 - 插件/语音通话:将嵌入式语音响应沙箱解析范围限定到所选语音代理,这样即使其他代理定义了沙箱化 Docker 绑定,隐式的 `main` 语音会话也会遵循 `agents.defaults.sandbox.mode: "off"`。修复 #56367。感谢 @crpol。 - 媒体工具:在媒体理解、图像/音乐/视频生成引用和 PDF 输入中遵循配置的 Web 获取 SSRF 策略,使显式的 RFC2544 选项覆盖 WebChat OSS 上传,同时不削弱默认设置。修复 #71300。(#71321) 感谢 @neeravmakwana。 - 代理/TTS:当结构化语音媒体已排队时,从详细聊天工具输出中抑制成功的语音转录文本,同时为非内置工具名称冲突保留文本输出。修复 #71282。感谢 @neeravmakwana。 - 插件/Google Meet:跨无害的 URL 查询差异复用活跃的 Meet 标签页,在浏览器超时后恢复已打开的标签页,为登录或权限拦截器显示手动操作详情,并允许 `googlemeet recover-tab` 从终端检查配对的浏览器节点。 - 定时任务/隔离会话:创建全新隔离运行时,清除过期的运行时、生命周期、认证、模型、执行、心跳、使用量、权限、路由和投递工件,并将每次运行的会话行持久化为快照,使旧的基础会话状态不再泄漏到新的定时任务执行中。感谢 @vincentkoc。 - Gateway/会话:根据过期的转录锁证据恢复被 Gateway 重启中断的主代理回合,避免陷入 `status: "running"` 状态的会话,且无需进行广泛的启动后转录扫描。修复 #70555。感谢 @bitloi。 - Codex 审批:在转发到 OpenClaw 审批提示前,清理 MCP 请求审批的标题、描述和显示参数。(#71343) 感谢 @Lucenx9。 - Codex 审批:将命令审批响应保留在 Codex 应用服务器 `availableDecisions` 范围内,包括为不提供 `decline` 选项的提示提供拒绝/取消回退。(#71338) 感谢 @Lucenx9。 - Codex 框架:在绑定回合开始后,拒绝缺少 `turnId` 或 `turn.id` 的同线程应用服务器通知,防止无作用域事件修改或完成当前回复。(#71317) 感谢 @Lucenx9。 - 插件/Google Meet:在设置中包含实时 Chrome 节点就绪检查和 Parallels 恢复检查,以便在代理打开会议前发现过期的节点令牌或断开的 VM 浏览器。 - 上下文引擎:在上下文引擎窗口化处理后及对于 `ownsCompaction` 引擎保持防护压缩检查处于活动状态,使大型转录文本能在提示提交前进行压缩,而非等待提供商溢出。修复 #71325。 - 审批:在 Codex 权限提示和执行审批元数据中将结构化家目录路径压缩为 `~`,避免将其作为单独的高风险警告重复显示,同时保留文件系统根目录和通配符主机警告。 - 插件/运行时依赖:隔离用于捆绑插件运行时依赖修复的内部 npm 缓存,并允许包更新刷新/验证已安装的当前版本,这样失败的更新或 `sudo doctor` 运行可通过重新执行 `openclaw update` 进行修复。 - 代理/删除:保持 `--json` 输出机器可读,并保留与其他代理工作区重叠的工作区,而不是将共享状态移至回收站。修复 #70889 和 #70890。(#70897) 感谢 @kaseonedge。 - 浏览器/截图:通过主机和节点截图请求遵循 `timeoutMs`,限制原始 CDP 截图命令,并为普通视口截图避免视口外的 CDP 捕获,从而解决 Windows Chrome 截图不再超出请求截止时间挂起的问题。修复 #68330。感谢 @Woodylai24。 - Telegram/模型选择器:通过提供商按钮浏览模型时,显示已配置的模型显示名称,与键入的 `/models <provider>` 输出保持一致。修复 #70560。(#71016) 感谢 @iskim77。 - 插件/运行时依赖:在打包/全局安装时,将捆绑的插件运行时依赖暂存于外部运行时根目录,并在修复过程中保留已暂存的依赖,避免包树更新竞争及升级后的 npm 修剪问题。 - 插件/运行时依赖:在同步 npm 安装开始前记录捆绑插件运行时依赖的暂存过程,并在完成后包含耗时统计,使升级后的首次启动在修复依赖时不再显示为卡死。 - 内存/Bedrock:当 AWS 凭据不可用时,在自动内存嵌入选择过程中跳过 Bedrock,使 `memory_search` 能够回退到词法搜索,而不是在首次嵌入调用时失败。通过 #71245 修复 #71143。感谢 @bitloi。 - 代理/故障转移:将嵌入式运行中止信号转发至提供商拥有的模型流中,将隐式 LLM 空闲看门狗限制在长运行超时时间以下,并将没有可用重试时间的 429 响应标记为不可重试,从而使 GitHub Copilot 速率限制能够及时故障转移或提示,而不是挂起直到运行超时。修复 #71120。 - 插件/Google Meet:默认在创建会议时加入,并提供明确的仅 URL 退出选项,使创建 Meet 的代理也能自动加入。 - Telegram/轮询:在长运行处理器完成前持久化已接受的更新偏移量,使轮询器重启时不会重放已处理的更新,同时保留处理器失败时的同进程重试机制。 - Telegram/配置:在打包的插件清单中包含生成的 Telegram 频道配置模式元数据,使论坛主题/群组配置在运行时加载前即可被接受。 - CLI/Claude:在严格的 Claude CLI MCP 捆绑配置中包含用户配置的 `mcp.servers`,以匹配 Pi 运行,同时保留 OpenClaw 回环覆盖。修复 #70909。感谢 @keishingu。 - 浏览器/工具:防止显式 AI 快照继承高效的 role-snapshot 默认值,并保留数字型 Playwright AI 引用,使 `--format ai` 保持为真实的 AI 快照路径。修复 #62550。感谢 @ly85206559。 - 网关/配置:当 `${VAR}` 环境变量引用在磁盘上恢复时,保持进程内配置补丁重载比较基于已解析的源快照,避免因网关/插件密钥未更改而触发虚假的完整网关重启。修复 #71208。感谢 @robbiethompson18。 - Slack/消息:按目标序列化写客户端请求和完整出站发送,使快速的多条 Slack 回复能够保持发送顺序。修复 #69101。(#69105) 感谢 @nightq 和 @ztexydt-cqh。 - Slack/消息:将 Slack 机器人令牌排除在内部消息排序和 DM 缓存键之外。 - Slack/执行审批:通过网关解析原生审批按钮点击事件,而不是将 `/approve ...` 作为普通代理文本传递,若网关解析失败则保留重试按钮。修复 #71023。(#71025) 感谢 @marusan03。 - 浏览器/工具:向代理暴露浏览器医生诊断信息,并扩展 `openclaw doctor` 的浏览器就绪说明,涵盖托管 Chromium 启动的先决条件。(#62948, #62936) 感谢 @seanc-dev。 - Slack/文件:将非图片的 `download-file` 结果返回为本地文件路径而非图片负载,并在入站文件占位符中包含 Slack 文件 ID,以便代理能够调用 `download-file`。修复 #71212。感谢 @teamrazo。 - 浏览器控制:将独立回环认证范围限定为已解析的活跃网关凭据,当密码模式缺少已解析密码时失败并关闭,使过期令牌或密码不再授权浏览器路由。修复 #65626。(#65639) 感谢 @coygeek。 - 控制 UI/Codex 框架:发出原生 Codex 应用服务器助手及生命周期完成事件,使实时网络聊天运行能够正常停止,无需依赖转录重载回退。(#70815) 感谢 @lesaai。 - 代理/会话:持久化嵌入式代理运行中运行时解析的上下文预算,使 Codex GPT-5.5 会话保留目录/运行时上下文上限,而不是回退到通用的 200k 状态值。修复 #71294。感谢 @tud0r。 - 代理/工具:当显式工具白名单解析为无可调用工具时,在模型提交前中止运行,防止因缺失工具(如未注册的插件命令)而产生仅文本的幻觉工具结果。修复 #71292。 - 代理/嵌入式:当嵌入式运行没有提示词、重放历史记录或提示词本地图片时,跳过提供商提交,防止空的 OpenAI Responses 请求将提供商错误暴露到用户频道。修复 #71130。 - 提供商/Google:将 `/think adaptive` 映射为 Gemini 动态思考,而不是固定的中/高预算,使用 Gemini 3 的提供商默认值和 Gemini 2.5 的 `thinkingBudget: -1`。修复 #71316。 - 提供商/MiniMax:保持 M2.7 聊天模型元数据仅为文本,使图像工具请求通过 `MiniMax-VL-01` 路由,而不是 Anthropic 兼容的聊天端点。修复 #71296。感谢 @ilker-cevikkaya。 - Discord/回复:对 Discord 回复投递运行 `message_sending` 插件钩子,包括 DM 目标,使插件能够与其他频道一致地转换或取消出站 Discord 回复。修复 #59350。(#71094) 感谢 @wei840222。 - Discord/回复:在共享负载回退、组件、语音和排队投递路径中保留单次使用原生回复语义,使显式回复标签不再消耗隐式回复槽位,且分块回退发送仅回复一次。 - 控制 UI/命令:在会话行和默认值中携带提供商拥有的思考选项 ID/标签,使新会话能够显示并接受 `adaptive`、`xhigh` 和 `max` 等动态模式。修复 #71269。感谢 @Young-Khalil。 - 图像生成:使显式 `model=` 覆盖仅精确匹配,防止失败的 `openai/gpt-image-2` 请求回退到 Gemini 或其他配置的提供商,并更新 `image_generate list` 以说明 OpenAI Codex OAuth 是 `openai/gpt-image-2` 的有效认证方式。修复 #71290 和 #71231。感谢 @Young-Khalil。 - 提供商/GitHub Copilot:防止插件流包装器在 OpenClaw 选择边界感知流路径之前抢占传输选择,从而避免在正常模型轮次中使用 Pi 的过时回退 Copilot 头部。 - Discord/子代理:将运行时配置传入线程绑定的原生子代理绑定,并在辅助边界处要求使用,以确保 Discord 频道解析保留账户感知配置。修复 #71054。(#70945) 感谢 @jai。 - Slack/Assistant:当 `message_changed` 事件的元数据标识出发件人为人类时,接受 Slack Assistant 的 DM 消息,同时继续丢弃机器人自撰的编辑。修复 #55445。感谢 @AlfredPros。 - Slack/原生流式传输:在 `chat.startStream`/`appendStream` 之前抑制仅包含推理的负载,使 Claude 的扩展思考块不再作为可见的 Slack 消息显示。修复 #59687。感谢 @vision-ifc。 - Slack/块回复:当 `replyToMode` 为 `first` 时,将多部分块交付保留在第一个 Slack 回复线程中,以匹配文本回复的线程结构,避免后续块泄漏到频道中。修复 #49341。感谢 @pholmstr 和 @xiwuqi。 - Slack/线程广播:将 `thread_broadcast` 事件作为用户消息处理,使使用“同时发送到频道”发送的回复能够到达代理,而不是变成仅含元数据的系统事件。修复 #56605 和 #4351。感谢 @clawSean 和 @jlowin。 - Slack/线程处理:在选择 Slack `thread_ts` 值时忽略内部回复 ID,使恢复的回复保留真实的 Slack 线程锚点,而不是泄漏到频道根目录。修复 #68790。感谢 @MonkeyLeeT 和 @martingarramon。 - 代理/故障转移:阻止无主体的 HTTP 400/422 代理故障默认归类为 `"format"`,使嵌入式重试能够暴露不透明的提供商故障,而不是陷入压缩循环。修复 #66462。(#67024) 感谢 @altaywtf 和 @HongzhuLiu。 - 插件/加载器:对只读插件能力查询使用缓存的发现模式快照加载,使快照缓存与活跃的 Gateway 注册表隔离,并使同一插件的频道/HTTP 路由重新注册具备幂等性,从而避免重复快照或热重载路径再次运行完整的插件副作用或累积重复的表面。修复 #51781、#52031、#54181 和 #57514。感谢 @livingghost、@okuyam2y、@ShionEria 和 @bbshih。 - 插件/加载器:在网关可绑定的启动加载后,为广泛的运行时插件确保调用复用兼容的活跃 Gateway 注册表,使非内置插件在相同的启动路径中不再重新运行 `register()`。修复 #69250。感谢 @markthebest12。 - 插件/钩子:当后续默认模式插件加载激活不同的注册表时,保持网关可绑定的钩子运行器处于安装状态,从而在运行时缓存未命中时保留 Gateway 子代理生命周期钩子。修复 #63166。 - 插件/钩子:在入站频道分发前刷新活跃的 Gateway 运行时钩子,使外部安装的插件在作用域启动插件加载后仍保持 `message_received`、`before_dispatch` 和回复钩子处于活跃状态。修复 #71167。 - 媒体/输入:通过共享媒体加载器解析标准的入站媒体引用,使原生提示词图像重放和显式图像/PDF 工具能够在仅工作区文件策略下读取 `media://inbound/<id>` 和管理的入站重放路径。 - 媒体/工具:集中管理图像、PDF、图像生成、视频生成和音乐生成输入的媒体引用方案分类,使管理的入站引用能够被一致接受。 - 控制 UI/媒体:在提供助手媒体预览前解析标准的入站媒体引用,使 `media://inbound/<id>` 源不再因未通过访问检查而导致文件打开失败。 - 认证/Codex:在全新安装时从 Codex CLI 凭据引导 `openai-codex:default`,且不会在后续替换本地刷新的 OpenClaw OAuth 令牌。修复 #71305。感谢 @Gforce10-design。 - 插件 SDK/工具结果转换:绑定中间件 `details`,验证就地结果修改,并使用标准的 `error` 状态标记失败关闭的中间件回退。感谢 @vincentkoc。 - Discord/网关:防止在 Carbon 网关注册与生命周期重连发生竞争时,启动过程卡在 `awaiting gateway readiness`。修复 #52372。(#68159) 感谢 @IVY-AI-gif。 - Discord/网关:监控 Carbon 的异步网关注册承诺,使致命的 Discord 元数据故障通过启动过程暴露,而不是作为进程级未处理的拒绝。(#62451) 感谢 @safzanpirani。 - Discord/网关:将 websocket 帧活动记录为传输活跃性,使空闲但健康的 Discord 网关在用户消息之间不再显示为过时。(#68213) 感谢 @bmadwaves。 - Slack/流式传输:当原生或草稿预览流式传输占用轮次时,抑制块回复,从而在启用块流式传输时防止重复的 Slack 交付。解决 #56675。感谢 @hsiaoa。 - 插件/缓存:在加载器缓存命中时恢复插件命令和交互式处理程序注册表,且不重置交互式回调去重,使缓存的外部插件在重新加载后仍保持斜杠命令和回调处理程序可用。修复 #71100。感谢 @BomBastikDE。 - Gateway/OpenAI 兼容:当代理运行仅提供最后一次调用的使用元数据时,为 `/v1/chat/completions` 报告非零令牌使用情况。修复 #71118。(#71242) 感谢 @RenzoMXD。 - 插件 SDK/工具结果转换:将工具结果中间件限制为内置插件,在中间件错误时失败关闭,验证重写后的结果形状,保留 Pi 的每次调用 ID,并使 Codex 媒体信任检查锚定于原始工具来源。感谢 @vincentkoc。 - Gateway/MCP 回环:在 `127.0.0.1/mcp` 的 `tools/list` 和 `tools/call` 上应用仅所有者工具策略并运行调用前钩子,使非所有者的 Bearer 调用者无法再查看或调用 `cron`、`gateway` 和 `nodes` 等仅所有者工具,以匹配现有的 HTTP `/tools/invoke` 和嵌入式代理路径。(#71159) 感谢 @mmaps。 - Codex 工具链/安全:等待最终的应用服务器审批决定,并清理审批预览文本,以防止原生 Codex 权限提示被早期的占位符决策解决,或渲染不安全的终端/控制内容。(#70751, #70569) 感谢 @Lucenx9。 - 提供商/语音安全:将 ElevenLabs TTS 和 OpenAI Realtime 浏览器会话密钥创建路由到受保护的 fetch 路径,在保留提供商调用的同时,在语音接口上保持 SSRF 防护。 - 智能体/OpenAI WS:匹配 Codex 的 Responses WebSocket 续传策略,仅发送带有 `previous_response_id` 的严格增量后续输入,当重放链或请求形状不同时回退到完整上下文。修复 #44948。感谢 @hss-oss。 - 插件/Google Chat:仅在所有候选项失败后才记录 webhook 身份验证拒绝原因,并在加载项 `appPrincipal` 值与配置不匹配时发出警告。修复 #71078。(#71145) 感谢 @luyao618。 - 模型/配置:在从配置重新运行提供商身份验证时保留现有默认模型,同时保持显式默认设置命令的权威性。修复 #70696。(#70793) 感谢 @Sathvik-1007。 - 配置/插件:在验证、生成的 schema 元数据和插件策略检查中接受 `plugins.entries.*.hooks.allowConversationAccess`,以便受信任的外部插件无需本地 schema 补丁即可启用 `agent_end` 等对话访问钩子。修复 #71215。(#71221) 感谢 @BillChirico。 - 模型/运行时:每个提供商显示一个模型提供商选项,并将 Codex、Claude CLI 和 Gemini CLI 的执行移至显式运行时选择,同时保持仅用于回退的旧运行时引用不变。感谢 @vincentkoc。 - 插件/运行时依赖:在修复捆绑的运行时依赖时尊重显式的插件和通道禁用设置,这样 doctor 和健康检查不再为已禁用的配置通道安装依赖。感谢 @vincentkoc。 - 诊断/OTEL:通过有界诊断日志事件导出日志,而不是直接使用日志传输钩子。感谢 @vincentkoc。 - WhatsApp/插件:支持对入站 `message_received` 钩子进行显式选择加入,并包含标准的通道、对话、会话和发送者字段。感谢 @vincentkoc。 - 通道/设置:保持捆绑的设置条目依赖精简,仅在登录实际需要时才暂存 WhatsApp 运行时依赖,以便首次运行设置和只读通道发现避免未使用的 SDK 导入。 - Slack/HTTP:将 webhook 处理程序保留在进程全局注册表中,以便 HTTP 模式在插件加载器/原生导入拆分后仍能正常运行,并且以活跃状态登录后 `/slack/events/<account>` 不再返回 404。修复 #67955、#46245 和 #46246。感谢 @chrisabad 和 @cesararevalo。 - 诊断:加固工具和模型诊断事件,以抵御恶意错误、阻塞监听器以及不安全的稳定性原因字段。感谢 @vincentkoc。 - 插件/初始配置:记录本地插件安装来源元数据,而不在持久化的 `plugins.installs` 中重复原始绝对本地路径,同时保留链接加载路径清理。(#70970) 感谢 @vincentkoc。 - 群聊/静默回复:收紧 `NO_REPLY` 提示词指导,使群聊保持安静,避免在预期结果为静默时叙述沉默或发出回退闲聊。(#70954, #71209) 感谢 @Takhoffman。 - WhatsApp/群聊+私聊:在特定的 `groups.<id>` 或 `direct.<peerId>` 条目中设置 `systemPrompt: ""` 现在会屏蔽通配符系统提示词,而不是回退到它,因此用户可以为特定群组或联系人静音全局提示词。(#70381) 感谢 @Bluetegu。 - 浏览器/工具:告知智能体不要在现有会话类型、evaluate 以及其他拒绝超时覆盖的 Chrome MCP 操作中传递每次调用的 `timeoutMs`。 - 浏览器/工具:对 `refs="aria"` 使用 Playwright 当前的 AI aria 快照 API,当节点浏览器无法提供 aria 引用时回退到 role 引用,以便智能体仍能检查和点击 Google Meet 准入按钮等控件。 - 浏览器/工具:暴露稳定的 `tabId` 句柄(如 `t1`)以及可选的标签页标签,并在需要浏览器标签页目标的地方接受这些句柄。 - 浏览器/工具:在标签页负载中优先返回 `suggestedTargetId`,以便智能体自然复用标签或稳定的标签页句柄,而不是原始 DevTools ID。 - 浏览器/工具:捆绑一个 `browser-automation` 技能,包含多步快照、稳定标签页、过期引用和手动阻塞循环,用于智能体控制的页面。 - 浏览器/工具:添加 `openclaw browser doctor`、URL 扩展快照、直接带标签截图,以及针对意外传递位置索引的智能体的更清晰的标签页目标错误提示。 - 插件/Google Meet:使用浏览器自动化来分类并清除 Meet 入口阻塞项(如麦克风选择中间页),并在重试时复用进行中的创建标签页,而不是打开重复项。 - Codex/GPT-5.4:加固原生和嵌入式运行时路径中的回退、身份验证配置、工具 schema 和重放边缘情况。(#70743) 感谢 @100yenadmin。 - 模型/回退:在模型切换前解析裸回退模型提供商 ID,以便当回退命名未显式指定提供商前缀时,配置的回退链仍能正常工作。 - 语音通话/Telnyx:保留入站/出站回调元数据,并从 Telnyx 当前的 `transcription_data` 负载中读取转录文本。 - 提供商/DeepSeek:接入 V4 思考控制和 OpenAI 兼容的重放策略,以便后续对话轮次保留 DeepSeek `reasoning_content`,而 None/off 思考路径会剥离重放的推理字段。修复 #70931。感谢 @lsdsjy。 - 提供商/GitHub Copilot:统一 Anthropic、Responses 和内置压缩摘要路径中的 Copilot 请求头,包括工具结果和图像后续轮次,同时不启用未经验证的 Responses 续传。 - Codex 工具链:为原生应用服务器运行将详细工具进度发送到聊天频道,以匹配 Pi 工具链的 `/verbose on` 和 `/verbose full` 行为。(#70966) 感谢 @jalehman。 - Codex 模型:获取分页的 Codex 应用服务器模型目录,标记截断的 `/codex models` 输出,并将 ChatGPT OAuth 默认值保留在 `openai-codex/gpt-5.5` 路由上,而非 OpenAI API 密钥路由。 - Codex 状态:对于原生 `codex/*` 会话,将 Codex CLI OAuth 报告为 `oauth (codex-cli)` 而非显示未知认证。修复 #70688。感谢 @jb510。 - 频道/CLI:接受显式的共享密钥、基础 URL 和认证目录设置标志,并将旧的 Nextcloud Talk `--url`/`--token` 添加命令映射到内置插件设置输入。修复 #61759 和 #61923。 - 模型/CLI:保持 `openclaw models list` 为只读,同时仍显示符合条件的已配置提供程序行,因此列出模型不再重写每个代理的 `models.json`。(#70847) 感谢 @shakkernerd。 - 代理/传输:将配置的尝试超时时间传播到受保护的逐请求调度器中,因此像 Ollama 这样的慢速本地 LLM 调用不再因 Undici 默认的 60 秒主体超时而失败。修复 #70829。(#70831) 感谢 @DranboFieldston。 - 插件/提供程序:在内置提供程序清单中镜像运行时认证选择,并在插件运行时加载前检测 `KIMI_API_KEY` 以用于 Moonshot/Kimi 网络搜索。感谢 @vincentkoc。 - 网关/聊天:在聊天运行注册表中注册 chat.send 运行,使生命周期错误事件能够到达客户端而非被静默丢弃,修复卡住的“等待”状态及 /abort 报告无活动运行的问题。(#69747) 感谢 @wangshu94。 - 插件/QQ 机器人:默认启用内置的 qqbot 插件,以便首次启动时安装其运行时依赖 `@tencent-connect/qqbot-connector`,解除在配置任何账户前动态导入连接器以进行二维码绑定的阻塞。(#71051) 感谢 @cxyhhhhh。 - 网关/代理 RPC:将活跃的 `agent` 运行注册到聊天中止控制器映射中,使 `chat.abort` 和 `sessions.abort` 能够中断它们,以匹配 `chat.send` 行为,并解除通过公共 `agent` RPC 驱动网关的外部运行时的阻塞。修复 #71128。(#71214) 感谢 @bitloi。 - Matrix/CLI:将解析后的运行时配置传递给 verify 命令,因此 `openclaw matrix verify status` 及其相关的 verify 子命令在获取 Matrix 客户端前不再崩溃。修复 #70992。(#71102) 感谢 @luyao618。 - 网关/启动:在频道监控器报告就绪前等待启动辅助容器(sidecars),减少 Discord 和插件的启动竞争条件,同时保持网关启动的可观测性完整。 - 插件/Google Meet:报告 Chrome 加入所需的手动操作,使用浏览器自动化进行 Meet 进入,并持久化私有 WebSocket 节点的可选加入设置,以便配对节点的实时会话保持预期的网络策略。 - Slack:通过正常的分块发送器路由原生流回退回复,以防止长缓冲的 Slack Connect 响应被丢弃或重复。(#71124) 感谢 @martingarramon。 - WhatsApp:在代理调度前转录已接受的语音备忘录,同时确保口语转录内容不参与命令授权。(#64120) 感谢 @rogerdigital。 - 插件/CLI:在发现模式插件加载期间暴露频道插件 CLI 描述符,以便快照注册表在不激活完整运行时的情况下保持频道命令可见。(#71309) 感谢 @gumadeiras。 - WhatsApp:传递由工具结果回复生成的媒体,同时仍抑制纯文本工具闲聊。(#60968) 感谢 @adaclaw。 - 配置/代理:在严格配置验证中接受 `agents.list[].contextTokens`,以便每个代理的覆盖配置在热重载后保留,使 `/status` 能够反映配置的模型窗口而非 200k 回退值。修复 #70692。(#71247) 感谢 @statxc。 - 心跳:在心跳提示中包含异步执行完成详情,以便命令完成通知能够传递实际输出。(#71213) 感谢 @GodsBoy。 - 记忆搜索:将会话可见性和代理间策略应用于会话转录命中,并在限制结果前将 `corpus=sessions` 排名范围限定在会话集合内。(#70761) 感谢 @nefainl。 - 代理/会话:阻止会话写入锁超时进入模型故障转移,以便本地锁竞争直接暴露而非级联到各个提供程序。(#68700) 感谢 @MonkeyLeeT。 - 自动回复:通过 `message_sending` 钩子运行入站回复投递,以便插件在发送前转换或取消生成的回复。(#70118) 感谢 @jzakirov。 - CI/发布检查:通过步骤环境变量传递工作流输入和矩阵值,而非直接嵌入到 `run:` shell 命令中,减少跨 OS 发布检查工作流中的模板注入风险。(#66884) 感谢 @alexlomt。