OpenClaw 24h 更新快报(2026-11-03):更新链路、模型请求取消、会话性能

内容管家 其他评论0字数 3259阅读10分51秒阅读模式
OpenClaw 24h 更新快报(2026-11-03):更新链路、模型请求取消、会话性能

OpenClaw 24h 更新快报(2026-11-03):更新链路、模型请求取消、会话性能

过去 24 小时,OpenClaw 主干合入了约 425 个 PR,密度远超日常。这一轮更新的主线不是新功能,而是把"长期运行时的自愈能力"和"大负载下的稳定性"补齐:一方面,更新器被强杀后不再让 Gateway 一停就是几天,插件损坏也不会再把整个核心更新回滚;另一方面,模型请求的取消信号终于能真正打断各家的 payload hook,会话读取、工具 schema 复制、Gateway 停止等环节的重复与阻塞问题也集中清理了一遍。

对使用者来说,这批改动的共同点是:过去需要"重启、清理、手工 repair"才能恢复的故障,现在倾向于自愈;过去被当成偶发的卡顿,现在有了明确的责任方和可观测的指标。

更新链路:从"要手工 repair"到可自愈

这是本轮最值得关注的一组改动。过去 openclaw update 一旦在中途被杀,Gateway 会一直停机,运维只能手动跑 openclaw update repair。

  • PR #191201(标记 P0)修复了"插件批次已预留后更新进程被杀死,Gateway 持续停机"的问题。现在交接助手会结算该次更新自己的插件批次、拉起经过校验的 Gateway,下一次更新也能被正常受理,无需人工修复。属于其他更新的批次、记录数据存在风险、所有权丢失、运行时无法验证的情况仍然会阻断恢复,并明确提示下一步该做什么。
  • PR #191348 处理了插件与核心更新的耦合问题。此前只要有一个 npm 插件损坏(安装目录存在但 package.json 丢失),整次核心更新就会回滚并报失败。现在核心更新照常推进,损坏插件保留安装记录,等下一次更新或插件修复再恢复;如果核心更新确实需要回滚,回滚会把该插件目录原样还原。
  • PR #191181 改了中断语义。此前 Ctrl-C 或 SIGTERM 之后更新进程会在 2 秒后被强制杀死,遗留的 .artifacts/dist-artifacts.lock 会卡住下一次源码更新。现在更新自己接管信号处理,释放构建锁,并在激活阶段于步骤预算内把 Gateway 拉回来,随后以 130/143 退出。
  • PR #191275 修掉了"运行中的 Gateway 持续写库导致自动恢复清理中止"的死结:清理流程曾以 "Recovery destination database changed" 为由停手,现在已验证的恢复原文件可以在 Gateway 正常工作的同时被正常退役。
  • PR #191196 补上了 Git 安装的清理缺口。此前每次源码安装验证更新都会在 .artifacts 下留一整份状态数据库副本且永不删除,报告方每次更新要多占 21–22 GB;现在验证通过后会像包安装一样删除迁移前快照,无法自动恢复、被后续 Doctor 拒绝或激活失败的快照仍会保留以供人工恢复。

另外 PR #191346 把定时备份的十分钟硬超时改成了 24 小时预算(需要重新执行 openclaw backup enable 才会生效),不再因为完整归档耗时过长而把任务杀掉。

模型请求:取消信号终于能打断 payload hook

这一组的价值在于把"取消"从表面支持变成真正的中断。一个长期困扰的问题是:模型轮次被取消时,Provider 适配器仍会等在慢或卡死的宿主 onPayload 回调后面,轮次既不结束也不释放。

  • PR #191261 把这条路径统一到了六个剩余入口:Google Interactions、Google Generate Content、Mistral、Codex Responses、共享 OpenAI Responses 以及托管 Responses。取消后适配器立即结算,已被接受的回调工作继续保留到完成,晚到的 resolve/reject 既不能替换已中止的结果,也不会触发 HTTP 派发。此前只有 Anthropic(见 PR #191024)和 Chat Completions(见 PR #191090)具备该行为。
  • 与取消配套的是请求侧的内存治理。PR #191058 让 OpenAI 默认请求策略不再重复拷贝已准备好的不可变 Responses 历史,直接请求字节、指纹、访问程序策略与调用方 hook 优先级都不变,但重复请求的内存分配明显下降。配套的 提交 7a96bac 把 Responses 请求构造器收为私有,避免外部再构造等价请求。

凭据与路由这一侧也集中修了一批"看起来能连、其实走了另一条路"的问题:

  • PR #191468 让 macOS 客户端在继承了旧 token/密码的环境变量时,优先使用共享配置里的正确凭据去连接本地 Gateway,与 Gateway 启动时的优先级保持一致;远端环境变量覆盖和缺配置回退逻辑不变。
  • PR #191464 修复了 xAI OAuth 刷新反复发生的问题:当刷新响应没有可用有效期且继承了旧令牌的过期时间时,现在会直接判定需要重新登录,而不是发布一个假的过期时间反复消耗轮换的 refresh grant。
  • PR #191224 修复了一个计费路由事故:openclaw doctor --fix(以及每次更新,因为更新会跑 Doctor)会把并存的 claude-cli/* 订阅路由悄悄改写成 anthropic/* API 路由。现在这类配置会保留原样,Doctor 只打印一条警告指出是哪条 pin 阻止了改写。
  • PR #191117 让模型被"不可用的指定账号"拦下时,错误信息能说清是哪个账号不可用、该恢复还是改选账号,而不是笼统报"Claude CLI 登录失败"。
  • PR #191171 让使用隐式 AWS SDK 凭据的 Bedrock Converse 检查能够被认定为有效,从而通过 Ask OpenClaw 的连通性校验;缺失模型事实、凭据变化或不可观测的情况仍然失败关闭。
  • PR #191479 修复了本地 Ollama 主机名可用聊天却用不了记忆嵌入的问题:只要配置的主机名解析到回环或容器网关地址,嵌入请求现在能复用聊天侧的私网策略正常发出,同时保留既有的 SSRF 校验与禁止跨主机重定向的约束。

会话与 Gateway:重复读取、重复拷贝和几处秒级冻结

会话层是本轮改动量最大的一块,核心思路是"同一份事实只准备一次"。

  • PR #191100(45 个文件)处理了会话 transcript 被重复读取和重复水合的问题。现在相同的未变更会话可以共享在途的有界请求,冷记账由数据库侧的有界读取一次性给出,重复会话读取的 SQLite I/O 与 CPU 占用都有可观察的下降,且 transcript 与记账结果保持一致。
  • PR #191099 让每个会话的工具检查点不再重复拷贝已发布的 schema 字符串与容器,同时保住了后续工具 pin 比对所依赖的 schema 身份。工具目录大的会话因此少保留大量重复元数据,Provider 侧的工具定义与 transcript 字节不变。
  • PR #191404 修掉了一个影响体感明显的问题:Gateway 启动后第一次 /v1/chat/completions 调用(或插件配置重载后)需要新建插件注册表,走的是同步加载器,整个宏任务里 WebSocket 客户端、渠道轮询和实时语音全部冻结数秒。现在这条路径改用已有的增量异步加载器,并在插件步骤之间让出事件循环。
  • PR #191251 处理了"干净关闭却要等 systemd 超时"的尴尬:某些子系统泄漏句柄时,Gateway 会打印"干净关闭完成"却一直活到 TimeoutStopSec(报告方为 330 秒)被 SIGKILL,systemd 记为 Failed with result 'timeout' 并触发 OnFailure。现在即使有句柄泄漏也能在约 10 秒内结束并被记为成功停止,泄漏的资源类型会打印到 stderr 便于定位。
  • PR #191146 修掉了一个上下文丢失回归:上一轮对话超出字节上限时,整轮对齐可能只剩下新写入的用户提示,而运行器会在推理前把它移除,于是下一次请求静默丢失全部历史。现在改用既有的原子帧回退路径,字节与事件上限、工具调用归属和强制摘要逻辑都不变。
  • PR #191161 修复了 X 活动流在提及处理变慢时内存无界增长的问题。原先的行数上限管不到已解析的批次,现在读取器会在本地队列达到阈值时暂停、下游消化后恢复,用背压替代无限堆积。
  • PR #191011 属于性能类改动:大规模工作区检查点原本在 Gateway 主线程上重建完整的清单比较映射,而清单 worker 其实已经比对了同样的输入,现在比对结果、变更路径与 Git 资格集合被直接复用,主线程的协调开销明显下降,存储格式与配置均无变化。

与调度相关的另一处修复同样影响面很大。PR #191422 处理了"长时间运行的 Cron 任务被重启打断后,调度器再也起不来"的故障:启动恢复会去解码该任务全部保留运行的完整详情和摘要,只为了挑一个候选,而真实 Gateway 上一个每小时任务保留了约 580 MB 的运行负载,超过共享 SQLite worker 的 512 MB 堆上限,恢复直接以 ERR_WORKER_OUT_OF_MEMORY 收场,cron 每次开机都记 "failed to start"。现在改为从已有的有界规划读取中挑选候选,计划任务重启后可以自动恢复运行。

安全与配置面

  • PR #191318 修复了 openclaw config set 的密钥泄漏:当 --expect-current-json 出现在配置路径和值之前或中间时,新写入的密钥会以明文进入本地审计历史。现在无论选项位置如何,密钥类配置路径的新值都会被脱敏,普通值仍可读,已有审计记录不变。
  • PR #191389 让 --provider-env、MCP --env 与 --header 拒绝 __proto__、constructor、prototype 这类保留键。它们此前会在写配置时静默消失,属于典型的原型污染入口,现在会在保存前给出明确报错。
  • PR #191458 收紧了 Discord 的私网边界:当 Gateway 开启浏览器私网访问时,Discord 附件与贴纸下载原本会接受指向私网或链路本地地址的 CDN 目标。现在 Discord 的 CDN 下载不再继承浏览器的私网放行标志,必须在 browser.ssrfPolicy.allowedHostnames 中显式声明可信主机名,公网 CDN 与显式启用的 IPv6 fake-IP 代理不受影响。
  • PR #191132 修正了 Beam 插件的权限语义:受限 Visitor 上传内容后打开自己的链接,会因为前端先请求共享目录而报缺 operator.read。现在受验证的 Visitor 只能读取自己保留的快照,链接仍然需要认证而不是公开,外部与无归属记录一律失败关闭。

控制台与渠道体验

这一批以可用性和反馈清晰度为主:PR #191285 让 ClawHub 技能安装结果直接显示在技能详情弹窗内,成功后按钮变为带勾的"已安装",失败则保留可重试状态,而不是把提示留在被遮挡的页面背后;PR #191136 让自动化提示中的 Markdown 在详情视图里渲染出标题与列表预览;PR #191060 在会话详情里隐藏只有自己一个人的"People"分区,多人协作场景的归属信息仍然保留。

渠道侧,PR #191223 让 Slack 历史与话题读取容忍模型多写的一对双引号,从而正确选中请求的时间区间;PR #191302 修复了 Microsoft Teams 私聊中的审批卡片在别处做出决定后仍显示待处理按钮的问题。此外 PR #191297 让 Control UI 在 Gateway 拒绝 operator 访问时停止重试并给出"换用户登录或申请授权"的指引,而不是在后台持续冲击被拒绝的端点。开发者体验方面,还有直接落在主干的一次改动:提交 f33f9c1 重新梳理了工作区仓库在新建会话入口中的查找路径,让本地项目更容易被找到。

整体基调是"把运维负担从用户身上移走":更新不再需要手工 repair,调度器不再因为一次中断就永久停摆,取消模型轮次终于能立刻生效,而涉及凭据与私网访问的边界被收得更紧。

常用链接

 
内容管家

发表评论