
OpenClaw 24h 更新快报(2026-11-02):凭据脱敏、Cron 交付回执、Doctor 数据库升级
过去一天 OpenClaw 主线合入了数百个 PR,其中最值得注意的三条主线是:配置读取开始一律脱敏内联环境变量凭据,Cron 定时任务可以读回属于自己的投递回执,以及 Doctor 终于能正常升级被 beta 版本卡住的 v16 agent 数据库。这三条分别落在“别把密钥写进日志”“任务要能自查送达状态”和“升级别把用户堵在门外”上。
除此之外,xAI 的语音与流式错误处理、Control UI 的长会话翻页性能、Telegram 话题与富消息渲染、Node 运行时拆装的诊断都有实质改动。以下按主题归类说明每项改动的动机与影响。
安全与凭据处理
PR #190618 修复了配置读取泄露凭据的问题。此前 CLI config get 与 Gateway 的 config.get 快照只对名称命中 secret 启发式的 env.vars 做脱敏,其余内联值会以明文出现在读取结果里。现在每个 env.vars 值都会被登记到同一套脱敏机制,名字叫什么都无所谓;把显示出来的配置再存回去时,真实的值通过既有的“脱敏—还原”链路保留,因此这条修复不会把配置写坏。空值和环境变量引用保持原有行为,无需迁移。
PR #190002 收紧 worker 工作区传输的 TLS 校验:此前只要网关证书指纹只含空白字符,传输端就会接受一个未受信的 HTTPS 对端,等于把凭据和工作区字节交给未验证的连接。现在空白指纹退回标准 CA 验证;显式正确配置的 pin 仍然允许自签证书,错误的 pin 则在发送任何凭据之前就被拒绝。
PR #190526 给 X 的 API 与媒体上传响应加了 16 MiB 上限。超大响应体会被流式读取器在解析前直接取消,Gateway 不再因为一个畸形的大 JSON 而无界占用内存;畸形 JSON 的报错提示和空媒体响应仍然照常处理。
Cron、Agent 会话与投递可靠性
PR #190598 是一次涉及 28 个文件的较大改动,目标是让定时任务能查自己的“送达结果”。此前当任务的播报账号与创建者账号不一致时,已投递的告警会一直挂在 pending;调度器准入的会话续跑在缺少诊断 job-id 投影时也会残留 next_check。修复后,任务可以翻阅自己历次运行的结论与新记录的播报回执,包括 channel、target、account、thread 和 message ID。边界被写得很清楚:读别的任务、跨账号读频道历史仍然被拒绝,历史结果里从未记录过的消息 ID 也补不回来。整个改动不需要改配置或 SQLite schema。
PR #190632 处理的是一个容易被误报的失败:模型恢复预算耗尽时,其实最终消息已经送达了渠道,启动扫描却仍然告诉用户失败。现在这类投递会先通过既有的恢复检查点结算,代价是必须拿出完整证据链——一条已投递的文本意图、保存好的平台回执、原始发送 ID、被中断的完成流程与会话版本号,以及原始的渠道/账号/收件人/线程,存储层还会在受保护的写入中复核一遍。真正未知的或媒体类的结果仍然按失败处理。
PR #190603 让计划内排空(drain)的 Gateway 不再被误判为需要重启。此前的就绪响应只有 gateway-draining 一种形态,宿主如果拿它做存活判断,会在运行中的任务还没给出答案前就把进程重启掉。现在经认证的排空租约可以带上绝对的 plannedDeadlineMs,详细就绪报告只在当前租约有效期内返回 plannedDrain: true,宿主既能保住健康实例,也能继续排队新工作。
PR #190221 修复了 Automations 搜索框的输入卡顿。此前每敲一个字符都会让保留行的属主权限绑定失效,500 个任务的场景下从约 14 毫秒劣化到 48 毫秒。修复恢复了多键连打的响应速度,同时保留属主编辑、转移、实时权限变更以及在变更时刻做权限校验的既有行为。
模型与 AI 能力
PR #190498 让 Azure Responses 真正认下兼容开关。用户设置 compat.supportsPromptCacheKey: false 之后,Azure 侧的部署仍然因为请求里带着 prompt_cache_key 而返回 HTTP 400;现在该开关会在 Azure 请求生成处真正生效,未设置或设为 true 的部署保持原有缓存行为,非 Azure 的 OpenAI 请求也不受影响。
PR #190285 与 PR #190308 是同一天进场的两条 xAI 修复。前者针对流式输出在吐出一部分文本后抛出 Internal error during token generation 时不去走已配置的 fallback 的问题,现在这类回合会走既有的有界重试与 fallback,成功回复仍留在历史里。后者处理的是语音打断:被中断的回答若没有发出终态事件,xAI Talk 会直接断开连接;修复后对话继续使用替换后的回答,被中断回答的迟到输出被丢弃,而真正的提供方错误和非法重叠响应仍然按错误处理。
PR #190530 纠正了上下文窗口的口径。/status 与 session_status 可能把模型的标称 1M 上下文容量报出来,而实际选中的窗口或目录默认值只有 200K,真实生效的 fallback 模型也有同样的偏差。现在分母会跟随既有的有效窗口解析逻辑,真实窗口为 1M 的模型仍然是 1M,模型选择、目录默认值和 token 计量均未改动。
PR #190326 修复了自动 Code Mode 会在模型目录刷新或 Gateway 重启后被悄悄关掉的问题,这会改变发给模型的工具集并丢掉 prompt cache 复用。修复后对话会保留目录中的 Code Mode 偏好与稳定的工具前缀,自定义端点也不会从一个不同路由继承能力。
PR #190627 是体量最大的一条性能改动:插件密集的 Agent 运行在工具目录不一致时会反复重建并发布完全相同的工具 schema。改为按弱 schema 身份复用后,工具定义、属性顺序、prompt 字节和执行权限都不变,但准备成本在多次运行和多会话之间摊薄。
控制台与渠道体验
PR #190249 解决长会话里往上翻越慢的问题。此前 Control UI 每加载一页历史消息都会重建全部已加载行,翻到后面每页要好几秒。实测在 4 倍 CPU 节流、30000 条消息的会话里,第 21 至 25 页的等待时间从约 3.3–3.4 秒降到约 1.6 秒,最长的阻塞任务从约 2.5 秒降到约 1 秒,已加载历史的数量、顺序和去重都不受影响。
PR #190451 与 PR #190465 一起解决了 Cmd+K 启动会话时的等待感。启动请求发出后面板立刻释放,但草稿仍被这一次启动占住,用户要等 Gateway 应答(准备 worktree 或 worker 常常要 20 秒以上)才能输入第二条;现在每次启动各自持有独立草稿,多个会话可以并发启动。与此同时,后台启动会话在它自己的路由上直接给出乐观预览,不再出现一个只有计时器的空白聊天页。
PR #190516 修复了 Telegram 私有话题的路由漂移:话题一旦被绑定到某个 ACP 会话,后续消息却落回默认会话。现在绑定的话题在消息、命令、会话查询和反应恢复上都留在原 ACP 会话,邻近话题和普通私聊保持原有路由,不需要改配置或做绑定迁移。
PR #190559 与 PR #190340 是渲染层的一对修复:前者让 Telegram 富回复里的列表与行内格式在 Control UI 中不再显示成字面标签,后者让 h1–h6 标题在 Telegram 富消息里成为原生标题块而不是标签文本。两者都只影响新生成的富回复,已有转写保持原样。
PR #190667 给转写列表加了上限。此前在大部分会议对调用者不可见时,一次 transcripts 列表调用会走遍整个归档;现在每次调用最多检查 200 场已存会议,空页和部分页会提示如何继续,授权更早的会议依然可达。
运行时、升级与兼容性
PR #190676 是这批改动里唯一标为 P0 的一条,直接卡住升级路径。2026.7.2-beta.6 的一次 npm 更新会让缺少派生触发器的所有 v16 agent 数据库被 Doctor 拒绝,进而阻断后续迁移与 Gateway 启动。修复后 Doctor 在既有 schema 事务内保留原始数据库、校验会话身份并补回缺失的规范失效触发器;无效行和无关的 schema 漂移仍然拒绝并给出保全与支持指引,触发器完整的 v16 数据库维持原流程。不涉及 schema 版本或公开配置变更。
PR #190622 补上了 Node 拆装的诊断。持有 OpenClaw 包的那个 Node 版本被移除、Gateway 的 Node 二进制却还在时,下次启动只会抛一个没有线索的 MODULE_NOT_FOUND。现在启动、状态与 Doctor 会解释这种拆分,并给出与既有运行时/pin 策略一致的修复建议,覆盖隐藏的 .fnm 根目录、软链包、悬空入口和不可读版本目录,Windows 上的 fnm 建议会指向 installation/node.exe。这项诊断也保留了现有“无人值守修复不受支持 Node”策略下的处置资格。
PR #190674 让 CLI 更新步骤在超时或被取消时终止自己派生的进程树。修复前包管理器子进程会活过被中断的更新步骤继续在后台跑,现在命令运行器的进程树清理在更新步骤里被启用,终止控制器仍然负责宽限期。需要注意,已安装的更新器自身必须包含这个修复,新版本无法替仍在运行的旧更新器收尾。
PR #190497 修的是一个数据安全问题:旧版根记忆合并写入失败时,Doctor 可能截断甚至撕裂 MEMORY.md,而既有修复只归档了 memory.md。现在失败的写入会保留线上记忆本体,每次合并都会在旁边留下 MEMORY.md.pre-merge 副本,合并完成后再跑一次 Doctor 也不会改动文件。
PR #190614 处理了 Windows 开发机上“断言全部通过但冒烟测试仍然失败”的困惑:清理临时 home 时 SQLite 的租约还没释放。现在清理会在导入的资源关闭租约之后才执行,导入错误、取消码和清理错误依然会照常暴露。
这一天的主线是收口:把凭据、权限边界和升级通道逐一堵上,同时让长会话、并发启动和语音打断这些日常路径不再靠运气。用户侧的直观感受是控制台更顺、任务更能自查状态,运维侧的感受是 beta 升级不再需要手工救库。


评论