← 返回更新日志

OpenClaw v2026.2.17

2026-02-18 · GitHub 原文
### 变更内容 - **代理/Anthropic**:通过模型参数 `params.context1m: true` 为 Opus/Sonnet 模型添加可选的 100 万上下文 Beta 版头支持(映射到 `anthropic-beta: context-1m-2025-08-07`)。 - **代理/模型**:在所有别名/默认配置中支持 Anthropic Sonnet 4.6 (`anthropic/claude-sonnet-4-6`),当上游目录仍仅显示 Sonnet 4.5 时提供向前兼容的回退。 - **命令/子代理**:添加 `/subagents spawn` 命令,用于从聊天命令中确定性地激活子代理。(#18218) 感谢 @JoshuaLelon。 - **代理/子代理**:为 `sessions_spawn` 添加已接受的响应说明,解释一次性调用中轮询子代理被禁用的原因。感谢 @tyler6204。 - **代理/子代理**:在生成的子代理任务消息前添加上下文前缀,以在下游处理中保留来源信息。感谢 @tyler6204。 - **iOS/分享**:添加 iOS 分享扩展,将分享的 URL/文本/图像内容直接转发到网关 `agent.request`,支持投递路由回退和可选的接收确认。(#19424) 感谢 @mbelinky。 - **iOS/通话**:添加 `后台监听` 开关,使通话模式在应用后台运行时保持活动状态(默认关闭以节省电量)。感谢 @zeulewan。 - **iOS/通话**:为通话模式提示添加 `语音指令提示` 开关,以便用户在不需时禁用 ElevenLabs 语音切换指令以节省令牌。(#18250) 感谢 @zeulewan。 - **iOS/通话**:通过在内置扬声器/听筒输出路由时禁用语音打断功能,增强打断行为,减少本地 TTS 串扰导致的误打断。感谢 @zeulewan。 - **Slack**:添加 Slack `chat.startStream`/`appendStream`/`stopStream` 的原生单消息文本流式传输;保持回复线程与 `replyToMode` 对齐,默认启用流式传输,并在流式传输失败时回退到正常投递。(#9972) 感谢 @natedenh。 - **Slack**:为草稿预览添加可配置的流式传输模式。(#18555) 感谢 @Solvely-Colin。 - **Telegram/代理**:在消息工具模式、Telegram 操作解析、发送管道和运行时提示引导中添加内联按钮 `style` 支持 (`primary|success|danger`)。(#18241) 感谢 @obviyus。 - **Telegram**:将用户消息反应作为系统事件呈现,并支持可配置的 `channels.telegram.reactionNotifications` 范围。(#10075) 感谢 @Glucksberg。 - **iMessage**:支持出站文本/媒体发送中的 `replyToId`,并规范化前导 `[[reply_to:<id>]]` 标签,使回复能定位到预期的 iMessage。感谢 @tyler6204。 - **工具显示/Web UI**:添加意图优先的工具详情视图和执行摘要。(#18592) 感谢 @xdLawless2。 - **Discord**:公开原生 `/exec` 命令选项(主机/安全/询问/节点),使 Discord 斜杠命令获得自动补全和结构化输入。感谢 @thewilloftheshadow。 - **Discord**:允许使用 `components.reusable=true` 创建可重复使用的交互式组件,使按钮、选择器和表单在过期前可多次使用。感谢 @thewilloftheshadow。 - **Discord**:为交互式组件添加每个按钮的 `allowedUsers` 允许列表,以限制可点击按钮的用户。感谢 @thewilloftheshadow。 - **Cron/网关**:将每项任务的 Webhook 投递 (`delivery.mode = "webhook"`) 与公告投递分离,强制执行有效的 HTTP(S) Webhook URL,并为存储的任务保留临时的旧版 `notify + cron.webhook` 回退。(#17901) 感谢 @advaitpaliwal。 - **Cron/CLI**:为每小时整点重复的 Cron 计划(包括 6 字段秒级 Cron)添加确定性默认错开时间,自动将现有任务迁移到持久化的 `schedule.staggerMs`,并添加 `openclaw cron add/edit --stagger <duration>` 和 `--exact` 覆盖以进行每项任务的时间控制。 - **Cron**:在 Cron 运行日志/Webhook 中记录每次运行的模型/提供商使用遥测数据,并添加一个本地使用报告脚本,用于按任务聚合令牌使用情况。(#18172) 感谢 @HankAndTheCrew。 - **工具/Web**:为 `web_search` 和 `web_fetch` 添加 URL 允许列表。(#18584) 感谢 @smartprogrammer93。 - **浏览器**:为自定义 Chrome 启动参数添加 `extraArgs` 配置。(#18443) 感谢 @JayMishra-source。 - **语音通话**:预缓存入站问候语 TTS 以实现更快的首次播放。(#18447) 感谢 @JayMishra-source。 - **技能**:通过将主目录前缀替换为 `~` 来压缩系统提示中的技能文件 `<location>` 路径,并为提示序列化行为添加有针对性的压缩测试。(#14776) 感谢 @bitfish3。 - **技能**:通过明确的"何时使用"/"不适用于"指导来优化技能描述路由边界(针对编码代理/github/天气),并澄清 PTY/浏览器回退措辞。(#14577) 感谢 @DylanWoodAkers。 - **自动回复/提示**:在对话元数据负载中包含受信任的入站 `message_id`,用于下游目标工作流。感谢 @tyler6204。 - **自动回复**:在受信任的入站元数据中包含 `sender_id`,以便审核工作流可以定位发送者,而无需依赖不受信任的文本。(#18303) 感谢 @crimeacs。 - **UI/会话**:避免在显示名称中重复键入的会话前缀(例如 `Subagent Subagent ...`)。感谢 @tyler6204。 - **代理/Z.AI**:默认启用 `tool_stream` 以实现实时工具调用流式传输,可通过 `params.tool_stream: false` 选择退出。(#18173) 感谢 @tianxiao1430-jpg。 - **插件**:在解析之前添加 `before_agent_start` 模型/提供商覆盖。(#18568) 感谢 @natefikru。 - **Mattermost**:添加表情符号反应操作以及反应事件通知,包括显式的布尔 `remove` 标志以避免意外移除。(#18608) 感谢 @echo931。 - **内存/搜索**:为内存搜索添加 FTS 回退和查询扩展。(#18304) 感谢 @irchelper。 - **代理/模型**:在模型配置中支持每个模型的 `thinkingDefault` 覆盖。(#18152) 感谢 @wu-tian807。 - **代理**:在默认行为中启用 `llms.txt` 发现。(#18158) 感谢 @yolo-maxi。 - **扩展/认证**:添加 OpenAI Codex CLI 认证提供商集成。(#18009) 感谢 @jiteshdhamaniya。 - **飞书**:为自动化工作流添加 Bitable 创建应用/创建字段工具。(#17963) 感谢 @gaowanqi08141999。 - **Docker**:在 Docker 镜像中添加可选的 `OPENCLAW_INSTALL_BROWSER` 构建参数,以预安装 Chromium + Xvfb,避免运行时安装 Playwright。(#18449) ### 修复内容 - **代理/图像**:将调整大小诊断信息压缩为每张图像一行,并在日志消息中包含可见的像素/字节大小详情,以便更快地进行故障排查。 - **代理/子代理**:在模型调用之前,通过截断过大的输出并压缩最旧的工具结果消息,主动保护累积的工具结果上下文,避免上下文窗口溢出崩溃。感谢 @tyler6204。 - **代理/子代理**:添加明确的子代理指导,以从 `[compacted: tool output removed to free context]` / `[truncated: output exceeded context limit]` 标记中恢复,通过重新读取较小的块而不是完整的 `cat` 文件。感谢 @tyler6204。 - **代理/工具**:使 `read` 在块之间自动分页(当未提供显式 `limit` 时),并根据模型 `contextWindow` 调整其每次调用的输出预算,以便更大的上下文可以在上下文保护启动前读取更多内容。感谢 @tyler6204。 - **代理/工具**:从工具结果 `details` 中去除重复的 `read` 截断负载,并使调用前上下文保护考虑繁重的工具结果元数据,以便重复的 `read` 调用不再绕过压缩并溢出模型上下文窗口。感谢 @tyler6204。 - **回复线程**:在流式传输/拆分块之间保持回复上下文粘性,并在所有块发送中保留 `replyToId`(包括 iMessage、BlueBubbles、Telegram、Discord 和 Matrix 的共享和特定频道投递路径),以便后续气泡保持附加到同一引用消息。感谢 @tyler6204。 - **网关/代理**:使用短暂的宽限期延迟瞬态生命周期 `error` 快照,以便 `agent.wait` 在重试/故障转移期间不会过早解析。感谢 @tyler6204。 - **钩子/自动化**:将出站/入站消息生命周期桥接到内部钩子事件(`message:received`、`message:sent`),并带有会话键关联保护,同时为分块和尽力投递保持每负载成功/错误报告的准确性。(PR #9387) - **媒体理解**:在自动发现期间遵循 `agents.defaults.imageModel`,以便隐式图像分析使用配置的主/备用图像模型。(PR #7607) - **iOS/引导**:通过在未经授权/缺少令牌的网关错误上暂停重连尝试,并在手动重试期间保持认证/配对问题状态粘性,来停止认证步骤 3 的重试循环波动。(#19153) 感谢 @mbelinky。 - **语音通话**:当媒体流断开时自动结束通话,以防止通话卡住。(#18435) 感谢 @JayMishra-source。 - **语音通话/网关**:通过每次通话的轮次锁定防止重叠的闭环轮次竞争,通过具有严格缓存驱逐边界的源感知指纹进行路由转录去重,并强化 `voicecall latency` 统计以处理大型日志而不会因扩展运算符导致堆栈溢出。(#19140) 感谢 @mbelinky。 - **iOS/聊天**:通过操作员会话路由 ChatSheet RPC,而不是节点会话,以避免 `chat.history`、`chat.send` 和 `sessions.list` 的节点角色授权失败。(#19320) 感谢 @mbelinky。 - **macOS/更新**:更正 2026.2.15 的 Sparkle appcast 版本,以便再次提供更新。(#18201) - **网关/认证**:在设备令牌不匹配错误后清除过时的设备认证令牌,以便重新配对的客户端可以重新认证。(#18201) - **Telegram**:启用 DM 语音笔记转录,并支持 CLI 回退处理。(#18564) 感谢 @thhuang。 - **Telegram/投票**:在频道处理程序中恢复 Telegram 投票操作连接。(#18122) 感谢 @akyourowngames。 - **WebChat**:从渲染的聊天输出中去除回复/音频指令标签。(#18093) 感谢 @aldoeliacim。 - **Discord**:遵循为应用 ID 和允许列表 REST 解析配置的 HTTP 代理。(#17958) 感谢 @k2009。 - **BlueBubbles**:当平台消息 ID 缺失时,添加从 `fromMe` webhook 恢复出站 `message_id` 的回退路径。感谢 @tyler6204。 - **BlueBubbles**:通过聊天标识符以及帐户上下文匹配出站消息 ID 回退恢复。感谢 @tyler6204。 - **BlueBubbles**:在不受信任的对话元数据中包含发送者标识符,用于对话信息负载。感谢 @tyler6204。 - **安全/执行**:修复通过环境变量注入的 OC-09 凭据窃取路径。(#18048) 感谢 @aether-ai-agent。 - **安全/配置**:将 `$include` 解析限制在顶级配置目录,使用跨平台安全的路径包含来强化遍历/符号链接检查,并为无效的转义包含路径添加医生提示。(#18652) 感谢 @aether-ai-agent。 - **提供商**:改进未配置的本地 `ollama`/`vllm` 提供商的错误消息。(#18183) 感谢 @arosstale。 - **TTS**:在聚合失败中呈现所有提供商错误,而不仅仅是最后一个错误。(#17964) 感谢 @ikari-pl。 - **CLI/医生/配置**:跳过仅限环回设置的网关认证检查。(#18407) 感谢 @sggolakiya。 - **CLI/医生**:在重新配对流程后协调网关服务令牌漂移。(#18525) 感谢 @norunners。 - **进程/Windows**:在执行运行中禁用分离式生成,以防止空命令输出。(#18067) 感谢 @arosstale。 - **进程**:在 SIGKILL 之前使用 SIGTERM 优雅地终止进程树。(#18626) 感谢 @sauerdaniel。 - **会话/Windows**:使用原子会话存储写入,以防止 Windows 上的上下文丢失。(#18347) 感谢 @twcwinston。 - **代理/图像**:在提交给提供商之前验证 base64 图像负载。(#18263) 感谢 @sriram369。 - **模型 CLI**:在 `openclaw models set` 中验证目录条目。(#18129) 感谢 @carrotRakko。 - **使用情况**:在令牌使用情况报告中隔离最后一轮的总数,以避免混合轮次总数。(#18052) 感谢 @arosstale。 - **Cron**:从隔离会话中的代理绑定解析 `accountId`。(#17996) 感谢 @simonemacario。 - **网关/HTTP**:在规范化请求时保留未加括号的 IPv6 `Host` 头。(#18061) 感谢 @Clawborn。 - **沙盒**:在 SHA-1 -> SHA-256 别名迁移期间修复工作区目录孤立问题。(#18523) 感谢 @yinghaosang。 - **Ollama/Qwen**:在 Ollama 响应中处理 Qwen 3 推理字段格式。(#18631) 感谢 @mr-sk。 - **OpenAI/转录**:在转录修复中始终丢弃孤立的推理块。(#18632) 感谢 @TySabs。 - **修复所有测试中的类型。对整个仓库进行类型检查。** - **网关/频道**:将 `gateway.channelHealthCheckMinutes` 连接到严格的配置验证中,将隐式帐户状态视为托管以进行健康检查,并强化频道自动重启流程(在崩溃循环中保留重启尝试上限,传播启用/配置的运行时标志,并在手动停止后停止待处理的重启退避)。感谢 @steipete。 - **网关/WebChat**:通过截断高成本字段并用占位符替换超出预算的条目,对 `chat.history` 过大的负载进行硬性限制,使历史记录获取保持在配置的字节限制内,并避免聊天 UI 冻结。(#18505) - **UI/使用情况**:在使用情况日期范围和图表样式中,将残留的未定义 `var(--text-muted)` 用法替换为 `var(--muted)`,以保持跨主题的静默文本可见性。(#17975) 感谢 @jogelin。 - **UI/使用情况**:当时间序列数据通过桶聚合进行下采样时(而不是丢弃中间点),保留选定范围的总数,以便过滤后的令牌/成本保持准确。(#17959) 感谢 @jogelin。 - **UI/会话**:仅在成功删除后刷新会话表,并在取消/失败路径上保留删除错误,以便删除的会话自动消失而不会掩盖删除失败。(#18507) - **脚本/UI/Windows**:通过恢复 `.cmd`/`.bat` 运行程序的 shell 支持启动,将 shell 使用范围缩小到需要它的启动器类型,并拒绝 UI 脚本参数中不安全的转发 shell 元字符,来修复 `pnpm ui:*` 生成 `EINVAL` 失败。(#18594) - **钩子/会话内存**:当会话指针是重置路径或缺少 `sessionFile` 时,恢复 `/new` 对话摘要,并始终优先选择最新的 `.jsonl.reset.*` 转录候选进行回退提取。(#18088) - **自动回复/会话**:防止过时的线程 ID 泄漏到非线程会话中,以便回复在主题交互后保持在主 DM 中。(#18528) 感谢 @j2h4u。 - **Slack**:将转发的附件摄取限制为显式共享的消息附件,并跳过非 Slack 转发的 `image_url` 获取,防止非转发附件展开污染入站代理上下文,同时保留转发消息处理。 - **飞书**:当 `message.mentions` 为空时,检测嵌入文档的帖子消息中的机器人提及。(#18074) 感谢 @popomore。 - **代理/会话**:将会话锁看门狗保持窗口与运行和压缩超时预算(加上宽限期)对齐,防止有效的长时间运行轮次在运行中被强制解锁,同时仍能恢复挂起的锁所有者。(#18060) - **Cron**:当仅覆盖 `model.primary` 时,为 Cron 代理运行保留默认模型回退,以便故障转移仍遵循配置的回退,除非使用 `fallbacks: []` 显式清除。(#18210) 感谢 @mahsumaktas。 - **Cron**:通过 runSubagentAnnounceFlow 将纯文本公告输出路由到主会话公告流,以便 Cron 纯文本输出对发起会话保持可见。感谢 @tyler6204。 - **Cron**:将 `timeoutSeconds: 0` 视为无超时(不限制为 1),