← 返回更新日志

OpenClaw v2026.3.31-beta.1 预发布

2026-03-31 · GitHub 原文
### 重大变更 - **节点/执行**:从 CLI 和代理 `nodes` 工具中移除重复的 `nodes.run` shell 包装器,使节点 shell 执行始终通过 `exec host=node` 进行,从而在 `nodes invoke` 和专用媒体/位置/通知操作上保持节点特定功能。 - **插件 SDK**:弃用传统的提供程序兼容子路径以及较旧的捆绑提供程序设置和通道运行时兼容性填充程序,发出迁移警告,并保留当前文档化的 `openclaw/plugin-sdk/*` 入口点以及本地的 `api.ts` / `runtime-api.ts` barrel 文件作为未来主版本移除前的前进路径。 - **技能/安装 与 插件/安装**:内置的危险代码 `critical` 发现和安装时扫描失败现在默认以“失败封闭”方式运行,因此之前成功的插件安装和网关支持技能依赖安装现在可能需要显式的危险覆盖(如 `--dangerously-force-unsafe-install`)才能继续。 - **网关/认证**:`trusted-proxy` 现在拒绝混合共享令牌配置,本地直连回退需要配置的令牌,而不是隐式认证同一主机调用者。感谢 @zhangning-agent, @jacobtomlinson, 和 @vincentkoc。 - **网关/节点命令**:节点命令现在在节点配对获批前保持禁用状态,因此仅设备配对已不再足以暴露已声明的节点命令。(#57777) 感谢 @jacobtomlinson。 - **网关/节点事件**:节点发起的运行现在保持在缩减的受信表面上,因此之前依赖更广泛主机/会话工具访问权限的通知驱动或节点触发流程可能需要调整。(#57691) 感谢 @jacobtomlinson。 ### 变更 - **ACP/插件**:添加一个显式的默认关闭的 ACPX 插件工具 MCP 桥接配置,记录信任边界,并加固内置桥接打包/日志路径,使全局安装和 stdio MCP 会话能够可靠运行。(#56867) 感谢 @joe2643。 - **代理/LLM**:为嵌入式运行器请求添加可配置的空闲流超时,以便停滞的模型流干净中止,而不是挂起直到更广泛的运行超时触发。(#55072) 感谢 @liuy。 - **代理/MCP**:使用提供程序安全名称(`serverName__toolName`)具体化捆绑 MCP 工具,支持可选的 `streamable-http` 传输选择以及每服务器连接超时,并在截断明确丢弃它们之前保留来自中止/错误回合的真实工具结果。(#49505) 感谢 @ziomancer。 - **Android/通知**:添加带有包过滤、安静时段、速率限制以及转发通知事件更安全选择器行为的通知转发控制。(#40175) 感谢 @nimbleenigma。 - **后台任务**:将任务转变为真正的共享后台运行控制平面,而不仅仅是 ACP 簿记,通过将 ACP、子代理、cron 和后台 CLI 执行统一在一个 SQLite 支持的账本下,将分离的生命周期更新通过执行器接缝路由,添加审计/维护/状态可见性,收紧自动清理和丢失运行恢复,改进内部状态/工具表面的任务感知,并澄清心跳/主会话自动化与分离计划运行之间的区别。感谢 @mbelinky 和 @vincentkoc。 - **后台任务**:添加第一个线性任务流控制面,使用 `openclaw flows list|show|cancel`,将手动多任务流与单任务自动同步流分开,并为明显孤立或损坏的流/任务链接提供医生恢复提示。感谢 @mbelinky 和 @vincentkoc。 - **通道/QQ Bot**:添加 QQ Bot 作为捆绑通道插件,支持多账户设置、SecretRef 感知凭据、斜杠命令、提醒以及媒体发送/接收支持。(#52986) 感谢 @sliverp。 - **差异**:跳过未使用的查看器与文件 SSR 预加载工作,以便 `diffs` 仅查看和仅文件运行减少渲染工作,同时保持模式输出对齐。(#57909) 感谢 @gumadeiras。 - **任务**:添加一个最小的 SQLite 支持的任务流注册表以及任务到流链接脚手架,因此编排工作可以开始获得一个一级父记录,而无需更改当前任务传递行为。感谢 @mbelinky 和 @vincentkoc。 - **任务**:在单任务流上持久化阻塞状态,并让同一流在重试时干净地重新打开,因此阻塞的分离工作可以携带父级原因并继续,而不会碎片化为新作业。感谢 @mbelinky 和 @vincentkoc。 - **任务**:将单任务 ACP 和子代理更新通过父任务流所有者上下文路由,因此分离工作可以通过预期的父线程/会话重新浮现,而不是仅作为原始子任务发言。感谢 @mbelinky 和 @vincentkoc。 - **LINE/出站媒体**:在 LINE 特定传递路径上添加 LINE 图像、视频和音频出站发送,包括视频的显式预览/跟踪处理,同时将通用媒体发送保留在现有仅图像路径上。(#45826) 感谢 @masatohoshino。 - **Matrix/历史**:通过 `channels.matrix.historyLimit` 为 Matrix 组触发器添加可选房间历史上下文,具有每代理水印和重试安全快照,因此失败触发器重试不会漂移到更新的房间消息中。(#57022) 感谢 @chain710。 - **Matrix/网络**:添加显式的 `channels.matrix.proxy` 配置以通过 HTTP(S) 代理路由 Matrix 流量,包括账户级别覆盖和匹配探测/运行时行为。(#56931) 感谢 @patrick-yingxi-pan。 - **Matrix/流式**:添加草稿流式传输,因此部分 Matrix 回复就位更新同一消息,而不是为每个块发送新消息。(#56387) 感谢 @jrusz。 - **Matrix/线程**:添加每 DM `threadReplies` 覆盖,并保持线程会话隔离与触发消息起的有效房间或 DM 线程策略对齐。(#57995) 感谢 @teconomix。 - **MCP**:为 `mcp.servers` URL 配置添加远程 HTTP/SSE 服务器支持,包括认证头以及 MCP 凭据更安全的配置编辑。(#50396) 感谢 @dhananjai1729。 - **内存/QMD**:添加每代理 `memorySearch.qmd.extraCollections`,以便代理可以选择加入跨代理会话搜索,而无需将每个转录集合扁平化为一个共享 QMD 命名空间。感谢 @vincentkoc。 - **Microsoft Teams/成员信息**:添加 Graph 支持的成员信息操作,以便 Teams 自动化和工具可以直接从 Microsoft Graph 解析频道成员详细信息。(#57528) 感谢 @sudie-codes。 - **Nostr/入站 DM**:在配对或发送者授权副作用之前验证入站事件签名,因此伪造的 DM 事件不再创建配对请求或触发回复尝试。感谢 @smaeljaish771 和 @vincentkoc。 - **OpenAI/响应**:在 Responses HTTP 和 WebSocket 传输上转发配置的 `text.verbosity`,在 `/status` 中公开,并保持每代理详细级别优先级与运行时行为对齐。(#47106) 感谢 @merc1305 和 @vincentkoc。 - **Pi/Codex**:为嵌入式 Pi 运行添加原生 Codex 网络搜索支持,包括配置/文档/向导覆盖以及原生 Codex 搜索激活时管理的工具抑制。(#46579) 感谢 @Evizero。 - **Slack/执行审批**:添加原生 Slack 审批路由和审批者授权,因此执行审批提示可以保留在 Slack 中,而不是回退到 Web UI 或终端。感谢 @vincentkoc。 - **TTS**:添加结构化提供程序诊断和回退尝试分析。(#57954) 感谢 @joshavant。 - **WhatsApp/反应**:代理现在可以对传入的 WhatsApp 消息做出表情反应,从而实现更自然的对话交互,例如用 ❤️ 确认照片而不是打字回复。感谢 @mcaxtr。 - **代理/BTW**:强制 `/btw` 侧问题禁用提供程序推理,因此 Anthropic 自适应思维会话停止因 `No BTW response generated` 而失败。修复 #55376。感谢 @Catteres 和 @vincentkoc。 - **CLI/引导**:在拒绝发现的端点后将远程网关 URL 提示重置为安全回环默认值,因此引导不会保留先前拒绝的远程 URL。(#57828) - **代理/执行默认值**:当没有内联指令或会话覆盖时,尊重每代理 `tools.exec` 默认值,因此配置的执行主机、安全、询问和节点设置实际应用。(#57689) - **沙箱/网络**:通过共享沙箱策略清理 SSH 子进程环境变量,并将市场存档下载以及 Ollama 发现、认证和拉取请求通过受保护的获取路径路由,因此沙箱化执行和远程获取遵循仓库的信任边界。(#57848, #57850) ### 修复 - **代理/OpenAI 响应**:在 WebSocket/响应路径上规范化原始捆绑 MCP 工具架构,因此裸对象、类对象和顶层联合 MCP 工具不再被 OpenAI 在工具注册期间拒绝。(#58299) 感谢 @yelog。 - **ACP/安全**:用语义审批类替换 ACP 的危险工具名称覆盖,因此只有狭窄的只读读取/搜索可以自动批准,而间接执行能力和控制平面工具始终需要显式提示批准。感谢 @vincentkoc。 - **ACP/sessions_spawn**:注册 ACP 子运行以进行完成跟踪和生命周期清理,并使注册失败清理明确为尽力而为,因此调用者不会假设已启动的 ACP 回合已完全中止。(#40885) 感谢 @xaeon2026 和 @vincentkoc。 - **ACP/任务**:当 ACP 运行在确定性写入或授权阻止程序上干净退出时将其标记为阻塞,并通过后续唤醒父会话,而不是错误报告成功。 - **ACPX/运行时**:从扩展包元数据推导捆绑 ACPX 的预期版本,而不是硬编码单独的文本字面量,因此插件本地 ACPX 安装在版本提升后停止漂移出健康检查对等性。(#49089) 感谢 @jiejiesks 和 @vincentkoc。 - **代理/Anthropic 故障转移**:将带有 `An unexpected error occurred while processing the response` 的 Anthropic `api_error` 负载视为暂时性,因此重试/故障转移可以介入,而不是呈现终端失败。(#57441) 感谢 @zijiess 和 @vincentkoc。 - **代理/压缩**:在聚合超时路径获胜后保持后期压缩重试拒绝得到处理,而不吞咽真正超时前的等待失败,因此超时的重试不再在后续取消订阅时呈现未处理的拒绝。(#57451) 感谢 @mpz4life 和 @vincentkoc。 - **代理/上下文修剪**:使用共享代码点感知估计器计算补充平面 CJK 字符,因此上下文修剪停止低估使用扩展 B 表意文字的日语和中文文本。(#39985) 感谢 @Edward-Qiang-2024。 - **代理/Kimi**:在清除缓存修复时保留已有效 Anthropic 兼容工具调用参数对象,而稍后尾部垃圾超过修复配额。感谢 @yuanaichi。 - **代理/MCP**:在一次性 `openclaw agent --local` 运行完成后处置捆绑 MCP 运行时,同时在运行内重试期间保留捆绑 MCP 状态,因此本地 JSON 运行干净退出,而无需在运行中途重启有状态 MCP 工具。 - **代理/MCP**:在同一会话的回合间重用捆绑 MCP 运行时,同时在 MCP 配置更改时重新创建它们,并在会话滚动时干净处置陈旧的运行时。(#55090) 感谢 @allan0509。 - **代理/内存刷新**:在嵌入式尝试期间保持每日内存刷新文件仅追加,因此压缩写入不会覆盖较早的笔记。(#53725) 感谢 @HPluseven。 - **代理/沙箱**:尊重 `tools.sandbox.tools.alsoAllow`,让显式沙箱重新允许移除匹配的内置默认拒绝工具,并保持沙箱解释/错误指导与有效沙箱工具策略对齐。(#54492) 感谢 @ngutman。 - **代理/沙箱**:使远程 FS 桥接读取固定父路径并在帮助程序中原子性打开文件,因此读取访问不能竞争路径解析。感谢 @AntAISecurityLab 和 @vincentkoc。 - **代理/静音回合**:在静默内存刷新运行上失败封闭,因此叙述的 `NO_REPLY` 自言自语即使启用块流式传输也不能流式传输或最终化为外部回复。(#52593) - **代理/子代理**:修复中间子代理运行时显示,因此 `/subagents list` 和 `/subagents info` 停止膨胀短运行时并正确显示秒级持续时间。(#57739) 感谢 @samzong。 - **Anthropic/OAuth**:为直接 `sk-ant-oat-*` 请求注入 `/fast` `service_tier` 提示,因此 OAuth 认证的 Anthropic 运行停止缺失与 API 密钥流量相同的过载路由信号。修复 #55758。感谢 @Cypherm 和 @vincentkoc。 - **Anthropic/服务层级**:支持直接 Anthropic 请求的显式 `serviceTier` 模型参数,并让它们在两者都设置时覆盖 `/fast` 默认值。(#45453) 感谢 @vincentkoc。 - **自动回复/快速**:在仅指令路径上接受 `/fast status`,使帮助/状态文本与文档化的 `status|on|off` 语法对齐,并跨命令面保持当前状态回复一致。修复 #46095。感谢 @weissfl 和 @vincentkoc。 - **Azure OpenAI/自定义提供程序**:对 Azure 自定义提供程序使用 `azure-openai-responses` 路径,因此 Azure OpenAI 端点保持在正确的响应集成面上。(#50851) 感谢 @kunalk16。 - **BlueBubbles/iMessage**:再次合并仅 URL 的入站消息与其链接预览气球,因此共享裸链接不再从代理上下文中删除 URL。感谢 @vincentkoc。 - **浏览器/插件**:当浏览器配置或浏览器工具策略已引用它时自动启用捆绑浏览器插件,并在 `plugins.allow` 排除 `browser` 时显示更清晰的 CLI 错误。 - **CI/开发检查**:将本地 `pnpm check` 默认为较低内存的类型检查/锁路径,同时保持 CI 在正常并行路径上,并加固 Telegram 测试打字/文字,防止原生 TypeScript-Go 工具崩溃。 - **任务**:添加一个小任务流运行时基板,用于编写具有持久等待目标和输出包的层,加上捆绑技能/Lobster 示例以及更丰富的 `flows show` / `doctor` 恢复提示,用于多任务流状态。(#58336) 感谢 @mbelinky 和 @vincentkoc。 - **配置/遗留清理**:在本地配置/服务检测期间停止探测过时的替代遗留配置名称和服务标签,同时保持活动 `~/.openclaw/openclaw.json` 路径规范。 - **配置/运行时**:在内存中固定运行进程的第一次成功配置加载,并在成功写入/重新加载时刷新该快照,因此热路径停止在监视器驱动的交换之间重新解析 `openclaw.json`。 - **配置/SecretRef + 控制 UI**:加固 SecretRef 编辑往返恢复,阻止不安全的原始回退(当原始不可用时强制表单模式),并在配置写入 RPC 持久化之前预检提交的配置 SecretRefs。(#58044) 感谢 @joshavant。 - **配置/Telegram**:在加载时将移除的 `channels.telegram.groupMentionsOnly` 迁移到 `channels.telegram.groups["*"].requireMention`,因此遗留配置不再在启动时崩溃。(#55336) 感谢 @jameslcowan。 - **配置/更新**:停止 `openclaw doctor` 写回持久化插件注入的通道默认值,因此 `openclaw update` 不再播种稍后破坏服务刷新验证的配置键。(#56834) 感谢 @openperf。 - **控制 UI/代理**:在初始文件面板打开时自动加载代理工作区文件,并从有效运行时代理元数据填充概览模型/工作区/回退,因此默认模型不再显示为 `未设置`。(#56637) 感谢 @dxsx84。 - **控制 UI/斜杠命令**:使 `/steer` 和 `/redirect` 从聊天命令面板工作,具有活动运行 `/steer` 的可见挂起状态,正确的重定向运行跟踪,以及命令菜单中的单个规范 `/steer` 条目。(#54625) 感谢 @fuller-stack-dev。 - **Cron/公告**:保留公告模式的所有可交付文本负载,而不是折叠到最后一块,因此多行 cron 报告完整传递到 Telegram 论坛主题。 - **Cron/隔离会话**:跨重试重启携带完整的实时会话提供程序、模型和认证配置文件选择,因此具有模型覆盖的 cron 作业不再在运行中途模型切换请求时失败或循环。(#57972) 感谢 @issaba1。 - **差异/配置**:从 `diffsPluginConfigSchema.safeParse()` 保留架构形状的插件配置解析,因此直接调用者保留 `defaults` 和 `security` 部分,而不是接收扁平化的工具默认值。(#57904) 感谢 @gumadeiras。 - **差异**:当 `lang` 提示在差异渲染和查看器水合期间无效时回退到纯文本,因此不良或过时的语言值不再破坏差异查看器。(#57902) 感谢 @gumadeiras。 - **Discord/语音**:在转录前对语音入口实施相同的公会频道和成员允许列表检查,因此加入的语音频道不再接受来自配置的 Discord 访问策略之外用户的语音。感谢 @cyjhhh 和 @vincentkoc。 - **Docker/设置**:为本地镜像构建(包括沙箱镜像构建)强制 BuildKit,因此 `./docker-setup.sh` 不再在主机默认为 Docker 遗留构建器时在 `RUN --mount=...` 上失败。(#56681) 感谢 @zhanghui-china。 - **文档/锚点**:修复损坏的英文文档链接,并使 Mint 锚点审计针对英文源文档树运行。(#57039) 感谢 @velvet-shark。 - **医生/插件**:当没有迁移计划时跳过错误的 Matrix 遗留助手警告,并保持捆绑的 `enabledByDefault` 插件在网关启动集中。(#57931) 感谢 @dinakars777。 - **执行审批/macOS**:在推导 shell 负载和始终允许模式之前展开 `arch` 和 `xcrun`,因此包装器审批保持绑定到携带的命令而不是外部载体。感谢 @tdjackey 和 @vincentkoc。 - **执行审批**:在持久化始终允许信任之前展开 `caffeinate` 和 `sandbox-exec`,因此稍后 shell 负载更改仍需要新鲜审批。感谢 @tdjackey 和 @vincentkoc。 - **执行/审批**:当 `execApprovals.approvers` 未设置时从现有所有者配置推断 Discord 和 Telegram 执行审批者,将默认审批窗口延长到 30 分钟,并澄清审批不可用指导,因此审批不会显得静默消失。 - **执行/审批**:将 `awk` 和 `sed` 系列二进制文件保留在低风险 `safeBins` 快速路径之外,并停止医生配置文件脚手架将它们视为普通自定义过滤器。感谢 @vincentkoc。 - **执行/环境**:在主机执行中阻止代理、TLS 和 Docker 端点环境覆盖,因此请求范围的命令不能静默重路由出站流量或信任攻击者提供的证书设置。感谢 @AntAISecurityLab。 - **执行/环境**:阻止 Python 包索引覆盖变量来自请求范围的主机执行环境清理,因此包获取不能通过调用者提供的索引重定向。感谢 @nexrin 和 @vincentkoc。 - **执行/节点**:停止网关端工作目录回退重写显式 `host=node` cwd 值到网关文件系统,因此远程节点执行审批和运行保持使用预期的节点本地目录。(#50961) 感谢 @openperf。 - **执行/运行时**:将隐式执行默认为 `host=auto`,仅当存在沙箱运行时将该目标解析为沙箱,保持显式 `host=sandbox` 在没有沙箱时失败封闭,并在运行时状态/文档中显示 `/exec` 有效主机状态。 - **执行**:当隐式沙箱主机没有沙箱运行时失败封闭,并阻止已拒绝的异步审批后续从同一会话重复使用先前的命令输出。(#56800) 感谢 @scoootscooob。 - **Feishu/组**:保持引用回复和主题引导上下文与组发送者允许列表对齐,因此仅允许列表的线程消息种子代理上下文。感谢 @AntAISecurityLab 和 @vincentkoc。 - **网关/附件**:将大型入站图像卸载到文本仅运行而不泄漏 `media://` 标记,为模型输入/转录保留混合附件顺序,以及当无法解析模型图像能力时失败封闭。(#55513) 感谢 @Syysean。 - **网关/认证**:在 WebSocket 握手尝试期间,即使调用者也发送设备令牌候选,保持共享认证速率限制活动,因此虚假设备令牌字段不再抑制共享秘密暴力跟踪。感谢 @kexinoh 和 @vincentkoc。 - **网关/认证**:在受信代理 HTTP 操作员请求上拒绝不匹配的浏览器 `Origin` 头,同时保持无来源的无头代理客户端工作。感谢 @AntAISecurityLab 和 @vincentkoc。 - **网关/设备令牌**:令牌轮换后断开活动设备会话,因此新轮换的凭据立即撤销现有实时连接,而不是等待这些套接字自然关闭。感谢 @zsxsoft 和 @vincentkoc。 - **网关/健康**:将通道描述符中的网络钩子与轮询账户模式携带到运行时快照,因此像 LINE 和 BlueBubbles 这样的被动通道跳过错误的陈旧套接字健康失败。(#47488) 感谢 @karesansui-u。 - **网关/配对**:恢复 QR 引导引导交接,因此新鲜 `/pair qr` iPhone 设置可以自动批准初始节点配对,接收可重用节点设备令牌,并停止重试已用引导认证。(#58382) 感谢 @ngutman。 - **网关/OpenAI 兼容性**:在 `/v1/responses` 上接受扁平响应 API 函数工具定义,并在将托管工具规范化为嵌入式运行器时保留 `strict`,因此像 Codex 这样的规范兼容客户端不再失败验证或静默丢失严格工具强制。(#49089) 感谢 @malaiwah 和 @vincentkoc。 - **网关/OpenAI HTTP**:恢复对省略 `x-openclaw-scopes` 的承载认证请求的默认操作员范围,因此无头 `/v1/chat/completions` 和会话历史调用者在最近的方法范围强化后再次工作。(#57596) 感谢 @openperf。 - **网关/插件**:将插件认证 HTTP 路由运行时客户端范围限定为只读访问,并保持网关认证插件路由在写入范围上,因此插件拥有的网络钩子处理程序默认不继承写入能力的运行时访问。感谢 @davidluzsilva 和 @vincentkoc。 - **网关/SecretRef**:通过合并服务/运行时环境源解决重启令牌漂移检查,并对不支持的易变 SecretRef 加 OAuth 配置文件组合硬失败,因此重启警告和政策执行与运行时行为匹配。(#58141) 感谢 @joshavant。 - **网关/工具 HTTP**:收紧 HTTP 工具调用授权,因此仅所有者工具保持在 HTTP 调用路径之外。(#57773) 感谢 @jacobtomlinson。 - **强化异步审批后续在仅 webchat 会话中的传递**(#57359) 感谢 @joshavant。 - **心跳/认证**:防止执行事件心跳运行从会话传递目标继承仅所有者工具访问,因此节点执行输出保持在非所有者工具面上,即使目标会话属于所有者。感谢 @AntAISecurityLab 和 @vincentkoc。 - **钩子/配置**:在 `hooks.mappings[].channel` 中接受运行时通道插件 ID(例如 `feishu`),而不是在配置验证期间拒绝非核心通道。(#56226) 感谢 @AiKrai001。 - **钩子/会话路由**:在隔离调度之前将钩子触发的 `agent:` 会话键重新绑定到实际目标代理,因此专用钩子代理保持其自己的会话范围工具和插件身份。感谢 @kexinoh 和 @vincentkoc。 - **主机执行/环境**:阻止可以重定向 Docker 端点、信任根、编译器包含路径、包解析或 Python 环境根的请求范围环境覆盖在批准的主机运行期间。感谢 @tdjackey 和 @vincentkoc。 - **图像生成/构建**:将稳定的运行时别名文件写入 `dist/` 并通过这些别名路由提供程序认证运行时查找,因此图像生成提供程序在重建后保持解析认证/运行时模块,而不是在缺失哈希块文件时崩溃。 - **iOS/Live Activities**:在 `LiveActivityManager.swift` 中将 `ActivityKit` 导入标记为 `@preconcurrency`,因此 Xcode 26.4 / Swift 6 构建在严格并发检查上停止失败。(#57180) 感谢 @ngutman。 - **LINE/ACP**:添加当前会话绑定和入站绑定路由对等,因此 `/acp spawn ... --thread here`、配置的 ACP 绑定和活动会话绑定的 ACP 会话在 LINE 上像其他会话通道一样工作。 - **LINE/Markdown**:在剥离 markdown 时保留拉丁、西里尔和 CJK 单词内的下划线,同时仍移除共享文本运行时路径(LINE 和 TTS 使用)上的独立 `_italic_` 标记。(#47465) 感谢 @jackjin1997。 - **LINE/状态**:停止 `openclaw status` 在已配置消毒的 LINE 快照时警告缺少凭据,同时仍公开缺失字段是令牌还是密钥。(#45701) 感谢 @tamaosamu。 - **macOS/本地网关**:通过识别当前 `openclaw-gateway` 进程标题并使用当前 `openclaw gateway` 启动形状,停止 OpenClaw.app 在启动后杀死健康的本地网关监听器。 - **macOS/广域发现**:将网关发现切换到 Tailscale MagicDNS 名称,因此 Mac 客户端在变化的 tailnet IP 上更可靠恢复。(#57833) 感谢 @jacobtomlinson。 - **Matrix/CLI 发送**:在出站传递之前启动一次性 Matrix 发送客户端,因此 `openclaw message send --channel matrix` 在加密房间中恢复 E2EE,而不是发送普通事件。(#57936) 感谢 @gumadeiras。 - **Matrix/上下文**:按发送者允许列表过滤获取的房间上下文,因此回复和线程上下文查找不再将非允许列表消息拉入代理上下文。(#58376) 感谢 @jacobtomlinson。 - **Matrix/传递恢复**:在启动恢复期间将 Synapse `User not in room` 重放失败视为永久性,因此中毒的排队消息移动到 `failed/`,而不是在重启后使 Matrix 崩溃循环。(#57426) 感谢 @dlardo。 - **Matrix/直接房间**:恢复新鲜自动加入的 1:1 DM,而不急切持久化仅邀请的 `m.direct` 映射,同时保持命名、别名和显式配置的房间在房间路径上。(#58024) 感谢 @gumadeiras。 - **Matrix/直接房间**:停止信任远程 `is_direct`,为发现的 DM 候选者尊重显式本地 `is_direct: false`,并避免共享房间的额外成员状态查找,因此 DM 路由和修复保持对齐。(#57124) 感谢 @w-sss。 - **Matrix/DM 线程**:保持严格的无名新鲜邀请房间可提升,即使 Matrix 省略可选直接提示,保留修复失败本地 DM 提升同时仍重新验证稍后房间元数据,并保持绑定和线程隔离 Matrix 会话报告正确的路由策略。(#58099) 感谢 @gumadeiras。 - **Matrix/插件加载**:正确打包和源加载加密引导运行时辅助程序,因此当前 `main` 停止警告失败的 Matrix 引导加载和每次调用时的 `matrix/index` 插件 ID 不匹配。(#53298) 感谢 @keithce。 - **Mattermost/WebSocket**:在机器人禁用/启用周期后检测陈旧的 Mattermost WebSocket 会话,因此监控干净重新连接而不是静默保持陈旧。(#53604) 感谢 @Qinsam。 - **媒体/下载**:在媒体保存期间停止跨跨源重定向转发认证和 cookie 头,同时为同源重定向链保留安全请求头。感谢 @AntAISecurityLab 和 @vincentkoc。 - **媒体/图像**:在元数据和调整大小后端运行之前拒绝过大的解码图像输入,因此微小的压缩图像炸弹早期失败,而不是耗尽网关内存。(#58226) 感谢 @AntAISecurityLab 和 @vincentkoc。 - **内存/医生**:也从代理工作区探测 QMD 可用性,因此 `openclaw doctor` 不再错误报告相对 `memory.qmd.command` 配置为损坏,而运行时搜索仍然工作。感谢 @vincentkoc。 - **内存/医生**:当 QMD 会话索引启用时抑制孤立转录清理警告,因此医生不再建议删除 QMD 仍用于回忆的转录历史。(#40584) 感谢 @Gyarados4157 和 @vincentkoc。 - **内存/FTS**:添加可配置的三元组分词加上短 CJK 子串回退,因此内存搜索可以找到中文、日文和韩文文本,而不破坏混合长和短查询。感谢 @carrotRakko。 - **内存/FTS**:在默认内存搜索阈值保持提供程序-less 关键字命中可见,因此仅 FTS 回忆工作而不需要 `--min-score 0`。(#56473) 感谢 @opriz。 - **内存/LanceDB**:从捆绑的 `extensions/memory-lancedb` 路径(包括扁平化 dist 块)解析运行时依赖清单查找,因此启动不再以缺失 `@lancedb/lancedb` 依赖错误失败。(#56623) 感谢 @LUKSOAgent。 - **内存/QMD**:添加 `memory.qmd.searchTool` 作为精确 mcporter 工具覆盖,因此自定义 QMD MCP 工具(如 `hybrid_search`)可以在不削弱验证的 `searchMode` 配置面的情况下使用。(#27801) 感谢 @keramblock。 - **内存/QMD**:即使常规 QMD 更新节奏被禁用或更慢,也尊重 `memory.qmd.update.embedInterval`,通过武装专用嵌入节奏维护计时器,同时当常规更新已经足够频繁时避免冗余计时器。(#37326) 感谢 @barronlroth。 - **内存/QMD**:在构建 QMD 自定义集合时包括去重复的默认值加每代理 `memorySearch.extraPaths`,因此共享和代理特定额外根都一致索引。(#57315) 感谢 @Vitalcheffe 和 @vincentkoc。 - **内存/QMD**:当导出会话 markdown 位于工作区 `qmd/` 目录下时,保持 `memory_search` 会话命中路径往返安全,因此 `memory_get` 可以读取精确返回路径而不是在通用 `qmd/sessions/...` 别名上失败。(#43519) 感谢 @holgergruenhagen 和 @vincentkoc。 - **内存/QMD**:在 `search` 模式中也保持 `qmd embed` 活动,因此 BM25 优先设置仍为稍后向量和混合检索构建完整索引。(#54509) 感谢 @hnshah 和 @vincentkoc。 - **内存/QMD**:在 QMD 会话导出中保持重置和删除的会话转录,因此每日会话重置不静默丢弃 `memory_search` 中的大部分历史回忆。(#30220) 感谢 @pushkarsingh32。 - **内存/QMD**:在 `openclaw memory search` 上传递直接会话密钥,因此 CLI QMD 搜索不再在仅直接范围默认下被拒绝为 `session=<none>`。(#43517) 感谢 @waynecc-at 和 @vincentkoc。 - **内存/QMD**:将 `QMD_CONFIG_DIR` 指向嵌套的 `xdg-config/qmd` 目录,因此每代理集合配置正确解析。(#39078) 感谢 @smart-tinker 和 @vincentkoc。 - **内存/QMD**:从 mcporter 查询结果保留显式 `start_line` 和 `end_line` 元数据,因此 `memory search` 命中保持真实片段偏移而不是回退到片段头。(#47960) 感谢 @vincentkoc。 - **内存/QMD**:当 QMD 报告更改的模式但省略路径元数据时重新绑定集合,因此配置模式更改在重启时停止被静默忽略。(#49897) 感谢 @Madruru。 - **内存/QMD**:在返回搜索命中之前将别名化 `memory_search` 文件提示解析回索引文件系统路径,因此 `memory_get` 对混合大小写和带空格路径再次工作。(#50313) 感谢 @erra9x。 - **内存/QMD**:将 MCP `query` 集合过滤器作为上游 `collections` 数组发送,而不是遗留单数 `collection` 字段,因此 mcporter 支持的 QMD 1.1+ 搜索在统一 `query` 工具迁移后仍正确范围。(#54728) 感谢 @armanddp 和 @vincentkoc。 - **内存/QMD**:跨进程 `qmd embed` 运行序列化在共享锁后并交错定期嵌入计时器,因此多代理 QMD 集合在启动和每个维护间隔停止雷群。(#57744) 感谢 @vincentkoc。 - **内存/QMD**:停止在 `qmd search` 之前重写 Han/CJK BM25 查询,因此 OpenClaw 搜索语义匹配混合和带空格中文查询的直接 QMD 结果。感谢 @vincentkoc。 - **内存/QMD**:从 `qmd status` 公开降级向量状态,因此 `openclaw memory status --deep` 在索引仍有 `0` 向量时警告语义搜索不可用。修复 #28169。感谢 @vincentkoc。 - **内存/QMD**:将空字节集合损坏视为 QMD 将其公开为 `ENOENT` 时相同,因此托管集合修复仍重建和重试,而不是让 QMD 卡在损坏路径上。感谢 @vincentkoc。 - **内存/QMD**:当配置 `memory.backend=qmd` 但 `qmd` 二进制文件缺失时明确警告,因此医生和运行时回退不再作为静默内置降级失败。(#50439) 感谢 @Jimmy-xuzimo 和 @vincentkoc。 - **内存/QMD**:在估计块大小时正确加权 CJK 重型文本,在精细分割期间保留代理对字符,并保持长拉丁行在旧块边界上,因此内存索引为 CJK 笔记产生更好大小的块。(#40271) 感谢 @AaronLuo00。 - **内存/会话索引器**:在内存主机会话扫描中包含 `.jsonl.reset.*` 和 `.jsonl.deleted.*` 转录,同时仍排除 `.jsonl.bak.*` 压缩备份和锁文件,因此内存搜索看到存档会话历史而不复制陈旧快照。感谢 @hclsys 和 @vincentkoc。 - **Microsoft Teams/线程**:按发送者允许列表过滤获取的线程历史,因此线程上下文播种不再从不允许用户拉取消息。(#57723) 感谢 @jacobtomlinson。 - **OpenAI/Codex 快速模式**:将 `/fast` 映射到原生 OpenAI 和 Codex 响应端点上的优先级处理,而不是重写推理设置,并记录确切端点和覆盖行为。 - **出站媒体/本地文件**:在配置的 fs 策略上搭载主机本地 `MEDIA:` 读取,而不是单独的媒体根检查,因此生成在工作区外的文件可以在 `tools.fs.workspaceOnly=false` 时发送,而纯文本类主机文件仍被出站媒体允许列表阻止。 - **配对**:对每个账户而不是每个共享通道队列强制执行挂起请求限制,因此一个账户的未决配对挑战不再阻止其他账户的新配对。感谢 @smaeljaish771 和 @vincentkoc。 - **插件/ClawHub**:为范围包名称和斜杠包含的技能别名清理临时存档文件名,因此 `openclaw plugins install @scope/name` 不再在存档下载期间以 `ENOENT` 失败。(#56452) 感谢 @soimy。 - **插件/CLI**:添加描述符支持延迟插件 CLI 注册,因此 Matrix 可以保持其 CLI 模块延迟加载而不从解析时命令注册中删除 `openclaw matrix ...`。(#57165) 感谢 @gumadeiras。 - **插件/CLI**:通过专用非激活 CLI 元数据路径收集根帮助插件描述符,因此启用的插件保持验证的配置语义而不触发仅运行时插件注册工作,同时为仍从完整注册连线命令的遗留通道插件保留运行时 CLI 命令注册。(#57294) 感谢 @gumadeiras。 - **插件/外观**:用缓存优先信号保护捆绑插件外观加载,因此循环重新进入停止在网关插件启动期间崩溃 `xai`、`sglang` 和 `vllm`。(#57508) 感谢 @openperf。 - **插件/Matrix**:将 Matrix 加密 WASM 运行时依赖镜像到根打包安装并强制根/插件依赖对等,因此捆绑 Matrix E2EE 加密在 shipped 构建中正确解析。(#57163) 感谢 @gumadeiras。 - **插件/启动**:阻止工作区 `.env` 覆盖 `OPENCLAW_BUNDLED_PLUGINS_DIR`,因此捆绑插件信任根仅来自继承的运行时环境或包解析,而不是 repo 本地 dotenv 文件。感谢 @nexrin 和 @vincentkoc。 - **沙箱/浏览器**:在沙箱浏览器镜像中安装 `fonts-noto-cjk`,因此截图正确渲染中文、日文和韩文文本,而不是豆腐块。修复 #35597。感谢 @carrotRakko 和 @vincentkoc。 - **安全/LINE**:使网络钩子签名验证在提供的签名长度错误时也运行定时安全比较,关闭小定时侧信道。(#55663) 感谢 @gavyngong。 - **会话/Feishu**:在共享会话助手解析中保留合法嵌入 `:topic:` 的会话 ID,同时保持 Telegram 主题会话解析完整。(#58100) 感谢 @gumadeiras。 - **Slack/状态反应**:在 Slack 监视器中为排队、思考、工具、完成和错误阶段添加反应生命周期,具有更安全的清理,因此排队确认反应在静默运行、回复前失败和延迟转换期间保持正确。(#56430) 感谢 @hsiaoa。 - **状态/仅节点主机**:教导 `openclaw status` 处理当前 `main` 上仅节点主机而没有旧混合网关假设。(#56718) 感谢 @ImLukeF。 - **状态**:通过从提示侧令牌字段推导分母而不是潜在过小的 totalTokens 修复缓存命中率超过 100%。修复 #26643。 - **Telegram/音频**:在本地 `whisper-cli` 自动回退运行之前转码 Telegram 语音笔记 `.ogg` 附件,并在 `tools.media.audio` 未设置时在自动模式保持提及预飞转录启用。 - **Telegram/论坛主题**:恢复回复路由到活动主题并将 ACP `sessions_spawn(..., thread=true, mode="session")` 绑定到同一主题,而不是回退到根聊天或丢失后续路由。(#56060) 感谢 @one27001。 - **Telegram/媒体**:在媒体下载期间允许 RFC 2544 基准范围 Telegram CDN 分辨率,因此语音消息、PDF 和其他附件不再以 `Failed to download media` 失败。(#57624) 感谢 @MoerAI。 - **Telegram/原生命令**:前缀原生命令菜单回调负载并在 Telegram 通过回调查询重放它们时保留 `CommandSource: "native"`,因此即使文本命令路由被禁用,`/fast` 和其他原生命令菜单也保持工作。感谢 @vincentkoc。 - **Telegram/轮询**:通过将最近非轮询 API 活动视为有界活跃而不是硬停顿,使看门狗不中止长时间回复传递。(#56343) 感谢 @openperf。 - **工具/web_fetch**:为仅代理安装添加显式受信环境代理路径,同时保持严格 SSRF 获取在固定直接路径上,因此受信代理路由不削弱严格目的地绑定。(#50650) 感谢 @kkav004。 - **工具/web_search**:将共享搜索缓存本地化到模块范围,因此相同进程全局符号查找不能再检查或突变缓存的网络搜索响应。感谢 @vincentkoc。 - **TTS/Microsoft**:对于 CJK 主导文本自动切换默认 Edge 语音为中文,而不覆盖显式选择的 Microsoft 语音。(#52355) 感谢 @extrasmall0。 - **TTS**:恢复 3.28 架构兼容性和回退可观测性。(#57953) 感谢 @joshavant。 - **TUI/聊天**:通过延迟本地运行绑定直到第一个网关聊天事件揭示真实运行 ID,在活动运行期间保持乐观出站用户消息可见,防止过早历史重新加载擦除挂起的本地发送。(#54722) 感谢 @seanturner001。 - **TUI/模型选择器**:保持可搜索 `/model` 和 `/models` 输入模式不劫持 `j`/`k` 作为导航键,并在 `m` 过滤模型列表下硬化宽度边界,因此搜索不再在长行上崩溃。(#30156) 感谢 @briannicholls。 - **语音呼叫/媒体流**:在 `start` 验证之前限制入站 WebSocket 帧大小,因此过大的启动前帧在 JSON 解析之前被丢弃。感谢 @Kazamayc 和 @vincentkoc。 - **语音呼叫/Plivo**:将存储的回调基础固定到配置的公共网络钩子 URL,因此稍后呼叫控制重定向保持在预期源上,即使网络钩子传输元数据不同。感谢 @zsxsoft 和 @vincentkoc。 - **Web UI/Markdown**:停止裸自动链接吞并相邻 CJK 文本,同时在渲染链接中保留有效的混合脚本路径和查询字符。(#48410) 感谢 @jnuyao。 - **审批/UI**:将最新挂起审批保持在控制 UI 队列前端,因此批准一个请求不意外目标更早过期的 ID。感谢 @vincentkoc。 - **认证配置文件/OAuth**:在保存轮换凭据时刷新运行时认证快照,因此 OAuth 提供程序不在第一次令牌轮换后重用消耗的刷新令牌。修复 #55389。感谢 @sam26880 和 @vincentkoc。 - **浏览器/截图**:在原始 CDP 截图中使用 `fromSurface: false` 以避免 Chromium 合成器错误,该错误丢弃跨源图像纹理(QR 码、CDN 资产),并在完整页面视口扩展期间保留预存在设备仿真状态。(#54358) 感谢 @FMLS。 - **ClawDock/文档**:将帮助脚本移动到 `scripts/clawdock`,将 ClawDock 作为文档站点上的第一类文档页面发布,并记录从新原始 GitHub 路径重新安装本地帮助副本。(#23912) 感谢 @Olshansk。 - **控制 UI/网关**:在客户端停止时清除排队的浏览器连接超时,因此中止或替换的网关客户端在关闭后不发送延迟连接请求。(#57338) 感谢 @gumadeiras。 - **控制 UI/网关**:当检测到网关事件序列间隙时重新连接浏览器客户端,因此陈旧非聊天状态自动恢复而不是仅仅告诉用户刷新。(#23912) 感谢 @Olshansk。 - **执行审批/通道**:统一 Discord 和 Telegram 执行审批运行时处理,将审批按钮移动到共享交互式回复模型上,并修复 Telegram 审批按钮和键入 `/approve` 命令,因此配置的审批者可以再次可靠解决请求。(#57516) 感谢 @scoootscooob。 - **网关/SQLite 瞬态处理**:在全局拒绝处理器中保持未处理的 `SQLITE_CANTOPEN`、`SQLITE_BUSY`、`SQLITE_LOCKED` 和 `SQLITE_IOERR` 失败非致命,因此 macOS LaunchAgent 重启不进入崩溃限制循环。(#57018) - **钩子/插件/技能**:阻止工作区 `.env` 覆盖捆绑根目录,因此工作区启动不能将捆绑信任根重定向离开打包默认值。感谢 @nexrin 和 @vincentkoc。 - **LINE/网络钩子**:限制共享并发预验证网络钩子体读取,因此过多请求在进入 LINE 体处理程序之前被拒绝。感谢 @nexrin 和 @vincentkoc。 - **内存/QMD**:为工作区外的共享路径保留显式自定义集合名称,因此 `memory_search` 停止为外部管理的 QMD 集合追加 `-<agentId>`。(#52539) 感谢 @lobsrice 和 @vincentkoc。 - **内存/内置**:在仅 FTS 模式(无嵌入提供程序)中保持内存文件索引活动,因此强制重新索引不再交换进空索引并擦除现有内存块。(#42714) 感谢 @asamimei。 - **Nostr/配置**:在配置快照和控制 UI 配置视图中编辑 `channels.nostr.privateKey`,因此 Nostr 签名密钥不再以明文显示。感谢 @ccreater222。 - **插件审批**:在 `plugin.approval.resolve` 上接受唯一短审批 ID 前缀,匹配执行审批并恢复聊天审批面上的 `/approve` 回退流程。感谢 @vincentkoc。 - **SSH 沙箱/上传**:在同步到远程沙箱之前拒绝解析到上传树之外的 workspace 符号链接,因此稍后代理写入不能通过逃逸链接重定向。感谢 @AntAISecurityLab 和 @vincentkoc。 - **Slack/交互式回复**:从两者解析 Slack Block Kit 回复传递:作者 `channelData.slack.blocks` 负载和指令生成的交互式回复,并保持 Slack 按钮样式映射到有效 Block Kit 按钮渲染,因此交互式回复停止在 Slack 特定传递路径上丢弃。感谢 @vincentkoc。 - **子代理/公告**:为内联确定性工具生成保留请求代理 ID,因此没有通道绑定的命名代理仍可以通过正确的所有者会话公告完成。(#55437) 感谢 @kAIborg24。 - **Telegram/Anthropic 流式**:用安全重试消息替换原始无效流顺序提供程序错误,因此内部 `message_start/message_stop` 失败不泄漏到聊天中。(#55408) 感谢 @imydal。 - **Tlon/媒体**:将入站图像下载路由到共享媒体存储,将每个下载限制在 6 MB,并在每条消息后 8 张图像停止,因此大型 Tlon 帖子不再膨胀本地媒体存储。感谢 @AntAISecurityLab 和 @vincentkoc。 - **代理/实时切换**:停止瞬态 cron 和子代理模型覆盖被误读为持久实时会话切换,因此隔离运行不再以 `LiveSessionModelSwitchError` 失败。感谢 @vincentkoc。 - **代理/工具调用修复**:当提供程序前导码出现在 JSON 负载之前时恢复格式错误的 Kimi/OpenRouter 工具调用参数流,并在非工具前导文本上失败封闭,因此片段字符串在子代理运行期间不泄漏到文件系统路径参数中。(#56560) 感谢 @Originalwhite。 - **网关/启动**:在静态模型路径上保持配置的主模型预热,因此容器引导不快照加载提供程序运行时图,只是为了验证配置的模型。感谢 @vincentkoc。 - **OpenAI/响应**:在 OpenAI、Codex 和 Azure OpenAI 请求构建器上省略禁用的推理负载,因此 GPT-5 端点不再拒绝 `reasoning.effort: "none"`。(#58208) 感谢 @jalehman。 - **WhatsApp/出站**:在最近的通道接缝重构后恢复运行时发送/操作路由和出站兼容性,因此出站发送、反应和相关媒体操作保持到达活动会话。 - **xAI/响应**:为 xAI 响应负载规范图像承载工具结果,包括 OpenResponses 风格 `input_image.source` 部分,因此图像工具重放不再在后续回合上 422。(#58017) 感谢 @neeravmakwana。 - **Zalo/网络钩子**:将重放去重范围限定到认证目标,因此一个配置的账户不再导致另一个目标的相同 ID 入站事件被丢弃。感谢 @smaeljaish771 和 @vincentkoc。 - **插件/提示构建**:在合并 `before_prompt_build` 钩子结果时保留最高优先级的 `systemPrompt`,而不是让较低优先级钩子覆盖它。(#58375) - **Tlon/设置迁移**:在迁移期间保留显式空数组设置,因此重启时重新播种不再恢复较旧的文件配置值。(#58370) - **插件/市场**:通过公开受保护的下载失败为结构化安装错误并从最终解析的 URL 派生临时文件名来加固市场存档安装。(#58267) - **UI/DOM 安全**:使用 DOM 节点而不是注入的 HTML 字符串构建聊天删除确认弹出窗口和 Canvas Host 回退状态行。(#58269, #58266) - **媒体/文件处理**:在共享 OpenClaw 临时根下创建图像临时工作目录,并停止从回复或工具源路径放宽允许的本地媒体根,保持本地媒体访问限制到配置的和代理范围的根。(#58270, #57770) - **Telegram/安全**:将遗留配对 `allowFrom` 状态迁移到仅 `default` 账户,并门控组语音消息预飞转录在发送者授权上,因此未经授权的发送者不能在丢弃前触发付费转录。(#58165, #57566) - **执行审批**:停止 shell 初始化文件标志匹配持久化脚本路径审批,检测工具如 `awk`、`find`、`xargs`、`make` 和 `sed` 中的命令载体内联求值,并将 awk 系列视为解释器类,因此始终允许决定不再持久化解释器路径。(#58369, #57842, #57772) - **语音呼叫/Telnyx**:在派生重放键之前规范化验证的网络钩子签名,因此等效 Base64 和 Base64URL 编码正确去重。(#57829) - **网关/HTTP 信任边界**:忽略自声明承载范围,默认拒绝危险 HTTP 工具调用路径,在 `/v1/embeddings` 上需要写入范围,并将 OpenAI 兼容 `/v1/chat/completions` 加 `/v1/responses` 入口绑定为非所有者,因此外部 HTTP 调用者不能自我升级访问。(#57783, #57771, #57721, #57769, #57778) - **网关/受信配置和引导**:清除无设备 `trusted-proxy` WebSocket 连接的自声明范围,并将控制 UI 引导负载修剪到正常握手之前仅需要的字段。(#57692, #57727) - **技能和工作区安全**:用 symlink 安全、根限制加载器替换原始技能文件读取,并将仅工作区 `apply_patch` 删除和目录创建突变固定到验证的工作区根,因此路径重绑定竞争失败封闭。(#57519, #56016) - **环境和文件系统强化**:阻止工作区 `.env` 文件中的凭据和网关认证环境变量,始终剥离危险继承的主机环境变量如 `BROWSER` 和 `GIT_EDITOR`,并保持敏感主机路径和 OpenClaw 状态根被阻止,即使外部沙箱绑定源被允许。(#57767, #57559, #56024) - **OpenShell 和 ACP 文件边界**:在 OpenShell 镜像同步期间跳过符号链接并保留仅主机受信目录,并将 ACP 附件读取通过共享附件缓存路由,因此允许根之外的本地文件不再被转发。(#57693, #57690) - **通道/网络钩子授权**:跳过 Discord 音频预飞转录用于未授权公会发送者,为 Synology Chat 网络钩子添加共享预认证飞行中保护,并在 JSON 体解析之前验证 Microsoft Teams 承载认证。(#57695, #57722, #57686) - **基础架构/随机性**:在受影响的标识符和延迟抖动路径中用共享安全随机助手替换 `Math.random()`,包括 UI UUID 生成。(#57744)