← 返回更新日志

OpenClaw v2026.2.26-beta.1 预发布

2026-02-26 · 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。 - 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。 - 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`(在上传 + 文件卡片发送之前发送 `invokeResponse`),因此 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。 - 浏览器/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 报告。 - 代理/压缩 + 入门安全:通过去除压缩边界周围的陈旧助手使用情况、在同一尝试中跳过压缩后自定义元数据写入以及当没有真实对话消息要总结时取消保护压缩,防止破坏性双重压缩;为内存支持的工作区强化工作区/引导检测;并将 `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` 字段并忽略无效/超出范围的 timestamp 值,因此提示组装永远不会因格式错误的 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) - 浏览器/扩展中继认证:允许在 `?token=` 查询参数中对中继 `/json*` 端点进行认证(与中继 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 工具:通过活动代理账户上下文路由 `feishu_doc` 和 `feishu_app_scopes`(支持显式 `accountId` 覆盖),因此多账户代理不再默认为第一个配置的应用,并为上下文路由和显式覆盖行为提供回归测试覆盖。(#27338)感谢 @AaronL725。 - LINE/内联指令认证:在解析的授权(`command.isAuthorizedSender`)上限制指令解析(`/model`、`/think`、`/verbose`、`/reasoning`、`/queue`),因此 `commands.allowFrom` 授权的 LINE 发送者在原始 `CommandAuthorized` 未设置时不会被静默剥离。来自贡献者 PR #27248,由 @kevinWangSheng 提交。(#27240) - 入门/网关:在入门期间为非环回绑定种子默认 Control UI `allowedOrigins`(`localhost`/`127.0.0.1` 加自定义绑定主机),因此新的非环回设置不会因缺少来源策略而启动失败。(#26157)感谢 @stakeswky。 - Docker/GCP 入门:通过在 `pnpm install` 期间限制 Node 堆来降低首次构建 OOM 风险,在 `docker-setup.sh` 重用时复用现有网关令牌,以便 `.env` 与配置保持一致,为非环回 Docker 绑定自动引导 Control UI 允许来源,并为令牌化仪表板链接 + 配对恢复命令添加 GCP 文档指导。(#26253)感谢 @pandego。 - CLI/网关 `--force` 在非 root Docker 中:通过回退到 `fuser` 杀死 + 基于探测的端口检查,从 `lsof` 权限失败(`EACCES`/`EPERM`)中恢复,因此 `openclaw gateway --force` 适用于默认容器 `node` 用户流程。(#27941) - 网关/绑定可见性:在绑定到非环回地址时发出启动警告,因此操作员在运行时日志中获得明确的暴露指导