openclaw 小龙虾 2026.4.14 更新说明
🆕 新特性
| # | 变更 | PR | 贡献者 |
|---|---|---|---|
| 1 | OpenAI Codex/models:新增 gpt-5.4-pro 向前兼容支持,包含 Codex 定价/限额及 list/status 可见性(上游目录更新前即可用) | #66453 | @jepson-liu |
| 2 | Telegram/forum topics:从 Telegram 论坛服务消息中学习人类可读主题名称,在 agent 上下文、prompt 元数据和插件 hook 元数据中展示 | #65973 | @ptahdunbar |
🐛 修复
模型与 Agent
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 3 | Agents/Ollama:将配置的 embedded-run timeout 转发到全局 undici stream timeout 调优,慢速本地 Ollama 运行不再继承默认 stream cutoff | #63175 | @mindcraftreader, @vincentkoc |
| 4 | Models/Codex:在 codex provider catalog 输出中包含 apiKey,避免 Pi ModelRegistry 验证器拒绝条目并静默丢弃所有自定义模型 | #66180 | @hoyyeva |
| 5 | Tools/image+pdf:在 media-tool registry 查找前规范化配置的 provider/model 引用,停止拒绝有效的 Ollama vision 模型 | #59943 | @yqli2420, @vincentkoc |
| 6 | Memory/embeddings:规范化 OpenAI 兼容 embedding 模型引用时保留非 OpenAI 提供商前缀,代理支持的 memory 提供商不再报 Unknown provider | #66452 | @jlapenna |
| 7 | Agents/local models:澄清自托管模型的 low-context preflight 提示,停止在 agents.defaults.contextTokens 是真正限制时建议换更大模型 | #66236 | @ImLukeF |
| 8 | Models/Codex:将旧版 openai-codex/gpt-5.4-codex 运行时别名规范化为 openai-codex/gpt-5.4,同时保留别名特定的 overrides | #43060 | @Sapientropic, @vincentkoc |
| 9 | Onboarding/custom providers:OpenAI 兼容验证探测使用 max_tokens=16,更严格的自定义端点不再拒绝仅需微小完成的 onboarding 检查 | #66450 | @WuKongAI-CMU |
| 10 | Agents/subagents:在稳定的 dist 路径上发出 subagent registry lazy-runtime stub,源码和打包运行时导入都能解析 | #66420 | @obviyus |
| 11 | Agents/context engine:compact engine 拥有的 sessions 从第一个 tool-loop delta 开始,保留 ingest fallback | #63555 | @Bikkies |
| 12 | OpenAI Codex/auth:将 malformed Codex CLI auth-file 诊断信息保留在 debug logger 而非 stdout,保持交互式命令输出整洁 | #66451 | @SimbaKingjoe |
| 13 | Hooks/Ollama:LLM 支持的 session-memory slug 生成现在遵循显式 agents.defaults.timeoutSeconds override,慢速本地 Ollama 不再静默降级为通用文件名 | #66237 | @dmak, @vincentkoc |
| 14 | Media/transcription:将 .aac 文件名重映射为 .m4a 用于 OpenAI 兼容音频上传,AAC 语音笔记不再因 MIME 敏感端点而失败 | #66446 | @ben-z |
| 15 | Agents/OpenAI:将 minimal thinking 映射为 OpenAI 支持的 low reasoning effort,GPT-5.4 请求的 embedded 运行不再失败 | — | @steipete |
| 16 | Agents/OpenAI:恢复 embedded GPT-style 运行(仅 reasoning 或空轮次需要有界续传),带 replay-safe retry gating | #66167 | @jalehman |
| 17 | Agents/tools:解析 sandbox 和 read-tool 路径时将 Windows 盘符路径(C:...)视为绝对路径,不再应用 POSIX 路径规则拼接 workspace root | #54039 | @ly85206559, @vincentkoc |
| 18 | Agents/tools:仅当流式消息实际分类了不可用工具时,才将流式 unknown-tool 重试标记为 counted | #66145 | @dutifulbob |
| 19 | Memory/active-memory:将 recalled memory 移至隐藏的 untrusted prompt-prefix 路径而非 system prompt 注入,标注 Active Memory 状态行字段 | #66144 | @Takhoffman |
| 20 | Memory/QMD:停止将旧版小写 memory.md 视为第二个默认 root collection,QMD recall 不再搜索 phantom memory-alt-* collections | #66141 | @mbelinky |
| 21 | Memory/Ollama:恢复 memory-core 中内置的 ollama embedding adapter,显式 memorySearch.provider: "ollama" 重新可用,包含 endpoint-aware cache keys | #63429, #66078, #66163 | @nnish16, @vincentkoc |
| 22 | Agents/subagents:在 npm 构建中包含 dist/agents/subagent-registry.runtime.js,runtime: "subagent" 运行不再因 registry 导入失败而卡住 | #66189 | @yqli2420, @vincentkoc |
安全修复
| # | 修复内容 | PR | 贡献者 |
|---|---|---|---|
| 23 | Slack/interactions:将配置的全局 allowFrom owner allowlist 应用于 channel block-action 和 modal interactive 事件,要求预期 sender id 进行交叉验证 | #66028 | @eleqtrizit |
| 24 | Media-understanding/attachments:当本地附件路径无法通过 realpath 规范化解析时 fail closed,realpath 错误不再降级 canonical-roots allowlist 检查 | #66022 | @eleqtrizit |
| 25 | Agents/gateway-tool:拒绝会新启用 openclaw 安全审计标记的危险 flag 的 config.patch/config.apply 调用(如 dangerouslyDisableDeviceAuth 等) | #62006 | @eleqtrizit |
| 26 | Heartbeat/security:对不受信任的 hook:wake 系统事件强制 owner 降级 | #66031 | @pgondhi987 |
| 27 | Browser/security:在 snapshot、screenshot 和 tab 路由上强制执行 SSRF 策略 | #66040 | @pgondhi987 |
| 28 | Microsoft Teams/security:在 SSO signin 调用上强制执行 sender allowlist 检查 | #66033 | @pgondhi987 |
| 29 | Config/security:在 redactConfigSnapshot 中 redact sourceConfig 和 runtimeConfig 别名字段 | #66030 | @pgondhi987 |
浏览器与 SSRF
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 30 | Browser/SSRF:恢复默认浏览器 SSRF 策略下的 hostname navigation,保持显式 strict mode 可通过配置访问 | #66386 | @obviyus |
| 31 | Browser/SSRF:保留显式 strict browser navigation mode,用于旧版 browser.ssrfPolicy.allowPrivateNetwork: false 配置 | — | — |
| 32 | Browser:保持 loopback CDP 就绪检查在 strict SSRF 默认值下可达,OpenClaw 可重新连接到本地启动的 managed Chrome | #66354 | @hxy91819 |
| 33 | Browser/CDP:本地 attach-only manual-cdp profiles 可在 strict 默认策略下复用 loopback CDP 控制面 | #65611, #66080 | @mbelinky |
| 34 | Browser/CDP:本地 Chrome 就绪检查、状态探测和 managed loopback CDP 控制可绕过 browser SSRF 策略 | #65695, #66043 | @mbelinky |
调度与定时任务
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 35 | Cron/scheduler:当 cron next-run 计算无有效未来时段时不 invent 短重试,保持 maintenance wake armed 使 enabled unscheduled jobs 恢复 | #66019, #66083 | @mbelinky |
| 36 | Cron/scheduler:maintenance repair 重新计算缺失的 cron next-run 时保留活跃 error-backoff floor, recurring errored jobs 不 transient early resume | #66019, #66083, #66113 | @mbelinky |
| 37 | Dreaming/memory-core:heartbeat hook 运行 sweep 前要求 live queued Dreaming cron event,managed Dreaming 不再在 scheduled run 消耗后 replay | #66139 | @mbelinky |
消息传递与交付
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 38 | Outbound/delivery-queue:在 queued delivery 条目上持久化 originating outbound session context,重启后恢复原始 outbound media policy context | #66025 | @eleqtrizit |
| 39 | Auto-reply/queue:按每条消息的授权上下文(sender id、owner 状态、exec/bash-elevated overrides)将 collect-mode followup drains 分组 | #66024 | @eleqtrizit |
| 40 | Outbound/relay-status:在 channel 交付前抑制内部 relay-status placeholder payload,内部 housekeeping 文本不再泄露给用户 | — | — |
| 41 | Auto-reply/send policy:sendPolicy: "deny" 不再阻断 inbound message 处理,agent 仍运行其 turn 同时抑制所有 outbound delivery | #65461, #53328 | @omarshahine |
| 42 | TTS/reply media:将 OpenClaw temp voice 输出持久化为 managed outbound media 并允许通过 reply-media 规范化,voice-note 回复不再静默丢弃 | #63511 | @jetd1 |
平台集成
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 43 | Google image generation:调用原生 Gemini image API 时移除配置的 Google base URL 尾部 /openai 后缀,Gemini image 请求不再 404 | #66445 | @dapzthelegend |
| 44 | Telegram/forum topics:将学习到的主题名称持久化到 Telegram session sidecar store,重启后 agent context 可继续使用人类可读主题名称 | #66107 | @obviyus |
| 45 | Doctor/systemd:openclaw doctor --repair 和 service reinstall 不再将 dotenv-backed secrets 嵌入用户 systemd units | #66249 | @tmimmanuel |
| 46 | Doctor/plugins:在每个 plugin auto-enable pass 内缓存外部 preferOver catalog 查找,大型 agents.list 配置不再 peg CPU | #66246 | @yfge |
| 47 | GitHub Copilot/thinking:允许 github-copilot/gpt-5.4 使用 xhigh reasoning,Copilot GPT-5.4 与其余 GPT-5.4 家族匹配 | #50168 | @jakepresent, @vincentkoc |
| 48 | Discord/native commands:native interactions 返回真实 status card,不再 fallback 到合成 ✅ Done. ack | #54629 | @tkozzer, @vincentkoc |
| 49 | BlueBubbles:send 时 lazy-refresh Private API server-info cache(当请求 reply threading 或 message effects 但 status 未知时) | #65447, #43764 | @omarshahine |
| 50 | Heartbeat/Telegram topics:target=last 时 isolated heartbeat 回复保留在绑定的 forum topic,不再掉落到 group root chat | #66035 | @mbelinky |
| 51 | Gateway/sessions:停止 heartbeat、cron-event、exec-event turns 覆盖共享 session 路由和 origin 元数据 | #66073, #63733, #35300 | @mbelinky |
| 52 | Telegram/status commands:只读 status slash commands 可绕过 busy topic turns,/export-session 保留在正常 lane | #66226 | @VACInc, @vincentkoc |
| 53 | Feishu/allowlist:按显式 user/chat kind 规范化 allowlist 条目,移除重复的 feishu:/lark: provider 前缀,停止将不透明 Feishu ID 折叠为小写 | #66021 | @eleqtrizit |
媒体与理解
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 54 | Media-understanding/proxy env:仅当 HTTP_PROXY/HTTPS_PROXY 活跃且目标未被 NO_PROXY 绕过时,auto-upgrade provider HTTP helper 请求为 trusted env-proxy mode | #52162 | @mjamiv, @vincentkoc |
| 55 | Telegram/media downloads:Telegram media fetch 在 hostname-policy 检查后可信任显式配置的代理进行目标 DNS 解析 | #66245 | @dawei41468, @vincentkoc |
| 56 | Media/store:保存生成媒体和持久化 outbound reply media 时遵循配置的 agent media 限制,store 不再在配置限制生效前 hard-stop 于 5 MB | #66229 | @neeravmakwana, @vincentkoc |
UI 与控制台
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 57 | UI/chat:用 markdown-it 替换 marked.js,恶意构造的 markdown 不再通过 ReDoS 冻结 Control UI | #46707 | @zhangfnf |
| 58 | Control UI/Dreaming:插件关闭时停止 Imported Insights 和 Memory Palace 调用 optional memory-wiki gateway 方法,wiki 重载前刷新配置 | #66140 | @mbelinky |
其他修复
| # | 修复内容 | PR/Issue | 贡献者 |
|---|---|---|---|
| 59 | WhatsApp:patch 安装的 Baileys 媒体加密写入,OpenClaw postinstall 等待加密媒体文件刷新完毕再 readback,避免 transient ENOENT crashes | #65896 | @frankekn |
| 60 | Gateway/update:统一 service entrypoint 解析到规范的 bundled gateway entrypoint,update/reinstall/doctor repair 不再在 dist/entry.js 和 dist/index.js 间漂移 | #65984 | @mbelinky |
| 61 | Voice-call/media-stream:配置了 webhookSecurity.trustForwardingHeaders 和 trustedProxyIPs 时从 trusted forwarding headers 解析源 IP | #66027 | @eleqtrizit |
| 62 | Plugins/status:在 plugins inspect 中报告注册的 context-engine IDs 而非 owning plugin ID | #58766 | @zhuisDEV |
| 63 | Context engines:拒绝 resolved plugin engine 的 reported info.id 与 registered slot id 不匹配的情况,malformed engines 快速失败 | #63222 | @fuller-stack-dev |
| 64 | Hooks/session-memory:将 resolved agent workspace 传入 gateway /new 和 /reset session-memory hooks,reset snapshots 保持正确的作用域 | #64735 | @suboss87, @vincentkoc |
| 65 | CLI/approvals:提高默认 openclaw approvals get gateway timeout,显式报告 config-load timeouts | #66239 | @neeravmakwana |
| 66 | Slack/doctor:添加专用 doctor-contract sidecar,config warmup 路径(如 openclaw cron)不再 fallback 到 Slack 的更宽 contract surface | #63192 | @shhtheonlyperson |
| 67 | Agents/context engines:opt-in turn maintenance 作为 idle-aware background work 运行,下一个 foreground turn 不再等待 proactive maintenance | #65233 | @100yenadmin |
📊 统计摘要
| 类别 | 数量 |
|---|---|
| 新特性 | 2 |
| 修复总数 | 67 |
| 安全修复 | 7 |
| 贡献者 | 40+ |
🎯 专属提示
本次升级与你相关的亮点:
- gpt-5.4-pro 向前兼容 — 上游目录更新前即可在 Codex 中使用
- Memory/QMD 修复 — 旧版小写 memory.md 不再被误认为第二个 root collection,recall 更准确
- Memory/Ollama — 内置 ollama embedding adapter 恢复,显式使用 Ollama 作为 memory provider 重新可用
- Dreaming 修复 — managed Dreaming 不再在 scheduled run 消耗后 replay,heartbeat sweep 要求 live cron event
- Feishu/allowlist — Feishu ID 不再被折叠为小写,allowlist 匹配更精确
- Control UI — markdown-it 替换 marked.js,ReDoS 攻击风险消除
- TTS/reply media — voice-note 回复不再静默丢弃
_由本芙宁娜大人翻译并整理 ✨
https://www.fireself.cn/post/9tyCDzK7
