openclaw 小龙虾 2026.5.4 更新说明
📊 统计概览
本次更新包含大量新功能、性能优化和 Bug 修复,涵盖 Google Meet、Control UI、插件系统、渠道支持等多个领域,是 5 月初的一次大型迭代。
🆕 重点新功能
Google Meet / 语音通话
- Twilio 拨入增强: Twilio 拨入用户通过 Gemini 实时语音桥接进行对话,支持节奏化音频流、背压感知缓冲、打断队列清理,在实时对话中不再回退到 TwiML,大幅提升 Meet 语音代理的响应速度。(#77064) @scoootscooob
- Google Meet 模式重构:
mode: "agent"成为默认的 Chrome talk-back 路径(使用实时转录输入 + 常规 TTS 语音输出),mode: "bidi"保留直接双向模型对话,mode: "realtime"作为 agent 模式的兼容别名 - Chrome 音频缓冲: 新增
chrome.audioBufferBytes配置,默认缓冲从 8192 字节降至 4096 字节,降低 Chrome talk-back 延迟 - 实时策略拆分: 将实时提供者配置拆分为 agent 模式转录和 bidi 模式语音提供者,doctor --fix 可自动迁移旧版 Gemini Live bidi 配置
- 静默加入支持:
realtime.introMessage: ""让实时 Chrome 加入时保持静默 - Mic 等待优化: 加入期间持续等待 Meet 麦克风解除静音,不再因短暂静音报告而跳过 talk-back
- Twilio DTMF 延迟: 在插件清单中暴露
voiceCall.postDtmfSpeechDelayMs配置项
Control UI 用户界面
- 仪表盘导航优化: 在面包屑中显示当前活跃的 agent 名称,不添加会话 key,保持非聊天视图的导航清晰 (#77048)
- Cron 任务管理: New Job 侧边栏支持折叠,让任务列表获得更多空间
- 会话选择器: 新增 agent 优先过滤器,支持手机/平板/桌面宽度自适应
- 重复消息折叠: 连续的重复文本消息合并为一个气泡并显示计数,让心跳确认保持紧凑
- Talk 功能优化: 失败的 Talk 启动错误可关闭并清除状态;失败后点击重新开始,无需先停止旧会话
- 媒体安全: 生成短期限时票据用于助手媒体获取,在聊天图片 URL 中使用票据化 URL 替代长期 auth token (#70830, #77097) @hclsys
- Dream Diary 渲染: 日记内容通过经过清理的 Markdown 管道渲染,加粗/斜体/标题不再显示为源文本 (#62413)
- 工具输出渲染: 以文本块数组到达的工具结果可正常渲染,展开的工具输出支持滚动 (#77054)
插件系统与 SDK
- 插件 SDK: 新增
registerIfAbsent原子键值存储去重声明,返回插件是否成功声明的 key 而不覆盖已有值 @amknight - SessionEntry 槽投影: 插件可拥有 SessionEntry 槽投影和受信任策略的会话扩展读取 (#75609) @100yenadmin
- before_agent_finalize 重试: 插件请求一次额外模型轮次的有限重试指令 @100yenadmin
- 插件技能发布: 插件声明的技能通过生成的插件技能目录发布 (~/.openclaw/plugin-skills/),agent 基于文件的发现路径可找到插件 SKILL.md (#77296, #77328) @zhangguiping-xydt
安全增强
- Windows 安全加固:
SystemRoot/WINDIR环境变量通过 Windows 安装根目录验证器校验,防止工作区 .env 覆盖重定向系统命令 (#74458) @mmapsLOCALAPPDATA从工作区 .env 中屏蔽,仅信任进程本地值 (#77470) @drobison00.cmd/.bat包装器通过 Windows 安装根目录解析器路由,而非process.env.ComSpec(#77472) @drobison00
- 浏览器 SSRF: 在标签级别调试/导出/读取操作前,强制执行当前 URL 导航策略 (#75731) @eleqtrizit
- 代理调试: 托管代理模式下禁用调试代理直接上游转发和 CONNECT 隧道,除非显式设置
OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1@jesse-merhi, @mjamiv
⚡ 性能优化
Gateway 启动
- 将模型目录测试助手、会话查找代码、QR 配对助手、TypeBox 内存工具 schema 构建移出热启动导入路径,降低内存压力
- 推迟非就绪态 sidecar 到就绪信号之后,避免热路径渠道插件 barrel 导入
- 对原生可加载插件启动路径避免导入 jiti,编译插件不走源码转换加载器
- 缓存模型目录和清单契约读取者重用当前工作空间的插件元数据快照 (#77519, #77532)
会话管理
- gateway/sessions:记忆化推理选项枚举,跳过未使用的成本回退检查,减少大容量多 agent 存储的逐行开销 (#76931)
- 限制
sessions.listRPC 响应并报告截断元数据,防止 Slack 大量存储导致无限的行构建 (#77062) - 插件工具注册和运行时配置获取器使用仅配置快照,避免昂贵的密钥快照克隆 (#76295)
工具和 Agent
- Agent/tools:在构建可选的 PDF/媒体工具工厂前应用有效的工具拒绝列表 (#76997)
- pi-embedded-runner 新增压缩后循环守卫(post-compaction loop guard):自动压缩重试后,相同 (tool, args, result) 三元组出现 3 次则中止 (#77474) @efpiva
- Agent 轨迹捕获限界并 yield 队列化边车写入,超大轨迹停止记录而非垄断 Gateway 清理 (#77124) @loyur
诊断与监控
- Gateway/diagnostics:加入启动阶段跨度、活跃工作标签、陈旧终端桥标记、默认同步 I/O 追踪,便于定位慢速 Gateway 问题
- 低基数 OTEL 属性和 Prometheus 交付标签,省略原始聊天/消息 ID 从跨度中
🛠️ 渠道更新
Slack
streaming.progress.render: "rich"— Block Kit 结构化进度草稿 (@vincentkoc)- 保持最新的丰富进度行,当 Block Kit 限制截断长进度草稿时
- 子 agent 保持父消息在同一 Slack 线程中发送 @bek91
- 记录线程参与以支持未提及回复绕过提及门控 (#77648) @bek91
Discord
- 启动监控不等待 bot/application 探测,WSL2 慢速 REST 路径也能上线 (#77103) @Suited78
- 优先 IPv4 连接,防止 IPv4-only 网络卡在 Gateway READY 之前 (#77398) @Beandon13
- 新增降级传输和事件循环饥饿信号到状态检查 (#76327) @joshavant
- 回复失败视为失败轮次而非已送达 (#77520) @Patrick-Erichsen
Telegram
- 支持插件拥有的数字论坛主题目标 (#77137) @richardmqq
- 非图片/混合附件使用 MIME 元数据占位符,不再误报
<media:image>(#69793) @aspalagin - 流式复用活动预览作为长文本首块,消除瞬态额外气泡 (#77137) @vincentkoc
- 清理工具专属草稿预览,临时状态气泡不再滞留 @BunsDev
- 跨包更新保持回复调度稳定 @BunsDev
- 交互式回复按钮在审批消息中显示内联键盘 (#76238) @keshavbotagent
- 支持频道/新闻通讯
@newsletter出站消息目标,而非 DM 路由 (#13417) @vincentkoc, @agentz-manfred - 设置和配对允许列表规范化 WhatsApp 纯数字电话 ID @vincentkoc
- 登录 QR 通过运行时路由,
channels login不丢失 QR (#76213) @dougvk
Matrix
- 流式进度线在 draft 模式下作用域正确 @vincentkoc
- 审批反应目标绑定后发布选项反应 @vincentkoc
- 多项 QA 改进:进度替换事件验证、审批场景覆盖、反应回显等待 @vincentkoc
Feishu
- 使用共享通道进度格式化器的流式卡片工具状态行 @vincentkoc
- doctor/plugins 跳过渠道派生官方插件安装,当 openclaw-lark 已处理 channels.feishu 时 (#76623) @fuyizheng3120
Mattermost
- 模型选择器仅改变会话模型,运行时切换需
/oc_model@vincentkoc - 使用共享进度草案格式化器,支持原始 command/detail 输出 @vincentkoc
QQBot
/bot-*命令和作用域限制在 QQBot 通道内 @vincentkoc- 保持私有命令不出现在 framework surface 上 @pgondhi987
☁️ 提供者更新
OpenAI / Codex
- Codex 音频转录在运行时和清单元数据中广告 @vincentkoc
- 默认 OpenAI Responses 模型使用 SSE 传输而非 WebSocket 自动选择 @vincentkoc
- Codex 实验性 API 桥兼容最新 app-server 协议
- Codex OAuth 进度 spinner 在手动粘贴提示前停止
- sanitize Codex app-server 命令回读、失败回复、审批提示、用户输入提示 @vincentkoc
- 跨包更新修复 Codex peer link 恢复 (#77544) @ProspectOre
- 失效的 OAuth 账户自动重定向到健康 relogin 配置 @BunsDev
OpenRouter
- 新增响应缓存参数(
X-OpenRouter-Cache、X-OpenRouter-Cache-TTL、cache-clear)仅在验证路由上发送 @vincentkoc - 扩展应用归属类别:编码、编程、写作、聊天、个人-agent @vincentkoc
- DeepSeek V4
reasoning_effort映射:将过期 max thinking 覆盖映射到 xhigh,修复 openrouter/deepseek/deepseek-v4-pro 的 400 错误 (#77350, #77423)
DeepSeek
- V4 xhigh 和 max thinking 级别通过轻量提供者策略表面暴露,当运行时插件注册表不活跃时,Control UI 的
/think选择器仍显示最大推理选项 (#77139) @bittoby
🐛 重要 Bug 修复
Gateway / 启动
- Windows loopback 修复: 默认 loopback Gateway 监听器仅绑定到
127.0.0.1,防止 libuv 双栈 ::1 行为阻塞 localhost HTTP 请求 (#69701) @SARAMALI15792 - 容器安全: Docker compose 中固定容器端
OPENCLAW_CONFIG_DIR和OPENCLAW_WORKSPACE_DIR,防止宿主路径泄露到运行时代码 (#77436) @lonexreb - 插件提供者修复: 加载拥有显式图片/视频/音频生成默认值的提供者插件,修复 Gateway 重启后生成工具不可用 (#77244) @buyuangtampan, @Nikoxx99
- Canvas 日志修复: 仅在 HTTP 服务器绑定后记录 canvas 主机挂载
- 日志路径修复: 展开
logging.file中的~,防止家目录相对日志路径的启动崩溃 (#73587)
Agent 核心
- 缓存恢复: 保持每轮运行时上下文在普通聊天系统提示之外,恢复聊天延续时的 prompt-cache 重用 (#77431) @Udjin79
- 聊天顺序修复: 清除活动回复运行守卫后再排空同会话后续轮次,
chat.send连续调用不再触发ReplyRunAlreadyActiveError(#77485) @bws14email - 媒体去重: 防止生成的图片/视频/音频附件在流式回复文本在最终
MEDIA:指令前到达时发送两次 - 子 agent 修复: 检测前缀完成 announce 回复,回退到捕获的子结果,防止长报告静默丢失 (#76412) @inxaos, @davemorin
- 转录重试修复: 仅在入站用户轮次实际持久化后重试上下文溢出压缩 (#76424, #77033)
- BOOTSTRAP.md 修复: 保留挂起的 BOOTSTRAP.md 和截断通知在系统提示 Project Context 中 (#76946)
Doctor / 维护
- 保留
auth.profiles元数据在 doctor --fix 剥离过期密钥字段时 (#77400) - doctor --fix 自动安装配置但未加载的官方外部插件 (#77155) @hclsys
- 清除自动创建的陈旧会话路由状态 (#68615)
- 移除陈旧的托管 npm 插件影子条目从 package lock 和 node_modules
- 不再将
plugins.allow条目视为配置插件进行缺失插件修复 @vincentkoc
CLI / 更新
- 禁用并跳过包更新插件同步失败的插件,一个损坏的插件不再导致整个更新失败 @vincentkoc
- 使用绝对 POSIX npm 脚本 shell,受限 PATH 环境也能运行依赖生命周期脚本 (#77530) @PeterTremonti
- sessions 输出默认限制最新 100 行,添加
--limit <n|all>和 JSON 分页元数据 (#77500) @Kaotic3 - 包更新后续进程显式写出完成结果后退出,Windows 打包升级不再挂起 @vincentkoc
- 从安装配置解析本地 Gateway 探测认证,VPS Gateway 更新后不再误报端口冲突 @vincentkoc
浏览器 / Web
- SSRF 检查在已有会话截图前强制执行 (#75731) @eleqtrizit
- web search 尊重
tools.web.search.enabled: false的延迟绑定 @vincentkoc - web fetch 缓存按选定的提供者作用域,配置重新加载不会重用另一提供者的缓存回退 @vincentkoc
Windows 特定
- 使用
%TEMP%\openclaw-<uid>替代C:\tmp\openclaw作为临时目录 (#60713) @juan-flores077 - 以读/写模式打开保存的附件临时文件再进行 fsync,解决 WebChat 和 chat.send 媒体卸载的 EPERM 错误 (#76593) @qq230849622-a11y
- 接受驱动器绝对路径的 Docker bind 源 (#42174) @6607changchun
- 显示 Git 安装提示当 npm 插件安装失败时,文档说明 WhatsApp 插件的 Git-on-PATH 要求
🧪 QA / 测试增强
- Mantis Slack 桌面烟雾测试:
pnpm openclaw qa mantis slack-desktop-smoke在 Crabbox VNC 桌面中运行 @vincentkoc - Codex 测试平台增强: 添加 Docker/Testbox 诊断、认证预检、缓存挂载修复 @vincentkoc
- Matrix QA: 进度替换验证、审批场景、反应回显、重试超时 @vincentkoc
- Slack QA: 结构化进度草稿辅助的 SDK mock 更新 @vincentkoc
- 发布验证: 允许聚焦 QA 重跑选择 Matrix 和 Telegram 而不运行 Slack @vincentkoc
- 跨 OS TypeScript: Windows 安全 Node/npm shim 安装 @vincentkoc
📝 杂项
- Docs: 明确 IRC 使用原始 TCP/TLS 套接字,托管代理转发路由之外,直接 IRC 出口需显式批准 @jesse-merhi
- Gateway/status: Linux 托管 Gateway 服务标记为 systemd user,明确用户作用域 @vincentkoc
- Gateway/restart: 通过 argv 验证监听器 PID,当 lsof 只报告 Node 进程名时,清理能找到 macOS cnode 监听器 (#70664)
- Gateway/validation: 隔离 Gateway 服务器验证文件,减少主分支 CI 误报 @amknight
- 模型切换: 包含精确的 additive allowlist 修复命令,Telegram 模型选择器说明仅改变会话模型 @vincentkoc
- Web fetch 延迟绑定: 匹配 web_search,长期工具不再使用过时设置 @vincentkoc
本文件由 芙宁娜 🎭 整理自原始英文变更日志
https://www.fireself.cn/post/ysC5nihd