← 返回更新日志

OpenClaw v2026.2.15

2026-02-16 · GitHub 原文
### 变更内容 - **Discord**:通过 Components v2(按钮、选择器、模态框和基于附件的文件块)解锁丰富的交互式智能体提示,实现 Discord 原生交互。感谢 @thewilloftheshadow。 - **Discord**:优化 components v2 UI + 嵌入直通 + 执行审批用户体验(CV2 容器、按钮布局、Discord 转发跳过)。感谢 @thewilloftheshadow。 - **插件**:暴露 `llm_input` 和 `llm_output` 钩子载荷,使扩展能够观察提示/输入上下文和模型输出使用详情。(#16724) 感谢 @SecondThread。 - **子智能体**:支持可配置深度的嵌套子智能体(子子智能体)。设置 `agents.defaults.subagents.maxSpawnDepth: 2` 以允许子智能体生成自己的子代。包括 `maxChildrenPerAgent` 限制(默认 5)、深度感知工具策略和正确的公告链路由。(#14447) 感谢 @tyler6204。 - **Slack/Discord/Telegram**:添加按频道确认反应覆盖(账户/频道级别),以支持平台特定的表情符号格式。(#17092) 感谢 @zerone0x。 - **Cron/网关**:为出站 cron webhook 帖子添加已完成运行 webhook 交付切换 (`notify`) 和专用 webhook 认证令牌支持 (`cron.webhookToken`)。(#14535) 感谢 @advaitpaliwal。 - **频道**:在核心 + 扩展中统一探测/令牌解析基础类型,同时保留每个频道的错误类型。(#16986) 感谢 @iyoda 和 @thewilloftheshadow。 ### 修复内容 - **安全**:将已弃用的 SHA-1 沙箱配置哈希替换为 SHA-256,用于确定性沙箱缓存标识和重建检查。感谢 @kexinoh。 - **安全/日志记录**:从错误消息和未捕获的堆栈跟踪中编辑 Telegram 机器人令牌,防止意外将密钥泄漏到日志中。感谢 @aether-ai-agent。 - **沙箱/安全**:阻止危险的沙箱 Docker 配置(绑定挂载、主机网络、无限制的 seccomp/apparmor),防止通过配置注入进行容器逃逸。感谢 @aether-ai-agent。 - **沙箱**:在配置哈希中保留数组顺序,以便对顺序敏感的 Docker/浏览器设置能正确触发容器重建。感谢 @kexinoh。 - **网关/安全**:对非管理员客户端的 `status` 响应编辑敏感会话/路径详情;完整详情仍对 `operator.admin` 可用。(#8590) 感谢 @fr33d3m0n。 - **网关/控制 UI**:当设备身份不可用时,保留控制 UI 绕过模式 (`allowInsecureAuth` / `dangerouslyDisableDeviceAuth`) 所请求的操作员范围,防止在已认证的 LAN/HTTP 操作员会话上出现错误的 `missing scope` 失败。(#17682) 感谢 @leafbird。 - **LINE/安全**:当频道令牌或频道密钥缺失时,在 webhook 启动时严格失败,并且仅在两者都存在时才将 LINE 账户视为已配置。(#17587) 感谢 @davidahmann。 - **技能/安全**:将 `download` 安装程序的 `targetDir` 限制在每个技能的工具目录内,防止任意文件写入。感谢 @Adam55A-code。 - **技能/Linux**:在基于 apt 的系统上强化 go 安装程序回退机制,安全处理 root/无 sudo 环境,尽力刷新 apt 索引,并返回可操作的错误而不是因生成错误而失败。(#17687) 感谢 @mcrolly。 - **Web 抓取/安全**:在 HTML 解析前限制下载的响应体大小,防止因过大或深度嵌套的页面导致内存耗尽。感谢 @xuemian168。 - **配置/网关**:使敏感键白名单后缀匹配不区分大小写,同时保留 `passwordFile` 路径豁免,防止意外编辑非密钥配置值(如 `maxTokens`)和 IRC 密码文件路径。(#16042) 感谢 @akramcodez。 - **开发工具**:强化 git `pre-commit` 钩子,防止恶意文件名(例如 `--force`)进行选项注入,避免意外暂存被忽略的文件。感谢 @mrthankyou。 - **网关/智能体**:在 `agent` 和 `agent.identity.get` 中拒绝格式错误的 `agent:` 前缀会话键(例如 `agent:main`),而不是静默将其解析为默认智能体,防止意外的跨会话路由。(#15707) 感谢 @rodrigouroz。 - **网关/聊天**:强化 `chat.send` 入站消息处理,在发送前拒绝空字节、剥离不安全的控制字符并将 Unicode 标准化为 NFC。(#8593) 感谢 @fr33d3m0n。 - **网关/发送**:当 `send` 目标为仅内部使用的 `webchat` 时,返回可操作的错误,引导调用者使用 `chat.send` 或可交付的频道。(#15703) 感谢 @rodrigouroz。 - **控制 UI**:通过移除内联脚本注入、将引导配置作为 JSON 提供以及强制执行 `script-src 'self'` 来防止通过助手名称/头像进行存储型 XSS 攻击。感谢 @Adam55A-code。 - **智能体/安全**:在嵌入 LLM 提示前清理工作区路径(剥离 Unicode 控制/格式字符),防止通过恶意目录名进行指令注入。感谢 @aether-ai-agent。 - **智能体/沙箱**:澄清系统提示路径指导,使沙箱 `bash/exec` 使用容器路径(例如 `/workspace`),而文件工具保持主机桥接映射,避免在沙箱命令执行中因仅使用主机绝对路径而导致首次尝试路径缺失。(#17693) 感谢 @app/juniordevbot。 - **智能体/上下文**:在提供商发现后应用配置的模型 `contextWindow` 覆盖,以便 `lookupContextTokens()` 遵循操作员配置值(包括发现失败路径)。(#17404) 感谢 @michaelbship 和 @vignesh07。 - **智能体/上下文**:从认证可用的模型元数据派生 `lookupContextTokens()`,并为重复的模型 ID 保留最小的已发现上下文窗口,防止跨提供商缓存冲突导致高估会话上下文限制。(#17586) 感谢 @githabideri 和 @vignesh07。 - **智能体/OpenAI**:强制对直接 OpenAI Responses/Codex 运行使用 `store=true` 以保留多轮服务器端对话状态,同时保持代理/非 OpenAI 端点不变。(#16803) 感谢 @mark9232 和 @vignesh07。 - **内存/全文搜索**:使 `buildFtsQuery` 支持 Unicode,以便非 ASCII 查询(包括 CJK)生成关键词令牌,而不是回退到仅向量搜索。(#17672) 感谢 @KinGP5471。 - **自动回复/压缩**:使用时区感知的运行时日期解析 `memory/YYYY-MM-DD.md` 占位符,并在内存刷新轮次追加 `Current time:` 行,防止错误的年份内存文件名,同时不使系统提示随时间变化。(#17603, #17633) 感谢 @nicholaspapadam-wq 和 @vignesh07。 - **智能体**:当嵌入式运行在产生任何有效载荷之前超时时,返回明确的超时错误回复,防止在缓慢的缓存刷新转换期间静默丢弃轮次。(#16659) 感谢 @liaosvcaf 和 @vignesh07。 - **群聊**:在每一轮(不仅仅是第一轮)都将群聊上下文(名称、参与者、回复指导)注入系统提示,防止模型忘记它所在的群聊并错误地使用消息工具发送到同一群组。(#14447) 感谢 @tyler6204。 - **浏览器/智能体**:当浏览器控制服务不可用时,返回明确的非重试指导(而不是“重试”),以便模型不会在重复的浏览器工具调用上循环直到超时。(#17673) 感谢 @austenstone。 - **子智能体**:在直接和排队交付路径上使用基于子运行的确定性公告幂等键(带有旧版排队项回退),以防止重复的公告重试,同时不合并不同的同一毫秒公告。(#17150) 感谢 @widingmarcus-cyber。 - **子智能体/模型**:当子智能体会话携带模型覆盖时,保留 `agents.defaults.model.fallbacks`,以便子智能体运行故障转移到配置的回退模型,而不是仅重试被覆盖的主模型。 - **Telegram**:为 DM 发送/草稿预览省略 `message_thread_id`,并保留论坛主题处理(`id=1` 的通用主题省略,非通用主题保留),防止 DM 因 `400 Bad Request: message thread not found` 而失败。(#10942) 感谢 @garnetlyx。 - **Telegram**:在消息正文上下文中,将入站 `<media:audio>` 占位符替换为成功的预检语音转录,防止提及门控语音消息的提示正文仅包含占位符。(#16789) 感谢 @Limitless2023。 - **Telegram**:重试入站媒体 `getFile` 调用(3 次尝试,带退避),并在重试失败时优雅地回退到仅占位符处理,防止因瞬态 Telegram 网络错误而丢弃语音/媒体消息。(#16154) 感谢 @yinghaosang。 - **Telegram**:在原地完成流式预览回复,而不是发送第二条最终消息,防止在流完成时出现重复的 Telegram 助手输出。(#17218) 感谢 @obviyus。 - **Telegram**:当 `channels.telegram.streamMode` 为 `off` 时,禁用块流式传输,防止换行符/内容块回复被拆分成多条消息。(#17679) 感谢 @saivarunk。 - **Discord**:当运行时有效载荷省略 `message.channelId` 时,通过回退到事件/原始 `channel_id` 值进行路由/会话键,以保持频道会话连续性,从而使同一频道的消息在轮次/重启间保持历史记录。同时调整诊断,使活动的 Discord 运行不再显示为 `sessionKey=unknown`。(#17622) 感谢 @shakkernerd。 - **Discord**:在多智能体设置中按技能名称对原生技能命令进行去重,防止出现带有 `_2` 后缀的重复斜杠命令。(#17365) 感谢 @seewhyme。 - **Discord**:确保角色白名单匹配使用原始角色 ID 进行消息路由授权。感谢 @xinhuagu。 - **Web UI/智能体**:在引导完成后,在智能体文件列表中隐藏 `BOOTSTRAP.md`,避免对已完成的工作区显示令人困惑的缺失文件警告。(#17491) 感谢 @gumadeiras。 - **内存/QMD**:按智能体限定托管集合名称,并在注册前预创建基于 glob 的集合目录,防止跨智能体集合覆盖和新工作区中的启动 ENOENT 失败。(#17194) 感谢 @jonathanadams96。 - **自动回复/WhatsApp/TUI/Web**:当最终助手消息为 `NO_REPLY` 且消息工具发送成功时,将已交付的消息工具文本镜像到会话可见的助手输出中,以便 TUI/Web 不再显示 `NO_REPLY` 占位符。(#7010) 感谢 @Morrowind-Xie。 - **Cron**:为仅模型的 `cron.update` 有效载荷补丁推断 `payload.kind="agentTurn"`,以便在省略 `kind` 时,部分智能体轮次更新不会因验证失败。(#15664) 感谢 @rodrigouroz。 - **TUI**:使可搜索选择过滤和高亮渲染支持 ANSI,以便查询忽略隐藏的转义码,并且在匹配高亮期间不再破坏 ANSI 样式序列。(#4519) 感谢 @bee4come。 - **TUI/Windows**:当括号粘贴不可用时,将 Git Bash 中快速单行提交突发合并为一条多行消息作为回退,防止粘贴的多行文本被拆分成多次发送。(#4986) 感谢 @adamkane。 - **TUI**:抑制非本地空最终事件在并发运行期间的虚假 `(no output)` 占位符,防止外部频道回复在本地运行仍在流式传输时显示空的助手气泡。(#5782) 感谢 @LagWizard 和 @vignesh07。 - **TUI**:在换行和溢出清理期间保留对复制敏感的长令牌(URL/路径/类文件标识符),以便换行输出不再插入破坏复制/粘贴值的空格。(#17515, #17466, #17505) 感谢 @abe238, @trevorpan, 和 @JasonCry。 - **CLI/构建**:使旧版守护进程 CLI 兼容性垫片生成对最小 tsdown 守护进程导出集具有容错性,同时保留重启/注册兼容性别名,并对不可用的旧版守护进程命令显示明确错误。感谢 @vignesh07。