← 返回更新日志

OpenClaw v2026.2.13

2026-02-14 · GitHub 原文
### 变更内容 - **Discord**:支持从本地音频文件发送带有波形预览的语音消息(包括静音投递)。(#7253) 感谢 @nyanjou。 - **Discord**:添加可配置的在线状态/活动/类型/URL(自定义状态默认为活动文本)。(#10855) 感谢 @h0tp-ftw。 - **Slack/插件**:通过 `message_sending` 钩子添加基于线程所有权的出站门控,包括 @提及绕过跟踪以及用于取消/修改行为的 Slack 出站钩子连接。(#15775) 感谢 @DarlingtonDeveloper。 - **智能体**:为 `hf:zai-org/GLM-5` 添加合成目录支持。(#15867) 感谢 @battman21。 - **技能**:移除重复的 `local-places` Google Places 技能/代理,保留 `goplaces` 作为唯一受支持的 Google Places 路径。 - **智能体**:在嵌入式运行器提示调用前,添加预提示上下文诊断(`messages`、`systemPromptChars`、`promptChars`、提供商/模型、会话文件),以改进溢出调试。(#8930) 感谢 @Glucksberg。 - **入门/提供商**:添加一流的 Hugging Face Inference 提供商支持(提供商连接、入门身份验证选择/API 密钥流程和默认模型选择),并在身份验证选择重映射中保留 Hugging Face 身份验证意图(`tokenProvider=huggingface` 且 `authChoice=apiKey`),同时在提供显式令牌时跳过环境变量覆盖提示。(#13472) 感谢 @Josephrp。 ### 修复内容 - **出站**:添加具有崩溃恢复重试功能的预写投递队列,以防止网关重启后丢失出站消息。(#15636) 感谢 @nabbilkhan, @thewilloftheshadow。 - **自动回复/线程**:自动注入隐式回复线程,使 `replyToMode` 无需模型发出 `[[reply_to_current]]` 即可工作,同时为隐式 Slack 回复保留 `replyToMode: "off"` 行为,并在 `replyToMode: "first"` 下保持块流式传输块合并稳定。(#14976) 感谢 @Diaspar4u。 - **出站/线程**:将 `replyTo` 和 `threadId` 从 `message send` 工具操作传递到核心出站发送路径至通道适配器,保留线程/回复路由。(#14948) 感谢 @mcaxtr。 - **自动回复/媒体**:允许仅包含图像(无标题)的入站消息到达智能体,而不是因空文本而短路,并在排队/后续提示体中为仅媒体运行保留线程上下文。(#11916) 感谢 @arosstale。 - **Discord**:将 autoThread 回复路由到现有线程,而不是根频道。(#8302) 感谢 @gavinbmoore, @thewilloftheshadow。 - **Web UI**:将 `img` 添加到 DOMPurify 允许的标签,并将 `src`/`alt` 添加到允许的属性,以便 Markdown 图像在 Web 聊天中渲染而不是被剥离。(#15437) 感谢 @lailoo。 - **Telegram/Matrix**:将 MP3 和 M4A(包括 `audio/mp4`)视为与语音兼容以进行 `asVoice` 路由,并保持 WAV/AAC 回退到常规音频发送。(#15438) 感谢 @azade-c。 - **WhatsApp**:为 Web 会话文档发送保留出站文档文件名,而不是始终发送 `"file"`。(#15594) 感谢 @TsekaLuk。 - **Telegram**:将机器人菜单注册限制在 Telegram 的 100 个命令限制内,并显示溢出警告,同时保持键入的隐藏命令可用。(#15844) 感谢 @battman21。 - **Telegram**:将技能命令限定到已解析的智能体(针对默认账户),以便当配置多个智能体时,`setMyCommands` 不再触发 `BOT_COMMANDS_TOO_MUCH`。(#15599) - **Discord**:通过在解析过程中为仅限公会的输入添加 `guild:` 前缀,避免将数字公会允许列表条目错误路由到 `/channels/<guildId>`。(#12326) 感谢 @headswim。 - **MS Teams**:在追加 OneDrive 回退文件链接时保留解析的提及实体/文本,并接受更广泛的真实世界 Teams 提及 ID 格式(`29:...`、`8:orgid:...`),同时仍拒绝占位符模式。(#15436) 感谢 @hyojin。 - **媒体**:在媒体类型路由中将 `text/*` MIME 类型分类为文档,以便文本附件不再被视为未知。(#12237) 感谢 @arosstale。 - **入站/Web UI**:在规范化入站文本时保留字面量 `\n` 序列,以免损坏像 `C:\\Work\\nxxx\\README.md` 这样的 Windows 路径。(#11547) 感谢 @mcaxtr。 - **TUI/流式传输**:当最终有效载荷丢弃工具调用前的文本块时,保留更丰富的流式助手文本,同时保持非空最终有效载荷对纯文本更新的权威性。(#15452) 感谢 @TsekaLuk。 - **提供商/MiniMax**:将隐式 MiniMax API 密钥提供商从 `openai-completions` 切换到 `anthropic-messages`,并使用正确的 Anthropic 兼容基础 URL,修复 MiniMax M2.5 上的 `invalid role: developer (2013)` 错误。(#15275) 感谢 @lailoo。 - **Ollama/智能体**:为原生 `/api/chat` 流式传输(包括别名提供商)使用已解析的模型/提供商基础 URL,规范化 `/v1` 端点,并转发中止和 `maxTokens` 流选项以实现可靠取消和令牌上限。(#11853) 感谢 @BrokenFinger98。 - **OpenAI Codex/Spark**:在回退/思考/模型解析和 `models list` 前向兼容可见性中实现端到端 `gpt-5.3-codex-spark` 支持。(#14990, #15174) 感谢 @L-U-C-K-Y, @loiie45e。 - **智能体/Codex**:允许在前向兼容回退、实时模型过滤和思考预设中使用 `gpt-5.3-codex-spark`,并修复 Spark 的模型选择器识别。(#14990) 感谢 @L-U-C-K-Y。 - **模型/Codex**:在 `models list` 期间通过前向兼容回退解析配置的 `openai-codex/gpt-5.3-codex-spark`,以便在运行时解析成功时不会错误地标记为缺失。(#15174) 感谢 @loiie45e。 - **OpenAI Codex/身份验证**:将 OpenClaw OAuth 配置文件桥接到 `pi` `auth.json` 中,以便模型发现和模型列表注册表解析可以使用 Codex OAuth 凭据。(#15184) 感谢 @loiie45e。 - **身份验证/OpenAI Codex**:在入门和 `models auth login --provider openai-codex` 之间共享 OAuth 登录处理,在 OAuth 失败时保持入门活动状态,并显示直接的 OAuth 帮助说明而不是终止向导。(#15406, #14552 的后续) 感谢 @zhiluo20。 - **入门/提供商**:将 vLLM 添加为入门提供商,包含模型发现、身份验证配置文件连接和非交互式身份验证选择验证。(#12577) 感谢 @gejifeng。 - **入门/CLI**:恢复终端状态而不恢复暂停的 `stdin`,以便在选择 Web UI 后入门干净退出,安装程序返回而不是看起来卡住。 - **Signal/安装**:在非 x64 Linux 架构上通过 Homebrew 自动安装 `signal-cli`,避免在 arm64/arm 主机上出现 x86_64 原生二进制文件 `Exec format error` 失败。(#15443) 感谢 @jogvan-k。 - **macOS 语音唤醒**:通过匹配和切片原始字符串范围而不是转换后的字符串索引,修复 CJK/Unicode 转录本中触发器修剪的崩溃问题。(#11052) 感谢 @Flash-LHR。 - **Mattermost (插件)**:使用指数退避和可感知中止的拆卸来重试 WebSocket 监视器连接,以便瞬态连接故障不再永久停止监视。(#14962) 感谢 @mcaxtr。 - **Discord/智能体**:在嵌入式运行器历史记录压缩期间应用频道/群组 `historyLimit`,以防止长时间运行的频道会话绕过截断并溢出上下文窗口。(#11224) 感谢 @shadril238。 - **出站目标**:对 WhatsApp/Twitch/Google Chat 回退路径采用失败关闭策略,以便丢弃无效或缺失的目标而不是重新路由,并使解析器提示与严格的目标要求保持一致。(#13578) 感谢 @mcaxtr。 - **网关/重启**:在 SIGUSR1 进程内重启后清除过时的命令队列和心跳唤醒运行时状态,以防止排队工作停止排空的僵尸网关行为。(#15195) 感谢 @joeykrug。 - **心跳**:防止运行器重新加载期间的调度程序静默死亡竞争,在唤醒突发下保持重试冷却退避,并在合并时优先处理用户/操作唤醒原因而不是间隔/重试原因。(#15108) 感谢 @joeykrug。 - **心跳**:允许显式唤醒(`wake`)和钩子唤醒(`hook:*`)原因运行,即使 `HEARTBEAT.md` 实际上为空,以便处理排队的系统事件。(#14527) 感谢 @arosstale。 - **自动回复/心跳**:即使在句子结尾的 `HEARTBEAT_OK` 令牌后跟多达 4 个标点字符时也将其剥离,同时保留周围的句子标点。(#15847) 感谢 @Spacefish。 - **智能体/心跳**:停止在工作空间引导期间自动创建 `HEARTBEAT.md`,以便缺失的文件继续按文档运行心跳。(#11766) 感谢 @shadril238。 - **会话/智能体**:在回复运行中解析现有转录本路径时传递 `agentId`,以便非默认智能体和心跳/聊天处理程序不再因 `Session file path must be within sessions directory` 而失败。(#15141) 感谢 @Goldenmonstew。 - **会话/智能体**:通过状态和使用情况转录本解析路径(自动回复、网关使用情况 API 和会话成本/日志加载器)传递 `agentId`,以便非默认智能体可以解析绝对会话文件而不会出现路径验证失败。(#15103) 感谢 @jalehman。 - **会话**:在 `/new` 和 `/reset` 会话重置(包括网关 `sessions.reset`)时归档先前的转录本文件,以免过时的转录本在磁盘上累积。(#14869) 感谢 @mcaxtr。 - **状态/会话**:停止将派生的 `totalTokens` 限制在上下文窗口大小,保持通过会话计数的提示令牌快照连接,并在缺少新的快照数据时将上下文使用情况显示为未知,以避免错误的 100% 报告。(#15114) 感谢 @echoVic。 - **CLI/补全**:将插件加载日志路由到 stderr,并将生成的补全脚本直接写入 stdout,以避免 `source <(openclaw completion ...)` 损坏。(#15481) 感谢 @arosstale。 - **CLI**:延迟加载出站提供商依赖项,并移除强制成功路径退出,以便命令自然终止,而不会杀死有意长时间运行的前台操作。(#12906) 感谢 @DrCrinkle。 - **安全/网关 + ACP**:默认阻止高风险工具(`sessions_spawn`、`sessions_send`、`gateway`、`whatsapp_login`)通过 HTTP `/tools/invoke` 访问,可通过 `gateway.tools.{allow,deny}` 覆盖,并强化 ACP 权限选择,在工具身份/选项不明确时采用失败关闭策略,同时支持 `allow_always`/`reject_always`。(#15390) 感谢 @aether-ai-agent。 - **安全/网关**:**破坏性默认行为变更** - 画布基于 IP 的身份验证回退现在仅接受机器范围内的地址(RFC1918、链路本地、ULA IPv6、CGNAT);公共源 IP 匹配现在需要持有者令牌身份验证。(#14661) 感谢 @sumleo。 - **安全/链接理解**:在提取的 URL 处理中阻止环回/内部主机模式和私有/映射的 IPv6 地址,以关闭链接 CLI 流程中的 SSRF 绕过。(#15604) 感谢 @AI-Reviewer-QS。 - **安全/浏览器**:将 `POST /trace/stop`、`POST /wait/download` 和 `POST /download` 输出路径限制在 OpenClaw 临时根目录,并拒绝遍历/转义路径。 - **安全/画布**:通过共享的安全打开路径(`openFileWithinRoot`)提供 A2UI 资源,以关闭遍历/TOCTOU 漏洞,并包含遍历和符号链接回归覆盖。(#10525) 感谢 @abdelsfane。 - **安全/WhatsApp**:在保存/备份/恢复路径上对 `creds.json` 和 `creds.json.bak` 强制执行 `0o600` 权限,以减少凭据文件暴露。(#10529) 感谢 @abdelsfane。 - **安全/网关**:在握手前关闭日志中清理和截断不受信任的 WebSocket 标头值,以降低日志中毒风险。感谢 @thewilloftheshadow。 - **安全/审计**:为沙箱 Docker 配置添加错误配置检查(沙箱模式关闭、无效的 `gateway.nodes.denyCommands` 条目、智能体配置文件对全局最小工具配置文件的覆盖、以及宽松的扩展插件工具可达性)。 - **安全/审计**:在攻击面摘要中区分外部 Webhook(`hooks.enabled`)和内部钩子(`hooks.internal.enabled`),以避免在仅启用内部钩子时出现错误的暴露信号。(#13474) 感谢 @mcaxtr。 - **安全/入门**:在安全审计、医生安全和频道入门指南中,通过明确的 `openclaw config set session.dmScope ...` 命令澄清多用户 DM 隔离修复。(#13129) 感谢 @VintLin。 - **智能体/节点**:通过在意外批准决策上采用失败关闭策略,强化 `nodes` 工具运行路径中的节点执行批准决策处理,并为需要批准的重试/拒绝/超时流程添加回归覆盖。(#4726) 感谢 @rmorse。 - **Android/节点**:通过要求 HTTPS 和网关主机 URL 匹配以及 SHA-256 验证来强化 `app.update`,将 URL 摄像头下载流式传输到磁盘并带有大小保护以避免内存峰值,并停止使用调试密钥签署发布版本。(#13541) 感谢 @smartprogrammer93。 - **路由**:在同伴/公会/团队/角色之间强制执行严格的绑定范围匹配,以便同伴范围的 Discord/Slack 绑定不再匹配不相关的公会/团队上下文或回退层级。(#15274) 感谢 @lailoo。 - **执行/允许列表**:允许多行 heredoc 主体(`<<`、`<<-`),同时保持阻止多行非 heredoc shell 命令,以便执行批准解析安全地允许 heredoc 输入,而不允许通用的换行命令链。(#13811) 感谢 @mcaxtr。 - **配置**:在写入配置文件时保留 `${VAR}` 环境变量引用,以便 `openclaw config set/apply/patch` 不会将秘密持久化到磁盘。感谢 @thewilloftheshadow。 - **配置**:通过将读取时的环境上下文按请求携带到写入调用中,移除配置写入中的跨请求环境快照竞争,在并发网关配置变更下安全地保留 `${VAR}` 引用。(#11560) 感谢 @akoscz。 - **配置**:每当替换现有配置文件时,记录覆盖审计条目(路径、备份目标和哈希转换),提高意外配置覆盖的可追溯性。 - **配置**:通过拒绝非字符串/不安全的命令令牌,同时仍迁移有效的自定义脚本可执行文件,保持旧版音频转录迁移的严格性。(#5042) 感谢 @shayan919293。 - **配置**:在配置文件中接受 `$schema` 键,以便 JSON 模式编辑器工具正常工作而不会出现验证错误。(#14998) - **网关/工具调用**:清理 `/tools/invoke` 执行失败,同时为工具输入错误保留 `400`,并为意外运行时故障返回 `500`,包含回归覆盖和文档更新。(#13185) 感谢 @davidrudduck。 - **网关/钩子**:为钩子请求体超时响应保留 `408`,同时保持有界的身份验证失败缓存驱逐行为,包含超时状态回归覆盖。(#15848) 感谢 @AI-Reviewer-QS。 - **插件/钩子**:通过移除重复的调度路径,在嵌入式运行中每个工具调用精确触发一次 `before_tool_call` 钩子,同时保留参数变更语义。(#15635) 感谢 @lailoo。 - **智能体/转录本策略**:在转录本策略规范化期间清理 OpenAI/Codex 工具调用 ID,以防止无效的工具调用标识符传播到会话历史记录中。(#15279) 感谢 @divisonofficer。 - **智能体/图像工具**:根据模型能力(`min(4096, model.maxTokens)`)限制图像分析完成 `maxTokens`,以避免超限提供商故障,同时仍防止截断。(#11770) 感谢 @detecti1。 - **智能体/压缩**:在共享工具工厂中集中执行默认解析,以便每个智能体的 `tools.exec` 覆盖(主机/安全/询问/节点及相关默认值)在压缩重试中持续存在。(#15833) 感谢 @napetrov。 - **网关/智能体**:当 `agents.list` 明确排除 `main` 智能体时,停止