← 返回更新日志

OpenClaw v2026.5.14-beta.2 预发布

2026-05-15 · GitHub 原文
### 变更 - 频道/SDK:新增标准化命令转向事实,用于频道转向构建,并为插件入站上下文暴露命令转向辅助函数。 - 代理/配置:支持对 `contextInjection`、`bootstrapMaxChars` 和 `bootstrapTotalMaxChars` 进行按代理引导配置文件覆盖,省略时继承 `agents.defaults`。修复 #69966。感谢 @BunsDev。 - 依赖项:将根级 ambient Node 代理路由至 `@openclaw/proxyline`,并移除根级 `proxy-agent`、`https-proxy-agent` 和 `minimatch` 依赖。 - Canvas:对 HTTP 主机、托管媒体解析器、CLI 实现及工具运行时模块进行懒加载,使得 Gateway 启动仅在首次使用时产生 Canvas 实现成本。(#82001)感谢 @samzong。 - 控制 UI/i18n:新增 `pnpm ui:i18n:report` 基线报告,用于硬编码文案关注区域及语言区域回退元数据。(#81320)感谢 @samzong。 - 维护工具:为 Codex 结项审查新增仓库本地 `codex-review` 技能,包括本地脏工作及 PR 分支审查辅助函数,可重复运行直到无接受/可操作的发现,并通过 `--base` 避免不支持的內联提示。 - 维护工具:当拉取请求添加包补丁文件或 pnpm 补丁依赖时,CI 失败,保持上游及升级依赖工作流。 - Codex 应用服务器:将评论序言流式传输到可编辑的频道进度草稿中,而不将其提升为最终答案。 - Codex 迁移:移除捆绑的 `codex-cli` 后端,并将遗留的 `codex-cli/*` 模型引用修复至 `openai/*` 上的 Codex 应用服务器路由。 - Gateway/启动:为认证、插件加载、查找计数及插件 sidecar 服务添加所有者级启动跟踪归因。(#81738)感谢 @samzong。 - 插件/钩子:在 `llm_output` 和清理后的 `model_call_*` 钩子事件/上下文中暴露解析后的有效 `contextTokenBudget` 及来源/引用元数据,以便插件成本和上下文健康警报可使用代理级上下文上限。修复 #64327。感谢 @BunsDev。 - 频道/状态反应:将 `StatusReactionController` 接入 WhatsApp 消息回合(排队→思考→工具→完成/错误生命周期,与 Telegram 和 Discord 一致),新增包含工具令牌路由的 `deploy`/`build`/`concierge` 表情符号类别,并用自解释的表情符号(🧠 思考中、🛠️ 工具、💻 编码中、🌐 网页、⏳ 软停滞、⚠️ 硬停滞、✅ 完成、❌ 错误、🗜️ 压缩中)替换状态反应默认值,使得停滞和生命周期反应读起来像状态指示器而非情绪评论。修复 #59077。(#80612)感谢 @gado-ships-it。 - 控制 UI:在外观和快速设置中添加浏览器本地文本大小设置,可缩放聊天和密集 UI 文本,同时使输入框保持在移动 Safari 焦点缩放阈值以上。修复 #8547。感谢 @BunsDev。 - 文档:新增专门的 ds4 提供者页面,包含本地 DeepSeek V4 Flash 配置、按需启动、上下文大小调整及实时验证步骤。 - 发布验证:新增包安装的 Docker 用户旅程通道,验证引导、模拟模型设置、外部插件安装/卸载、ClickClack 出站/入站消息、Gateway 重启存活及诊断。 - 发布验证:新增包安装的 Docker 通道,涵盖真实 TTY 引导、媒体与持久化内存、已发布包的升级旅程以及本地市场插件安装/更新/卸载覆盖。 - 维护者:新增 Clawdtributor 技能,用于基于 Discrawl 的贡献者 PR 分类、实时状态检查及紧凑审核格式化。 - Telegram:在通用消息展示载荷中支持 Mini App `web_app` 按钮,允许 `openclaw message send --presentation` 在私聊中渲染 Telegram Web App 内联按钮。(#81356)感谢 @jzakirov。 - 脚本:新增 `OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree`,使高容量本地工作树可使用独立重检查锁,同时共享锁保持默认。修复 #80729。(#80734)感谢 @samzong。 - 代理/子代理:在子会话的第一个可见 `[Subagent Task]` 消息中交付原生 `sessions_spawn` 任务,而非将任务隐藏在子代理系统提示中,从而在不重复令牌的情况下保持委托可审计。修复 #78592。感谢 @bradestes 和 @stainlu。 - 消息/队列:使回合中提示默认通过 `/queue steer` 引导活动运行,保留 `/queue followup` 和 `/queue collect` 给希望消息默认排队的用户,并在引导不可用时使 `/steer` 作为正常提示继续。(#77023)感谢 @fuller-stack-dev。 - 语音通话/Telnyx:为对话式语音通话新增实时媒体流式通话支持。(#81024)感谢 @dynamite-bud。 - 依赖项:新增发布依赖证据报告、npm 建议门控以及 PR 依赖变更感知,使维护者可在发布前和发布期间审查依赖风险。感谢 @joshavant。 - Gateway:在代理事件载荷上暴露可选的 `isHeartbeat` 元数据,使客户端能区分计划的心跳运行与普通聊天运行。(#80610)感谢 @medns。 - 代理:新增 `agents.defaults.runRetries` 和 `agents.list[].runRetries` 配置,用于嵌入式 Pi 运行器重试循环上限。(#80661)感谢 @medns。 - Codex:新增基于节点的 Codex CLI 会话列表和绑定,使 OpenClaw 对话可继续在配对节点上运行的现有 Codex CLI 会话。 ### 修复 - 模型/提供者:信任精确配置的自定义/本地提供者 `baseUrl` 来源,用于受保护的模型 HTTP 请求,使得环回、LAN、tailnet 和私有 DNS 端点可在不同端口以及元数据/链路本地枢轴保持封锁的情况下正常工作,无需广泛的私有网络访问。修复 #80732。(#80751)感谢 @Kaspre 和 @msitarzewski。 - 在组合选项后绑定 shell 脚本操作数 [AI]。(#81882)感谢 @pgondhi987。 - fix(canvas):验证快照响应格式 [AI]。(#81881)感谢 @pgondhi987。 - 约束提供者目录条目路径 [AI]。(#81884)感谢 @pgondhi987。 - 要求规范节点平台 ID [AI]。(#81880)感谢 @pgondhi987。 - 代理/Azure OpenAI Responses:将未设置的 Azure OpenAI API 版本默认设为 `preview`,使 `/openai/v1/responses` 调用使用 Azure 当前的 Responses API 路由。(#82026)感谢 @leoge007。 - 控制 UI/WebChat:将桌面聊天头部控件压缩为单一对齐行,使得会话、模型、思考及操作控件不再浪费垂直空间。感谢 @BunsDev。 - 代理:对通用 `anthropic-messages` 提供者重试空的最终回合,而非将非可见恢复限制于 Kimi,使自定义/代理的 Anthropic 兼容路由可通过可见答案恢复。涉及 #46080。感谢 @wmgx、@w1tv 和 @iFwu。 - 代理/回复:从用户可见的清理路径中移除工作流 `<function_response>` 脚手架,使原始工具输出不会泄露到聊天历史、转录镜像或频道回复中。修复 #47444。感谢 @5toCode。 - 代理/媒体:通过结构化附件交付生成的图像、音乐和视频结果,将仅消息工具的 Codex 补全保留在消息工具上,并在预期媒体实际未发送时使补全交接失败。 - 诊断/Codex:在较短的默认停滞运行窗口过后恢复停滞的嵌入式 Codex 应用服务器运行,使排队的回合更快恢复。 - 控制 UI:每次构建轮换浏览器服务工作线程缓存,使更新的 Gateway 不太可能继续提供触发协议不匹配错误的陈旧仪表板包。 - Gateway/协议:在首次使用时懒编译协议验证器,而非在冷导入时编译每个 AJV 模式,从而减少启动 CPU 和 RSS。(#82064)感谢 @samzong。 - Discord:在启动时报告未解析的已配置机器人令牌 SecretRef,而非将账户视为未配置。(#82009)感谢 @giodl73-repo。 - CLI/配置:在 `config patch` 递归合并期间保留数字外观的对象键,例如 Discord 公会 ID。(#81999)感谢 @giodl73-repo。 - Gateway/OpenAI 兼容 HTTP:将 `response_format` 从 `/v1/chat/completions` 请求通过代理流参数转发到上游 Chat Completions 和 Responses 传输,恢复结构化输出支持。修复 #82003。(#82004)感谢 @Lellansin。 - 控制 UI/WebChat:让侧边栏 Markdown 代码块的复制按钮使用与聊天消息相同的委托剪贴板处理器。(#58709)感谢 @tikitoki。 - Discord/流式:仅在最终编辑或回退交付成功后标记部分草稿预览已交付,使得失败的最终化清理移除陈旧的截断草稿,而非将其保留为可见回复。修复 #82035。感谢 @compoodment。 - macOS/Gateway:在 `openclaw gateway status --deep` 和诊断中显示残留的 `ai.openclaw.update.*` launchd 更新器作业,使更新后的 launchd 循环指向陈旧的作业清理。修复 #81859。感谢 @BKF-Gitty。 - macOS/屏幕快照:在捕获前拒绝格式错误的 `screen.snapshot` 参数,将 base64 结果限制在预期 `node.invoke.result` 框架内,并为超大载荷和捕获失败保留稳定的调用方可见错误。修复 #68181。感谢 @shaun0927 和 @BunsDev。 - 配置/诊断:按工件时间戳轮换有上限的 `.clobbered.*` 修复快照,使得重复修复保留最新的取证副本,而非仅保留第一组上限集合。(#82012)感谢 @Kaspre。 - Telegram:在隔离轮询排干缓冲的更新之前初始化机器人,使得默认的隔离轮询不再以 `Bot not initialized` 重试每个更新并导致回复停滞。修复 #81973。(#81975)感谢 @neeravmakwana。 - Telegram:对直接消息/操作客户端应用方法感知的 Bot API 请求超时,使得当 API 请求卡住时,`openclaw message delete --channel telegram` 不再等待 grammY 的 500 秒默认超时。修复 #81908。感谢 @DashLabsDev。 - Cron:将尝试分发和组装上下文视为执行开始的里程碑,使得已到达后端分发的隔离代理作业受配置的作业超时而非 60 秒预执行看门狗控制。修复 #81368。(#81871)感谢 @alexph-dev。 - 诊断/认证:对陈旧的按代理 OAuth 认证配置影子发出警告,并让 `openclaw doctor --fix` 移除本地影子,使代理继承更新的主代理凭据。 - 状态/频道:将插件设置加载失败的已配置频道显示为“插件加载失败:依赖树损坏;运行 openclaw doctor --fix”,而非静默地将其从 `openclaw status` 中移除。 - 状态/更新:在 `openclaw status` 中显示待处理或失败的更新重启交接,并使 `openclaw update` 打印明确的网关重启已验证、已跳过或已失败指引。 - QA/更新:新增 E2E 损坏插件依赖通道,验证 `status --all` 指引、`doctor --fix` 清理及频道状态恢复。 - Discord/频道:使 `openclaw channels list --all` 优先选择可达的 Gateway 运行时账户状态,并标记已配置但不可用的凭据,避免在 Discord 仅从服务环境运行时输出错误的“未配置”。修复 #79343。感谢 @EricY019。 - WhatsApp:将文本斜杠命令标记为命令转向,使得授权的群组命令回复在仅消息工具的群组回复模式下保持可见。(#81972)感谢 @barbarhan。 - 提供者/OpenCode Go:停止向 Kimi K2.5/K2.6 发送不支持的推理参数,避免 OpenCode Go 载荷验证失败,同时保留 DeepSeek V4 推理支持。 - 安装程序:处理来自移动引用的非交互式 git 安装,避免标签获取冲突,同时在冻结锁定文件安装时保留不可变引用。(#81875)感谢 @keshavbotagent。 - Codex 应用服务器:每次运行和压缩尝试时注入原生客户端工厂,而非使用模块范围的测试状态,避免在循环启动期间的暂时死区读取。(#81148)感谢 @bdjben。 - 插件技能:在发布当前技能链接之前替换生成的 Windows 插件技能目录,避免来自陈旧非符号链接条目的重复 `EINVAL` 警告。修复 #81432。(#81446)感谢 @hclsys 和 @vincentkoc。 - 频道/配置:将仅包含 `enabled: true` 的频道条目视为已配置状态,使插件支持的频道可通过显式开关自动启用。修复 #81323。(#81331)感谢 @EvanYao826 和 @vincentkoc。 - CLI/更新:为外部交换的核心运行时添加更新最终化路径,在报告完成之前运行更新时的诊断修复和插件收敛,基于诊断后配置和安装记录状态。感谢 @shakkernerd。 - CLI/更新:在包更新诊断修复后、插件同步前刷新配置,避免在包升级旅程中出现陈旧哈希冲突。 - macOS/Gateway:将托管的 LaunchAgent 包自更新交给退出后 CLI 路径,并通过更新重启哨兵报告交接失败,而非让代理触发的更新保持待处理状态。修复 #81894。(#81945)感谢 @BKF-Gitty。 - 代理/WebChat:停止成功的助手回合,其陈旧的 `errorMessage` 匹配计费、认证或速率限制模式,从而不会轮换配置、回退或显示硬性 `FailoverError`,除非当前尝试确实存在故障转移失败。(#70900)感谢 @truffle-dev。 - 控制 UI/使用情况:移除重复的内部使用量页面标题,使共享仪表板标题成为唯一页面标题。感谢 @BunsDev。 - 控制 UI/WebChat:当独立安全区域插入报告不足时,使移动 PWA 合成器控件保持在 iOS 主页指示器上方。修复 #77408。感谢 @BunsDev。 - 控制 UI/日志:使 Gateway 日志流高度响应视口并带有最小高度下限,使得较大屏幕可显示显著更多的日志行,同时在较矮视口上不会折叠。(#53916)感谢 @extrasmall0。 - ACP/Codex:为通用 ACP 内部失败显示经过编辑的 Codex 包装器 stderr,并在隔离的 `CODEX_HOME` 中保留安全的 Codex 模型/提供者路由,使得 `sessions_spawn(runtime="acp", agentId="codex")` 失败可操作。修复 #80079。(#80718)感谢 @leoge007。 - 代理/跟踪:当合并的回退尝试证明在获胜尝试之前主模型失败时,将执行跟踪标记为已使用回退,保持 `/trace raw` 和代理 JSON 遥测一致。涉及 #81213 中的回退遥测。感谢 @BKF-Gitty。 - ACP:将拒绝的超时配置选项视为尽力而为提示,使 ACP 回合继续使用不支持 `session/set_config_option` 超时键的适配器。修复 #81250。(#81603)感谢 @qkal。 - Cron/Codex:将精确命令的计划代理回合默认为轻量级引导上下文,使自动化在加载工作区身份或内存上下文之前运行命令。 - Codex cron:为轻量级应用服务器 cron 回合禁用原生 Codex 项目文档加载,使得在 OpenClaw 抑制引导上下文后,计划作业避免项目文档注入。(#81822)感谢 @jalehman。 - Codex 插件/Gateway:从 Codex 应用服务器 JSON-RPC 载荷中剥离未配对的 UTF-16 代理项,并让陈旧的回复工作恢复中止停滞的回复运行,防止格式错误的媒体回合卡住网关通道。 - Codex 应用服务器:强制 OAuth 刷新请求执行真正的令牌刷新,而非在刷新失败后重用未更改的继承认证配置文件令牌。(#80738)感谢 @simplyclever914。 - 控制 UI/WebChat:将 `/tts audio` 回复作为可播放的音频附件通过助手媒体工单路径渲染,并为较旧的实时载荷提供结构化音频兼容性。(#81722)感谢 @Conan-Scott。 - 将网关批准访问绑定到请求者元数据 [AI]。(#81380)感谢 @pgondhi987。 - Telegram:让隔离轮询并发地排干独立话题、私聊及状态/控制命令,同时保持同通道顺序。(#81849)感谢 @VACInc。 - Telegram:从 HTML 回退发送中派生可读的纯文本重试,使得解析失败时显示 `label (url)` 链接,而非原始锚点。(#81764)感谢 @alexph-dev。 - Ollama/诊断:在 `openclaw doctor --fix` 期间,将显式的原生 Ollama `contextWindow` 或 `maxTokens` 提供者/模型预算复制到 `params.num_ctx` 中,保留大上下文配置,因为原生 Ollama 已停止推断每次请求的 `num_ctx`。修复 #81878。(#81928)感谢 @joshavant 和 @ArthurusDent。 - Discord:在向现有线程发送 `message send` 时支持 `threadName`,通过在成功交付后重命名线程实现,并在无法应用重命名时发出警告。修复 #81836。(#81933)感谢 @joshavant。 - 构建:将外部化的 Slack、OpenShell 沙箱和 Anthropic Vertex 运行时依赖声明保留在根分发构件之外。 - ClawHub:将 Amazon Bedrock 和 Bedrock Mantle 提供者包包含在已发布的注册表元数据中,使得外部化提供者可从 ClawHub 以及 npm 中发现。 - Codex 账户/状态:隐藏空的速率限制桶,并显示服务器报告的使用限制块,而不称其为可用。 - 自动回复/Claude CLI:通过 `onReasoningStream` 将 CLI 运行时助手文本增量代理事件桥接到聊天推理预览中,镜像现有的助手文本(#76914)和工具事件(#80046)桥接,并添加门控以不影响的非 CLI 运行时。感谢 @anagnorisis2peripeteia 和 @pashpashpash。 - Mantis:仅在 Actions 构件中保留 QA 证据,停止将证据文件发布到 Git 支持的构件分支。 - CLI/迁移:处理延迟的 Codex 插件市场响应,使得警告、后续步骤和冲突状态以 ⚠️ 符号渲染,并在安装后迁移重试市场获取,而非静默跳过插件项。(#81625)感谢 @sjf。 - 频道/微信:将捆绑的 `@tencent-weixin/openclaw-weixin` 外部条目升级至 `2.4.3`(从 `2.4.1`),使得引导和 `openclaw channels add` 安装当前的腾讯微信(个人微信)插件版本。(#81730)感谢 @scotthuang。 - CLI:懒加载模型、插件和设备运行时辅助函数,并将频道选项帮助保持在生成的启动元数据或通用回退文本上,使得父级/帮助输出无需导入这些运行时路径即可渲染。 - CLI:通过解析后的命令快速路径路由 `plugins list --json`,并将其覆盖在响应预算内,使得插件 JSON 清单避免完整的 CLI 注册工作。 - 控制 UI/概览:通过共享的会话显示解析器渲染最近的会话行,使得标签/displayName 优先级、键等效标签及频道回退与聊天选择器保持一致。(#50696)感谢 @Maple778 和 @BunsDev。 - Gateway/网络:将 OpenClaw 安装的 undici 分发器保持为 HTTP/1.1,并将已销毁的 HTTP/2 会话错误视为可恢复的网络拆卸,防止 `ERR_HTTP2_INVALID_SESSION` 崩溃活动的网关回合。修复 #81627。(#81838)感谢 @joshavant。 - 内存/每日文件:拓宽 Dreaming、rem-backfill、rem-harness、诊断扫描及短期提升使用的每日内存文件匹配器,使得捆绑的会话内存钩子(及任何未来的变体)写入的 `memory/YYYY-MM-DD-<slug>.md` 文件与仅日期的 `memory/YYYY-MM-DD.md` 形状一同被发现。日期提取仍使用前导 `YYYY-MM-DD` 捕获组,因此对现有仅日期文件的每日提取/提升语义保持不变;带变体的文件现在可通过相同路径流转,而非被静默跳过。修复 #69536。感谢 @jack-stormentswe。 - macOS/Gateway:当配置的网关端口在清理后仍被占用时,使托管的 LaunchAgent 停止和重启失败,而非在监听器存活时报告成功。修复 #73132。感谢 @BunsDev。 - Telegram:为周期性 getMe 健康检查重用粘性 IPv4 Bot API 传输,使得 IPv4 正常工作但 IPv6 出站有故障的主机停止记录重复的探测超时。修复 #76852。(#76856)感谢 @SymbolStar。 - Telegram:将隔离轮询工作线程放置在捆绑的工作线程加载器使用的根分发路径中,避免启动时查找 `dist/telegram-ingress-worker.runtime.js` 失败。 - 控制 UI/Gateway:当无可信任的设备令牌重试可用时,停止陈旧的令牌不匹配重连循环,并根据原始工具输出大小限制渲染的聊天历史,使得仪表板认证/历史工作不能持续降低通道套接字。修复 #72139。感谢 @BunsDev。 - 内存/每日文件:在有上限的实时提取和历史种子填充期间,优先使用规范的 `memory/YYYY-MM-DD.md` 每日笔记,而非同日带变体的会话捕获,当存在带变体文件时保留现有每日笔记行为。 - Gateway/OpenAI 兼容 HTTP:解析共享的 JSON 端点路径时不信任格式错误的 Host 头,避免在 `/v1/chat/completions`、`/v1/responses` 和 `/v1/embeddings` 请求处理之前出现 500 错误。 - Telegram:使用活动运行时配置解析插件原生命令,使得 `/codex ...` 等命令保持在原生命令路径上。 - 语音通话 webhook:解析 webhook 和实时升级路径时不信任格式错误的 Host 头,避免在提供者签名检查或路径拒绝之前出现 500 错误。 - 媒体存储:将格式错误的重定向 `Location` 头视为媒体下载失败,而非让 URL 解析逃逸异步响应回调。 - ClickClack:跳过格式错误的实时 WebSocket 帧,而非因单个错误 JSON 事件停止通道监视器。 - 浏览器工具:将格式错误的节点代理 `payloadJSON` 响应视为浏览器代理失败,而非泄露原始 JSON 解析器错误。 - Gateway HTTP:匹配模型、会话杀死和会话历史路由路径时不信任格式错误的 Host 头,避免在这些端点上出现预认证 500 错误。 - Google Meet/Codex:以插件拥有的错误报告格式错误的节点代理 `payloadJSON` 响应,而非泄露原始 JSON 解析器失败。 - 调试代理:拒绝格式错误的相对形式代理目标,返回受控的 400 响应,而非让 URL 解析逃逸请求处理器。 - 文件传输:在计算哈希或调用配对节点之前拒绝格式错误的内联 `file_write` base64,避免 Node 宽松的 base64 解码器。 - QA 频道:跳过格式错误的内联入站附件 base64,而非为代理回合暂存静默损坏的媒体。 - Microsoft Teams:拒绝格式错误的内联 HTML 图像 base64 填充,而非解码损坏的 `data:` 图像附件。 - 语音通话实时:在将音频转发到桥接和转录路径之前,忽略格式错误的提供者媒体帧 base64。 - QQBot:在 JSON 解码结构化提醒数据之前,拒绝格式错误的已存储 cron 载荷 base64。 - Telnyx 语音通话:当 webhook 状态是格式错误的 base64 时,使用原始 `client_state` 回退,而非使用静默损坏的解码文本。 - Google Meet:以插件拥有的错误报告格式错误的节点主机参数 JSON,而非泄露原始 JSON 解析器失败。 - CLI/导出轨迹:以稳定的 CLI 错误报告格式错误的编码请求 JSON,而非泄露原始解析器输出。 - ComfyUI:以自有错误报告格式错误的工作流 API JSON 响应,而非泄露原始解析器失败。 - DeepInfra 视频:以提供者拥有的错误报告格式错误的成功 API JSON 响应,而非泄露原始解析器失败。 - Brave 搜索:以提供者拥有的错误报告格式错误的网页和 LLM 上下文 API JSON,而非泄露原始解析器失败。 - xAI 工具:以提供者拥有的错误报告格式错误的网页搜索、X 搜索和代码执行 JSON,而非泄露原始解析器失败。 - Nextcloud Talk:以频道拥有的错误报告格式错误的房间信息和机器人管理员 JSON,而非泄露原始解析器失败。 - Microsoft Teams:以频道拥有的错误报告格式错误的 Graph 和委托 OAuth JSON,而非泄露原始解析器失败。 - Google Chat:以频道拥有的错误报告格式错误的 Chat API 和证书 JSON,而非泄露原始解析器失败。 - Firecrawl:以提供者拥有的错误报告格式错误的搜索和抓取 API JSON,而非泄露原始解析器失败。 - Tavily:以提供者拥有的错误报告格式错误的搜索和提取 API JSON,而非泄露原始解析器失败。 - Perplexity:以提供者拥有的错误报告格式错误的搜索 API 和聊天完成 JSON,而非泄露原始解析器失败。 - Exa:以提供者拥有的错误报告格式错误的搜索 API JSON,而非泄露原始解析器失败。 - 内存主机 SDK:以调用方范围的错误报告格式错误的远程 JSON,用于 POST 和批量文件上传响应,而非泄露原始解析器失败。 - 媒体提供者:以提供者拥有的错误报告格式错误的操作轮询和音频转录 JSON,而非泄露原始解析器失败。 - MiniMax、Gemini、Kimi 和 Ollama 网页搜索:以提供者拥有的错误报告格式错误的 API JSON,而非泄露原始解析器失败。 - Twilio 语音通话:以提供者拥有的错误报告格式错误的成功 API JSON 响应,而非泄露原始解析器失败。 - 语音通话提供者 API:以提供者前缀的错误报告格式错误的成功受保护 JSON 响应,而非泄露原始解析器失败。 - 实时转录:以自有解析器错误报告格式错误的提供者 WebSocket JSON 帧,而非泄露原始 `SyntaxError` 对象。 - Microsoft Foundry:以自有认证错误报告格式错误的 Azure CLI 令牌 JSON,而非泄露原始解析器失败。 - Gateway/模型定价:以来源拥有的错误报告格式错误的外部定价目录 JSON,而非泄露原始解析器失败。 - QA 实验室:以自有错误报告格式错误的模型目录子进程 JSON,并忽略无效的目录行。 - Google Meet:以插件拥有的错误报告格式错误的浏览器控制状态 JSON,而非泄露原始解析器失败。 - Google 提供者:以提供者拥有的错误报告格式错误的 SSE 流 JSON,而非泄露原始解析器失败。 - 节点主机:以稳定的无效请求错误报告格式错误的内置调用 `paramsJSON`,而非泄露原始解析器失败。 - Amazon Bedrock 嵌入:以提供者拥有的错误报告格式错误的提供者响应 JSON,而非泄露原始解析器失败。 - QQBot:以提供者拥有的错误报告格式错误的访问令牌 JSON,而非泄露原始解析器失败。 - OpenAI 嵌入:以提供者拥有的错误报告格式错误的批量输出 JSONL,而非泄露原始解析器失败。 - Synology Chat:以稳定的频道拥有解析器错误报告格式错误的 JSON webhook 载荷。 - Mattermost:以稳定的频道拥有解析器错误报告格式错误的交互回调 JSON。 - Twilio 语音通话:以自有解析器错误报告格式错误的媒体流 WebSocket JSON,而非记录原始解析器失败。 - Tlon/Urbit:以自有解析器错误报告格式错误的 SSE 事件 JSON,而非记录原始解析器失败。 - Signal:当 GitHub 发布元数据是格式错误的 JSON 时,返回稳定的安装程序错误。 - ClawHub:以自有错误报告格式错误的成功市场 JSON 响应,而非泄露原始解析器失败。 - 提供者使用情况:以稳定的提供者错误报告格式错误的成功使用 JSON 响应,而非泄露原始解析器失败。 - Tlon/Urbit:以自有错误报告格式错误的 scry 响应 JSON,而非泄露原始解析器失败。 - LM Studio:以自有错误报告格式错误的模型列表和模型加载 JSON,而非泄露原始解析器失败。 - Matrix:忽略可选位置 URI 参数中格式错误的百分比编码,而非让错误的 `geo:` 事件中止入站消息处理。 - 网页搜索:通过其遗留的 `tools.web.search.apiKey` 兼容性回退自动检测 Brave,同时将对 `plugins.entries.brave.config.webSearch.apiKey` 的诊断迁移保留为规范修复,使白名单中的隔离 cron 运行在迁移前不会报告 `web_search` 不可用。修复 #81538。感谢 @atomicmonk。 - 插件:缓存重复的进程内插件元数据快照,并阻止消失的托管安装残留物强制进行完整的派生发现,减少大插件集下的网关/状态启动扫描。修复 #81143 和 #79806。(#81570)感谢 @Kaspre、@holgergruenhagen、@JanPlessow 和 @mjamiv。 - CLI/插件:仅在 JSON 输出命令注册期间,将懒插件命令注册的闲聊路由到 stderr,使插件支持的 `--json` 标准输出可解析,同时不更改仅解析或直通 `--json` 行为。修复 #81535。(#81536)感谢 @ScientificProgrammer 和 @vincentkoc。 - 插件:将 git 插件安装引用视为引用而非检出标志,使得类似选项的选择器检出失败,而非静默安装默认分支。修复 #79898。(#79901)感谢 @afurm 和 @vincentkoc。 - 诊断/内存:当已启用的备用内存插件明确拥有内存槽时,停止警告没有内存插件活动,同时对缺失或禁用的槽条目保留警告。修复 #78540。(#78557)感谢 @carladams1299-lab 和 @vincentkoc。 - 插件:保持进程本地插件元数据快照的备忘录新鲜度与缓存的注册表快照相关联,使得策略过时的派生插件元数据编辑作废备忘录,而非返回陈旧的所有者或命令别名。(#81064)感谢 @Kaspre。 - 插件:在提供者发现期间,从 `setup.providers[].envVars` 凭据中发现提供者插件,同时保留弃用的 `providerAuthEnvVars` 回退。(#81542)感谢 @JARVIS-Glasses。 - 文档/Codex 测试工具:说明按代理的 `CODEX_HOME` 隔离 `~/.codex`,而继承的 `HOME` 有意保持 `.agents` 发现和子进程用户主目录状态可用。 - CLI/插件:将裸插件和父命令帮助保持在轻量级路径上,避免在渲染帮助之前进行插件注册表发现。 - 认证:在重试锁定写入之前回收死所有者的陈旧文件锁,使崩溃的 OAuth 刷新不再卡住 `auth-profiles.json` 直到手动清理。 - CLI 表格:在多行单元格后的包装续行上保留静音/颜色样式,使 `openclaw plugins list` 描述保持可读。 - 进程执行:在 Windows 上折叠大小写不敏感的重复子环境键,使得调用方提供的覆盖(如 `PATH`)不会被主机 `Path` 遮蔽。 - 浏览器 CLI:为浏览器控制命令显式请求现有的 `operator.admin` 网关作用域,避免不必要的范围升级批准循环。修复 #81555。(#81716)感谢 @joshavant。 - Web:在提供者所有权解析期间,尊重显式配置的全局 `web_search` 提供者,同时将沙箱化的 `web_fetch` 限制为捆绑提供者。 - 插件/诊断:通过将 npm 包重新安装到托管插件根目录而非加载工作区 `node_modules` 来修复配置的遗留 npm 声明存根,并在发现看到这些存根时发出警告。修复 #79632。感谢 @Dylanzhang1128 和 @vincentkoc。 - 频道:当配置的第三方频道插件清单声明了 `channels` 但尚未添加 `channelConfigs` 元数据时,使其在 `openclaw channels list` 中保持可见。修复 #81334。(#81340)感谢 @AllynSheep 和 @vincentkoc。 - 代理:在完成的 `continuation-skip` 回合上跳过引导文件和钩子预加载工作(当无工作区引导待处理时),减少隔离代理的准备延迟,不改变首次回合引导行为。修复 #81548。感谢 @delizaran-unpa。 - 配置:针对插件拥有的通道模式验证 JSON 试运行,使外部通道字段不会被陈旧的捆绑模式拒绝。修复 #77887。(#81504)感谢 @giodl73-repo。 - iOS:恢复首次使用的通讯录、日历和提醒事项权限提示,并在设置中添加隐私与访问状态/操作。感谢 @BunsDev。 - Canvas:返回格式错误的百分比编码 Canvas/A2UI/文档资源路径的“未找到”,并在路径规范化之前阻止解码后的父目录遍历。 - Telegram:允许文件名以点开头的可信本地 Bot API 媒体文件,而非回退到远程下载。 - 代理/Codex 应用服务器:当运行切换到有效的沙箱工作区时,将注入的上下文文件重新映射到双点前缀的工作区目录下。 - 控制 UI/i18n:使用已安装的工作区 pi 运行时进行语言区域刷新,更新回退包锁定,并在提供者凭据无效时跳过计划刷新而非使主流程失败。 - CI/性能:在检出和发布期间均认证 clawgrit 报告仓库远程,使性能报告推送在基准测试完成后不会失败。 - 钩子:从双点前缀的目录加载工作区相关的遗留钩子模块,而不将文件名前缀视为父目录遍历。 - 插件:为双点前缀目录下的插件包路径保留已安装的包元数据和持久化的注册表新鲜度检查。 - 代理:允许双点前缀的文件名(如 `..note.txt`)通过沙箱 FS 桥接、远程沙箱读取和 apply_patch 摘要,而不将名称误认为父目录遍历。 - CLI/迁移:在非冲突的 Codex 技能和插件选择提示上隐藏每项来源/插件提示,将提示文本保留给实际需要注意的行。感谢 @sjf。 - Codex 测试工具:将高置信度的应用服务器 OAuth 刷新失效视为终端认证配置文件失败,停止重复的原始令牌刷新错误,而不将授权或使用限制载荷转化为重新认证提示。 - CLI/迁移:在整个迁移 UI 中人性化 Codex 冲突状态消息,使得选择提示和计划/结果行显示“工作区内已安装 Codex 技能”,而非暴露内部 `MIGRATION_REASON_*` 代码。感谢 @sjf。 - CLI/迁移:以不同的符号渲染迁移结果行:需手动审查(🔍)和存档(📖)项,而非使用误导性的“已跳过”和“已迁移”勾选标记,使用户可看到哪些条目仍需关注,哪些已归档。感谢 @sjf。 - CLI/迁移:将 Codex 迁移输出拆分为单独的预览和结果阶段,使之前的计划和之后的结果通过 clack 渲染,并具有独立可调的文案。感谢 @sjf。 - Codex 应用服务器:将项目捆绑包和用户 MCP 服务器注入 Codex 线程,当 MCP 服务器被禁用时轮换线程,将捆绑 MCP 注入范围限定为捆绑服务器,并在恢复时重新发送用户 MCP 配置,使得 MCP 更改在会话中期生效,无需重启代理。(#81551)感谢 @jalehman。 - Codex 迁移:调用托管的 Codex 二进制文件而非陈旧的系统 `codex` 进行源配置迁移计划,使得运行捆绑 Codex 运行时的用户获得与网关实际将使用的二进制文件匹配的计划输出。(#81582)感谢 @fuller-stack-dev。 - 子代理/维护:在会话存储清理、修剪和磁盘预算执行期间保留待处理的子代理注册表会话,使得进行中的子代理运行在完成之前不会被后台维护删除。(#81498)感谢 @ai-hpc。 - 控制 UI/聊天:将终端和重连运行清理与缓存的会话活动、陈旧的压缩/回退指示器以及紧凑的合成器运行状态芯片协调一致,使得已完成或中断的回合不留下“停止”活动。修复 #76874 和 #64220;引用 #71630。感谢 @BunsDev。 - 维护工具:澄清哪些 pnpm 测试/检查命令在本地是安全的,哪些在 Codex 工作树内是安全的,通过节点包装器和 Crabbox/Testbox 路由链接工作树门控。 - 自动回复:当去抖的入站工作回退到立即刷新时保留相同键顺序,使得后续回合不能超过活动缓冲的刷新。 - Telegram/WhatsApp:使 Telegram 同聊天回复在活动无延迟回合后保持有序,同时不阻塞 WhatsApp 后续消息分发。 - Codex 迁移:当应用服务器插件清单可用时,避免重复的缓存插件捆绑警告。 - 代理:在面向用户交付之前,抑制中止的嵌入式助手部分、推理文本、回复指令和陈旧的先前回复,同时保留干净的超时/错误载荷。修复 #48241。感谢 @BunsDev、@andyliu 和 @yassinebkr。 - 代理:允许工作区和沙箱路径策略中的双点前缀文件名(如 `..file.txt`),同时仍然拒绝真正的父目录遍历。 - 原生图像输入:检测纯提示中的 Windows 驱动器图像路径,使 `C:\...\screenshot.png` 引用不被遗漏。 - 媒体:在暂存附件、远程媒体、音频转码和已保存媒体显示名称之前规范化 Windows 风格的文件名提示,使 POSIX 主机不在生成的文件名中保留驱动器或目录文本。 - 媒体引用:解析 ID 以点开头的第一级入站媒体文件,而非将 `..photo.png` 等名称视为父目录遍历。 - iOS/聊天:在暂存和发送之前,将 PhotosPicker 图像附件调整大小为有上限的 JPEG,去除源元数据,并保持过大的相机照片在聊天上传预算内。修复 #68524。感谢 @BunsDev。 - 控制 UI:在触控优先设备上将共享表单、配置和用法文本输入控件保持为 16px,同时保留聊天合成器输入大小,使 iOS Safari 不再自动缩放在聚焦的字段上。修复 #64651;延续 #64673。感谢 @NianJiuZst 和 @BunsDev。 - 代理/轨迹:使轨迹刷新清理超时可配置,通过 `OPENCLAW_TRAJECTORY_FLUSH_TIMEOUT_MS`,保持 10 秒默认值,同时允许较慢的存储排空。引用 #75839。感谢 @BunsDev。 - 技能:从托管的 `~/.openclaw/skills` 和个人 `~/.agents/skills` 根目录加载 ClawHub 和本地管理器技能目录符号链接,同时保持工作区、额外、捆绑和每技能 `SKILL.md` 包含故障关闭。修复 #44051。引用 #59219。感谢 @Devattom、@ArthurNie 和 @luoxiao6645。 - 配置:在写入时整形后,从 `config.set`、`config.apply` 和 `config.patch` 响应返回规范的持久化配置。修复 #77455。 - Codex 认证:在运行时认证选择期间接受由 `oauthRef` 支持的 OAuth 配置文件,使官方 Codex OAuth 登录被应用服务器代理运行使用。(#81633)感谢 @obviyus。 - Telegram:在网关停止宽限后释放停止的轮询租约,使进程内重启可重用相同的机器人令牌,同时不削弱活动的重复轮询器保护。修复 #81507。(#81890)感谢 @joshavant。 - ACP:在运行时失败文本中保留经过编辑的数字 JSON-RPC `RequestError` 详细信息,使后端诊断可见,而非仅显示“内部错误”。修复 #81126。(#81188)感谢 @vyctorbrzezowski。 - 代理:缓存未更改的 PI 模型发现存储和模型查找,减少大模型配置下重复的模型解析启动延迟。修复 #78851。 - 引导:将通过 OpenAI 模型向导返回的 Codex 插件迁移配置携带过去,使得接受的插件迁移随最终配置写入一起保存。 - 安全/Windows ACL 审计:将匿名登录、来宾、交互、本地和网络 SID 分类为等同世界的主体,使广泛可写路径保持严重而非降级为群组可写。修复 #74350。(#74383)感谢 @dwc1997。 - 媒体理解:在音频或视觉处理之前重试瞬时远程附件获取失败,使 Discord 语音笔记在一次网络/CDN 故障后不会丢失。修复 #74316。感谢 @vyctorbrzezowski 和 @gabrielexito-stack。 - 控制 UI:将带有时间戳的实时流和工具项排在无时间戳的历史回退之前,保持聊天历史按可见时间顺序排列。修复 #80759。(#81016)感谢 @akrimm702。 - ClawHub:取消停滞的存档体读取,用于技能、包和 ClawPack 下载,而非在头部到达后使安装挂起。修复 #52073。引用 #80006。感谢 @xinhuagu 和 @stainlu。 - macOS/聊天:在刷新的聊天历史中从 `errorMessage` 渲染持久化的助手提供者失败,同时隐藏陈旧的、非错误的提供者详细信息。(#65689)感谢 @javierdici。 - 控制 UI/配置:丢弃来自表单模式配置保存的陈旧的经过编辑占位符,同时保留可恢复的已保存机密,使不相关的设置更改不再提交 `__OPENCLAW_REDACTED__` 作为真实数据。修复 #60917。感谢 @giodl73-repo 和 @BunsDev。 - OpenAI 插件:澄清远程 Codex OAuth 登录文案,使隧道用户知道登录可能在粘贴重定向 URL 之前自动完成。(#81301)感谢 @rubencu。 - SGLang:为 OpenAI 兼容的聊天补全保留重放的推理历史,使具有思考能力的本地模型不会丢失先前的推理回合。(#81091)感谢 @akrimm702。 - 插件/安装:从 npm 的锁文件计划器派生托管的对等依赖锁,而非递归扫描 `node_modules`,同时将 OpenClaw 主机对等节点排除在托管根目录所有权之外,并保留活动的根托管运行时。感谢 @fuller-stack-dev。 - 控制 UI/WebChat:通过应用分组聊天渲染器中现有的保留操作间距,使短的助手回复在气泡内不显示复制/打开操作按钮。修复 #79509。(#81244)感谢 @JARVIS-Glasses。 - Codex 测试工具:使实时测试包装器在 Windows 上可移植,并延迟锁定临时清理,使原生 Windows 和 WSL2 实时运行完成。 - 链接理解:在运行配置的 CLI 摘要器之前,通过 SSRF 防护获取页面内容,防止 curl/wget 风格的链接获取器到达私有重定向或 DNS 反弹目标。 - fix:加固 safe-bin 参数验证 [AI]。(#80999)感谢 @pgondhi987。 - Codex/状态:使 `/codex status` 的速率限制措辞与 `/status` 一致,显示剩余配额和紧凑的重置持续时间,而非已用配额和原始 ISO 时间戳。感谢 @MatthewSchleder。 - Mattermost:当实质性(非推理)最终回复载荷到达 `deliverMattermostReplyPayload` 但底层 `deliverTextOrMediaReply` 返回“空”时,记录结构化 `mattermost no-visible-reply` 诊断——此前,运行会以误导性的“已向 <channel> 交付回复”日志完成,即使实际上没有 Mattermost API 发送发生,掩盖了频道/话题上下文中的静默完成。无行为变更;诊断暴露了失败,使操作员可检测到,而非看到代理似乎静默。修复 #80501。感谢 @robbyproc87。 - Telegram:限制跨多账户机器人的并发启动 `getMe` 探测,使大型 Telegram 配置在网关启动时不会同时发出所有账户探测。引用 #80695。(#80986)感谢 @stainlu。 - fix(config):在 config set/unset 中拒绝自动管理的 meta.lastTouched* 路径 (#80856)。感谢 @ai-hpc - 测试状态:为生成的 home 目录播种隔离的认证配置文件密钥,防止辅助支持的正确性运行回退到主机钥匙串密钥。(#81393)感谢 @altaywtf。 - 插件/更新:在更新失败后禁用插件时,清除过期的允许/拒绝条目和选定的插件槽,使失败的外部插件更新不会留下半禁用配置。(#81512)感谢 @JARVIS-Glasses。 - 内存/LanceDB:使自动捕获识别短 CJK 内存短语和可配置的文字触发器,使中文、日语和韩语用户无需正则表达式或 LLM 意图检测即可捕获记忆。修复 #75680。感谢 @vyctorbrzezowski 和 @guokewuming。 - 插件诊断:报告过期的插件配置警告,并在配置警告仍然存在时避免声称完全插件健康。(#81515)感谢 @BKF-Gitty。 - 会话:在 `openclaw sessions` 输出中为 ACP 控制平面会话显示 `model: "<agentId>-acp"` / `modelProvider: "acpx"`(ACP 运行时哨兵),而非代理配置的模型(这具有误导性)。目录发现 20。(#79543) - Slack:在调用 Slack 历史或线程回复 API 之前,规范化消息读取的 `before` 和 `after` 时间戳边界。修复 #80835。(#81338)感谢 @honor2030。 - Gateway:在流式突发期间限制助手/思考代理事件扇出,同时不丢弃缓冲的增量。(#80335)感谢 @samzong。 - 模型:在 `/models` 选择器中恢复经过认证的 CLI 运行时提供者,同时使遗留运行时别名对设置/默认模型选择保持隐藏。关闭 #81212。(#81239)感谢 @anagnorisis2peripeteia。 - 变更日志门控:拒绝机器人/应用句柄作为“感谢”归属,并对机器人/应用编写的变更日志条目要求明确的人工信用。(#81357)感谢 @hxy91819。 - 代理/心跳:修复破坏多代理心跳节奏的七层层叠问题——(1) 通过 `Promise.all` 并行将调度器广播唤醒扇出到所有代理,而非依次等待每个 `runOnce`,使一个正在做实际工作的代理不再饿死迭代顺序中的每个后续代理;(2) 通过会话键解析 `session:agent:<id>:…` / `nested:agent:<id>:…` 通道名称,将 `skipWhenBusy` 范围限定为归属于触发代理的通道,而非咨询全局 `subagent` 通道,使一个代理上的单个卡住子代理不再静默禁用每个其他代理的心跳;(3) 始终将工作区 `HEARTBEAT.md` 指令(可选 `tasks:` 块之外的所有内容)附加到调度提示,使散文运行手册 `HEARTBEAT.md` 文件直接到达模型,而非除非声明了周期性任务才被静默丢弃;(4) 在 `streamWithIdleTimeout` 内部,将初始流建立 Promise 与同一看门狗定时器竞态(该定时器之前仅保护令牌间间隙),使在 TCP/TLS 握手或第一个响应字节之前卡住的 SDK 请求不再无限期挂起(停滞会话诊断的 `recovery=none` 情况);(5) 当 `heartbeat.session` 锁定一个在代理会话存储中没有条目的会话键时,发出 `openclaw doctor` 警告,使静默丢弃的心跳交付在配置验证时暴露;(6) 还将仅承诺的任务调度路径(配置了任务,但尚无到期的)路由通过 `appendHeartbeatFileDirectives`,使 `tasks:` 块之外的散文指令也在此路径上到达模型;(7) 用 try/catch 包装 `streamWithIdleTimeout` 内部的同步 `baseFn(...)` 调用,该 catch 在重新抛出之前清除连接看门狗定时器,使在设置期间抛出的提供者流函数不会留下一个实时定时器,该定时器可能稍后以过时的错误触发 `onIdleTimeout`,并在实际失败后保持进程打开。感谢 @zeroaltitude。 - Matrix:停止从父派生插件路径在运行时运行 `npm install`/`pnpm install`;缺失的 Matrix 运行时依赖现在以修复指引失败,而非变异错误的 `node_modules` 树。修复 #80758。(#80876)感谢 @kinjitakabe。 - 代理/内存刷新:将非中止的内存刷新失败(提供者超时、传输错误、通用代理失败)暴露为可见的回复载荷,使外部回复循环短路,并使隔离的 cron 运行将错误传播到 `meta.error` 中,而非以 `status: "ok"` 和空载荷静默完成。此前仅有特定的“内存刷新写入仅限于……”消息被暴露。修复 #80755。感谢 @nailujac。 - 频道/循环防护:在核心频道回合内核中强制执行共享的每对机器人循环保护,Discord、Slack、Matrix 和 Google Chat 在可可靠识别已接受的机器人编写消息时提供机器人对事实。通用防护以 `(scope, conversation, participant pair)` 为键,一旦一对超过配置的预算,抑制两个方向上的每额外机器人到机器人事件,并在 `cooldownSeconds` 后解除抑制。默认值为 `maxEventsPerWindow: 20`、`windowSeconds: 60` 和 `cooldownSeconds: 60`,只要频道允许机器人编写的消息到达分发;可通过 `channels.defaults.botLoopProtection` 全局设置,并按频道/账户或按会话配置覆盖(如果支持)。修复 #58789。感谢 @pandadev66。 - 代理/内存刷新:将非中止的内存刷新失败(提供者超时、传输错误、通用代理失败)暴露为可见的回复载荷,使外部回复循环短路,并使隔离的 cron 运行将错误传播到 `meta.error` 中,而非以 `status: "ok"` 和空载荷静默完成。此前仅有特定的“内存刷新写入仅限于……”消息被暴露。引用 #80755。感谢 @kinjitakabe 和 @nailujac。 - Codex 测试工具:使用活动的 Codex 运行时上下文窗口进行 OpenAI 选择的预算、手动 `/compact` 和 `/status`,使陈旧的 OpenAI 会话元数据不再夸大上下文限制。(#81906)感谢 @jalehman。