← 返回更新日志

OpenClaw v2026.4.14

2026-04-14 · GitHub 原文
OpenClaw `2026.4.14` 是另一个全面的质量发布版本,重点关注模型提供商,并针对 GPT-5 系列进行了明确的改进,同时修复了渠道提供商问题。此外,我们还通过重构底层核心代码库提升了整体性能。 ## 变更 - OpenAI Codex/模型:为 `gpt-5.4-pro` 添加前向兼容支持,包括在上游目录更新之前提供 Codex 定价/限制及列表/状态可见性。(#66453) 感谢 @jepson-liu。 - Telegram/论坛主题:通过从 Telegram 论坛服务消息中学习名称,在代理上下文、提示元数据和插件钩子元数据中展示人类可读的主题名称。(#65973) 感谢 @ptahdunbar。 ## 修复 - 代理/Ollama:将配置的嵌入式运行超时转发到全局 undici 流超时调优,使缓慢的本地 Ollama 运行不再继承默认流截断,而是使用操作员设置的运行超时。(#63175) 感谢 @mindcraftreader 和 @vincentkoc。 - 模型/Codex:在 codex 提供商目录输出中包含 `apiKey`,使 Pi ModelRegistry 验证器不再拒绝该条目,并静默丢弃 `models.json` 中每个提供商的所有自定义模型。(#66180) 感谢 @hoyyeva。 - 工具/图像+PDF:在媒体工具注册表查找之前规范化配置的提供商/模型引用,使图像和 PDF 工具运行停止因工具路径跳过常规模型引用规范化步骤而将有效的 Ollama 视觉模型拒绝为未知模型。(#59943) 感谢 @yqli2420 和 @vincentkoc。 - Slack/交互:将配置的全局 `allowFrom` 所有者允许列表应用于渠道块操作和模态交互事件,要求预期的发送者 ID 进行交叉验证,并拒绝模糊的渠道类型,使交互触发器无法在无 `users` 列表的渠道中绕过文档化的允许列表意图。当未配置允许列表时,保持默认开放行为。(#66028) 感谢 @eleqtrizit。 - 媒体理解/附件:当无法通过 `realpath` 规范解析本地附件路径时失败关闭,使 `realpath` 错误不再将规范根允许列表检查降级为非规范比较;同时具有 URL 的附件仍回退到网络获取路径。(#66022) 感谢 @eleqtrizit。 - 代理/网关工具:拒绝模型面向网关工具中会启用 `openclaw security audit` 枚举的任何标志(例如 `dangerouslyDisableDeviceAuth`、`allowInsecureAuth`、`dangerouslyAllowHostHeaderOriginFallback`、`hooks.gmail.allowUnsafeExternalContent`、`tools.exec.applyPatch.workspaceOnly: false`)的 `config.patch` 和 `config.apply` 调用;已启用的标志保持不变,因此同一补丁中的非危险编辑仍可应用,且直接认证的操作员 RPC 行为不变。(#62006) 感谢 @eleqtrizit。 - Google 图像生成:仅在调用原生 Gemini 图像 API 时从配置的 Google 基础 URL 中剥离尾部 `/openai` 后缀,使 Gemini 图像请求停止 404 错误,同时不破坏显式的 OpenAI 兼容 Google 端点。(#66445) 感谢 @dapzthelegend。 - Telegram/论坛主题:将学习的主题名称持久化到 Telegram 会话伴生存储中,使代理上下文在重启后能继续使用人类主题名称,而无需从未来服务元数据中重新学习。(#66107) 感谢 @obviyus。 - Doctor/systemd:防止 `openclaw doctor --repair` 和服务重新安装将 dotenv 支持的密钥重新嵌入用户 systemd 单元,同时保留 newer 内联覆盖 over 过时的状态目录 `.env` 值。(#66249) 感谢 @tmimmanuel。 - Ollama/OpenAI-兼容:为 Ollama 流式完成发送 `stream_options.include_usage`,使本地 Ollama 运行报告真实使用情况,而不是回退到触发过早压缩的虚假提示令牌计数。(#64568) 感谢 @xchunzhao 和 @vincentkoc。 - Doctor/插件:在每个插件自动启用传递中缓存外部 `preferOver` 目录查找,使大型 `agents.list` 配置不再在 doctor/plugins 解析期间占用 CPU 并重复重新读取插件目录。(#66246) 感谢 @yfge。 - GitHub Copilot/思考:允许 `github-copilot/gpt-5.4` 使用 `xhigh` 推理,使 Copilot GPT-5.4 与其余 GPT-5.4 系列保持一致。(#50168) 感谢 @jakepresent 和 @vincentkoc。 - 内存/嵌入:在规范化 OpenAI 兼容嵌入模型引用时保留非 OpenAI 提供商前缀,使代理支持的内存提供商停止因 `Unknown memory embedding provider` 而失败。(#66452) 感谢 @jlapenna。 - 代理/本地模型:澄清自托管模型的低上下文预检提示,将配置支持的容量指向相关 OpenClaw 设置,并在 `agents.defaults.contextTokens` 是实际限制时停止建议更大的模型。(#66236) 感谢 @ImLukeF。 - 浏览器/SSRF:在默认浏览器 SSRF 策略下恢复主机名导航,同时通过配置保持显式严格模式可访问,并保持托管回环 CDP `/json/new` 回退请求在本地 CDP 控制策略上,使浏览器后续修复不再回归正常导航或自我阻塞的本地 CDP 控制。(#66386) 感谢 @obviyus。 - 模型/Codex:将遗留的 `openai-codex/gpt-5.4-codex` 运行时别名规范化为 `openai-codex/gpt-5.4`,同时仍尊重别名特定和规范的每模型覆盖。(#43060) 感谢 @Sapientropic 和 @vincentkoc。 - 浏览器/SSRF:通过将遗留别名规范化为严格标记而不是静默将这些安装扩展到默认非严格主机名导航路径,为遗留 `browser.ssrfPolicy.allowPrivateNetwork: false` 配置保留显式严格浏览器导航模式。 - 引导/自定义提供商:对 OpenAI 兼容验证探测使用 `max_tokens=16`,使更严格的自定义端点停止拒绝仅需要微小完成的引导检查。(#66450) 感谢 @WuKongAI-CMU。 - 代理/子代理:在稳定分发路径上发出子代理注册表延迟运行时存根,使后续分发修复不再在运行时仍因 `ERR_MODULE_NOT_FOUND` 而失败。(#66420) 感谢 @obviyus。 - 媒体理解/代理环境:仅当 `HTTP_PROXY`/`HTTPS_PROXY` 处于活动状态且目标未被 `NO_PROXY` 绕过时,才将提供商 HTTP 辅助请求自动升级为受信任的环境代理模式,使远程媒体理解和转录请求停止在仅代理环境中失败本地 DNS 预解析,而不扩大 SSRF 绕过。(#52162) 感谢 @mjamiv 和 @vincentkoc。 - Telegram/媒体下载:在主机名策略检查后,让 Telegram 媒体获取信任操作员配置的显式代理进行目标 DNS 解析,使代理支持的安装在 DNS 固定回归后不再因 Bot API 文件下载而失败 `could not download media`。(#66245) 感谢 @dawei41468 和 @vincentkoc。 - 浏览器:使循环 CDP 就绪检查在严格 SSRF 默认值下可访问,使 OpenClaw 能够重新连接到本地启动的托管 Chrome。(#66354) 感谢 @hxy91819。 - 代理/上下文引擎:从第一个工具循环增量压缩引擎拥有的会话,并在 `afterTurn` 不存在时保留摄入回退,使长时间运行的工具循环保持有界而不丢弃引擎状态。(#63555) 感谢 @Bikkies。 - OpenAI Codex/认证:将格式错误的 Codex CLI 认证文件诊断保留在调试日志记录器而非标准输出,使交互式命令输出保持整洁,同时认证读取失败保持可追踪。(#66451) 感谢 @SimbaKingjoe。 - Discord/原生命令:返回原生 `/status` 交互的真实状态卡,而不是在通用调度程序未产生可见回复时回退到合成 `✅ Done.` 确认。(#54629) 感谢 @tkozzer 和 @vincentkoc。 - 钩子/Ollama:让 LLM 支持的会话内存 slug 生成尊重显式的 `agents.defaults.timeoutSeconds` 覆盖,而不是总是 15 秒后中止,使缓慢的本地 Ollama 运行停止静默回退到通用文件名。(#66237) 感谢 @dmak 和 @vincentkoc。 - 媒体/转录:将 `.aac` 文件名重新映射为 `.m4a` 以进行 OpenAI 兼容音频上传,使 AAC 语音笔记停止因 MIME 敏感的转录端点而失败。(#66446) 感谢 @ben-z。 - UI/聊天:用 markdown-it 替换 marked.js,使恶意制作的 markdown 不再能通过 ReDoS 冻结控制 UI。(#46707) 感谢 @zhangfnf。 - 自动回复/发送策略:防止 `sendPolicy: "deny"` 阻止入站消息处理,使代理仍运行其回合,同时所有出站传递被抑制以用于观察器风格设置。(#65461, #53328) 感谢 @omarshahine。 - BlueBubbles:在发送时当请求回复线程或消息效果但状态未知时,延迟刷新私有 API 服务器信息缓存,使发送不再在 10 分钟缓存过期时静默降级为普通消息。(#65447, #43764) 感谢 @omarshahine。 - 心跳/安全:对不受信任的 `hook:wake` 系统事件强制所有者降级 [AI辅助]。(#66031) 感谢 @pgondhi987。 - 浏览器/安全:在快照、截图和标签路由上强制执行 SSRF 策略 [AI]。(#66040) 感谢 @pgondhi987。 - Microsoft Teams/安全:在 SSO 登录调用上强制执行发送者允许列表检查 [AI]。(#66033) 感谢 @pgondhi987。 - 配置/安全:在 `redactConfigSnapshot` 中编辑 `sourceConfig` 和 `runtimeConfig` 别名字段 [AI]。(#66030) 感谢 @pgondhi987。 - 代理/上下文引擎:将 opt-in 回合维护作为空闲感知的后台工作运行,使下一个前台回合不再等待主动维护。(#65233) 感谢 @100yenadmin。 - 插件/状态:在 `plugins inspect` 中报告注册的上下文引擎 ID 而不是所属插件 ID,使不匹配的引擎 ID 和多引擎插件被正确分类。(#58766) 感谢 @zhuisDEV。 - 上下文引擎:拒绝报告 `info.id` 与其注册槽 ID 不匹配的已解析插件引擎,使格式错误的引擎在基于 ID 的分支行为错误之前快速失败。(#63222) 感谢 @fuller-stack-dev。 - WhatsApp:在 OpenClaw 后安装期间修补已安装 Baileys 媒体加密写入,使默认 npm/install.sh 交付路径在回读前等待加密媒体文件完成刷新,避免图像发送时的瞬态 `ENOENT` 崩溃。(#65896) 感谢 @frankekn。 - 网关/更新:围绕规范捆绑网关入口点统一服务入口点解析,使更新、重新安装和 doctor 修复停止在过时的 `dist/entry.js` 和当前 `dist/index.js` 路径之间漂移。(#65984) 感谢 @mbelinky。 - 心跳/Telegram 主题:当 `target=last` 时,将隔离的心跳回复保留在绑定的论坛主题上,而不是将其丢弃到群组根聊天中。(#66035) 感谢 @mbelinky。 - 浏览器/CDP:使托管的本地 Chrome 就绪、状态探测和托管回环 CDP 控制绕过浏览器 SSRF 策略以用于其自身的回环控制平面,使 OpenClaw 不再将健康的子浏览器错误分类为“启动后无法访问”。(#65695, #66043) 感谢 @mbelinky。 - 网关/会话:阻止心跳、cron-event 和 exec-event 回合覆盖共享会话路由和源元数据,防止合成 `heartbeat` 目标污染后续 cron 或用户传递。(#66073, #63733, #35300) 感谢 @mbelinky。 - 浏览器/CDP:使本地仅附加 `manual-cdp` 配置文件在严格默认策略和远程类探测超时下重用本地回环 CDP 控制平面,使标签页/快照停止错误报告活动的本地浏览器会话为未运行。(#65611, #66080) 感谢 @mbelinky。 - Cron/调度器:当 cron 下次运行计算返回无有效未来时段时,停止发明短重试,并保持维护唤醒已武装,使启用的未调度作业恢复而不进入重触发循环。(#66019, #66083) 感谢 @mbelinky。 - Cron/调度器:在维护修复重新计算缺失的 cron 下次运行时保持活动错误回退下限,使重复错误的作业在瞬态下次运行解析失败后不会过早恢复。(#66019, #66083, #66113) 感谢 @mbelinky。 - 出站/传递队列:将来源出站 `session` 上下文持久化到排队的传递条目并在恢复期间重放,使写前排队发送在重启后保持其原始出站媒体策略上下文,而不是针对缺失会话进行评估。(#66025) 感谢 @eleqtrizit。 - 内存/Ollama:在内存核心中恢复内置 `ollama` 嵌入适配器,使显式的 `memorySearch.provider: "ollama"` 再次工作,并包含端点感知缓存键,使不同的 Ollama 主机不重复使用彼此的嵌入。(#63429, #66078, #66163) 感谢 @nnish16 和 @vincentkoc。 - 自动回复/队列:按每消息授权上下文(发送者 ID、所有者状态、exec/bash 提升覆盖)将收集模式跟进 drains 拆分为连续组,使不同发送者或 exec 配置的排队项目不再在最后排队运行的所有者仅和 exec 批准上下文下执行。(#66024) 感谢 @eleqtrizit。 - dreaming/内存核心:要求心跳钩子运行扫描前有活动的排队 Dreaming cron 事件,使托管的 Dreaming 不再在预定运行已被消耗后在后续心跳上重放。(#66139) 感谢 @mbelinky。 - 控制 UI/Dreaming:停止导入的洞察和记忆宫殿在插件关闭时调用可选的 `memory-wiki` 网关方法,并在 wiki 重新加载前刷新配置,使 Dreaming 选项卡停止显示误导性的未知方法失败。(#66140) 感谢 @mbelinky。 - 代理/工具:仅当流式消息实际分类不可用工具时,才将流式未知工具重试标记为已计数,并在最终助手消息到达前防止不完整的流式工具名称重置重试记录。(#66145) 感谢 @dutifulbob。 - 内存/活动内存:将召回的内存移至隐藏的不可信提示前缀路径而不是系统提示注入,标记可见活动内存状态行字段,并在网关调试日志中包含已解析的召回提供商/模型,使跟踪/调试输出与模型实际看到的内容匹配。(#66144) 感谢 @Takhoffman。 - 内存/QMD:停止将遗留小写 `memory.md` 视为第二个默认根集合,使 QMD 召回不再搜索幻影 `memory-alt-*` 集合,且内置/QMD 根内存回退保持对齐。(#66141) 感谢 @mbelinky。 - 代理/子代理:在 npm 构建中分发 `dist/agents/subagent-registry.runtime.js`,使 `runtime: "subagent"` 运行在注册表导入失败后不再在 `queued` 中停滞。(#66189) 感谢 @yqli2420 和 @vincentkoc。 - 代理/OpenAI:将 `minimal` 思考映射到 OpenAI 支持的 GPT-5.4 请求的 `low` 推理努力,使嵌入式运行停止失败请求验证。感谢 @steipete。 - 语音呼叫/媒体流:当 `webhookSecurity.trustForwardingHeaders` 和 `trustedProxyIPs` 配置时,从受信任的转发头解析源 IP 以进行每 IP 待处理连接限制,并为飞行中 WebSocket 升级保留 `maxConnections` 容量,使并发握手不再瞬间超过操作员设置的上限。(#66027) 感谢 @eleqtrizit。 - 飞书/允许列表:通过显式 `user`/`chat` 种类规范化允许列表条目,剥离重复的 `feishu:`/`lark:` 提供商前缀,并停止将不透明的飞书 ID 折叠为小写,使允许列表匹配不再交叉用户/聊天命名空间或扩展到操作员未意图的不区分大小写的 ID 匹配。(#66021) 感谢 @eleqtrizit。 - Telegram/状态命令:允许只读状态斜杠命令绕过繁忙主题回合,同时保持 `/export-session` 在正常通道上,使其无法与飞行中会话突变交错。(#66226) 感谢 @VACInc 和 @vincentkoc。 - TTS/回复媒体:将 OpenClaw 临时语音输出持久化到托管出站媒体中并允许它们通过回复媒体规范化,使语音笔记回复停止静默丢弃。(#63511) 感谢 @jetd1。 - 代理/工具:在解析沙盒和读取工具路径时将 Windows 驱动器号路径(`C:\\...`)视为绝对路径,使工作区根目录不在 POSIX 路径规则下被 prepend。(#54039) 感谢 @ly85206559 和 @vincentkoc。 - 代理/OpenAI:当仅推理或空回合需要有限继续时,恢复嵌入式 GPT 风格运行,具有重放安全重试门控和在无可见答案到达时的不完整回合回退。(#66167) 感谢 @jalehman。 - 出站/中继状态:在渠道传递前抑制内部中继状态占位符负载(`No channel reply.`、`Replied in-thread.`、`Replied in #...`、以 `No channel reply.` 结尾的 wiki 更新状态变体),使内部内务文本不会泄露给用户。 - Slack/doctor:添加专用的 doctor-contract 伴生存储,使 `openclaw cron` 等配置预热路径不再回退到 Slack 的更广泛合约表面,这可能触发受影响设置上的 Slack 相关配置读取崩溃。(#63192) 感谢 @shhtheonlyperson。 - 钩子/会话内存:将解析的代理工作区传递到网关 `/new` 和 `/reset` 会话内存钩子,使重置快照保持范围于正确的代理工作区而不是泄漏到默认工作区。(#64735) 感谢 @suboss87 和 @vincentkoc。 - CLI/批准:提高默认 `openclaw approvals get` 网关超时并明确报告配置加载超时,使缓慢的主机在批准快照成功但后续配置 RPC 需要更多时间时不再显示误导性的 `Config unavailable.` 注释。(#66239) 感谢 @neeravmakwana。 - 媒体/存储:在保存生成的媒体和持久化出站回复媒体时遵守配置的代理媒体限制,使存储不再在应用配置限制之前硬停止这些流程于 5 MB。(#66229) 感谢 @neeravmakwana 和 @vincentkoc。