← 返回更新日志

OpenClaw v2026.5.4-beta.2 预发布

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