
OpenClaw 24h 更新快报(2026-11-09):上下文压缩、Subagent 等待、浏览器运行时
过去一天 OpenClaw 主仓库合入了超过百个 PR,其中真正影响日常使用的集中在三处:一是经由 Gateway 方法触发的回合不再按 200k 的默认预算提前压缩大窗口会话;二是 Subagent 的消息等待在请求方结束后会正确关闭,重启后仍存活的等待不会被误杀;三是托管浏览器在继承 jemalloc 预加载时会崩溃的问题被修掉,安装脚本在没有 Node 的机器上用 git 方式安装也不再失败。
除此之外,Signal 媒体发送的超时误判、OpenClaw ID 之外的 Matrix SDK 弃用告警、控制台会话刷新后“对话消失”等一批体验问题在同一窗口内得到处理。下面按主题梳理这些改动的原因和影响。
上下文与模型能力
PR #195307 修的是一个容易被忽略但代价很高的行为:当回合经由 Gateway 的 agent 方法到达时(典型场景是 Subagent 的完成通知回传给父会话),会话维护逻辑会读到模型的上下文窗口,但在某些路径下仍按 200k 的默认预算判定,于是明明模型支持更大窗口,会话却在远未到上限时被压缩。
影响是实打实的:每次误压缩都会额外产生一次摘要模型请求,父会话的完整上下文被替换成摘要,同时压缩前的记忆 flush 也按 200k 预算执行了一次。修复后这条路径改为读取 follow-up run 的模型目录中的窗口大小,Subagent 唤醒、完成通知等 Gateway 回合不再触发无谓的压缩。对使用长上下文模型做多轮长任务的团队,这直接减少了 token 消耗和上下文损失。
回复链路本身也修了两个会“静默丢消息”的缺陷。PR #195329 处理的是插件与渠道适配器传入 NaN 分块上限的场景:由于所有针对 NaN 的比较都为假,Markdown 分块器会返回零个分块,整条外发消息被丢弃;而 chunkByNewline 则会在每行前插入空块。修复后这类非法上限会被兜底处理,公开的 openclaw/plugin-sdk/reply-chunking 接口不再吞掉整条回复。
另外两个独立提交补上了 Ollama 与推理可见场景的缺口。465c110 让 Ollama API 返回空 turn 时可以重试,而不是直接判定为失败;4a5dad7 修复了工具调用之后、推理内容可见时最终答复缺失的问题。这两条都直接影响使用本地模型或开启可见推理的用户能否稳定拿到完整回答。
Agent 调度与 Subagent 生命周期
PR #195387 处理的是 Subagent 等待的两个方向性问题。一方面,处在 sessions_yield waitFor:"message" 的 Subagent 在请求方已经结束后会一直挂着,占用活跃生命周期;另一方面,Gateway 重启时可能把请求方仍然存活的等待一并干掉。
修复后,被遗弃的消息等待会带着明确的结果关闭并释放生命周期;仍然有效的等待在重启后可以存活,不需要额外消耗一次模型调用,请求方的新消息能继续驱动子任务,子任务完成通知也能回到请求方。同时,活跃等待不再受 cleanup:"delete" 过期清理的影响。对于把 Subagent 当作长期协作单元使用的编排场景,这条修复消除了“子代理悬挂”和“重启后任务断线”两类长期困扰。
配套的网关侧改动 0d4c07f 给每个 utility fallback 分配了独立的 observer deadline,避免多个 fallback 共用一个兜底超时而相互干扰。错误提示方面,86cb0bd 让失败运行不再隐藏模型提供方的安全策略说明——过去这类拒绝原因会被笼统的“运行失败”覆盖,用户看不到究竟是哪条策略拦截。
安全与稳定性
PR #195398 修复升级后 Gateway 启动失败的问题:webhook 完成读取前若恰好遇到外部持有的共享状态 schema 租约,进程会直接启动失败。修复后启动阶段改为等待临时性的 schema 准入,而不是立即失败;真正处于离线维护、取消流程或数据库身份过期的场景仍然拒绝启动。需要注意,按维护者在 2026 年 11 月 8 日的方向,这个补丁被明确推迟到下一个 beta,不应合入当前的 2026.11.5-beta.2。
PR #195406 修复 openclaw update repair 在 macOS 上可能留下未加载的 LaunchAgent:恢复阶段若发现 Gateway 监听进程不受 launchd 监督&管理,就不会重新注册对应的 LaunchAgent。修复后,重启前检查失败也会触发 LaunchAgent 重新加载,端口占用的原始错误仍然可见,作业注册给 launchd 自行重试,恢复路径不会去接管或向未知监听进程发信号。维护者也标注了这仍是有边界的修复,而非对原事件的端到端定论。
渠道集成与通知
PR #195308 修复 Signal 媒体发送的重复投递问题:signal-cli 在上传完成后才返回 send 结果,而 sendMessageSignal 未设置 timeoutMs,导致媒体发送沿用 10 秒的默认 RPC 截止时间。上传稍慢就被判定为失败,随后无论是 Agent、用户还是脚本重试,都会给收件人发去第二份文件。修复后,带附件且未显式指定超时的发送会按 30 秒基础值加上最大允许附件的上传时间计算截止时间。渠道插件作者如果自己传了 timeoutMs,则不受影响。
PR #195357 处理了沙箱镜像不可用时的重复校验告警:镜像在会话中途变得不可用后,后续每次模型请求都会重新尝试读取它。修复后首次失败仍保留原有的重发提示并记录该次省略,之后的请求不再重复读取,其他附件不受影响,需要重试时在新一轮对话里重新发送图片即可。
噪声控制方面,c71a8b6 让 status、channels list 和 doctor 不再刷出 Matrix SDK 的弃用告警——这些命令每次执行都输出同类告警,很容易淹没真正需要关注的输出。
控制台与开发者体验
Web 控制台这一轮改动密度很高。PR #195333 解决的是刷新工具调用密集的会话后对话几乎空白的问题:浏览器只保留最近 80 条历史记录,而这些记录大多是工具活动时,可读的开头就落到了 “Show earlier” 之后。修复后,短会话恢复时会自动取回缺失的早期消息,长会话仍然按滚动意图按需加载,无需配置变更或数据迁移。
PR #195354 把普通子会话(包含 ACP 编码会话)从 Details 面板中移除,因为它们在侧边栏已经可见;现在 Details 只显示原生 Subagent,没有原生条目时整个分区不再出现。PR #195348 修复了旧缓存侧边栏覆盖用户已选 Agent 的问题,缓存视图与当前选择不兼容时会被跳过而不是改写选择。PR #195356 则让技能库编辑器在输入法组合未结束时忽略 Ctrl/Command+Enter,避免中文输入过程中的误保存。
命令行方面,PR #195380 修复了 PowerShell 补全在光标位于参数中间时失效的问题,例如 --shell f|xsh 无法补出 fish;修复后命令名、选项名和选项值都可以在编辑命令中部时补全,含引号的值和短选项组同样适用。
数据层也有两处值得注意。PR #195326 让浏览器快照查询在页面文本与查询词采用不同 Unicode 组合形式时仍能匹配到同一个按钮,AI 快照与 ARIA 快照都适用;重音符号依然有意义,不等于不区分重音的模糊匹配。PR #195335 修复了 memory-wiki 生成链接时把页面标题中的 *draft*、&、<draft> 之类的行内标记当作 Markdown 解析的问题,这类标题现在会按字面文本呈现,链接目标与源页面内容不变。
构建、运行时与兼容性
PR #195331 解决的是托管浏览器在 jemalloc 环境下启动即崩溃的问题:Gateway 继承的 LD_PRELOAD=libjemalloc.so.2 与 MALLOC_CONF=background_thread:true,... 会让 Chromium 的 zygote 初始化失败,随后是 “GPU process launch failed: error_code=1002” 和 “GPU process isn't usable. Goodbye.”,浏览器最终以 SIGABRT 退出。修复后托管 Chrome 会在启动前移除 MALLOC_CONF 以及 LD_PRELOAD 中的 jemalloc 条目,同时不再在 CDP 命令真正可用之前就报告“已启动”,启动失败的 stderr 也会保留下来,Agent 拿到的是真实的失败原因而不是笼统超时。
PR #195382 修复安装脚本在未安装 Node 的机器上使用 --install-method git 必然失败的问题:clone_git_checkout_transactionally 用 node - 发布暂存克隆,但 git 路径要到后面 ensure_node 阶段才安装 Node,而后者需要检出目录里的 engines 字段,于是形成死循环——克隆成功、发布时提示找不到 Node、暂存检出被删除、重试再下载一遍。修复后 git 安装与 npm 路径一致,先发布检出再补齐 Node。
PR #195413 优化了会话分支极多的仓库里的 GitHub 发布速度:在数千个会话分支的仓库中,拉取一个小提交会协商大量无关的会话历史。优化后,合成的大仓库基准里提交准备耗时从 578 毫秒降到 317 毫秒,缺失文件内容的准备耗时从 1053 毫秒降到 693 毫秒,祖先关系、树结构、请求内容、仓库鉴权选择和浅克隆边界均保持不变,不需要迁移、配置或运维操作。
小结
这一天的主线是让上下文和子任务的生命周期按模型与运行时的真实情况来走:压缩不再提前触发,Subagent 等待能被正确关停和恢复,浏览器与安装脚本也不再依赖隐含的环境假设,属于底层可靠性优先的一轮改动。


评论