← 返回更新日志

OpenClaw v2026.5.12

2026-05-14 · GitHub 原文
### 亮点 - 更精简的安装:WhatsApp、Slack、Amazon Bedrock、Anthropic Vertex 以及相关的提供者/插件依赖树已移出核心运行时,安装时仅拉取您实际使用的组件。 - Telegram 变得更加可靠:隔离轮询、持久化本地暂存、更安全的群组媒体处理,以及在流式响应和定时回复中保留 HTML/Markdown 格式。 - Codex/OpenAI 路径更加顺畅:支持认证配置文件支持的媒体工具、MCP 服务器投射、上下文引擎线程轮换,以及更好的应用服务器/运行时回退行为。 - 插件安装和更新更难出现卡死情况:支持 pnpm 11、保留对等依赖、更安全的运行时扫描,以及修复了源码/git 安装问题。 - Gateway、浏览器、Slack、节点配对、沙箱和转录路径进行了广泛的安全/来源增强。 - 界面和回复投递在 Control UI、WebChat、TUI、纯富文本回复、会话历史和流式自动滚动方面得到改进。 ### 变更 - Amazon Bedrock:将 Bedrock 和 Bedrock Mantle 提供者包外部化,这样核心安装不再拉取 AWS SDK 依赖,除非安装这些提供者。 - 插件:将 Slack、OpenShell 沙箱和 Anthropic Vertex 外部化,这样它们的运行时依赖树仅当安装这些插件时才会安装。 - Control UI/WebChat:添加了一个持久的自动滚动模式选择器,用户可以选择保持当前的接近底部行为、始终跟随流式输出,或者关闭自动流式滚动并手动使用“新消息”按钮。修复了 #7648 和 #81287。感谢 @BunsDev。 - ACP:添加了 `acp.fallbacks`,这样 ACP 回合可以在主后端不可用时,在产生任何输出之前尝试配置的备用运行时后端。(#69542) 感谢 @kaseonedge。 ### 修复 - Doctor/Codex:停止警告消息工具对源码回复路径不可用,因为在运行时 OpenClaw 授予了 `message` 权限,使更新和 doctor 输出与 OpenAI 快乐路径保持一致。感谢 @pashpashpash。 - Channels/Weixin:将外部微信目录条目升级到 `@tencent-weixin/[email protected]`,并匹配的包完整性校验。(#81730) 感谢 @scotthuang。 - Agents/subagents:在 `sessions_spawn` 过程中,在目标 agent 主模型之前应用 `agents.defaults.subagents.model`,这样模型作用域的运行时(如 `claude-cli`)能保持附加到默认的子运行。修复了 #81395。(#81783) 感谢 @joshavant。 - Telegram:通过将入口移动到带有持久化本地暂存的隔离工作线程,使 Bot API 轮询在主事件循环停滞时保持活跃。修复了 #81132。(#81746) 感谢 @joshavant。 - Telegram:通过延迟的 cron 公告投递保留渲染后的 HTML 格式,使 Markdown 链接保持可点击,而不是回退到字面锚标签。修复了 #81742。(#81758) - Telegram:当 `requireMention` 激活时,在下载前跳过未提及的群组媒体,避免对应忽略的消息产生失败的媒体下载回复。修复了 #81181。(#81785) 感谢 @joshavant。 - CLI/plugins:将裸插件和父命令帮助保持在轻量路径上,避免在渲染帮助之前发现插件注册表。 - Gateway/session history:在实时更新中携带单调递增的转录消息序列,并在陈旧序列输入可能导致追加错误增量状态时刷新 SSE 历史。修复了 #81474。感谢 @samzong。 - Security/sandbox:在沙箱阻止的主目录根中包含 Windows `USERPROFILE`,这样即使 `HOME` 指向不同的 shell 主目录,带有凭据的绑定(如 Windows 用户配置文件下的 `.codex`、`.openclaw` 或 `.ssh`)也会被拒绝。(#63074) 感谢 @luoyanglang。 - Models config/auth:停止从宽泛的 `^[A-Z_][A-Z0-9_]*$` 字符串推断提供者环境变量标记,仅通过结构化环境 SecretRefs(`secrets.providers[id]` / `secrets.defaults`)解析配置支持的提供者 `apiKey` 值,这样无关的环境变量不会意外成为提供者凭据。感谢 @sallyom。 - Media fetch:对无正文的媒体响应(HEAD 探测和 204 样式的空正文)跳过分配和缓冲响应体,避免在没有负载的流上浪费堆内存。感谢 @shakkernerd。 - CLI/onboarding:通过引导向导转发提供者特定的认证标志(例如 `--openai-api-key`),使它们通过 `ctx.opts` 到达提供者认证方法,这样在非交互式 harness 中 `--openai-api-key "$OPENAI_API_KEY"` 可以跳过冗余的“使用现有环境变量?”提示。(#81669) 感谢 @sjf。 - CLI/migrate:从 Codex 迁移项目消息和 `REASON_CODE_MESSAGES` 字符串中删除尾部句点,使计划/结果行读起来像标签而不是句子片段。(#81705) 感谢 @sjf。 - Slack:将格式错误的私有文件重定向 `Location` 头视为不可跟随的重定向,而不是导致 Slack 媒体下载失败。 - Plugins:在提供者发现期间,从 `setup.providers[].envVars` 凭据中发现提供者插件,同时保留已弃用的 `providerAuthEnvVars` 回退。(#81542) 感谢 @JARVIS-Glasses。 - Docs/Codex harness:澄清每个 agent 的 `CODEX_HOME` 隔离 `~/.codex`,而继承的 `HOME` 有意保留 `.agents` 发现和子进程用户主目录状态可用。 - Auth:在重试锁定写入之前回收死所有者的陈旧文件锁,这样崩溃的 OAuth 刷新不再卡住 `auth-profiles.json` 直到手动清理。 - CLI tables:在多行单元格后的换行续行上保留静音/颜色样式,使 `openclaw plugins list` 描述保持可读。 - Process execution:在 Windows 上折叠不区分大小写的重复子环境键,这样调用者提供的覆盖(如 `PATH`)不会被主机 `Path` 遮蔽。 - Gateway/diagnostics:在启动宽限窗口期间抑制冷启动存活警告,同时仍采样存活指标。修复了 #79915。(#81699) 感谢 @joshavant。 - Codex harness:保持 `oauthRef` 支持的 Codex OAuth 配置文件可用,并停止高置信度的应用服务器 OAuth 刷新失效通过重试垃圾邮件发送原始令牌刷新错误,而不将权利或使用限制负载转换为重新认证提示。 - Browser CLI:为浏览器控制命令显式请求现有的 `operator.admin` 网关作用域,避免不必要的范围升级批准循环。修复了 #81555。(#81716) 感谢 @joshavant。 - Gateway/diagnostics:在启动宽限窗口期间抑制冷启动存活警告,同时仍采样存活指标。修复了 #79915。(#81699) 感谢 @joshavant。 - Plugin SDK:恢复已弃用的 `openclaw/plugin-sdk/memory-core` 包子路径作为 `memory-host-core` 的别名,这样已发布的内存配套插件如果仍然导入它,可以在当前主机上解析。 - Control UI/i18n:使用已安装的工作空间 pi 运行时进行语言环境刷新,更新回退包锁定,优先使用 Anthropic CI 提供者(如果可用),并跳过无效的提供者凭据而不是导致主流程失败。 - Codex harness:将本机应用服务器令牌刷新退出和重新登录失败分类为认证刷新错误,这样用户会收到重新认证指导而不是原始运行时故障。 - Codex startup:在插件自动启用、启动计划和 doctor 安装修复期间,将可选配置的 OpenAI agent 模型视为 Codex 运行时需求,这样 Anthropic 主配置仍然可以干净地切换到 OpenAI/Codex。 - Agents:在将工具返回的媒体合并到最终回复时保留源回复投递元数据,保持仅消息工具回复可投递和镜像。感谢 @pashpashpash 和 @vincentkoc。 - Replies:在后续、心跳、cron、ACP 和块流投递路径中,将富呈现、交互控件和渠道原生负载数据视为出站内容,防止仅卡片/按钮回复被当作空内容丢弃。 - WebChat/TUI:将 Codex `tools.message` 源回复路由到活跃的内部 UI 回合并镜像到会话历史,这样仅消息工具 harness 回复(包括富呈现和仅按钮回复)不再消失,同时 WebChat 和 TUI 保持为不可定位的出站渠道。(#81586) 感谢 @pashpashpash。 - Replies:即使启用了块流合并,也投递纯富文本块回复,防止卡片和按钮负载被文本合并器丢弃。感谢 @pashpashpash。 - macOS/companion:在首次使用直接 `wss://` 网关证书固定之前要求系统 TLS 信任,并遵守 `gateway.remote.tlsFingerprint` 作为远程节点模式会话的显式固定,这样当 macOS 无法信任证书时,新端点会在未带外配置时关闭。修复了 #50642。感谢 @BunsDev。 - Update:在更新时修复和重启写入之前快照配置,通过 doctor 清理保留插件安装记录,并防止更新时配置大小下降阻塞更新,同时将用户指向更新前备份。修复了 #80077。(#80257) 感谢 @Jerry-Xin 和 @vincentkoc。 - Sessions/status:在 `openclaw sessions` 和状态输出中,将 ACP 生成子会话分类为 `kind: "spawn-child"` 而不是 `"direct"`;将重复的会话类型分类器提取到共享助手 (`src/sessions/classify-session-kind.ts`) 中,以便两个表面保持同步。修复了目录 #19。(#79544) - Sessions/Gateway:在 `openclaw sessions --json`、`openclaw status` 和 Gateway 会话 RPC 响应中为 ACP 控制平面会话行报告 `agentRuntime.id: "acpx"`(或存储的后端 id)以及 `source: "session-key"`,而不是错误的 `"auto"` / `"pi"` 隐式回退。修复了目录 #18。(#79550) - Telegram:在旋转到真实答案之前删除仅工具进度气泡草案,防止流式回复中出现孤立进度消息。 - Codex app-server:保持每个 agent 的 `CODEX_HOME` 隔离而不默认重写 `HOME`,这样 Codex 运行的子进程仍然可以找到正常的用户主目录配置、令牌和 CLI 状态,除非启动显式覆盖 `HOME`。感谢 @pashpashpash。 - iMessage:停止在仅媒体原生图片发送中发送可见的 `<media:image>` 占位符文本,同时保留防止自我回显重复回复的内部回显键。(#81209) 感谢 @homer-byte。 - Agents/sessions:在首次 `sessions_send` 或网关发送之前创建已配置的 agent 主会话,这样当目标 agent 尚未启动时,agent 间的消息不再失败。 - gateway:将 Talk 会话作用域传递给解析器 [AI]。(#81379) 感谢 @pgondhi987。 - Gateway protocol:要求 v4 客户端和流式显式聊天 `deltaText`/`replace` 帧,以便 SDK 客户端可以在没有本地 diff 的情况下消费助手更新。(#80725) 感谢 @samzong。 - GitHub Copilot:在图像理解请求中交换 OAuth 令牌以获取 Copilot API 令牌,并通过 Chat Completions 路由 Gemini 图像负载,修复了 Copilot Gemini 图像描述。(#80393, #80442) 感谢 @afunnyhy。 - Gateway:隐藏挂起的节点配对命令、能力和权限直到批准,并在配对发生变化时刷新实时批准的表面。(#80741) 感谢 @samzong。 - Plugins/Feishu/WhatsApp/Line:在读取下载流时强制实施入站媒体大小上限,避免完全缓冲过大的附件。(#81044, #81050) 感谢 @samzong。 - Plugins/install:将安装时代码安全检查限制为插件拥有的运行时入口点,同时保留依赖清单拒绝列表检查,这样具有大依赖树的受信任包不再因第三方运行时内部而被阻塞或警告。 - Config:集中序列化并重试语义配置变更,使并发命令可以重新基础安全更改,而不是覆盖或手动实现命令本地重试循环。(#76601) - Installer:在解析发布引用之前,对现有的 git 检出遵守 `--no-git-update`,防止已固定的源码安装在重新安装时移动。 - Plugins/install:当已安装的插件对等依赖范围发生变化时,刷新 OpenClaw 管理的对等依赖固定,同时保留用户拥有的依赖固定。 - 要求对设置代码设备配对进行批准 [AI]。(#81292) 感谢 @pgondhi987。 - Plugins/install:在后来的插件安装或更新重新计算共享依赖树时,保留托管 npm 根目录中的第三方对等依赖。感谢 @shakkernerd。 - Plugins/memory:在重复解析期间,优先使用 npm 安装的 memory-lancedb 插件而不是捆绑的回退,使托管安装后 Active Memory 的 `memory_recall` 工具仍然可见。修复了 #81193。感谢 @julio-arcila。 - Plugins/uninstall:在删除其拥有的 npm 插件后,修剪托管的第三方对等依赖,而不因对等修剪失败而阻塞插件清理。 - Docker:固定设置时容器路径,使陈旧的主机 `.env` OpenClaw 路径不会泄漏到 Linux 容器中。修复了 #80381。(#81105) 感谢 @brokemac79。 - Channels/WeCom:刷新官方引导安装到 `@wecom/[email protected]`,并更新现有的托管 npm 安装而不是因包目录失败。修复了 #79884。(#80390) 感谢 @brokemac79。 - Anthropic:在会话旋转后,从有界的 OpenClaw 转录历史中重新播种 Claude CLI 新会话重试,防止对话遗忘。修复了 #80905。(#80934) 感谢 @bitloi。 - 要求显式浏览器设备配对 [AI]。(#81289) 感谢 @pgondhi987。 - 要求在代理作用域访问之前进行 Control UI 配对 [AI]。(#81288) 感谢 @pgondhi987。 - Installer:对于 git 安装,遵守 `--version` 并从检入的锁文件安装,防止最近的依赖固定导致 pnpm 的最低发布年龄门在标签安装时触发。 - Agents:通过进程内 agent 调度器投递同进程子 agent 完成交接,而不是打开 Gateway RPC 环回。 - 强化受信任代理源验证 [AI]。(#81290) 感谢 @pgondhi987。 - Agents:在提供者提交之前,向数组工具参数添加宽松的项目模式,防止 OpenAI 兼容的模式验证拒绝省略 `items` 的插件工具。修复了 #81175。(#81217) 感谢 @JARVIS-Glasses。 - Agents:通过配置文件轮换和配置的模型回退升级 LLM 空闲看门狗超时,而不是在静默模型流后使 agent 回合卡住。修复了 #76877。(#80449) 感谢 @jimdawdy-hub。 - Discord voice:将 OpenAI Realtime 启动认证失败视为致命错误,抑制重复的实时错误日志,并阻止 autoJoin 在凭据修复之前重试相同的损坏语音频道。 - ACPX:停止将不受支持的超时配置选项转发给 Claude ACP,同时保留 OpenClaw 自己的回合超时。(#80812) 感谢 @sxxtony。 - Session transcripts:在集中的 JSONL 追加路径中编辑敏感消息内容,使 CLI 回合、网关转录注入、转录镜像和受保护的工具结果使用相同的已配置编辑行为。修复了 #73565。参考 #73563。(#79645) 感谢 @Ziy1-Tan。 - Channels/iMessage:当用户粘贴 URL 时,忽略 Apple 链接预览插件负载附件,保留 URL 文本同时避免幻影媒体上下文。(#79374) 感谢 @homer-byte。 - Telegram:仅从 `getUpdates` 存活检测轮询停滞,这样出站 API 调用不再掩盖死亡入站轮询;在传输重建后记录轮询周期开始。修复了 #78473。 - 修复:在安装期间扫描插件运行时条目 [AI]。(#80998) 感谢 @pgondhi987。 - 修复(plugins):扫描已安装依赖的运行时代码 [AI]。(#81066) 感谢 @pgondhi987。 - 继承委托会话的工具限制 [AI]。(#80979) 感谢 @pgondhi987。 - Telegram:丢弃无法关联到当前机器人令牌的遗留长轮询更新偏移量,这样令牌轮换不再导致机器人静默跳过新消息。(#80671) 感谢 @sxxtony。 - browser:对 act 交互强制实施导航检查 [AI]。(#81070) 感谢 @pgondhi987。 - 验证节点执行事件来源 [AI]。(#81071) 感谢 @pgondhi987。 - Gateway:保持活跃回复运行对卡住会话诊断可见,并清除无活跃工作恢复状态,防止在压缩或工具故障后出现陈旧的排队通道。修复了 #80677。(#81302) - Codex app-server:轮换不兼容的上下文引擎管理的原生线程,使 Lossless 管理的会话不会恢复陈旧隐藏的 Codex 历史。(#81223) 感谢 @jalehman。 - Codex cron:在工作空间引导或内存审查之前执行计划命令式自动化负载,保留现有的独立 cron 作业在 Codex harness 迁移后保持不变。(#81510) 感谢 @jalehman。 - Plugin LLM completions:对规范 OpenAI 模型引用遵守 Codex agent 运行时策略,使上下文引擎摘要器可以使用 Codex OAuth 而不是要求直接的 `OPENAI_API_KEY` 认证。(#81511) 感谢 @jalehman。 - Gateway/OpenAI HTTP:对于无效采样参数和提供者验证失败,返回 OpenAI 兼容的 400 错误,而不是将它们折叠为 500 错误。(#81275) 感谢 @Lellansin。 - Telegram:将插件和技能命令描述本地化发布到原生命令菜单,同时过滤不受支持的语言环境代码并保留 Telegram 命令限制。(#81351) 感谢 @jzakirov。 - 限制钩子 CLI 工具权限 [AI]。(#81065) 感谢 @pgondhi987。 - 要求管理员作用域用于节点设备令牌管理 [AI]。(#81067) 感谢 @pgondhi987。 - 限制聊天发送者允许列表匹配 [AI]。(#80898) 感谢 @pgondhi987。 - Update:在更新交接后的重启健康探测期间,抑制错误的新配置警告,同时保持未来版本突变守卫完整。(#78652) - Sessions:在写入转录之前编辑持久化的工具结果详情元数据,使诊断秘密不会在工具输出编辑后幸存。(#80444) 感谢 @nimbleenigma。 - Codex runtime:允许官方安装的 `@openclaw/codex` 包使用其私有任务运行时和 MCP 投射 SDK 助手,修复迁移后的 OpenAI/Codex beta 运行中的 `MODULE_NOT_FOUND`。 - Codex migration:使 Enter 在继续之前激活高亮复选框行,这样 `Skip for now` 和批量选择行即使在计划项目开始预选时也能工作。 - Codex harness:保持认证配置文件支持的媒体工具(如 `image_generate`)可用,即使 OpenAI 认证位于 agent 的认证配置文件存储中而不是环境变量中。 - WhatsApp/install:允许 Baileys 锁定的 libsignal git 子依赖在 pnpm 11 下工作,使源码安装和本地检查能够完成。 - 要求沙箱浏览器 CDP 中继的认证 [AI]。(#81002) 感谢 @pgondhi987。 - 修复:检测携带的执行命令形式 [AI]。(#81000) 感谢 @pgondhi987。 - 拒绝截断的执行批准命令 [AI]。(#81001) 感谢 @pgondhi987。 - 强制内联 shell 包装器负载匹配 [AI]。(#80978) 感谢 @pgondhi987。 - 修复(node-pairing):替换已更改的挂起请求 [AI]。(#80894) 感谢 @pgondhi987。 - 速率限制 Google Chat webhook 请求 [AI]。(#80974) 感谢 @pgondhi987。 - Docker:挂载认证配置文件密钥目录,使 OAuth 支持的认证配置文件在容器重建后幸存。(#80991) - Onboarding:接受 Codex 认证配置文件用于规范 OpenAI 模型检查,避免错误缺失认证警告。(#80913) 感谢 @rubencu。 - 修复(feishu):规范化 webhook 速率限制客户端密钥 [AI]。(#80975) 感谢 @pgondhi987。 - 修复(auth):防止引导配对作用域更改 [AI]。(#80976) 感谢 @pgondhi987。 - 验证 Control UI 环回重试端点 [AI]。(#80900) 感谢 @pgondhi987。 - 强化导出的 Markdown 链接渲染 [AI]。(#80902) 感谢 @pgondhi987。 - 修复(gateway):对广域 DNS-SD 遵守最小发现模式 [AI]。(#80903) 感谢 @pgondhi987。 - slack:强制实施反应通知策略 [AI]。(#80907) 感谢 @pgondhi987。 - 根据调用者上下文强制实施网关命令作用域 [AI]。(#80891) 感谢 @pgondhi987。 - Telegram/groups:在单账号设置中,将显式的空 `accounts.<id>.groups: {}` 映射视为与未定义相同,这样根 `channels.telegram.groups` 允许列表仍然适用,而不是在默认 `groupPolicy: "allowlist"` 下静默丢弃每个群组更新。多账号语义不变,因此每个账号的显式空组仍然可以作用域禁用单个账号而不影响其他账号;阻止任何账号所有群组的显式方式仍然是 `groupPolicy: "disabled"`。修复了 #79427。(#81030) 感谢 @kinjitakabe。 - Codex (app-server):将用户配置的 `mcp.servers` 投射到新的 Codex 线程配置中,匹配 codex-cli 运行时现有的 `-c mcp_servers=...` 行为,使 app-server 运行时 agent 看到与 CLI 运行时已经暴露的相同用户 MCP 服务器。插件策划的应用通过单独的 `apps` 配置补丁保持附加。修复了 #80814。感谢 @kinjitakabe。 - 强制实施 Slack 插件批准按钮授权 [AI]。(#80899) 感谢 @pgondhi987。 - 识别 PowerShell -ec 内联命令 [AI]。(#80893) 感谢 @pgondhi987。 - 修复(qqbot):授权批准按钮回调 [AI]。(#80892) 感谢 @pgondhi987。 - Telegram:在流式和持久化回复中渲染受支持的 HTML 标签,而不是显示字面标记。(#80977) - 清理可流式 MCP 重定向头 [AI]。(#80906) 感谢 @pgondhi987。 - 修复(memory-wiki):要求管理员作用域用于摄取 [AI]。(#80897) 感谢 @pgondhi987。 - memory-wiki:要求写入作用域用于 Obsidian 搜索 [AI]。(#80904) 感谢 @pgondhi987。 - WhatsApp/install:允许 Baileys 锁定的 libsignal git 子依赖在 pnpm 11 下工作,使源码安装和本地检查能够完成。 - WhatsApp:将该渠道外部化为 ClawHub/npm 插件,位于核心 npm 运行时包之外,并将 Baileys 升级到 `7.0.0-rc11`,使 libsignal 从注册表而不是 GitHub tarball 解析。 - WhatsApp:将可选的音频解码依赖本地化到外部插件,使核心 npm 安装不再拉取仅 WhatsApp 的媒体助手。 - Build:跳过已排除在构建条目之外的捆绑插件的复制元数据,防止更新/状态重建广告缺失的 QQ Bot 运行时文件。(#80925) - Control UI/sessions:在会话选择器下拉菜单中使用视觉 `└─ ` 前缀将子 agent 会话嵌套在其父会话下,使父子关系清晰。修复了 #77628。(#78623) 感谢 @chinar-amrutkar。 - Auto-reply:当配置的模型后端失败且回退未产生可见回复时,表面一个可见错误,同时保留有意的静默回合和仅副作用投递。(#80917) 感谢 @dutifulbob。 - Agents/exec:跳过子 agent 会话执行完成的冗余心跳唤醒,防止在父会话上产生虚假的 LLM 调用。修复了 #66748。(#66749) 感谢 @ggzeng。 - Provider streams:保持 OpenAI 兼容的 SSE 和 JSON 回退流在分割块上持续排空,并用有界的首个事件诊断使 Azure Responses 流失败而不是停滞。参考 #80926。(#80927) 感谢 @galiniliev 和 @CaptainTimon。 - Agents:将带有支持请求 ID 的通用提供者内部错误重写为用户友好的瞬时错误文本。(#49401) 感谢 @y471823206。 - WhatsApp:在关闭套接字之前完成处理挂起的去抖入站消息。(#81246) 感谢 @mcaxtr。 - CLI/commitments:将 `--json` 输出写入 stdout 而不是诊断日志,以便自动化可以解析承诺列表和驳回结果。(#81215) 感谢 @giodl73-repo。 - Update:允许 pnpm GitHub 源的 OpenClaw 更新批准 OpenClaw 包构建,使源码安装完成其 prepare/prepack 生命周期。(#81294) 感谢 @fuller-stack-dev。 - Telegram:在可见回复和持久化镜像中保留受支持的 HTML 标签,使格式化消息正确渲染而不是降级为转义文本。(#80977) 感谢 @obviyus。 - Plugins/runtime:将已弃用的运行时配置加载/写入警告归因于触发它们的插件 id 和源,使日志和插件 doctor 运行可操作。参考 #81394。(#81425) 感谢 @BKF-Gitty。 - Agents/cron:即使它数值上等于 `agents.defaults.timeoutSeconds`,也尊重 cron 负载的显式 `timeoutSeconds` 用于 LLM 空闲看门狗,保留显式的每次运行超时意图,并防止停滞的流式回复被截断到隐式的 120 秒上限。(#79426) 感谢 @legolaz8451。 - Codex app-server:在动态工具完成记账期间保持短的工具后完成看门狗武装,使嵌入式 Codex 运行快速失败并在 Codex 在工具结果后静默时释放其会话通道。(#81697) 感谢 @mbelinky。 ### 变更 - Gateway/OpenAI HTTP:在入站 `/v1/chat/completions` 请求上遵守 `max_completion_tokens` 和 `max_tokens`,使客户端提供的令牌上限通过 `streamParams.maxTokens` 到达上游提供者,当两者都发送时 `max_completion_tokens` 优先。感谢 @Lellansin。 - Models/OpenAI CLI auth:使 `openclaw models auth login --provider openai` 默认启动 ChatGPT/Codex 账号登录,而 `--method api-key` 仍然是显式的 OpenAI API 密钥设置路径。 - Google/Gemini:在显式 SDK OAuth 认证结果配置补丁内部规范化已退役的 Gemini 3 Pro Preview id,使提供者助手为 Gemini 3.1 测试发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在 SDK OAuth 认证结果默认配置补丁内部规范化已退役的 Gemini 3 Pro Preview id,使助手构建的提供者认证流为 Gemini 3.1 测试发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在写入配置之前,规范化直接 `openclaw models auth login --set-default` 提供者认证流返回的已退役 Gemini 3 Pro Preview id,使 Gemini 测试目标为 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在每个 agent 配置默认值和认证补丁中规范化已退役的 Gemini 3 Pro Preview id,使 agent 特定的发出配置继续目标为 `google/gemini-3.1-pro-preview`。 - Google/Gemini:当 API 密钥引导仅重新应用 agent 默认值时,在提供者目录行中规范化已退役的 Gemini 3 Pro Preview id,使发出的配置继续测试 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在 `config set` 突变输出中为 agent 覆盖和提供者目录行规范化已退役的 Gemini 3 Pro Preview id,使当前配置发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在 Google 向前兼容模型解析期间规范化提供者限定的已退役 Gemini 3 Pro Preview 引用,使发出的配置使用 `google/gemini-3.1-pro-preview` 进行 Gemini 3.1 测试。 - Google/Gemini:规范化代理前缀的已退役 Gemini 3 Pro Preview 目录行,使发出的配置使用 `google/gemini-3.1-pro-preview` 进行 Gemini 3.1 测试。 - Google/Gemini:在写入配置之前,在每个 agent 模型覆盖中规范化已退役的 Gemini 3 Pro Preview id,使 agent 特定的配置为 Gemini 3.1 测试发出 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在写入期间,在子 agent、心跳、压缩和子 agent 工具模型配置中规范化已退役的 Gemini 3 Pro Preview id,使当前配置继续发出 `google/gemini-3.1-pro-preview`。 - Docs/subagents:在子 agent 和配置参考中记录 `agents.defaults.subagents.announceTimeoutMs`。(#75509) 感谢 @akrimm702。 - Cron:添加直接 `cron.get`、`openclaw cron get <id>` 和 agent 工具 `get` 支持,用于按 id 检查一个存储的 cron 作业。(#75117) 感谢 @samzong。 - Agents/tools:添加每个发送者的工具策略,具有规范的渠道作用域发送者密钥,使操作员可以按请求者身份在全局、agent、群组、核心、捆绑和插件工具表面上限制危险工具。(#66933) 感谢 @JerranC。 - ACP:通过 ACP 会话列表和会话信息快照暴露 Gateway 会话谱系元数据,使客户端可以在没有私有 Gateway 侧通道的情况下渲染子 agent 图。(#73458) 感谢 @samzong。 - Channels/iMessage:添加 `openclaw channels status --channel <name>` 过滤并记录 BlueBubbles 到 imsg 的迁移路径,使操作员可以探测 iMessage 而不必启动两个渠道监视器。(#80706) 感谢 @omarshahine。 - CI:向 Plugin Prerelease 添加非阻塞的 `plugin-inspector-advisory` 工件,使发布运行捕获捆绑插件兼容性分类而不改变阻塞门。 - Runtime/Fly:从其运行时环境变量检测 Fly Machines 为容器环境,使网关绑定和 Bonjour 默认值与远程容器启动匹配。(#80209) 感谢 @liorb-mountapps。 - Providers/fal:将 GPT Image 2 和 Nano Banana 2 参考图像编辑请求路由到 `/edit` 并使用 `image_urls` 数组,使用 `aspect_ratio` 和 `resolution` 参数强制 NB2 编辑几何,将 Fal 编辑模式输入图像上限提升到 GPT Image 2 为 10 和 Nano Banana 2 为 14,并允许在编辑模式下使用宽高比提示。(#77295) 感谢 @leoge007。 - Control UI:当应用模块从未注册时显示纯 HTML 恢复面板,为空白仪表板页面提供重试路径和浏览器扩展故障排除链接。修复了 #44107。感谢 @BunsDev。 - Docs:将广泛的工具导航重命名为能力,保持自动化和 agent 协调作为章节,并使工具概述专注于工具、技能和插件。https://docs.openclaw.ai/tools - Build:为 promise、TypeScript 和运行时陷阱检查启用额外的低变更 oxlint 规则。 - Build:为聚焦、禁用、条件、钩子、匹配器和期望风险启用更严格的 Vitest 检查规则。 - Build:在共享格式化程序配置中固定显式 oxfmt 默认值,使格式化行为在升级中保持稳定。 - TypeScript:启用更严格的编译器检查,针对隐式返回、副作用导入、覆盖和未使用的生产代码。 - Logging:添加目标模型传输、负载、SSE 和代码模式诊断,并附带编辑的 URL 处理。 - Agents:允许 `session.agentToAgent.maxPingPongTurns` 最多 20,同时保持默认值为 5,用于更长的 agent 间回复链。修复了 #52382。(#52400) 感谢 @thirumaleshp。 - Agents:添加每个 agent 的 `tools.message.crossContext` 覆盖,使沙箱/公共 agent 可以将消息发送限制在当前对话,而不改变全局机器人策略。 - Agents:添加每个 agent 的 `tools.message.actions.allow` 覆盖,使沙箱/公共 agent 可以暴露和强制仅发送消息工具。 - Agents:从紧凑命令进度预览中省略沙箱工作空间标记,同时保持内部沙箱诊断不变。 - Agents:将进度草稿命令预览行加宽 50%,使 Discord 内联工具更新保留更多有用的命令上下文。 - Codex app-server:在有界回合中断后退役超时的应用服务器客户端,使 Discord agent 在尝试超时后不会重用 CPU 旋转的 Codex 进程。 - Codex app-server:默认将迁移的本机插件破坏性操作策略设置为启用,同时保留显式全局和每个插件 false 覆盖。 - Build:将工作空间包管理升级到 pnpm 11,并保持 Docker、安装、更新和发布工作流在 pnpm 11 配置表面上。(#79414) 感谢 @altaywtf。 - Build:使 Telegram QA 工作流和 git 源码安装与 pnpm 11 工作空间构建允许列表表面对齐。(#80588) 感谢 @altaywtf。 - Models:添加提供者级 `localService` 启动,用于按需本地模型服务器,在 OpenAI 兼容请求之前,包括一次性模型探测。 - Agents:修剪默认系统提示指导和仅发送消息工具模式,以减少提示令牌,同时保留 GPT-5 个性指导。 - Context:添加 `/context map` 以发送当前会话上下文贡献者的树图图像。(#79867) - Slack:为机器人 `chat.postMessage` 回复添加 `unfurlLinks` 和 `unfurlMedia` 配置,包括每个账号覆盖,这样 Slack 链接和媒体预览可以在没有工作空间范围设置的情况下被抑制。修复了 #48435。(#80145) 感谢 @esegev1 和 @HemantSudarshan。 - Slack:为文本和 Block Kit 线程回复添加显式 `replyBroadcast` 支持,使 agent 可以选择 Slack 的父频道 `reply_broadcast` 行为。(#64365) 感谢 @tony88331。 - Slack:在入站提示上下文中保留提及目标/源元数据,使 agent 可以区分直接机器人提及和提及其他人的隐式线程唤醒。修复了 #79025。(#75356) 感谢 @tmimmanuel。 - Slack:将原生 DM 频道 ID 的出站投递镜像路由规范化为对等用户会话,使对 `D...` 目标的 `message.send` 调用不会将相同的 Slack DM 线程分割成频道会话。修复了 #80091。(#80111) 感谢 @bek91。 - Plugin SDK:弃用存在至少一个月且没有捆绑扩展生产导入的公共子路径,保持遗留 barrel/test/zod 子路径包导出用于向后兼容,并在 SDK 表面报告中跟踪两组。 - Plugin SDK:弃用当前仅被一个或两个捆绑插件所有者使用的公共子路径,使其保持可导入态,同时将新插件代码引导到聚焦的共享 SDK 接缝或插件拥有的 API。 - Plugin SDK:在将 Chutes、GitHub Copilot 和 OpenAI Codex 认证流移回提供者拥有的模块后,删除特定所有者的 `provider-auth-login` 公共子路径。 - Plugin SDK:在将捆绑调用者移动到提供者拥有的模块后,从公共导出中删除提供者特定的模型、流和 xAI 兼容性助手。 - Plugin SDK:将运行时提供的活跃模型元数据暴露给本机插件工具工厂,用于诊断和插件拥有的策略决策。修复了 #77857。感谢 @jamiezigelbaum。 - QA/Mantis:添加 Telegram 实时 PR 证据自动化,使用 Convex 租赁的凭据、Crabbox 转录捕获、运动 GIF 预览和内联 PR 评论。 - QA/Mantis:添加 Telegram 桌面场景构建器,租赁 Crabbox、安装原生 Telegram Desktop、使用租赁的机器人凭据配置 OpenClaw Telegram 网关,并记录 VNC 截图/视频工件。 - Discord/voice:添加实时语音诊断,用于说话者回合、播放重置、插话检测和音频截断分析。 - Talk:添加 `talk.realtime.instructions`,使操作员可以附加实时语音风格指令,同时保留 OpenClaw 内置的 agent 咨询指导。(#79081) 感谢 @VACInc。 - Discord/voice:将测试和源码安装默认使用纯 JS `opusscript` 解码器,通过忽略可选的本地 `@discordjs/opus` 构建,避免在专门的语音性能通道之外进行慢速的本地 addon 编译。 - Discord/voice:添加一个选择性的本地 `@discordjs/opus` 安装脚本和解码器偏好,用于实时语音性能通道,而不向无关的 Docker/测试收取本地 addon 构建费用。 - Discord/voice:添加 `voice.allowedChannels` 以限制语音加入和机器人语音状态移动到已配置的频道,同时在未设置时保持开放语音行为。 - Gateway/skills:添加一个选择性的私有技能归档上传安装路径,由 `skills.install.allowUploadedArchives` 门控,使受信任的 Gateway 客户端仅在操作员显式启用代码安装表面时才能暂存和安装 zip 支持的技能。(#74430) 感谢 @samzong。 - Codex app-server:为 harness 线程启用 Codex 本机代码模式独占,使延迟的 OpenClaw 动态工具通过 Codex 自己的可搜索代码执行表面运行,而不是 PI 风格的包装器。 - Dependencies:刷新工作空间固定和补丁目标,包括 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 skill `0.3.6`、Aimock `1.19.5` 和 tsdown `0.22.0`。 - Dependencies:刷新工作空间固定,用于 Anthropic SDK、Smithy 共享 ini 加载、Playwright、YAML、Aimock、TypeScript 原生预览、Vitest、Oxlint/Oxfmt、Vite 和 pnpm 11.1.0。 - Dependencies:在捆绑包之间硬固定非对等直接依赖规范,并添加更改检查守卫,使运行时安装解析维护者测试的精确版本。 - Dependencies:将嵌入式 Pi 包移动到 `@earendil-works` 命名空间,刷新 Twitch Twurple 包,并将 `@openclaw/fs-safe` 从 GitHub 发布固定移动到已发布的 npm 包。 - Build:将 Testbox 更改检查委托通过 Crabbox,并删除 OpenClaw 特定的 Blacksmith Testbox 助手脚本。 - Agents/compaction:在嵌入式压缩和回合后运行时上下文中保留作用域后台 exec/process 会话引用,而不暴露来自无关作用域的会话。修复了 #79284。(#79307) 感谢 @TurboTheTurtle。 - Agents/process:告诉 agent 在发送交互式输入之前使用 `process log` 检查后台会话,并使用 `log`/`poll` 中的 `waitingForInput`/`stdinWritable` 提示。 - CLI/onboarding:改进设置、引导、配置和频道命令路径查找,使终端流程解释下一个有用的命令,而不是依赖简短的设置标签。 - Agents/Codex:删除可配置的 Codex 动态工具配置文件,使 Codex app-server 始终拥有工作空间、编辑、补丁、exec、process 和计划工具,同时 OpenClaw 集成工具保持可用。 - macOS app:将 Peekaboo 桥接依赖更新到 Peekaboo 3.0.0。 - Dependencies:刷新工作空间固定,并将 WhatsApp 插件从 `@whiskeysockets/baileys` 移动到 `baileys`,同时保持 `7.0.0-rc10` 运行时。 - Plugin SDK:在分组的会话命名空间下添加捆绑插件的会话动作、`sendSessionAttachment` 和 Cron 支持的 `scheduleSessionTurn`/标签清理。替换 #75578/#75581/#75588 和 #73384/#74483 的一部分。感谢 @100yenadmin。 - Plugin SDK/media-understanding:添加 `extractStructuredWithModel(...)` 以及可选的提供者端 `extractStructured(...)` 接缝,使受信任的插件可以通过提供者拥有的运行时(如 Codex)运行有界图像优先的结构化提取,并附带可选的补充文本上下文。 - Exec approvals:添加 `tools.exec.commandHighlighting`,使审批提示中的解析器派生命令高亮可以全局或按 agent 启用。(#79348) 感谢 @jesse-merhi。 - Codex app-server:将原生 Codex 子 agent 生成生命周期事件镜像到 Task Registry,使 app-server 子 agent 出现在任务/状态表面,而不依赖转录文本。(#79512) 感谢 @mbelinky。 ### 修复 - CLI/media:默认使用全块字符渲染终端二维码,使捆绑的 `qrcode` 终端渲染器不会在紧凑半块模式下产生密集的 ANSI 最后一行,这会在某些终端中破坏扫描。修复了 #77820。感谢 @KrasimirKralev。 - Agents/compaction:从排队运行的工作空间而不是运行进程的 cwd 读取压缩后的 AGENTS.md 刷新上下文,使 CLI 支持的后续回合在压缩后重新注入正确的工作空间启动规则。修复了 #70541。(#75532) 感谢 @vyctorbrzezowski。 - Agents/read tool:将超出 EOF 的正偏移量视为空范围而不是表面上游读取错误,使陈旧的分页游标不会崩溃工具调用,同时无关的读取失败仍然响亮的失败。修复了 #62466。(#75536) 感谢 @vyctorbrzezowski。 - Google/Gemini:规范化留在 Google API 密钥引导模型允许列表和回退中的已退役 Gemini 3 Pro Preview 引用,使设置发出的配置继续测试 `google/gemini-3.1-pro-preview` 而不是 `google/gemini-3-pro-preview`。 - Telegram/context:将选定的主题上下文绑定到活跃会话,使来自 `/new` 或 `/reset` 之前的消息不会重放到后面的回合中。(#80848) 感谢 @VACInc。 - Google/Gemini:在解析确切配置的代理提供者引用时规范化已退役的嵌套 Gemini 3 Pro Preview id,使 `kilocode/google/gemini-3-pro-preview` 解析为 `kilocode/google/gemini-3.1-pro-preview` 用于 Gemini 3.1 测试。 - CLI:从清理的输出字段中剥离通用的 OSC 终端转义负载,防止剪贴板/标题转义体泄漏到承诺表格和其他终端安全文本中。感谢 @shakkernerd。 - Codex app-server:按稳定的连接器 id 匹配连接器支持的插件批准请求,使启用的破坏性动作不再通过仅显示名称拒绝而落入。 - Build:将选定的构建实用程序 `tsx` 预加载替换为 Node 原生类型剥离,使 Node 26 构建路径不再发出 `DEP0205` 模块加载器弃用警告。(#78584) 感谢 @keshavbotagent。 - Media generation:当工具调用省略 `timeoutMs` 时,遵守配置的音乐和视频生成超时,与图像生成行为匹配。(#80687) - CLI/update/status:将 beta 频道插件回退和模型定价刷新失败标记为警告,使混合 beta/最新插件队列保持可见,而不使核心更新或 Gateway 可达性看起来失败。修复了 #80689。感谢 @BKF-Gitty。 - Doctor/plugins:在 `doctor --fix` 期间重新链接托管 npm 插件 `openclaw` 对等依赖,同时拒绝遵循插件包外部的包本地 `node_modules` 符号链接。(#77412) 感谢 @TheCrazyLex。 - iMessage:将入站 tapbacks 作为反应系统事件而不是普通消息路由,默认使用机器人创作消息通知,同时允许 `reactionNotifications: "off" | "own" | "all"` 覆盖。修复了 #60274;参考 #39031 和 #39322。感谢 @hyperclaw。 - Control UI/performance:将 Nodes 轮询作用域到活跃的 Nodes 选项卡,去抖陈旧的会话列表协调,并限制聊天端会话刷新,使长时间运行的仪表板避免后台重新加载抖动。感谢 @BunsDev。 - Plugins/channels:解释到达传统插件加载器的捆绑频道入口文件是设置运行时加载器不匹配而不是通用的缺失注册失败。感谢 @chinar-amrutkar。 - Plugins/session-end:为网关进程停止时仍然活跃的每个会话触发一个类型化的 `session_end` 插件钩子,附带原因 `shutdown`(或当预期重启时为 `restart`)。以前 SIGTERM/SIGINT/重启路径关闭网关而不枚举活跃会话,使下游 `session_end` 插件(例如 claude-mem)在重启间积累幽灵行。新的关闭终结器排空一个由 `session_start` 填充并由 replace / reset / delete / compaction 发射器遗忘的内存跟踪器,因此之前已终结的会话永远不会被双重触发。排空有 2 秒的总预算,因此慢速插件不能阻塞进程退出。向 `PluginHookSessionEndReason` 添加了 `"shutdown"` 和 `"restart"`。修复了 #57790。感谢 @pandadev66。 - Codex app-server:当 OpenClaw 沙箱活跃时,将 Codex 代码模式沙箱限制为工作空间写入,防止 Docker 网关套接字访问成为危险全访问的 Codex 回合。 - TUI:在网关断开连接和有界排空后,在 Ctrl+C/SIGINT 上立即退出,使终端拆卸不会滞留会话。修复了 #75379。(#75381) 感谢 @udaymanish6。 - Matrix:默认将出站 Markdown 表格转换为项目符号列表而不是围栏代码块。修复了 #78990。(#80890) 感谢 @kinjitakabe。 - Bonjour/Gateway:将活跃的 ciao 探测和新的名称冲突重命名视为进行中,使 mDNS 看门狗在重试之前等待探测解决,防止在 Windows、WSL 和其他多播敌对主机上快速重新广告循环。(#74778) 参考 #74242。感谢 @fuller-stack-dev。 - Providers/MiniMax:当消息转换将回合过滤为空负载时,发送最小的 Anthropic 兼容用户回退,使 MiniMax M2.7 在工具密集型会话后不再返回 `chat content is empty`。修复了 #74589。感谢 @neeravmakwana 和 @DerekEXS。 - Tools/media:在预构建内置媒体生成和 PDF 工具时,保留来自仅 `tools.alsoAllow` 策略的隐式允许所有语义,使配置的媒体工具变为活跃,而不强制 `tools.allow: ["*", ...]`。修复了 #77841。感谢 @trialanderrorstudios。 - Codex/Telegram:将代码模式工具进度与最终回复分离,用原生工具标签呈现桥接工具调用,并修复持久化缺失工具结果,以便更安全地进行后续回合。(#80663) 感谢 @jalehman。 - Memory/search:当元 `sqlite-vec` 包在全局安装中缺失时,直接加载特定平台的 `sqlite-vec-<platform>-<arch>` 变体,使向量召回在 `npm install -g openclaw@latest` 升级上继续工作,其中 optionalDependencies 只留下了平台变体在磁盘上。修复了 #77838。感谢 @corevibe555 和 @Simon2256928。 - Cron:在任务注册表中保持长时间手动 cron 运行活跃直到完成,防止在持久化恢复协调之前出现短暂的 `lost` 标记。修复了 #78233。(#78243) 感谢 @Feelw00。 - Doctor/GitHub CLI:当 GitHub 技能可用但 `gh` 认证位于与 agent 进程不同的操作员 HOME 下时,表面一个 `GH_CONFIG_DIR` 提示,而不警告已禁用或过滤的技能。修复了 #78063。(#78095) 感谢 @tmimmanuel。 - Gateway:在投递仍在进行中时,去重并发的 `send`、`poll` 和 `message.action` 请求,防止对相同的幂等键进行重复的出站工作。(#68341) 感谢 @thesomewhatyou。 - Cron:通过在强制 `target: "last"` 时丢弃继承的显式心跳目标,使主会话的 `systemEvent` 心跳唤醒保持在它们绑定的会话路径上,用于直接和排队唤醒路径。修复了 #73900。感谢 @richardmqq。 - Telegram:对视频媒体遵守强制文档投递,使 `--force-document` 将 MP4 作为文档而不是类型化视频发送。修复了 #80389。(#80405) 感谢 @jbetala7。 - Gateway:当 APNs 注册缺失时清除推测的节点唤醒状态,防止未注册或错误类型的节点 ID 保留唤醒节流条目。修复了 #68847。(#68848) 感谢 @Feelw00。 - Auto-reply:防止延迟的后续队列排空终结器删除在 `/stop` 后注册的替换队列,防止立即后续消息成为孤儿。修复了 #68838。(#68839) 感谢 @Feelw00。 - Feishu:将手动 App ID/App Secret 设置设为默认渠道绑定路径,同时保持 QR 扫码创建为可选的最佳努力流程,并为不响应二维码的国内飞书移动客户端记录手动回退。修复了 #80591。感谢 @wei-wei-zhao。 - Memory:通过压缩最旧的自动推广部分来限制梦想推广写入 `MEMORY.md`,同时保留用户创作的笔记,使活跃内存保持在引导预算以下。修复了 #73691。(#74088) 感谢 @YB0y。 - Telegram:在原生 `/status` 和 `/think` 菜单中显示已解析的思考默认值,同时保留显式的会话覆盖。(#80341) 感谢 @VACInc。 - Channels:根据活跃的回退快照缓存选定的频道注册表查找,使固定空的注册表在活跃注册表交换后刷新原生命令和别名路由。(#80333) 感谢 @samzong。 - Codex app-server:为隔离的 app-server harness 登录、刷新和 app 库存缓存键重用原生 Codex CLI OAuth,使 ChatGPT 认证的 Codex 运行不再回退到未认证的 OpenAI API 调用。(#79877) 感谢 @jeffjhunter。 - Gateway:将 `sessions.resolve` sessionId 和标签存储加载作用域到请求的 agent,使大型无关的 agent 存储不会为作用域查找而被解析。修复了 #51264。(#79474) 感谢 @samzong。 - Gateway:在符合条件的 WebSocket 和节点订阅者之间共享序列化的流式事件信封,同时保留每个客户端的序列号。(#80299) 感谢 @samzong。 - Gateway:合并重复的 `openclaw doctor` 服务配置面板,同时保留已拒绝修复的 `--force` 提示。修复了 #80287。(#78688) 感谢 @YB0y。 - Browser:在浏览器状态中报告 Chrome MCP 现有会话页面就绪状态,而不让状态探测超过客户端超时。修复了 #80268。(#80280) 感谢 @ai-hpc。 - WhatsApp:将开放阶段 Baileys 428 connectionClosed 通过 WhatsApp 重新连接策略路由,并保持打开后的 428 关闭可重试,使瞬态设置套接字关闭通过 WhatsApp 诊断重试,而不是作为裸 `channel exited` 错误逃逸。修复了 #75736;缓解了 #77443。感谢 @dataCenter430。 - Agents:为嵌入式运行禁用 Pi 的默认文件系统资源发现,同时保持 OpenClaw 内联扩展工厂活跃,避免首次 WhatsApp 触发的 agent 启动期间 Windows 事件循环停滞。修复了 #77443。感谢 @dataCenter430。 - Providers/self-hosted:从 `/props.default_generation_settings.n_ctx` 读取模型作用域的 llama.cpp 运行时上下文,同时保持顶层 `n_ctx` 作为回退,使会话预算反映加载的上下文窗口。修复了 #73664。(#74057) 感谢 @brokemac79。 - Memory:在读取 Markdown 文件之前,拒绝配置的额外内存路径中的符号链接目录组件。(#80331) 感谢 @samzong。 - Sessions/transcripts:将整个文件的 `readFile` 扫描替换为共享流助手(`streamSessionTranscriptLines` 和 `streamSessionTranscriptLinesReverse`),用于幂等查找、最新/尾部助手文本读取、投递镜像去重和压缩 fork 加载,使长时间运行的会话不再在内存中物化完整的转录。前向扫描使用 `readline` 在有界的 `createReadStream` 上;反向扫描从文件末尾读取有界块并解码完整的 JSONL 行(最新优先),无需固定的尾部上限。合成 200 MiB 转录:峰值 RSS 增量从 +252 MiB 下降到 +27 MiB,同时保留格式错误行容错和幂等键返回语义。修复了 #54296。感谢 @jack-stormentswe。 - Browser/CDP:从原始 CDP 和持久化 Playwright 标签选择中过滤浏览器内部目标,使导航打开真实的页面标签。修复了 #55734。感谢 @Demine4。 - WhatsApp:在处理新的入站 DM 之前,将热重载的 `dmPolicy` 和 `allowFrom` 设置应用到活跃的 Web 监听器。修复了 #80538。感谢 @Ampaskopi129。 - Plugins:让 `openclaw doctor --fix` 修复托管插件安装,其包入口点在本地状态移动后无法通过包目录边界验证。修复了 #80592。感谢 @wei-wei-zhao。 - Voice-call:将语音发起的 exec 批准后续恢复为内部非投递回合,而不是拒绝它们为 `unknown channel: voice`。修复了 #80540。感谢 @patrickmch。 - Control UI:在活跃聊天运行期间点击 Stop 时保留作曲家草稿,防止移动设备上的意外提示丢失。修复了 #80586。感谢 @KCALLC。 - Infra/retry:当可以遵守提示时,将抖动重试延迟保持在或高于服务器提供的 Retry-After 下限。修复了 #68541。(#68543) 感谢 @Feelw00。 - Docs:澄清 `/model provider/model` 是确切的会话路由,而重复的裸模型 id 仅在非会话覆盖路径上使用配置的回退顺序。参考 #80562。感谢 @gaodaabao。 - 编辑持久化的秘密形状负载 [AI]。(#79006) 感谢 @pgondhi987。 - Agents:将 `.openclaw/sandboxes` exec 工作目录在紧凑工具摘要中标记为沙箱运行,而不是显示完整路径。 - OpenAI Codex:表面浏览器 OAuth 和设备代码登录失败,而不是将被视为空成功认证结果。参考 #80363。 - CLI agents:将运行时唯一的当前回合发送者/回复上下文带入 CLI 模型提示,同时保持提示构建钩子输入和转录文本干净。 - Control UI:保持工作空间文件存在检查不会将 `fs-safe` stat 助手失败视为文件缺失,为现有的 Windows 工作空间文件恢复 Agents 文件状态。修复了 #79953。感谢 @lovelefeng-glitch。 - Microsoft Foundry:当 Azure 订阅提示返回的 id 不在启用的订阅列表中时,报告显式错误,而不是从不安全的订阅断言继续。(#62742) 感谢 @oliviareid-svg。 - 修复(matrix):门控基于名称的允许列表解析 [AI]。(#79007) 感谢 @pgondhi987。 - Slack:在新的线程会话中包含机器人自己的根/父消息,使线程内回复以用户正在回复的父文本到达 agent,而不是仅 `reply_to_id` 元数据。修复了 #79338。感谢 @sxxtony。 - Docker:使镜像构建保持在源 pnpm 工作空间策略上,使 pnpm 11 可以修剪生产依赖,而无需仅 Docker 的工作空间重写。 - Agents/compaction:恢复嵌入式压缩开始、完成和不完整结果的 info 级别网关日志。(#71961) 感谢 @rubencu。 - Telegram:通过共享渠道上下文路径构建回复感知的入站回合,使 agent 与当前消息内联看到当前回复目标。 - Telegram:恢复混合 JSON 数组和行分隔条目的遗留消息缓存文件,使重启的网关保留回复窗口上下文。(#80567) - Telegram:在消息被编辑时更新回复上下文缓存,使流式机器人回复在后面的 agent 上下文中以最终文本而不是第一稿出现。 - Skills/Windows:将压缩的技能提示位置规范化到前向斜杠,在 home 前缀压缩之后,使 Windows 技能路径对模型文件工具保持可读。(#52200) 感谢 @chienchandler。 - Control UI/Windows:更新 `@openclaw/fs-safe`,使 agent 工作空间文件存在检查在 Windows 上正确回退,防止现有的 AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md 和 MEMORY.md 文件显示为缺失。修复了 #79953。感谢 @lovelefeng-glitch。 - Memory:为无法管理 Gateway cron 的普通 cron 和心跳钩子上下文跳过托管梦想 cron 协调警告。(#77027) 感谢 @rubencu。 - Cron:将 Codex app-server 回合接受、CLI 进程生成和工具开始视为执行里程碑,防止隔离运行在工作已经开始后触发早期启动看门狗。 - Codex app-server:将当前回合的 `<turn_aborted>` 原始标记视为终结,使中断的原生工具回合释放 Discord agent 会话,而不是等待外部超时。 - Yuanbao:将 `openclaw-plugin-yuanbao` 升级到 2.13.1,以支持群聊的 `sourceReplyDeliveryMode: "automatic"`。(#79814) 感谢 @loongfay。 - Memory:使 `memory_search` 结果的 `corpus` 标签与命中源对齐,使会话转录命中表面为 `sessions`,内存文件命中保持 `memory`。修复了 #72885。(#71898, #72886) 感谢 @rubencu。 - Codex app-server:默认将原生插件应用工具批准设置为自动,使非破坏性读取工具在破坏性动作禁用时运行。 - Plugins:允许全局扩展目录中未跟踪的本地源插件加载 TypeScript 包条目,同时保持托管安装对编译的运行时输出严格。修复了 #80503。感谢 @Kaspre。 - Google/Gemini:在将清单目录行转换为发出的提供者配置时规范化已退役的嵌套 Gemini 3 Pro Preview id,使测试使用 `google/gemini-3.1-pro-preview` 而不是 `google/gemini-3-pro-preview`。 - Google/Gemini:在保存的模型允许列表和回退链中规范化已退役的嵌套 Gemini 3 Pro Preview id,使代理路由如 `openrouter/google/gemini-3-pro-preview` 持久化为 Gemini 3.1 Pro Preview。 - Google/Gemini:在配置的代理/提供者认证模型目录中规范化已退役的嵌套 Gemini 3 Pro Preview id,使重新生成的配置继续测试 `google/gemini-3.1-pro-preview` 而不是 `google/gemini-3-pro-preview`。 - Google/Gemini:在引导提供者目录预设时规范化已退役的嵌套 Gemini 3 Pro Preview id,使设置发出的代理配置测试 `google/gemini-3.1-pro-preview` 而不是 `google/gemini-3-pro-preview`。 - Google/Gemini:在通用配置写入期间,在提供者目录行中规范化已退役的 Gemini 3 Pro Preview id,使无关的配置更改继续测试 `google/gemini-3.1-pro-preview`。 - Models:对于具有重复模型 id 的覆盖选择,将配置的回退链保持在配置的主模型之前,防止回退跳转到错误的提供者。修复了 #80562。 - Native apps:广告 Gateway 协议兼容性范围,使聊天和节点会话可以在添加 v4 客户端更新后连接到 v3 网关。 - Gateway/agents:使陈旧的 `sessions_send` ACP 管理器和 `web_fetch` 运行时块在包更新后保持可导入态,防止实时网关在重启前中断。修复了 #78804。感谢 @Gomesy72。 - Gateway/install:在 `openclaw gateway install` 中保留服务环境值源元数据,使 systemd 重新安装路径使环境文件支持的秘密远离内联单元元数据。参考 #77406, #77427。感谢 @stainlu 和 @brokemac79。 - Auto-reply/reset:在裸 `/new` 和 `/reset` 模型提示中包含入站发送者上下文,同时使启动指令远离转录提示,使 agent 在第一次重置回合时看到发送者身份。修复了 #77360。感谢 @srb11e。 - Gateway:避免在附加后启动期间进行同步重启哨兵状态探测,防止慢速 Windows 或重定向的状态目录阻塞渠道回合。修复了 #79264。感谢 @liyi58。 - Agents/auth:通过一次锁定的存储写入更新成功的模型认证配置文件状态,减少重复 `auth-profiles.json` 保存导致的模型后回复延迟。感谢 @mcaxtr。 - Agents/image:即使 `agents.defaults.imageModel` 未设置,也遵守显式的 `image` 工具模型覆盖,为配置的多模态提供者恢复一次性视觉调用。修复了 #79341。感谢 @haumanto。 - Doctor/update:在非交互式更新模式服务修复期间保持实时 systemd 网关单元不变,使更新时 doctor 不会静默覆盖操作员拥有的单元指令。参考 #80462。 - Update:在验证精确 npm 包安装目标时接受可选的起始 `v` 前缀,使 `openclaw update --tag v2026...` 在安装匹配的裸包版本后不会回滚。参考 #74069;#80480。感谢 @Kaspre。 - Doctor:将 `plugins.deny` 中的缺失插件 id 视为陈旧配置警告而不是致命验证错误,并在陈旧插件清理期间删除它们,使更新修复不会为仅拒绝的陈旧插件引用恢复最后已知良好的配置。参考 #77802。感谢 @Kaspre。 - Codex app-server:通过上下文引擎提示投射保留提示本地的当前回合上下文,使被回复的 Telegram 消息对 Codex 模型输入保持可见。 - Telegram:通过网关消息动作传递 agent 作用域的媒体根目录,使来自活跃 agent 的工作空间本地媒体不会被拒绝为跨 agent 访问。感谢 @frankekn。 - CLI/gateway:使 `gateway status --deep` 具有插件感知能力,使配置的插件清单警告(包括缺失的频道配置元数据)在安装和更新烟雾检查期间保持可见。 - Doctor/status:澄清网关令牌源冲突警告,并在托管 Gateway 服务凭据上下文中抑制它们。 - Feishu:接受操作员身份嵌套在 `operator.user_id` 下的 Schema 2 卡片回调,使卡片按钮分发而不是作为格式错误被丢弃。修复了 #71670。(#71787) 感谢 @rubencu。 - Feishu:当普通群组引用回复目标一条已撤回或缺失的消息时,回退到顶级群组发送,防止回复静默消失,同时保留原生主题安全性。修复了 #79349。感谢 @arlen8411。 - Doctor:当配置的默认 agent 不是 `main` 时,停止将实时兼容 agent 目录标记为孤儿。修复了 #74313。(#74438) 感谢 @carlos4s。 - Auth/Claude CLI:将更鲜的管理外部 CLI OAuth 凭据持久化回 `auth-profiles.json`,防止陈旧的 `anthropic:claude-cli` 配置文件重复引导并淹没调试日志。修复了 #80129。感谢 @Caulderein。 - Context:仅从实际运行上下文渲染 `/context map`,并持久化 Codex app-server 运行报告,而不将延迟的工具搜索架构计为提示加载的工具架构。 - Codex app-server:向诊断报告 Codex 原生工具执行,使长时间运行的原生 `bash`、web、file 和 MCP 工具对看门狗不再像陈旧的嵌入式运行。(#80217) - Codex app-server:在订阅使用限制失败后刷新 Codex 账号速率限制,使 Discord 和其他频道回复可以显示下次重置时间,而不是说 Codex 未返回任何内容。感谢 @pashpashpash。 - Agents/auth:让 Codex 支持的 OpenAI agent 回合使用 `auth.order.openai` 条目中的 Codex 兼容 OAuth 和 API 密钥配置文件,同时保持现有的 `openai-codex` 配置文件排序有效。 - Codex app-server:为本机钩子中继未覆盖的原生工具完成发出异步 `after_tool_call` 观察,使可观测性插件可以记录 Codex 原生工具。(#80372) 感谢 @VACInc。 - Tasks:通过请求者会话路由群组和频道任务完成,使父 agent 可以发送可见摘要,而不是在通用任务状态行停止。修复了 #77251。(#77365) 感谢 @funmerlin。 - Telegram:在渲染的回复中保留手动缩进的项目符号块和后续编号部分之间的空行。修复了 #76998。感谢 @evgyur。 - Agents/sandbox:允许只读沙箱会话读取 `/agent` 工作空间挂载,同时保持写入/编辑/apply_patch 仅工作空间保护,为 `workspaceAccess: "ro"` 恢复 `read /agent/...`。修复了 #39497。感谢 @stainlu 和 @teosborne。 - Slack:通过草稿预览发送传递配置的 agent 身份,使部分流式回复在初始 Slack 消息上保留自定义用户名/头像。修复了 #38235。(#38237) 感谢 @lacymorrow。 - Slack:支持 `allowBots: "mentions"` 用于提及接收机器人的机器人创作消息,匹配记录的 Discord 样式模式而不接受每条机器人消息。修复了 #43587。(#43588) 感谢 @raw34。 - Slack:当入站 DM 文件事件省略或带有陈旧附件 URL 时,使用 `files.info` 刷新私有文件 URL,防止文件附件在媒体水化之前被丢弃。修复了 #50129。(#50200) 感谢 @smartchainark。 - Slack:添加作用域消息工具格式化提示,使 agent 对纯文本发送使用 Markdown,对 Block Kit 字段使用直接的 mrkdwn。修复了 #34609。(#50979) 感谢 @carrotRakko。 - Slack:独立于消息时间戳描述 `download-file` 文件 id,并在 agent 传递 `messageId` 而不是 `fileId` 时返回有针对性的恢复错误。(#74155) 感谢 @jarvis-ai-gregmoser。 - Slack:保留已处理的房间消息用于 `requireMention=false` 频道,使始终在线的 Slack 房间在回合之间保留最近的对话上下文。(#38658) 感谢 @syedamaann。 - Slack:为直接出站发送编译交互式回复指令,而不绕过 `interactiveReplies` 能力门,为 Slack CLI 和 cron 投递保留 Block Kit。(#78220) 感谢 @kazamak。 - Slack:将 DM 最后路由更新作用域到活跃的非 main DM 会话,包括线程化 DM 回合,使隔离的 Slack DM 会话不会覆盖共享的主路由。(#73085) 感谢 @clawSean。 - Slack/ACP:当没有运行时绑定时,通过配置的 ACP 绑定路由 Slack 频道和 DM 消息,使绑定的线程回复固定到持久化 ACP 会话,并丢弃不可用的配置目标而不是回退到 `main`。(#73101) 感谢 @Raasl。 - Slack:将未解析的线程回复标记为不明确并跳过它们,而不是将它们视为根频道消息,使线程延续保持在 SDK 支持的参与存储上。(#75630) 感谢 @soichiyo。 - Slack:让同频道消息工具发送可以选择退出继承的线程上下文,使用 `topLevel: true` 或 `threadId: null`,允许 agent 从 Slack 线程内部发布新的父频道消息。修复了 #79807。感谢 @vexclawx31。 - Slack:偏好完整的富文本块内容而不是截断的套接字模式消息预览,使长的入站 Slack 消息完整到达 agent。修复了 #79027。感谢 @BobAccentWebDev。 - Slack:在设置、探测、流式和回复日志中包含结构化的 Slack API 错误详情,同时保留令牌编辑。(#53966) 感谢 @deucemask。 - Gateway/agents:当活跃运行排队失败时保留结构化原因,并弃用遗留的布尔排队助手,使转向和子 agent 唤醒诊断区分已完成、非流式和正在压缩的运行。修复了 #80156。感谢 @markus-lassfolk。 - System events:在队列中去重带键事件,同时保留无键、投递路由和信任边界事件身份。(#73040) 感谢 @statxc。 - Agents/UI:通过隐藏冗余的 shell 工具名称、用短上下文标记替换已知工作空间路径,以及为紧凑命令行保留 Discord 痕迹清理来压缩 exec 和工具进度行。 - ACPX:默认运行并等待嵌入式 ACP 后端启动探测,使网关 `ready` 信号不再在 acpx 运行时可用或报告探测失败之前触发;设置 `OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=0` 以恢复延迟启动。修复了 #79596。感谢 @bzelones。 - Gateway/status:将模型定价引导和刷新失败表面为降级健康/状态警告,同时保持 Gateway 存活健康。修复了 #79599。感谢 @bzelones。 - OpenAI-compatible models:默认从重放的 Chat Completions 历史中剥离先前的助手推理字段,防止 oMLX/vLLM Qwen 后续回合因陈旧的 `reasoning` 负载而拒绝或停滞。修复了 #46637。感谢 @zipzagster 和 @lexhoefsloot。 - CLI/onboarding:为非 Azure 自定义提供者提供安全的生成上下文窗口,并修复遗留的 4k 向导条目而不覆盖显式有效的较小模型限制,防止第一回合压缩循环。修复了 #79428。(#79911) 感谢 @Jefsky。 - OpenAI-compatible models:添加 `compat.strictMessageKeys`,将 Chat Completions 重放消息剥离为 `role` 和 `content`,用于拒绝 OpenAI 样式工具和元数据键的严格提供者。修复了 #50374。感谢 @choutos。 - Bedrock Mantle:添加 `plugins.entries.amazon-bedrock-mantle.config.discovery.enabled=false` 以抑制自动 Mantle 发现和 IAM 承载令牌生成,同时保持插件启用。修复了 #67288。感谢 @kanekoh。 - Ollama:除非显式配置了 `params.num_ctx`,否则停止原生 `/api/chat` 请求将目录 `contextWindow` 或 `maxTokens` 复制到 `options.num_ctx`,避免本地大上下文模型上病态提示摄取延迟。修复了 #62267。感谢 @BenSHPD。 - Ollama:为通过本地 Ollama 主机路由的 `*:cloud` 模型保持模型空闲看门狗启用,使云支持的工具循环停滞可见地故障转移,而不是继承本地模型的无空闲行为。修复了 #79350。感谢 @geek111。 - Voice/Ollama:遵守路由语音 agent 的 `tools.allow` 用于经典嵌入式语音响应,包括空允许列表,使无工具的 Ollama agent 不会收到工具模式。修复了 #79506。感谢 @donkeykong91。 - Agents/doctor:当频道路由的 agent 无法调用 `message` 工具时发出警告,使操作员可以在显式频道动作(如附件或线程回复)失败之前修复工具策略不匹配。参考 #80128。感谢 @jeffjhunterai。 - Gateway:在首次进程内重启循环启动后从磁盘重新读取配置,防止 SIGUSR1 重启重用陈旧的启动快照并丢弃启动后写入的配置。修复了 #79947。感谢 @TheLevti。 - Codex app-server:从 Codex `savedPath` 事件将原生图像生成输出作为回复媒体投递,使空白文本图像生成回合仍然附加生成的文件。感谢 @keshavbotagent。 - Network/SSRF:当双栈主机也发布 AAAA 记录时,保持固定的自动 DNS 查找在 IPv4 上,并将 `EADDRNOTAVAIL` 视为瞬时网关网络故障而不是致命崩溃。修复了 #80078。感谢 @takamasa-aiso。 - Control UI:在 Sessions 表中显示紧凑的单行实时/空闲/终结运行状态徽章,并将活跃分钟过滤器重命名为其更新在指定时间内的含义。修复了 #78307。感谢 @BunsDev。 - Control UI:按 agent 限定聊天会话列表刷新,并跳过仅磁盘的 agent 存储发现用于仅配置列表,防止首次消息后会话切换在大型 Windows 存储上停滞。修复了 #79675。感谢 @lovelefeng-glitch, @BunsDev。 - Control UI:允许 Appearance tweakcn 主题导入通过服务的 CSP,使浏览器本地自定义主题链接不再因 `connect-src` 违规而失败。修复了 #78504。感谢 @BunsDev。 - Control UI/config:删除表单在插件启用开关在保存前被还原时自动添加的插件允许列表条目,使还原可见开关清除脏状态而不持久化意外的允许列表更改。(#78329) 感谢 @samzong。 - Gateway/mobile:在交接重新连接时重用引导发布的设备令牌作用域,并单独表面设备令牌作用域不匹配与令牌不匹配,同时保留完整的共享令牌仪表板/原生会话。修复了 #79292。感谢 @BunsDev。 - Media/host-read:在共享的主机本地媒体验证器中允许缓冲区验证的 gzip、tar 和 7z 存档,与 ZIP 和文档附件一起。 - Plugins/install:在 npm 的 `Invalid comparator: npm:` 失败后,不带 npm 别名覆盖重试托管 npm 插件安装,使较旧的 npm 版本可以安装官方插件而不是中止。(#80539) 感谢 @rubencu。 - Plugins/doctor:当插件诊断指向已删除的源路径时,使持久化插件注册表快照失效,使 `openclaw doctor` 在本地扩展被托管 npm 插件替换后不再重复陈旧警告。修复了 #80087。(#80134) 感谢 @hclsys。 - Doctor/OpenAI Codex:在自动修复遗留的 `openai-codex/*` 模型引用为规范的 `openai/*` 时保留 Codex 认证意图,通过添加提供者/模型作用域的 Codex 运行时策略,防止修复后的配置落到直接的 OpenAI API 密钥认证。修复了 #78533 和 #78570。感谢 @superck110 和 @Azmodump。 - CLI/agents:从 `sendDurableMessageBatch` 在 `deliverAgentCommandResult` 和 `openclaw agent --json --deliver` 中表面持久化消息投递状态,将抑制的钩子结果作为终结的无重试结果保留,同时为自动化暴露部分和失败发送。取代 #53961 和 #57755。感谢 @Kaspre。 - Agents:在提供者流设置仍在挂起时应用 LLM 空闲看门狗,防止静默流前模型挂起等待完整的 agent 超时。 - Cron:让隔离的自我清理运行检查自己的作业运行历史,同时保持其他 cron 作业和突变动作阻塞。修复了 #80019。感谢 @hclsys。 - Cron:报告隔离的 agent 回合设置和前模型停滞,使用阶段特定的超时错误,而不是在没有模型调用开始时等待完整的作业预算。修复了 #74803。感谢 @jeffsteinbok-openclaw 和 @dgkim311。 - CLI/plugins:将 plugins CLI 元数据之外的任意未知子命令视为正常的未知命令,而不是建议 `plugins.allow`,同时为真正的插件命令根保留允许列表指导。修复了 #80109。(#80123) 感谢 @kagura-agent。 - CLI/config:持久化等于运行时默认值的显式 `config set` 和 `config patch` 值,而不是报告成功同时丢弃它们。修复了 #79856。(#80106) 感谢 @abodanty 和 @hclsys。 - OpenAI/realtime voice:接受 Codex 兼容的遗留音频和转录事件别名,使提供者协议漂移不会丢弃助手音频或字幕。 - Discord/voice:使默认 agent 代理实时会话在强制 OpenClaw 咨询答案之前不会自动发言填充,在实时响应完成后完成 Discord 播放,并排队后续精确语音答案直到播放空闲,以避免句中被替换。 - Gateway:为格式错误的编码会话杀死 HTTP 路径返回确定性的 `400 invalid_request_error` 响应,而不是让路由形状的请求落到后面的 Gateway 处理器。(#72439) 感谢 @rubencu。 - Control UI:从 `/__openclaw__/` SPA 路由提供根 PWA 和收藏夹图标资源,使标签图标、安装元数据和服务工作者在内部导航后不会 404。修复了 #80072。感谢 @CodeNovice2017。 - Exec/safe bins:在不区分大小写的文件系统上使用路径特定的大小写折叠比较受信任的安全 bin 目录,使 Windows 和默认 macOS 路径匹配而不削弱区分大小写的挂载。(#42131) 感谢 @hkochar。 - OpenAI/realtime voice:本地遵守禁用的输入音频中断,使服务器 VAD 语音开始事件在操作员设置 `interruptResponseOnInputAudio: false` 后不会清除 Discord 播放。 - Telegram:保持无响应的 DM 回合安静,而不是将它们重写为可见的静默回复闲聊。修复了 #78188。(#78228) 感谢 @Beandon13。 - Telegram:在原始回调回退之前处理托管的选择按钮回调,同时保留包含分隔符的选项值,例如 `env|prod`。(#79816) 感谢 @moeedahmed。 - OpenAI-compatible models:处理返回给流式请求的 JSON 聊天完成体,保留推理字段和可见文本,而不是完成一个空的 agent 回合。修复了 #77870。 - Discord/models:在加载路由、模型和偏好数据之前延迟模型选择器组件交互,防止网关负载下的“此交互失败”超时。修复了 #77283。感谢 @colin-chang。 - xAI:暴露 `/think low|medium|high` 用于支持推理的 Grok 模型,并在原生 Responses 负载上保持 `reasoning.effort`,同时为非推理路由保留仅关闭行为。修复了 #79210。感谢 @colinmcintosh。 - CLI/media:让显式的图像描述模型引用使用捆绑的静态提供者目录和通用模型支持的图像钩子,使 `openclaw infer image describe --model zai/glm-4.6v` 像直接模型运行一样工作,并且 Anthropic 认证探测避免陈旧的 Claude 3 Haiku 目录条目。 - Models/Anthropic:当配置了 Anthropic 默认模型时,将 `anthropic/claude-haiku-4-5` 添加到 Anthropic API 密钥 agent 允许列表默认值,使 cron 模型覆盖可以选择当前的 Haiku 别名。修复了 #78000。 - Agents/compaction:在 CLI 转录压缩解析默认引擎之前初始化内置上下文引擎,防止 CLI 会话持久化期间干净的进程 `legacy` 引擎注册失败。修复了 #79446。感谢 @TurboTheTurtle。 - Agents/Anthropic-compatible:为显式声明 `supportsReasoningEffort: false` 的自定义 Anthropic 兼容模型剥离重放的思考块,防止 Kimi 兼容提供者重新发送不支持的 `thinking` 内容。修复了 #47452。 - Kimi:通过提供所需的思考预算和足够的输出空间用于隐藏推理加上最终文本,保持 Anthropic 兼容的思考流有效。(#80481) 感谢 @InTheCloudDan。 - Browser:等待现有会话 Chrome MCP 状态更长的时间和非深度 doctor 探测,使慢速的第一次附件不会错误地报告离线,同时保持原始 CDP 状态探测短。(#77473) 感谢 @rubencu。 - Gateway/logging:在前台 Gateway 快速路径解析之前安装控制台捕获,并抑制已知的 libsignal 会话转储即使在详细模式下,防止原始终端日志打印 WhatsApp 会话密钥材料。(#76306) 感谢 @rubencu。 - Exec approvals:将 `exec.approval.list` 保持在轻量策略摘要路径上,使列出挂起批准不再加载丰富的 tree-sitter 命令解释器。(#76943) 感谢 @rubencu。 - Agents:当 `exec`/`bash` 工具调用在助手声称成功后失败时,表面简洁的默认可见警告,同时保持原始 stderr 隐藏,除非启用详细详细信息。修复了 #60497。(#80003) 感谢 @jbetala7。 - Channels/iMessage:在非敏感健康快照中保留编辑的失败探测详情,使完全磁盘访问失败不再在状态输出中显示为已配置/OK。修复了 #79795。 - Agents:在分发前停止空白的模型发出的工具调用,同时保留基于 id 的工具名称恢复,防止 Kimi/NVIDIA 空白名称重试循环而不创建可调用的 `_blank` 哨兵。修复了 #34129。(#56391) 感谢 @smartchainark。 - Agents/Telegram:投递规范的最终助手答案,而不是重放累积的预工具文本块,防止重复的 Telegram 回复和看起来有效的工具输出片段泄漏到聊天投递中。修复了 #79621 和 #79986。感谢 @nonzeroclaw 和 @dudaefj。 - Auto-reply/TUI:通过发出回退进度并将终端 TUI 错误推迟到恢复有机会完成,在主要模型生命周期错误后保持回退超时恢复可投递。修复了 #80000。(#80009) 感谢 @TurboTheTurtle。 - Heartbeat:当配置的默认模型更改时,清除陈旧的自动回退模型覆盖,使心跳运行遵循更新后的 `agents.defaults.model.primary`,而不需要手动重置。修复了 #74284。感谢 @brtkwr 和 @bitloi。 - CLI/agent:让 `openclaw agent --model` 使用后端/admin Gateway 作用域,而不让缓存的设备令牌作用域静默缩小请求作用域。(#78837) 感谢 @VACInc。 - CLI/help:使帮助和版本调用无配置,同时改进共享端口、频道、插件、任务、会话、消息、配对和认证恢复文本。 - CLI/config:用有效的示例和纯字符串转义坑解释严格的 JSON 解析失败。 - CLI/secrets:将离线的 Gateway 重新加载失败转化为可操作的恢复文本。 - CLI/channels:用下一条命令解释缺失或不明确的频道选择。 - CLI/channels:延迟引导频道状态收集,直到选择了一个频道,使 `openclaw channels add` 第一屏更安静。 - CLI/channels:在取消时干净退出引导频道设置,而不是打印内部向导错误。 - Plugins/CLI:将禁用的 Matrix 和 LanceDB 内存命令根路由到插件启用指导,而不是通用未知命令错误。 - Browser/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 agent 传递给 undici,并修补捆绑的 Baileys 声明,使最新的 tsdown 构建保持警告干净。 - Build:通过外部化已知的第三方声明边缘并替换相对频道配置模块增强为显式的内置频道字段,保持 tsdown `0.22.0` 警告干净。 - ACP sessions:将规范运行时选项映射到后端广告的 ACP 配置键,如 Claude 的 `effort`,同时保持持久化的 OpenClaw 状态规范。(#79926) 感谢 @InTheCloudDan。 - Models/Discord:在 `agents.defaults.models` 中支持 `provider/*` 条目,使 `/model`、`/models` 和模型选择器可以显示所选提供者的动态发现模型,而不需要精确的模型允许列表。修复了 #79485。感谢 @rendrag-git。 - Gateway/watch:在从源码检出启动 Gateway 之前重建或重新暂存缺失的捆绑插件 dist 和运行时后构建输出,防止不完整的监视模式运行时树。(#70805) 感谢 @rubencu。 - CLI/update:允许自更新期间来自先前网关协议的重启健康探测,并使插件干运行报告精确的 npm 目标版本而不是 `unknown`,同时保持未改变的状态。 - OpenAI/Codex:在规范 `openai/*` 迁移后,将持久化的 `openai-codex` OAuth 配置文件元数据转发到 Codex 插件 harness 尝试,使仅 OAuth 的安装继续使用原生 Codex 认证而不是落到直接的 OpenAI API 密钥认证。修复了 #79978。 - OpenAI/Codex:将网关缺失密钥恢复和向导文档指向规范的 `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`。 - Google/Gemini:为显式的 OpenAI 兼容 Google 和 Gemini CLI 提供者配置规范化已退役的 Gemini 3 Pro Preview id,使发出的配置目标为 `google/gemini-3.1-pro-preview`。 - Google/Gemini:规范化从现有合并的 models.json 提供者保留的已退役 Gemini 3 Pro Preview id,使配置发射继续目标为 `google/gemini-3.1-pro-preview`。 - Google/Gemini:在提供者认证配置补丁内部规范化已退役的 Gemini 3 Pro Preview id,使设置发出的提供者目录测试 `google/gemini-3.1-pro-preview`。 - GitHub Copilot:使用运行时请求使用的相同 `vscode-chat` 集成身份铸造短寿命的 Copilot API 令牌,并刷新缺少该身份的遗留缓存令牌,使支持图像的 Copilot 模型不再继承 `copilot-language-server` 作用域。修复了 #79946, #80074。感谢 @TurboTheTurtle。 - Plugins/doctor:当 `openclaw doctor --fix` 删除遮蔽捆绑插件的 npm 包时,丢弃陈旧的托管 npm 安装记录,使重建的注册表不再复活已删除的包元数据。 - Doctor:当每个 agent 模型配置省略了 `fallbacks` 键且 `agents.defaults.model.fallbacks` 非空时发出警告。涵盖字符串形式(`"model": "..."`)和部分对象形式(`"model": { "primary": "..." }`)——两者在运行时静默地覆盖默认链。使用 `"fallbacks": []` 显式选择退出回退,或添加 `"fallbacks": [...]` 来继承或覆盖。修复了 #79369。感谢 @Kaspre。 - Discord/voice:重用或抑制延迟的实时咨询工具调用,而不窃取更新的说话者上下文或两次说出强制的回退答案。 - Discord/voice:跳过可能不完整的实时强制咨询转录片段和不可操作的结束语,使陈旧的局部语音不会将延迟答案排队到下一个回合。 - Discord/voice:防止实时强制咨询清除活跃的精确语音播放,使背靠背的语音答案排队而不是相互打断。 - Discord/voice:从发出的 Discord PCM 合成实时播放时间戳,使 OpenAI 实时插话截断不再看到 `audioEndMs=0` 并跳过合法的中断。 - Plugin SDK:当捆绑插件回退禁用时,使激活的链接插件运行时外观保持可加载。感谢 @shakkernerd。 - Feishu:当活跃会话是 group_topic 或 group_topic_sender 时,在主题内部自动线程化 `message(action="send")` 回复,并通过文本、卡片和媒体出站适配器传播 `replyInThread`,使主题作用域的会话不再在群组根目录发布。修复了 #74903。(#77151) 感谢 @ai-hpc。 - WhatsApp:将路由上下文传递到语音笔记转录回显预检中,使回显的转录可以投递到原始聊天。修复了 #79778。(#79788) 感谢 @hclsys。 - Cron/failover:将结构化的 OpenAI 兼容 `server_error` 负载分类为 `server_error`,在 cron 状态中暴露该原因,并让一次性 cron 重试策略遵守 `retryOn: ["server_error"]` 而不需要原始 `5xx` 文本。(#45594) 感谢 @clovericbot。 - Slack:在交互式回复按钮/选择点击后唤醒解析的线程会话,并通过排队的交互事件携带 Slack 投递上下文,使点击继续可见对话。修复了 #79676 和 #61502。(#79836) 感谢 @velvet-shark, @tianxiaochannel-oss88, 和 @Saicheg。 - WhatsApp/streaming:当文本结束块回复在工具调用周期中重复先前的前言时,仅发送新的后缀,防止累积的 WhatsApp 前言消息。修复了 #78946。(#79120) 感谢 @brokemac79 和 @papawattu。 - Tests/security audit:在按案例的 OpenClaw home 临时目录下沙箱 `audit-exec-surface.test.ts`,将 `OPENCLAW_HOME`(在 `resolveRawHomeDir` 中优先于 `HOME`/`USERPROFILE`)与 `HOME` 和 `USERPROFILE` 一起重定向,使其 `saveExecApprovals(...)` 调用永远不会触及运行套件的主机上的实时 `~/.openclaw/exec-approvals.json`。同级 exec-approvals 测试已经使用了临时目录模式;此文件没有,因此在贡献者的本地检出上运行 `pnpm test` 正在静默地将其真实批准截断为 `{ "version": 1, "agents": {} }`。(#79885) 感谢 @omarshahine。 - ACP/gateway:通过生命周期边界保留 `AcpRuntimeError` 原因链(code/method/JSON-RPC 详情),使网关日志、telegram 回复和工具结果文本显示实际的上游故障,而不是不透明的 `Internal error`/`[object Object]`,并在链到达日志或回复表面之前应用编辑。 - Channels/iMessage:当安装的 imsg 构建广告该能力时(通过 `imsg send-rich --help` 探测一次并缓存在私有 API 状态上),通过 `imsg send-rich --file` 连接 `action: "reply"` 附件。回复现在通过共享的出站解析器水化 `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。 - Agents/Anthropic:即使本地模型配置仍广告 200k,也为 Claude Opus/Sonnet 4 模型报告 1M 会话上下文,匹配模型发现并防止过早的状态/UI 溢出。修复了 #66766。 - Models/OpenRouter:当它们仅被嵌套的 OpenRouter 模型 id(如 `openrouter/google/...`)重复时,在 `/model status` 中隐藏缺失认证的直接提供者行,同时保留显式配置的直接提供者。修复了 #62317。 - Models:当另一个提供者拥有相同的裸模型别名时,保留显式选择的提供者/模型,如 `opencode-go/deepseek-v4-pro`。修复了 #79325。 - Models/config:当模型仅存在于 `agents.defaults.models` 中时,解释缺失的 `models.providers.<provider>.models[]` 注册,而不是返回裸的未知模型错误。修复了 #80089。 - MCP/tools:前缀以数字开头的捆绑 MCP 服务器/工具片段,使生成的工具名称对 Moonshot/Kimi 和其他严格提供者有效。修复了 #79179。 - Models/OpenRouter:将 `403 API key budget limit exceeded` 视为计费,使模型回退前进而不是重试耗尽的 primary。修复了 #60191。感谢 @omgitsgela。 - Models/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。 - Models/OpenRouter:保留实时的 `supported_parameters` 工具支持元数据,使不支持工具的 Perplexity Sonar 模型不再接收 agent 工具负载并不必要地回退。修复了 #64175。感谢 @Catfish-75。 - Models/OpenRouter:将 MoonshotAI Kimi K2.5 添加到捆绑的 OpenRouter 目录中,使引导/模型选择器可以在不等待实时发现的情况下提供它。修复了 #14601。 - Models/OpenRouter:使 keyRef/tokenRef 支持的认证配置文件对只读 PI 模型发现可见,使 OpenRouter 模型在模型选择器中保持可用,而无需存储明文密钥。修复了 #58106。感谢 @ThalynLabs。 - Models/list:在默认配置视图中包含显式配置的提供者行和只读认证支持的目录行,而无需加载 PI 的完整注册表,使 Control UI 选择器与可用的模型认证对齐。参考 #79381。感谢 @ismael-81。 - Security/audit:在报告小模型 web/browser 暴露时遵守 `tools.byProvider["provider/model"].deny`,使每个模型的 OpenRouter 缓解措施清除 `models.small_params` 暴露信号。修复了 #80118。 - Models/Moonshot:接受直接的 `moonshotai/...` 和 `moonshot-ai/...` 引用作为规范 `moonshot/...` 的别名,使复制的 OpenRouter Kimi id 不再作为未知的直接模型失败。修复了 #73876。(#74946) 感谢 @jeffrey701。 - Kimi Code:在捆绑目录、引导和文档中使用 Kimi 稳定的 `kimi-for-coding` API 模型 id,同时规范化遗留的 `kimi-code` 和 `k2p5` 引用。修复了 #79965。 - Telegram:将缓存的回复目标和附近的群组闲聊渲染为一个选定的对话上下文窗口,使陈旧的回复不再将 JSON 回复链与本地聊天上下文分割。 - Volcengine/Kimi:为直接和编码计划模型剥离提供者不支持的工具模式长度和项目约束关键字,使托管的 Kimi 运行不会因 `minLength` 拒绝消息工具。修复了 #38817。 - DeepSeek:为不属于的 OpenAI 兼容代理提供者回填 V4 `reasoning_content` 重放字段,防止捆绑的 DeepSeek 和 OpenRouter 路由之外的后续请求失败。修复了 #79608。 - iMessage:当动作因 imsg 私有 API 桥未附加而被阻止时,发出 WARN 日志,使操作员在 `~/.openclaw/logs/openclaw.log` 中看到静默丢弃,而不必读取每个会话轨迹 JSONL `tool.result` 负载。在网关重启后从 Messages.app 取消注入 dylib 时常见。(#80035) 感谢 @omarshahine。 - Codex:在模式验证之前交叉填充缺失的 `thread.id` 和 `thread.sessionId`,使省略 `sessionId` 的实时 Codex app-server 响应不再使 `thread/start` 或 `thread/resume` 失败。修复了 #80124。(#80137) 感谢 @kagura-agent。 - Agents/Pi:等待嵌入式中止清理稳定后再释放会话写锁,防止后续回合与之前的提示拆卸竞争。(#80239) 感谢 @samzong。 - WhatsApp:将 OpenClaw 看门狗触发的 Web 重新连接从运行时错误降级为恢复警告,并在下一个健康连接后清除已恢复的重新连接状态。(#77026) 感谢 @rubencu。 - ACPX/Windows:在 Windows 上隐藏 MCP 代理目标子进程窗口,使 ACP 支持的 agent 不会因终端窗口处理而闪烁或失败。修复了 #60672。(#60678) 感谢 @KChow-ctrl。 - Agents:在临界阈值中止通用的重复无进展工具循环,当相同的调用持续返回相同的结果时。(#80668) 感谢 @frankekn。 - Exec approvals:为非 POSIX 的 Windows 和 shell 包装器批准命令省略生成的命令高亮,直到这些命令语言有原生高亮支持。(#80566) 感谢 @jesse-merhi。 - Telegram:保持详细的工具进度和结果草案与最终助手答案分离,使工具输出不再混入最终的 Telegram 消息。(#80294) 感谢 @jalehman。 - Plugin SDK/Windows:为根 `openclaw/plugin-sdk` dist 别名启用原生 require 快速路径,而不是强制 Jiti 转换。(#80878) 感谢 @medns。 ### 发布验证 - npm 版本:https://www.npmjs.com/package/openclaw/v/2026.5.12 - npm tarball:https://registry.npmjs.org/openclaw/-/openclaw-2026.5.12.tgz - npm 完整性:sha512-hHg88OFSF0rhDNUbmjMEJO0UdnGn4mNq0F23Hk/NmTKY3OaPCUXiHutd8Ea6S5TGouponytMMWCYgPRrwsW2Xg== - npm 发布证明:https://github.com/openclaw/openclaw/actions/runs/25877630156 - 发布发布证明:https://github.com/openclaw/openclaw/actions/runs/25877174574 - 插件 npm 证明:https://github.com/openclaw/openclaw/actions/runs/25877249367 - 插件 ClawHub 证明:https://github.com/openclaw/openclaw/actions/runs/25877252545 - macOS 发布验证:https://github.com/openclaw/openclaw/actions/runs/25877979171