← 返回更新日志

OpenClaw v2026.4.23

2026-04-24 · GitHub 原文
## 2026.4.23 ### 变更 - Providers/OpenAI:通过 Codex OAuth 新增图像生成和参考图编辑功能,使 `openai/gpt-image-2` 无需 `OPENAI_API_KEY` 即可工作。修复 #70703。 - Providers/OpenRouter:通过 `image_generate` 新增图像生成和参考图编辑功能,使 OpenRouter 图像模型能配合 `OPENROUTER_API_KEY` 工作。通过 #67668 修复 #55066。感谢 @notamicrodose。 - 图像生成:允许智能体请求提供商支持的质量和输出格式提示,并通过 `image_generate` 工具传递 OpenAI 特有的背景、审核、压缩和用户提示。(#70503) 感谢 @ottodeng。 - Agents/subagents:为原生 `sessions_spawn` 运行新增可选的 fork 上下文,使智能体能在需要时让子进程继承请求者会话,同时默认保持清洁的隔离会话;包含提示词指导、上下文引擎钩子元数据、文档和 QA 覆盖。 - Agents/tools:为图像、视频、音乐和 TTS 生成工具新增可选的每调用 `timeoutMs` 支持,使智能体仅在特定生成需要时扩展提供商请求超时。 - Memory/local embeddings:新增可配置的 `memorySearch.local.contextSize`(默认 4096),使本地嵌入上下文可在不修补内存主机的情况下为受限主机进行调优。(#70544) 感谢 @aalekh-sarvam。 - Dependencies/Pi:将捆绑的 Pi 包更新至 `0.70.0`,使用 Pi 上游的 `gpt-5.5` 目录元数据用于 OpenAI 和 OpenAI Codex,并仅保留本地 `gpt-5.5-pro` 的前向兼容处理。 - Codex harness:为嵌入式 harness 选择决策新增结构化调试日志,使 `/status` 保持简洁,而网关日志能解释自动选择和 Pi 回退原因。(#70760) 感谢 @100yenadmin。 ### 修复 - Codex harness:将原生 `request_user_input` 提示路由回原始聊天,保留排队的后续回答,并遵循更新的应用服务器命令批准修订决策。 - Codex harness/context-engine:在日志记录前对上下文引擎组装失败进行脱敏,使回退警告不会序列化原始错误对象。(#70809) 感谢 @jalehman。 - WhatsApp/onboarding:将首次运行设置条目加载保持在 Baileys 运行时依赖路径之外,使打包的 QuickStart 安装能在运行时依赖部署前显示 WhatsApp 设置。修复 #70932。 - Block streaming:当已发送的文本块完全覆盖最终回复时,抑制部分块传递中止后的最终组装文本,防止重复回复且不丢弃无关短消息。修复 #70921。 - Codex harness/Windows:在启动原生应用服务器前,通过 PATHEXT 解析 npm 安装的 `codex.cmd` 垫片,使 `codex/*` 模型无需手动 `.exe` 垫片即可工作。修复 #70913。 - Slack/groups:将 MPIM 群组直接消息分类为群聊上下文,并在 Slack 非 DM 界面抑制详细工具/计划进度,使内部“工作中...”跟踪不再泄露到房间。修复 #70912。 - Agents/replay:停止 OpenAI/Codex 会话重放在严格重放消毒过程中合成缺失的工具结果,同时保留 Anthropic、Gemini 和 Bedrock 传输拥有的会话上的合成修复。(#61556) 感谢 @VictorJeon 和 @vincentkoc。 - Telegram/media replies:在最终回复路径中将远程 Markdown 图像语法解析为出站媒体负载,使 Telegram 群聊在模型或工具输出 `![...](...)` 而非 `MEDIA:` 标记时不再回退到纯文本图像 URL。(#66191) 感谢 @apezam 和 @vincentkoc。 - Agents/WebChat:从嵌入式运行器 surfaced 不可重试的提供商故障(如计费、认证和速率限制错误),而非记录 `surface_error` 并使 webchat 无渲染错误。修复 #70124。(#70848) 感谢 @truffle-dev。 - WhatsApp:统一直接发送和自动回复的出站媒体规范化。感谢 @mcaxtr。 - Memory/CLI:在内存核心清单中声明内置 `local` 嵌入提供商,使独立 `openclaw memory status`、`index` 和 `search` 能像网关运行时一样解析本地嵌入。修复 #70836。(#70873) 感谢 @mattznojassist。 - Gateway/WebChat:通过将图像附件卸载为媒体引用而非丢弃它们,为仅文本主模型保留图像附件,使配置的图像工具仍能检查原始文件。修复 #68513、#44276、#51656、#70212。 - Plugins/Google Meet:在离开时挂断委托的 Twilio 调用,在启动失败时清理 Chrome 实时音频桥,并使用扁平提供商安全工具架构。 - Media understanding:在原生视觉跳过前遵循显式图像模型配置,包括 `agents.defaults.imageModel`、`tools.media.image.models` 以及提供商图像默认值(如当前聊天模型为纯文本时的 MiniMax VL)。修复 #47614、#63722、#69171。 - Codex/media understanding:通过有界的 Codex 应用服务器图像回合支持 `codex/*` 图像模型,同时保持 `openai-codex/*` 在 OpenAI Codex OAuth 路由上,并针对生成的协议合同验证应用服务器响应。修复 #70201。 - Providers/OpenAI Codex:当 Codex 目录发现遗漏时合成 `openai-codex/gpt-5.5` OAuth 模型行,使 cron 和子代理运行在认证期间不会因“未知模型”失败。 - Models/Codex:在从聊天或 CLI 命令添加模型时保留 Codex 提供商元数据,使手动添加的 Codex 模型保持正确的认证和路由行为。(#70820) 感谢 @Takhoffman。 - Providers/OpenAI:当激活 `openai-codex` 配置集时,直接将 `openai/gpt-image-2` 路由通过配置的 Codex OAuth,而非先探测 `OPENAI_API_KEY`。 - Providers/OpenAI:强化图像生成认证路由和 Codex OAuth 响应解析,使回退仅应用于公共 OpenAI API 路由和有界 SSE 结果。感谢 @Takhoffman。 - OpenAI/image generation:将参考图编辑作为受保护的多部分上传发送而非 JSON 数据 URL,恢复复杂多参考 `gpt-image-2` 编辑。修复 #70642。感谢 @dashhuang。 - Providers/OpenRouter:在图像部分前将图像理解提示作为用户文本发送,恢复 OpenRouter 多模态模型非空视觉响应。修复 #70410。 - Providers/Google:遵循 Gemini 图像生成请求的私有网络 SSRF 选择加入,使将 Google API 主机解析为私有地址的可信代理设置能使用 `image_generate`。修复 #67216。 - Agents/transport:停止嵌入式运行降低进程级 undici 流超时,使慢速 Gemini 图像生成和其他长时间提供商请求不再继承短暂的运行尝试头部超时。修复 #70423。感谢 @giangthb。 - Providers/OpenAI:遵循 OpenAI 兼容图像生成端点的私有网络 SSRF 选择加入,使可信 LocalAI/LAN `image_generate` 路由无需全局禁用 SSRF 检查即可工作。修复 #62879。感谢 @seitzbg。 - Providers/OpenAI:停止通过回退目录广告已移除的 `gpt-5.3-codex-spark` Codex 模型,并用 GPT-5.5 恢复提示抑制陈旧行。 - Control UI/chat:将助手生成的图像持久化为经过身份验证的托管媒体,并接受助手媒体获取的配对设备令牌,使 webchat 历史重载保持显示生成的图像。(#70719、#70741) 感谢 @Patrick-Erichsen。 - Control UI/chat:在网关重连时队列停止按钮中止,使断开连接的活跃运行在重连时被取消,而非仅清除本地 UI 状态。(#70673) 感谢 @chinar-amrutkar。 - Memory/QMD:当启动修复发现集合名称已存在时重建陈旧的托管 QMD 集合,使根内存重新窄化到 `MEMORY.md` 而非停留在宽泛的工作区 Markdown 索引。 - Agents/OpenAI:从 PI、Codex 和自动回复 harness 路径 surfaced 选定模型容量故障,并附带模型切换提示而非通用空响应错误。感谢 @vincentkoc。 - Plugins/QR:用有界的 `qrcode-tui` 助手替换遗留的 `qrcode-terminal` QR 渲染,用于插件登录/设置流程。(#65969) 感谢 @vincentkoc。 - Voice-call/realtime:在问候或转发缓冲音频前等待 OpenAI 会话配置,并在流设置前拒绝未列入允许名单的 Twilio 呼叫者。(#43501) 感谢 @forrestblount。 - ACPX/Codex:停止为 Codex ACP、Codex 应用服务器和 Codex CLI 运行具体化 `auth.json` 桥接文件;Codex 拥有的运行时现在直接使用其正常的 `CODEX_HOME`/`~/.codex` 认证路径。 - Auto-reply/system events:通过持久化会话传递上下文路由异步执行事件完成回复,使长时间命令结果返回到原始频道,而非在实时原始元数据缺失时被丢弃。(#70258) 感谢 @wzfukui。 - Gateway/sessions:将 webchat 会话变更守卫扩展到 `sessions.compact` 和 `sessions.compaction.restore`,使 `WEBCHAT_UI` 客户端被拒绝进行压缩侧会话变更,与现有补丁/删除守卫一致。(#70716) 感谢 @drobison00。 - QA channel/security:在媒体获取前拒绝非 HTTP(S) 入站附件 URL,并记录被拒绝的方案,使可疑或错误配置的负载在调试期间可见。(#70708) 感谢 @vincentkoc。 - Plugins/install:将主机 OpenClaw 包链接到声明 `openclaw` 对等依赖的外部插件,使仅对等的插件 SDK 导入在安装后无需捆绑重复主机包即可解析。(#70462) 感谢 @anishesg。 - Plugins/Windows:在打包运行时依赖修复期间原地刷新打包的插件 SDK 别名,使网关和 CLI 插件启动不再在相同访客 npm 更新后在 `ENOTEMPTY`/`EPERM` 上竞争。 - Teams/security:要求共享 Bot Framework 受众令牌通过验证的 `appid` 或 `azp` 命名配置的 Teams 应用,阻止全局受众上的跨机器人令牌重放。(#70724) 感谢 @vincentkoc。 - Plugins/startup:相对于目标插件模块而非中央加载器解析打包的插件 Jiti 加载,使 Bun 全局安装在发现打包图像提供商时不再挂起。(#70073) 感谢 @yidianyiko。 - Anthropic/CLI security:从 OpenClaw 现有 YOLO 执行策略派生 Claude CLI `bypassPermissions`,保留显式原始 Claude `--permission-mode` 覆盖,并剥离畸形权限模式参数而非静默回退到绕过。(#70723) 感谢 @vincentkoc。 - Android/security:要求 Android 手动和扫描路由仅环回明文网关连接,使私有 LAN 和链路本地 `ws://` 端点现在失败关闭,除非启用 TLS。(#70722) 感谢 @vincentkoc。 - Pairing/security:要求私有 IP 或环回主机用于明文移动配对,并停止将 `.local` 或无点主机名视为安全明文端点。(#70721) 感谢 @vincentkoc。 - Plugins/security:停止设置 API 查找回退到启动目录,使工作区本地 `extensions/<plugin>/setup-api.*` 文件在提供商设置解析期间无法执行。(#70718) 感谢 @drobison00。 - Approvals/security:要求显式聊天执行批准启用,而非仅因批准者从配置或所有者允许列表解析而自动启用批准客户端。(#70715) 感谢 @vincentkoc。 - Discord/security:保持原生斜杠命令频道策略不绕过配置的所有者或成员限制,同时在没有更严格访问规则时保留频道策略回退。(#70711) 感谢 @vincentkoc。 - Android/security:停止 `ASK_OPENCLAW` 意图自动发送注入的提示,使外部应用操作仅预填充草稿而非立即调度它。(#70714) 感谢 @vincentkoc。 - Secrets/Windows:从文件支持的机密剥离 UTF-8 BOM,并使不可用 ACL 检查失败关闭,除非受信任的文件或执行提供商明确选择加入 `allowInsecurePath`。(#70662) 感谢 @zhanggpcsu。 - Agents/image generation:转义工具警告中被忽略的覆盖值,使解析的 `MEDIA:` 指令无法通过不支持的模型选项注入。(#70710) 感谢 @vincentkoc。 - QQBot/security:要求框架认证用于 `/bot-approve`,使未经授权的 QQ 发送者无法通过未认证的前置调度斜杠命令路径更改执行批准设置。(#70706) 感谢 @vincentkoc。 - MCP/tools:停止 ACPX OpenClaw 工具桥接列出或调用仅所有者工具(如 `cron`),关闭非所有者 MCP 调用者的权限提升路径。(#70698) 感谢 @vincentkoc。 - Feishu/onboarding:通过仅设置的 barrel 加载 Feishu 设置界面,使首次运行设置不再在打包运行时依赖部署前导入 Feishu 的 Lark SDK。(#70339) 感谢 @andrejtr。 - Approvals/startup:允许原生批准处理器在网关认证后报告就绪,同时在后台重放待处理批准,使缓慢或失败的重放传递不再阻塞处理器启动或放大重连风暴。 - WhatsApp/security:将联系人/vCard/位置结构化对象自由文本保留在行内消息体之外,并通过围栏不受信任的元数据 JSON 渲染,限制名称、电话字段和位置标签/注释中的隐藏提示注入负载。 - Group-chat/security:将频道来源的群组名称和参与者标签保留在行内群组系统提示之外,并通过围栏不受信任的元数据 JSON 渲染。 - Agents/replay:在严格重放消毒过程中保留 Kimi 风格 `functions.<name>:<index>` 工具调用 ID,使自定义 OpenAI 兼容 Kimi 路由保持多轮工具使用完整。(#70693) 感谢 @geri4。 - Discord/replies:通过出站传递保留最终回复权限上下文,使 Discord 回复在发送时保持相同的频道/成员路由规则。 - Plugins/startup:从打包安装和外部运行时依赖阶段根恢复打包插件 `openclaw/plugin-sdk/*` 解析,使 Telegram/Discord 在缺失依赖修复后不再因 `Cannot find package 'openclaw'` 崩溃循环。(#70852) 感谢 @simonemacario。 - CLI/Claude:对 `claude-cli` 回合运行与直接嵌入式运行相同的提示构建钩子和触发/频道上下文,保持 Claude Code 会话与 OpenClaw 工作区身份、路由和钩子驱动提示突变一致。(#70625) 感谢 @mbelinky。 - Discord/plugin startup:将子代理钩子保持在 Discord 频道条目后的懒加载状态,使打包条目导入保持狭窄,并用频道 ID 和条目路径报告导入失败。 - Memory/doctor:将根持久内存规范化为 `MEMORY.md`,停止将小写 `memory.md` 视为运行时回退,并让 `openclaw doctor --fix` 将真实分裂脑根文件合并到 `MEMORY.md` 并备份。(#70621) 感谢 @mbelinky。 - Providers/Anthropic Vertex:在轻量级提供商发现路径后通过解析发出的发现条目恢复 ADC 支持的模型发现,在引导发现时暴露合成认证,并在探测默认 GCP ADC 路径时遵循复制的环境快照。修复 #65715。(#65716) 感谢 @feiskyer。 - Codex harness/status:每会话固定嵌入式 harness 选择,在 `/status` 中显示活动非 PI harness ID(如 `codex`),并保持 PI 上的遗留会话直到 `/new` 或 `/reset`,使配置更改无法热交换现有会话。 - Gateway/security:通过允许列表一组狭窄的代理可调提示、模型和提及门控路径(包括 Telegram 主题级 `requireMention`)而非依赖可能遗漏新敏感配置键的手动维护受保护子树拒绝列表,使代理驱动的 `gateway config.apply`/`config.patch` 运行时编辑失败关闭。(#70726) 感谢 @drobison00。 - Webhooks/security:在每个请求上重新解析 `SecretRef` 支持的 webhook 路由密钥,使 `openclaw secrets reload` 立即撤销先前密钥,而非等待网关重启。(#70727) 感谢 @drobison00。 - Memory/dreaming:将托管 dreaming cron 与心跳解耦,作为隔离轻量级智能体回合运行,使 dreaming 在默认代理的心跳禁用时仍运行,且不再被 `heartbeat.activeHours` 跳过。`openclaw doctor --fix` 将持久化 cron 配置中陈旧的主动会话 dreaming 作业迁移到新形状。修复 #69811、#67397、#68972。(#70737) 感谢 @jalehman。 - Agents/CLI:将 `--agent` 加 `--session-id` 查找限定到请求的代理存储,使显式代理恢复无法选择其他代理的会话。(#70985) 感谢 @frankekn。