← 返回更新日志

OpenClaw v2026.2.21

2026-02-21 · GitHub 原文
### 变更内容 - **模型/Google**:添加 Gemini 3.1 支持 (`google/gemini-3.1-pro-preview`)。 - **提供商/入门**:添加火山引擎(豆包)和 BytePlus 提供商/模型(包括编码变体),为交互式和非交互式流程配置入门身份验证选项,并将文档与 `volcengine-api-key` 对齐。(#7967) 感谢 @funmore123。 - **渠道/CLI**:添加按账户/渠道的 `defaultTo` 出站路由回退,以便当配置了默认目标时,`openclaw agent --deliver` 可以在没有明确 `--reply-to` 的情况下发送。(#16985) 感谢 @KirillShchetinin。 - **渠道**:允许通过 `channels.modelByChannel` 进行按渠道的模型覆盖,并在 /status 中注明。感谢 @thewilloftheshadow。 - **Telegram/流式传输**:将预览流式传输配置简化为 `channels.telegram.streaming`(布尔值),自动映射旧的 `streamMode` 值,并移除块与部分预览的分支逻辑。(#22012) 感谢 @obviyus。 - **Discord/流式传输**:为实时草稿回复添加流式预览模式,包含部分/块选项和可配置的分块。感谢 @thewilloftheshadow。灵感来自 @neoagentic-ship-it。 - **Discord/Telegram**:为排队/思考/工具/完成/错误阶段添加可配置的生命周期状态反应,使用共享控制器和表情/时间覆盖。感谢 @wolly-tundracube 和 @thewilloftheshadow。 - **Discord/语音**:通过 `/vc` 添加语音频道加入/离开/状态功能,以及用于实时语音对话的自动加入配置。感谢 @thewilloftheshadow。 - **Discord**:为斜杠命令响应添加可配置的临时性默认设置。(#16563) 感谢 @wei。 - **Discord**:支持通过频道编辑操作更新论坛 `available_tags`,用于论坛标签管理。(#12070) 感谢 @xiaoyaner0201。 - **Discord**:在新会话的受信任入站元数据中包含频道主题。感谢 @thewilloftheshadow。 - **Discord/子代理**:在 Discord 上添加线程绑定的子代理会话,具有按线程的焦点/列表控制,以及为衍生的辅助代理提供线程绑定的延续路由。(#21805) 感谢 @onutc。 - **iOS/聊天**:通过剥离入站不受信任的元数据/时间戳前缀、将工具输出格式化为简洁摘要/错误、在输入时压缩撰写器,并支持在聊天视图中点击关闭键盘,来清理聊天界面噪音。(#22122) 感谢 @mbelinky。 - **iOS/手表**:将镜像的手表提示通知操作桥接到 iOS 快速回复处理中,包括排队操作移交直到应用模型初始化完成。(#22123) 感谢 @mbelinky。 - **iOS/网关**:通过后台重连抑制/租用窗口、BGAppRefresh 唤醒回退、位置唤醒钩子节流以及 APNs 唤醒重试+轻推检测,稳定后台唤醒和重连行为。(#21226) 感谢 @mbelinky。 - **自动回复/UI**:在详细日志中添加模型回退生命周期可见性,在 /status 活动模型上下文中添加回退原因,以及统一的 WebUI 回退指示器。(#20704) 感谢 @joshavant。 - **MSTeams**:通过移除重复的每条消息 Set 存储并使用时间戳 Map 键作为单一成员资格来源,来对已发送消息缓存存储进行去重。(#22514) 感谢 @TaKO8Ki。 - **代理/子代理**:子代理默认衍生深度现在使用共享的 `maxSpawnDepth=2`,默认启用深度为 1 的编排器衍生,同时保持衍生和提示路径的深度策略检查一致。(#22223) 感谢 @tyler6204。 - **安全/代理**:使所有者 ID 混淆使用配置中的专用 HMAC 密钥 (`ownerDisplaySecret`),并更新哈希行为,使混淆与网关令牌处理解耦,以改进控制。(#7343) 感谢 @vincentkoc。 - **安全/基础设施**:将网关锁和工具调用合成 ID 从 SHA-1 切换到 SHA-256,同时保持截断长度不变,以加强哈希基础,同时保持确定性行为和锁键格式。(#7343) 感谢 @vincentkoc。 - **依赖项/工具**:通过 Knip/ts-prune/ts-unused-exports 在 CI 中添加非阻塞的死代码扫描,以更早地发现未使用的依赖项和导出。(#22468) 感谢 @vincentkoc。 - **依赖项/未使用的依赖项**:移除或限定未使用的根依赖项和扩展依赖项 (`@larksuiteoapi/node-sdk`, `signal-utils`, `ollama`, `lit`, `@lit/context`, `@lit-labs/signals`, `@microsoft/agents-hosting-express`, `@microsoft/agents-hosting-extensions-teams`,以及插件本地的 `openclaw` devDeps,位于 `extensions/open-prose`, `extensions/lobster`, `extensions/llm-task`)。(#22471, #22495) 感谢 @vincentkoc。 - **依赖项/A2UI**:在根清理后强化依赖项解析(从工作区/根解析 `lit`, `@lit/context`, `@lit-labs/signals`, `signal-utils`)并简化捆绑回退行为,包括 `pnpm dlx rolldown` 兼容性。(#22481, #22507) 感谢 @vincentkoc。 ### 修复内容 - **安全/代理**:使用更高的配置文件感知动态限制(32-160 次尝试)来限制嵌入式 Pi 运行器外部重试循环,并在重试永不收敛时返回明确的 `retry_limit` 错误负载,防止无限制的内部重试循环 (`GHSA-76m6-pj3w-v7mf`)。 - **Telegram**:在启动/状态时检测跨 Telegram 账户的重复机器人令牌所有权,将次要账户标记为未配置并显示明确的修复消息,并在轮询前阻止重复账户启动,以避免无尽的 `getUpdates` 冲突循环。 - **代理/工具图像**:在 `agents/tool-images` 调整大小日志中包含源文件名,以便压缩事件可以追溯到特定文件。 - **提供商/OAuth**:通过验证刷新响应过期值并在提供商返回空刷新令牌字段时保留先前的刷新令牌,来强化 Qwen 和 Chutes 的刷新处理,并为空令牌响应提供回归覆盖。 - **模型/Kimi-Coding**:为 `kimi-coding` 添加缺失的隐式提供商模板,包含正确的 `anthropic-messages` API 类型和基础 URL,修复使用 Kimi 进行编码时的 403 错误。(#22409) - **自动回复/工具**:通过嵌入式排队/后续运行器参数转发 `senderIsOwner`,以便仅限所有者的工具对授权发送者保持可用。(#22296) 感谢 @hcoj。 - **Discord**:当提供商缺失时恢复模型选择器的返回导航,并记录 Discord 选择器流程。(#21458) 感谢 @pejmanjohn 和 @thewilloftheshadow。 - **内存/QMD**:在网关 QMD 启动初始化期间,尊重每个代理的 `memorySearch.enabled=false`,将多集合 QMD 搜索拆分为每个集合的查询 (`search`/`vsearch`/`query`) 以避免稀疏项丢失,优先使用集合提示的文档解析以避免陈旧哈希冲突,在瞬态锁/超时失败时重试启动更新,在仅 BM25 的 `search` 模式(包括 `memory index --force`)中跳过 `qmd embed`,并全局序列化嵌入运行并具有失败回退,以防止多代理主机上的 CPU 风暴。(#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) 感谢 @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, 和 @kiliansitel。 - **内存/内置**:通过跳过关闭后的同步启动并在关闭 SQLite 前等待正在进行的同步,来防止自动同步竞争与管理器关闭,使得 `onSearch`/`onSessionStart` 在临时 CLI 流程中不再因 `database is not open` 而失败。(#20556, #7464) 感谢 @FuzzyTG 和 @henrybottter。 - **提供商/Copilot**:为 Claude 模型删除持久化的助手 `thinking` 块(同时保留回合结构/工具块),以便后续请求不再因无效的 `thinkingSignature` 负载而失败。(#19459) 感谢 @jackheuberger。 - **提供商/Copilot**:将 `claude-sonnet-4.6` 和 `claude-sonnet-4.5` 添加到默认的 GitHub Copilot 模型目录,并为模型列表/定义助手添加覆盖。(#20270, 修复 #20091) 感谢 @Clawborn。 - **自动回复/WebChat**:避免将入站运行时频道标签默认设置为不相关的提供商(例如 `whatsapp`)用于 webchat 会话,以便频道特定的格式化指导保持准确。(#21534) 感谢 @lbo728。 - **状态**:在会话摘要中包含持久化的 `cacheRead`/`cacheWrite`,以便紧凑的 `/status` 输出始终显示来自真实会话数据的缓存命中百分比。 - **心跳/Cron**:恢复间隔心跳行为,以便缺失的 `HEARTBEAT.md` 不再抑制运行(仅实际为空的文件会跳过),保留提示驱动和带标签的 cron 执行路径。 - **WhatsApp/Cron/心跳**:通过合并配对存储 + 配置的 `allowFrom` 收件人来强制执行隐式计划/系统传递的白名单路由,当最后路由上下文指向非白名单聊天时选择授权收件人,并防止心跳扩散到最近未授权的聊天。 - **心跳/活动时间**:在时间验证中将活动时间 `24` 哨兵解析限制为 `24:00`,以便像 `24:30` 这样的无效值被尽早拒绝。(#21410) 感谢 @adhitShet。 - **心跳**:将 `start`/`end` 时间相同的 `activeHours` 窗口视为零宽度(始终在窗口外),而不是始终活动。(#21408) 感谢 @adhitShet。 - **CLI/配对**:当省略时,将 `pairing list` 和 `pairing approve` 默认为唯一可用的配对频道,以便仅 TUI 的设置可以从 `pairing required` 中恢复,而无需猜测频道参数。(#21527) 感谢 @losts1。 - **TUI/配对**:在网关断开连接返回 `pairing required` 后显示明确的配对要求恢复指导,包括批准步骤以解除对新安装的快速启动 TUI 孵化的阻塞。(#21841) 感谢 @nicolinux。 - **TUI/输入**:抑制在同一输入突发窗口中到达的重复退格事件,以便 SSH 会话在撰写器中不再每次按退格键删除两个字符。(#19318) 感谢 @eheimer。 - **TUI/心跳**:当 `showOk` 禁用时,抑制聊天流式传输中的心跳 ACK/提示噪音,同时仍在最终输出中保留非 ACK 心跳警报。(#20228) 感谢 @bhalliburton。 - **TUI/历史记录**:限制聊天日志组件增长并修剪陈旧的渲染节点/引用,以便大的默认历史记录加载不再因 `RangeError: Maximum call stack size exceeded` 而溢出渲染递归。(#18068) 感谢 @JaniJegoroff。 - **内存/QMD**:当会话和内存集合同时存在时,多样化混合来源搜索排名,以便会话转录命中不再在顶部结果中排挤持久内存文件匹配。(#19913) 感谢 @alextempr。 - **内存/工具**:当嵌入/提供商失败(包括配额耗尽)发生时,从 `memory_search` 返回明确的 `unavailable` 警告/操作,以便禁用的内存看起来不像空的召回结果。(#21894) 感谢 @XBS9。 - **会话/启动**:要求 `/new` 和 `/reset` 问候路径在响应前运行会话启动文件读取指令,以便每日内存启动上下文不会在新会话问候时被跳过。(#22338) 感谢 @armstrong-pv。 - **身份验证/入门**:将 OAuth 配置文件 ID 配置映射与存储的凭据 ID 对齐,用于 OpenAI Codex 和 Chutes 流程,防止当 OAuth 返回电子邮件范围的凭据时出现 `provider:default` 不匹配。(#12692) 感谢 @mudrii。 - **提供商/HTTP**:将 HTTP 503 视为 LLM 提供商错误的故障转移资格。(#21086) 感谢 @Protocol-zero-0。 - **Slack**:通过 Slack 原生流式调用传递 `recipient_team_id` / `recipient_user_id`,以便 `chat.startStream`/`appendStream`/`stopStream` 在 DM 和 Slack Connect 设置中可靠工作,并在原生流式传输活动时禁用块流式传输。(#20988) 感谢 @Dithilli。早期的收件人 ID 基础工作由 @AsserAl1012 在 #20377 中贡献。 - **CLI/配置**:为 `config set` 添加规范的 `--strict-json` 解析,并保留 `--json` 作为旧别名以减少帮助/行为漂移。(#21332) 感谢 @adhitShet。 - **CLI**:保持 `openclaw -v` 作为仅根级别的版本别名,以便子命令的 `-v, --verbose` 标志(例如 ACP/钩子/技能)不再被全局拦截。(#21303) 感谢 @adhitShet。 - **内存**:当 `memory_get`/QMD 读取尚未创建的文件时返回空片段,并强化内存索引/会话助手以抵御 ENOENT 竞争,以便缺失的 Markdown 不再导致工具崩溃。(#20680) 感谢 @pahdo。 - **Telegram/流式传输**:即使在分派抛出异常进行回退处理之前,也始终清理草稿预览,防止在运行失败期间出现孤立的预览消息。(#19041) 感谢 @mudrii。 - **Telegram/流式传输**:拆分推理和答案草稿预览通道以防止跨通道覆盖,并忽略内联/围栏代码片段中的字面 `<think>` 标签,以便示例标记不会被误路由为推理。(#20774) 感谢 @obviyus。 - **Telegram/流式传输**:恢复 30 字符的首个预览防抖,并将 `NO_REPLY` 前缀抑制范围限定为部分哨兵片段,以便正常的 `No...` 文本不被过滤。(#22613) 感谢 @obviyus。 - **Telegram/状态反应**:在重复的阶段更新时刷新停滞计时器,并在启用生命周期反应时确认反应范围,防止虚假的停滞表情和不想要的群组反应。感谢 @wolly-tundracube 和 @thewilloftheshadow。 - **Telegram/状态反应**:当可用反应查找失败时,通过回退到无限制的变体选择而不是抑制反应更新,来保持生命周期反应活动。(#22380) 感谢 @obviyus。 - **Discord/流式传输**:仅将 `replyToMode: first` 应用于第一个 Discord 块,以便块流式回复不会垃圾邮件式地提及 ping。(#20726) 感谢 @thewilloftheshadow 的报告。 - **Discord/组件**:将 DM 频道目标映射回用户范围的组件会话,以便按钮/选择交互保持在主 DM 会话中。感谢 @thewilloftheshadow。 - **Discord/白名单**:在解析 Discord 用户白名单时延迟加载公会列表,以便即使公会获取失败,仅 ID 的条目也能解析。(#20208) 感谢 @zhangjunmengyang。 - **Discord/网关**:处理关闭代码 4014(缺少特权网关意图)而不使网关崩溃。感谢 @thewilloftheshadow。 - **Discord**:将入站贴纸作为媒体摄取,以便仅贴纸的消息和转发的贴纸对代理可见。感谢 @thewilloftheshadow。 - **自动回复/运行器**:仅在代理生命周期或工具活动开始后(且每次运行仅一次)发出 `onAgentRunStart`,以便回退预检错误不再将运行标记为已开始。(#21165) 感谢 @shakkernerd。 - **自动回复/工具结果**:序列化工具结果传递,并在单个失败后保持传递链继续进行,以便并发工具输出保持用户可见的顺序。(#21231) 感谢 @ahdernasr。 - **自动回复/提示缓存**:通过保持入站系统元数据会话稳定,并将每条消息的 ID (`message_id`, `message_id_full`, `reply_to_id`, `sender_id`) 移动到不受信任的对话上下文中,来恢复前缀缓存稳定性。(#20597) 感谢 @anisoptera。 - **iOS/手表**:添加可操作的手表批准/拒绝控件和快速回复操作,以便手表发起的批准和响应可以直接从通知流程发送。(#21996) 感谢 @mbelinky。 - **iOS/手表**:使用龙虾图标集刷新 iOS 和手表应用图标资源,以保持手机/手表品牌一致。(#21997) 感谢 @mbelinky。 - **CLI/入门**:通过规范化基础 URL 以避免在设置检查期间出现重复的 `/v1` 路径,来修复 Anthropic 兼容的自定义提供商验证。(#21336) 感谢 @17jmumford。 - **iOS/网关/工具**:当存在重复显示名称时,优先选择唯一连接的节点匹配,提供带有请求 ID 的可操作的 `nodes invoke` 配对要求指导,并在位置能力设置更改后刷新活动的 iOS 网关注册,以便能力更新立即应用。(#22120) 感谢 @mbelinky。 - **网关/身份