← 返回更新日志

OpenClaw v2026.5.10-beta.1 预发布

2026-05-10 · GitHub 原文
## 2026.5.10 ### 变更 - QA/Mantis:新增基于 Convex 租赁凭据的 Telegram 实时 PR 证据自动化,支持 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` 构建,避免在非专用语音性能通道中缓慢的原生插件编译。 - Gateway/技能:新增可选的私有技能存档上传安装路径,受 `skills.install.allowUploadedArchives` 控制,使受信任的 Gateway 客户端仅在操作员显式启用代码安装表面时,才能暂存并安装基于 zip 的技能。(#74430) 感谢 @samzong. - 依赖项:刷新工作区锁定和补丁目标,包括 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 技能 `0.3.6`、Aimock `1.19.5` 及 tsdown `0.22.0`。 - 代理/压缩:在嵌入式压缩和回合后运行时上下文中保留作用域内的后台 exec/process 会话引用,且不暴露不相关作用域的会话。修复 #79284。(#79307) 感谢 @TurboTheTurtle. - CLI/引导:改进 setup、onboarding、configure 和 channel 命令的路径指引,使终端流程能说明下一个有用命令,而非依赖简短的设置标签。 - 代理/Codex:移除可配置的 Codex 动态工具配置文件,使 Codex 应用服务器始终拥有 workspace、edit、patch、exec、process 和 plan 工具,同时 OpenClaw 集成工具保持可用。 ### 修复 - 代理:在提供程序流设置仍处于待定状态时应用 LLM 空闲看门狗,防止模型在等待完整代理超时时静默挂起。 - Cron:允许隔离的自清理运行检查其自身的作业运行历史,同时阻止其他 cron 作业和变异操作。修复 #80019。感谢 @hclsys. - CLI/配置:持久化显式 `config set` 和 `config patch` 中等于运行时默认值的配置,而非报告成功却丢弃它们。修复 #79856。(#80106) 感谢 @abodanty 和 @hclsys. - OpenAI/实时语音:接受兼容 Codex 的旧版音频和转录事件别名,防止提供程序协议漂移导致助手音频或字幕丢失。 - Discord/语音:防止默认代理代理实时会话在强制 OpenClaw 咨询回答前自动填充废话,在实时响应完成时结束 Discord 播放,并将后续精确语音回答排队至播放空闲时,避免句中替换。 - Gateway:为格式错误的编码 session-kill HTTP 路径返回确定的 `400 invalid_request_error` 响应,而非让路由形状请求穿透至后续 Gateway 处理器。(#72439) 感谢 @rubencu. - 控制 UI:从 `/__openclaw__/` SPA 路由提供根目录 PWA 和 favicon 资源,使标签页图标、安装元数据和服务工作者在内部导航后不会返回 404。修复 #80072。感谢 @CodeNovice2017. - OpenAI/实时语音:本地尊重禁用的输入音频中断设置,使操作员设置 `interruptResponseOnInputAudio: false` 后,服务器 VAD 语音开始事件不会清除 Discord 播放。 - Telegram:保持无回复的 DM 轮次静默,而非将其重写为可见的静默回复闲聊。修复 #78188。(#78228) 感谢 @Beandon13. - Telegram:在原始回调回退之前处理托管的选择按钮回调,同时保留包含分隔符的选项值(如 `env|prod`)。(#79816) 感谢 @moeedahmed. - OpenAI 兼容模型:处理返回给流式请求的 JSON 聊天完成体,保留推理字段和可见文本,而非完成空代理轮次。修复 #77870. - Discord/模型:在加载路由、模型和偏好数据之前延迟模型选择组件交互,防止在网关负载下出现“此交互失败”超时。修复 #77283。感谢 @colin-chang. - xAI:为具备推理能力的 Grok 模型暴露 `/think low|medium|high`,并在原生 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. - 代理/Anthropic 兼容:为明确声明 `supportsReasoningEffort: false` 的自定义 Anthropic 兼容模型剥离重放的思考块,防止 Kimi 兼容提供程序重新发送不受支持的 `thinking` 内容。修复 #47452. - 浏览器:延长现有会话 Chrome MCP 状态和非深度 doctor 探测的等待时间,使首次缓慢附加不会错误报告离线,同时保持原始 CDP 状态探测简短。(#77473) 感谢 @rubencu. - Gateway/日志:在前台 Gateway 快速路径解析之前安装控制台捕获,并在详细模式下抑制已知的 libsignal 会话转储,防止原始终端日志打印 WhatsApp 会话密钥材料。(#76306) 感谢 @rubencu. - 执行审批:将 `exec.approval.list` 保留在轻量级策略摘要路径上,以便列出待处理审批时不再加载复杂的 tree-sitter 命令解释器。(#76943) 感谢 @rubencu。 - 智能体:当 `exec`/`bash` 工具调用在助手声称成功后失败时,显示简洁的默认可见警告,同时在未启用详细模式时隐藏原始 stderr。修复 #60497。(#80003) 感谢 @jbetala7。 - 智能体:在分发前拦截模型生成的空白工具调用,同时保留基于 ID 的工具名恢复机制,防止 Kimi/NVIDIA 空白名称重试循环,且不会创建可调用的 `_blank` 哨兵。修复 #34129。(#56391) 感谢 @smartchainark。 - 智能体/Telegram:传递标准的最终助手回答,而不是重播累积的工具前文本块,防止重复的 Telegram 回复和看起来像原始的工具输出片段泄露到聊天交付中。修复 #79621 和 #79986。感谢 @nonzeroclaw 和 @dudaefj。 - 自动回复/TUI:在主模型生命周期错误后,通过输出回退进度并将终端 TUI 错误推迟到恢复有机会完成后再显示,确保回退超时恢复可交付。修复 #80000。(#80009) 感谢 @TurboTheTurtle。 - CLI/智能体:允许 `openclaw agent --model` 使用后端/管理员 Gateway 作用域,避免因缓存的设备令牌作用域静默降级请求。(#78837) 感谢 @VACInc。 - CLI/帮助:保持帮助和版本调用免配置,同时改进共享端口、频道、插件、任务、会话、消息、配对和认证恢复提示。 - CLI/配置:通过有效示例和纯字符串备用方案解释严格 JSON 解析失败。 - CLI/密钥:将离线 Gateway 重新加载失败转化为可操作的恢复提示。 - CLI/频道:通过后续命令解释缺失或模糊的频道选择。 - CLI/频道:将引导式频道状态收集推迟到选择频道之后,使 `openclaw channels add` 首屏更安静。 - 插件/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:在 `7.0.0-rc10` 中防止 Baileys 媒体上传将非 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。 - Gateway/watch:在从源代码签出启动 Gateway 之前,重新构建或重新生成缺失的捆绑插件 dist 和 runtime-postbuild 输出,防止不完整的 watch 模式运行时树。(#70805) 感谢 @rubencu。 - CLI/更新:允许在自更新期间从上一代 Gateway 协议进行重启健康探测,并使插件干运行报告确切的 npm 目标版本而非 `unknown`,同时保留未更改状态。 - OpenAI/Codex:在标准 `openai/*` 迁移后,将持久化的 `openai-codex` OAuth 配置文件元数据转发到 Codex 插件框架尝试中,使仅 OAuth 安装继续使用原生 Codex 认证,而不是回退到直接 OpenAI API 密钥认证。修复 #79978。 - OpenAI/Codex:将 Gateway 缺失密钥恢复和向导文档指向标准的 `openai/gpt-5.5` 加 Codex OAuth 路径,并修复轨迹导出错误,使其建议有效的 `openclaw sessions` 命令。 - Google/Gemini:在配置加载和无关配置写入期间,标准化已弃用的 `google/gemini-3-pro-preview` 主配置、回退配置和模型映射引用,使保存的配置继续指向 Gemini 3.1 Pro Preview。 - Google/Gemini:标准化发出的 Google 提供商模型配置中已弃用的 Gemini 3 Pro Preview ID,使重新生成的 models.json 行测试 `google/gemini-3.1-pro-preview`。 - GitHub Copilot:使用运行时请求相同的 `vscode-chat` 集成身份签发短期 Copilot API 令牌,并刷新缺少该身份的传统缓存令牌,使支持图像的 Copilot 模型不再继承 `copilot-language-server` 作用域。修复 #79946, #80074。感谢 @TurboTheTurtle。 - 插件/医生:当 `openclaw doctor --fix` 移除覆盖捆绑插件的 npm 包时,丢弃过期的托管 npm 安装记录,使重新构建的注册表不再恢复已移除的包元数据。 - Discord/语音:重用或抑制滞后的实时咨询工具调用,而不窃取较新的说话者上下文或重复播报强制回退答案。 - Discord/语音:从发出的 Discord PCM 合成实时播放时间戳,使 OpenAI 实时打断截断不再看到 `audioEndMs=0` 并跳过合法中断。 - 插件 SDK:当禁用捆绑插件回退时,保持已激活的链接插件运行时代理可加载。感谢 @shakkernerd。 - 飞书:当活跃会话为 `group_topic` 或 `group_topic_sender` 时,自动将 `message(action="send")` 的回复置于主题(topic)内,并通过文本、卡片和媒体出站适配器传递 `replyInThread`,使主题作用域的会话不再发布到群聊根目录。修复 #74903。(#77151) 感谢 @ai-hpc。 - WhatsApp:将路由上下文传入语音笔记转录回声预检(preflight),以便回声转录能发送回原始聊天窗口。修复 #79778。(#79788) 感谢 @hclsys。 - 定时任务/故障转移:将结构化的 OpenAI 兼容 `server_error` 负载分类为 `server_error`,在定时任务状态中暴露该原因,并使一次性定时任务重试策略能够尊重 `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` 的原因链(code/method/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:即使本地模型配置仍声明为 200k,也为 Claude Opus/Sonnet 4 模型报告 1M 会话上下文,以匹配模型发现机制并防止状态/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。 - 模型列表:在默认配置视图中包含显式配置的提供商行和只读认证支持的目录行,而无需加载 PI 的完整注册表,使控制面板 UI 选择器与可用的模型认证保持一致。引用 #79381。感谢 @ismael-81。 - 安全/审计:在报告小模型网页/浏览器暴露时,尊重 `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。 - Volcengine/Kimi:针对直接模型和编码计划模型,移除提供商不支持的工具 Schema 长度和项约束关键字,以便托管的 Kimi 运行环境不会拒绝带有 `minLength` 的消息工具。修复了 #38817。 - DeepSeek:为非自有 OpenAI 兼容代理提供商回填 V4 `reasoning_content` 回放字段,防止在内置 DeepSeek 和 OpenRouter 路由之外出现后续请求失败。修复了 #79608。