← 返回更新日志

OpenClaw v2026.3.12

2026-03-13 · GitHub 原文
### 变更 - Control UI/dashboard-v2:刷新网关仪表板,新增模块化概览、聊天、配置、代理和会话视图,以及命令面板、移动端底部标签页和更丰富的聊天工具(如斜杠命令、搜索、导出和置顶消息)。(#41503) 感谢 @BunsDev。 - OpenAI/GPT-5.4 快速模式:在 `/fast`、TUI、Control UI 和 ACP 中添加可配置的会话级快速切换开关,支持各模型的默认配置以及 OpenAI/Codex 请求塑形。 - Anthropic/Claude 快速模式:将共享的 `/fast` 切换开关和 `params.fastMode` 映射为直接向 Anthropic API 密钥发送 `service_tier` 请求,并为 Anthropic 和 OpenAI 快速模式层级提供实时验证。 - 模型/插件:将 Ollama、vLLM 和 SGLang 迁移至提供商插件架构,实现提供商自主的上线、发现、模型选择器设置和选择后钩子,使核心提供商连接更加模块化。 - 文档/Kubernetes:添加包含原始清单、Kind 设置和部署文档的 K8s 入门安装路径。感谢 @sallyom @dzianisv @egkristi - 代理/子代理:添加 `sessions_yield`,使编排器可以立即结束当前回合、跳过排队的工具工作,并将隐藏的后续负载带入下一个会话回合。(#36537) 感谢 @jriff - Slack/代理回复:在共享回复传递路径中支持 `channelData.slack.blocks`,使代理可以通过标准 Slack 出站传递发送 Block Kit 消息。(#44592) 感谢 @vincentkoc。 ### 修复 - 安全/设备配对:将 `/pair` 和 `openclaw qr` 设置代码切换为短期引导令牌,使下一版本不再在聊天或 QR 配对负载中嵌入共享网关凭据。感谢 @lintsinghua。 - 安全/插件:禁用隐式工作区插件自动加载,使克隆的存储库在没有明确信任决策的情况下无法执行工作区插件代码。(`GHSA-99qw-6mr3-36qr`)(#44174) 感谢 @lintsinghua 和 @vincentkoc。 - 模型/Kimi 编码:再次以原生 Anthropic 格式发送 `anthropic-messages` 工具,使 `kimi-coding` 停止将工具调用降级为 XML/纯文本伪调用,而非真正的 `tool_use` 块。(#38669, #39907, #40552) 感谢 @opriz。 - TUI/聊天日志:为相同的流式运行重用活跃的助手消息组件,使 `openclaw tui` 不再渲染重复的助手回复。(#35364) 感谢 @lisitan。 - Telegram/模型选择器:使内联模型按钮选择能正确持久化选定的会话模型,在选择配置的默认值时清除覆盖,并在 `/models` 按钮验证中包含有效的回退模型。(#40105) 感谢 @avirweb。 - Cron/主动传递:将孤立的直接 cron 发送保留在写前重发队列之外,使瞬态发送重试在重启后不会重放重复的主动消息。(#40646) 感谢 @openperf 和 @vincentkoc。 - 模型/Kimi 编码:默认发送内置的 `User-Agent: claude-code/0.1.0` 头部用于 `kimi-coding`,同时仍允许显式提供商头部覆盖它,使 Kimi Code 订阅认证无需本地头部注入代理即可工作。(#30099) 感谢 @Amineelfarssi 和 @vincentkoc。 - 模型/OpenAI Codex Spark:通过解析器回退和更清晰的 Codex 专用处理,保持 `gpt-5.3-codex-spark` 在 `openai-codex/*` 路径上工作,同时继续抑制 OpenAI 实时拒绝的过时直接 `openai/*` Spark 行。 - Ollama/Kimi Cloud:将 Moonshot Kimi 负载兼容性包装器应用于 Ollama 托管的 Kimi 模型(如 `kimi-k2.5:cloud`),使工具路由在启用思考时不再中断。(#41519) 感谢 @vincentkoc。 - Moonshot CN API:在隐式提供商解析中尊重显式 `baseUrl` (api.moonshot.cn),使 platform.moonshot.cn API 密钥能正确认证而非返回 HTTP 401。(#33637) 感谢 @chengzhichao-xydt。 - Kimi 编码/提供商配置:在解析隐式提供商时尊重显式 `models.providers["kimi-coding"].baseUrl`,使自定义 Kimi 编码端点不再被内置默认值覆盖。(#36353) 感谢 @2233admin。 - 网关/主会话路由:在启用 `deliver` 时,将 TUI 和其他 `mode:UI` 主会话发送保留在内部表面上,使回复不再继承会话持久化的 Telegram/WhatsApp 路由。(#43918) 感谢 @obviyus。 - BlueBubbles/自聊回声去重:仅当同一聊天、正文和时间戳刚看到匹配的 `fromMe` 事件时才丢弃反射的重复 webhook 副本,防止自聊循环,同时避免广泛的 webhook 抑制。与 #32166 相关。(#38442) 感谢 @vincentkoc。 - iMessage/自聊回声去重:仅当同一聊天、文本和 `created_at` 刚看到匹配的 `is_from_me` 事件时才丢弃反射的重复副本,防止自聊循环,同时避免广泛的仅文本抑制。与 #32166 相关。(#38440) 感谢 @vincentkoc。 - 子代理/完成通知重试:将默认通知超时提高到 90 秒,并停止重试外部传递的完成通知的网关超时失败,防止在网关响应缓慢后重复用户可见的完成消息。修复 #41235。感谢 @vasujain00 和 @vincentkoc。 - Mattermost/块流式传输:通过从块回复去重键中排除 `replyToId` 并为 Mattermost 插件添加显式 `threading` 停靠,修复块流式传输激活时的重复消息传递(一个线程化,一个顶层)问题。(#41362) 感谢 @mathiasnagler 和 @vincentkoc。 - Mattermost/回复媒体传递:通过共享回复传递传递代理范围的 `mediaLocalRoots`,使允许的本地文件能从按钮、斜杠命令和模型选择器回复正确上传。(#44021) 感谢 @LyleLiu666。 - macOS/提醒事项:在捆绑的应用中添加缺失的 `NSRemindersUsageDescription`,使 `apple-reminders` 能从 OpenClaw.app 触发系统权限提示。(#8559) 感谢 @dinakars777。 - 网关/会话发现:在自定义模板化 `session.store` 根目录下发现仅磁盘和已停用的 ACP 会话存储,使 ACP 协调、会话 ID/会话标签 targeting 和运行 ID 回退在重启后继续工作。(#44176) 感谢 @gumadeiras。 - 插件/环境范围根目录:修复插件发现/加载缓存和来源跟踪,使同一进程中 `HOME`/`OPENCLAW_HOME` 的更改不再重用陈旧的插件状态或错误地将 `~/...` 插件报告为未跟踪。(#44046) 感谢 @gumadeiras。 - 模型/OpenRouter 原生 ID:在配置写入、运行时查找、回退管理以及 `models list --plain` 中对原生 OpenRouter 模型键进行规范化,并在写入时迁移遗留的重复 `openrouter/openrouter/...` 配置条目。 - Windows/原生更新:使包安装使用 npm 更新路径而非 git 路径,将便携式 Git 携带到原生 Windows 更新中,并镜像安装程序的 Windows npm 环境,使 `openclaw update` 不再因缺少 `git` 或 `node-llama-cpp` 下载设置而早期失败。 - 沙盒/写入:保留固定变异助手负载 stdin,使沙盒化的 `write` 不再在创建空文件时报告成功。(#43876) 感谢 @glitch418x。 - 安全/执行批准:在批准提示中转义不可见的 Unicode 格式字符,使零宽度命令文本渲染为可见的 `\u{...}` 转义,而非欺骗审查的命令。(`GHSA-pcqg-f7rg-xfvv`)(#43687) 感谢 @EkiXu 和 @vincentkoc。 - 钩子/加载器:当工作区钩子路径无法通过 `realpath` 解析时失败关闭,使不可读或损坏的内部钩子路径被跳过而非回退到未解析的导入。(#44437) 感谢 @vincentkoc。 - 钩子/代理传递:通过可选幂等性键对重复的钩子请求去重,使 webhook 重试可以重用第一次运行而非启动重复的代理执行。(#44438) 感谢 @vincentkoc。 - 安全/执行检测:在混淆检查之前规范化兼容 Unicode 并剥离不可见的格式码点,使零宽度和全角命令技巧不再抑制启发式检测。(`GHSA-9r3v-37xh-2cf6`)(#44091) 感谢 @wooluo 和 @vincentkoc。 - 安全/执行允许列表:保留 POSIX 大小写敏感性并将 `?` 保持在单个路径段内,使外观精确的允许列表模式不再跨大小写或目录边界过度匹配可执行文件。(`GHSA-f8r2-vg7x-gh8m`)(#43798) 感谢 @zpbrent 和 @vincentkoc。 - 安全/命令:要求 `/config` 和 `/debug` 的发送者所有权,使授权的非所有者发送者不再能访问仅所有者的配置和运行时调试表面。(`GHSA-r7vr-gr74-94p8`)(#44305) 感谢 @tdjackey 和 @vincentkoc。 - 安全/网关认证:在共享令牌 WebSocket 连接上清除未绑定的客户端声明的范围,使无设备的共享令牌操作者无法自我声明提升的范围。(`GHSA-rqpp-rjj8-7wv8`)(#44306) 感谢 @LUOYEcode 和 @vincentkoc。 - 安全/browser.request:阻止具有写入范围的 `browser.request` 创建/删除持久浏览器配置文件路由,使调用者不再能通过浏览器控制面持久化仅管理员浏览器配置文件更改。(`GHSA-vmhq-cqm9-6p7q`)(#43800) 感谢 @tdjackey 和 @vincentkoc。 - 安全/代理:拒绝公共生成的运行谱系字段并在内部生成的会话路径上保留工作区继承,使外部 `agent` 调用者不再能覆盖网关工作区边界。(`GHSA-2rqg-gjgv-84jm`)(#43801) 感谢 @tdjackey 和 @vincentkoc。 - 安全/session_status:在读取或变更目标会话状态之前强制执行沙盒会话树可见性和共享代理到代理访问守卫,使沙盒子代理不再能通过 `session_status` 检查父会话元数据或写入父模型覆盖。(`GHSA-wcxr-59v9-rxr8`)(#43754) 感谢 @tdjackey 和 @vincentkoc。 - 安全/代理工具:将 `nodes` 标记为显式仅所有者,并记录/测试 `canvas` 在存在真实边界绕过之前保持共享可信操作面。 - 安全/执行批准:对使用 `-r`、`--require` 或 `-I` 的 Ruby 批准流程失败关闭,使批准支持的命令不再仅绑定主脚本,而额外的本地代码加载标志保留在审查的文件快照之外。 - 安全/设备配对:将签发和验证的设备令牌范围限制为每个配对设备的批准范围基线,使陈旧或过宽的令牌不能超过批准访问。(`GHSA-2pwv-x786-56f8`)(#43686) 感谢 @tdjackey 和 @vincentkoc。 - 文档/入门:将旧向导参考和 `openclaw onboard` 命令文档与 Ollama 入门流程对齐,使所有入门参考路径现在都记录 `--auth-choice ollama`、云 + 本地模式和非交互式用法。(#43473) 感谢 @BruceMacD。 - 模型/密钥:在生成的 `models.json` 中强制来源管理的 SecretRef 标记,使运行时解析的提供商密钥在跳过运行时投影时不被持久化。(#43759) 感谢 @joshavant。 - 安全/WebSocket 预认证:缩短未认证握手保留时间并在应用层解析前拒绝过大的预认证帧,以减少不支持的公共部署上的预配对暴露。(`GHSA-jv4g-m82p-2j93`)(`GHSA-xwx2-ppv2-wx98`)(#44089) 感谢 @ez-lbz 和 @vincentkoc。 - 安全/代理附件:为持久化的浏览器代理文件恢复共享媒体存储大小上限,使过大的负载被拒绝而非覆盖预期的 5 MB 限制。(`GHSA-6rph-mmhp-h7h9`)(#43684) 感谢 @tdjackey 和 @vincentkoc。 - 安全/主机环境:从净化主机执行环境中阻止继承的 `GIT_EXEC_PATH`,使 Git 助手解析不能被主机环境状态引导。(`GHSA-jf5v-pqgw-gm5m`)(#43685) 感谢 @zpbrent 和 @vincentkoc。 - 安全/飞书 webhook:在 webhook 模式中要求 `encryptKey` 与 `verificationToken` 并存,使未签名的伪造事件被拒绝而非仅使用令牌配置处理。(`GHSA-g353-mgv3-8pcj`)(#44087) 感谢 @lintsinghua 和 @vincentkoc。 - 安全/飞书反应:保留查找的群组聊天输入状态并在模糊反应上下文上失败关闭,使组授权和提及门控不能通过合成 `p2p` 反应绕过。(`GHSA-m69h-jm2f-2pv8`)(#44088) 感谢 @zpbrent 和 @vincentkoc。 - 安全/LINE webhook:也为空事件 POST 探测要求签名,使未签名请求不再以 `200` 响应确认 webhook 可达性。(`GHSA-mhxh-9pjm-w7q5`)(#44090) 感谢 @TerminalsandCoffee 和 @vincentkoc。 - 安全/Zalo webhook:在认证前对无效密钥猜测进行速率限制,使弱 webhook 密钥不能通过未认证的流失请求暴力破解,无需预认证 `429` 响应。(`GHSA-5m9r-p9g7-679c`)(#44173) 感谢 @zpbrent 和 @vincentkoc。 - 安全/Zalouser 群组:默认要求稳定的群组 ID 进行允许列表认证,并将可变的群组名称匹配置于 `channels.zalouser.dangerouslyAllowNameMatching` 断开关后。感谢 @zpbrent。 - 安全/Slack 和 Teams 路由:默认要求稳定的频道和团队 ID 进行允许列表路由,仅通过每个频道的 `dangerouslyAllowNameMatching` 断开关允许可变名称匹配。 - 安全/执行批准:对内联加载器和 shell 负载脚本执行失败关闭,在 POSIX shell 取值标志后绑定真实脚本,并在批准绑定前解包 `pnpm`/`npm exec`/`npx` 脚本运行器。(`GHSA-57jw-9722-6rf2`)(`GHSA-jvqh-rfmh-jh27`)(`GHSA-x7pp-23xv-mmr4`)(`GHSA-jc5j-vg4r-j5jx`)(#44247) 感谢 @tdjackey 和 @vincentkoc。 - 医生/网关服务审计:在比较前规范化服务入口点路径,使符号链接 vs 真实路径安装不再触发错误的“入口点与当前安装不匹配”修复提示。(#43882) 感谢 @ngutman。 - 医生/网关服务审计:此修复的早期基础工作已 landed 在被取代的 #28338 分支。感谢 @realriphub。 - 网关/会话存储:重新生成 Swift 推送测试协议模型并对齐 Windows 原生会话存储真实路径处理,使协议检查和同步会话发现停止在 Windows 上漂移。(#44266) 感谢 @jalehman。 - 上下文引擎/会话路由:在上下文引擎生命周期调用中转发可选 `sessionKey`,使插件在引导、组装、回合后摄取和压缩期间能看到结构化路由元数据。(#44157) 感谢 @jalehman。 - 代理/故障转移:将 z.ai `network_error` 停止原因分类为可重试超时,使提供商连接失败触发回退而非暴露原始未处理停止原因错误。(#43884) 感谢 @hougangdev。 - 内存/会话同步:添加感知模式的回合后会话重新索引,配合 `agents.defaults.compaction.postIndexSync` 和 `agents.defaults.memorySearch.sync.sessions.postCompactionForce`,使压缩的会话内存能立即刷新,而无需强制每个部署进行同步重新索引。(#25561) 感谢 @rodrigouroz。 - Telegram/模型选择器:使内联模型按钮选择能正确持久化选定的会话模型,在选择配置的默认值时清除覆盖,并在 `/models` 按钮验证中包含有效的回退模型。(#40105) 感谢 @avirweb。 - Telegram/原生命令同步:抑制预期的 `BOT_COMMANDS_TOO_MUCH` 重试错误噪音,添加最终回退摘要日志,并记录命令菜单溢出与真实 Telegram 网络故障之间的区别。 - Mattermost/回复媒体传递:通过共享回复传递传递代理范围的 `mediaLocalRoots`,使允许的本地文件能从按钮、斜杠命令和模型选择器回复正确上传。(#44021) 感谢 @LyleLiu666。 - 插件/环境范围根目录:修复插件发现/加载缓存和来源跟踪,使同一进程中 `HOME`/`OPENCLAW_HOME` 的更改不再重用陈旧的插件状态或错误地将 `~/...` 插件报告为未跟踪。(#44046) 感谢 @gumadeiras。 - 网关/会话发现:在自定义模板化 `session.store` 根目录下发现仅磁盘和已停用的 ACP 会话存储,使 ACP 协调、会话 ID/会话标签 targeting 和运行 ID 回退在重启后继续工作。(#44176) 感谢 @gumadeiras。 - 模型/OpenRouter 原生 ID:在配置写入、运行时查找、回退管理以及 `models list --plain` 中对原生 OpenRouter 模型键进行规范化,并在写入时迁移遗留的重复 `openrouter/openrouter/...` 配置条目。 - 网关/钩子:按通过可信代理转发的客户端 IP 对钩子认证失败进行分桶,并在 `hooks.allowedAgentIds` 使钩子路由无限制时发出警告。 - 代理/压缩:当压缩在同一尝试中完成时跳过回合后 `cache-ttl` 标记写入,防止下一回合立即触发第二次微小压缩。(#28548) 感谢 @MoerAI。 - 原生聊天/macOS:添加 `/new`、`/reset` 和 `/clear` 重置触发器,保持共享主会话别名对齐,并忽略过时的模型选择完成,使原生聊天状态在重置和快速模型更改期间保持同步。(#10898) 感谢 @Nachx639。 - 代理/压缩保护:通过共享子系统日志路由缺失模型和缺失 API 密钥取消警告,使它们进入结构化和文件日志。(#9974) 感谢 @dinakars777。 - Cron/医生:停止将规范的 `agentTurn` 和 `systemEvent` 负载类型标记为旧版 cron 存储,同时仍规范化空格填充和非规范变体。(#44012) 感谢 @shuicici。 - ACP/客户端最终消息传递:在解析 `end_turn` 之前保留终端助手文本快照,使 ACP 客户端在网关在终端聊天事件上发送最终消息体时不再丢弃最后可见回复。(#17615) 感谢 @pjeby。 - Telegram/Discord 状态反应:在自动压缩暂停期间显示临时紧凑反应并在思考后恢复,使机器人不再在上下文被压缩时显得冻结。(#35474) 感谢 @Cypherm。