← 返回更新日志

OpenClaw v2026.2.24-beta.1 预发布

2026-02-25 · GitHub 原文
### 变更 - 自动回复/中止快捷键:扩展独立停止短语(`stop openclaw`、`stop action`、`stop run`、`stop agent`、`please stop` 及相关变体),接受尾随标点(例如 `STOP OPENCLAW!!!`),添加多语言停止关键词(包括 ES/FR/ZH/HI/AR/JP/DE/PT/RU 形式),并将精确的 `do not do that` 作为停止触发器处理,同时保持严格的独立匹配。(#25103)感谢 @steipete 和 @vincentkoc。 - Android/应用用户体验:发布原生四步引导流程,将引导后流程移至五选项卡外壳(连接、聊天、语音、屏幕、设置),添加完整的连接设置/手动模式屏幕,并为新导航模型刷新 Android 聊天/设置界面。 - 对话/网关配置:添加与遗留兼容的提供商无关对话配置,并公开网关对话 ElevenLabs 配置元数据以供设置/状态界面使用。 - 安全/审计:添加 `security.trust_model.multi_user_heuristic` 以标记可能的共享用户入口并澄清个人助理信任模型,同时为有意的多用户设置提供强化指导(`sandbox.mode="all"`、工作区范围文件系统、缩减的工具表面、共享运行时上无个人/私有身份)。 - 依赖项:跨工作区刷新关键运行时和工具包(Bedrock SDK、pi 运行时堆栈、OpenAI、Google 身份验证、oxlint/oxfmt),同时有意将 `@buape/carbon` 固定。 ### 修复 - 路由/会话隔离:强化后续路由,使显式跨渠道来源回复在路由失败时绝不回退到活动调度器,在后续排空期间保留排队的溢出摘要路由元数据(`channel`/`to`/`thread`),并优先使用来源渠道上下文而非内部提供商标签进行嵌入式后续运行。这防止了在共享会话中 webchat/控制界面上下文劫持 Discord 目标回复。(#25864)感谢 @Gamedesigner。 - 安全/路由:通过将出站目标解析绑定到当前回合的来源渠道元数据(而非过时的会话路由回退),对共享会话跨渠道回复实施失败关闭,并通过网关 + 命令交付规划器连接这些回合来源字段并包含回归覆盖。(#24571)感谢 @brandonwise。 - 心跳路由:通过阻止直接聊天心跳交付目标并保持阻止交付 cron/执行提示仅内部,防止心跳泄漏/垃圾信息进入 Discord 和其他直接消息目的地。(#25871) - 心跳默认值/提示:将隐式心跳交付目标从 `last` 切换为 `none`(外部交付需选择加入),并在交付禁用时使用仅内部 cron/执行心跳提示措辞,以便后台检查不推动用户可见的中继行为。(#25871、#24638、#25851) - 自动回复/心跳排队:当会话已有活动运行时丢弃心跳运行而非排队过时的后续运行,防止在队列排空后出现重复心跳响应分支。(#25610、#25606)感谢 @mcaxtr。 - Cron/心跳交付:除非明确请求线程/主题,否则停止为心跳模式目标解析继承缓存的会话 `lastThreadId`,以便公告模式 cron 和心跳交付保持在顶级目的地而非泄漏到活动对话线程。(#25730)感谢 @markshields-tl。 - 消息工具去重:在主动运行(心跳/cron/执行事件)中将来源渠道元数据视为相同目标 `message.send` 抑制的权威来源,包括合成提供商上下文,以便 `delivery-mirror` 转录条目不再导致重复 Telegram 发送。(#25835)感谢 @jadeathena84-arch。 - 渠道/输入指示器保持活动:在长回复期间按保持活动间隔刷新渠道输入指示器回调,并在核心 + 扩展调度器调用点空闲/清理时清除保持活动计时器,防止输入指示器在推理过程中过期。(#25886、#25882)感谢 @stakeswky。 - 代理/模型回退:当运行当前位于配置的回退模型上时,继续遍历配置的回退链而非直接折叠到仅主模型,防止主模型保持冷却时出现死胡同失败。(#25922、#25912)感谢 @Taskle。 - 网关/模型:即使捆绑模型目录数据过时也尊重显式 `agents.defaults.models` 允许列表引用,在 `models.list` 中合成缺失的允许列表条目,并允许对这些引用进行 `sessions.patch`/`/model` 选择而不会出现错误的 `model not allowed` 错误。(#20291)感谢 @kensipe、@nikolasdehor 和 @vincentkoc。 - 控制界面/代理:当不存在每个代理模型条目时在概览回退输入中继承 `agents.defaults.model.fallbacks`,同时保留显式每个代理回退覆盖(包括空列表)。(#25729、#25710)感谢 @Suko。 - 自动化/子代理/Cron 可靠性:在 `sessions_spawn` 完成/直接公告流程中尊重 `ANNOUNCE_SKIP`(无用户可见令牌泄漏),为渠道不可用添加瞬态直接公告重试(例如 WhatsApp 监听器重新连接窗口),并将 `cron` 包含在 `coding` 工具配置文件中以便 `/tools/invoke` 在网关策略明确允许时执行 cron 操作。(#25800、#25656、#25842、#25813、#25822、#25821)感谢 @astra-fer、@aaajiao、@dwight11232-coder、@kevinWangSheng、@widingmarcus-cyber 和 @stakeswky。 - Discord/语音可靠性:恢复运行时 DAVE 依赖(`@snazzah/davey`),添加可配置 DAVE 加入选项(`channels.discord.voice.daveEncryption` 和 `channels.discord.voice.decryptionFailureTolerance`),清理语音监听器/会话拆除,防范过时连接事件,并在重复解密失败后触发控制重新加入恢复以改善 DAVE 接收错误下的入站 STT 稳定性。(#25861、#25372、#24883、#24825、#23890、#23105、#22961、#23421、#23278、#23032) - Discord/阻止流传输:通过仅抑制推理有效负载(而非所有 `block` 有效负载)恢复阻止流式回复交付,修复 `channels.discord.streaming=block` 模式下缺失 Discord 回复的问题。(#25839、#25836、#25792)感谢 @pewallin。 - Discord/代理 + 反应 + 模型选择器:将线程渠道代理获取纳入入站媒体/贴纸下载,对 WSL/公司代理设置使用感知代理的网关元数据获取,将 `messages.statusReactions.{emojis,timing}` 连接到 Discord 反应生命周期控制,并压缩模型选择器 `custom_id` 键以保持在 Discord 100 字符限制下同时保持向后兼容解析。(#25232、#25507、#25564、#25695)感谢 @openperf、@chilu18、@Yipsh、@lbo728 和 @s1korrrr。 - WhatsApp/Web 重新连接:将关闭状态 `440` 视为不可重试(包括字符串形式状态值),立即停止重新连接循环,并在解决会话冲突后发出操作员指导以重新链接。(#25858)感谢 @markmusson。 - WhatsApp/推理安全:在 WhatsApp 交付前抑制标记为推理的出站有效负载并硬丢弃以 `Reasoning:` 开头的文本有效负载,防止隐藏思考块通过最终消息路径泄漏给最终用户。(#25804、#25214、#24328) - Matrix/已读回执:在 Matrix 消息到达时(处理程序管道工作前)立即发送已读回执,以便客户端在回复处理期间不再显示长期未读/已发送状态。(#25841、#25840)感谢 @joshjhall。 - Telegram/回复:当标记down格式渲染为空 HTML(例如线程回复中仅语法块)时,使用纯文本重试交付,并在格式化和纯有效负载均为空时大声失败,以避免错误交付状态。(#25096、#25091)感谢 @Glucksberg。 - Telegram/媒体获取:在 SSRF 固定 DNS 地址排序中优先 IPv4 而非 IPv6,以便媒体下载在 IPv6 路由损坏的主机上仍能工作。(#24295、#23975)感谢 @Glucksberg。 - Telegram/出站 API:应用 Telegram `autoSelectFamily` 决策时替换 Node 22 的全局 undici 调度器,以便出站 `fetch` 调用继承 IPv4 回退而非保持固定在过时调度器设置。(#25682、#25676)感谢 @lairtonlelis。 - 引导/Telegram:当插件注册表填充缺失时通过回退到内置适配器保持核心渠道引导可用,并继续向导设置并提供可操作恢复指导。(#25803)感谢 @Suko。 - Android/网关身份验证:跨引导保留 Android 网关身份验证状态,为操作员会话使用原生客户端 ID,在设备令牌身份验证失败后使用共享令牌回退重试,并避免在临时连接错误时清除令牌。 - Slack/DM 路由:将 `D*` 渠道 ID 视为直接消息,即使 Slack 发送错误的 `channel_type`,防止 DM 流量被错误分类为频道/群组聊天。(#25479)感谢 @mcaxtr。 - Zalo/群组策略:使用 `groupPolicy` + `groupAllowFrom`(回退到 `allowFrom`)强制执行群组消息的发送者授权,默认运行时群组行为为失败关闭允许列表,并在调度前阻止未经授权的非命令群组消息。感谢 @tdjackey 报告。 - macOS/语音输入:防范所有音频输入启动路径缺少默认麦克风(语音唤醒、对话模式、按键通话、麦克风级别监视器、测试器)以避免无麦克风 Mac 上的启动/运行时崩溃,并在输入可用前优雅失败。(#25817)感谢 @sfo2001。 - macOS/IME 输入:当标记文本处于活动状态时,在语音叠加组合器和共享聊天组合器中优先将 Return 视为 IME 候选确认,防止在编写 CJK 文本时意外发送。(#25178)感谢 @bottotl。 - macOS/语音唤醒路由:将转发的语音唤醒记录默认路由到 `webchat` 渠道(而非模糊的 `last` 路由),以便本地语音提示保持固定到控制聊天界面,除非明确覆盖。(#25440)感谢 @chilu18。 - macOS/网关启动:在解析本地网关命令时优先使用可用的 `openclaw` 二进制文件,再回退到 pnpm/node 运行时,以便在运行时发现损坏的主机上本地启动不再失败。(#25512)感谢 @chilu18。 - macOS/菜单栏:停止为“使用成本(30 天)”子菜单重复使用注入器委托,以防止在打开成本历史时出现递归子菜单注入循环。(#25341)感谢 @yingchunbai。 - macOS/WebChat 面板:使用特定于面板的视觉效果混合和匹配效果与托管层上的角落遮罩来修复圆角裁剪。(#22458)感谢 @apethree 和 @agisilaos。 - Windows/执行 shell 选择:在回退到 Windows PowerShell 5.1 之前优先发现 PowerShell 7(`pwsh`)(Program Files、ProgramW6432、PATH),修复在安装 PS7 的 Windows 主机上 `&&` 命令链接失败的问题。(#25684、#25638)感谢 @zerone0x。 - Windows/媒体安全检查:通过将 win32 `dev=0` 统计视为未知设备回退(同时保持双方非零时的严格设备检查),使异步本地文件身份验证与同步安全打开行为对齐,修复本地附件/TTS/图像的虚假 `Local media path is not safe to read` 丢弃。(#25708、#21989、#25699、#25878)感谢 @kevinWangSheng。 - iMessage/推理安全:使用出站 `messageId` 匹配(加上作用域文本回退)强化 iMessage 回声抑制,并在路由出站交付路径上强制执行推理有效负载抑制,防止隐藏思考文本作为用户可见渠道消息发送。(#25897、#1649、#25757)感谢 @rmarr 和 @Iranb。 - 提供商/OpenRouter/身份验证配置文件:绕过 OpenRouter 的身份验证配置文件冷却/禁用窗口,以便提供商失败不再将 OpenRouter 配置文件置于本地冷却,并在回退和状态选择路径中忽略过时遗留冷却标记。(#25892)感谢 @alexanderatallah 提出此问题及 @vincentkoc 修复。 - 提供商/Google 推理:通过丢弃 `-1` 预算并将配置的推理工作映射到 `thinkingLevel`,为 Gemini 3.1 请求规范化无效负 `thinkingBudget` 有效负载,防止 `google-generative-ai` 上格式错误的推理有效负载。(#25900) - 提供商/SiliconFlow:将 `thinking="off"` 规范化为 `Pro/*` 模型有效负载的 `thinking: null`,以避免提供商端 400 循环和误导性压缩重试。(#25435)感谢 @Zjianru。 - 模型/Bedrock 身份验证:将附加 Bedrock 提供商别名(`bedrock`、`aws-bedrock`、`aws_bedrock`、`amazon bedrock`)规范化为规范 `amazon-bedrock`,确保身份验证模式解析一致选择 AWS SDK 回退。(#25756)感谢 @fwhite13。 - 模型/提供商:合并提供商模型配置与内置目录元数据时保留显式用户 `reasoning` 覆盖,因此 `reasoning: false` 不再被目录默认值覆盖。(#25314)感谢 @lbo728。 - 网关/身份验证:允许受信任代理身份验证的控制界面 websocket 会话在设备身份缺失时跳过设备配对,防止受信任反向代理后出现错误的 `pairing required` 失败。(#25428)感谢 @SidQin-cyber。 - CLI/内存搜索:为 `openclaw memory search` 接受 `--query <text>`(同时保留位置查询支持),并在两者均未提供时发出清晰错误。(#25904、#25857)感谢 @niceysam 和 @stakeswky。 - CLI/Doctor:使用有效命令(`openclaw gateway status --deep` 和 `openclaw configure --section model`)更正过时恢复提示。(#24485)感谢 @chilu18。 - Doctor/沙盒:当沙盒模式启用但 Docker 不可用时,显示清晰可操作警告(包括失败影响和修复)而非温和的“跳过检查”说明。(#25438)感谢 @mcaxtr。 - Doctor/插件:自动启用现在通过清单插件 ID(而非渠道 ID)解析第三方渠道插件,防止在 ID 不同时写入无效的 `plugins.entries.<channelId>`。(#25275)感谢 @zerone0x。 - 配置/插件:将过时已移除 `google-antigravity-auth` 插件引用视为兼容性警告(而非硬验证错误),跨 `plugins.entries`、`plugins.allow`、`plugins.deny` 和 `plugins.slots.memory`,以便在反重力移除后启动不再失败。(#25538、#25862)感谢 @chilu18。 - 配置/元数据:接受数字 `meta.lastTouchedAt` 时间戳并将它们强制转换为 ISO 字符串,保留写入 `Date.now()` 值的代理编辑兼容性。(#25491)感谢 @mcaxtr。 - 使用量核算:解析 Moonshot/Kimi `cached_tokens` 字段(包括 `prompt_tokens_details.cached_tokens`)为规范化缓存读取使用量指标。(#25436)感谢 @Elarwei001。 - 代理/工具调度:在工具执行开始前等待块回复刷新,以便缓冲的块回复在工具调用周围保留消息顺序。(#25427)感谢 @SidQin-cyber。 - 代理/计费分类:防止长助理/用户可见文本被重写为计费失败,同时保留显式 `status/code/http 402` 检测用于超大型结构化错误有效负载。(#25680、#25661)感谢 @lairtonlelis。 - 会话/工具结果防护:避免为以 `stopReason: "aborted"` 或 `"error"` 结束的助手回合生成合成 `toolResult` 条目,防止孤立的工具使用