← 返回更新日志

OpenClaw v2026.7.2-beta.3 预发布

2026-07-18 · GitHub 原文
## 2026.7.2 ### 亮点 - **远程编码会话:** 在云端工作节点上运行 Control UI 会话,在宿主主机上的终端中打开 Codex 和 Claude 目录会话,并直接在终端中恢复 OpenCode 和 Pi 会话。(#107670, #107086, #107200) - **原生自动化和节点:** 将自动化功能同步到移动端,在 Android 上新增前台语音唤醒,并从无头 Linux 节点中暴露摄像头、定位和通知功能。(#106355, #107081, #107193) - **更安全的频道操作:** 防止重启后 Telegram 持久性入口丢失,在活动轮次中保持 Signal 停止和审批控制响应,并阻止频道白名单授予所有者访问权限。(#107288, #107422, #107403)感谢 @obviyus、@arduano 和 @yetval。 - **引导式 Control UI 设置:** 从设置中配置模型提供商,通过引导式设置页面接入频道,并在创建会话时选择图像和模型。(#106490, #106469, #107358)感谢 @alexandre-leng 和 @fuller-stack-dev。 - **网关与会话恢复:** 防止重启准入使网关陷入死锁,在完成化停滞时恢复回复会话,并使一次性 cron 任务在生命周期声明竞争期间保持启用状态。(#107339, #106792, #107236)感谢 @obviyus、@joshavant、@charliemeyer2000 和 @SL4N。 - **安装与打包:** 新增附带网关指引的 Linux deb 和 AppImage 包,从基于稳定主干的版本发布,并让 Windows 安装程序在 winget 添加 Node.js 后立即继续执行。(#106533, #106891, #106862) ### 变更 - **外部网关监管:** 为生命周期所有者(如 OCM)添加 `OPENCLAW_SUPERVISOR_MODE=external`,保留已验证的重启和延迟行为,不暴露原生服务权限,阻止原生服务变更和自更新,并提供版本化的原子重启移交消费合约。感谢 @shakkernerd。 - **ClickClack 引导式设置:** 从 `openclaw onboard` 或 `openclaw channels add clickclack` 配置 ClickClack,输入 URL、令牌和工作区提示,支持默认账户环境变量回退、非致命实时连接验证,以及网关感知的后续步骤(当 OpenClaw 已在运行时自动连接)。感谢 @shakkernerd。 - **ClickClack 命令菜单:** 在网关启动时,将每个机器人的原生 OpenClaw 命令发布到 ClickClack 编辑器自动补全中,支持按账户选择退出,并对旧令牌和服务器进行非致命兼容性处理。感谢 @shakkernerd 和 @vincentkoc。 - **技能工坊审批:** 默认情况下,允许代理发起的应用、拒绝和隔离操作无需额外审批提示,同时保留 `skills.workshop.approvalPolicy: "pending"` 作为可选的审批关卡。感谢 @shakkernerd。 - **TUI 模糊选择器:** 将列表匹配委托给 pi-tui,新增斜杠标记和字母数字匹配,移除了本地匹配器分支。 - **macOS 配对节点终端:** 从嵌入式节点主机通告双工 Codex 和 Claude 终端恢复命令,并通过原生应用桥转发交互式输入和取消操作。(#107335) - **Control UI 目录终端:** 在 Gateway 或配对节点主机上的原生 CLI 中打开符合条件的 Codex 和 Claude Code 会话,支持查看器与终端偏好、已验证的恢复命令以及交互式 PTY 中继。(#107086)感谢 @vincentkoc。 - **技能工坊历史审查:** 新增手动、新优先的会话扫描,逐步搜索旧的重要工作以获取保守的技能点子,仅存储 SQLite 游标元数据,即使禁用自主自学习,也会留下最多三条结果作为待定提议。(#106182) - **OpenAI GPT-5.6 默认值:** 使用 `openai/gpt-5.6`(Sol 别名)进行全新 API 密钥设置,使用 `openai/gpt-5.6-sol` 进行全新 Codex/OAuth 设置,默认 Sol 在两个运行时中采用中等推理,并保留现有的主模型、回退、别名和显式 GPT-5.5 选择。(#103234) - **iOS 离线聊天:** 从受保护的、有界且按网关的缓存中预绘制最近会话和规范转录,离线时保持发送禁用,重置配对时清除缓存的对话文本。(#100194) - **Slack 进度指示器:** 默认使用 Slack 原生助手线程状态和旋转加载消息,同时保持确认反应静态;生命周期反应更新现在需要 `messages.statusReactions.enabled: true`。 - **Control UI Talk 控件:** 在设置 → 通信 → Talk 中保持语音、模型、灵敏度及其他实时默认值,并使用编辑器麦克风光标选择任意浏览器音频输入。(#101046) - **Control UI 会话工作区快捷键:** 使用 ⇧⌘B 展开或折叠活动聊天窗格的会话工作区轨道,而不改变主应用侧边栏或单独的详情和 Canvas 预览面板。感谢 @shakkernerd。 - **Control UI 设置快捷键:** 使用 ⇧⌘, 打开设置,同时保留浏览器拥有的 ⌘, 快捷键不变。感谢 @shakkernerd。 - **Control UI 聊天布局:** 将转录内容居中于编辑器轴,助手和工具输出靠左,用户气泡靠右,保持在相同的可读框架内,并保留自定义消息宽度覆盖。(#104474)感谢 @shakkernerd、@vincentkoc 和 @zw-xysk。 - **Control UI 编辑器底栏:** 将聊天设置芯片和模型控件居中于分隔线和卡片边缘之间,而非固定在分隔线上。(#105866) - **Control UI 助手操作:** 将助手名称和时间放在首位,悬停操作放在其左侧而不是最边缘。感谢 @shakkernerd。 - **Control UI 消息上下文:** 通过悬停或激活时的时间戳显示每条消息的令牌、上下文和模型详细信息,而不是显示单独的“上下文”按钮。 - **Control UI 会话标题:** 使用减运动安全的悬停动画展示截断的最近会话名称。 - **Control UI 侧边栏用量:** 从展开的侧边栏中移除提供商用量配额行,同时在聊天编辑器和用量页面中保留用量详情。感谢 @shakkernerd 和 @vincentkoc。 - **工作板调度上限:** 新增请求范围的 `--max-starts` 覆盖,同时保留默认上限、顺序启动和每所有者单卡保护。(#100174)感谢 @souvikDevloper、@Souvikalp 和 @jwest75674。 - **插件安装来源警告:** 对于 CLI 和聊天安装中的任意可执行插件源,要求显式 `--force` 确认;保持受信任的 ClawHub、捆绑、官方目录和跟踪更新流程无障碍;并将 Crestodian 安装限制为受信任源。(#102197)感谢 @jesse-merhi。 - **云端工作节点:** 为远程会话执行添加会话放置、调度和工作节点轮次路由。(#106332) - **配对节点编码代理:** 发现 OpenCode 和 Pi 会话,并通过流式 CLI 代理运行继续 Codex 和 Claude 目录会话。(#106941, #106927, #105833) - **目录会话:** 直接从 Control UI 侧边栏创建符合条件的目录会话。(#105810)感谢 @fuller-stack-dev。 - **管理工作树:** 从设置中按数量和总大小配置清理限制。(#106224) - **Cron 历史:** 从任务账本提供定时运行历史。(#106392) - **编码代理记忆:** 将 Codex 和 Claude Code 记忆导入 Control UI。(#106406) - **MCP 隔离:** 将 MCP 服务器连接限定在其请求会话范围内。(#106359)感谢 @obviyus。 - **Discord 语音:** 当语音频道参与者发生变化时通知代理。(#107004) - **Codex 用量:** 在应用服务器用量窗口旁显示已登录账户的电子邮件。(#106500) - **技能工坊:** 扫描先前会话历史以获取保守的、可审查的技能点子。(#106766) - **任务预览:** 在运行任务状态行中显示最新任务。(#107297) - **会话变更:** 在 Control UI 会话中显示活动分支和本地变更文件状态。(#106835) - **频道进度:** 为长时间运行的工作预留进度草稿,并使用模型自身的开头部分作为状态标题。(#106026) - **Codex CLI:** 将捆绑插件升级至 Codex CLI 0.144.6,并将 GPT-5.6 Codex 上下文元数据对齐至上游 272k 限制。 ### 修复 - **云端工作节点派生工作区缓存:** 对称排除 Python 缓存、依赖树和 macOS 元数据,避免本地缓存重写导致后续云结果或工作节点回收受阻。 - **Codex 模型状态诊断:** 当装备插件被禁用、缺失或隔离时,将已配置的 Codex 路由报告为不可用,同时保留单独的凭据结果,并使 `models status --check` 失败,而非静默地将回退执行视为正常。感谢 @shakkernerd。 - **网关控制平面速率限制:** 使用每方法桶,预算每分钟 30 次,使交互式管理员写入保持响应,同时保留无限循环保护。 - **Signal 关闭交付:** 在停止监视器之前排干已接受的入口消息,使关闭前立即收到的消息能完成处理而非丢弃。 - **外部监管程序重启健康检查:** 仅当替换网关锁和监听器 PID 一致时接受设备身份策略关闭,防止 OCM 管理的重启在成功交握后超时。感谢 @shakkernerd。 - **ACPX 清理进程检查:** 限制主机进程表读取,使停滞的 `ps` 调用不会挂起网关启动或会话清理,同时保留失败关闭的所有权检查。感谢 @Alix-007。 - **Cron 生命周期冲突重试:** 在计划运行、手动运行和启动恢复运行中保留执行阶段的重试决策,使执行后声明冲突不会重播已完成的消息或工具。修复 #108428。感谢 @yetval。 - **Discord 网关元数据截止时间:** 将现有查找截止时间传递至 DNS 和代理预检、请求头及响应体,使停滞的网关启动能干净中止。(#104580)感谢 @hugenshen。 - **Control UI 云会话思考:** 在新建会话模型选择器中展示推理层级,并在云调度前持久化所选层级。 - **iOS 全新安装设置:** 在钥匙串清理前原子化遮盖已使用的设置凭据,使延迟的项删除不再导致已成功配对的设备断开。修复 #107591。感谢 @dagmarjeeves-lab 和 @vincentkoc。 - **Tlon SSE 连接清理:** 在 HTTP 响应失败和流打开被拒绝后解除打开截止时间,使重连尝试不会留下陈旧的定时器。(#104585)感谢 @hugenshen。 - **LINE 回复令牌媒体类型:** 在入站回复中处理视频和音频元数据,与主动发送共享规范媒体构建器,并在记录空媒体投递时显式失败而非默默接受。(#106515)感谢 @edenfunf。 - **Mattermost websocket 连接截止时间:** 限制打开握手,使停滞的 TCP 对等方不会无限挂起频道启动,并确保超时后恢复重连控制。(#105553)感谢 @hugenshen。 - **排队 TTS 重试:** 在入队前将本地出站媒体复制到队列自有存储中,使语音回复能在生产者临时清理和重启恢复后存活,在重试退避期间保留引用的工件,并在一天后修剪未引用的暂存文件。修复 #108501。(#108502)感谢 @masatohoshino。 - **飞书应用注册截止时间:** 通过受保护的 fetch 边界将 OAuth 设备注册请求限定为 10 秒,使设置不会在停滞的响应头上无限挂起。(#105549)感谢 @hugenshen。 - **LINE 控制命令提及:** 在提及剥离之前检测授权的斜杠命令,使内联群组和直接消息控制保留原始入口元数据。(#107230)感谢 @edenfunf。 - **飞书文档图像读取:** 使用选定账户超时限制远程文档图像头部和停滞主体,通过插件的 MDAST 流水线解析文档 Markdown,保留图像/块对齐,并在创建空图像块之前拒绝失败的上传输入。感谢 @Alix-007。 - **ClawHub 注册表读取:** 与其他临时网关故障一起重试有界的 HTTP 500 响应,使多包发布扫描能够在孤立的注册表错误中存活。 - **Slack Socket Mode 健康检查:** 当 `auth.test` 失败或配置的机器人令牌解析为没有 `bot_id` 的用户时,将已连接的 Socket Mode 传输报告为降级,同时保留健康的企业组织安装。感谢 @zw-xysk。 - **Synology Chat 响应限制:** 限制用户列表响应读取,立即停止过大的流,并在 NAS 超出支持的信封时保留过时的缓存身份。感谢 @zw-xysk。 - **用量日期范围:** 从有限会话范围中排除没有时间戳的旧转录行,同时保留在全时段总计中,并在提供新语义前重建旧的用量缓存。修复 #89709。感谢 @TurboTheTurtle。 - **LINE 群组历史竞争:** 在活动提及轮次期间接收到的环境群组消息保留到下一轮次,同时恰好消费一次回合前快照。(#107367)感谢 @edenfunf。 - **Mattermost 进度命令详情:** 在频道配置验证和捆绑元数据中接受文档中描述的 `streaming.preview.commandText` 和 `streaming.progress.commandText` 模式。感谢 @shakkernerd。 - **1Password 授权交握:** 将绑定 nonce 的待定审批持久化到共享插件状态中,使跨代理实例的钩子和工具执行保持一次性使用并失败关闭。 - **Control UI 聊天转录:** 在会话和窗格返回时保留已加载的历史记录,限制自动回滚加载,虚拟化长转录,隐藏原生运行边界,并防止前置、流式和响应式布局闪烁或跳跃。感谢 @shakkernerd。 - **Codex 动态工具结果:** 使用共享的工具结果失败合约处理任意生命周期元数据,防止成功的技能工坊结果显示并持久化为失败调用。修复 #107684。感谢 @shakkernerd。 - **Codex `/status` 上下文新鲜度:** 从发出 `rawResponse/completed` 的 Codex 应用服务器中消费精确的每次响应用量;当精确用量不可用或省略时,保持上下文未知而非重用累积的终身总计。(#107813)感谢 @wuqxuan。 - **嵌套资源忽略:** 在技能和资源发现期间,正确处理无斜杠模式以及转义的文字感叹号在嵌套忽略文件中的使用。感谢 @moguangyu5-design。 - **代理绕过优先级:** 与 Undici 一致地处理空白小写 `no_proxy` 值覆盖大写 `NO_PROXY`,并重用规范匹配器进行 Telegram 回退选择。 - **Tokenjuice 执行压缩:** 避免在压缩的中间件元数据中保留原始命令输出,防止大型成功压缩导致中间件详情大小守卫失败。 - **代理 git 包身份:** 在托管仓库解析前去除引用并拒绝遍历段,使 GitLab 分支引用解析为规范的管理安装路径。感谢 @vincentkoc。 - **Tlon 自定义 S3 上传:** 通过 AWS SDK 的原生解析器传递存储端点,使自定义 S3 兼容上传不再在预签名前失败。 - **Signal 活动运行控件:** 在活动轮次中保持授权的停止、状态、审批和队列读取控制响应,同时在规范的会话准入中保留普通和有状态轮次,并在停止时取消每个待定的群组发送者通道。(#107422)感谢 @arduano。 - **代理认证存储锁:** 在暴露正常释放失败的同时,避免在 `proper-lockfile` 报告锁被破坏后冗余的释放尝试。 - **配对节点会话目录:** 授权捆绑的 Anthropic 和 Codex 目录请求从 Control UI 读取流中调用其只读节点命令,恢复远程 Claude/Codex 行和终端恢复可用性。修复 #107406。感谢 @vincentkoc。 - **沙箱重建确认:** 将 Clack 取消视为拒绝,使 Ctrl-C 不会继续执行容器移除。 - **Microsoft Teams HTML 文本:** 在引用和 Graph 获取的消息中一致解码 HTML5 实体,同时保留字面转义实体文本。 - **ClawHub 插件 API 范围:** 将每个支持的比较器委托给 `semver`,使波浪号、部分通配符和预发布插入符边界正确,同时保留 OpenClaw 版本规范化和现有的受限范围语法。(#106877) - **Web 可读性相对链接:** 用请求 URL 种子化解析后的文档,使文章链接正确解析,同时移除插件中重复的懒加载外观。(#106860) - **浏览器自动路由:** 当隐式选择的浏览器节点报告其控制主机不可达时,回退至网关主机,同时保留显式节点固定和模糊操作失败。 - **Discord 语音参与者上下文:** 维护实时网关语音状态花名册,并在授权的语音代理轮次中包含当前频道参与者,使代理能够回答谁在场。感谢 @vincentkoc。 - **OC Path JSONC 插入:** 通过 `jsonc-parser` 修补对象和数组插入,使注释、尾部逗号和 CRLF 格式幸存。(#106847) - **Windows winget 安装:** 当 winget 安装 Node.js 后机器 PATH 更新尚未可见时,在当前 PowerShell 会话中继续,避免虚假的“Node.js not found”失败。(#106862) - **Control UI 实时 Talk 反馈:** 为每个麦克风传输请求浏览器回声消除、噪声抑制和自动增益控制,并通过零增益汇点保持 PCM 捕获处理器连接,使麦克风输入不会在本地播放。 - **代理源回复恢复:** 保留通过代码模式执行的消息发送的当前聊天交付证据,防止成功回复触发冗余重试和误导性的交付失败诊断。感谢 @vincentkoc。 - **网关进程内重启:** 在重建运行时准入前清除陈旧的 SIGUSR1 重启状态并恢复准备的主机挂起,防止重启冷却或暂停调度泄漏到下一个生命周期。感谢 @vincentkoc。 - **ClickClack 持久媒体交付:** 通过必需交付路由媒体回复,跨重试重用所有者范围的上传和消息 nonce,修复持久化附件状态而不重新读取源媒体,在较旧的 ClickClack 服务器无法证明未知发送时失败关闭,并使用所选提供商和模型的运行时输出预算而非频道级别令牌上限。感谢 @jjjhenriksen 和 @shakkernerd。 - **Deepgram 实时自定义端点:** 验证语音呼叫流式传输基础 URL,使用安全方式处理错误,保留显式的 `ws://` 和 `wss://` 端点,并将 HTTP 方案映射为匹配的 WebSocket 传输以用于专用和自托管部署。(#105334)感谢 @dwc1997、@vincentkoc 和 @zw-xysk。 - **Control UI 新建会话重连:** 重新发现代理、节点、仓库分支和文件夹浏览器状态,刷新派生工作区,关口未验证设备,并在网关客户端替换后阻止模糊重试,同时保留类型化任务和显式选择。修复 #106372。感谢 @vincentkoc。 - **macOS 远程节点就绪:** 从节点 hello 快照中获取主会话密钥,而非在节点准入期间打开操作者连接,防止远程隧道恢复使 Computer Use 和节点执行卡在生命周期转换中。 - **Claude CLI 上下文预算:** 通过将有效限制传递给 Claude Code 的原生自动压缩器,并将在 OpenClaw 会话状态中持久化相同的准备预算,来尊重 Anthropic 模型和每个代理的 `contextTokens` 限制。修复 #80933。(#93198)感谢 @mushuiyu886 和 @gorkem2020。 - **转录读取失败:** 从流式 JSONL 会话读取中传播权限和 I/O 失败,而非将不可读转录视为空。(#106412)感谢 @zenglingbiao。 - **重启哨兵诊断:** 报告 SQLite 读写和传统文件清理失败,同时保留尽力而为的重启恢复行为。(#106385)感谢 @zenglingbiao 和 @wendy-chsy。 - **原生应用连接和中继可靠性:** 保持 Android 断开连接在 Activity 重建后停止,不打开权限提示即失败远程摄像头命令,在能力变更后刷新移动节点注册,展示 iOS 新手引导连接失败,在会话切换时取消过时的 Talk 所有者,拒绝无效的 Watch 确认,保留启动期间收到的 Watch 事件,并防止较旧的代理概览请求替换较新的网关状态。感谢 @vincentkoc。 - **网关源监视:** 在启动 tmux 监视器之前将已配置的端口从已安装服务中移交,保留失败窗格以供附加/捕获,并保持显式替代端口监视与受管理网关并存。感谢 @vincentkoc。 - **Claude CLI 最大轮次诊断:** 保留终端最大轮次结果与 OpenClaw 和 Claude 会话上下文,在工具操作可能已运行时发出警告,并停止可能产生副作用轮次的不安全认证配置文件或模型重播。(#94130)感谢 @zhangguiping-xydt 和 @tdrose01。 - **提供商网络重试:** 对齐提供商读取/轮询/下载和代理等待恢复以处理瞬时连接错误,重试有界的提供商 `ENOTFOUND` 失败,同时使网关 `ENOTFOUND` 和非幂等创建操作快速失败。(#101496)感谢 @xialonglee。 - **会话重试分类:** 停止标识符或负载详情仅包含 429/5xx 数字序列的永久性提供商错误重新发送完整上下文,并在重试路径间共享有界速率限制窗口解析。(#105258)感谢 @destire-mio 和 @yetval。 - **LINE 指令模板:** 抑制带有空白必填字段或无标签操作的确认和按钮,同时保留有效的无标题按钮及周围的回复文本。(#105520)感谢 @edenfunf。 - **SQLite 维护模式验证:** 在压缩前拒绝缺少或漂移的规范表、约束、索引、触发器或表选项的当前版本全局和代理数据库,同时接受支持的添加迁移布局。 - **Matrix 引导诊断:** 在有限的 stdout 和 stderr 尾部中保留完整的 UTF-8 码点,使加密依赖失败不会在保留边界处显示替换字符。(#105475)感谢 @qingminlong。 - **iOS Watch 中继命令:** 允许配对的 iPhone 节点通过默认网关策略通告和调用 `watch.status` 和 `watch.notify`,同时保留直接 watchOS 节点的固定最小命令表面。感谢 @vincentkoc。 - **Swabble 状态配置:** 读取服务状态时尊重全局 `--config` 路径,而非静默使用默认配置。 - **ClawHub 重试时机:** 拒绝分数延迟秒和日历归一化无效的 Retry-After 日期,使运行时和发布读取保持在有界回退计划上。(#105479)感谢 @qingminlong。 - **Discord 线程存档默认值:** 继承每个父频道配置的自动存档持续时间用于绑定创建的线程,而非强制 60 分钟,同时保留显式覆盖。(#103413)感谢 @wings1029。 - **已安装插件加载:** 使原生模块回退使用 jiti 的转换路径而非重试相同的同步 ESM 加载,防止官方插件导入 SDK 合约模块时 Node 24 启动竞争。感谢 @vincentkoc。 - **QA 配置文件频道执行:** 将混合 Crabline 频道场景划分为一个聚合主机套件,使基于分类的配置文件命令和证据工作流不再在执行前中止。 - **插件 SDK API 基线:** 覆盖每个公共入口点,保留完整的声明形状而不产生源行波动,并从变更文件验证运行基线和导出表面守卫。感谢 @vincentkoc 和 @zw-xysk。 - **SQLite 终端会话恢复:** 在代理数据库中跟踪物理转录修改时间,使被终止或超时的主会话在转录写入时长于注册表更新时轮换,同时在 doctor 导入期间保留传统转录 mtime。感谢 @vincentkoc。 - **网关聊天类型检查:** 从拥有协议模式中导入聊天事件类型(在已退休的聚合类型模块移除后),恢复完整项目类型检查。感谢 @vincentkoc。 - **打包的 Crabbox 命令:** 包含已发布包装器导入的租约新鲜度辅助函数,使 `crabbox:*` 命令在 npm 安装中不会因 `ERR_MODULE_NOT_FOUND` 而失败。感谢 @vincentkoc。 - **插件会话目录:** 拒绝未知的目录过滤器,将目录报告为插件能力,并在 SDK 注册捕获中保留它们,而非静默返回空结果或将仅目录插件分类为无能力。感谢 @vincentkoc。 - **网关服务审计:** 将 POSIX shell `-c` 包装器视为网关子命令检查中的不透明项,避免为 shell 包装的 macOS LaunchAgent 生成虚假的缺失命令警告,无需解析内部命令或端口。修复 #81751。(#81778)感谢 @liaoandi。 - **出站频道引导:** 抑制相同频道、配置和注册表生成上的重复失败插件激活,同时在配置或注册表重新加载后重试。(#100377)感谢 @xialonglee。 - **OpenAI Realtime 客户端密钥截止时间:** 通过受保护的 fetch 边界将语音和转录密钥获取限定为 30 秒,同时保留身份验证和有界响应解析。(#102860)感谢 @Alix-007 和 @Leon-SK668。 - **网关客户端看门狗:** 对无界和混合待处理请求保持传输停滞检测激活,使死套接字拒绝待处理请求、重连并永不重播被拒绝的请求。(#103407)感谢 @NianJiuZst。 - **iOS Share Extension 草稿:** 保留以脚手架类前缀开始的合法共享文本,仅移除精确的传统脚手架行,避免将类似方案的文章视为 URL,并去重主机镜像内容。(#103453)感谢 @lin-hongkuan 和 @harjothkhara。 - **Telegram 推理预览:** 通过延迟删除重新定位分割的推理预览,使先前的预览消息不会保持过时,同时保留客户端滚动位置。(#97828)感谢 @ly-wang19 和 @kyle20026。 - **飞书原生卡片线程:** 规范化空白回复目标一次,并重用共享回复模式用于卡片和媒体部分,使原生卡片主题回复保留在其线程中。(#102804)感谢 @sunlit-deng。 - **QQBot 令牌请求:** 使用共享的 30 秒受保护 fetch 截止时间限制令牌获取,使停滞的 singleflight 调用者一起失败、清理并可重试。(#102897)感谢 @maweibin。 - **Canvas A2UI 验证:** 在 CLI、代理工具和最终节点调用边界拒绝格式错误或不支持的 JSONL,同时保留原生 v0.8 调度。(#103713)感谢 @qingminglong。 - **Twilio RCS 入站路由:** 仅在签名 webhook 验证后规范化 RCS 消费者地址,使发送者匹配和会话正常工作,同时不改变出站 RCS 语义。(#102373)感谢 @clawSean。 - **ClickClack 输出消毒:** 在发送者边界剥离内部工具和 XML 脚手架,抑制仅脚手架发送,并保留可选的现代交付 ID。(#103142)感谢 @masatohoshino、@vincentkoc 和 @zw-xysk。 - **代理核心截断:** 当头截断收到负数行或字节上限时避免空输出崩溃。(#103425)感谢 @qingminglong。 - **Windows Node 解析:** 在解析裸不区分大小写的 `node.exe` 条目时,在恶劣的 `PATH` 值下保留当前可执行文件。(#103907)感谢 @soldforaloss 和 @vincentkoc。 - **Codex 运行时切换:** 接受捆绑的 Codex 运行时用于 `codex/*` 和 `openai/*` 模型路由,同时保持不支持的提供商/运行时组合被拒绝。(#103762) - **代理中止清理:** 将提示锁重新获取与终端清理序列化,使取消的嵌入式运行不会在会话锁上自竞争长达 60 秒。 - **Chutes OAuth 截止时间:** 限制令牌交换、配置文件查找和刷新请求,并在可选的用户信息丰富停滞时保留已颁发的令牌。(#102026)感谢 @Alix-007。 - **Control UI 工作区头像:** 在引导和身份响应中内联验证后的代理头像文件,使 Personal 卡片图像渲染无需未认证的头像路由请求,同时保留已配置的表情符号优先级。(#102892, #97602)感谢 @LZY3538 和 @mtuwei。 - **Exec 安全标志:** 对于默认的仅 stdin 过滤器,自动批准精选的只读布尔标志,同时保持未知标志、尾部跟随/重试模式、文件操作数和自定义配置文件失败关闭。(#88953)感谢 @yetval。 - **iOS 会话变更:** 将重命名、归档、固定、删除和分叉请求限定到选定代理,为分叉会话保留父代理,使多代理聊天操作不能在错误代理下变更或创建会话。(#103366, #103415)感谢 @lin-hongkuan 和 @harjothkhara。 - **Swift 协议初始化器:** 将每个模式可选的生成初始化参数默认设为 `nil`,使添加的协议字段不再破坏 SDK 构造调用点。 - **OpenCode Go MiMo 目录:** 停止暴露已弃用的 `mimo-v2-omni` 和 `mimo-v2-pro` 别名(它们拒绝代理请求),并在活跃的 MiMo V2.5 路由上保留发布验证。(#103311, #103329)感谢 @krissding。 - **审计时间过滤器:** 拒绝 `openclaw audit --after` 和 `--before` 中不可能的日历日期,避免它们滚动到非预期区间,同时保留无时区时间戳语义。(#103433)感谢 @qingminglong。 - **OpenAI 兼容流式工具调用:** 从以 SSE `data: [DONE]` 结尾但省略 `finish_reason` 的流中执行完整的原生工具调用,同时保持传输 EOF 和可见文本情况失败关闭。(#98124, #97994)感谢 @SunnyShu0925 和 @wszhhx。 - **xAI 提供商别名:** 当模型使用已发布的 `x-ai` 提供商别名时,保留 Grok 4.3 和 Grok 4.5 思考配置文件、快速模型路由和加密推理重播,而不是将有效的思考请求限制为 `minimal`。(#103315) - **Doctor 状态隔离:** 当 `OPENCLAW_STATE_DIR` 指向其他地方时,防止自动更新和网关监视修复导入和归档默认主目录执行或插件绑定审批;保留隐式 CLI 预检仅通知;并将跨状态导入保留给直接操作者 doctor 运行。(#103247, #103317)感谢 @vincentkoc。 - **Doctor 干净状态指导:** 在清除运行且无配置更改后,停止建议 `openclaw doctor --fix`,同时保留有针对性的修复提示。(#103233)感谢 @kewang-pika 和 @nonplace。 - **Google 音乐生成:** 重试一次未阻塞的 Lyria 响应(该响应省略了合约要求的音频),同时保持提示块和终端生成为不可重试。(#103318) - **OpenCode Zen 模型目录:** 刷新提供商拥有的静态种子,用于 Claude Sonnet 5、Grok 4.5、Hy3 Free、Kimi K2.7 Code 和 MiniMax M3,包含已验证的路由、定价、限制和输入能力,移除已退休的免费层级行,并通过未认证的模型列表暴露相同目录。(#103184) - **受管理浏览器启动:** 将异步 Chrome 引导和运行时生成失败作为浏览器错误暴露,同时保持网关存活,并在后续生命周期失败中保留进程错误处理。感谢 @vincentkoc。 - **浏览器节点代理下载:** 将每个操作产生的下载传输到网关媒体存储,对齐每文件 10 MiB 和总计 16 MiB 的传输预算,并将多个下载路径重写为网关本地文件,而不遍历页面控制的结果数据。 - **网关启动迁移:** 当选定配置在启动期间发生变化时,在退出前释放共享迁移租约,允许立即重试而非阻塞就绪直到五分钟后租约到期。(#103145) - **Apple 超时恢复:** 即使平台工作忽略取消,从共享操作截止时间和调用者取消中迅速返回,同时隔离延迟的网关握手并清理定位和权限等待者。(#103066)感谢 @NianJiuZst。 - **Claude CLI 预热会话:** 当 Claude 未写入原生转录时,保持受管理 stdio 连续性;仅当准确的活动子进程消失或更改时回退到有界的 OpenClaw 历史;并防止无状态运行持久化 CLI 绑定。(#96841)感谢 @bradreaves。 - **CLI 插件列表:** 当不存在遗留输入时跳过状态迁移运行时加载,减少打包冷启动内存,同时保留对传统插件索引和已配置会话存储的迁移。 - **Unicode 安全有界文本:** 在 Control UI、CLI、Gateway、插件、QA、内存和 Android 表面中,缩短预览、提示、诊断、标签、会话键、链接元数据和身份值时,保留完整 UTF-16 代理对。(#102625, #102626, #102627, #102816, #102823, #102833, #102877, #102949, #102963, #102969, #102988, #103010, #103034, #103210, #103341, #103487, #103543, #103580, #103646)感谢 @zhangguiping-xydt、@wings1029、@wangyan2026、@Pandah97、@MoerAI、@SunnyShu0925、@zhangqueping、@zw-xysk、@cxbAsDev、@lzyyzznl、@coder-master-0915、@LeonidasLux、@mushuiyu886、@ly85206559、@Simon-XYDT、@lsr911、@vincentkoc、@chengzhichao-xydt 和 @wangmiao0668000666。 - **Cron 列表表格:** 按终端显示宽度消毒和大小有界单元格,使 CJK、表情符号、组合标记和终端控制输入无法破坏对齐或输出。(#103616)感谢 @mushuiyu886。 - **CLI 模型表格:** 按渲染终端宽度消毒、截断和填充模型列表单元格,使表情符号、CJK 和其他宽字形保持列对齐。(#102819)感谢 @Kevin23-design 和 @vincentkoc。 - **技能提示压缩:** 在使用剩余提示预算进行缩短的、UTF-16 安全的描述之前,保留每个包含的技能身份,在不超过硬限制的情况下保留触发指导。(#88426)感谢 @abel-zer0、@vincentkoc、@chengzhichao-xydt、@wangmiao0668000666 和 @Pandah97。 - **频道 Markdown 代码表格:** 按渲染显示宽度调整列大小,使 CJK、表情符号和混合宽度单元格在共享的 Telegram 和 Discord 输出中保持对齐。(#55596, #55512)感谢 @sparkyrider 和 @zjy282。 - **QQ Bot 审批预览:** 在字素边界处包装长的消毒命令和元数据,使用可见的续行标记和安全围栏,使桌面 QQ 审查可读,同时不改变命令内容。(#102119, #101979)感谢 @Bartok9 和 @xuzhi5858。 - **Codex 计算机控制:** 将固定长度坐标对作为同质数组模式发布,使 Codex 应用服务器能够使用 `computer` 工具启动线程,而非拒绝元组值 `items`。 - **Google Chat 请求截止时间:** 将控制调用限制为 30 秒,同时为媒体传输提供按大小感知的总预算和独立的 30 秒停滞主体守卫,防止挂起的 Chat API 请求而不破坏大型附件上传。(#102227)感谢 @hugenshen。 - **Google Gemini 前缀模型 ID:** 在选择多模态函数响应行为时识别 `google/gemini-*` 和 `models/gemini-*`,保留 Gemini 2 图像回退而不退化 Gemini 3 内联图像响应。(#102382)感谢 @LiLan0125 和 @yetval。 - **生成的提供商模型目录:** 当 MinMax 和 NVIDIA 目录行宣告视频或音频元数据时,保留这些行,同时将运行时模型输入投影为文本/图像,防止配置的多模态主模型被丢弃而回退。(#97858, #97048)感谢 @ly-wang19 和 @zackchiutw。 - **DeepSeek 目录元数据:** 将 V4 Flash 和 Pro 定价与 DeepSeek 当前的缓存命中、缓存未命中和输出率对齐;刷新由较旧新手引导流程写入的精确目录元数据;并记录 7 月 24 日传统 `deepseek-chat` 和 `deepseek-reasoner` 兼容名称的退役。(#103192) - **CLI 音频转录文件:** 将推断的 Whisper 和 Parakeet 文本文件视为权威,使空输出或缺失输出无法将进度/状态 stdout 暴露为用户语音。(#87393, #87384)感谢 @kesslerio。 - **Node 24 上的浏览器操作:** 保持浏览器请求取消绑定到客户端和响应生命周期,而非 Node 24.16+ 过早中止的主体流信号,防止有效的 POST 操作在 JSON 解析后失败。感谢 @obviyus 和 @vincentkoc。 - **Android 硬件键盘聊天:** 在物理键盘上使用未修改的 Enter 发送,同时保留 Shift+Enter 和其他修改后的 Enter 组合用于多行输入。(#101239)感谢 @3ninyt3nin-creator。 - **Codex 产生的原生子代理:** 保持父应用服务器订阅和共享客户端存活,直到产生的原生子代理完成交付稳定,防止丢失唤醒和泄漏的一次性清理。 - **Control UI 会话创建:** 在选择另一个会话后,保持新创建的会话位于稳定侧边栏顺序的前端。感谢 @shakkernerd。 - **仅 FTS 内存启动:** 当 `memorySearch.provider` 显式为 `none` 时,跳过插件能力发现,避免不必要的冷启动扫描。 - **iOS 嵌入式终端:** 在原生的 Gateway 认证连接时直接打开仅终端 Control 界面,而非暴露 Web UI 登录屏幕。 - **源码构建可移植性:** 保持 tsdown 配置自包含,使构建不依赖于从 unrun 的临时模块目录解析 tsdown 包。感谢 @vincentkoc。 - **浏览器标签采纳:** 当新的 MCP、Playwright 或 CDP 目标未能通过最终安全验证、创建后中止或无法被重新发现时,保留先前的隐式标签和稳定别名;在创建标签前验证标签,并将受管理清理限制为已采纳的目标。(#105301)感谢 @hugenshen。 - **Mattermost 块流式:** 在草稿预览模式下保留完整、未重复的文本和工具块,并在预览流式禁用时遵循正常块流式。(#87449)感谢 @yetval 和 @Senseonics-AI。 - **iOS 开发应用身份:** 将开发应用标记为 OpenClaw,同时使用其不同的调试图标以区别于发布版本。 - **Android 聊天恢复:** 在重连和序列间隙历史快照追赶时,保留乐观的用户消息和本地拥有的运行,防止已发送消息消失或过时运行取得所有权。(#100197) - **iOS 语音唤醒清理:** 在禁用非活动语音唤醒时避免初始化麦克风音频流水线,防止模拟器启动中止和不必要的音频设置。 - **代理停止恢复:** 防止延迟中止的提示在拆除后重新获取孤立的会话锁,使 `/stop` 让对话准备好进行下一轮。 - **本地网关 CLI 认证:** 将环回 CLI 令牌/密码调用保持在持久设备范围之外,使读取探测不会因过时的配对基线而阻塞后续的写入/管理员命令。(#95997)感谢 @vincentkoc。 - **MCP 模式诊断:** 将 draft-2020-12 编译器失败归因于外部 MCP 模式,使格式错误的模式产生可操作的设置错误。感谢 @vincentkoc。 - **Amazon Bedrock 控制平面截止时间:** 限制模型发现和应用推理配置文件查找,保留调用者取消,并在每个请求路径后关闭短期 SDK 客户端。感谢 @Alix-007 和 @vincentkoc。 - **回复预交付恢复:** 使用所有者可覆盖的截止时间限制每个预交付回调,在挂起的插件工作后释放序列化回复通道,并仅当传输从未开始时保留持久最终交付重试状态。(#104256)感谢 @NianJiuZst 和 @BenjaminBrossi。 - **Signal 原生引用回复:** 在代理、显式、持久和分块发送中,将活动入站消息作为原生引用保留,同时将回复模式策略保留在 Signal 插件内。(#105347)感谢 @jesse-merhi 和 @vincentkoc。 - **媒体存储远程下载:** 限制响应头等待和停滞主体,关闭已放弃的重定向和错误响应,并移除部分临时文件,使挂起的源无法固定调用者。(#104624)感谢 @hugenshen。 - **Cron llama.cpp 工具模式:** 保持面向模型的 cron 声明模式与 llama.cpp 兼容,同时保留网关和运行时的非空验证。修复 #107449。(#108360)感谢 @lee-xydt 和 @Patt92。 - **终端会话:** 保留早期按键,启用配对节点终端操作,授权配对节点目录读取,在过时的 Control UI 连接后恢复,并在高输出下保持慢客户端附加。(#107214, #107361, #107410, #107419, #107348)感谢 @vincentkoc 和 @zw-xysk。 - **Control UI 配置:** 自动保存已验证的编辑,恢复自动保存关口,显示未应用的重启状态,并保持正常内容滚动和选择行为。(#107458, #107477, #107577, #107349) - **Signal 恢复:** 在停滞的容器握手后重新连接,防止重启期间重叠的守护进程,并在电话号码规范化期间保留用户名目标。(#107386, #107409, #107365)感谢 @hugenshen、@ZHOUKAILIAN、@UberKitten 和 @ly-wang19。 - **授权边界:** 要求操作员管理员权限进行配对节点目录浏览,并阻止迁移配置合并中的原型污染。(#106004, #106116)感谢 @yangxiansheng、@joshavant、@yetval 和 @ruel225。 - **对话身份:** 在群组轮次中保留说话者归属,并减少格式错误的 Discord 公会回复工具调用。(#107025, #107474)感谢 @lonexreb。 - **提供商设置:** 显示 OpenRouter OAuth 拒绝错误,找到存储在认证别名下的凭据,并保持未解析的 API 密钥提供商可见以供修复。(#105448, #106736, #106754)感谢 @VectorPeak 和 @altaywtf。 - **Claude 和 Codex 会话:** 保持 Claude 轮次打开以进行原生后台工作,避免实时更新后的 Codex 关闭警告,完成 Codex 新手引导登录交握,并退役已完成的钩子中继。(#106347, #106418, #107174, #106899)感谢 @obviyus、@fuller-stack-dev 和 @bek91。 - **Apple 应用:** 将 iPhone 和 Watch 客户端连接到协议 v3 网关,拒绝不完整的附件共享,并在 iOS 发布归档中尊重固定的 Swift 工具链。(#106294, #106513, #107188)感谢 @jincheng-xydt、@harjothkhara 和 @joshavant。 - **内存可靠性:** 在跨分割 QMD 输出时保留 UTF-8,在传统迁移期间保留规范缓存行,并接受前导零的 JSON 内容长度。(#107263, #107243, #105916)感谢 @wahaha1223、@felirami、@Tony-ooo、@qingminlong、@vincentkoc 和 @zw-xysk。 - **技能和工坊:** 保持全局安装的 ClawHub 技能被跟踪,清理孤立的用量行,展示验证错误,并将工坊审批默认设置为自动处理。(#106479, #107144, #107143, #107690)感谢 @ml12580、@mnowrot、@SunnyShu0925 和 @shakkernerd。 - **有界网络调用:** 为 Google Chat 认证、Slack 目录和读取模式调用以及 Twitch 用户查找设置超时,而非挂起。(#106178, #106643, #107103, #105883, #107360)感谢 @QiuYuang、@Monkey-wusky、@maweibin、@zw-xysk 和 @Alix-007。 - **频道交付:** 在标量流式回退时发出警告,并使用所选模型的运行时预算使 ClickClack 媒体交付持久化。(#106796, #105775)感谢 @jjjhenriksen。 - **插件管理:** 尊重标准 ClawHub API 比较器,并允许 Control UI 管理员启用已安装的插件。(#106889, #106318) - **运行时配置:** 保留已解析的缓存保留值,应用显式环境变量移除,并防止已调度的工作板卡片卡在运行状态。(#106069, #107258, #107271)感谢 @krissding、@jalfaro2876 和 @pgondhi987。 - **输入和输出安全:** 遮蔽敏感的迁移终端输出,规范化受管理 git 包身份,并避免在压缩的 Tokenjuice 元数据中保留原始命令输出。(#106806, #107637, #107705)感谢 @yetval。 - **网络和资源匹配:** 共享规范的 NO_PROXY 行为,并尊重嵌套忽略模式以及转义的文字感叹号。(#107711, #106258)感谢 @moguangyu5-design。 - **Markdown 前言:** 当 YAML 节点无法直接表示时,保留强制的回退值。 ### 完整贡献记录 完整的贡献记录可在标签固定的 [CHANGELOG.md](https://github.com/openclaw/openclaw/blob/v2026.7.2-beta.3/CHANGELOG.md#complete-contribution-record) 中查看。 ### 发布验证 - npm 包:https://www.npmjs.com/package/openclaw/v/2026.7.2-beta.3 - 注册表压缩包:https://registry.npmjs.org/openclaw/-/openclaw-2026.7.2-beta.3.tgz - 完整性校验:`sha512-b1U1Q2/IrP3NX3ZWruiasWEJPjl2dq0Hm8ZByZrE7GwLqo78wu8eB7eJAqCEu29MtlBxLLSKz58SE01WUBf7dw==` - 发布 SHA:`d111bef0eed5aefb1e7c5ac59801c1f0924495f1` - 完整发布 CI 报告:https://github.com/openclaw/releases/blob/main/evidence/2026.7.2-beta.3/release-evidence.md - 发布发布:https://github.com/openclaw/openclaw/actions/runs/29664100317 - npm 预检:https://github.com/openclaw/openclaw/actions/runs/29662726100 - 完整发布验证:https://github.com/openclaw/openclaw/actions/runs/29660853502 - 插件 npm 发布:https://github.com/openclaw/openclaw/actions/runs/29664738469 - 插件 ClawHub 发布:单独分派,此证据不等待:https://github.com/openclaw/openclaw/actions/runs/29664739655 - 插件 ClawHub 引导:无需 - OpenClaw npm 发布:https://github.com/openclaw/openclaw/actions/runs/29664809781 - npm Telegram beta E2E:https://github.com/openclaw/openclaw/actions/runs/29663308444