
OpenClaw 24h 更新快报(2026-08-31):插件策略缓存、心跳调度、Doctor 权限
过去24小时,openclaw/openclaw 仓库合并了大量更新,主要集中在三个方向:Gateway 层插件策略的全面重构解决了长期存在的重复计算问题;Cron 心跳任务的结果回报终于报告真实结果而非仅报"已发出";CLI 与 Doctor 的权限边界在 `--no-restart` 场景下得到明确。
Gateway 插件模型策略:重构缓存,复用声明
PR #134419 是本周期最大的一次代码重构。团队发现:在并发 Gateway 历史读取、会话列表更新和 Agent 准备阶段,插件声明中的模型规范化策略(model-normalization policy)被反复重建,而这些策略在进程生命周期内完全稳定。重复计算累积在事件循环中,形成可测量的额外负担。
修复方案是将策略的准备与发布集中到插件元数据快照持有者,随后将选中的快照传递到模型选择、目录构建和运行时兜底逻辑中。空视图和收窄视图均保持权威性;调用方持有的数组保留标量读取的即时性;已废弃的 SDK 目录输入仍然兼容旧版 owner-map 形状。
生产代码净减少7行(+143/-150),跨越33个文件。性能基准测试显示,在64个插件声明、2,000次混合查询场景下,策略查找从基准的10.91 ms降至0.35 ms——约31倍改善。不过项目组在 PR 中明确说明,这是受控微基准,不代表端到端 Gateway 延迟一定等比缩减。
Cron 心跳任务:结果终于报告真实结果
PR #134464 修复了一个长期存在的用户体验问题:心跳 Cron 任务在心跳代理工作失败时,历史记录仍显示为"成功"——因为任务在延迟的心跳代理 turn 被接受时就已标记完成。
修复后,心跳任务的完成核算现在等代理工作达到终态结果才关闭,报告内容映射到现有 Cron 结果词汇:失败代理回报 `error`/`failed`,成功代理回报 `ok`/`succeeded`,禁用心跳回报 `skipped`/`failed`。该实现复用现有的10分钟 Cron 看门狗和持久化运行回执恢复机制,未引入新协议状态、持久化模式变更或无限等待循环。
Doctor 与 CLI:明确 `--no-restart` 场景下的权限边界
PR #134470 修复了一个边界条件错误:当 updater 以 `--no-restart` 参数运行时,本应保持 Gateway 处于运行状态,但后续调用的 Doctor 修复流程却自行停止了并重启了同一服务——因为定义修复权限被误认为包含生命周期接管权限。
修复后,当 updater 持有激活权时,Doctor 必须获得目标托管服务已离线的肯定原生证据,才执行修复操作;仍在运行或无法验证的服务直接报错,不再停止或将其视为修复成功。普通 Doctor 运行和没有显式激活策略的旧版父进程保持现有停止-保留-修复-重启顺序。
其他值得注意的变化
PR #134440 为 `update` 命令补全了 `dev` channel 的路由逻辑:已存储 `update.channel: dev` 的包安装现在正确切换到 Git 更新流程;一次性 `--tag` 仍局限在包作用域,而显式 `--channel dev` 优先于存储值。
PR #134448 改进了 Worker 恢复期间的检查范围与清理逻辑,确保环境恢复只作用于请求的环境,而非对无关 Worker 触发额外检查。
PR #134426 修复了 `migrate-hermes` 插件的源配置保留问题,确保迁移后源设置和激活策略不被覆盖。
整体来看,本周期的工程重点在于"清理":减少重复计算、修正行为边界、让错误状态可被观测,而非引入新功能。对生产环境的稳定性有直接正面影响。


评论