← 返回更新日志

OpenClaw v2026.5.3

2026-05-04 · GitHub 原文
### 亮点 - **Plugins/file-transfer**: 添加捆绑的文件传输插件,包含 `file_fetch`、`dir_list`、`dir_fetch` 和 `file_write` 代理工具,用于在配对节点上执行二进制文件操作;在 `plugins.entries.file-transfer.config.nodes` 下实施默认拒绝的每节点路径策略(需操作员批准),默认拒绝符号链接遍历(需通过 `followSymlinks` 显式 opting-in),并设置每轮 16 MB 的字节上限。(#74742) 感谢 @omarshahine。 - **Plugins/install**: 强化官方插件的安装、卸载、更新、引导、ClawHub 回退、npm 依赖状态报告以及 Beta 通道更新路径,使外部化插件的行为如同一级包安装。 - **Gateway/performance**: 通过延迟加载插件/运行时发现、cron、schema、关闭、会话和模型元数据工作(仅在需要时执行),精简启动和控制 UI 热路径。 - **Channels/replies**: 改进 Discord 状态反应和降级传输报告,添加 WhatsApp 频道/通讯稿目标,并收紧 Telegram、飞书、Matrix、Microsoft Teams 和 Slack 的交付/恢复行为。 - **Install/update**: 恢复损坏的 macOS LaunchAgent 升级,在运行时加载前拒绝仅包含源代码的插件包,并在更新和 doctor 运行期间修复过时的 Gateway/插件状态。 - **Agent/runtime reliability**: 在常见边缘情况下保持流式传输的提供方回复、延迟的 A2A 会话回复、提示/工具交付、记忆召回、网络搜索提供方发现以及特定于提供方的推理/模型元数据。 ### 变更 - **Channels/streaming**: 添加统一的 `streaming.mode: "progress"` 草稿,支持自动单字状态标签,并在 Discord、Telegram、Matrix、Slack 和 Microsoft Teams 之间共享进度配置。 - **Agents/commands**: 添加 `/steer <message>`,用于在会话空闲且不开启新回合时,对当前活动的会话运行进行独立于队列的引导。(#76934) - **Tools/BTW**: 添加 `/side` 作为 `/btw` 附带问题的文本和原生斜杠命令别名。 - **Doctor/config**: `doctor --fix` 现在即使存在无关的验证问题(例如缺少插件)导致无法完全通过验证,也会提交安全的旧版迁移,因此 `agents.defaults.llm` 和其他已知旧版键始终会被 `doctor --fix` 清理,无论其他配置问题如何。修复 #76798。(#76800) 感谢 @hclsys。 - **Agents/tools**: 当有效的工具黑名单已阻止可选媒体和 PDF 工具工厂时,跳过其设置,避免为在模型使用前将被过滤的工具进行不必要的热路径设置。(#76773) 感谢 @dorukardahan。 - **Discord/status**: 允许显式的反应工具调用通过 `trackToolCalls: true` 选择跟踪被反应消息上的后续工具进度,并使用共享工具显示表情符号表进行状态反应。 - **Gateway/config**: 停止 Gateway 启动和热加载自动恢复无效配置;无效配置现在会失败关闭,`openclaw doctor --fix` 负责最后已知良好的修复。 - **Gateway/performance**: 延迟加载早期运行时发现和关闭钩子辅助程序,将维护计时器推迟到就绪之后,并在 Gateway 启动期间精简重复的插件自动启用工作。 - **QA/Mantis**: 添加 `pnpm openclaw qa mantis discord-smoke` 运行器和手动 GitHub 工作流,验证 Mantis Discord 机器人能否看到配置的服务器/频道、发布烟雾消息、添加反应并上传产物。 - **QA/Slack**: 添加 Slack 实时传输 QA 运行器,覆盖专用机器人对机器人 harness 的 Canary 和提及门控。感谢 @vincentkoc。 - **Plugins/onboarding**: 允许手动设置安装可选的官方插件,包括基于 ClawHub 的诊断(带 npm 回退),并将外部 Codex 插件公开为可选提供方设置选择。感谢 @vincentkoc。 - **Plugins/CLI/update**: 在 `openclaw plugins list --json` 中包含包依赖安装状态,信任官方外部化的 npm 迁移,为外部化安装清理过时的捆绑加载路径,在 Beta OpenClaw 通道上优先尝试插件 `@beta` 更新,当没有插件 Beta 版本时回退到 default/latest。 - **Plugins/ClawHub**: 为 429 错误标注重置窗口和未认证的高速率限制提示,以便操作员知道下载何时恢复以及登录何时有帮助。感谢 @romneyda。 - **Gateway/performance**: 延迟加载早期运行时发现、关闭钩子、cron、通道配置 schema 元数据、重启哨兵和维护计时器(在就绪之后);精简重复的插件自动启用工作并添加启动 CPU/性能分析控制。 - **Gateway/config**: 停止 Gateway 启动和热加载自动恢复无效配置;无效配置现在会失败关闭,`openclaw doctor --fix` 负责最后已知良好的修复。 - **Discord/status**: 允许显式的反应工具调用通过 `trackToolCalls: true` 选择跟踪后续工具进度,共享工具显示表情符号映射,并在状态输出中公开降级的 Discord 传输或网关事件循环饥饿情况。(#76327) 感谢 @joshavant。 - **Channels/WhatsApp**: 支持显式的 WhatsApp 频道/通讯稿 `@newsletter` 出站消息目标,使用频道会话元数据而非 DM 路由。修复 #13417;继承自 #13424 的狭义出站目标思路。感谢 @vincentkoc 和 @agentz-manfred。 - **Agents/tools**: 当有效的工具黑名单已阻止可选媒体和 PDF 工具工厂时,跳过其设置,避免为在模型使用前将被过滤的工具进行不必要的热路径设置。(#76773) 感谢 @dorukardahan。 - **Agents/sandbox**: 将沙盒容器和浏览器注册表条目存储为每运行时分片文件,在 `openclaw doctor --fix` 迁移遗留单体注册表文件时减少不相关的会话锁争用。(#74831) 感谢 @luckylhb90。 - **Tools/BTW**: 添加 `/side` 作为 `/btw` 附带问题的文本和原生斜杠命令别名。 - **Exec approvals**: 添加基于 tree-sitter 的 shell 命令解释器,用于未来的审批和命令审查界面。(#75004) 感谢 @jesse-merhi。 - **QA/Mantis**: 添加 `pnpm openclaw qa mantis discord-smoke` 运行器和手动 GitHub 工作流,验证 Mantis Discord 机器人能否看到配置的服务器/频道、发布烟雾消息、添加反应并上传产物。 ### 修复 - **Channels/WhatsApp**: 允许 `@whiskeysockets/libsignal-node` 出现在 `onlyBuiltDependencies` 中,使 pnpm v9+ `blockExoticSubdeps` 不再拒绝 baileys git-tarball 子依赖,并静默所有入站代理回复。修复 #76539。感谢 @ottodeng 和 @vincentkoc。 - **Gateway/systemd**: 在重新部署期间保留 Gateway 环境文件中操作员添加的密钥,同时清除 OpenClaw 管理的密钥(如 `OPENCLAW_GATEWAY_TOKEN`),以免新的临时值被过时的环境文件副本掩盖;当状态目录 `.env` 为空时也保留操作员密钥。修复 #76860。感谢 @hclsys。 - **Plugin updates**: 当 default/latest 规范仍解析为已安装的预发布版本(安装程序应将其替换为稳定回退)时,不要将受信任的官方 npm 更新短路为未更改。 - **Plugin tools**: 即使同一插件的另一个默认工具可用且 `tools.alsoAllow` 命名了可选工具,也保持认证不可用的可选工具隐藏。 - **Realtime transcription**: 将提供商就绪前的套接字关闭报告为“就绪前关闭”失败,而不是误标为 OpenAI、xAI 和 Deepgram 流式传输转录的连接超时。感谢 @vincentkoc。 - **OpenAI/Google Meet**: 当套接字在 `session.updated` 之前关闭时,使实时语音连接尝试失败,避免 Meet 加入卡在从未就绪的网桥上。感谢 @vincentkoc。 - **QA/cache**: 要求完整的 `CACHE-OK <suffix>` 标记后实时缓存探测才停止重试,因此仅以后缀开头的散文无法隐藏损坏的探测响应。感谢 @vincentkoc。 - **Slack/Matrix**: 避免在 `streaming.progress.label=false` 且进度工具行被禁用时创建空白进度草稿消息。感谢 @vincentkoc。 - **QA/Matrix**: 使模拟 OpenAI 工具进度提供方与精确标记的 Matrix 提示保持对齐,因此强化的实时预览场景仍会在最终交付前强制确定性读取。感谢 @vincentkoc。 - **OpenAI/Google Meet**: 在将网桥视为已连接之前等待实时语音 `session.updated`,因此 Meet 加入不会返回音频,且音频排在未配置的实时会话之后。感谢 @vincentkoc。 - **Plugins/catalog**: 将官方外部目录描述符合并到部分包通道配置元数据中,因此滞后的企业微信/元宝清单保留自己的 schema,同时仍公开主机提供的标签和设置文本。感谢 @vincentkoc。 - **Plugins/catalog**: 用 OpenClaw 目录中的通道配置描述符和声明的工具契约补充滞后的官方外部企业微信和元宝 npm 清单,因此受信任的包扫描不再因外部包元数据落后于主机契约而失败。感谢 @vincentkoc。 - **Plugins/install**: 允许受信任的官方 `@openclaw/*` 目录安装在 npm `latest` 指向预发布版本时通过回退到最新的稳定版本恢复,或通过选择最新的确切预发布版本(带警告)用于仅预发布的启动包,而不是使 Beta/开发插件扫描在安装时失败。感谢 @vincentkoc。 - **Google Meet**: 针对实际的 Meet 标签页授予 Chrome 媒体权限,仅在 Meet 加入后启动本地实时音频网桥,在状态/日志中公开实时记录,并使用当前 OpenAI 实时输出音频事件强制显式音频响应,因此 BlackHole 捕获不会使 OpenClaw 参与者保持静音或无声。 - **Memory/LanceDB**: 在捆绑的记忆插件包中声明 `apache-arrow`,以便 LanceDB 安装包含其运行时对等依赖。修复 #76910。感谢 @afiqfiles-max。 - **CLI/devices**: 在配对范围所有权被拒绝后,使用 `operator.admin` 重试显式设备配对批准,因此现有的具有管理权限的配对设备令牌可以在升级后恢复新的控制 UI/浏览器配对,而无需手动 JSON 编辑。修复 #76956。感谢 @neo19482。 - **Google Meet**: 使用本地呼叫控制麦克风按钮而非禁用的远程参与者静音按钮,并在 OpenClaw Meet 麦克风保持静音时阻止实时语音。感谢 @vincentkoc。 - **Google Meet**: 在状态和重试延迟语音期间刷新实时浏览器状态,因此刚刚打开的呼叫中标签页不再将语音卡在过时的“未在呼叫中”健康状态之后。感谢 @vincentkoc。 - **Plugins/install**: 当 `plugins/installs.json` 为空或不完整时,从管理的 npm 根清单恢复安装账本,因此重新安装 Discord 和 Codex 不再使另一个已安装的插件消失。 - **Google Meet**: 当 CDP 授权不影响附加的 Chrome 页面时,通过 Playwright 浏览器上下文授予 Meet 媒体权限,并报告呼叫中麦克风/扬声器权限问题,而非标记实时语音就绪。感谢 @vincentkoc。 - **QA/Slack**: 在任何意外 SUT 回复时(即使回复未回显预期标记)失败实时提及门控场景。感谢 @vincentkoc。 - **QA/Matrix**: 将实时工具进度预览检查从 `HEARTBEAT.md` 移开,并在实时标记回复错过确切令牌时报告最终预览候选项。感谢 @vincentkoc。 - **QA/Matrix**: 允许实时工具进度预览检查验证进度替换事件,而不依赖于预览显示“Working”。感谢 @vincentkoc。 - **Tlon**: 在通道配置 schema 中公开 `groupInviteAllowlist` 并澄清,在没有邀请允许列表的情况下,群组邀请自动接受会失败关闭。感谢 @vincentkoc。 - **Control UI/WebChat**: 将飞行中的内部文本发送折叠到活动的 Gateway 运行上,因此快速重复提交不会启动新的 `agent:main:main` 调度。修复 #75737。感谢 @dsdsddd1 和 @BunsDev。 - **Mattermost**: 接受文档化的 `channels.mattermost.streaming` 配置,并通过禁用草稿预览帖子来遵守 `streaming: "off"`。感谢 @vincentkoc。 - **Mattermost**: 在生成的通道配置元数据中公开流式传输进度配置标签和帮助文本,以便控制 UI/文档可以解释新的 `channels.mattermost.streaming.progress.*` 字段。感谢 @vincentkoc。 - **Mattermost**: 在进度草稿模式下遵守 `channels.mattermost.streaming.progress.toolProgress=false`,因此紧凑的工具状态行在最终交付前保持隐藏。感谢 @vincentkoc。 - **Microsoft Teams**: 在原生 Teams 流式传输中遵守进度草稿工具行,并在 `channels.msteams.streaming.progress.toolProgress=false` 时抑制独立的工具消息。感谢 @vincentkoc。 - **Discord**: 在流式传输回复期间保持进度草稿边界回调绑定,因此扩展 lint 在进度预览在助手和推理块之间转换时保持绿色。感谢 @vincentkoc。 - **Discord**: 为命名账户从活动运行时快照解析 SecretRef 支持的机器人令牌,并保持未解析的配置令牌不会导致状态或健康检查崩溃。(#76987) 感谢 @joshavant。 - **Gateway/config**: 停止 Gateway 启动和热加载自动恢复无效配置;无效配置现在会失败关闭,`openclaw doctor --fix` 拥有最后已知良好的修复。 - **Channels/streaming**: 在捆绑的通道配置元数据中公开 `streaming.progress.label`、`labels`、`maxLines` 和 `toolProgress`,因此进度草稿设置出现在配置、文档和控制界面中。感谢 @vincentkoc。 - **Channels/streaming**: 为 `streaming.progress.label: "auto"` 规范化空白和大小写,因此进度草稿标签继续使用内置标签池,而不是渲染字面量 `auto` 标题。感谢 @vincentkoc。 - **Plugins/Codex**: 为 `/codex bind` 应用服务器回合保留 Codex 原生 OAuth 路由,因此绑定的会话保持选定的 Codex 身份验证配置文件,而不是回退到公共 OpenAI 凭据。(#76714) 感谢 @keshavbotagent。 - **Gateway/install**: 在重新生成管理的 gateway 服务时优先支持的系统 Node 而非 nvm/fnm/volta/asdf/mise,因此 `gateway install --force` 不再重新创建 doctor 立即标记为版本管理器支持的 service definitions。修复 #76339。感谢 @brokemac79。 - **Cron/status**: 将显式的 `delivery.mode: "none"` 作业渲染为无交付预览,并区分 cron 会话历史标签,而不是显示回退交付或直接会话行。修复 #76945。 - **Gateway/usage**: 从持久的记录聚合缓存提供 `usage.cost` 和 `sessions.usage`,具有锁安全的后台刷新和本地化的陈旧缓存状态,因此大型使用视图避免重复完整扫描。(#76650) 感谢 @Marvinthebored。 - **Plugins/hooks**: 允许 `plugins.entries.<id>.hooks.timeoutMs` 和 `plugins.entries.<id>.hooks.timeouts` 绑定插件类型化钩子来自操作员配置,因此慢钩子可以调整而无需修补已安装的插件代码。修复 #76778。感谢 @vincentkoc。 - **Telegram**: 在顶层和每个账户添加 `channels.telegram.mediaGroupFlushMs`,因此操作员可以调整相册缓冲,而不是被硬编码的 500ms 媒体组刷新窗口卡住。修复 #76149。感谢 @vincentkoc。 - **Config/messages**: 将布尔值 `messages.visibleReplies` 和 `messages.groupChat.visibleReplies` 强制转换为文档化的枚举模式,因此直观的切换不再使配置无效并丢弃通道启动。修复 #75390。感谢 @scottgl9。 - **Agents/network**: 允许受信任的网络搜索提供方和配置的模型提供方主机在 Surge/Clash/sing-box 假 IP DNS 后工作,通过仅接受请求作用域主机名的 RFC 2544 和 IPv6 ULA 合成答案,而不允许广泛的私有网络访问。引用 #76530 和 #76549。感谢 @zqchris。 - **Providers**: 当未配置显式调度程序策略时,遵守受保护提供方模型获取的 env-proxy 设置,保留显式传输覆盖。修复 #70453。(#72480) 感谢 @mjamiv。 - **Web fetch**: 添加默认关闭的 `tools.web.fetch.useTrustedEnvProxy` 选择加入,用于仅代理环境,因此 `web_fetch` 可以让操作员控制的 HTTP(S) 代理解析 DNS,同时保留默认的严格 DNS 固定和主机名策略检查。引用 #58034 和 #62560。感谢 @cosmicnet 和 @mjamiv。 - **Feishu**: 在顶层和每个账户接受并遵守 `channels.feishu.blockStreaming`,同时保持遗留默认关闭,因此飞书卡片不再拒绝文档化的配置或静默丢弃块回复。修复 #75555。感谢 @vincentkoc。 - **Gateway/update**: 避免在全新 macOS 更新引导后立即执行 `launchctl kickstart -k`,并在打包的 postinstall 和 `doctor --fix` 期间取消挂起的全局插件运行时符号链接,因此升级不再 SIGTERM 新启动的 Gateway 或使捆绑的插件导入指向已修剪的 `plugin-runtime-deps` 树。完成 #76261 并修复 #76466。(#76929) - **Google Chat**: 在 google-auth/gaxios 拦截器运行之前规范化自定义 Google 认证传输标头,恢复当证书检索期望 Fetch `Headers` 时的 webhook 令牌验证。修复 #76742。感谢 @donbowman。 - **Doctor/plugins**: 在 `doctor --fix` 期间重置过时的 `plugins.slots.memory` 和 `plugins.slots.contextEngine` 引用,因此缺失插件配置的清理不会留下无法恢复的槽所有者。修复 #76550 和 #76551。感谢 @vincentkoc。 - **Docs/WhatsApp**: 合并网关通道配置示例中的重复顶层 `web` 对象,因此复制粘贴的 WhatsApp 配置同时保留 `web.whatsapp` 和重连设置。修复 #76619。感谢 @WadydX。 - **Plugins/Anthropic**: 从捆绑的提供方策略工件公开 Claude 思维配置文件,因此非运行时调用者保留 Opus 4.7 `adaptive`、`xhigh` 和 `max`,而不是降级到 `high`。修复 #76779。感谢 @tomascupr 和 @iAbhi001。 - **Plugins/tools**: 将 `tools.alsoAllow` 遵守为可选插件工具发现提示,而不将其内部允许所有默认值视为加载每个清单标记的可选插件工具的权限。修复 #76616。 - **Discord/native commands**: 当 `channels.discord.commands.native=false` 时跳过斜杠命令注册和清理 REST 调用,允许低功耗网关启动而无需等待禁用的原生命令生命周期请求。修复 #76202。感谢 @vincentkoc。 - **CLI/plugins**: 在托管代理启动和完整插件 CLI 运行时加载之前拒绝未拥有的命令根(如 `openclaw foo`),同时保留清单拥有和 CLI 元数据拥有的插件命令。修复 #75287。感谢 @neilofneils404。 - **CLI/message**: 跳过显式网关拥有的消息操作的本地配置通道插件预加载,允许归一化的 CLI 交付委托给网关,而无需在短寿命 CLI 进程中初始化通道运行时。修复 #75477。 - **Plugins/commands**: 规范化空插件命令处理程序结果,并让 Telegram 原生插件命令发送空响应回退,而不是在处理程序返回 `undefined` 时抛出。修复 #74800。感谢 @vincentkoc。 - **Plugins/tools**: 当活动注册表只有部分工具覆盖时冷加载选定的插件工具注册表,因此通配符扩展允许列表不再隐藏已安装插件工具于 `tools.effective` 中。修复 #76780。感谢 @lilesjtu。 - **Plugins/tools**: 使用规范化的核心工具名称比较缓存和运行时插件工具名称冲突,因此核心工具的大小写变体被阻止,而不是泄漏重复的工具注册。感谢 @vincentkoc。 - **Plugins/OpenRouter**: 通过运行时和轻量级提供方策略表面宣传 DeepSeek V4 思维级别,包括 `xhigh` 和 `max`,因此 `/think` 验证不再拒绝 OpenRouter 路由的 DeepSeek V4 模型。修复 #74788。感谢 @vincentkoc。 - **Status/sessions**: 在渲染状态摘要时忽略格式错误的非字符串持久会话提供方/模型元数据,而不是抛出。修复 #76206。感谢 @vincentkoc。 - **CLI/config**: 对于 `openclaw config unset array[index]`,仅移除目标数组元素,而不是在配置写入期间重放 unset 并删除移位的下一个元素。修复 #76290。感谢 @SymbolStar 和 @vincentkoc。 - **Plugins/voice-call**: 将异常的本地 Gateway 关闭代码 1006 视为独立的 CLI 回退情况,因此 `voicecall smoke` 和相关命令在 Gateway 套接字关闭前返回响应时仍可运行提供方检查路径。 - **CLI/doctor**: 将遗留的每通道 `streaming.progress` 配置迁移到 `streaming.preview.toolProgress`,因此具有过时 Discord 或 Telegram 流式传输键的升级可以再次验证,而不是阻止插件命令。 - **Plugins/release**: 拒绝包含 TypeScript 运行时入口但缺少已编译 `dist/*.js` 输出的 ClawHub 代码插件包,并在 npm 和 ClawHub 插件发布预览期间运行包本地运行时构建检查。 - **Plugins/update**: 当配置仍表示 stable 时,将 Beta 安装的 OpenClaw 包更新保留在 Beta 插件通道上,因此 Discord 和其他外部化插件从已编译的 `@beta` 包更新,而不是过时的仅源代码 `latest` 工件。 - **Agents/tools**: 停止将 `tools.deny: ["write"]` 视为隐式的 `apply_patch` 拒绝;想要阻止补丁写入的操作员应显式拒绝 `apply_patch` 或 `group:fs`。修复 #76749。(#76795) 感谢 @Nek-12 和 @hclsys。 - **Plugins/release**: 在发布后验证发布的插件 npm 压缩包公开已编译的运行时入口,在发布结束前捕获仅 TS 的包工件。感谢 @vincentkoc。 - **CLI/message**: 在消息命令插件注册表加载失败调度前干净地退出并返回非零状态,防止 `openclaw-message` 子进程在插件加载错误后保持存活。修复 #76168。 - **Plugins/config**: 报告存在但被路径安全检查阻止的已配置插件为“被阻止”,而不是过时的 `plugin not found` 条目,并在发现期间去重重复的被阻止候选警告。修复 #76144。感谢 @mayank6136。 - **Gateway/update**: 在包更新后恢复已安装但未加载的 macOS LaunchAgent,重新运行 Gateway 健康/版本/通道就绪检查,并在报告更新失败之前打印重启、重新安装和回滚指南。(#76790) 感谢 @jonathanlindsay。 - **CLI/plugins**: 解释当缺失的插件命令别名属于默认禁用的捆绑插件时的情况,包括 `openclaw plugins enable <plugin>` 修复命令。(#76835) - **Gateway/Bonjour**: 仅在 macOS 主机上自动启动 LAN 多播发现,同时在其他地方保留显式的 `openclaw plugins enable bonjour` 启动,因此不需要 LAN 发现的 Linux 服务器和容器避免默认 mDNS 探测和 watchdog 抖动。引用 #74209。 - **Gateway/macOS**: 停止 `doctor` 和 LaunchAgent 恢复在全新引导后运行 `launchctl kickstart -k`,避免刚刚启动的网关立即 SIGTERM,同时仍轻推已加载的 launchd 作业。修复 #76261。感谢 @solosage1。 - **Google Meet**: 通过网关拥有的运行时路由有状态的 CLI 会话命令,因此加入的实时会话在启动 CLI 进程退出后仍能存活。修复 #76344。感谢 @coltonharris-wq。 - **Memory/status**: 在 `memory status --deep` 和 `openclaw status` 中将内置 sqlite-vec 存储就绪与嵌入提供方就绪分开,因此本地向量存储故障不再看起来像提供方故障,提供方故障也不再隐藏健康的本地向量存储。 - **CLI/doctor**: 当 CLI 端活动内存后端解析不可用时,信任就绪的网关内存探测,防止为健康的运行时设置误报“没有活动的记忆插件已注册”。修复 #76792。感谢 @som-686。 - **Memory/status**: 通过保留向量和嵌入提供方探测用于 `--deep` 或 `--index`,保持普通 `openclaw memory status` 和 `openclaw memory status --json` 在廉价只读路径上。修复 #76769。感谢 @daruire。 - **Telegram**: 当在较旧的飞行中 Telegram 调度完成之前接受更新的消息时,抑制过时的相同会话回复。修复 #76642。感谢 @chinar-amrutkar。 - **Gateway/diagnostics**: 节流重复的长时间运行活动工作会话警告,因此健康的 cron 或子代理运行不再每次心跳打印相同的 `recovery=none` 行。 - **Gateway/diagnostics**: 将非阻塞活动工作和瞬态事件循环最大峰值活跃度诊断保留在默认网关控制台之外,同时保留结构化诊断事件以及排队、停滞和恢复合格工作的警告。 - **Slack**: 将例行的 Socket Mode pong 超时重连折叠为一条 OpenClaw 重连行,并抑制重复的 Slack SDK pong 警告。 - **Gateway/diagnostics**: 在延长无进度停滞后中止排水嵌入式运行,因此单个死会话不再让排队的 Discord/通道回合被重复的 `recovery=none` 活跃度警告阻塞。 - **Plugins/ClawHub**: 接受实时工件解析器的 `kind`/`sha256` 字段名称以及类型化的 `artifactKind`/`artifactSha256` 形式,因此 `clawhub:` 安装的 npm 包和遗留 ZIP 包不再错过可下载工件。感谢 @romneyda。 - **Control UI/Sessions**: 避免对聊天回合 `sessions.changed` 有效负载进行完整的 `sessions.list` 重新加载,因此大型会话存储在聊天响应交付期间不再增加多秒延迟。(#76676) 感谢 @VACInc。 - **Gateway/watch**: 在开发 Gateway 子进程启动期间退出时运行一次 `doctor --fix --non-interactive` 并重试,因此过时的本地插件安装/配置状态不会让 tmux watch 会话消失而没有修复尝试。 - **Doctor/Telegram**: 警告选定的 Telegram 引用回复可以抑制 `streaming.preview.toolProgress`,并在不改变运行时交付的情况下记录 `replyToMode` 权衡。修复 #73487。感谢 @GodsBoy。 - **Channels/Discord**: 在接受入站 DM 后立即发送最大努力的本地输入指示,因此慢速预分发回合在排队、上下文组装、模型或工具工作开始前显示 Discord 活跃度。修复 #76417。感谢 @mlopez14。 - **Plugins/install**: 拒绝仅源代码的 TypeScript 包安装和缺少已编译运行时输出的已安装插件包,因此损坏的 npm 工件在安装/发现时失败,而不是通过 jiti 渗透并稍后作为不可用的提供方暴露。修复 #76720。 - **Plugins/config**: 当显式配置的插件覆盖另一个发现的候选时,去重相同的清单兼容性诊断,因此外部通道插件在安装和启用期间不重复打印相同的缺失 `channelConfigs` 警告。感谢 @vincentkoc。 - **Discord/status**: 在仅工具的服务器频道中遵守显式的 `messages.statusReactions.enabled: true`,因此排队 ack 反应可以经历思考/完成生命周期反应,而不是停在初始表情符号。感谢 @Marvinthebored。 - **Discord/native commands**: 在协调期间比较 Discord 规范化的斜杠命令描述和本地化描述,因此 CJK 或多行命令文本不再触发冗余的启动 PATCH 突发和速率限制 429。修复 #76587。感谢 @zhengsx。 - **Agents/OpenAI**: 仅在存在函数工具时为 `gpt-5.4-mini` 省略 Chat Completions `reasoning_effort`,同时保留无工具的 Chat 和 Responses 推理支持,防止 Telegram 路由的回退运行在 OpenAI 拒绝工具负载后挂起。修复 #76176。感谢 @ThisIsAdilah 和 @chinar-amrutkar。 - **Telegram**: 为 grammY 轮询启动重用成功的启动 `getMe` 探测,并在可恢复的 `deleteWebhook` 清理失败后继续进入 `getUpdates`,减少长轮询开始前的高延迟 Bot API 控制平面调用。引用 #76388。感谢 @jackiedepp。 - **Gateway/diagnostics**: 在诊断会话状态和活动跟踪中合并会话 id/键别名,因此完成的运行不再留下过时的排队工作,使活跃度样本保持在警告级别。 - **Agents/models**: 当未提供运行时覆盖时,将模型 `maxTokens` 转发为 OpenAI 兼容 Responses 和 Completions 传输的默认输出令牌限制,防止提供方默认值静默截断更大的输出。(#76645) 感谢 @joeyfrasier。 - **macOS CLI/onboarding**: 在 `openclaw-mac wizard` 中遵守敏感向导文本步骤,使用 termios 无回显输入,在保留长 API 密钥和网关令牌的同时抑制保存的凭据预览。修复 #76698。感谢 @anurag-bg-neu 和 @sallyom。 - **Control UI/Skills**: 通过延迟 `showModal()` 直到对话框元素连接到 DOM,修复技能详情模态在所有浏览器中静默失败的问题;Lit `ref` 回调在连接前触发,导致每次技能点击出现 `DOMException: HTMLDialogElement.showModal: Dialog element is not connected`。感谢 @nickmopen。 - **Gateway/update**: 在控制 UI 全局包更新后运行 `doctor --non-interactive --fix` 再报告成功,因此旧配置在网关重启前迁移。感谢 @stevenchouai。 - **Gateway/cron**: 停止丢失热重载竞赛的延迟 cron 启动,防止旧 cron 服务在重载已替换 cron 状态后启动。 - **CLI/plugins**: 当 npm 插件安装被失败的配置选定源阴影时警告,并在 `plugins doctor` 中公开修复路径。感谢 @LindalyX-Lee。 - **Agents/Telegram**: 在嵌入式模型提示中保留显式回复和引用上下文,而不让引用文本驱动提示本地图像加载。修复 #76419。(#76659) 感谢 @cheechnd。 - **Active Memory**: 将 `setupGraceTimeoutMs` 应用于嵌入式召回运行器以及外部提示构建看门狗,因此非常冷的首次召回保持配置的设置宽限期端到端。(#74480) 感谢 @volcano303。 - **Channels/Feishu**: 限制每个聊天顺序队列阻止后续相同键任务在单个飞行中任务之后的时间(默认 5 分钟),因此单个挂起的调度不再导致后续相同聊天消息保持 `queued` 状态直到网关重启;卡住的任务继续运行但被从阻塞链中逐出并记录警告。修复 #70133。(#76687) 感谢 @martingarramon 和 @bek91。 - **Active Memory**: 在解析嵌入式召回运行通道时跳过作用域的 Telegram 论坛主题会话 id(包含 `:`),回退到 `messageProvider`,因此 Active Memory 不再在论坛主题会话中抛出捆绑插件 dirName 验证错误。修复 #76704。 - **Agents/tools**: 将自动 PDF 模型/认证解析延迟到使用 PDF 工具时,保持代理回合工具准备不在没有 PDF 的消息上探测认证配置文件,同时保留显式 PDF 模型注册。修复 #76644。感谢 @hclsys。 - **CLI/config**: 即使补丁仅包含 SecretRef 对象,也保持 JSON 试运行补丁验证接触的通道配置 against 捆绑通道 schemas。感谢 @vincentkoc。 - **Plugins/tools**: 将禁用的捆绑工具插件保留在显式运行时允许列表所有权之外,并从加载但空的通道注册表回退到承载工具的插件注册表,因此 Active Memory 即使 `memory-lancedb` 被禁用也能使用捆绑的 `memory-core` search/get 工具。修复 #76603。感谢 @jwong-art。 - **Plugins/install**: 从管理的 npm 根清单运行 `npm install`,因此安装一个 `@openclaw/*` 插件保留已安装的同级插件而不是修剪它们。修复 #76571。(#76602) 感谢 @byungskers 和 @crpol。 - **Plugins/context-engine**: 在网关启动加载计划中包含选定的 `plugins.slots.contextEngine` 插件,因此没有 `activation.onStartup` 的其清单的外部上下文引擎插件在任何代理回合解析活动引擎之前加载;防止“上下文引擎 X 未注册;回退到默认引擎遗留”警告在网关启动后出现。修复 #76576。感谢 @hclsys。 - **Plugins/tools**: 为基于路径的插件(来源“config”)恢复按需注册表加载,因此通过 `plugins.load.paths` 注册的工具工厂在代理请求时解析,当没有预热的通道注册表时;防止“未知方法”错误在网关启动后出现。修复 #76598。感谢 @hclsys。 - **Plugins/hooks**: 在 Gateway 启动运行时作用域中包含显式启用的支持钩子的插件,因此嵌入式 PI 运行可以看到它们的 `before_prompt_build` 和 `agent_end` 钩子。修复 #76649。感谢 @wwf3045 和 @MkDev11。 - **Plugins/OpenCode**: 通过轻量级提供方策略表面公开 Claude 思维配置文件,因此指令和会话验证保留 `xhigh`、`adaptive` 和 `max` 用于 `opencode/claude-opus-4-7`,而不是将 `xhigh` 重新映射到 `high`。修复 #76648。感谢 @aaajiao。 - **Channels/QQ Bot**: 在 QQ 令牌交换前解析结构化的 `clientSecret` SecretRefs,向密钥工具公开 QQ Bot 秘密契约,并拒绝遗留的 `secretref:/...` 标记字符串。(#74772) 感谢 @xialonglee。 - **Agents**: 通过在原始体块上刷新受保护的获取超时来保持活动的流式传输提供方回复存活,并将真实的提示流超时作为显式错误公开,而不是部分助手片段。修复 #76307。(#76633) 感谢 @MkDev11。 - **Plugins/externalization**: 保持官方 ACPX、Google Chat 和 LINE 安装规范在生产包名称上,将 Beta 标签探测留给显式的 OpenClaw Beta 更新通道。感谢 @vincentkoc。 - **CLI/doctor**: 防止缺失插件修复用官方目录元数据覆盖运行时回退,因此 ACPX 修复在外部化推出期间保留官方 npm 规范。感谢 @vincentkoc。 - **CLI/doctor**: 通过精确解析的包名称匹配过时的捆绑插件安装记录,因此 doctor 不删除仅共享 OpenClaw 包名称前缀的外部 npm 或 ClawHub 记录。 - **Plugins/catalog**: 在生成打包的通道目录时保留 ClawHub 安装规范,因此未来的 storepack-first 通道插件保留其远程源而不是变成仅 npm。感谢 @vincentkoc。 - **Plugins/catalog**: 将来自预发布外部通道目录条目的裸 npm 规范固定到目录条目版本,因此 Beta 目录不静默安装最新的稳定包。 - **Plugins/update**: 将目录匹配的官方 npm 更新和 OpenClaw authored 外部化捆绑 npm 桥视为受信任的官方安装,因此启动代码插件可以更新或迁移出捆绑树,而不会触发扫描器误报。感谢 @vincentkoc。 - **Plugins/onboarding**: 仅在缺少包/版本错误时从 ClawHub 回退到 npm,在 storepack 推出期间保持完整性和验证失败关闭。感谢 @vincentkoc。 - **CLI/onboarding**: 在交互式 `openclaw onboard` 向导中屏蔽凭据输入(模型认证提供方 API 密钥、网关令牌和密码、网络搜索提供方密钥和技能环境变量值),因此粘贴的密钥不再回显到终端滚动back、`Start-Transcript` 日志或屏幕截图;通过屏蔽预览确认步骤,在敏感提示之前保留现有令牌/密码。感谢 @anurag-bg-neu。 - **Control UI/Talk**: 通过从浏览器报价标头中剥离仅服务器端的归属标头(`originator`、`version`、`User-Agent`)修复 Talk(OpenAI 实时 WebRTC)CORS 失败;`api.openai.com/v1/realtime/calls` 只允许 `authorization` 和 `content-type` 在其 CORS 预检中,因此转发这些标头导致浏览器 SDP 交换失败。修复 #76435。感谢 @hclsys。 - **Chat delivery**: 使 `/verbose on|full|off` 更改再次影响后续工具使用聊天气泡,包括具有草稿预览工具进度启用的通道,同时保留一次性详细指令。 - **CLI/logs**: 在瞬态网关断开时自动重新连接 `openclaw logs --follow`,具有有界退避、stderr 重试警告、`[logs] gateway reconnected` 恢复通知和 JSON `notice` 记录,同时在不可恢复的认证或配置错误时立即退出。修复 #74782。(#75059, #75372) 感谢 @shashank-poola 和 @romneyda。 - **Codex/WhatsApp**: 当 Codex 源回复配置为消息工具交付时,保持 `message` 动态工具可用,因此编码配置文件聊天代理不会私下完成回合而没有可见的通道回复。修复 #76660。(#76663) 感谢 @VishalJ99。 - **Codex/heartbeat**: 通过 Codex 回合范围的协作模式指令发送心跳特定的主动指导,保持普通消息工具聊天回合在默认模式下,而没有心跳提示泄漏。感谢 @pashpashpash。 - **Plugins/onboarding**: 信任从官方目录选择的可选官方插件和网络搜索安装,因此 npm 安全扫描将它们视为其他源链接的官方安装路径。感谢 @vincentkoc。 - **Agents/web_search**: 当网络搜索元数据缺失时保持已安装的运行时提供方发现启用,因此外部安装的官方提供方(如 Brave)对代理和 cron 回合保持可见,而不是回退到仅捆绑查找。修复 #76626。感谢 @amknight。 - **Tests/plugins**: 将 Discord npm 引导 Docker 通道公开为包脚本,并断言计划的 Docker 通道指向真实脚本,因此外部通道引导覆盖实际可以运行。感谢 @vincentkoc。 - **Plugins/ClawHub**: 将未发布的 ClawHub 插件工件解释为 rollout-state 回退到 `npm:` 安装,而不是泄漏原始归档元数据字段。感谢 @vincentkoc。 - **Tests/onboarding**: 断言打包的通道引导使 `openclaw channels status --json` 和普通 `openclaw status` 显示配置的通道,覆盖空通道表回归路径。感谢 @vincentkoc。 - **Microsoft Teams**: 在 Gateway 重启之间保持发送的消息标记,因此对最近机器人消息的后续回复保持解析原始会话,同时标记 TTL 在尽力恢复中保留。(#75585) 感谢 @amknight。 - **Matrix**: 在 Gateway 重启之间保持挂起的批准反应目标,因此房间批准者仍可在 OpenClaw 重新联机后批准或拒绝 outstanding 提示。(#75586) 感谢 @amknight。 - **Channels/onboarding**: 将第三方官方企业微信和元宝目录条目映射到其发布的插件 id,因此 npm 安装通过预期的插件验证。感谢 @vincentkoc。 - **Plugin SDK**: 恢复固定的元宝通道包使用的 Mattermost 和 Matrix 兼容子路径,因此外部安装在 npm 安装后可以模块加载。感谢 @vincentkoc。 - **Plugins/install**: 保持管理的 npm 根安全扫描不将早期插件 `openclaw` 对等链接视为失败,因此一个外部插件安装不能毒害后来的官方 npm 安装。感谢 @vincentkoc。 - **Memory LanceDB**: 允许已安装但未配置的插件元数据加载,因此引导和设置流程可以提示嵌入配置,而不是首先失败插件注册表。感谢 @vincentkoc。 - **CLI/plugins**: 防止 `plugins enable` 和 `plugins disable` 创建未配置的通道配置部分,因此具有必需设置字段的通道插件在生命周期探测期间不再失败验证。感谢 @vincentkoc。 - **Doctor/config**: 在兼容性修复期间为省略可见回复策略的配置通道配置设置 `messages.groupChat.visibleReplies: "message_tool"`,因此升级可以保留预期的仅工具组/通道回复默认值。感谢 @kagura-agent。 - **Agents/sessions**: 在软等待窗口超时后保持延迟的 `sessions_send` A2A 回复存活,同时保留终端运行超时并避免请求者会话中的过时目标回复。修复 #76443。感谢 @ryswork1993 和 @vincentkoc。 - **TUI/Control UI**: 修复 `/think` 命令仅显示基本思维级别,当活动会话使用与默认不同的模型时,因此提供方特定级别(如 DeepSeek V4 Pro 的 `xhigh` 和 `max`)现在可见且可选。修复 #76482。感谢 @amknight。 - **CLI/sessions**: 在工具交付的通道输出后保持故意空的代理回复静默,而不是显示误导性的“代理无回复”回退。感谢 @vincentkoc。 - **Config/doctor**: 每个配置路径限制 `.clobbered.*` 取证快照并序列化快照写入,因此重复的 `doctor --fix` 恢复循环不能泛滥配置目录。修复 #76454;继承自 #65649。感谢 @JUSTICEESSIELP、@rsnow 和 @vincentkoc。 - **Feishu**: 当回复发送原生语音媒体时抑制重复文本,为普通音频文件保留字幕,并在 `audioAsVoice` 转码/上传回退产生通用文件时发送回退文本和附件链接。感谢 @vincentkoc。 - **TTS/plugins**: 在 Gateway 启动期间激活配置的和继承的语音提供方插件,因此在人物选择后 Microsoft 和本地 CLI 语音回复立即工作,而不是在启动插件集中不可见。修复 #76481。感谢 @amknight。 - **Feishu**: 通过将 SDK 作为插件本地运行时依赖加载,保持打包的 Feishu 启动不捆绑 Lark SDK 的 ESM `__dirname` 路径。修复 #76291 和 #76494。(#76392) 感谢 @zqchris。 - **Plugins/npm**: 为可发布插件构建包本地运行时 dist 文件,并停止在核心包元数据中列出根包排除的插件附属程序,因此 npm 插件安装(如 `@openclaw/diffs` 和 `@openclaw/discord`)不再发布仅源代码运行时负载。修复 #76426。感谢 @PrinceOfEgypt。 - **Channels/secrets**: 在插件拆分后通过外部插件秘密契约解析 SecretRef 支持的通道凭据,覆盖运行时启动、目标发现、webhook 认证、禁用账户枚举和延迟绑定的 web_search 配置。修复 #76371。(#76449) 感谢 @joshavant 和 @neeravmakwana。 - **Docker/Gateway**: 将 Docker 设置 `.env` 值传递到网关和 CLI 容器,并在托管服务计划中保留 exec SecretRef `passEnv` 键,因此 1Password Connect 支持的 Discord 令牌在 doctor 或插件修复后继续解析。感谢 @vincentkoc。 - **Control UI/WebChat**: 在聊天历史中解释压缩边界,并直接链接到会话检查点控件,因此在压缩之前,预压缩回合在刷新后不再看起来静默丢失。修复 #76415。感谢 @BunsDev。 - **Agents/compaction**: 添加可选的捆绑压缩通知钩子,并在自动压缩留下没有最终可见回复的回合时从压缩的记录重试一次。(#76651) 感谢 @simplyclever914。 - **Agents/incomplete-turn**: 检测并显示警告,当代理在工具调用链之后的最终文本因工具调用后助手响应从未产生而静默丢弃时,而不是用仅预工具分析文本完成回合。修复 #76477。感谢 @amknight。 - **Channels/WhatsApp**: 通过将 `@+<digits>` 和 `@<digits>` 令牌解析到 WhatsApp 参与者数据(包括 LID 组)来附加原生出站提及元数据。修复 #39879;继承自 #56863。感谢 @kengi1437、@joe2643 和 @fridayck。 - **Channels/WhatsApp**: 要求出站提及令牌在单词边界结束,因此较长字符串内的电话号码前缀不再触发隐藏的原生提及。 - **Plugins/uninstall**: 删除克隆的插件仓库后删除空的托管 git 安装父目录,并在 Docker 插件生命周期测试中覆盖 npm/git 卸载残留。感谢 @vincentkoc。 - **Plugins/install**: 当没有捆绑源可用时,通过官方目录解析裸官方外部插件 id(如 `brave`),因此打包安装获取预期的作用域 npm 包而不是无关的非作用域包。修复 #76373。感谢 @bek91 和 @vincentkoc。 - **Plugins/install**: 在授予官方 npm 插件扫描器信任之前需要 OpenClaw 拥有的安装来源,因此直接的 npm 包名称不再绕过启动代码扫描,而目录、引导和 doctor 安装保持受信任。感谢 @fede-kamel 和 @vincentkoc。 - **Network proxy**: 为通过托管 HTTP 代理路由的 Node HTTPS 请求保留目标 TLS 主机名验证,因此 Discord 风格的 CONNECT 流量不再验证针对本地代理主机的证书。修复 #74809。(#76442) 感谢 @jesse-merhi 和 @abnershang。 - **Gateway/sessions**: 通过将标题/预览水合限制为记录头/尾读取,并缓存清单模型 id 规范化和活动插件快照的 setup 回退元数据,保持 `sessions.list` 行轻量。感谢 @vincentkoc 和 @rolandrscheel。 - **Gateway/performance**: 缓存每运行详细级别会话读取,在 `gateway --force` 中跳过冗余的 `lsof` 扫描(当没有监听器被杀死时),并使 Gateway 启动基准打印 `--help` 用法。 - **Gateway/sessions**: 在轻量级 `sessions.list` 行上保持代理运行时元数据,并跳过每行记录使用回退、显示模型推理和插件投影,避免大型会话存储中的身份丢失和事件循环停顿。感谢 @Marvinthebored 和 @vincentkoc。 - **Gateway/models**: 在持久化/当前元数据、配置行、注册表兼容回退和静态认证检查上保持只读 `models.list` 回退,同时保留完整目录图像附件能力检查。修复 #76382;引用 #76360 和 #75707。感谢 @trojy13、@RayWoo、@AnathemaOfficial、@Marvinthebored 和 @vincentkoc。 - **CLI/plugins**: 在 `plugins enable` 和 `plugins disable` 中的配置写入之前拒绝缺失的插件 id,因此拼写错误不再持久化过时的配置条目。(#73554) 感谢 @ai-hpc。 - **Agents/sessions**: 在会话文件修复期间保留已传递的尾部助手回复,因此 Telegram/WebChat 历史不会重写以删除已传递的响应。修复 #76329。感谢 @obviyus。 - **Gateway/chat history**: 将过大的记录回合保留为显式省略消息占位符,同时避免大型 JSONL 解析停顿。感谢 @Marvinthebored 和 @vincentkoc。 - **CLI/doctor**: 加载配置的内存槽插件以解析内存诊断,因此捆绑的 `memory-core` 不再在独立 `doctor` / `status` 运行上触发错误的“没有活动的记忆插件已注册”。修复 #76367。感谢 @neeravmakwana。 - **Gateway**: 当 `chat.send` 或代理附件解析/暂存失败时保留堆栈诊断,改进图像发送失败分类。引用 #63432。(#75135) 感谢 @keen0206。 - **Agents/idle-timeout**: 在外部嵌入式运行重试循环中添加成本 runaway 断路器,在 5 次连续空闲超时且无完成的模型进度后停止进一步尝试,因此卡住的提供方不能再为同一运行扇出付费模型调用;完成的文本或工具调用进度重置断路器,但部分工具参数 token 滴答不重置。修复 #76293。感谢 @ThePuma312。 - **Heartbeats/Codex**: 将结构化心跳提示与实际 `heartbeat_respond` 工具可用性对齐,在工具存在时停止发送遗留 `HEARTBEAT_OK`,并保持工具禁用的承诺检查在遗留 ack 路径上。感谢 @pashpashpash 和 @vincentkoc。 - **Agent runtimes**: 当请求的 harness 不可用时诚实地失败显式插件运行时选择,而不是静默回退到嵌入式 PI 运行时。感谢 @pashpashpash。 - **Maintainer workflow**: 默认通过 GitHub 的验证提交 API 推送准备的 PR 头,并在 git 协议推送可以发布未签名提交之前要求显式覆盖。感谢 @BunsDev。 - **Feishu**: 通过选定的/默认账户解析设置/状态探测,因此具有账户范围应用凭据的多账户配置显示为已配置和可探测。修复 #72930。感谢 @brokemac79。 - **Gateway/responses**: 当代理在单个回合中调用多个客户端工具时,从 `/v1/responses` JSON 和 SSE 响应发出每个客户端工具调用,因此多工具计划、图编排调用和类似批处理流不再丢弃除最后一个外的所有调用。修复 #52288。感谢 @CharZhou 和 @bonelli。 - **Gateway/agent**: 仅在 `deliver: true` 时在网关代理请求上强制执行 `session.sendPolicy=deny`,因此非交付烟雾检查和内部代理运行不再被“发送被会话策略阻止”拒绝,而出站交付保持受控。修复 #73381。感谢 @wenxu007。 - **Slack/reactions**: 将缺失的 no_reaction 移除响应视为幂等成功,并通过移除辅助程序路由自身反应清理,因此并发清理不再显示 Slack 竞争错误。修复 #50733。(#76304) 感谢 @martingarramon 和 @Hollychou924。 - **Feishu**: 在入站去重中包含媒体 `file_key` 和 `image_key` 值,因此重复使用的消息 ID 仍处理不同的媒体附件,而真实重试保持抑制。修复 #75057。感谢 @SymbolStar。 - **Control UI/Gateway**: 避免对本地应用的消息阶段会话更新进行完整的会话列表重新加载,在记录文件更新事件中携带已知会话密钥,并在存在显式生成模型配置时延迟媒体提供方列表。引用 #76236、#76203、#76188、#76107 和 #76166。感谢 @BunsDev。 - **Install/update**: 在打包的 postinstall 期间修剪过时的 `plugin-runtime-deps` 状态目录,因此从 pre-2026.5.2 版本升级回收旧的捆绑插件依赖缓存而不触及外部插件安装。 - **Auto-reply/queue**: 将重置触发的 `/new` 和 `/reset` 回合视为跨活动运行队列处理的中断运行,因此 steer/followup 模式不能将新鲜会话延迟在现有工作之后。修复 #74093。(#74144) 感谢 @ruji9527 和 @yelog。 - **Cron**: 将修复的启动运行时状态持久化回 `jobs-state.json`,因此具有缺失 `updatedAtMs` 的有效未来 `nextRunAtMs` 不再在 Gateway 重启后触发重复的外部健康检查修复。修复 #76461。感谢 @vincentkoc。 - **Cron**: 在 `cron.runs` 历史中保留手动 `cron.run` ID,因此手动运行确认可以与完成的运行记录关联。修复 #76276。 - **CLI/devices**: 仅当精确的挂起设备请求将铸造或继承管理范围的 operator 访问时,为 `openclaw devices approve <requestId>` 请求 `operator.admin`,同时保持较低范围的批准在配对范围上。 - **Memory/embedding**: 扩大嵌入重新索引重试分类器以包括瞬态套接字层错误(`fetch failed`、`ECONNRESET`、`socket hang up`、`UND_ERR_*`、`closed`),因此记忆重新索引在提供方网络 hiccup 时存活而不是中途中止。相关 #56815、#44166。(#76311) 感谢 @buyitsydney。 - **Memory/sessions**: 通过索引归档内容使旋转和删除的记录(`.jsonl.reset.<iso>` / `.jsonl.deleted.<iso>`)可搜索,将归档命中映射回活动记录词干,在归档旋转时发出记录更新事件,并绕过增量增量阈值进行一次性归档突变,同时保持备份和压缩检查点不透明。引用 #56131。感谢 @buyitsydney。 - **Memory/search**: 在打包安装中保持 sqlite-vec 可选,并将缺失扩展恢复指向有效的 `agents.defaults.memorySearch.store.vector.extensionPath` 设置。感谢 @willemsej 和 @vincentkoc。 - **Gateway**: 在限制工具配置文件下保持直接请求的插件工具可调用,同时保留显式拒绝列表和 HTTP 安全拒绝列表,防止目录/调用不匹配显示为“工具不可用”。感谢 @BunsDev。 - **Gateway/update**: 允许 Beta 二进制文件在配置仍由匹配的稳定发布版本编写时刷新网关服务,避免 Beta 通道更新期间错误的更新配置降级块。 - **Channels**: 保持 Matrix 和 Mattermost 捆绑在核心包中,而不是在这些通道被切断之前广告外部 npm 安装。感谢 @vincentkoc。 - **Bonjour**: 在重复卡住公告恢复后禁用 LAN mDNS 广告,而不是重复重启 ciao 并饱和网关事件循环。 - **Channels/setup**: 将可安装通道选择器提示标记为远程 npm 安装,并隐藏已捆绑插件的远程安装提示(这些插件已随 OpenClaw 提供)。 - **CLI/update**: 在停止管理的 Gateway 服务之前拒绝从活动网关进程树启动的包更新,避免自终止同通道更新使旧 Gateway 代码保持运行。修复 #75691。(#75819) 感谢 @ai-hpc。 - **CLI/plugins**: 停止将非插件 `auth` 命令根视为捆绑插件 id,因此限制性的 `plugins.allow` 配置不再告诉用户添加过时的 `auth` 插件条目。 - **Doctor/plugins**: 更新仍声明没有 `channelConfigs` 的频道的过时清单的已配置插件安装,因此 Beta 升级在 `doctor --fix` 期间修复旧的 Discord 风格包负载。 - **Doctor/plugins**: 修复持久化安装记录指向缺失包目录的已配置外部插件安装,因此升级在插件运行时验证之前协调幻影 npm 元数据。感谢 @vincentkoc。 - **Active Memory**: 防止调试遥测报告零命中时非空 `memory_search` 结果被快速失败为空。 - **Active Memory**: 在构建嵌入式召回插件工具时保留目标代理上下文,因此 `memory_search` 和 `memory_get` 对显式召回会话保持可用。修复 #76343。感谢 @Countermarch。 - **Plugins/externalization**: 从 npm 修复缺失的已配置插件安装默认,为显式 `clawhubSpec` 元数据保留 ClawHub 下载,并覆盖代理运行时/环境选择的插件修复。感谢 @vincentkoc。 - **Plugins/install**: 允许官方目录匹配的 npm 通道插件(如飞书)通过受信任的安装扫描程序路径,同时保持欺骗包名被阻止。感谢 @vincentkoc。 - **Tools/llm-task**: 保持 JSON 仅嵌入式模型运行不触发继承的工具允许列表,当工具被有意禁用时,同时保留运行时 `toolsAllow` 失败。修复 #74019。感谢 @amknight。 - **Tools/profiles**: 使 `tools.profile: "full"` 授予所有工具,包括可选插件工具(如浏览器),因此完整配置文件不再静默删除需要显式允许列表条目的插件提供的工具。修复 #76507。感谢 @amknight。 - **Feishu**: 保持超时 env 解析与 HTTP 客户端包装器分离,因此包安全扫描在安装期间不再报告错误的 env 收集命中。感谢 @vincentkoc。 - **Upgrade/config**: 在配置加载时针对活动插件集验证配置的网络搜索提供方和静态抑制的模型/提供方对,因此过时的插件状态在运行时回退之前大声失败。 - **Status/update**: 当配置仍表示 `stable` 时,从安装的版本解析 Beta 更新通道检查,并让 `status --deep` 重用实时网关通道凭据状态而不是在仅命令路径令牌缺失时警告。 - **Doctor/plugins**: 在 `doctor --fix` 期间保留非托管第三方插件 `node_modules`,同时仍修剪 OpenClaw 管理的运行时依赖缓存。 - **Gateway/restart**: 添加 `openclaw gateway restart --force` 和 `--wait <duration>`,在重启延迟计时器之前记录活动任务运行 id,并将超时重启报告为显式强制重启。 - **Discord**: 在进程重启之间持久化斜杠命令部署哈希,因此未更改的命令集跳过重新部署并避免重启循环 429。 - **Providers/LM Studio**: 将 Gemma 4 和其他本地模型的二进制 `off`/`on` 推理元数据规范化为 LM Studio 接受的 OpenAI 兼容 `reasoning_effort` 值。 - **Plugins/externalization**: 保持官方外部安装文档、更新示例和实时 Codex npm 检查在默认 npm 标签上,而不是 `@beta`。感谢 @vincentkoc。 - **Plugins/externalization**: 保持 ACPX、Google Chat 和 LINE 可发布插件 dist 树不在核心 npm 包文件列表中。 - **Plugins/ClawHub**: 当工件解析器路由缺失时回退到版本元数据,并保持 Docker ClawHub 固定与 npm 包工件解析对齐,避免插件安装验证期间的错误版本未找到失败。感谢 @vincentkoc。 - **Providers/openai-codex**: 在动态模型合成回退中遵守 `providerConfig.baseUrl`,因此配置了自定义上游(例如转发代理)的 codex 提供方在注册表没有模板行可克隆请求的模型 id 时不再静默绕过配置的 URL。(#76428) 感谢 @arniesaha。 - **Status/channels**: 在 `openclaw status` 和仅配置的 `openclaw channels status` 输出中显示配置的通道,即使 Gateway 不可访问,避免 WSL 和其他无 Gateway 路径上的空通道表。感谢 @vincentkoc。 - **Plugins/ClawHub**: 解释不可用的显式 ClawHub ClawPack 工件下载为 rollout-state 回退到 `npm:` 安装,同时 ClawHub 工件路由推出。感谢 @vincentkoc。 - **Media**: 接受主目录相对的 `MEDIA:~/...` 附件路径,同时保留现有文件读取策略、遍历检查和媒体类型验证。修复 #73796。感谢 @fabkury。 - **Onboarding/search**: 在保存提供方配置之前安装官方外部网络搜索插件(如 Brave),并使 doctor 修复协调选定的外部搜索提供方,其 npm 负载缺失。感谢 @vincentkoc。 - **Plugins/externalization**: 为外部化的通道、提供方和通用插件添加官方 npm 优先目录,保持未发布的 ACPX/Google Chat/LINE 捆绑,并使缺失插件修复在 ClawHub 包文件推出期间尊重 npm 优先元数据。感谢 @vincentkoc。 - **Plugins/update**: 检测跟踪的插件安装记录,其包目录在 `openclaw update` 期间消失,在正常插件更新之前重新安装它们,并且如果任何安装记录仍指向缺失的磁盘负载则失败更新。 - **Plugins/registry**: 在验证持久化插件注册表时哈希清单和包元数据,因此快速相同大小重写不能留下过时的插件元数据受信任。 - **Plugins/registry**: 在信任诊断之前规范化安装记录来源路径,因此 npm 插件在符号链接的临时/状态根下安装不再警告为未跟踪的本地代码。 - **Plugins/install**: 允许官方外部 Discord 重新安装请求通过无效配置守卫并运行过时通道修复,因此升级可以直接恢复缺失的外部插件状态。 - **CLI/infer**: 在简单完成调度之前拒绝本地 `codex/*` 一次性模型探测,并将操作员指向 Codex 应用服务器运行时路径,而不是以空输出错误结束。 - **Agents/sessions**: 当最终运行元数据从过时的内存快照持久化时保留传递的尾部助手回复,因此 Telegram/WebChat 历史不会重写以删除已传递的响应。修复 #76329。感谢 @obviyus。 - **Gateway/chat history**: 保留过大的记录回合作为显式省略消息占位符,同时避免大型 JSONL 解析停顿。感谢 @Marvinthebored 和 @vincentkoc。 - **CLI/doctor**: 加载配置的内存槽插件以解析内存诊断,因此捆绑的 `memory-core` 不再在独立 `doctor` / `status` 运行上触发错误的“没有活动的记忆插件已注册”。修复 #76367。感谢 @neeravmakwana。 - **Gateway**: 当 `chat.send` 或代理附件解析/暂存失败时保留堆栈诊断,改进图像发送失败分类。引用 #63432。(#75135) 感谢 @keen0206。 - **Agents/idle-timeout**: 在外部嵌入式运行重试循环中添加成本 runaway 断路器,在 5 次连续空闲超时且无完成的模型进度后停止进一步尝试,因此卡住的提供方不能再为同一运行扇出付费模型调用;完成的文本或工具调用进度重置断路器,但部分工具参数 token 滴答不重置。修复 #76293。感谢 @ThePuma312。 - **Heartbeat/scheduler**: 使心跳阶段调度感知活动小时,因此调度程序向前寻找第一个在窗口内的阶段时隙,而不是为安静小时时隙武装计时器并仅依赖运行时守卫。非 UTC `activeHours.timezone` 值(例如 `Asia/Shanghai`)现在正确影响下一个心跳计时器何时触发,避免浪费的安静小时滴答和网关重启后的长休眠间隙。修复 #75487。感谢 @amknight。 - **Providers/Arcee AI**: 将 Trinity Large Thinking 标记为工具不兼容,因此主会话运行使用与子代理运行恢复相同的仅文本请求形状,避免在 #62848 传输故障转移修复后剩余的主会话响应形状不匹配。修复 #62851 和 #62847;继承自 #62848。感谢 @Adam-Researchh。 - **Status**: 为通过原生 Codex 运行时运行的 `openai/gpt-*` 会话显示 `openai-codex` OAuth 配置文件,而不是报告认证为未知。(#76197) 感谢 @mbelinky。 - **Gateway**: 避免重复插件工具描述符配置哈希,因此大型运行时配置不会阻止回复启动并触发重连/超时。(#75944) 感谢 @joshavant。 - **Plugins/externalization**: 在启动时保留诊断 ClawHub 包和持久化的捆绑插件重定位在 npm 优先安装元数据上,并现在 Discord 不在核心包中(因为其外部包已发布)。感谢 @vincentkoc。 - **Setup/TUI**: 绑定终端孵化引导运行,因此卡住的提供方请求超时而不是让首次运行孵化卡在 watchdog 之后。(#76241) 感谢 @joshavant。 - **Cron/CLI runtimes**: 仅当解析的模型提供方兼容时,通过配置的每代理 CLI 运行时路由隔离 cron 作业,因此 OpenAI 作业覆盖不再继承不匹配的 Claude CLI 后端。感谢 @vishutdhar。 - **Plugins/Codex**: 允许官方 npm Codex 插件在不安全安装覆盖的情况下安装,保持 `/codex` 命令所有权,并覆盖通过管理的 `.openclaw/npm` 依赖加上卸载失败证明的真实 npm Docker 实时路径。 - **Gateway/status**: 当网关探测失败且 Bonjour 未找到本地网关时,添加具体的服务、配置、监听器所有者和日志收集后续步骤,因此冻结或端口冲突报告包含根本原因分类所需的数据。引用 #49012。感谢 @vincentkoc。 - **Codex harness**: 通过原生 Codex 配置指令转发 OpenClaw 工作区引导文件(如 `SOUL.md`),同时让 `AGENTS.md` 由 Codex 项目文档发现。修复 #76273。感谢 @zknicker。 - **Parallels/Windows update smoke**: 转义生成的 PowerShell 脚本中过时的交换后导入正则,因此预期的 `ERR_MODULE_NOT_FOUND` 更新交接继续发布后健康检查。(#75315) - **Slack**: 当 `replyToMode` 为 `off` 时允许顶层 DM 中的草稿预览流式传输,同时保持 Slack 原生流式传输和助手线程状态在回复线程上受控。修复 #56480。(#56544) 感谢 @HangGlidersRule。 - **Control UI/chat**: 在每个取消路径上移除删除确认弹出外部点击监听器,因此 Cancel、Delete、外部点击和相同按钮切换不再留下过时的文档监听器。引用 #75590 和 #69982。感谢 @Ricardo-M-L。 - **Memory-core**: 将耗尽的文件监视器限制视为内置记忆自动同步的非致命,同时保留不相关的磁盘满错误的致命处理。(#73357) 感谢 @solodmd。 - **Providers/Ollama**: 为原生 `/api/chat` 请求恢复目录上下文窗口转发为 `num_ctx`;修复具有目录条目的模型(qwen3、llama3、gemma3 等)的工具选择和上下文截断回归,当未配置显式 `params.num_ctx` 时。修复 #76117。(#76181) 感谢 @openperf。 - **Plugins/install**: 将 npm 插件安装固定到验证的解析版本并拒绝 package-lock 版本或完整性漂移,因此可变标签不能竞争完整性检查接受不同的工件。感谢 @Lucenx9。 - **Plugins/providers**: 为启用的外部清单契约能力提供方保留作用域冷加载回退,这些提供方在启动注册表中缺失,因此像 Fish Audio 这样的提供方可以在请求时解析,而不需要 `activation.onStartup` 以保证正确性。(#76536) 感谢 @Conan-Scott。 - **Gateway/update**: 将 `continuationMessage` 从 `update.run` 携带到成功的重启哨兵,因此会话范围的自更新可以在 Gateway 重启后恢复一个后续回合。引用 #71178。(#74362) 感谢 @100menotu001、@HeilbronAILabs 和 @artnking。 - **Agents/fallback**: 在嵌入式回退重试后抑制重复的当前回合用户消息记录写入,同时仍将重试提示发送到模型。(#63696) 感谢 @dashhuang。 - **Channels/Telegram**: 当可见非预览气泡(工具/块/错误)在活动答案预览后交付时,强制新鲜最终消息,因此多步骤助手回复不再以最终答案在中间输出之上结束。修复 #76529。感谢 @jack-stormentswe。 - **Channels/Telegram**: 在将论坛主题最终视为已交付之前要求观察到的 Telegram 发送、编辑或回退,因此在记录中生成的最终回复不再从 Telegram 主题消失。修复 #76554。(#76764) 感谢 @bubucilo 和 @obviyus。 - **Plugins/update**: 保持外部化捆绑 npm 桥更新在正常插件安全扫描程序路径上,而不是授予无工件来源的源链接官方信任。(#76765) 感谢 @Lucenx9。 - **Agents/reply context**: 在模型可见元数据中将回复的消息标记为当前用户消息目标,因此短回复与其显式回复目标相关,而不是附近的聊天历史。(#76817) 感谢 @obviyus。 - **Doctor/plugins**: 在 doctor/update 修复期间安装配置的缺失官方插件(如 Discord 和 Brave),自动启用修复的提供方插件,在下载失败时保留配置,并停止自动启用在无清单声明配置通道时发明插件条目。修复 #76872。感谢 @jack-stormentswe。