OpenClaw v2026.4.7 发布说明

新增功能 (Changes)

  • • CLI / 推理:新增一流的 openclaw infer 推理中枢(hub),支持基于提供商的推理工作流,涵盖模型、媒体、网页和嵌入任务。感谢 @Takhoffman。
  • • 工具 / 媒体生成:默认支持跨认证后端的图像、音乐和视频提供商的自动回退;在提供商切换时保留意图;将尺寸/宽高比/分辨率/时长等提示映射到最接近的受支持选项;公开提供商能力以及支持模式感知的视频到视频转换。
  • • 记忆 / 知识库:恢复内置的 memory-wiki 技术栈,包含插件、CLI、同步/查询/应用工具、memory-host 集成、结构化声明/证据字段、编译后的摘要检索、声明健康检查、矛盾聚类、陈旧性仪表板以及新鲜度加权搜索。感谢 @vincentkoc。
  • • 插件 / Webhook:新增内置 Webhook 入口插件,允许外部自动化系统通过每个路由的共享密钥端点创建并驱动绑定的 TaskFlow。 (#61892) 感谢 @mbelinky。
  • • 网关 / 会话:添加持久化的压缩检查点,以及会话 UI 中的分支/恢复操作,使运维人员能够检查并恢复压缩前的会话状态。 (#62146) 感谢 @scoootscooob。
  • • 压缩:添加可插拔的压缩提供程序注册表,允许插件替换内置的摘要管道。可通过 agents.defaults.compaction.provider 配置;若提供程序失败,则回退到 LLM 摘要。 (#56224) 感谢 @DhruvBhatia0。
  • • 智能体 / 系统提示:新增 agents.defaults.systemPromptOverride 用于受控的提示实验;增加心跳提示段控制,使得心跳运行时行为可以保持启用,而无需每轮都注入心跳指令。
  • • 提供商 / Google:增加对 Gemma 4 模型的支持,并在请求的提供商路径上保持 Google 回退解析,使原生 Google Gemma 路由重新正常工作。 (#61507) 感谢 @eyjohn。
  • • 提供商 / Google:为 Gemma 4 保留显式的“关闭思考”语义,同时在兼容性包装器中启用 Gemma 推理支持。 (#62127) 感谢 @romgenie。
  • • 提供商 / Arcee AI:新增内置 Arcee AI 提供程序插件,包含 Trinity 目录条目、OpenRouter 支持以及更新的上手/认证指南。 (#62068) 感谢 @arthurbr11。
  • • 提供商 / Anthropic:恢复将 Claude CLI 作为上手指南、模型认证、doctor 流程以及 Docker Claude CLI 实时环境中的首选本地 Anthropic 路径。
  • • 提供商 / Ollama:从 /api/show 响应中检测视觉能力,并为支持该能力的模型设置图像输入,使 Ollama 视觉模型能够接受图像附件。 (#62193) 感谢 @BruceMacD。
  • • 记忆 / 梦境 (dreaming):将修订后的会话转录本引入梦境语料库,包含每日会话语料库备注、游标检查点,以及提升/doctor 支持。 (#62227) 感谢 @vignesh07。
  • • 提供商 / inferrs:为更严格的 OpenAI 兼容聊天后端增加字符串内容兼容性;提供完整的配置示例文档;为本地后端(能通过直接探测但完整智能体运行时提示失败)提供故障排除指南。
  • • 智能体 / 上下文引擎:向上下文引擎暴露提示缓存运行时上下文;使当前轮次的提示缓存使用与当前尝试保持一致,而不是陈旧的上轮次助手状态。 (#62179) 感谢 @jalehman。
  • • 插件 SDK / 上下文引擎:在 assemble() 中传入 availableTools 和 citationsMode;暴露 memory-artifact 和 memory-prompt 接口,使配套插件和非传统上下文引擎能够消费活动记忆状态,而无需触及内部实现。感谢 @vincentkoc。
  • • ACP / ACPX 插件:将内置的 acpx 固定版本升级到 0.5.1,使插件本地安装和严格版本检查能够获取最新的已发布运行时版本。 (#62148) 感谢 @onutc。
  • • Discord / 事件:允许 event-create 接受封面图片 URL 或本地文件路径;加载并验证 PNG/JPG/GIF 事件封面媒体;通过 Discord 管理操作/运行时路径传递编码后的图像载荷。 (#60883) 感谢 @bittoby。

问题修复 (Fixes)

CLI 与推理

  • • CLI / 推理:使基于提供商的推理行为与实际运行时执行保持一致:修复显式 TTS 覆盖处理、支持感知配置文件的网关 TTS 偏好解析、每请求转录提示/语言覆盖、图像输出 MIME/扩展名不匹配、已配置网页搜索回退行为以及智能体 vs CLI 网页搜索执行偏差。

插件与媒体

  • • 插件 / 媒体:当设置 plugins.allow 时,能力回退现在会将内置能力插件的 id 合并到允许列表中(而不仅仅是 plugins.entries),因此像 OpenAI 兼容的 STT 这样的媒体理解提供商能够被加载用于语音转录,而无需将 openai 放入 plugins.allow。 (#62205) 感谢 @neeravmakwana。

智能体、历史与回复

  • • 智能体 / 历史与回复:缓冲无阶段的 OpenAI WebSocket 文本,直到真实助手阶段到达;保持回放和 SSE 历史序列跟踪对齐;从用户可见历史中隐藏注释和泄露的工具 XML;使基于历史记录的后续回复仅保留在 final_answer 文本上。 (#61729, #61747, #61829, #61855, #61954) 感谢 @100yenadmin 及其他贡献者。

用户界面

  • • 控制 UI:在 WebChat 中显示 /tts 音频回复;检测错误的 ?token= 认证链接并给出正确的 #token= 提示;保持复制、画布以及移动端执行批准 UI 不会在窄屏幕上覆盖聊天内容。 (#54842, #61514, #61598) 感谢 @neeravmakwana。
  • • iOS / 网关:用结构化的网关连接问题替换字符串匹配的连接错误 UI;在后续通用断连噪音中保留可操作的配对/认证失败信息;在上手指南、设置和根状态界面中展示可复用的问题横幅和详情。 (#62650) 感谢 @ngutman。
  • • TUI:通过共享的 session-status 命令路由 /status;在历史中隐藏注释;从异步命令通知中剥离原始信封元数据;在每次尝试失败最终完成前保留回退流式传输;退出或致命崩溃时恢复 Kitty 键盘状态。 (#49130, #59985, #60043, #61463) 感谢 @biefan 及其他贡献者。
  • • iOS / Watch 执行批准:保持 Apple Watch 审查和批准恢复功能在 iPhone 锁定或后台状态下正常工作,包括重连恢复、待处理批准持久化、通知清理以及 APNs 支持的 Watch 刷新恢复。 (#61757) 感谢 @ngutman。
  • • UI / 浅色模式:针对根元素和嵌套的 WebKit 滚动条滑块应用浅色主题,使页面级和容器级滚动条在浅色背景上可见。 (#61753) 感谢 @chziyue。

智能体与上下文处理

  • • 智能体 / 上下文溢出:将超大和聚合的工具结果恢复合并到单次传递中;恢复总上下文溢出后门,使可恢复的会话重试而不是提前失败。 (#61651) 感谢 @Takhoffman。
  • • 智能体 / 子智能体:尊重 sessions_spawn(lightContext: true) 生成的子智能体运行,通过网关和内嵌运行器保留轻量级引导上下文,而不是静默回退到完整工作区引导注入。 (#62264) 感谢 @theSamPadilla。
  • • 智能体 / 模型回退:将最小的 HTTP 404 API 错误(例如 404 status code (no body))归类为 model_not_found,使助手失败时进入回退链,而不是在第一个回退候选处停止。 (#62119) 感谢 @neeravmakwana。
  • • 智能体 / 心跳:保持心跳运行固定到主会话,避免活动子智能体转录本被心跳状态消息覆盖。 (#61803) 感谢 @100yenadmin。
  • • 智能体 / 心跳:尊重已禁用的心跳提示指令,使操作员可以抑制心跳提示指令而不禁用心跳运行时行为。
  • • 智能体 / 压缩:防止压缩等待中止重新进入提示故障转移并重播已完成的工具轮次。 (#62600) 感谢 @i-dentifier。

认证与安全

  • • 认证 / OpenAI Codex OAuth:在锁定的刷新路径内重新加载最新的磁盘凭据;当 refresh_token_reused 仅轮换存储的刷新令牌后重试一次,使重新登录/重启恢复不再卡在陈旧的认证缓存状态。感谢 @owen-ever。
  • • 认证 / OpenAI Codex OAuth:保持 /model ...@profile 选择绑定到目标会话,并尊重用户锁定的认证配置文件,即使按智能体的认证顺序排除了它们。 (#62744) 感谢 @jalehman。
  • • 网关 / 认证:当配置的密钥轮换时,使现有的共享令牌和密码 WebSocket 会话失效,从而防止经过认证的陈旧套接字在令牌或密码更改后继续保持连接。 (#62350) 感谢 @pgondhi987。
  • • 运行时 / 事件信任:将后台 notifyOnExit 摘要、ACP 父流中继和唤醒钩子载荷标记为不受信任的系统事件,使得低信任度的运行时输出不再作为受信任的 System: 文本重新进入后续轮次。 (#62003)
  • • 自动回复 / 媒体:再次允许从正常回复文本中访问生成的媒体 MEDIA: 路径,同时仍然阻止任意主机本地媒体和文档路径,使生成的媒体能够继续传递而不会重新打开主机路径注入漏洞。

提供商与 API

  • • 提供商 / Anthropic:为 Claude Opus 4.5+、Sonnet 4.5+ 和更新的 Claude 4 系列模型保留 thinking 块,使提示缓存前缀保持匹配;在 OAuth 认证的流式包装器请求上跳过 service_tier 注入,从而修复 Claude OAuth 流式传输返回 HTTP 401 的问题。 (#60356, #61793)
  • • 智能体 / Claude CLI:从结构化的 CLI 输出中暴露嵌套的 API 错误消息,使计费/认证/提供商失败显示真实的提供商错误,而不是模糊的 CLI 失败。
  • • 提供商 / Ollama:在流式传输期间尊重所选提供商的 baseUrl,使多 Ollama 设置不再将所有流路由到第一个配置的 Ollama 端点。 (#61678)
  • • 提供商 / Ollama:当发现只看到空的默认本地桩时,不再警告无法联系 Ollama,同时对于显式的 Ollama 覆盖保持端点不可达时的响亮警告。
  • • 提供商 / xAI:重新将 api.grok.x.ai 识别为 xAI 原生端点;保持旧的 x_search 认证解析工作,使旧的 xAI 网页搜索配置继续加载。 (#61377) 感谢 @jjjojoj。
  • • 提供商 / Mistral:为 mistral/mistral-small-latest (Mistral Small 4) 发送 reasoning_effort,并映射思考级别;将目录条目标记为支持推理,使可调节推理符合 Mistral 的 Chat Completions API。 (#62162) 感谢 @neeravmakwana。
  • • OpenAI TTS / Groq:向 Groq 兼容的语音端点发送 wav 格式;尊重 OpenAI 兼容路径上的显式 responseFormat 覆盖;仅当实际格式为 opus 时才将语音备注输出标记为语音兼容。 (#62233) 感谢 @neeravmakwana。

工具与网络

  • • 工具 / web_fetch 和 web_search:修复因 undici 8.0 默认启用 HTTP/2 导致的 TypeError: fetch failed 问题;现在 SSRF 防护调度器显式设置 allowH2: false 以恢复 HTTP/1.1 行为,并保持自定义 DNS 固定查找兼容。 (#61738, #61777) 感谢 @zozo123。
  • • 工具 / 网页搜索 / Exa:在上手指南中显示 Exa Search,并通过将内置 Exa 提供程序标记为 setup-visible 使其在提供商选择器中再次可见。感谢 @vincentkoc。
  • • 网络 / fetch 防护:默认情况下,在跨域 307 和 308 重定向时丢弃请求体和描述请求体的头部,以防止受攻击者控制的重定向跳转接收携带机密的 POST 负载,除非调用方显式选择加入。 (#62357) 感谢 @pgondhi987。
  • • 浏览器 / SSRF:即使 Playwright 未将其标记为 isNavigationRequest(),也将主框架文档重定向跳转视为导航,从而在浏览器到达内部目标之前,严格的私有网络阻断仍然能阻止被禁止的重定向枢轴。 (#62355) 感谢 @pgondhi987。
  • • 浏览器 / node invoke:阻止通过 browser.proxy 对持久浏览器配置文件进行创建、重置和删除等修改,无论是在网关转发的 node.invoke 还是节点主机代理路径上,即使没有配置配置文件允许列表。 (#60489)
  • • 网络 / fetch 防护:停止将操作员配置的代理主机名针对目标作用域的主机名允许列表进行拒绝,恢复基于代理的媒体下载(如 Telegram 和其他频道)。 (#62312) 感谢 @ademczuk。

网关与节点

  • • 网关 / 节点配对:当之前配对的节点重新连接并声明额外命令时,要求新的配对请求;保持活动会话固定到之前批准的命令集,直到升级获得批准。 (#62658) 感谢 @eleqtrizit。
  • • 网关 / 状态与容器:在 Docker 和 Podman 环境中自动绑定到 0.0.0.0;探测本地 TLS 网关时使用 wss:// 并转发自签名指纹,使容器启动和环回 TLS 状态检查再次正常工作。 (#61818, #61935) 感谢 @openperf 及其他贡献者。
  • • 网关 / OpenAI 兼容 HTTP:当客户端断开连接时,中止进行中的 /v1/chat/completions 和 /v1/responses 请求,避免废弃的 HTTP 请求浪费智能体运行时。 (#54388) 感谢 @Lellansin。
  • • macOS / 网关版本:在 semver 解析之前,从 CLI 版本输出中去除尾随的提交元数据,使 Mac 应用能够再次识别已安装的网关版本(例如 OpenClaw 2026.4.2 (d74a122))。 (#61111) 感谢 @oliviareid-svg。
  • • 会话 / 模型选择:将显式选择的会话模型与运行时回退解析分开解析,使会话状态和实时模型切换与所选模型保持一致。

执行与批准

  • • 智能体 / 执行:当 tools.exec.host=auto 时,在提升的默认值下保留显式的 host=node 路由;对无效的显式跨主机覆盖大声失败;在批准超时后保持 strictInlineEval 命令被阻止,而不是回退到自动执行。 (#61739) 感谢 @obviyus。
  • • 节点 / 执行批准:保持 host=node POSIX 传输 shell 包装器(/bin/sh -lc ...)与内部命令允许列表分析对齐,使允许列表中的脚本不再不必要地提示批准;而 Windows cmd.exe 包装器运行仍保持批准门控。 (#62401) 感谢 @ngutman。
  • • 节点 / 执行批准:保持 Windows cmd.exe /c 包装器运行即使包含环境变量载体(包括包裹 shell 调用的环境变量赋值载体)也始终需要批准门控。 (#62439) 感谢 @ngutman。
  • • 网关 / 工具执行配置:阻止面向模型的 gateway config.apply 和 config.patch 写入更改执行批准路径(如 safeBinssafeBinProfilessafeBinTrustedDirs 和 strictInlineEval),同时仍然允许未更改的结构化值通过。 (#62001) 感谢 @eleqtrizit。
  • • 主机执行 / 环境变量清理:阻止危险的 Java、Rust、Cargo、Git、Kubernetes、云凭证、配置路径和 Helm 环境变量覆盖,防止主机运行的工具被重定向到攻击者选择的代码、配置、凭据或仓库状态。 (#59119, #62002, #62291) 感谢 @eleqtrizit 及其他贡献者。
  • • 命令 / 允许列表:在频道解析之前,要求所有者授权执行 /allowlist add 和 /allowlist remove,从而防止非所有者但拥有命令授权的发送者持久性地重写允许列表策略状态。 (#62383) 感谢 @pgondhi987。
  • • 审批 / 运行时:将原生审批生命周期组装移到由频道能力和运行时上下文驱动的共享核心引导/运行时接口中,并移除旧的内置审批回退线路。 (#62135) 感谢 @gumadeiras。

频道与集成

  • • Discord / ACP 绑定:规范跨入站消息、组件交互、原生命令和当前对话绑定解析的 DM 对话身份,使 Discord DM 中的 --bind here 保持将后续回复路由到绑定的智能体,而不是回退到默认智能体。
  • • Discord:当快照丢失时恢复转发的引用消息文本和附件;再次使用 ws:// 作为网关监控套接字;停止为 Codex 支持的自动线程标题强制使用硬编码温度;加强语音接收恢复,使快速重启的发言者保留其下一次话语。 (#41536, #61670) 感谢 @artwalker 及其他贡献者。
  • • Slack / 线程提及:新增 channels.slack.thread.requireExplicitMention,使得已经需要提及的 Slack 频道也可以要求在机器人参与的线程中显式 @bot 提及。 (#58276) 感谢 @praktika-engineer。
  • • Slack / 线程处理:当旧调用方省略 isThreadReply 时,保持传统线程粘性用于真实回复,同时仍然为 Slack 自动创建的顶级 thread_ts 尊重 replyToMode。 (#61835) 感谢 @kaonash。
  • • Slack / 媒体:将附件下载保留在 SSRF 防护调度器路径上,使 Slack 媒体获取在 Node 22 上工作,不会丢弃固定的传输强制策略。 (#62239) 感谢 @openperf。
  • • Matrix / 上手指南:添加邀请自动加入设置步骤,带有显式关闭警告和严格稳定目标验证,使新的 Matrix 帐户不再静默忽略被邀请的房间和新的 DM 风格邀请,除非操作员选择加入。 (#62168) 感谢 @gumadeiras。
  • • Matrix / 格式化:在 Element 中保留多段落和松散列表渲染,使编号和项目符号 Markdown 保持内容附着在正确的列表项上。 (#60997) 感谢 @gucasbrg。
  • • Telegram / doctor:在多帐户标准化期间保持顶层访问控制回退,同时仍将旧默认认证提升到 accounts.default,使现有的命名机器人保留继承的允许列表,而不会丢弃旧的默认机器人。 (#62263) 感谢 @obviyus。
  • • 飞书 / docx 上传:通过将受工作区约束的 localRoots 转发到媒体加载器,使 tools.fs.workspaceOnly 在本地 upload_file 和 upload_image 路径中生效,从而在工作区只读模式下,docx 上传无法再读取工作区外的主机本地文件。 (#62369) 感谢 @pgondhi987。
  • • MS Teams / 安全:在上传附件之前,验证文件同意上传 URL 是否符合 HTTPS、Microsoft/SharePoint 主机允许列表以及私有 IP DNS 检查,阻止 SSRF 式的同意上传滥用。 (#23596)
  • • QQ 机器人 / 媒体:将网关侧附件和回退下载通过受保护的 QQ/腾讯 HTTPS 获取进行路由,使 QQ 媒体处理不再跟随任意远程主机。
  • • BlueBubbles / 网络:在帐户解析、状态探测、监视器启动和附件下载过程中,对环回和私有 serverUrl 值尊重显式的私有网络选择退出,同时保持公共主机附件主机名固定不变。 (#59373) 感谢 @jpreagan。

记忆与向量

  • • 记忆 / 向量召回:当 sqlite-vec 不可用或向量写入降级时,显示显式警告;在每日笔记摄取前剥离受管理的浅睡眠和 REM 块,使记忆索引和梦境停止报告假成功或重新摄取阶段性输出。 (#61720) 感谢 @MonkeyLeeT。
  • • 记忆 / 梦境:使梦境配置读取和写入尊重所选的 memory 槽插件,而不是始终以 memory-core 为目标。 (#62275) 感谢 @SnowSky1。

插件与加载

  • • 插件 / 加载器:集中化内置的 dist/** Jiti 原生加载策略;在 Windows 上保持频道、公共表面、facade 和配置元数据加载器不依赖原生 Jiti,使上手指南、配置流程不再触发 ERR_UNSUPPORTED_ESM_URL_SCHEME。 (#62286) 感谢 @chen-zhang-cs-code。
  • • 插件 / 频道:在懒加载下保持内置频道构件和 secret 合约加载稳定;在安装期间保留插件 schema 默认值;修复 Windows file:// 加上原生 Jiti 插件加载器路径,使上手指南、doctor、openclaw secret 以及内置插件安装再次正常工作。 (#61832, #61836, #61853, #61856) 感谢 @Zeesejo 及其他贡献者。
  • • 插件 / ClawHub:根据版本元数据 SHA-256 验证下载的插件归档;当归档完整性元数据缺失或格式错误时失败关闭;收紧回退 ZIP 验证,使得在 ClawHub 包元数据不匹配或不完整时插件安装无法进行。 (#60517) 感谢 @mappel-nv。
  • • 插件 / 提供商钩子:停止在插件初始化期间递归加载提供商快照导致栈溢出,同时保留缓存嵌套提供商钩子结果。 (#61922, #61938, #61946, #61951)
  • • Docker / 插件:停止在运行时镜像中强制将内置插件发现指向 /app/extensions,使打包后的安装再次使用编译后的 dist/extensions 构件,并且 Node 24 容器不会通过仅源码的插件入口路径启动。修复 #62044。 (#62316) 感谢 @gumadeiras。

其他修复

  • • 媒体 / base64 解码防护:在对 Teams、Signal、QQ Bot 和图像工具载荷中遗漏的 base64 进行解码之前强制实施字节限制,使超大的入站媒体和数据 URL 不再绕过解码前的大小检查。 (#62007) 感谢 @eleqtrizit。
  • • Cron:当磁盘存储中缺少 id 时,将 jobId 加载到 id 中,与 doctor 迁移匹配,修复手工编辑的 jobs.json 中 cron job id 未知的问题。 (#62246) 感谢 @neeravmakwana。
  • • 浏览器 / 远程 CDP:在远程浏览器重启后重试一次 DevTools websocket,使健康的远程浏览器配置文件在 CDP 预热期间不会失败可用性检查。 (#57397) 感谢 @ThanhNguyxn07。
  • • 日志记录:使 logging.level 和 logging.consoleLevel 再次尊重文档化的严重性阈值排序;保持子日志器继承父级的 minLevel。 (#44646) 感谢 @zhumengzhu。
  • • 智能体 / sessions_send:通过公告投递传递 threadId,使跨会话通知能够落在正确的 Telegram 论坛主题中,而不是群组的通用线程中。 (#62758) 感谢 @jalehman。
  • • 守护进程 / systemd:当机器作用域的 systemctl 失败时,保持 sudo systemctl 调用限定在调用用户的作用域内;同时对于权限拒绝的用户总线错误,避免回退到机器作用域。 (#62337) 感谢 @Aftabbs。
  • • 文档 / 国际化:在翻译后重新本地化最终的本地化页面链接;移除 zh-CN 首页重定向覆盖,使本地化的 Mintlify 页面再次解析到正确的语言根目录。 (#61796) 感谢 @hxy91819。
  • • 智能体 / 执行:将超时的 shell 后台命令保持在失败路径上;将长时间运行的作业指向 exec background/yield 会话,使得进程轮询仅在注册的会话中被建议。
请登录后发表评论

    没有回复内容