← 返回更新日志

OpenClaw v2026.5.20

2026-05-21 · GitHub 原文
### 变更 - 执行审批:移除了旧的 `cat SKILL.md && printf ... && <skill-wrapper>` 白名单兼容路径,因此技能文件必须使用读取工具加载,只有真正的技能可执行文件才被自动允许。 - Discord:让语音会话跟随已配置的 Discord 用户进入语音频道,并包含频道允许检查、多用户交接、有限制的协调以及 DAVE 恢复保留。(#84264) 感谢 @fuller-stack-dev。 - Discord/语音:默认在实时语音会话指令中包含有限制的 `IDENTITY.md`、`USER.md` 和 `SOUL.md` 档案上下文,可通过 `voice.realtime.bootstrapContextFiles: []` 禁用它。(#84499) 感谢 @fuller-stack-dev。 - 依赖:将内置的 Codex 工具集升级至 `@openai/codex` `0.132.0`,并刷新应用服务器模型列表文档以适配新目录。 - CLI/策略:新增内置的策略插件,用于基于策略的频道合规性检查、doctor 检查结果以及可选的 workspace 修复。(#80407) 感谢 @giodl73-repo。 - 代理/配置:允许 `agents.list[].experimental.localModelLean`,因此可以为单个配置的代理启用精简本地模型模式,而不必全局启用。 - 提供商/xAI:新增设备码 OAuth 登录,使远程和无头环境无需本地主机浏览器回调即可授权 xAI。(#84005) 感谢 @fuller-stack-dev。 - 提供商/OpenRouter:遵循提供商级别的 `params.provider` 路由策略处理 OpenRouter 请求,模型和代理参数可覆盖默认值。感谢 @amknight。 ### 修复 - CLI/任务:在 `openclaw tasks maintenance --json` 中包含过时运行任务维护决策,以便保留和协调候选项能够说明后台会话、cron、CLI 和卡住的子代理状态。(#84691) 感谢 @efpiva。 - Codex 应用服务器:当引导钩子仅提供路径和内容的 workspace 文件时,保持系统提示报告正常工作,以便钩子提供的 SOUL/IDENTITY/TOOLS/USER 上下文仍能正确报告注入的字符数。(#84736) 感谢 @JARVIS-Glasses。 - 提供商/MiniMax 音乐:停止宣传 `durationSeconds` 控制,并移除提示注入的持续时间提示,使 `music_generate` 报告 MiniMax 持续时间为不支持的覆盖,而不是暗示 MiniMax 可以强制曲目长度。修复 #84508。感谢 @neeravmakwana。 - Doctor:当沙箱工具策略在提供商请求之前隐藏了已配置的 MCP 服务器工具时发出警告。(#84699) 感谢 @nxmxbbd。 - WhatsApp:将 Baileys 更新至 `7.0.0-rc12`。 - 构建:抑制每个地区的 `rolldown-plugin-dts:fake-js` CommonJS dts 警告(这些警告在打包故意内联的 `zod/v4/locales/*.d.cts` 文件时发出),以便在插件升级至 0.25.1 后 `pnpm build` 输出保持可读。感谢 @romneyda。 - CLI/节点:将懒加载的插件注册日志路由到 stderr(用于 JSON 模式的 `openclaw nodes` 命令),以便 stdout 保持可解析。(#84684) 感谢 @TurboTheTurtle。 - 审批:通过可信的审批运行时路由手动 `/approve` 决策,使活跃的执行和插件审批不再显示为未知或过期。 - Mac 应用:将关于设置中的版权年份更新为 2026。(#84385) 感谢 @pejmanjohn。 - 依赖:将 `@openclaw/fs-safe` 更新至 `0.2.7`,以便 OpenClaw 的默认 Python 助手关闭策略在 Linux/macOS 上为私有存储、密钥写入、运行日志和媒体附件保留最佳努力的 Node 写入回退。 - 基础设施/密钥:恢复 `tryReadSecretFileSync` 的失败关闭契约,使传递 `rejectSymlink: true` 的凭据加载器(Telegram、LINE、Zalo、IRC、Nextcloud Talk 令牌)拒绝符号链接凭据文件而不是静默接受,并且基础设施状态 CI 分片的密钥文件符号链接测试再次通过。感谢 @romneyda。 - 浏览器:遵守已配置的图像净化限制(用于截图和带标签的快照),使浏览器捕获的图像遵循与其他图像结果相同的调整大小策略。(#84595) - Doctor:在 `doctor --fix` 期间移除 `models.providers.*.models[*].compat.thinkingFormat` 中无法识别的值,以便过时的提供商模型配置在升级后可以通过验证。修复 #77803。 - Doctor:当 `openclaw.json` 存储明文密钥承载的配置字段(包括模型提供商 API 密钥和敏感的提供商标头)时发出警告。(#84718) 感谢 @lukaIvanic。 - 状态:当会话仍然固定在与 `agents.defaults.model.primary` 不同的模型上时,显示已配置的默认模型、会话选择的模型、原因、清除提示和文档链接。 - WebChat:当会话更改事件标记当前聊天运行为完成时,清除过时的输入指示器。 - Mac 应用:使用稳定的应用身份对本地打包进行签名以进行权限测试,并修复当前 Vite/Highlight.js 导出下的 Control UI 生产构建。 - macOS 应用:将嵌入的 Peekaboo 桥接更新至 3.2.1,以便 OpenClaw 托管的 UI 自动化与当前 Peekaboo CLI 捕获流程配合使用。 - Cron:当诊断中仍存在尾随的普通工具警告时,为成功的计划运行提供首选最终助手输出,而不是将运行标记为失败。 - fix(mattermost):在缺少频道类型时失败关闭 [AI]。(#84091) 感谢 @pgondhi987。 - 重新检查重建的 system.run argv [AI]。(#84090) 感谢 @pgondhi987。 - CLI:除非设置了 `OPENCLAW_ENABLE_PRIVATE_QA_CLI=1`,否则将私有 QA 子命令排除在导出的命令描述符之外,以便根帮助和子命令标记与运行时注册匹配。(#84519) - CLI/cron:限制 `openclaw cron show` 任务查找的分页,使不前进或无界的 `cron.list` 响应失败而不是挂起命令。修复 #83856。(#83989) - 代理/消息:在成功的源频道 `message` 发送后停止仅消息工具轮次,同时在会话写锁下保持对话副本。(#84289) - 代理:从嵌入的上下文快照中过滤掉静默心跳响应工具对话记录,以便后续用户轮次不被心跳无操作消息污染。(#83477) 感谢 @fuller-stack-dev。 - 代理/OpenAI:对重复的严格工具模式降级诊断,每个提供商/模型/工具签名仅记录一次,减少重复调试噪音,同时保留 `strict=false` 回退行为。修复 #82930。(#82933) 感谢 @galiniliev。 - 代理/代码模式:在模型可见的架构文本中详细说明 `exec` 工具的 JavaScript/TypeScript、无 Node 模块和目录桥接约束,使代理无需反复试验即可使用已启用的工具。(#84269) 感谢 @Kaspre。 - Codex:当没有设置每次调用或已配置的图像超时时,为 `image_generate` 动态工具调用设置 120 秒默认看门狗,使图像生成不再回退到通用的 30 秒桥接超时。(#84254) 感谢 @moritzmmayerhofer。 - Codex:避免在大型诊断积压耗尽时出现重复的动态工具终端诊断,同时不阻塞工具响应。(#82937) 感谢 @galiniliev。 - CLI/消息:当频道发送返回 `messageId` 时,在 `openclaw message --json` 输出中包含稳定的顶级 `messageId`。(#84191) 感谢 @100menotu001。 - Cron:在加载或添加计划任务时,保留传统的顶级数组 `jobs.json` 存储,使旧的 cron 任务在升级期间不被视为空存储。修复 #60799。(#84433) 感谢 @IWhatsskill。 - 网关/代理:当 `agents.list[].name` 未设置时,在网关代理摘要中使用代理的 `identity.name`,使配置的代理标签在客户端中保持可见。(#84355; 引用 #57835) 感谢 @luoyanglang。 - 频道/回复:在消息工具回复中保持常规 `/verbose` 失败工具进度紧凑,并防止迟到的纯文本工具输出出现在最终答案之后。(#84303) 感谢 @VACInc。 - 插件/钩子:对 `before_compaction` 和 `after_compaction` 钩子应用默认 30 秒超时,使挂起的插件处理程序不再阻塞压缩完成。(#84153) - Discord:在适配和渲染 Discord 消息控件时保留禁用的展示按钮。(#84188) 感谢 @100menotu001。 - Twitch:添加仅测试的客户端管理器注册重置辅助函数,使非隔离的 Twitch 测试可以在用例之间清除缓存的 Manager。修复 #83887。(#84244) 感谢 @hclsys。 - Cron:在 cron 所属的唤醒通道上运行主会话计划工作,同时保留回复传递上下文,使后台 cron 轮次不再阻塞人工主会话聊天。修复 #82766。(#82767) 感谢 @galiniliev。 - Cron:对隔离的计划任务使用结构化的嵌入式运行拒绝元数据,使被阻止的 exec 请求失败任务,而不会将普通的助手散文视为拒绝。(#84067) 感谢 @abnershang。 - Cron:在诊断中保留已恢复的工具警告,用于成功的计划运行,以便最终 cron 输出能够传递,而不是被后处理警告替换。(#84045) 感谢 @abnershang。 - 插件/性能:通过 `loadBundledCapabilityRuntimeRegistry`、`resolveBundledPluginSources` 和 `listChannelCatalogEntries` 传递显式的插件发现结果,使已经持有发现结果的调用者跳过冗余的文件系统遍历。感谢 @SebTardif。 - 强化更新重启脚本创建 [AI]。(#84088) 感谢 @pgondhi987。 - Docker:在官方发布镜像保留列表中保留内置的 Codex 插件,使默认的 OpenAI 代理工具集在 Docker 修剪后仍然可用。修复 #83613。(#83626) 感谢 @YuanHanzhong。 - CLI/频道:当滚动尾部窗口精确起始于行边界时,保留 `openclaw channels logs` 输出的第一行,镜像已在 `src/logging/log-tail.ts` 中修复的 `readLogSlice` 行为。 - Control UI:将终端会话状态视为权威,覆盖过时的活跃运行标志,使完成的终端运行停止显示中止/实时 UI。(#84057) - CLI:保留内联根选项值中的嵌入等号,而不是在第二个分隔符后截断。(#83995) 感谢 @ThiagoCAltoe。 - Matrix/配置:接受 `messages.queue.byChannel.matrix` 队列覆盖,并保持队列提供商 schema/type 键与 Matrix、Google Chat 和 Mattermost 对齐。感谢 @bdjben。 - CLI:通过共享的错误格式化器格式化 `openclaw acp client` 失败,使对象形状的错误保持可读,而不是打印 `[object Object]`。修复 #83904。(#84080) - 提供商/Ollama:将未知能力的模型默认为具有工具能力,使发现的本地 Ollama 模型在 `/api/show` 省略能力时可以使用工具。(#84055) 感谢 @dutifulbob。 - 安装程序/Windows:以附加子进程方式启动 `install.ps1` 向导,使全新的原生 Windows 安装不会在 `Starting setup...` 处明显冻结或损坏向导的终端渲染。 - CLI/更新:保持重启健康检查跨一个版本的 CLI/网关协议偏差正常工作,并在包根未更改时对所有后续命令使用受管理的网关服务 Node,使 `openclaw update` 在存在多个 Node 安装时不再静默切换到不同的 Node 二进制。感谢 @amknight。 - CLI/网关:在 `gateway status` JSON 输出中包含正在运行的网关版本,保留现有服务器元数据,同时回退到状态 RPC 数据用于读取探测。修复 #56222。感谢 @galiniliev。 - 内存/搜索:当活跃内存搜索超时时关闭本地嵌入提供商,使待处理的本地模型加载和嵌入上下文被中止并释放。(#83858) 感谢 @brokemac79。 - CLI/节点:在 `openclaw nodes approve` 之前请求待处理的节点表面审批范围,使具有 exec 能力的节点审批可以使用管理员作用域的网关凭据,而不是因 `missing scope: operator.admin` 失败。(#84392) 感谢 @joshavant。 - 网关:在出站缓冲区无界增长之前拒绝慢速节点事件发送,并记录被拒绝的有效负载诊断。(#84387) 感谢 @samzong。 - 代理:在 `pi-trajectory-flush` 超时警告中包含有限制的轨迹队列写入器诊断,使刷新停滞显示待处理写入、排队字节和追加状态。修复 #82961。(#82962) 感谢 @galiniliev。 - 代理/子代理:通过重试不支持的对话等待唤醒(不进行对话等待)并在请求者运行已过时时强制进行消息工具交接,恢复过时的完成通知。修复 #83699。(#83700) 感谢 @galiniliev。 - 代理/子代理:将通配符子代理目标允许列表约束到已配置的代理,同时保留显式列出的兼容性目标。修复 #84040。(#84357) 感谢 @joshavant。 - 提供商/Anthropic:将通过 Claude CLI 认证选择的 Anthropic 模型引用路由到 Claude CLI 运行时,使诸如 `anthropic/opus-4.7` 的简写引用不再回退到嵌入的 Anthropic 计费。修复 #84222。(#84374) 感谢 @joshavant。 - 代理:对云和自托管提供商,遵守高于默认空闲看门狗的显式 `models.providers.<id>.timeoutSeconds` 值,使首次令牌等待时间较长时不再在大约 120 秒后回退(当提供商超时更高时)。(#83979) 感谢 @yujiawei。 - 代理/Codex:将加密的 Responses 推理重放保持在与来源绑定的范围内,使过时的镜像 Codex 对话在请求组装前丢弃无效的加密内容,同时保留匹配的同一会话重放。修复 #83836。(#84367) 感谢 @joshavant。 - 代理/子代理:跳过休眠完成请求者的过时嵌入式运行唤醒探测,使迟到的子代理完成直接转到请求者代理/直接交接,而不是产生 `reason=no_active_run` 队列噪音。(#82964) 感谢 @galiniliev。 - CLI:在瞬时失败后重试配置快照读取,使一次被拒绝的读取不再毒害同一进程中的后续命令。(#83931) 感谢 @honor2030。 - 媒体:在使用 URL 路径基本名称作为远程媒体回退文件名之前对其进行解码,使诸如 `My%20Report.pdf` 的文件显示为 `My Report.pdf`。修复 #84050。(#84052) 感谢 @jbetala7。 - WhatsApp:澄清入站群组诊断,使已观察到但未注册的群组指向 `channels.whatsapp.groups`,而不更改路由或发送者授权。(#83846) 感谢 @neeravmakwana。 - WhatsApp:除了重连处理程序外,还每 30 秒定期清空待处理出站投递,使提供商已连接时入队的消息不再等待下一次重连才能发送。(#79083) 感谢 @Oviemudiaga。 - CLI/TUI:在 TUI 自动补全中包含网关插件斜杠命令,使已连接的会话可以建议由正在运行的网关暴露的插件自有命令。(#83640) 感谢 @se7en-agent。 - 网关/移动端:恢复 iOS 和 Android 引导中有限制的操作员令牌的 QR 设置代码交接,同时将管理员和配对范围排除在引导之外。(#83684) 感谢 @ngutman。 - iOS:修复 TestFlight 构建的 Release 归档编译。(#84255) 感谢 @ngutman。 - 代理/压缩:使用主机会话超时限制插件自有的 CLI 对话压缩,使挂起的上下文引擎无法再阻塞轮次后清理。(#84083) 感谢 @100yenadmin。 - Control UI/使用情况:在 usage 面板中截断较长的上下文技能、工具和文件名,同时悬停时显示完整名称。(#42197) 感谢 @Rain120。 - Codex:尊重显式的 `models auth order set` 和 `config.auth.order` 优先级,覆盖 `/codex account` 中的陈旧 `lastGood`,并在每个显式顺序的配置文件都不符合条件时显示 `no working credential`,而不是将较低排名的配置文件标记为活跃。修复 #84386。(#84412) 感谢 @openperf。 - 代理:对可变工具失败遵守 `messages.suppressToolErrors`,使配置的聊天界面不接收单独的警告有效负载。(#81561) 感谢 @moeedahmed。 - 代理/回退:为混合速率限制加计费回退耗尽显示计费指导,而不是通用失败信息。修复 #79396。(#79489) 感谢 @aayushprsingh。 ### 发布验证 - npm 包:https://www.npmjs.com/package/openclaw/v/2026.5.20 - 注册表 tarball:https://registry.npmjs.org/openclaw/-/openclaw-2026.5.20.tgz - 完整性校验:`sha512-cgshS76CxS3Vp9NGtJR2UGtVZxVR5/4rvok8DKGGL19DugAftNabsXfYajyAEiJ3dC8QTXNqF62MdQNzUnQe8Q==` - 完整发布 CI 报告:https://github.com/openclaw/releases-private/blob/main/evidence/2026.5.20/release-evidence.md - 完整发布验证:https://github.com/openclaw/openclaw/actions/runs/26248546974 - 完整发布验证清单:https://github.com/openclaw/openclaw/actions/runs/26248546974/artifacts/7146395269 - 常规完整 CI:https://github.com/openclaw/openclaw/actions/runs/26248760810 - 发布检查:https://github.com/openclaw/openclaw/actions/runs/26248762847 - 插件预发布:https://github.com/openclaw/openclaw/actions/runs/26248761192 - npm 预检:https://github.com/openclaw/openclaw/actions/runs/26248551138 - 发布发布:https://github.com/openclaw/openclaw/actions/runs/26251157671 - 插件 npm 发布:https://github.com/openclaw/openclaw/actions/runs/26251316669 - 插件 ClawHub 发布:https://github.com/openclaw/openclaw/actions/runs/26251319171 - OpenClaw npm 发布:https://github.com/openclaw/openclaw/actions/runs/26251677950 - npm Telegram 包端到端测试:https://github.com/openclaw/openclaw/actions/runs/26252161788 - macOS 预检/签名/公证:https://github.com/openclaw/releases-private/actions/runs/26252146980 - macOS 验证:https://github.com/openclaw/releases-private/actions/runs/26253801999 - macOS 发布/应用更新:https://github.com/openclaw/releases-private/actions/runs/26253953375 - 应用更新源:https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml - macOS zip:https://github.com/openclaw/openclaw/releases/download/v2026.5.20/OpenClaw-2026.5.20.zip - macOS dmg:https://github.com/openclaw/openclaw/releases/download/v2026.5.20/OpenClaw-2026.5.20.dmg - macOS dSYM:https://github.com/openclaw/openclaw/releases/download/v2026.5.20/OpenClaw-2026.5.20.dSYM.zip