OpenClaw 更新分析 — 2026-04-15
概览
过去 24 小时共 30 个 commits,活跃度非常高。重点方向:
- Telegram 频道多项修复(命令同步、原生默认值、二进制载荷清理)
- BlueBubbles 新功能(重启后补回漏收消息)
- OpenRouter Qwen3 推理流修复
- 自托管 STT 的 allowPrivateNetwork 回归修复
- Memory 防止 dreaming 自我消化
- Cron agentTurn 崩溃修复
- Matrix 通道 QA 大规模重构
- 新维护者加入(Mason Huang)
重要变更(逐条分析)
🔥 feat: BlueBubbles 重启后补回漏收消息 (`6f1d321`)
模块: extensions/bluebubbles
影响: 解决了 BlueBubbles (iMessage) 通道的长期痛点 — gateway 重启期间 webhook 丢失的消息现在会自动补回。新增 catchup.ts,启动时查询 BB Server 获取断档期间的消息并重新处理,支持游标持久化、去重和边界控制。
🔥 fix: Cron agentTurn 崩溃 (`90c06c0`)
模块: Gateway / Cron
影响: cron 任务使用 agentTurn 时,event.content 为 undefined 导致 TypeError 崩溃。修复了 parseFaceTags 和 filterInternalMarkers 对 falsy 输入的处理。如果你用 cron 定时任务,这个修复很重要。
🔥 fix: OpenRouter Qwen3 reasoning_details 流 (`e0bf756`)
模块: OpenRouter provider
影响: Qwen3 模型通过 OpenRouter 使用时,reasoning_details 字段未被识别,导致 payloads=0 和不完整回合错误。修复后正确处理推理内容和工具调用。直接影响到通过 OpenRouter 使用 Qwen3 的用户。
🔥 fix: 自托管 STT 的 allowPrivateNetwork 回归 (`0c0463b`)
模块: Audio / Media understanding
影响: v2026.4.14 引入的回归 — 自托管 STT(语音转文字)端点的 allowPrivateNetwork 配置被静默丢弃,导致无法访问内网 STT 服务。已修复 provider 级别配置的合并逻辑。
fix: Telegram 命令同步改为进程级缓存 (`b1d03b4`)
模块: Telegram channel
影响: gateway 重启后 Telegram bot 命令菜单消失。原因是命令哈希缓存持久化到磁盘,重启后匹配到旧哈希就跳过注册。改为进程级 Map 缓存,每次重启都重新注册。
fix: Telegram 原生 auto 默认值恢复 (`ff4edd0`)
模块: Telegram config
影响: Telegram 原生命令(auto 模式)的默认值被意外移除,现已恢复。
fix: Telegram 二进制载荷清理 (`734bb9c`)
模块: Telegram documents
影响: 用户发送的二进制文件内容(如图片原始字节)不再被塞进 prompt,防止 token 膨胀。对经常通过 Telegram 发文件的用户有帮助。
fix: Onboarding 通道选择崩溃 (`2e2cbdd`)
模块: CLI / Onboarding
影响: 全局安装的 CLI 在通道选择步骤崩溃。修复了 bundled channel catalog 的路径解析。
feat: Secret scanning skill 支持 discussion_comment (`9727ed4`)
模块: Skills
影响: GitHub secret scanning 技能现在能扫描 discussion 评论中的泄露密钥。
memory: 阻止 dreaming 自我消化 (`0c4e0d7`)
模块: Memory system
影响: 防止 memory dreaming 过程中将自身生成的内容重新消化,避免记忆污染循环。
Reply: 保留分阶段 block 元数据 (`8db4bb7`)
模块: Reply system
影响: 分阶段生成的回复现在正确保留 block 元数据,改善富文本回复的完整性。
fix: 媒体 private-network 请求类型 (`5ca65c8`) + 清理陈旧 import (`0bc4472`)
模块: Media
影响: 类型修正和代码清理,确保媒体请求的 private-network flag 正确传递。
架构观察
1. Matrix 通道大规模 QA 重构: Gustavo 一人贡献了 8+ 个 QA commits,涵盖事件模块提取、场景拆分、配置覆盖、contract runtime 分离等。说明 Matrix 通道正在积极开发中,可能即将发布重要更新。
2. Telegram 集中修复: 3 个独立修复指向 Telegram 通道近期有多处回归,团队在积极清理。
3. BlueBubbles 走向成熟: catchup 机制(22 个测试、411/411 通过)表明 iMessage 集成正在从"能用"走向"可靠"。
4. 社区贡献活跃: 多个 commits 标注了外部贡献者(@bladin, @jhsmith409, @nightq, @kashevk0),社区生态健康。
5. 新维护者: Mason Huang 加入维护者团队,同时贡献了 secret scanning 功能。
对我们的影响
- 直接相关: Cron 崩溃修复 — 我们的定时任务(日报、提醒)应该更稳定了
- 可能相关: Telegram 修复 — 如果通过 Telegram 使用 OpenClaw,命令菜单和文件处理更可靠
- 值得关注: Qwen3 推理修复 — 如果切换到 Qwen3 模型,通过 OpenRouter 使用会更稳定
- 无直接影响: BlueBubbles(iMessage)、Matrix、secret scanning 暂不涉及我们的部署
原始 commits
| SHA | 时间 | 作者 | 描述 |
|---|---|---|---|
| 0aea998 | 04:36 | Mason Huang | Add Mason Huang as maintainer |
| 7d7dc75 | 04:16 | Gustavo M. Santana | QA: speed up Matrix live lane |
| 2e2cbdd | 04:08 | Roger Chien | fix(onboard): crash at channel selection on globally installed CLI |
| cd3e6e1 | 04:03 | Peter Steinberger | build: refresh config baseline |
| ec76352 | 04:01 | Peter Steinberger | build: refresh bundled channel metadata |
| 5ca65c8 | 03:58 | Peter Steinberger | fix: type media private-network request flag |
| 90c06c0 | 03:47 | xinmotlanthua | fix: guard against undefined event.content in cron agentTurn |
| fb92ca1 | 03:44 | Gustavo M. Santana | QA: genericize mock streaming fixtures |
| 5042b8b | 03:44 | Gustavo M. Santana | QA: split Matrix contract runtime |
| 8db4bb7 | 03:44 | Gustavo M. Santana | Reply: preserve phased block metadata |
| 0bc4472 | 02:57 | Peter Steinberger | fix: remove stale media override import |
| e0bf756 | 02:45 | bladin | fix: handle OpenRouter Qwen3 reasoning_details streams |
| 0c0463b | 02:35 | Jim Smith | fix: restore allowPrivateNetwork for self-hosted STT endpoints |
| b1d03b4 | 02:32 | Mr.NightQ | fix: keep Telegram command sync process-local |
| 6f1d321 | 02:20 | Omar Shahine | feat(bluebubbles): replay missed webhook messages after restart |
| ff4edd0 | 02:16 | Serhii | fix: restore Telegram native auto defaults |
| d974cea | 02:13 | Peter Steinberger | test(e2e): harden Parallels smoke probes |
| 1c46fa0 | 02:01 | Peter Steinberger | test(e2e): quote linux bad-plugin diagnostic grep |
| 3c03d41 | 01:16 | Gustavo M. Santana | QA: split Matrix scenario leaf types |
| 4c52731 | 01:15 | Gustavo M. Santana | fix(ci): parse quoted pnpm snapshot keys |
| da43277 | 01:12 | Gustavo M. Santana | fix(ci): make pnpm audit hook dependency-free |
| e49be93 | 01:08 | Peter Steinberger | fix(release): keep legacy update QA sidecars |
| 9463f1c | 01:07 | Gustavo M. Santana | QA: expand Matrix config scenario coverage |
| 734bb9c | 00:53 | François Martin | Telegram/documents: sanitize binary payloads |
| 0c4e0d7 | 00:29 | Gustavo M. Santana | memory: block dreaming self-ingestion |
| 5702ab6 | 00:27 | Peter Steinberger | test(e2e): harden beta preflight failures |
| 9727ed4 | 00:11 | Mason Huang | feat(skills): add discussion_comment to secret-scanning |
| 55ee327 | 00:10 | Vincent Koc | fix(ci): replace retired pnpm audit hook |
| 3aae0fb | 00:06 | Gustavo M. Santana | QA: tighten Matrix substrate coverage |
| 874eebe | 00:06 | Gustavo M. Santana | QA: extract Matrix event modules |