← 返回更新日志

OpenClaw v2026.3.1

2026-03-02 · GitHub 原文
### 变更 - **智能体/思考级别默认值**:将 `adaptive` 设为 Anthropic Claude 4.6 模型(包括 Bedrock Claude 4.6 引用)的默认思考级别,同时保持其他具备推理能力的模型为 `low`,除非明确配置。 - **网关/容器探针**:为 Docker/Kubernetes 健康检查添加内置 HTTP 存活/就绪端点(`/health`、`/healthz`、`/ready`、`/readyz`),并采用回退路由,确保这些路径上的现有处理器不会被覆盖。(#31272) 感谢 @vincentkoc。 - **Android/节点**:在 Android 节点上添加 `camera.list`、`device.permissions`、`device.health` 和 `notifications.actions`(`open`/`dismiss`/`reply`),并为新的设备/通知命令提供一级节点工具操作。(#28260) 感谢 @obviyus。 - **Discord/线程绑定**:用基于不活动的生命周期(`idleHours`,默认 24 小时)替换固定的 TTL 生命周期,并添加可选的硬性 `maxAgeHours` 生命周期控制,同时为聚焦的线程绑定会话添加 `/session idle` 和 `/session max-age` 命令。(#27845) 感谢 @osolmaz。 - **Telegram/私信主题**:为每项私信添加 `direct` 和主题配置(允许列表、`dmPolicy`、`skills`、`systemPrompt`、`requireTopic`),将私信主题作为独立的内联/外联会话路由,并对消息、回调、命令和反应实施主题感知的授权和防抖处理。该功能由贡献者 PR #30579(@kesor)实现并合并。感谢 @kesor。 - **Web UI/Cron 国际化**:将 cron 页面标签、过滤器、表单帮助文本以及验证/错误消息本地化为英语和简体中文。(#29315) 感谢 @BUGKillerKing。 - **OpenAI/流式传输**:默认将 `openai` Responses 设为 WebSocket 优先(`transport: "auto"` 并带有 SSE 回退),添加共享的 OpenAI WS 流/连接运行时连接,并保留服务器端压缩有效负载变更(`store` + `context_management`)在 WS 路径上。 - **Android/网关能力刷新**:添加实时的 Android 能力集成覆盖范围和节点画布能力刷新连接,并强化 A2UI 就绪重试、作用域画布 URL 规范化、调试诊断 JSON 和 JavaScript MIME 交付的运行时。(#28388) 感谢 @obviyus。 - **Android/节点功能对等**:添加 `system.notify`、`photos.latest`、`contacts.search`/`contacts.add`、`calendar.events`/`calendar.add` 以及 `motion.activity`/`motion.pedometer`,具备运动传感器感知的命令门控和改进的活动采样可靠性。(#29398) 感谢 @obviyus。 - **CLI/配置**:添加 `openclaw config file` 以打印从 `OPENCLAW_CONFIG_PATH` 或默认位置解析的活动配置文件路径。(#26256) 感谢 @cyb1278588254。 - **飞书/Docx 表格与上传**:为 Docx 表格创建/单元格写入(`create_table`、`write_table_cells`、`create_table_with_values`)以及图像/文件上传(`upload_image`、`upload_file`)添加 `feishu_doc` 操作,并对缺少 `document_id` 和占位符清理失败的情况实施更严格的创建/上传错误处理。(#20304) 感谢 @xuhao1。 - **飞书/反应**:添加入站 `im.message.reaction.created_v1` 处理,将经验证的反应通过合成内联回合路由,并通过超时和失败封闭过滤强化验证,以丢弃非机器人或未经验证的反应。(#16716) 感谢 @schumilin。 - **飞书/聊天工具**:为聊天信息和成员查询添加 `feishu_chat` 工具操作,可在 `channels.feishu.tools.chat` 下配置启用。(#14674) 感谢 @liuweifly。 - **飞书/Doc 权限**:在 `feishu_doc` 创建时支持可选的权限授予字段,并仅在授权调用成功时报告权限元数据,为成功/失败/省略所有者路径提供回归覆盖。(#28295) 感谢 @zhoulongchao77。 - **Web UI/国际化**:添加德语(`de`)区域设置支持,并在概览设置中从受支持的区域常量自动渲染语言选项。(#28495) 感谢 @dsantoreis。 - **工具/差异**:添加一个新的可选 `diffs` 插件工具,用于从之前/之后文本或统一补丁进行只读差异渲染,并提供网关查看器 URL 以支持画布和 PNG 图像输出。感谢 @gumadeiras。 - **内存/LanceDB**:为 LanceDB 内存支持自定义 OpenAI `baseUrl` 和嵌入维度。(#17874) 感谢 @rish2jain 和 @vincentkoc。 - **ACP/ACPX 流式传输**:将 ACPX 插件支持固定到 `0.1.15`,添加可配置的 ACPX 命令/版本探测,并简化 ACP 流交付(`final_only` 默认值 + 减少工具事件噪音),同时匹配运行时和测试更新。(#30036) 感谢 @osolmaz。 - **Shell 环境标记**:在类 Shell 运行时(`exec`、`acp`、`acp-client`、`tui-local`)中设置 `OPENCLAW_SHELL`,以便 Shell 启动/配置规则能一致地针对 OpenClaw 上下文,并在 env/exec/acp/TUI 文档中记录这些标记。感谢 @vincentkoc。 - **Cron/心跳轻量级引导上下文**:为自动化运行添加可选轻量级引导模式(cron 代理回合使用 `--light-context`,心跳使用 `agents.*.heartbeat.lightContext`),心跳运行仅保留 `HEARTBEAT.md`,并为 cron 轻量级运行跳过引导文件注入。(#26064) 感谢 @jose-velez。 - **OpenAI/WebSocket 预热**:添加可选的 OpenAI Responses WebSocket 预热(`response.create` 并设置 `generate:false`),默认对 `openai/*` 启用,并暴露 `params.openaiWsWarmup` 以进行每模型启用/禁用控制。 - **智能体/子智能体运行时事件**:用类型化的内部完成事件(`task_completion`)替换临时的子智能体完成系统消息交接,这些事件在直接和队列公告路径上一致呈现,并为结构化 `internalEvents` 提供网关/CLI 管道。 ### 修复 - **Android/节点可靠性**:当 `deviceId` 被设置时拒绝 `facing=both` 以避免错误标记的重复捕获,允许对不可清除的通知条目执行 `open`/`reply`(同时仍对 dismiss 进行门控),在通知操作前触发监听器重新绑定,并根据大剪辑有效负载的调用预算缩放调用结果确认超时。(#28260) 感谢 @obviyus。 - **Windows/插件安装**:通过解析为 `node` + npm CLI 脚本而非直接生成 `.cmd`,避免 Windows 上 npm/npx 调用出现 `spawn EINVAL`。该修复由贡献者 PR #31147(@codertony)实现并合并。感谢 @codertony。 - **LINE/语音转录**:通过检查 MPEG-4 `ftyp` 主品牌(`M4A ` / `M4B `)将 M4A 语音媒体分类为 `audio/mp4`(而非 `video/mp4`),恢复 LINE 语音消息的语音转录功能。该修复由贡献者 PR #31151(@scoootscooob)实现并合并。感谢 @scoootscooob。 - **Slack/公告目标账户路由**:为 Slack 启用基于会话的公告目标查找,以便多账户公告能解析正确的 `accountId`,而不是默认回退到机器人令牌上下文。该修复由贡献者 PR #31028(@taw0002)实现并合并。感谢 @taw0002。 - **Android/语音屏幕 TTS**:在 Talk Mode 中通过 ElevenLabs WebSocket 流式传输助手语音,在扬声器静音/抢麦时干净地停止,并忽略过时的乱序流事件。(#29521) 感谢 @gregmousseau。 - **Android/照片权限**:声明 Android 14+ 选定的照片访问权限(`READ_MEDIA_VISUAL_USER_SELECTED`),并使 Android 权限/设置路径与当前 minSdk 行为对齐,以实现更可靠的权限状态处理。 - **Web UI/Cron**:在 cron 模型建议中包含配置的代理模型默认值/回退值,以便定时作业模型自动完成能反映已配置的模型。(#29709) 感谢 @Sid-Qin。 - **Cron/投递**:当 `delivery.mode` 为 `"none"` 时禁用代理消息工具,以便 cron 输出不会发送到 Telegram 或其他频道。(#21808) 感谢 @lailoo。 - **CLI/Cron**:通过将 `Agent` 重命名为 `Agent ID` 并添加 `Model` 列来澄清 `cron list` 输出,以便隔离代理回合作业。(#26259) 感谢 @openperf。 - **飞书/回复媒体附件**:在回复分发器中,将飞书回复的 `mediaUrl`/`mediaUrls` 有效负载作为附件连同文本/流式回复一起发送,包括 `mediaUrls` 为空时的遗留回退。(#28959) 感谢 @icesword0760。 - **Slack/用户令牌解析**:通过解析的账户元数据(`SLACK_USER_TOKEN` 环境变量 + 配置)规范化 Slack 账户用户令牌来源,以便监视读取、Slack 操作、目录查找、入站允许解析和能力探测一致地使用有效的用户令牌。(#28103) 感谢 @Glucksberg。 - **飞书/外联会话路由**:停止假设裸 `oc_` 标识符始终是群聊,为 `oc_` 聊天 ID 显式尊重 `dm:`/`group:` 前缀,并将模糊的裸 `oc_` 目标默认设为直接路由,以避免私信会话错误分类。(#10407) 感谢 @Bermudarat。 - **飞书/群组会话路由**:添加可配置的群组会话范围(`group`、`group_sender`、`group_topic`、`group_topic_sender`),并保持 `topicSessionMode=enabled` 的遗留兼容性,以便飞书群组对话能按配置按发送者/主题隔离会话。(#17798) 感谢 @yfge。 - **飞书/回复线程路由**:为群组回复添加 `replyInThread` 配置(`disabled|enabled`),在文本/卡片/媒体/流式发送中传播 `reply_in_thread`,并调整主题作用域会话路由,以便新创建的回复线程保持在同一会话根上。(#27325) 感谢 @kcinzgg。 - **飞书/探测状态缓存**:缓存成功的 `probeFeishu()` 机器人信息结果 10 分钟(带每账户键的有界缓存),以减少重复的状态/入站探测 API 调用,同时对失败和异常绕过缓存。(#28907) 感谢 @Glucksberg。 - **飞书/Opus 媒体发送类型**:将 `.opus` 附件作为 `msg_type: "audio"` 发送(而非 `"media"`),以便飞书语音消息正确传递,同时 `.mp4` 保持 `msg_type: "media"`,文档保持 `msg_type: "file"`。(#28269) 感谢 @Glucksberg。 - **飞书/移动视频媒体类型**:将入站 `message_type: "media"` 视为视频等效项,用于媒体键提取、占位符推断和媒体下载解析,以便移动应用视频发送能正确摄入。(#25502) 感谢 @4ier。 - **飞书/入站发送者回退**:当入站事件中 `sender_id.open_id` 缺失时回退到 `sender_id.user_id`,并使用 ID 类型感知的发送者查找,以便移动传递的消息保持稳定的发送者身份/路由。(#26703) 感谢 @NewdlDewdl。 - **飞书/回复上下文元数据**:在入站上下文中包含入站 `parent_id` 和 `root_id` 作为 `ReplyToId`/`RootMessageId`,并在获取回复消息时将交互式卡片引用正文解析为可读文本。(#18529) 感谢 @qiangu。 - **飞书/发布嵌入媒体**:从入站富文本(`post`)消息中提取 `media` 标签,并与现有嵌入图像处理一起下载嵌入的视频/音频文件,提供回归覆盖。(#21786) 感谢 @laopuhuluwa。 - **飞书/本地媒体发送**:通过 `loadWebMedia` 将 `mediaLocalRoots` 传播到飞书外联媒体发送,以便本地路径附件能在 CVE 后本地根强制下工作。(#27884) 感谢 @joelnishanth。 - **飞书/群组通配符策略回退**:当没有显式群组匹配时,尊重 `channels.feishu.groups["*"]`,以便未匹配的群组继承通配符回复策略设置,而不是回退到全局默认值。(#29456) 感谢 @WaynePika。 - **飞书/入站媒体回归覆盖**:添加消息资源类型映射的显式测试(`image` 保持 `image`,非图像映射为 `file`),以防止重新引入不支持的飞书 `type=audio` 获取。(#16311, #8746) 感谢 @Yaxuan42。 - **TTS/语音气泡**:对飞书和 WhatsApp(除 Telegram 外)使用 Opus 输出并启用 `audioAsVoice` 路由,以便受支持的频道接收语音气泡播放而非文件样式音频附件。(#27366) 感谢 @smthfoxy。 - **Telegram/回复媒体上下文**:在回复媒体时,在入站上下文中包含回复的媒体文件,将回复媒体下载推迟到防抖刷新,在 DM 授权后门控回复媒体获取,并在非视觉贴纸回退运行时保留回复的媒体(包括缓存贴纸路径)。(#28488) 感谢 @obviyus。 - **Android/节点通知唤醒流程**:启用 Android `system.notify` 默认允许列表,为发布/移除的通知(不包括 OpenClaw 应用拥有的通知)发出 `notifications.changed` 事件,在入队/唤醒路由前规范化通知会话键,并在连续通知摘要去重时跳过心跳唤醒。(#29440) 感谢 @obviyus。 - **Telegram/语音回退回复分块**:当语音投递被阻止时,仅将回复引用、引用文本和内联按钮应用于第一个回退文本块,防止过度引用的多块回复。该修复由贡献者 PR #31067(@xdanger)实现并合并。感谢 @xdanger。 - **飞书/多账户 + 回复可靠性**:添加 `channels.feishu.defaultAccount` 外联路由支持并附带模式验证,保持引用消息提取为文本优先(发布/交互式/文件占位符而非原始 JSON),将飞书视频发送路由为 `msg_type: "file"`,并通过监视调度中的非阻塞事件处理避免 WebSocket 事件阻塞。该修复由贡献者 PR #29610、#30432、#30331 和 #29501 实现并合并。感谢 @hclsys、@bmendonca3、@patrick-yingxi-pan 和 @zwffff。 - **飞书/入站富文本解析**:在可用时保留 `share_chat` 有效负载摘要,并为富文本 `code`/`code_block`/`pre` 标签添加显式解析,以便转发和代码密集型消息在代理输入中保留有用的上下文。(#28591) 感谢 @kevinWangSheng。 - **飞书/发布 Markdown 解析**:通过共享的 Markdown 感知解析器(带区域包装器支持、保留的提及/图像元数据提取以及内联/围栏代码保真度)解析富文本 `post` 有效负载,用于代理输入渲染。(#12755) 感谢 @WilsonLiu95。 - **Telegram/外联分块**:通过共享外联管道(包括子智能体)路由过大分割,当转义 HTML 超过限制时重试 Telegram 发送,并在重试重新分割渲染块时保留边界空白,以便纯文本/转录保真度得以保留。(#29342, #27317;#27461 后续) 感谢 @obviyus。 - **Slack/原生命令**:将 Slack 原生状态注册为 `/agentstatus`(Slack 保留的 `/status`),以便清单斜杠命令注册保持有效,同时文本 `/status` 仍可工作。该修复由贡献者 PR #29032(@maloqab)实现并合并。感谢 @maloqab。 - **Android/相机剪辑**:移除 `camera.clip` HTTP 上传回退到 base64,使剪辑传输具有确定性且失败明显,并拒绝非正 `maxWidth` 值,以便无效输入回退到安全调整大小默认值。(#28229) 感谢 @obviyus。 - **Android/网关画布能力刷新**:从 Android 节点运行时发送带有对象 `params`(`{}`)的 `node.canvas.capability.refresh`,以便网关对象模式验证接受刷新重试,并在作用域能力过期后 A2UI 主机恢复能工作。(#28413) 感谢 @obviyus。 - **网关/控制 UI 来源**:尊重 `gateway.controlUi.allowedOrigins: ["*"]` 通配符条目(包括修剪值),并通过回归测试锁定行为。该修复由贡献者 PR #31058(@byungsker)实现并合并。感谢 @byungsker。 - **智能体/会话列表转录路径**:处理缺失/非字符串/相对 `sessions.list.path` 值以及派生 `transcriptPath` 时的每代理 `{agentId}` 模板,以便跨代理会话列表解析为具体的代理会话文件而非工作区相对路径。(#24775) 感谢 @martinfrancois。 - **网关/控制 UI CSP**:在控制 UI CSP 中允许必需的 Google Fonts 来源。(#29279) 感谢 @Glucksberg 和 @vincentkoc。 - **CLI/安装**:添加 npm-link 回退以修复受影响安装上的 CLI 启动 `Permission denied` 失败(`exit 127`)。(#17151) 感谢 @sskyu 和 @vincentkoc。 - **入站/多账户路由**:在受信任的入站元数据中包含 `account_id`,以便多账户频道会话能在提示上下文中可靠地区分接收账户。该修复由贡献者 PR #30984(@Stxle2)实现并合并。感谢 @Stxle2。 - **模型指令/身份验证配置文件**:在最后一个斜杠后的第一个 `@` 处分割 `/model` 配置文件后缀,以便基于电子邮件的身份验证配置文件 ID(例如 OAuth 配置文件 ID)能正确解析。该修复由贡献者 PR #30932(@haosenwang1018)实现并合并。感谢 @haosenwang1018。 - **Cron/投递模式 none**:在 cron 编辑器的添加和更新流程中发送显式 `delivery: { mode: "none" }`,以便实际清除之前的公告投递。该修复由贡献者 PR #31145(@byungsker)实现并合并。感谢 @byungsker。 - **Cron 编辑器视口**:使粘性 cron 编辑表单可独立滚动,并具有视口边界高度,以便在较矮屏幕上也能访问下部字段/操作。该修复由贡献者 PR #31133(@Sid-Qin)实现并合并。感谢 @Sid-Qin。 - **智能体/思考回退**:当提供商拒绝不支持的思考级别且未枚举替代方案时,重试 `think=off` 以避免模型/提供商回退链中的硬失败。该修复由贡献者 PR #31002(@yfge)实现并合并。感谢 @yfge。 - **Ollama/嵌入式运行程序基础 URL 优先级**:在嵌入式 Ollama 运行中优先使用配置的提供商 `baseUrl` 而非模型默认值,以便 Docker 和远程主机设置避免 localhost 获取失败。(#30964) 感谢 @stakeswky。 - **智能体/故障转移原因分类**:通过将 TPM 作为独立令牌/短语匹配,并保持身份验证上下文错误在身份验证路径上,避免因偶然的 `tpm` 子字符串导致的错误速率限制分类。该修复由贡献者 PR #31007(@HOYALIM)实现并合并。感谢 @HOYALIM。 - **网关/WS**:关闭每个连接上重复的握手后 `unauthorized role:*` 请求洪泛,并采样重复拒绝日志,防止单个行为不端的客户端降低网关响应能力。(#20168) 感谢 @acy103、@vibecodooor 和 @vincentkoc。 - **网关/身份验证**:改进设备身份验证 v2 迁移诊断,以便操作员在遗留客户端连接时获得更清晰的指导。(#28305) 感谢 @vincentkoc。 - **CLI/Ollama 配置**:允许为 Ollama `apiKey` 执行 `config set`,无需预先声明的提供商配置。(#29299) 感谢 @vincentkoc。 - **Ollama/自动发现**:强化自动发现和警告行为。(#29201) 感谢 @marcodelpin 和 @vincentkoc。 - **Ollama/上下文窗口**:在发现、合并和 OpenAI 兼容传输路径中统一上下文窗口处理。(#29205) 感谢 @Sid-Qin、@jimmielightner 和 @vincentkoc。 - **智能体/Ollama**:将空发现的日志级别从 `warn` 降级为 `debug`,以减少正常边缘情况发现流程中的噪音警告。(#26379) 感谢 @byungsker。 - **修复(模型)**:在提供商故障转移解析中保留推理能力。(#29285) 修复 #25636。感谢 @vincentkoc。 - **Docker/镜像权限**:在镜像构建期间将 `/app/extensions`、`/app/.agent` 和 `/app/.agents` 规范化为目录模式 `755` 和文件模式 `644`,以便插件发现不会阻止继承的全局可写路径。(#30191) 修复 #30139。感谢 @edincampara。 - **OpenAI Responses/压缩**:重写并统一 OpenAI Responses 存储补丁,将空 `baseUrl` 视为非直接,尊重 `compat.supportsStore=false`,并为兼容的直接 OpenAI 模型自动注入服务器端压缩 `context_management`(附带每模型选择退出/阈值覆盖)。该修复由贡献者 PR #16930(@OiPunk)、#22441(@EdwardWu7)和 #25088(@MoerAI)实现并合并。感谢 @OiPunk、@EdwardWu7 和 @MoerAI。 - **沙箱/浏览器 Docker**:向沙箱浏览器容器传递 `OPENCLAW_BROWSER_NO_SANDBOX=1` 并增加沙箱浏览器安全哈希纪元,以便现有容器在升级时重新创建并获取环境变量。(#29879) 感谢 @Lukavyi。 - **使用量规范化**:将负的提示/输入令牌值(包括 `prompt_tokens` 别名输入)截断为零,以便 `/usage` 和 TUI 使用量显示无法显示荒谬的负计数。该修复由贡献者 PR #31211(@scoootscooob)实现并合并。感谢 @scoootscooob。 - **密钥/身份验证配置文件**:在持久化之前将内联 SecretRef `token`/`key` 值规范化为规范的 `tokenRef`/`keyRef`,并在内联引用也存在时保持显式 `keyRef` 优先级。该修复由贡献者 PR #31047(@minupla)实现并合并。感谢 @minupla。 - **工具/编辑工作区边界错误**:保留真实的 `Path escapes workspace root` 失败路径,而不是在编辑工作区根之外时显示误导性的访问/文件未找到错误。该修复由贡献者 PR #31015(@haosenwang1018)实现并合并。感谢 @haosenwang1018。 - **浏览器/打开与导航**:接受 `url` 作为 `open` 和 `navigate` 的别名参数。(#29260) 感谢 @vincentkoc。 - **Codex/使用量窗口**:将每周使用量窗口标记为 `Week` 而非 `Day`。(#26267) 感谢 @Sid-Qin。 - **Signal/同步消息空处理**:将 `syncMessage` 存在性(包括 `null`)视为同步信封流量,以便守护进程重启后重放的 sentTranscript 有效负载无法绕过循环保护。该修复由贡献者 PR #31138(@Sid-Qin)实现并合并。感谢 @Sid-Qin。 - **基础架构/fs-safe**:规范化目录读取失败,以便原始 `EISDIR` 文本永远不会泄露到消息传递界面,并为根作用域和直接安全读取提供回归测试。该修复由贡献者 PR #31205(@polooooo)实现并合并。感谢 @polooooo。 - **沙箱/mkdirp 边界检查**:允许对现有边界内子目录进行目录安全边界验证,防止沙箱写入模式中出现错误的 `cannot create directories` 失败。(#30610) 感谢 @glitch418x。 - **安全/压缩审计**:移除压缩后审计注入消息。(#28507) 感谢 @fuller-stack-dev 和 @vincentkoc。 - **Web 工具/RFC2544 假 IP 兼容性**:允许受信任的 Web 工具获取端点使用 RFC2544 基准范围(`198.18.0.0/15`),以便代理假 IP 网络模式不会触发错误的 SSRF 阻止。该修复由贡献者 PR #31176(@sunkinux)实现并合并。感谢 @sunkinux。