← 返回更新日志

OpenClaw v2026.2.26

2026-02-27 · GitHub 原文
### 变更 - 高亮:外部密钥管理引入了完整的 `openclaw secrets` 工作流(`audit`、`configure`、`apply`、`reload`),具备运行时快照激活、严格的 `secrets apply` 目标路径验证、更安全迁移清理、仅引用认证配置文件支持以及专用文档。(#26155) 感谢 @joshavant。 - ACP/线程绑定代理:使 ACP 代理成为线程会话的一流运行时,集成 `acp` 生成/发送分发、acpx 后端桥接、生命周期控制、启动协调、运行时清理以及合并线程回复。(#23580) 感谢 @osolmaz。 - 代理/路由 CLI:添加 `openclaw agents bindings`、`openclaw agents bind` 和 `openclaw agents unbind` 用于账户范围路由管理,包括仅通道到账户范围绑定升级、角色感知绑定身份处理、插件解析绑定账户 ID 以及 `openclaw channels add` 中的可选账户绑定提示。(#27195) 感谢 @gumadeiras。 - Codex/WebSocket 传输:默认使 `openai-codex` 优先使用 WebSocket(`transport: "auto"` 并保留 SSE 回退),保留每个模型/运行时的显式传输覆盖,并增加传输选择的回归测试覆盖和文档。 - 入门/插件:让通道插件拥有交互式入门流程,支持可选的 `configureInteractive` 和 `configureWhenConfigured` 钩子,同时保留通用回退路径。(#27191) 感谢 @gumadeiras。 - 认证/入门:在启动 Gemini CLI OAuth 前添加明确的账户风险警告和确认门控,并在提供商文档和 Gemini CLI 认证插件 README 中记录注意事项。(#16683) 感谢 @vincentkoc。 - Android/节点:添加 Android `device` 能力以及 `device.status` 和 `device.info` 节点命令,包括运行时处理器连接以及设备状态/信息负载的协议/注册表覆盖。(#27664) 感谢 @obviyus。 - Android/节点:在 Android 节点上添加 `notifications.list` 支持,并在代理工具中公开 `nodes notifications_list` 以列出活跃设备通知。(#27344) 感谢 @obviyus。 - 文档/贡献:在 `CONTRIBUTING.md` 中将 Nimrod Gutman 加入维护者名单。(#27840) 感谢 @ngutman。 ### 修复 - Telegram/DM 允许列表运行时继承:跨账户能力通道(Telegram、Discord、Slack、Signal、iMessage、IRC、BlueBubbles、WhatsApp)使用有效账户加父配置强制执行 `dmPolicy: "allowlist"` `allowFrom` 要求,并使 `openclaw doctor` 检查遵循相同的继承逻辑,防止升级后 DM 流量被静默丢弃。(#27936) 感谢 @widingmarcus-cyber。 - 传递队列/恢复退避:通过在失败发送上持久化 `lastAttemptAt` 并推迟恢复重试,直到每个条目的 `lastAttemptAt + backoff` 窗口符合条件,同时继续恢复已延迟条目之后的就绪条目,防止重试饥饿。来自贡献者 PR #27710,由 @Jimmy-xuzimo 提交。感谢 @Jimmy-xuzimo。 - Gemini OAuth/认证流程:对齐 Gemini CLI 认证的 OAuth 项目发现元数据和端点回退处理,包括对环境提供项目 ID 的回退覆盖。(#16684) 感谢 @vincentkoc。 - Google Chat/生命周期:在 Webhook 模式下保持 Google Chat `startAccount` 处于待定状态直到中止,使启动不再被解释为立即退出,防止自动重启循环和 Webhook 目标动荡。(#27384) 感谢 @junsuwhy。 - 临时目录/Linux umask:在临时目录创建后强制 `0700` 权限,并在信任检查前自我修复现有可写临时目录,使 `umask 0002` 安装不再在启动时崩溃循环。来自贡献者 PR #27860,由 @stakeswky 提交。(#27853) 感谢 @stakeswky。 - Nextcloud Talk/生命周期:保持 `startAccount` 待定直到中止,并在关闭时停止 Webhook 监视器,防止网关管理账户生命周期时出现 `EADDRINUSE` 重启循环。(#27897) - Microsoft Teams/文件上传:在文件上传完成和文件卡片发送之前立即确认 `fileConsent/invoke`,使 Teams 不再在上传异步完成时显示错误的“出错了”超时横幅;包含更新的异步回归测试覆盖。来自贡献者 PR #27641,由 @scz2011 提交。 - 队列/排空/Cron 可靠性:通过同步泵故障时保证 `draining` 标志重置来强化通道排空,在网关重启排空窗口期间拒绝新队列入队(而非静默杀死已接受任务),使用过期消息跳过添加 `/stop` 队列积压截止元数据(同时避免跨会话原生停止截止泄漏),并将隔离的 cron `agentTurn` 外部安全超时提高到避免对较长代理会话超时的错误 10 分钟超时竞争。(#27407, #27332, #27427) - 输入/主回复管道:在 `agent-runner` 最终确定中始终标记分发空闲,即使分发程序 `onIdle` 未触发也运行输入清理,防止运行完成后输入指示器卡住。(#27250) 感谢 @Sid-Qin。 - 输入/TTL 安全网:为共享输入回调添加最大持续时间防护,使卡住的生命周期边缘即使显式空闲/清理信号丢失也能自动停止输入指示器。(#27428) 感谢 @Crpdim。 - 输入/跨通道泄漏:统一跨通道/内部 Webchat 路由的运行范围输入抑制,将当前入站来源保留为嵌入运行消息通道上下文,通过连续失败断路器边缘情况处理强化共享输入保持,并在扩展分发调用点强制分发完成/空闲等待(飞书、Matrix、Mattermost、MSTeams),使输入指示器始终在成功/错误路径上清理。相关:#27647、#27493、#27598。取代/替换草案 PR:#27640、#27593、#27540。 - Telegram/sendChatAction 401 处理:在重复未授权失败后添加有界指数退避和临时本地输入抑制,以停止可能导致 Telegram 滥用执行和机器人删除的无界 `sendChatAction` 重试循环。(#27415) 感谢 @widingmarcus-cyber。 - Telegram/Webhook 启动:澄清 Webhook 配置指南,允许 `channels.telegram.webhookPort: 0` 用于临时侦听器绑定,并记录本地侦听器 URL 和 Telegram 公告的 Webhook URL 及绑定端口。(#25732) 感谢 @huntharo。 - 配置/Doctor 允许列表安全:拒绝 `dmPolicy: "allowlist"` 且 `allowFrom` 为空的配置,添加 Telegram 账户级继承感知验证,并教导 `openclaw doctor --fix` 从配对存储文件恢复缺失的 `allowFrom` 条目(如果存在),防止升级后 DM 被静默丢弃。(#27936) 感谢 @widingmarcus-cyber。 - 浏览器/Chrome 扩展握手:在 `onopen` 之前绑定中继 WS 消息处理,并为网关样式握手帧添加非阻塞 `connect.challenge` 响应处理,避免挑战帧在连接时立即到达时的卡住 `…` 徽章状态。来自贡献者 PR #22571,由 @pandego 提交。(#22553) - 浏览器/扩展中继初始化:通过共享飞行中初始化承诺去重并发相同端口中继启动,使调用方等待一个启动生命周期并接收一致成功/失败结果。来自贡献者 PR #21277,由 @HOYALIM 提交。(相关 #20688) - 浏览器/填充中继 + CLI 奇偶性:在浏览器中继路由解析和 `openclaw browser fill` CLI 字段解析中,通过将缺失/空 `type` 默认设为 `text` 来接受无显式 `type` 的 `act.fill` 字段,使模型省略字段类型元数据时中继调用不再失败。来自贡献者 PR #27662,由 @Uface11 提交。(#27296) 感谢 @Uface11。 - 飞书/权限错误分发:将发送者名称权限通知合并到主入站分发中,使一条用户消息产生一个代理回合/回复(而非重复权限通知回合),并包含回归测试覆盖。(#27381) 感谢 @byungsker。 - 代理/Canvas 默认节点解析:当存在多个连接的 Canvas 能力节点且未选择单个 `mac-*` 候选时,默认使用第一个连接的候选,而非对隐式节点 Canvas 工具调用失败并提示 `node required`。来自贡献者 PR #27444,由 @carbaj03 提交。感谢 @carbaj03。 - TUI/流组装:在真实工具边界丢失时保留流式文本,且仅当最终负载中仅出现非文本块时不保留过时流式文本。来自贡献者 PR #27711,由 @scz2011 提交。(#27674) - 钩子/内部 `message:sent`:在代理传递、Cron 隔离传递、网关收据确认、心跳发送、会话维护警告和重启信标恢复的出站发送上转发 `sessionKey`,使内部 `message:sent` 钩子始终以会话上下文(包括通过 `--session-id` 恢复的 `openclaw agent --deliver` 运行,无需显式 `--session-key`)分发。来自贡献者 PR #27584,由 @qualiobra 提交。感谢 @qualiobra。 - Pi 图像令牌使用:停止每回合重新注入历史图像块,仅从当前提示处理图像引用,并修剪存储历史中已回答的用户图像块,防止令牌增长失控。(#27602) - BlueBubbles/SSRF:自动允许列表配置的 `serverUrl` 主机名用于附件获取,使本地主机/私有 IP BlueBubbles 设置不再被默认 SSRF 检查误阻止。来自贡献者 PR #27648,由 @lailoo 提交。(#27599) 感谢 @taylorhou 报告。 - 代理/压缩 + 入门安全:通过压缩边界周围剥离过时助手使用情况、在同一尝试中跳过压缩后自定义元数据写入以及取消无实际对话消息可总结的保护压缩,防止破坏性双重压缩;强化内存支持工作区的 workspace/bootstrap 检测;并将 `openclaw onboard --reset` 默认范围更改为 `config+creds+sessions`(工作区删除现在需要 `--reset-scope full`)。(#26458, #27314) 感谢 @jaden-clovervnd、@Sid-Qin 和 @widingmarcus-cyber 在 #26502、#26529 和 #27492 中的修复方向。 - NO_REPLY 抑制:在 Slack API 发送前和子代理宣布完成流程中抑制 `NO_REPLY`,使哨兵文本不再泄露到用户频道。来自贡献者 PR #27529(由 @Sid-Qin 提交)和 #27535(维护者重写最小化合并)。(#27387, #27531) - Matrix/组发送者身份:在 Matrix 组入站提示文本(`BodyForAgent`)中保留发送者标签,用于通道和线程消息,并使组信封与共享入站发送者前缀格式对齐,使第一人称请求针对当前发送者解析。(#27401) 感谢 @koushikxd。 - 自动回复/流式:仅抑制精确 `NO_REPLY` 最终回复,同时仍过滤流式部分哨兵片段(`NO_`、`NO_RE`、`HEARTBEAT_...`),使以 `NO_REPLY` 结尾的实质性回复被传递,且流式期间静默令牌片段不泄露。(#19576) 感谢 @aldoeliacim。 - 自动回复/入站元数据:向对话信息添加可读 `timestamp` 字段并忽略无效/超范围时间戳值,使提示组装永不因格式错误时间戳输入而崩溃。(#17017) 感谢 @liuy。 - 输入/运行完成竞争:通过用 `runComplete` 保护 `triggerTyping()` 防止运行后保持活动刻度重新触发输入回调,包含无重启行为在运行完成/分发空闲边界的回归测试覆盖。(#27413) 感谢 @widingmarcus-cyber。 - 输入/分发空闲:当 `markDispatchIdle` 在运行完成后从未到达时强制输入清理,避免 Cron/公告边缘中泄露的输入保持循环。来自贡献者 PR #27541,由 @Sid-Qin 提交。(#27493) - Telegram/内联按钮:当组策略授权发送者时,允许组中回调查询按钮处理(包括 `/models` 后续按钮),通过移除阻止开放策略组的冗余回调允许列表门控。(#27343) 感谢 @GodsBoy。 - Telegram/流式预览:在无现有预览消息时完成,在停止刷新前用最终答案预填充待处理预览文本,使用户不会短暂看到过时 1-2 词片段(例如 `no` 在 `no problem` 前)。(#27449) 感谢 @emanuelst 提供原始修复方向 #19673。 - 浏览器/扩展中继 CORS:在认证检查前处理 `/json*` `OPTIONS` 预检,允许 Chrome 扩展来源,并在中继 HTTP 响应上返回扩展来源 CORS 头,使扩展令牌验证不再失败跨域。来自贡献者 PR #23962,由 @miloudbelarebia 提交。(#23842) - 浏览器/扩展中继认证:允许中继 `/json*` 端点使用 `?token=` 查询参数认证(与中继 WebSocket 认证一致),使 curl/devtools 风格的 `/json/version` 和 `/json/list` 探测无需自定义头即可工作。来自贡献者 PR #26015,由 @Sid-Qin 提交。(#25928) - 浏览器/扩展中继关闭:在中继 `stop()` 期间,在套接字/服务器拆卸前刷新待处理扩展请求计时器/拒绝,使飞行中扩展等待不在关闭窗口内存活。来自贡献者 PR #24142,由 @kevinWangSheng 提交。 - 浏览器/扩展中继重新连接弹性:在短暂 MV3 扩展断开连接窗口期间保持 CDP 客户端存活,在失败飞行中 CDP 命令前短暂等待扩展重新连接,且仅在重新连接宽限期过期后拆卸中继目标/客户端状态。来自贡献者 PR #27617,由 @davidemanuelDEV 提交。 - 浏览器/路由解码强化:保护中继目标操作路由和浏览器路由参数解码中的错误百分比编码,使恶意 `%` 路径返回 `400` 而非崩溃/未处理 URI 解码失败。来自贡献者 PR #11880,由 @Yida-Dev 提交。 - 飞书/入站消息元数据:在专用元数据行中将入站 `message_id` 包含在 `BodyForAgent` 中,使代理能可靠关联并对需要消息 ID 的媒体/消息操作采取行动,包含回归测试覆盖。(#27253) 感谢 @xss925175263。 - 飞书/Doc 工具:通过活动代理账户上下文(支持显式 `accountId` 覆盖)路由 `feishu_doc` 和 `feishu_app_scopes`,使多账户代理不再默认为第一个配置应用,包含上下文路由和显式覆盖行为的回归测试覆盖。(#27338) 感谢 @AaronL725。 - LINE/内联指令认证:在解析的授权(`command.isAuthorizedSender`)上门控指令解析(`/model`、`/think`、`/verbose`、`/reasoning`、`/queue`),使 `commands.allowFrom` 授权的 LINE 发送者在原始 `CommandAuthorized` 未设置时不被静默剥离。来自贡献者 PR #27248,由 @kevinWangSheng 提交。(#27240) - 入门/网关:在入门期间为非环回绑定种子默认 Control UI `allowedOrigins`(`localhost`/`127.