← 返回更新日志

OpenClaw v2026.5.4

2026-05-05 · GitHub 原文
## 2026.5.4 ### 亮点 - **Google Meet/Voice Call**: 使 Twilio 拨入加入能够通过实时 Gemini 语音桥接进行语音传输,具备 paced audio streaming( paced 音频流)、backpressure-aware buffering(背压感知缓冲)、barge-in queue clearing(抢断队列清除),且在实时语音期间无 TwiML 回退,为 Meet 参与者提供响应更快的 OpenClaw 语音代理。 (#77064) 感谢 @scoootscooob。 ### 变更 - **Gateway/Windows**: 将默认回环网关监听器仅绑定到 Windows 上的 `127.0.0.1`,以防止 libuv 的双栈 `::1` 行为导致本地 HTTP 请求卡死。 (#69701, 修复 #69674) 感谢 @SARAMALI15792。 - **Plugins/migration**: 当 `plugins.entries` 或 `plugins.allow` 引用未安装的官方外部插件时,发出基于目录的安装提示,以便升级后的配置将操作员引导至 `openclaw plugins install <spec>`,而不是告知他们移除有效的插件配置。 (#77483) 感谢 @hclsys。 - **OpenAI/Codex media**: 在运行时和清单元数据中宣传 Codex 音频转录功能,并将活动的 Codex 聊天模型路由到 OpenAI 转录默认设置,而不是将聊天模型 ID 发送给音频转录。感谢 @vincentkoc。 - **Dependencies**: 更新运行时和提供商软件包,包括 Pi 0.73.0、ACPX 适配器、OpenAI、Anthropic、Slack 和 TypeScript 原生预览,同时保持 Bedrock 运行时安装程序覆盖版本低于 Windows ARM Node 24 npm 解析器失败点。 - **Agents/performance**: 将解析后的工作区传递给 BTW、压缩、嵌入式运行模型生成和 PDF 模型设置,以便显式的代理目录模型刷新可以复用当前工作区范围的插件元数据快照,而不是回退到冷插件元数据扫描。 (#77519, #77532) 感谢 @vincentkoc。 - **Plugins/performance**: 允许未作用域的模型目录和清单合约读取器复用当前工作区兼容的插件元数据快照,在保持环境/配置/工作区兼容性检查的同时,避免在热控制平面路径上进行重复的冷插件元数据扫描。 (#77519, #77532) 感谢 @vincentkoc。 - **Config/plugin auto-enable**: 在自动允许列出的已配置频道时,优先选择声明插件清单 ID 而不是内置频道别名,以便企业微信/元宝风格的别名解析为已安装的插件 ID。感谢 @Beandon13。 - **Secrets/apply**: 在清理提供商目标机密时保留 auth-profile `keyRef` 和 `tokenRef` 字段,以便规范的 SecretRef 元数据在 `secrets apply` 后得以保留,同时不保留明文值。感谢 @Beandon13。 - **Plugins/active-memory**: 在解析回忆子代理的频道时跳过包含 `:` 的会话存储频道条目,以便 QQ 点对点代理 ID(例如 `c2c:10D4F7C2…`)和其他有作用域的会话 ID 不会到达捆绑插件的 `dirName` 验证并导致回忆运行崩溃。相同的保护已应用于显式的 `channelId` 参数 (#76704);此扩展将其应用于存储衍生的频道。 (#77396) 感谢 @hclsys。 - **Secrets/external channel contracts**: 在解析 `secret-contract-api` 边车时也查找 `<rootDir>/dist/`,以便编译产物位于 `dist/` 下的 npm 发布的外部频道插件(例如自 2026.5.2 起的 `@openclaw/discord`)能将其频道 SecretRef 合约贡献给运行时快照。否则,在 2026.5.3 上,环境支持的 `channels.discord.token` SecretRef 在网关启动时静默解析失败,导致频道显示为“未配置”,即使 #76449 已落地通用外部合约加载器。感谢 @mogglemoss。 - **Models/auth**: 添加 `openclaw models auth list [--provider <id>] [--json]`,以便用户检查保存的每个代理身份验证配置文件,而无需转储机密或进入旧的“参数过多”路径。感谢 @vincentkoc。 - **Control UI/header**: 在仪表板面包屑中显示活动代理名称,而不添加当前会话密钥,使非聊天视图保持方向感而不拥挤顶栏。 - **Control UI/cron**: 使“新建作业”侧边栏可折叠,以便作业列表可以回收空间,同时保持表单一键可达。感谢 @BunsDev。 - **Gateway/startup**: 将模型目录测试助手、运行会话查找代码、QR 配对助手和 TypeBox 内存工具架构构造移出热启动导入路径,减少默认网关基准插件加载和内存压力。 - **Control UI/performance**: 在支持的情况下,将浏览器长动画帧或长任务条目记录到调试事件日志中,使缓慢的仪表板渲染更容易从 UI 中归因。 - **Slack/streaming**: 为受结构化进度行数据支持的 Block Kit 进度草稿添加 `streaming.progress.render: "rich"`。 - **Slack/streaming**: 在 Block Kit 限制修剪长进度草稿时保留最新的富进度行。感谢 @vincentkoc。 - **Channels/streaming**: 默认限制进度草稿工具行,以便编辑后的进度框避免因长换行导致的跳动重排。 - **Agents/verbose**: 对 `/verbose` 和进度草稿默认使用紧凑的解释模式工具摘要,通过 `agents.defaults.toolProgressDetail: "raw"` 和每个代理的覆盖设置来调试原始命令/详细输出。 - **Control UI/chat**: 为聊天会话选择器添加代理优先过滤器,使聊天控件/组合器在手机/平板/桌面宽度下保持响应,桌面聊天控件保持在一行,避免初始聊天加载期间的重复头像刷新,并在向下滚动 transcript 时隐藏该行。感谢 @BunsDev。 - **Control UI/chat**: 将连续的重复文本消息折叠成一个带计数的气泡,以便无操作心跳确认保持紧凑而不隐藏附近上下文。 - **Agents/subagents**: 当直接完成回退必须绕过请求代理宣布回合时,保留每个分组子结果。感谢 @vincentkoc。 - **TTS/telephony**: 在电话合成提供商中尊重提供商语音/模型覆盖,以便 Google Meet 代理语音日志与实际产生音频的后端匹配。感谢 @vincentkoc。 - **Voice Call/realtime**: 限制 paced Twilio 音频队列,并在提供商音频在 websocket 背压保护器后面积累之前关闭过载的实时流。感谢 @vincentkoc。 - **Docs**: 澄清 IRC 在运营商管理的前向代理路由之外使用原始 TCP/TLS 套接字,因此在启用 IRC 之前应明确批准直接 IRC 出口。感谢 @jesse-merhi。 - **Gateway/performance**: 将非就绪边车延迟到就绪信号之后,避免热路径频道插件 barrel 导入,并在网关启动期间快速路径信任的捆绑插件元数据。 - **Gateway/performance**: 避免在原生可加载插件启动路径上导入 `jiti`,因此除非实际需要回退加载,否则编译的捆绑插件表面无需支付源转换加载器成本。 - **Gateway/diagnostics**: 在 `pnpm gateway:watch` 中添加启动阶段跨度、活动工作标签、过时的终端桥接标记和默认同步 I/O 跟踪,以便从日志和稳定性诊断中更容易归因缓慢的网关转换。 - **Plugins/loader**: 在原生快速路径上保留真实的编译插件模块求值错误,而不是将每个抛出的 `.js` 模块视为源转换回退未命中。感谢 @vincentkoc。 - **QA/Mantis**: 添加 `pnpm openclaw qa mantis slack-desktop-smoke` 在 Crabbox VNC 桌面内运行 Slack 实时 QA,打开 Slack Web,并捕获 Slack QA 工件旁边的桌面截图。 - **QA/Mantis**: 将运行时环境传递给桌面浏览器 Crabbox 和工件复制子命令,以便嵌入的 Mantis 调用者可以提供 Crabbox 凭据,而无需修改父进程。感谢 @vincentkoc。 - **QA/Mantis**: 即使远程 Slack QA 失败也返回复制的 Slack 桌面截图路径,以便 CLI 仍打印失败截图工件。感谢 @vincentkoc。 - **QA/Mantis**: 接受来自桌面烟雾预热 Blacksmith Testbox `tbx_...` 租用 ID,以便提供商覆盖在检查/运行之前不会失败。感谢 @vincentkoc。 - **QA/Codex harness**: 添加有针对性的实时 Docker/Testbox 诊断、身份验证预检检查、缓存挂载修复和应用服务器协议检出发现,以便维护者 harness 失败更容易重现。感谢 @vincentkoc。 - **Plugins/update**: 将官方外部化捆绑 npm 迁移和 ClawHub 到 npm 回退视为受信任的源链接安装,以便仅预发布的官方插件包可以从捆绑构建迁移,而不会因被视为不安全的预发布解析而被拒绝。感谢 @vincentkoc。 - **Plugins/update**: 在 ClawHub 包可用后,将 ClawHub 首选外部化插件安装移回 ClawHub,此前的 npm 回退。感谢 @vincentkoc。 - **Plugins/update**: 清理已外部化固定 npm 和 ClawHub 插件安装的过时捆绑加载路径,以便发布频道同步不会在安装的外部包之前留下已移除的捆绑路径。感谢 @vincentkoc。 - **Telegram**: 在代理消息工具中接受插件拥有的数字论坛主题目标,并在就地包更新期间将回复分发提供商块保留在稳定的运行时别名后面。修复 #77137。感谢 @richardmqq。 - **Google Meet**: 保留 `realtime.introMessage: ""`,以便实时 Chrome 加入保持静默,而不是恢复默认的语音介绍。感谢 @vincentkoc。 - **Plugins/SDK**: 添加有界的 `before_agent_finalize` 重试指令,以便工作流插件可以请求再经过一次模型传递。感谢 @100yenadmin。 - **Discord/status**: 将降级的 Discord 传输和网关事件循环饥饿信号添加到 `openclaw channels status`、`openclaw status --deep` 和获取超时日志中,以便间歇性套接字重置看起来不像健康运行的频道。 (#76327) 感谢 @joshavant。 - **Providers/OpenRouter**: 添加可选响应缓存参数,仅在验证的 OpenRouter 路由上发送 OpenRouter 的 `X-OpenRouter-Cache`、`X-OpenRouter-Cache-TTL` 和缓存清除头。感谢 @vincentkoc。 - **Providers/OpenRouter**: 扩展应用归因类别,以便 OpenClaw 在验证的 OpenRouter 路由上宣传编码、编程、写作、聊天和个人代理使用情况。感谢 @vincentkoc。 - **Plugins/update**: 使包升级干净地交换 pnpm/npm-prefix 安装,保持遗留插件安装运行时块工作,并且在 beta 频道上,当插件 beta 版本缺失或安装验证失败时,将默认行 npm 插件回退到 default/latest。感谢 @vincentkoc 和 @joshavant。 - **Channels/WhatsApp**: 支持显式的 WhatsApp 频道/通讯稿 `@newsletter` 出站消息目标,使用频道会话元数据而不是 DM 路由。修复 #13417;继承 #13424 的狭义出站目标思想。感谢 @vincentkoc 和 @agentz-manfred。 - **Exec approvals**: 添加基于 tree-sitter 的 shell 命令解释器,用于将来的审批和命令审查界面。 (#75004) 感谢 @jesse-merhi。 - **Agents/sandbox**: 将沙箱容器和浏览器注册表条目存储为每个运行时分片文件,减少 `openclaw doctor --fix` 迁移遗留单块注册表文件时无关会话锁争用。 (#74831) 感谢 @luckylhb90。 - **Plugins/ClawHub**: 用 `RateLimit-Reset`/`Retry-After` 中的重置窗口注释 ClawHub 的 429 错误,并在请求未认证时附加“登录以获得更高的速率限制。”提示,以便用户可以看到下载何时恢复以及如何提升上限。感谢 @romneyda。 - **Plugins/runtime state**: 添加 `registerIfAbsent` 用于原子键控存储去重声明,返回插件是否成功声明了一个键而不覆盖现有的实时值。感谢 @amknight。 - **Plugin SDK**: 添加插件拥有的 `SessionEntry` 槽投影和作用域可信策略会话扩展读取。 (#75609; 替换部分 #73384/#74483) 感谢 @100yenadmin。 - **Sandbox/Windows**: 接受驱动器绝对 Docker 绑定源,同时保持沙箱阻止路径和允许根策略比较 Windows 不区分大小写。 (#42174) 感谢 @6607changchun。 ### 修复 - **Plugins/install**: 通过请求浮动的 npm 和 ClawHub 规格并附带 `@beta` 来尊重引导和医生管理的插件安装的 beta 更新频道,同时将持久安装记录保留在目录默认值上。感谢 @vincentkoc。 - **WhatsApp/onboarding**: 将设置和配对允许列表条目规范化为 WhatsApp 的仅数字电话 ID,同时接受 E.164、JID 和 `whatsapp:` 输入,以便个人电话允许列表在设置后匹配 WhatsApp Web 发送者 ID。感谢 @vincentkoc。 - **Gateway/startup**: 加载拥有显式配置的图像、视频或音乐生成默认值的提供商插件,以便生成工具在网关重启后上线,而不是保持仅目录状态。修复 #77244。感谢 @buyuangtampan、@Nikoxx99 和 @vincentkoc。 - **Slack/subagents**: 在存在环境会话线程上下文时,在原始 Slack 线程中保留恢复的父 `message.send` 调用,并抑制来自后续发现的成功静默子完成行。感谢 @bek91。 - **Slack/mentions**: 为成功的可见线程 Slack 发送记录线程参与,包括消息工具和媒体传递路径,以便在机器人参与的线程中未提及的回复可以绕过提及门控,如文档所述。修复 #77648。感谢 @bek91。 - **Infra/Windows**: 在 `resolvePreferredOpenClawTmpDir` 中跳过 Windows 上的 POSIX `/tmp/openclaw` 首选路径,以便日志文件、TTS 临时文件和其他写入落在 `%TEMP%\openclaw-<uid>` 中,而不是 `C:\tmp\openclaw`。修复 #60713。感谢 @juan-flores077。 - **Media/Windows**: 在 fsync 之前以读写方式打开保存的附件临时文件,以便 Windows WebChat 和 `chat.send` 媒体卸载在持久性刷新期间不再因 EPERM 而失败。 (#76593) 感谢 @qq230849622-a11y。 - **Agents/tools**: 在构建嵌入式运行器工具系列和捆绑 MCP/LSP 运行时期间尊重狭义运行时工具允许列表,以便请求 `update_plan`、`browser`、`x_search`、频道登录工具或 `group:plugins` 等工具的 cron/subagent 运行不再以缺失工具或无关引导工作开始。 (#77519, #77532) 感谢 @vincentkoc。 - **Codex plugin**: 镜像实验性上游应用服务器协议并在漂移检查之前格式化生成的 TypeScript,保持 OpenClaw 的 `experimentalApi` 桥接与最新 Codex 兼容,同时保留格式化程序门。感谢 @vincentkoc。 - **Telegram/media**: 从保存的 MIME 元数据(而不是 Telegram `photo` 形状)派生的无标题入站媒体占位符,以便非图像和混合附件不再以 `<media:image>` 形式到达模型。修复 #69793。感谢 @aspalagin。 - **Telegram/streaming**: 将活动预览重用作长文本最终块的第一块,以便多块回复不再创建随后消失的瞬态额外气泡。感谢 @vincentkoc。 - **Agents/cache**: 将每回合运行时上下文保留在普通聊天系统提示之外,同时传递隐藏的当前回合上下文,恢复聊天继续的提示缓存重用。修复 #77431。感谢 @Udjin79。 - **Gateway/startup**: 在 `agent model` 启动日志行中包含解析的思考和快速模式默认值,默认未设置的启动思考为 `medium`,而不混合推理可见性。 - **Gateway/update**: 在更新后重启验证期间从已安装配置解析本地网关探测身份验证,以便令牌/设备认证的 VPS 网关在包交换后不会因不健康的端口冲突而错误报告。感谢 @vincentkoc。 - **Agents/Tools**: 在 `pi-embedded-runner` 中添加自动压缩重试后的后压缩循环保护,并在代理在同一窗口内发出相同的 `(tool, args, result)` 三元组 `windowSize` 次(默认 3)时,以 `compaction_loop_persisted` 中止运行。通过现有 `tools.loopDetection.enabled` 禁用;通过 `tools.loopDetection.postCompactionGuard.windowSize` 调整。针对上下文溢出 + 压缩未破坏工具调用循环的故障模式。引用 #77474;继承 #21597。感谢 @efpiva。 - **Gateway/watch**: 除非明确请求,否则在 `pnpm gateway:watch --benchmark` 期间抑制同步 I/O 跟踪输出,以便 CPU 配置文件不再用堆栈跟踪淹没终端。 - **Gateway/watch**: 当明确启用基准同步 I/O 跟踪时,将跟踪块输出到基准输出日志,并从终端面板过滤它们,同时保持正常网关日志可见。 - **Plugins/runtime-deps**: 在内存核心插件运行时依赖集中包含 `json5`,以便打包的 `memory_search` 沙箱可以解析生成解析 JSON5 配置的 OpenClaw 运行时块。修复 #77461。 - **Plugins/Windows**: 在 npm 插件安装失败并出现 `spawn git ENOENT` 时显示 Git 安装提示,并记录 WhatsApp 插件的 Baileys/libsignal 安装的 PATH 上 Git 要求。 - **Codex harness**: 保留应用服务器使用限制重置详情,并通过仅工具的源回复模式传递 OpenClaw 拥有的运行时失败通知,以便 Telegram 和其他聊天频道在 Codex 订阅限制或 API 失败阻止回合时告知用户,而不是保持静默。 (#77557) 感谢 @pashpashpash。 - **Agents/OpenAI**: 默认将直接 OpenAI 响应模型设置为 SSE 传输而不是 WebSocket 自动选择,防止 pi 运行时聊天回合在 WebSocket 路径停滞而 OpenAI HTTP 流工作时挂起。感谢 @vincentkoc。 - **Plugins/update**: 在跳过未更改的 npm 插件更新之前修复缺失的插件本地 `openclaw` 对等链接,以便当前外部 Codex 安装可以在 OTA 修复期间恢复 `openclaw/plugin-sdk/*` 解析。 (#77544) 感谢 @ProspectOre。 - **Discord/replies**: 将失败的最终回复传递视为失败的回合,而不是将其计为已传递的自动可见回复,以便公会/频道回合不再在最终消息被丢弃时显示完成。修复 #77520。感谢 @Patrick-Erichsen。 - **Discord**: 在 Discord REST 和网关 WebSocket 启动路径上优先使用 IPv4,以便仅 IPv4 网络在网关 READY 和入站消息调度之前不再停滞。修复 #77398;引用 #77526。感谢 @Beandon13。 - **Channels/plugins**: 通过频道 ID 而不是清单插件 ID 对捆绑包状态探测、环境/配置存在和只读命令默认值进行键控,保留其包 ID 与频道别名不同的频道插件的设置和本机命令检测。感谢 @vincentkoc。 - **Docker**: 从运行时映像中清除包排除插件 dist 目录,除非构建明确选择该插件,以便官方外部插件(如飞书)按需安装,而不是运送部分元数据而没有编译的运行时输出。修复 #77424。感谢 @vincentkoc。 - **Model switching**: 在 `/model ... --runtime ...` 目标被阻止的模型时包含精确的累加允许列表修复命令,并使 Telegram 的模型选择器说明它仅更改会话模型而保持运行时不变。感谢 @vincentkoc。 - **Mattermost**: 澄清模型选择器仅更改会话模型,运行时切换需要 `/oc_model <provider/model> --runtime <runtime>`。感谢 @vincentkoc。 - **Doctor/config**: 当 `doctor --fix` 从配置中清除过时机密字段时保留活动的 `auth.profiles` 元数据,修复当模型回退或显式 `model@profile` 引用仍依赖它时的遗留 `<provider>:default` API 密钥配置文件元数据。修复 #77400。 - **Doctor/plugins**: 在发布配置插件修复集中包含仅 `plugins.allow` 的官方插件 ID,以便 `doctor --fix` 安装已配置但尚未加载的官方外部插件,而不是将它们作为过时允许条目移除。修复 #77155。感谢 @hclsys。 - **Doctor/sessions**: 当 `doctor --fix` 看到插件拥有的模型/运行时/身份验证/会话绑定不在当前配置路由内时,从会话存储中清除自动创建的过时会话路由状态,同时保留显式用户模型选择以供手动审查。引用 #68615。 - **CLI/update**: 禁用并跳过包更新插件同步失败的插件,以便损坏的 npm/ClawHub/git/marketplace 插件无法将成功的 OpenClaw 包更新转变为失败的更新结果。感谢 @vincentkoc。 - **CLI/update**: 在包管理器更新期间使用绝对 POSIX npm 脚本 shell,以便受限 PATH 环境仍可在从 `--tag main` 更新时运行依赖生命周期脚本。修复 #77530。感谢 @PeterTremonti。 - **Diagnostics**: 将内部诊断事件总线授予官方安装的诊断导出器插件,以便 npm 安装的 `@openclaw/diagnostics-prometheus` 可以发出指标,而无需将能力扩展到任意全局插件。修复 #76628。感谢 @RayWoo。 - **Browser**: 在现有会话截图之前强制执行严格的 SSRF 当前 URL 检查,匹配现有会话快照处理。感谢 @vincentkoc。 - **Active Memory**: 为回忆工作程序提供有界的最新消息搜索查询,以便频道/运行时元数据不会成为内存搜索字符串。修复 #65309。感谢 @joeykrug、@westley3601、@pimenov 和 @tasi333。 - **Gateway/chat**: 在排空相同会话后续回合之前清除活动回复运行保护,以便顺序 `chat.send` 调用不再每次交替触发 `ReplyRunAlreadyActiveError`。修复 #77485。感谢 @bws14email。 - **Agents/media**: 避免在流式回复文本在最终 `MEDIA:` 指令之前到达时发送两次生成的图像、视频和音乐附件。 - **CLI/sessions**: 默认将 `openclaw sessions` 输出限制为最新的 100 行,并添加 `--limit <n|all>` 以及 JSON 分页元数据,以便对大型会话存储的重复机器轮询不会扩展为无限制的每行丰富化/输出工作。修复 #77500。感谢 @Kaotic3。 - **Doctor/config**: 恢复遗留群聊配置迁移 `routing.allowFrom`、`routing.groupChat.*` 和 `channels.telegram.requireMention`,以便升级保持 WhatsApp、Telegram 和 iMessage 组提及门控和历史设置,而不是使配置无效或静默阻止。感谢 @scoootscooob。 - **CLI/update**: 使包更新后续进程写入完成结果并明确退出,以便 Windows 打包升级在新包完成后期核心插件工作后不再挂起。感谢 @vincentkoc。 - **Release validation**: 除非明确配置 Slack 凭据,否则跳过 Slack 实时 QA,以便发布门可以在 Slack 仍本地且凭据受限的情况下证明非 Slack 表面。感谢 @vincentkoc。 - **Plugins/update**: 将 OpenClaw CalVer 校正版本(如 `2026.5.3-1`)视为满足基础插件 API 范围,以便校正构建可以安装需要基础运行时 API 的插件。修复 #77293。 (#77450) 感谢 @p3nchan。 - **Discord/Gateway startup**: 使用退避重试 Discord READY 等待,延迟启动 `sessions.list` 和本机批准就绪失败直到边车恢复,并在最终回复清理删除所有文本时保留仅组件 Discord 负载。 (#77478) 感谢 @NikolaFC。 - **CLI/launcher**: 将终止信号转发到编译缓存重新生成子进程,以便杀死包装进程不再让安全审计工作程序孤立。修复 #77458。感谢 @jaikharbanda。 - **Plugins/registry**: 当过时持久注册表可能在包管理器升级后隐藏它们时,从拥有的 npm 根目录恢复托管 npm 外部插件。修复 #77266。感谢 @p3nchan。 - **fix(gateway)**: 限制未绑定的 websocket 身份验证范围 [AI]。 (#77413) 感谢 @pgondhi987。 - **Gate zalouser startup name matching [AI]。 (#77411)** 感谢 @pgondhi987。 - **Active Memory**: 向回忆工作程序发送有界的最新消息搜索查询,以便频道/运行时元数据不会成为内存搜索字符串。修复 #65309。感谢 @joeykrug、@westley3601、@pimenov 和 @tasi333。 - **fix(device-pair)**: 配对命令需要配对范围 [AI]。 (#76377) 感谢 @pgondhi987。 - **Providers/OpenRouter**: 保持 DeepSeek V4 `reasoning_effort` 在 OpenRouter 支持的值上,将过时的 `max` 思考覆盖映射到 `xhigh`,以便 `openrouter/deepseek/deepseek-v4-pro` 不再因 OpenRouter 无效努力 400 而失败。修复 #77350。 (#77423) 感谢 @krllagent、@mushuiyu886 和 @sallyom。 - **fix(qqbot)**: 保持私有命令在框架表面之外 [AI]。 (#77212) 感谢 @pgondhi987。 - **Claude CLI**: 通过 CLI 后端接缝传递 Claude Code 的会话范围 `--effort` 标志来尊重非关闭 `/think` 级别,以便聊天桥接不再显示惰性思考控制。修复 #77303。感谢 @Petr1t。 - **Agents/subagents**: 刷新延迟的最终传递负载,当相同会话完成输出更改时,以便重试的父通知使用最终子摘要而不是过时进度文本。感谢 @vincentkoc。 - **Agents/media**: 将异步音乐和视频完成结果路由回请求代理,在需要消息工具时保留自动回复,同时仅用于消息工具仅组/频道传递。 - **active-memory**: 当没有内存插件(`memory-core` 或 `memory-lancedb`)加载时,优雅地跳过内存子代理而不是记录混淆的允许列表错误,以便没有内存后端的活动内存不再在网关日志中产生误导性的“没有可调用工具剩余”警告。修复 #77506。感谢 @hclsys。 - **Memory/wiki**: 在回填未使用结果容量的同时保留 `corpus=all` 搜索中两个语料库的表示,以便内存命中不会被数值更高的 wiki 整数分数饿死。修复 #77337。感谢 @hclsys。 - **Docker/compose**: 在网关和 CLI 服务上固定容器侧 `OPENCLAW_CONFIG_DIR` 和 `OPENCLAW_WORKSPACE_DIR`,以便 `scripts/docker/setup.sh` 写入 `.env` 的主机路径(用作 Compose 绑定挂载源)无法通过 `env_file` 导入泄漏到运行时代码。修复 macOS Docker 设置上的回归,其中第一个代理回复因 `EACCES: permission denied, mkdir '/Users'` 而死亡,因为主机风格工作区路径被持久化到 `agents.defaults.workspace`。修复 #77436。感谢 @lonexreb。 - **Telegram**: 在助手消息边界之后清理仅工具草稿预览,以便当没有匹配的最终预览到达时,瞬态 `Surfacing...` 工具状态气泡不会 lingering。感谢 @BunsDev。 - **Slack**: 在套接字模式启动重试日志中报告 `unknown error` 而不是 `undefined`,并明确标记重试原因。 - **Telegram**: 让显式论坛主题 `requireMention` 设置覆盖持久化的 `/activate` 和 `/deactivate` 状态,以便每个主题提及门控一致工作。修复 #49864。感谢 @Panniantong。 - **Cron**: 在请求工具不可用时在 `cron show`、状态和运行历史中显示失败的隔离运行诊断,以便阻塞的 cron 运行报告实际的工具策略失败而不是误导性的绿色结果。修复 #75763。感谢 @RyanSandoval。 - **TUI/escape abort**: 在 `chat.send` 解析后跟踪飞行中的 runId,以便在第一个网关事件之前的间隙按 Esc 中止运行,而不是重复打印 `no active run`。修复 #1296。感谢 @Lukavyi 和 @romneyda。 - **TUI/render**: 停止长令牌消毒器在行内代码跨度、围栏代码块、表边框和裸连字符/点标识符内注入文字空格,以便复制的包名、实体 ID 和 shell 行延续保持字节对字节完整,同时窄终端保护仍然块无法识别的长散文标记。修复 #48432、#39505。感谢 @DocOellerson、@xeusoc、@CCcassiusdjs、@akramcodez、@brokemac79、@romneyda。 - **Plugin skills**: 通过生成的插件技能目录(`~/.openclaw/plugin-skills/`)发布插件声明的技能,同时保持直接提示加载完整,以便代理基于文件的发现路径查找插件技能 `SKILL.md` 文件并清理非活动插件链接。修复 #77296。 (#77328) 感谢 @zhangguiping-xydt。 - **Gateway/status**: 将 Linux 托管网关服务标记为 `systemd user`,使状态输出明确关于用户服务范围而不是暗示系统级单元。感谢 @vincentkoc。 - **Plugins/install**: 在重新安装切换源时移除先前的托管插件目录,以便过时的 ClawHub 和 npm 副本在新区安装获胜后不再在发现中保留重复插件 ID。感谢 @vincentkoc。 - **Plugins/install**: 允许官方插件重新安装恢复修复仅源的已安装运行时阴影,以便 `openclaw plugins install npm:@openclaw/discord --force` 可以替换坏包而不是在过时配置验证处停止。感谢 @vincentkoc。 - **CLI/update**: 通过干净的 npm 前缀交换阶段 pnpm 检测的 npm 布局全局包更新,将插件安装运行时导入保留在稳定别名后面,并将遗留安装运行时别名 shipped 回 `2026.3.22`,防止过时覆盖块破坏插件更新后同步。感谢 @vincentkoc。 - **Plugins/commands**: 允许官方 ClawHub Codex 插件包保留保留的 `/codex` 命令所有权,匹配现有的 npm 管理 Codex 包行为。感谢 @vincentkoc。 - **Auth/OpenAI Codex**: 将无效的每个代理 Codex 认证顺序和会话配置文件覆盖重写为健康的重新登录配置文件,以便撤销的 OAuth 帐户在重新登录后不会保持固定。感谢 @BunsDev。 - **Plugins/commands**: 将 QQBot 框架斜杠命令范围限定到 QQBot 频道,以便 `/bot-*` 命令处理程序和本机规范不会泄漏到不相关的聊天表面。感谢 @vincentkoc。 - **fix**: 加强后端消息操作网关路由 [AI]。 (#76374) 感谢 @pgondhi987。 - **Gate QQBot streaming command auth [AI]。 (#76375)** 感谢 @pgondhi987。 - **Plugins/discovery**: 忽略仅公开 TypeScript 源条目而没有编译运行时输出的托管 npm 插件包,以便过时/损坏的安装不能在设置期间隐藏工作的捆绑或可重新安装的频道插件。感谢 @vincentkoc。 - **CLI/update**: 将 OpenClaw 稳定校正版本(如 `2026.5.3-1`)视为比其基础稳定版本更新,以便包更新不再要求降级确认。感谢 @vincentkoc。 - **Plugins/install**: 对受信任的官方 OpenClaw npm 安装抑制危险模式扫描器警告,以便安装 `@openclaw/discord` 不再为官方包打印凭证收集警告。感谢 @vincentkoc。 - **Plugins/commands**: 对来自所有者门控 `/plugins install` 命令的受信任目录 npm 安装抑制危险模式扫描器警告,以便聊天驱动的安装匹配 CLI 安装信任路径。感谢 @vincentkoc。 - **Plugins/release**: 使发布的 npm 运行时验证器拒绝空白 `openclaw.runtimeExtensions` 条目,而不是将它们视为不存在并通过推断输出传递。感谢 @vincentkoc。 - **Plugins/security**: 在插件安装扫描中匹配源规则上下文时忽略行内和块注释,以便仅环境默认附近的注释-only `fetch`/`post` 引用不会阻止干净插件。感谢 @vincentkoc。 - **Doctor/plugins**: 在 `doctor --fix` 期间移除捆绑插件的过时托管安装记录,即使捆绑插件未明确配置,以便医生清理不会在身后留下孤立的安装元数据。感谢 @vincentkoc。 - **Web fetch**: 通过选定的获取提供商对提供商回退缓存条目进行范围限定,以便配置重新加载不能重用另一个提供商的缓存回退负载。感谢 @vincentkoc。 - **Web search**: 在工具执行期间尊重后期绑定的 `tools.web.search.enabled: false`,以便配置重新加载不能使已创建的 `web_search` 工具可运行。感谢 @vincentkoc。 - **Plugins/packages**: 拒绝存在但失败包边界检查的推断内置运行时条目,而不是回退到已安装包的 TypeScript 源。感谢 @vincentkoc。 - **Plugins/loader**: 在原生评估已达到缺失依赖后,不通过源转换器重试原生加载的 JavaScript 插件模块,避免重复顶级副作用。感谢 @vincentkoc。 - **Plugins/packages**: 拒绝空白 `openclaw.runtimeExtensions` 条目而不是静默忽略它们并回退到推断的 TypeScript 运行时条目。感谢 @vincentkoc。 - **Doctor/plugins**: 从托管包锁以及 `package.json` 和 `node_modules` 中移除过时托管 npm 插件阴影条目,以便未来 npm 操作不会继续引用修复的捆绑插件阴影。感谢 @vincentkoc。 - **Plugins/runtime state**: 当命名空间驱逐在同一毫秒内运行现有条目时保留正在注册的键,以便 `register` 和 `registerIfAbsent` 在驱逐自己的新鲜值时不要报告成功。感谢 @vincentkoc。 - **Plugins/providers**: 使捆绑提供商发现默认对新配置尊重限制性 `plugins.allow`,同时医生将遗留限制性允许列表配置迁移到 `plugins.bundledDiscovery: "compat"` 以保留升级行为。感谢 @dougbtv。 - **Control UI/Talk**: 使失败的 Talk 启动错误可关闭,并在关闭时清除过时的 Talk 错误状态,以便缺少实时语音提供商配置不会留下永久的聊天横幅。修复 #77071。感谢 @ijoshdavis。 - **Control UI/Talk**: 在关闭运行时错误横幅时停止并清除失败的实时 Talk 会话,以便下一个 Talk 点击启动新会话,而不是仅停止过时的那个。感谢 @vincentkoc。 - **Control UI/Talk**: 在下一个 Talk 点击时从失败的实时 Talk 会话重试,而不是首先需要单独的过时会话停止点击。感谢 @vincentkoc。 - **Canvas host**: 在浏览器 canvas host URL 和启动挂载日志中保留 Gateway TLS 方案,以便直接 HTTPS 网关不宣传不安全的 canvas 链接。感谢 @vincentkoc。 - **WhatsApp/login**: 通过注入的运行时路由登录成功和失败消息,以便设置/引导表面捕获所有登录输出,而不仅仅是 QR。感谢 @vincentkoc。 - **Google Chat**: 为每个身份验证客户端创建隔离的 Google 身份验证传输,以便 google-auth-library 拦截器变异不会在 webhook 验证和访问令牌客户端之间累积。感谢 @vincentkoc。 - **Doctor/plugins**: 在 `doctor --fix` 期间移除托管 npm 捆绑 `@openclaw/*` 插件的孤立或恢复的托管副本,以便过时包清单不能遮蔽当前捆绑插件配置模式。感谢 @vincentkoc。 - **Control UI/performance**: 限制共享事件日志中的长任务和长动画帧诊断,以便缓慢渲染遥测不会从调试和概览视图中逐出网关/插件事件。感谢 @vincentkoc。 - **Gateway/startup**: 仅在 HTTP 服务器绑定后记录 canvas host 挂载,以便启动日志不再在 canvas host 可以服务请求之前报告它已挂载。 - **Control UI/i18n**: 用配置的分钟计数渲染会话活动过滤器工具提示,并使 i18n 检查拒绝占位符漂移。感谢 @BunsDev。 - **Web fetch**: 从活动运行时快照后期绑定 `web_fetch` 配置和提供商回退元数据,匹配 `web_search` 以便长寿命工具不使用过时的获取提供商设置。感谢 @vincentkoc。 - **Discord**: 当异步机器人探测抛出时清除过时的启动探测机器人/应用程序状态,而不仅仅是在它返回降级的探测结果时。感谢 @vincentkoc。 - **Web search**: 通过清单所有权对显式捆绑 `web_search` 提供商运行时加载进行范围限定,以便选择 DuckDuckGo/Gemini 等不会导入不相关的捆绑提供商或记录其可选依赖失败。感谢 @vincentkoc。 - **Plugins/discovery**: 将已安装 `origin: "global"` 插件包的仅源 TypeScript 运行时检查从配置阻塞错误降级为警告,并让运行时通过 jiti 回退到 TypeScript 源,以便单个损坏的已安装包不再阻止不相关插件的 `plugins install`;新安装的仅源包的安装时拒绝不变。感谢 @romneyda。 - **Providers/OpenAI Codex**: 在显示手动重定向粘贴提示之前停止 OAuth 进度旋转器,以便回调超时不会在终端上垃圾邮件 `Browser callback did not finish`。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 在更改绑定、权限、模型覆盖、活动回合或反馈上传之前,对格式错误的 `/codex` 控制命令和诊断确认失败关闭。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 在发回聊天之前清理 Codex 应用服务器命令读out、失败回复、批准提示、 elicitation 提示和 `request_user_input` 文本。感谢 @vincentkoc。 - **Providers/OpenAI Codex**: 保留本地绑定回合图像路径,拒绝过时的相同线程回合通知,强制执行仅选项用户输入提示,并将失败的动态工具结果作为不成功的工具调用返回给 Codex。感谢 @vincentkoc。 - **Providers/DeepSeek**: 通过轻量级提供商策略表面公开 DeepSeek V4 `xhigh` 和 `max` 思考级别,以便控制 UI `/think` 选择器在运行时插件注册表不活动时继续显示最大推理选项。修复 #77139。感谢 @bittoby。 - **Release/beta smoke**: 当 `gh workflow run` 返回无运行 URL 时,从 `gh run list` 解析调度的 Telegram beta E2E 运行,以便维护者助手在调度后不会立即失败。感谢 @vincentkoc。 - **Media/images**: 当可选 Sharp 转换不可用时,使 HEIC/HEIF 附件失败关闭,而不是发送仍需要转换的原始文件。感谢 @vincentkoc。 - **Google Meet**: 将调用者的当前代理 transcript 分叉到代理模式会议顾问会话,以便 Meet 回复继承工具调用的上下文。 - **iOS/mobile pairing**: 在 QR/设置代码签发之前拒绝非回环 `ws://` 设置 URL,并让 iOS Gateway 设置屏幕扫描 QR 码或粘贴完整设置代码消息。感谢 @BunsDev。 - **Control UI**: 在狭窄和平板宽度下将 Gateway Access 输入和语言选择器保持在卡片内。 - **Agents/trajectory**: 限制运行时轨迹捕获和产生排队的边车写入,以便过大轨迹停止记录而不是垄断网关清理。修复 #77124。感谢 @loyur。 - **Telegram/streaming**: 在共享压缩之前清理工具进度草稿预览反引号,以便长反引号重的进度文本仍渲染在安全代码格式化预览内,而不是折叠为省略号。感谢 @vincentkoc。 - **UI/chat**: 从聊天队列文本规则中移除不支持的 `line-clamp` 声明,以消除 Firefox 控制台噪音而不改变可见截断行为。感谢 @ZanderH-code。 - **Control UI**: 通过宣布会话切换、闪烁活动会话选择器、显示内联保存/应用/更新进度以及区分过滤空会话列表与真正空会话存储,为重复操作添加明确反馈。感谢 @BunsDev。 - **Agents/Pi**: 为合成中间溢出延续提示抑制持久性,以便 transcript-retry 恢复不会将“从 transcript 继续”提示写入新用户回合。感谢 @vincentkoc。 - **Agents/tools**: 在消息工具发送之前从可见富表示标题、块、按钮和选择标签中剥离推理文本,以便结构化频道负载不能泄漏隐藏规划。感谢 @vincentkoc。 - **Telegram**: 将回复分发延迟提供商运行时块保留在稳定的 dist 名称后面,并在最终交付后删除 `/reasoning stream` 预览,以便包更新和实时推理草稿不会让 Telegram 回合损坏或嘈杂。感谢 @BunsDev。 - **Discord**: 在不等待启动机器人/应用程序探测的情况下启动网关监视器,以便 `/users/@me` REST 路径慢的 WSL2 主机仍在线带来频道,而状态丰富化异步完成。修复 #77103。感谢 @Suited78。 - **Exec approvals**: 当 `-S`/`-s` 与其他 env 短选项组合时检测 `env -S` 分割字符串命令载体风险,以便批准解释不会错过隐藏在 `env -iS...` 后的分割负载。感谢 @vincentkoc。 - **Google Meet**: 记录具体的代理模式 TTS 提供商、模型、语音、输出格式和采样率,在语音合成之后,以便 Meet 日志显示哪个语音后端说了每个回复。 - **Voice Call**: 当实时提供商正常关闭时将实时调用标记为完成,以便 Twilio/OpenAI/Google 实时停止事件不会留下活动调用记录。感谢 @vincentkoc。 - **Gateway/update**: 将关闭路径保留在稳定的运行时块后面,并为最近的 `server-close-*` 哈希 shipped 兼容别名,以便手动 npm 包替换不能使已在运行的网关无法干净关闭。修复 #77087。感谢 @westlife219。 - **Control UI/media**: 为助手媒体获取铸造短期范围票证,并渲染票据 URL 而不是在聊天图像 URL 中暴露长期身份验证令牌。修复 #70830 和 #77097。感谢 @hclsys。 - **Exec approvals**: 将 POSIX `exec` 视为行内 eval、shell 包装器和 eval/source 检测的命令载体,以便 `/approve` shell 执行和行内解释器负载仍被该 env 形式阻止。感谢 @vincentkoc。 - **Google Meet**: 记录启动 Chrome 和配对节点 Meet 回话桥时解析的音频提供商模型,以便代理模式加入显示 STT 模型,双向加入显示实时语音模型。 - **Diagnostics**: 在 cron 恢复上下文中处理缺失的会话尾部文件,而不触发扩展测试类型检查。感谢 @vincentkoc。 - **QA/Slack**: 更新 Slack 调度预览回退测试 SDK mock 用于结构化进度草稿助手,以便富进度草稿回归套件覆盖新导入而不是在断言运行前失败。感谢 @vincentkoc。 - **Release validation**: 允许聚焦 QA 实时重运行选择 Matrix 和 Telegram 而不运行 Slack,以便已知 Slack 凭据池中断不会阻塞非 Slack 实时证明。感谢 @vincentkoc。 - **Plugins/loader**: 将捆绑插件包 `test-api.js` 别名保留在私有 QA 模式后面,以便源转换在正常插件加载期间不暴露仅测试公共表面。感谢 @vincentkoc。 - **Gateway/startup**: 启动 cron 并在就绪后记录内存跟踪,即使延迟维护定时器在就绪后失败,以便非致命定时器设置问题不会静默让计划作业空闲。感谢 @vincentkoc。 - **Exec approvals**: 在批准命令和严格行内 eval 检查之前展开 BSD/macOS `env -P <path>` 载体命令,以便 `/approve` shell 执行和行内解释器负载仍被该 env 形式阻止。感谢 @vincentkoc。 - **Agents/session status**: 在活动运行会话上保持语义 `session_status({ sessionKey: "current" })`,即使在该运行有持久化会话存储条目之前,而不是回退到沙箱策略键。感谢 @vincentkoc。 - **QA/Slack**: 在源模式 QA 运行期间解析捆绑官方插件公共表面包别名,以便发布 Slack 实时验证可以加载 `@openclaw/slack/api.js` 而不需要工作区符号链接。感谢 @vincentkoc。 - **Codex**: 当沙箱策略使用单独的会话键时,将实时运行会话键传递到应用服务器动态工具,以便 `session_status({ sessionKey: "current" })` 报告活动运行而不是沙箱策略键。感谢 @vincentkoc。 - **Web search**: 当活动运行时元数据或活动插件注册表不完整时,保持一级助手 `web_search` 自动检测和配置的运行时提供商可见。修复 #77073。感谢 @joeykrug。 - **Plugins/tools**: 将清单可选同级工具标记为可选,即使它们来自共享非可选工厂,以便缓存/状态/MCP 元数据保持 opt-in 工具策略准确。感谢 @vincentkoc。 - **Matrix**: 将 `streaming.progress.toolProgress` 范围限定到进度草稿模式,以便部分和安静 Matrix 预览不会丢失工具进度,除非 `streaming.preview.toolProgress` 被禁用。感谢 @vincentkoc。 - **Gateway/validation**: 隔离网关服务器验证文件,在请求跟踪覆盖中忽略无关启动日志,并在卡住的共享身份验证套接字上快速失败,减少贡献者主分支 CI 的误报。感谢 @amknight。 - **Channels/streaming**: 将 `streaming.progress.toolProgress` 范围限定到进度草稿模式,以便禁用紧凑进度行不会静默部分/块预览工具更新。感谢 @vincentkoc。 - **Plugins/update**: 将 OpenClaw 稳定校正版本(如 `2026.5.3-1`)视为 npm 安装、插件更新和捆绑版本比较的稳定版本,以便 `latest` 可以在不需要预发布选择的情况下推进官方插件。感谢 @vincentkoc。 - **Control UI**: 将 Appearance tweakcn 浏览操作和文档指向实时 tweakcn 编辑器路由,而不是删除的 `/themes` 页面。修复 #77048。 - **Control UI**: 通过消毒 markdown 管道渲染 Dream Diary 散文,以便日记粗体/斜体/标题 markdown 不再显示为字面源文本。修复 #62413。 - **Control UI**: 渲染输出作为文本块数组到达的工具结果,并为扩展的工具输出提供可滚动块,以便 read/exec 输出在 WebChat 中保持可见。修复 #77054。 - **MCP**: 在 `conversations_list` 和 `messages_read` 的主要文本内容中包含序列化的会话/消息负载,同时为 capable 客户端保留 `structuredContent`。修复 #77024。 - **Media**: 将后写媒体 fsync 步骤中的 `EPERM` 视为尽力而为,允许 WebChat 和频道上传在拒绝 fsync 的 Windows 文件系统上成功写入后完成。修复 #76844。 - **Media/Telegram**: 当可选图像优化不可用时发送限制内的原始图像,以便 Telegram MEDIA 回复和消息工具图像发送不会仅仅因为 `sharp` 缺失而失败。修复 #77081。 (#77117) 感谢 @pfrederiksen。 - **Diagnostics**: 在 cron 恢复上下文中包含最后进度、cron 作业/运行 ID、停止的 cron 作业名称和最后助手 transcript 片段,以便 cron 停滞显示什么被停止。 - **Streaming channels**: 添加 `streaming.preview.commandText: "status"` / `streaming.progress.commandText: "status"` 在进度草稿行中隐藏命令/exec 文本,同时保持发布的原始命令文本默认值。修复 #77072。 - **Agents/cron**: 让显式 cron `timeoutSeconds` 驱动 CLI 无输出和嵌入式 LLM 空闲看门狗,而不是被恢复默认值限制。修复 #76289。 - **Plugins/catalog**: 对禁用、拒绝或超出限制允许列表的外部频道插件抑制缺失 `channelConfigs` 兼容性诊断。修复 #76095。 - **Diagnostics**: 保持 webhook/message OTEL 属性和 Prometheus 传递标签低基数,并从跨度中省略原始聊天/消息 ID,以便进度草稿和消息工具模式不泄漏高基数消息标识符。 - **Google Meet**: 停止向代理和配置 UI 宣传遗留 `mode: "realtime"`,同时将其作为 `mode: "agent"` 的隐藏兼容别名保留,以便新加入使用 STT -> OpenClaw 代理 -> TTS 路径,而不是选择直接实时语音回退。 - **Google Meet**: 为生成的命令对 SoX 音频命令添加 `chrome.audioBufferBytes`,并将 SoX 的 8192 字节默认缓冲区降低到 4096 字节以减少 Chrome 回话延迟。 - **Google Meet**: 将实时提供商配置拆分为代理模式转录和双向模式语音提供商,并使用 `doctor --fix` 迁移遗留 Gemini Live 双向配置,以便 Gemini Live 可以支持直接双向回退而不破坏默认 OpenClaw 代理回话路径。 - **Google Meet**: 在加入介绍准备期间保持等待 Meet 麦克风取消静音,而不是在 Meet 短暂报告本地麦克风静音时永久跳过回话。 - **Google Meet**: 在插件清单模式和设置提示中公开 `voiceCall.postDtmfSpeechDelayMs`,以便基于清单的配置编辑接受运行时支持的 Twilio 延迟键。感谢 @vincentkoc。 - **Google Meet**: 当 `realtime.transcriptionProvider` 未设置时,保持显式非 Google `realtime.provider` 值作为转录提供商兼容回退。感谢 @vincentkoc。 - **Google Meet**: 使 Twilio 设置状态需要启用的 `voice-call` 插件条目,而不是将缺失条目视为就绪。感谢 @vincentkoc。 - **Telegram**: 在回复传递中渲染共享交互式回复按钮,以便插件批准消息显示内联键盘。 (#76238) 感谢 @keshavbotagent。 - **Cron/sessions**: 保持没有磁盘 transcript 的 cron 元数据行不可恢复,直到 transcript 存在,以便 doctor 和 `sessions cleanup --fix-missing` 不再报告或修剪预 transcript cron 行作为损坏会话。引用 #77011。 - **OpenAI Codex**: 当过时 `/codex bind` 边车在重启后存活时重新创建缺失的绑定应用服务器线程,在选择身份验证配置文件和回合覆盖之前保留选定的身份验证配置文件和回合覆盖。 (#76936) 感谢 @keshavbotagent。 - **Agents/cli-runner**: 当其磁盘 transcript 不再存在于 `~/.claude/projects/` 中时,在准备时丢弃保存的 `claude-cli` 恢复 sessionId,以便来自半安装 `update.run` 的过时绑定不能将后续运行(自动回复/Telegram 直接)困在 `claude --resume` 超时循环中;运行重新开始,新的 sessionId 通过现有后运行流程写回。 (#77030; 引用 #77011) 感谢 @openperf。 - **Release validation**: 通过 Windows 安全 Node/npm 模拟安装跨操作系统 TypeScript harness,以便原生 Windows 包检查到达 OpenClaw 烟雾套件而不是在工件捕获之前退出。感谢 @vincentkoc。 - **Release validation**: 让 Windows 打包升级检查在 shipped 2026.5.2 更新程序命中其原生模块交换清理回退后继续,通过包元数据和下游烟雾验证回退安装的候选,而不是在立即更新状态探测上崩溃。感谢 @vincentkoc。 - **Doctor/plugins**: 当另一个配置插件是同一频道的有效所有者时,跳过频道衍生的官方插件安装,以便 `doctor --repair` 在 `openclaw-lark` 处理 `channels.feishu` 时不会重新安装 `feishu`。修复 #76623。感谢 @fuyizheng3120。 - **Gateway/sessions**: 记忆重复的思考选项丰富化,并在列出会话时跳过未使用的成本回退检查,减少大型多代理存储上的每行工作。修复 #76931。 - **Gateway/sessions**: 限制默认 `sessions.list` RPC 响应并报告截断元数据,防止 Slack 重长期存储强制无界网关行构造。修复 #77062。 - **Agents/tools**: 对插件工具注册和实时运行时配置获取器使用仅配置运行时快照,避免核心插件工具准备路径上昂贵的完整机密快照克隆。修复 #76295。 - **Agents/tools**: 在构建嵌入式运行器工具系列和捆绑 MCP/LSP 运行时期间尊重有效工具拒绝列表,以便 `tools.deny: ["pdf"]` 在后期策略过滤之前跳过 PDF 设置。修复 #76997。 - **MCP/plugin tools**: 在通过独立 MCP 桥公开插件工具时应用全局 `tools.profile`、`tools.alsoAllow` 和 `tools.deny` 策略,以便 ACP 客户端看不到策略隐藏的插件工具或错过 opt-in 可选工具。感谢 @vincentkoc。 - **Plugin tools**: 在选择插件工具运行时尊重显式工具拒绝列表,以便在后期策略过滤之前不物化拒绝的插件工具用于直接命令或网关表面。感谢 @vincentkoc。 - **Plugin tools**: 通过清单每工具可选策略过滤工厂返回的工具,以便来自共享运行时工厂的可选同级工具保持隐藏,除非明确允许。感谢 @vincentkoc。 - **Agents/transcripts**: 仅在实际入站用户回合持久化后从当前 transcript 重试上下文溢出压缩,并保持 WebChat 代理运行实时交付不写入重复 Pi 管理的助手回合。修复 #76424。 (#77033) - **Agents/bootstrap**: 将挂起的 `BOOTSTRAP.md` 和引导截断通知保留在系统提示项目上下文中,而不是将设置文本或原始警告诊断复制到 WebChat 用户/运行时上下文。修复 #76946。 - **Gateway/install**: 在仍然跟踪 `OPENCLAW_SERVICE_MANAGED_ENV_KEYS` 的同时保留 `.env` 管理的值在 macOS LaunchAgent 环境文件中,以便重新生成的服务不会在托管身份验证/提供商密钥缺失的情况下启动。修复 #75374。 - **Gateway/restart**: 当 `lsof` 仅报告 Node 进程名称时,通过 argv 验证监听器 PID,以便过时网关清理可以找到 macOS `cnode` 监听器。修复 #70664。 - **Gateway/logging**: 在创建文件日志记录器之前扩展 `logging.file` 中的前导 `~`,防止主目录相对日志路径的启动崩溃循环。修复 #73587。 - **Channels/CLI**: 当提供商使用获取失败时保持 `openclaw channels list --json` 可用,并报告每个提供商使用错误而不中止频道列表。引用 #67595。 - **Doctor/plugins**: 在缺失插件修复期间不将 `plugins.allow` 条目视为配置插件,以便限制允许列表不再安装允许但未使用的插件。感谢 @vincentkoc。 - **Agents/messaging**: 在相同目标 `message` 工具发送后传递不同的最终评论,同时仍然去重工具已发送的文本/媒体,以便简短结束语不再被静默丢弃。修复 #76915。感谢 @hclsys。 - **Agents/messaging**: 在匹配消息工具回复去重路由时保留字符串线程 ID,避免在频道插件比较之前数字外观主题 ID 的精度损失。感谢 @vincentkoc。 - **Channels/streaming**: 在 Slack、Discord、Telegram、Matrix 和 Microsoft Teams 进度草稿中尊重 `agents.defaults.toolProgressDetail: "raw"`,以便工具启动行在调试时包括原始命令/详细输出。感谢 @vincentkoc。 - **Channels/streaming**: 从压缩的原始进度草稿行中剥离不匹配的行内代码反引号,避免长命令细节缩短后残留 markdown 标记。感谢 @vincentkoc。 - **Discord/Slack/Mattermost**: 使草稿预览工具进度配置帮助与运行时行为对齐,当 `streaming.preview.toolProgress` 为 false 时隐藏中间工具更新。感谢 @vincentkoc。 - **Feishu**: 对流式卡片工具状态行使用共享频道进度格式化程序,包括原始命令/详细输出和消息工具过滤。感谢 @vincentkoc。 - **Mattermost**: 对工具状态预览使用共享进度草稿格式化程序,包括当 `agents.defaults.toolProgressDetail: "raw"` 启用时的原始命令/详细输出。感谢 @vincentkoc。 - **Mattermost**: 在草稿预览活动时(包括草稿工具行被禁用时)抑制独立默认工具进度消息。感谢 @vincentkoc。 - **Telegram**: 通过发送共享回退按钮标签文本与内联键盘,交付仅按钮交互回复,而不是将回复作为空丢弃。感谢 @vincentkoc。 - **OpenAI Codex**: 在没有显式身份验证配置文件启动应用服务器客户端时尊重 `auth.order.openai-codex`,以便状态/模型探测和隐式启动使用配置的 Codex 帐户而不是回退到默认配置文件。感谢 @vincentkoc。 - **OpenAI Codex**: 让 SSRF 保护的提供商请求继承 OpenClaw 的 undici IPv4/IPv6 回退策略,以便 ChatGPT 支持的 Codex 运行在 DNS 仍返回不可达 IPv6 地址时在 IPv4 工作的主机上恢复。修复 #76857。感谢 @jplavoiemtl 和 @SymbolStar。 - **Plugin updates**: 当默认/最新规格仍解析为安装程序应替换为稳定回退的已安装预发布时,不要将受信任的官方 npm 更新短路为未更改。感谢 @vincentkoc。 - **Plugin updates**: 清理仅遗留安装记录仅保存解析包名称的已外部化 npm 安装的过时捆绑加载路径。感谢 @vincentkoc。 - **Plugin tools**: 即使另一个默认工具来自同一插件且 `tools.alsoAllow` 命名可选工具,也保持身份验证不可用的可选工具隐藏。感谢 @vincentkoc。 - **Realtime transcription**: 将提供商就绪之前的套接字关闭报告为就绪前关闭失败,而不是将其错误标记为 OpenAI、xAI 和 Deepgram 流式传输转录的连接超时。感谢 @vincentkoc。 - **OpenAI/Google Meet**: 当套接字在 `session.updated` 之前关闭时失败实时语音连接尝试,避免卡住的 Meet 加入等待从未就绪的桥接。感谢 @vincentkoc。 - **Google Meet**: 在抑制实时回声 transcript 时避免将重复参与者单词视为多个助手重叠匹配。感谢 @vincentkoc。 - **Google Meet**: 使 `mode: "agent"` 成为默认 Chrome 回话路径,使用实时转录输入和常规 OpenClaw TTS 语音输出,同时保持直接实时语音答案可用作为 `mode: "bidi"` 并接受 `mode: "realtime"` 作为代理模式兼容别名。 - **Codex harness**: 保持 `codex_app_server.*` 遥测发布由 harness 拥有而不是从核心运行程序重新发布相同的回调事件。感谢 @vincentkoc。 - **Slack/Discord**: 当部分预览流式传输具有 `streaming.preview.toolProgress: false` 时抑制独立工具进度 chatter,匹配记录的安静预览行为。感谢 @vincentkoc。 - **Matrix**: 在发布选项反应之前绑定本机批准反应目标,以便线程提示上的快速批准反应不会在批准处理程序完成设置时丢失。感谢 @vincentkoc。 - **Google Meet**: 使实时回话代理驱动默认带有 `realtime.strategy: "agent"`,保持先前直接双向模型行为可用作为 `realtime.strategy: "bidi"`,将 Meet 选项卡扬声器输出路由到 `BlackHole 2ch` 自动用于本地 Chrome 实时加入,在咨询代理之前合并附近语音 transcript 片段,并避免从服务器 VAD 或过时播放管道错误切断代理语音。 - **Google Meet**: 抑制来自实时输入路径的排队助手播放和类似助手 transcript 回声,以便会议不会将代理自己的语音听到为新用户回合并循环或切断自己。 - **Google Meet**: 保持 Chrome 实时传输测试在 Linux 预发布分片上的密封性,同时保留仅 macOS 运行时保护。感谢 @vincentkoc。 - **QA/Matrix**: 让实时工具进度预览和错误检查验证进度替换事件,而不依赖于预览说 `Working`、`tool: read`、无标签/无路径 `read from` 或观察到的原始草稿根。感谢 @vincentkoc。 - **QA/Matrix**: 通过两个 Matrix 事件都观察到后通过网关解析接受的批准,保持目标=both 批准场景专注于频道和 DM 元数据传递。感谢 @vincentkoc。 - **QA/Matrix**: 在启动线程批准决策超时之前等待实时批准反应回显。感谢 @vincentkoc。 - **QA/Matrix**: 在确认批准反应回显时重用启动的驱动程序同步流,避免实时发布运行中的遗漏自我反应。感谢 @vincentkoc。 - **Channels/WhatsApp**: 在入站调度期间应用共享组/频道可见回复模式,以便组回复默认保持仅消息工具,而不覆盖直接聊天 harness 默认值。引用 #75178 和 #67394。感谢 @scoootscooob。 - **Plugins/Codex**: 为 `/codex bind` 应用服务器回合保留 Codex 原生 OAuth 路由,以便绑定会话保持选定的 Codex 身份验证配置文件而不是回退到公共 OpenAI 凭据。 (#76714) 感谢 @keshavbotagent。 - **Telegram**: 保持状态检查指向活动聊天,以便请求当前会话不再报告旧的直接消息会话。 (#76708) 感谢 @amknight。 - **Gateway/install**: 在重新生成托管网关服务时优先支持系统 Node 而不是 nvm/fnm/volta/asdf/mise,以便 `gateway install --force` 不再重新创建医生立即标记为版本管理器支持的 service 定义。修复 #76339。感谢 @brokemac79 和 @BunsDev。 - **Google Chat**: 在 google-auth-library 读取缓存控制之前规范化 Google 身份验证证书响应头,以便入站 webhook 身份验证不再用 `res?.headers.get is not a function` 拒绝。修复 #76880。感谢 @donbowman。 - **WhatsApp**: 通过活动运行时路由登录成功和失败消息,以便 `openclaw channels login --channel whatsapp` 不会在直接 stdout 写入后丢失 QR。修复 #76213。感谢 @dougvk。 - **Proxy/debugging**: 在托管代理模式活动期间禁用调试代理直接上游转发代理请求和 CONNECT 隧道,除非 `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` 为批准的本地诊断明确设置。感谢 @jesse-merhi 和 @mjamiv。 - **Direct APNs**: 通过活动托管代理路由直接 HTTP/2 传递,并编辑代理诊断,以便推送请求尊重配置的出口控制,并且 `openclaw proxy validate --apns-reachable` 可以在部署前证明 APNs 通过代理可达。 (#74905) 感谢 @jesse-merhi。 - **Agents/subagents**: 检测仅前缀完成宣布回复并回退到捕获的子结果,以便请求聊天不再静默丢失长子代理报告的大部分。修复 #76412。感谢 @inxaos 和 @davemorin。 - **TUI**: 用普通面向用户的副本替换过时响应看门狗通知,以便停滞回复不再表面后端或流式传输内部。 (#77120) 感谢 @davemorin。 - **Security/Windows**: 通过 Windows 安装根验证器验证 `SystemRoot`/`WINDIR` env 值,并在解析 `icacls.exe`/`whoami.exe` 用于 `openclaw security audit` 时将它们添加到危险主机 env 策略,以便工作区 `.env` 覆盖和裸命令名称不能将 Windows ACL 助手重定向到攻击者控制的二进制文件。 (#74458) 感谢 @mmaps。 - **Security/Windows**: 将 Windows 注册表探测 `reg.exe` 解析固定到 Windows 安装根在安装根探测中的规范 Windows 安装根,以便 `SystemRoot`/`WINDIR` env 覆盖不能在 Windows 主机检测期间重定向注册表查询。 (#74454) 感谢 @mmaps。 - **QQBot**: 在将框架命令上下文转换为引擎斜杠命令上下文时保留框架命令授权决定,以便下游斜杠处理程序看到 `commandAuthorized` 匹配频道的解析 `isAuthorizedSender` 而不是硬编码的 `true`。 (#77453) 感谢 @drobison00。 - **Security/Windows**: 阻止 `LOCALAPPDATA` 来自工作区 `.env` 并从受信任的进程本地 `LOCALAPPDATA` 解析 Windows 更新流便携 Git 路径前置,以便工作区提供的值不能在 `openclaw update` 期间重定向 `git` 发现。 (#77470) 感谢 @drobison00。 - **Browser/SSRF**: 在现有会话截图之前强制执行现有的当前选项卡 URL 导航策略,以便阻止的选项卡返回策略错误而不是首先被读取并且仅在响应时间编辑。 (#75731) 感谢 @eleqtrizit。 - **Security/Windows**: 将 `.cmd`/`.bat` 进程包装器路由通过共享 Windows 安装根解析器而不是 `process.env.ComSpec`,以便工作区 dotenv 阻止的 `SystemRoot`/`WINDIR` 覆盖和不安全值如 UNC 路径或路径列表不能在 Windows 上重定向 `cmd.exe` 选择。 (#77472) 感谢 @drobison00。 - **Agents/bootstrap**: 在决定引导是否挂起时尊重 `agent:bootstrap` 钩子注入的 `BOOTSTRAP.md` 内容,以便钩子提供的所需设置说明包含在系统提示中。 (#77501) 感谢 @ificator。