← 返回更新日志

OpenClaw v2026.4.29-beta.3 预发布

2026-04-30 · GitHub 原文
## 2026.4.29 ### 亮点 - 消息传递与自动化默认启用活动运行引导、强制可见回复、生成的子代理路由元数据,以及心跳提醒的可选跟进承诺。感谢 @vincentkoc, @scoootscooob, @samzong 和 @vignesh07。 - 记忆模块升级为具备人物感知能力的维基,新增溯源视图、单会话活动记忆过滤器、超时部分召回以及有界 REM 预览诊断功能。感谢 @vincentkoc, @quengh, @joeykrug 和 @samzong。 - 提供程序/模型覆盖范围扩大,新增 NVIDIA 接入/目录,加速基于清单的模型/认证路径,实现 Bedrock Opus 4.7 思维模型功能对齐,并优化更安全的 Codex/OpenAI 兼容回放与流式行为。感谢 @eleqtrizit, @shakkernerd, @prasad-yashdeep, @woodhouse-bot 和 @LyHug。 - 网关与打包插件的可靠性提升,重点解决主机启动缓慢、模型目录复用、事件循环就绪诊断、运行时依赖修复、过期会话恢复及版本范围更新缓存问题。感谢 @lpendeavors, @DerFlash, @vincentkoc, @pashpashpash 和 @jhsmith409。 - 频道修复主要集中在 Slack Block Kit 限制、Telegram 代理/Webhook/轮询/发送韧性、Discord 启动/速率限制处理、WhatsApp 投递/存活状态,以及 Microsoft Teams/Matrix/飞书等边缘情况。感谢 @slackapi, @SymbolStar, @djgeorg3, @TinyTb, @dseravalli, @nklock 和 @alex-xuweilong。 - 安全与运维新增 OpenGrep 扫描、更严格的 GHSA 分类策略、更安全的 exec/pairing/所有者范围处理、Docker/接入自动化,以及可信代理栈的 Web 抓取 IPv6 ULA 可选配置。感谢 @jesse-merhi, @pgondhi987, @mmaps, @jinjimz 和 @jeffrey701。 ### 变更 - 安全/工具:配置的 `tools.exec` 和 `tools.fs` 工具部分不再隐式放宽限制性配置文件(`messaging`、`minimal`)。在受限配置文件中需要使用这些工具的用户必须添加明确的 `alsoAllow` 条目;启动警告会标识受影响的配置。修复 #47487。感谢 @amknight。 - 代理/承诺:新增可选的推断跟进承诺,支持隐藏批量提取、单代理/单频道作用域、心跳投递、CLI 管理、简单的 `commitments.enabled`/`commitments.maxPerDay` 配置,以及心跳间隔到期时间钳制,防止魔法签到立即回声。(#74189) 感谢 @vignesh07。 - 消息/队列:使 `steer` 在下一个模型边界处排空所有待处理的 Pi 引导消息,将传统的逐条引导保留为 `queue`,并新增专用的引导队列文档页面。感谢 @vincentkoc。 - 消息/队列:默认活动运行排队设为 `steer`,并附带 500ms 跟进回退防抖,在命令队列页面记录排队模式、优先级和丢弃策略。感谢 @vincentkoc。 - 消息:新增全局 `messages.visibleReplies`,使操作员可要求任何来源聊天的可见输出均通过 `message(action=send)` 发送,同时 `messages.groupChat.visibleReplies` 仍可作为群组/频道覆盖配置。感谢 @scoootscooob。 - 网关/事件:在子代理聊天和代理广播负载中暴露 `spawnedBy` 字段,使客户端无需额外会话查找即可路由子会话事件。(#63244) 感谢 @samzong。 - 记忆/维基:新增面向代理的人物维基元数据、标准别名、人物卡片、关系图谱、隐私/溯源报告、证据类型下钻,以及用于人物查找、问题路由、来源证据和原始声明的搜索模式。感谢 @vincentkoc。 - 活动记忆:新增可选的单会话 `allowedChatIds` 和 `deniedChatIds` 过滤器,使操作员仅对选定的单聊、群组或频道会话启用召回,同时跳过广泛会话。(#67977) 感谢 @quengh。 - 活动记忆:当隐藏的记忆子代理超时时,返回有界的部分召回摘要(包含默认的临时转录路径),确保不会丢弃有用的恢复上下文。(#73219) 感谢 @joeykrug。 - 网关/记忆:新增只读 `doctor.memory.remHarness` RPC,使操作员客户端无需运行变更路径即可预览有界 REM 梦境输出。(#66673) 感谢 @samzong。 - 提供程序/NVIDIA:新增 NVIDIA 提供程序,支持 API 密钥接入、设置文档、静态目录元数据及字面模型引用选择器,确保 NVIDIA 托管模型可选择并保留其提供程序前缀。(#71204) 感谢 @eleqtrizit。 - 模型:抑制显式配置的 `openai-codex/gpt-5.4-mini` 内联条目,防止 `openclaw doctor --fix` 写入的过期模型配置绕过清单能力块,并在运行时切换至该模型时导致 ChatGPT 支持的 Codex 账户中重复出现代理回合失败。条件抑制(如 qwen 编程计划端点守卫)仍可通过显式用户配置绕过。(#74451) 感谢 @0xCyda, @hclsys 和 @Marvae。 - 新增基于 SQLite 的插件状态存储(`api.runtime.state.openKeyedStore`),用于支持 TTL、驱逐和自动插件隔离的键值注册表,确保重启安全。感谢 @amknight。 - 插件 SDK:使用弃用元数据标记剩余的旧版别名导出及 diffs 工具/配置别名,并新增检查机制,要求未来的旧版别名注释必须包含 `@deprecated` 标签。感谢 @vincentkoc。 - CLI/二维码/依赖:将小型终端进度和二维码包装器辅助函数内部化,同时保持真实二维码编码器依赖直接引用,在不改变二维码输出行为的前提下缩减默认运行时依赖图。感谢 @vincentkoc。 - 依赖项:刷新工作区运行时、插件和工具包,包括 ACP、Pi、AWS SDK、TypeBox、pnpm、oxlint、oxfmt、jsdom、pdfjs、ciao 和 tokenjuice,同时保持已修复的 ACP 行为和 lint 检查处于最新状态。感谢 @mariozechner。 - 网关/开发:默认通过命名 tmux 会话运行 `pnpm gateway:watch`,提供 `gateway:watch:raw` 和 `OPENCLAW_GATEWAY_WATCH_TMUX=0` 用于前台模式,使重复启动时能重新生成可检查的监听器,而不会阻塞调用代理的 Shell。感谢 @vincentkoc。 - 网关/诊断:通过配置标志启用可选的启动诊断时间线,记录网关生命周期和插件加载阶段,从而无需定制化工具即可诊断启动缓慢问题。感谢 @shakkernerd。 - 控制面板 UI/国际化:在区域设置注册表中新增波斯语 (fa)、荷兰语 (nl)、越南语 (vi)、意大利语 (it)、阿拉伯语 (ar) 和泰语 (th) 条目,并附带 `fa`、`nl`、`vi` 和 `zh-TW` 文档术语表,使文档翻译流水线与控制面板 UI 的语言选择在各个界面保持同步。感谢 @vincentkoc。 - 频道:新增元宝频道文档入口,使腾讯元宝机器人显示在频道列表和侧边栏导航中。(#73443) 感谢 @loongfay。 - 频道/元宝:将插件 GitHub 地址更新为 YuanbaoTeam/yuanbao-openclaw-plugin,并在频道目录中添加 "yuanbao" 别名。(#74253) 感谢 @loongfay。 - Docker 安装:新增 `OPENCLAW_SKIP_ONBOARDING` 环境变量,使自动化 Docker 安装可跳过交互式引导步骤,同时仍应用网关默认配置。(#55518) 感谢 @jinjimz。 - 安全策略:对于超过配置接受限制后的媒体/Base64 解码和格式转换开销,除非报告证明存在限制绕过、崩溃、资源耗尽、数据泄露或其他边界绕过,否则在 GHSA 分类中仅归类为性能问题。(#74311) - 安全/OpenGrep:新增精确的 OpenGrep 规则包、源规则编译器、来源元数据检查,以及 PR/全量扫描工作流,用于验证内部代码和仅规则包更改,同时上传 SARIF 至 GitHub Code Scanning。(#69483) 感谢 @jesse-merhi。 ### 修复 - 提供商/OpenAI Codex:在 OpenAI 归属处理期间保留现有的包装 Codex 流,使 PI OAuth bearer 注入能到达 ChatGPT/Codex 响应,并剥离仅原生 Codex 不支持的负载字段,同时不触碰自定义兼容端点。(#75111) 感谢 @keshavbotagent。 - 智能体/工具结果防护:在非上下文引擎的工具结果溢出检查中使用已解析的运行时上下文令牌预算,这样当 `contextTokens` 大于原生 `contextWindow` 时,长工具密集型会话不再提前压缩。修复 #74917。感谢 @kAIborg24。 - 网关/systemd:对受监督的锁和 `EADDRINUSE` 冲突使用 sysexits 78 退出,使 `RestartPreventExitStatus=78` 能阻止 `Restart=always` 的重启循环,而不是在端口被占用时反复重新加载插件。修复 #75115。感谢 @yhyatt。 - 智能体/运行时:在嵌入运行器边界、提交提供商之前跳过空白的可见用户提示,同时仍允许仅内部运行时的回合和仅媒体提示,这样当存在回放历史时,Telegram/群组会话不再泄露原始的空输入提供商错误。修复 #74137。感谢 @yelog、@Gracker 和 @nhaener。 - 自动回复/群组聊天:当频道预计算了仅消息工具的回复但 `message` 工具不可用时,回退到自动源交付,这样 Discord/Slack 风格的群组回合不会在没有可见回复的情况下静默完成。修复 #74868。感谢 @kagura-agent。 - 浏览器/网关:在 HTTP 控制服务器和 `browser.request` 之间共享一个浏览器控制运行时,并从源快照刷新浏览器配置文件配置,这样 CLI 状态/启动将遵循配置的 `browser.executablePath`、`headless` 和 `noSandbox`,而不是回退到过时的自动检测。修复 #75087;修复 #73617。感谢 @civiltox 和 @martingarramon。 - 智能体/子智能体:通过持久化的恢复尝试和卡死会话墓碑限制自动孤儿恢复,并让任务维护/医生程序协调这些会话,这样重启循环不再需要手动修改 `sessions.json`。修复 #74864。感谢 @solosage1。 - 网关/启动:为无凭据的 `tools.web.fetch` 配置跳过预绑定 Web 获取提供商发现,这样即使存在可选的获取限制,Docker/Kubernetes 网关也能正常绑定。修复 #74896。感谢 @KoykL。 - 基础设施/tmp:通过重新检查其他进程已收紧权限的目录来容忍并发的临时目录权限修复,这样并行 ACP 子进程启动时不再抛出 `Unsafe fallback OpenClaw temp dir`。修复 #66867。感谢 @Kane808-AI 和 @jarvisz8。 - Signal:将群组白名单同时匹配入站 Signal 群组 ID 和发送者 ID,并处理明确配置的 Signal 群组,除非设置了 `requireMention`,否则不要求提及。修复 #53308。感谢 @minupla 和 @juan-flores077。 - Slack:要求 `allowBots=true` 的机器人撰写房间消息必须来自明确列入频道白名单的机器人,或来自存在明确 Slack 拥有者的房间,以防止广泛的机器人中继无人值守运行。修复 #59284。感谢 @andrewhong-translucent。 - Signal:通过明确的超时、声明和流式大小检查以及部分文件清理,限制 `signal-cli` 安装程序发布版和归档文件的下载。修复 #54153。感谢 @jinduwang1001-max 和 @juan-flores077。 - Signal:基于 `channels.signal.mediaMaxMb` 并预留 Base64 余量来推导 `getAttachment` HTTP 响应上限,这样入站照片和视频不再受限于 1 MiB 的 RPC 默认值。修复 #73564。感谢 @heyhudson。 - Signal:在空闲时保持长生命周期接收 SSE 监视器开启,而不是应用 10 秒 RPC/检查截止时间,这样 `signal-cli` 0.14.3 事件流不再在入站消息到达前重连。修复 #74741。感谢 @fgabelmannjr 和 @k7n4n5t3w4rt。 - 模型/OpenAI Codex:在通过实时 OAuth 验证后,为 ChatGPT/Codex OAuth PI 运行恢复 `openai-codex/gpt-5.4-mini`,并统一清单、前向兼容元数据、文档和回归测试,使过期的 cron 和心跳配置重新生效。修复 #74451。感谢 @0xCyda、@hclsys 和 @Marvae。 - 内存/运行时依赖:仅在配置本地内存搜索时保留原生 `node-llama-cpp` 运行时,这样打包安装可以在不依赖不可达的全局 npm 安装的情况下修复本地嵌入。修复 #74777。感谢 @LLagoon3。 - 插件/运行时依赖:在写入运行时镜像临时文件前替换过期的符号链接镜像目标根目录,并跳过已物化的硬链接的重写,从而避免跨版本容器升级在只读镜像层路径上崩溃循环,同时减少预热镜像的变更开销。修复 #75108;引用 #75069。感谢 @coletebou 和 @xiaohuaxi。 - 插件/运行时依赖:保持从暂存插件运行时依赖中加载捆绑的提供程序策略配置,从而避免在锁定目录 `/var/lib/openclaw/plugin-runtime-deps` 中读取配置失败。修复 #74971。感谢 @eurojojo。 - 插件/运行时依赖:在生成的运行时依赖安装清单中始终写入依赖映射,从而在计划为空时防止 npm 崩溃或修剪暂存的捆绑插件包。修复 #74949。感谢 @hclsys。 - 安全/出站:在纯文本清理过程中剥离重新生成的 HTML 标签,防止嵌套标签片段留下 CodeQL 检测到的 `<script>` 序列。感谢 @vincentkoc。 - 安全/密钥:使用填充的时序安全缓冲区比较凭证字节,而非在相等性检查前对候选密码进行哈希处理。感谢 @vincentkoc。 - 安全/QQBot:在写入 `console.*` 前清理调试日志参数,防止启用调试日志时网关负载字段伪造额外的日志行。感谢 @vincentkoc。 - QQBot:在命令注册表中统一斜杠命令认证和 c2cOnly 门控限制,发送斜杠命令文件附件时传递 `allowQQBotDataDownloads`,将 clear-storage 与实际下载目录对齐,并添加 `/bot-me` 以显示发送者用户 ID。(#73616) 感谢 @cxyhhhhh。 - CLI/代理状态:在只读元数据路径上保持 `openclaw agents`、文本 `agents list` 和纯文本 `status` 命令,使人类可读输出在打印前不再预加载插件运行时或实时通道扫描。修复 #74195。感谢 @NianJiuZst。 - 代理/本地模型:基于有效模型窗口派生上下文窗口保护阈值,并设置 4k/8k 的安全下限,从而避免小型本地模型被固定的 16k/32k 预检截断值拒绝。修复 #42999。感谢 @chengjialu8888。 - PDF 提取:从已安装包的根目录解析 PDF.js 标准字体,并向 Node 回退提取器传递文件系统路径,从而避免内置字体 PDF 渲染时出现 `file://` URL 查找失败。修复 #51455;延续 #70936、#54447 和 #62175。感谢 @anyech、@JuanRdBO 和 @solomonneas。 - 媒体:将带有 `application/msword` 或 `application/x-cfb` MIME 类型的旧版 Word/OLE 附件视为二进制文件,防止看似可打印的 `.doc` 文件被作为文本嵌入提示词中。修复 #54176;延续 #54380。感谢 @andyliu。 - 配置:在严格根配置验证中接受已文档化的 `browser.tabCleanup` 键,使配置的标签页清理功能在运行时读取前不再失败。修复 #74577。感谢 @lonexreb 和 @ezdlp。 - 定时任务:在持久化更新前验证已禁用任务的计划编辑,使无效的 cron 更改不再部分修改已存储的任务。修复 #74459。感谢 @yfge。 - CLI/定时任务:当 `openclaw cron add --message` 省略非空的 `--agent` 时发出警告(包括空 agent 值和 session-key 任务),使计划中的 agent-turn 任务明确默认 agent 回退机制,同时保持系统事件静默。修复 #42196;延续 #42245。感谢 @ethanclaw。 - CLI/进度:当 TUI 输入占用原始标准输入时,抑制嵌套的进度旋转器和行清除,使 Crestodian `/status` 不再干扰当前输入行。(#75003) 感谢 @velvet-shark。 - 通道/状态:将 Telegram、Slack 和 Google Chat 的只读白名单/默认目标访问器限制在仅配置路径上,使状态和通道摘要不再解析基于 SecretRef 的运行时凭证。感谢 @eusine。 - Telegram:对流式预览使用持久化消息编辑而非原生草稿状态,使生成的回复不再经历看起来像重复项的草稿到消息的闪烁过渡。(#75073) 感谢 @obviyus。 - Telegram:限制过低的长轮询客户端超时值,使配置的 `timeoutSeconds` 低于 `getUpdates` 轮询窗口时不再每隔几秒强制建立新的 HTTPS 连接。修复 #75114。感谢 @hpinho77。 - 活跃内存:澄清已弃用的 `modelFallbackPolicy` 警告和配置帮助,使 `modelFallback` 被描述为链式解析的最后手段,而非运行时故障转移。(#74602) 感谢 @jeffrey701。 - 通道/Discord:防止只读白名单/默认目标访问器解析基于 SecretRef 的机器人令牌,使当令牌仅在网关运行时可用时,状态和通道摘要不再失败。(#74737) 感谢 @eusine。 - 网关/会话:统一 `chat`、`agent` 和 `sessions` 服务器方法中的会话中止等待语义,使中止 RPC 在目标会话实际停止后才返回,而不是在运行仍在排空处理时提前解析。(#74751) 感谢 @BunsDev。 - 代理/输出:在提供程序重放前丢弃仅包含入站元数据的复制助理重放轮次,而非合成占位符,从而防止 Telegram 及其他通道将 `[assistant copied inbound metadata omitted]` 作为模型输出接收。修复 #74745。感谢 @adamwdear 和 @Marvae。 - 诊断/内存:对 Ollama 和 LM Studio 等密钥可选的提供程序抑制跳过的嵌入就绪警告,同时保留超时和未就绪的诊断信息。修复 #74608 和 #73882。感谢 @hclsys。 - 通道/群组:为已准备的调度路径保留仅观察模式的轮次抑制,并恢复已弃用的通道轮次运行时别名,使被动观察者/群组流程保持静默,同时旧版插件继续编译。感谢 @vincentkoc。 - 飞书:跳过不带媒体内容的纯空文本消息(例如 `{"text":""}`),从而避免向会话写入空白用户轮次,并防止下游 LLM 提供程序以“消息不能为空”为由拒绝请求。(#74634) 感谢 @xdengli 和 @hclsys。 - 飞书/多维表格:在创建应用清理过程中,清理仅包含默认空值的字段的新建占位符行,同时保留有意义的链接、附件、用户、数字、布尔值和位置值。(#73920) 延续 #40602。感谢 @boat2moon。 - macOS 应用:保持仅附加模式,且调试设置中的 launchd 切换标记仅作为标识,因此使用 `--attach-only`/`--no-launchd` 启动时不再卸载 Gateway LaunchAgent 或中断活动会话。(#72174) 感谢 @DolencLuka。 - macOS Canvas:在推送/评估/快照流程中停止自动重载当前 A2UI 主机,使推送的 A2UI 内容保持可见,而非返回空的 Canvas 外壳。修复 #73337。感谢 @Gr4via。 - 插件 SDK:恢复已弃用的 `plugin-sdk/zalouser` 命令认证外观,使导入它的已发布 Lark/Zalo 插件能在当前主机上加载。修复 #74702。感谢 @Goron01。 - 插件/运行时依赖:当 `models.providers`、认证配置文件、智能体默认值或子智能体模型引用配置了该提供商时,包含捆绑的提供商插件,同时将非活动的默认启用提供商插件排除在 doctor 修复之外。引用 #74307。感谢 @Skeptomenos。 - 插件/运行时:将相对插件 `api.resolvePath` 输入相对于插件根目录解析,而非主机工作目录,同时保持绝对路径和用户主目录路径由用户解析。修复 #74718。感谢 @jimdawdy-hub。 - 插件/运行时依赖:在替换活动副本之前,通过临时文件刷新镜像根块,使刷新失败不会删除运行中插件导入仍需要的块。感谢 @shakkernerd。 - 插件/运行时依赖:构建暂存依赖别名时优先使用 `require` 条件导出,使仅支持 CommonJS 的插件运行时依赖(如 `ws`)在 Jiti 下不会解析为 ESM 包装器。修复 #74547。感谢 @aderius。 - Bonjour/Gateway:在滑动窗口内限制广告商重启频率,使 mDNS 探测/名称冲突循环禁用发现功能,而非在受限主机上无限循环。引用 #74209 和 #74242。感谢 @ndj888 和 @Sanjays2402。 - 插件/运行时依赖:在重用镜像运行时根目录之前验证暂存包入口文件,使浏览器控制能在更新后修复不完整的 `ajv`/MCP SDK 安装,而不是在重启时因缺少 `ajv/dist/ajv.js` 而失败。引用 #74630。感谢 @spickeringlr。 - 心跳:在发送警报或抑制带前缀的 `HEARTBEAT_OK` 回复之前,使用选定的提供商、模型和思维上下文解析 `responsePrefix` 模板变量。修复 #43064;修复 #43065;取代 #46858。感谢 @yweiii 和 @JunJD。 - 内存/LanceDB:在 `memory_forget` 候选列表中显示完整的内存 UUID,使智能体能够将显示的 ID 传回以进行定向删除,而不会触发完整 UUID 验证器。(#66913) 感谢 @amittell。 - 文件传输插件:为 `file.fetch` 要求规范读取路径的预检授权,当 `dir.fetch` 预检条目缺失、为绝对路径或存在遍历风险时安全失败,并在将存档字节交还给调用者之前重新检查返回的存档条目。延续 #74134。感谢 @omarshahine。 - 频道/飞书:在飞书/Lark 返回 HTTP 502 后,重试将文件类型的 iOS 视频资源下载为 `media`,并在回退也失败时保留原始 502 状态。修复 #49855;延续 #50164 和 #73986。感谢 @alex-xuweilong。 - 提供商/Amazon Bedrock:为 Bedrock 模型引用暴露完整的 Claude Opus 4.7 思维配置文件(`xhigh`、`adaptive` 和 `max`),同时保持 Opus/Sonnet 4.6 默认为自适应,使 `/think` 菜单和验证与 Anthropic 传输行为匹配。修复 #74701。感谢 @prasad-yashdeep、@sparkleHazard、@Sanjays2402 和 @hclsys。 - 插件/tokenjuice:针对 tokenjuice 0.7.0 发布的 OpenClaw 主机类型编译捆绑插件,而非使用本地兼容性垫片,使包契约漂移在发布前的 OpenClaw 验证中失败。感谢 @vincentkoc。 - OAuth/密钥:忽略根目录级别的 Google OAuth `client_secret_*.json` 下载,使本地客户端密钥文件不会作为提交候选项出现。(#74689) 感谢 @jeongdulee。 - 内存:将 `sqlite-vec` 镜像到默认内存插件的打包捆绑插件运行时依赖中,使内置向量搜索在升级到 2026.4.27 后不会丢失其 SQLite 扩展。修复 #74692。感谢 @mozi1924。 - Gateway/启动:限制启动期间的本地发现广告,使卡住的发现插件不再阻碍 Gateway 达到就绪状态。修复 #73865;引用 #74630 和 #74633。感谢 @lpendeavors、@moltar-bot 和 @Saboor711。 - Gateway/模型:在后台刷新过期重载的同时提供上一次成功的模型目录,使 Gateway 控制平面和 OpenAI 兼容请求在模型配置更改后不再因模型提供商重新发现而阻塞。引用 #74135、#74630 和 #74633。感谢 @DerFlash、@moltar-bot 和 @Saboor711。 - CLI/status:从打包的 OpenClaw 发行根目录解析只读频道设置的运行时回退,使 `status --all`、`status --deep`、频道和 doctor 路径在外部频道插件需要设置元数据时不会崩溃。修复 #74693。感谢 @giangthb。 - SDK/events:防止每次运行的 SDK 事件流暴露重复的原始聊天投影帧,同时规范化仅聊天投影帧,并通过 `rawEvents` 保留原始访问权限。引用 #74704。感谢 @BunsDev。 - SDK:将带有生命周期元数据的 Gateway 终端 `agent.wait` 超时快照报告为 `timed_out`,同时保持裸等待截止时间非终端状态。感谢 @clawsweeper。 - Google Meet:在浏览器健康状态证明参与者已入会之前,阻止托管 Chrome 的简介/测试语音,并暴露 `speechReady` 诊断信息,使登录、准入、权限和音频桥接阻塞不再被误认为语音成功。引用 #72478。感谢 @DougButdorf。 - Slack/命令:在选择控件中保留原生命令参数菜单,使编码选项值符合 Slack 的选项限制,并将回退按钮标签截断至 Slack 的按钮文本限制,从而确保过长的有效选项不再导致渲染无效的 Slack 消息块。感谢 @slackapi。 - 智能体/Codex:在常规应用服务器轮次清理之前,刷新已接受的防抖引导消息,从而确保在防抖触发前轮次已完成时,被标记为排队状态的上行跟进消息不会被丢弃。感谢 @vincentkoc。 - Slack/交互式回复:确保渲染的按钮和选择控件符合 Slack Block Kit 的值与数量限制,并使命令参数选择值对齐 Slack 的选项限制,从而避免过长的智能体生成选项导致 Slack 拒绝整个消息块负载。感谢 @slackapi。 - Slack/交互式回复:丢弃过长的 Block Kit 按钮 URL 同时保留有效的回调值,从而避免格式错误的链接按钮导致 Slack 拒绝整个交互式回复。感谢 @slackapi。 - Slack/命令:将原生命令参数菜单的确认文本截断至 Slack 的对话框限制,从而避免过长的插件参数名称导致回退按钮渲染无效的 Block Kit 负载。感谢 @slackapi。 - Slack/执行审批:将原生审批元数据上下文限制在 Slack 的组件与文本限制内,从而避免过大的审批详情导致 Slack 拒绝审批卡片。感谢 @slackapi。 - Slack/执行审批:将原生审批更新回退文本限制在 Slack 的消息限制内,同时保留已渲染的审批消息块,从而避免过长的命令在 `chat.update` 因 `msg_too_long` 被拒绝后,导致已解决或过期的审批卡片保持陈旧状态。感谢 @slackapi。 - Slack/命令:将原生命令参数菜单的回退行数限制在 Slack 的消息块限制内,从而避免过大的插件选项列表导致 Slack 拒绝生成的菜单。感谢 @slackapi。 - Slack/命令:丢弃编码值超出 Slack 按钮值限制的回退命令参数按钮,从而避免单个过大的插件选项导致 Slack 拒绝整个菜单。感谢 @slackapi。 - Slack/消息:在 Slack 发送时合并消息工具的表现层与交互层消息块,从而在同时存在结构化消息体时不再丢弃按钮和选择控件。感谢 @slackapi。 - Slack/消息:将 Block Kit 回退文本限制在 Slack 的发送限制内,同时保留已渲染的消息块,从而避免过长的上下文回退导致富文本 Slack 消息因 `msg_too_long` 失败。感谢 @slackapi。 - Slack/消息:在消息编辑时将 Block Kit 回退文本限制在 Slack 的发送限制内,同时保留已渲染的消息块,从而避免过长的上下文回退导致 Slack 因 `msg_too_long` 拒绝 `chat.update` 调用。感谢 @slackapi。 - 频道/WhatsApp:在标记自动回复为已送达前要求提供 Baileys 出站消息 ID,从而避免转录文本和确认反应导致失败的群回复被误显示为已发送。修复 #49225。感谢 @TinyTb。 - CLI/更新:按 OpenClaw 版本和安装元数据隔离打包的 Node 编译缓存,从而避免全局安装在包更新后复用过期的编译块。感谢 @pashpashpash。 - 频道/语音通话:在缺失 Socket 远程地址元数据时保持预认证 Webhook 的并发限制处于活动状态,从而确保来自剥离 IP 的代理路径的慢速请求仍共享回退限流桶。(#74453) 感谢 @davidangularme。 - 插件 SDK/测试:从插件测试契约运行时惰性加载 TypeScript,并为关键 SDK 契约入口点导入和包体积添加发布检查,从而确保发布的包在交付 ESM 不兼容或体积过大的契约辅助工具前在预检阶段失败。感谢 @vincentkoc。 - 频道/Microsoft Teams:在启动时将配置好的 `19:[email protected]` 和旧版 `19:[email protected]` 团队/频道 ID 视为已解析,从而避免误报 `channels unresolved` 警告,同时保留用于显示名称条目的 Graph 名称查找。修复 #74683。感谢 @dseravalli。 - CLI/浏览器:在惰性加载浏览器子命令时保留父级标志,从而确保 `openclaw browser --json open` 和 `openclaw browser --json tabs` 在重新解析后仍保持机器可读的输出。修复 #74574。感谢 @devintegeritsm。 - 执行/提权:在审批跟进运行中将 `turnSourceChannel` 保留为 `messageProvider`,从而避免用户在批准异步提权命令后,`tools.elevated.allowFrom.<provider>` 检查因 `provider=null` 而失败。修复 #74646。感谢 @xhd2015。 - 插件/运行时依赖:新增 `openclaw plugins deps` 检查与修复功能,采用插件安装器共享的无脚本包管理器默认值,从而允许运维人员在修复缺失的捆绑运行时依赖时,不会破坏 JSON 输出或阻塞无关的无冲突依赖。感谢 @vincentkoc。 - 智能体/输出:从面向用户的回复中移除内部 `[tool calls omitted]` 回放占位符,同时保留可见回复的空白字符。修复 #74573。感谢 @blaspat。 - 提供商/Google Vertex:通过 OpenClaw 的 REST 传输路由 `authorized_user` ADC 凭据,从而避免使用 gcloud application-default 凭据的 Docker 安装在发送请求前于 Google SDK 阶段崩溃。修复 #74628。感谢 @frankhal2001-design。 - ACP/解析器:当无法解析显式 `--session` 令牌时,回退至基于线程的会话解析,同时在不存在线程绑定时保留坏令牌诊断信息,从而避免自动将当前线程 ID 填充为位置 ACP 目标的 Discord 斜杠命令返回“无法解析会话目标”错误。修复 #66299。感谢 @hclsys、@kindomLee 和 @martingarramon。 - 智能体/会话:当嵌入式超时/错误轮次在未返回 `agent_end` 的情况下结束时,触发终端生命周期兜底机制,从而避免网关会话在故障转移暴露超时后仍卡在 `running` 状态。修复 #74607。感谢 @millerc79。 - 网关/诊断:在警告中包含会话卡死的原因提示和恢复跳过原因,从而帮助运维人员判断通道是正在等待活跃任务、排队任务还是陈旧的事务记录。感谢 @vincentkoc。 - 提供商/DeepSeek:通过提供商的 `resolveThinkingProfile` 钩子暴露原生 DeepSeek V4 的 `xhigh` 和 `max` 思考级别,使 `/think xhigh|max` 能够应用预期的思考强度,而非回退到基础级别。(#73008) 感谢 @ai-hpc。 - 智能体/Codex:在运行时故障后限制嵌入式运行的清理、轨迹刷新和命令通道任务超时,使 Discord 及其他聊天会话能恢复空闲状态,而非卡在处理中。感谢 @vincentkoc。 - 心跳/执行:静默消费仅包含元数据的成功异步执行完成事件,使 Telegram 及其他聊天界面在显示 `No session found` 后不再向用户请求缺失的命令日志。修复 #74595。感谢 @gkoch02。 - 网页抓取:新增文档记录的 `tools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange` 可选配置,并将其贯穿缓存键和 DNS/IP 检查,使使用 `fc00::/7` 的信任型假 IP 代理栈无需广泛的私有网络访问即可正常工作。修复 #74351。感谢 @jeffrey701。 - OpenAI Codex:恢复 `/verbose full` 的持久化及应用服务器工具输出转发,并重试 Gateway 端到端临时目录清理,使调试运行不再因过期的验证或清理不稳定问题而回退。感谢 @vincentkoc。 - Anthropic/Meridian:保留在 anthropic-messages 流中 `content_block_start` 事件生成的文本和思考内容,使 `[thinking, text]` 回复不再持久化为空轮次或触发空响应回退。修复 #74410。感谢 @vyctorbrzezowski。 - 频道/Matrix:在 `openclaw matrix verify confirm-sas` 上完成交叉签名握手,使操作者的其他 Matrix 设备在智能体确认后清除 `Verifying…` 循环,而非卡住。(#74542) 感谢 @nklock。 - CLI/状态:在报告有效上下文时尊重频道特定的模型上下文窗口覆盖设置,使频道范围内的会话在 `openclaw status` 中反映当前窗口。感谢 @HemantSudarshan。 - 沙箱/Docker:在沙箱模式关闭时容忍 Docker 守护进程不可用,使诊断和预检检查不再在未运行 Docker 守护进程的安装中失败。修复 #73671。感谢 @kaseonedge。 - 控制界面/移动端:通过 Lit 管理的状态持久化移动端聊天设置,并通过相同的视图状态路径路由移动端导航,使聊天面板切换在窄视口过渡时得以保留。感谢 @BunsDev。 - 控制界面/导出:统一可调整分隔线、移动端布局和导出 HTML 转录模板中的侧边栏触发区域,使侧边栏切换和导出的转录侧边栏渲染出一致的点击区域和样式。感谢 @BunsDev。 - 控制界面/聊天:在聊天运行活跃时禁用页面刷新功能,防止意外刷新中断正在进行的回复。感谢 @Angfr95 和 @BunsDev。 - 记忆/LanceDB:从 `openclaw ltm list` 返回真实的记忆记录(支持可选的 `--limit` 和 createdAt 排序),而非空占位符,使 CLI 界面符合文档记录的 LTM 列表示约。(#67952) 感谢 @zhangyue19921010。 - 媒体:在视觉管道错误中包含每次尝试的缩放失败记录(已脱敏)及已解析的模型输入能力,使 ARM64 图像故障可在不中断剩余路由调查的情况下进行诊断。引用 #74552。感谢 @1yihui。 - 控制界面/国际化:通过区域设置源路由 zh-CN 的智能体、调试、频道刷新和执行审批文案,同时保留英文 `Cron Jobs` 智能体标签页名称及安全审计命令样式。延续 #39692 的修复上下文。感谢 @hepeng154833488 和 @vincentkoc。 - 自动回复:针对干净的纯空或仅推理的直接聊天轮次尊重显式的 `silentReply.direct: "allow"` 配置,同时保持默认直接聊天空响应防护的保守性。修复 #74409。感谢 @jesuskannolis。 - OpenAI Codex:当 Codex 轮次仅包含基于 systemPrompt 的指令时,发送非空的 Responses 输入项,避免 ChatGPT 后端因 `input: []` 返回 400 错误。修复 #73820。感谢 @woodhouse-bot。 - Ollama:在原生流边界处规范化带提供商前缀的工具调用名称,使 Kimi/Ollama 的 `functions.exec` 等调用能正确分发为 `exec`,而非丢失已配置的工具。修复 #74487。感谢 @afurm 和 @carreipeia。 - 安全/审计:在模型层级和小参数检查之前解析配置的模型别名,使基于别名的 GPT-5/Codex 配置不再报告误报的弱模型警告。修复 #74455。感谢 @blaspat。 - CLI/智能体:将 Gateway 超时的嵌入式回退运行隔离在显式的 `gateway-fallback-*` 会话下,使已接受的 Gateway 运行不会竞争转录锁或替换路由的对话会话。修复 #62981。感谢 @HemantSudarshan。 - CLI/二维码/设备配对:在颁发移动配对引导令牌前拒绝格式错误的公共设置 URL,同时保留对有效裸 host:port 设置 URL 的支持。感谢 @Lucenx9。 - 模型/UI:从默认网页聊天、`/models` 和模型设置选择器中隐藏未认证的提供商,同时通过 `view: "all"`、`/models <provider> all` 和 `models list --all` 保留显式的全目录浏览路径。修复 #74423。感谢 @guarismo 和 @SymbolStar。 - Ollama:在跳过 PI 发现时,将显式本地模型运行保留在目标提供商的运行时钩子上,使一次性 Ollama 调用在流式传输前不再冷加载无关的提供商运行时。修复 #74078。感谢 @sakalaboator。 - Slack/提示词:依赖 Slack 的 `interactiveReplies` 指引而非通用的 `inlineButtons` 配置提示,使已启用的 Slack 按钮指令不产生冲突。修复 #46647。感谢 @jeremykoerber。 - Slack/反应:将重复的 `already_reacted` 响应视为幂等成功,使重复添加智能体反应不再显示为工具失败。修复 #69005。感谢 @shipitsteven 和 @martingarramon。 - 频道/Discord:在启动时应用查找和网关元数据获取期间,缓解 Cloudflare/Error 1015 HTML 429 REST 失败,添加 `channels.discord.applicationId` 作为应用 ID 查找的绕过机制,在记录日志前清理 HTML 正文,并在回退到保守冷却期前遵守 Retry-After 标头。修复 #38853。(#74489) 感谢 @djgeorg3 和 @Garyko0730。 - Slack/工具:在共享消息工具模式中暴露 `fileId`,以便 `download-file` 能够从传入占位符接收 Slack 附件 ID。修复 #45574。感谢 @chadvegas。 - 执行:拒绝无效的每次调用 `host` 值,而不是静默回退到默认目标,从而使类似主机名的值在命令运行前就失败。修复 #74426。感谢 @scr00ge-00 和 @vyctorbrzezowski。 - Google/Gemini:当 Gemini 运行由空或已过滤的用户内容触发时,发送非空的占位符内容,避免 `contents is not specified` API 错误。感谢 @CaoYuhaoCarl。 - 心跳:保留 `tasks:` 块周围的非任务 `HEARTBEAT.md` 上下文,并将 `agents.defaults.heartbeat` 应用于所有代理,除非每个代理的心跳条目限制了作用域。感谢 @Sekhar03。 - Markdown:在共享的出站格式中保留宽松列表项内的段落换行,同时保持紧凑列表间距稳定。感谢 @Lucenx9。 - 构建/网关:将重启、关闭、重新生成、诊断、命令队列清理和运行时清理路由到单一稳定的网关生命周期运行时入口,以便重新构建的包不会让长期运行的网关停留在过期的哈希块上。延续 #73964。感谢 @pashpashpash。 - 内存/维基:防止广泛的共享来源和生成的相关链接块使每个页面都成为搜索结果,限制嘈杂的反向链接,支持全词搜索(如人员路由查询),并优先使用可读的页面正文片段而非生成的元数据。感谢 @vincentkoc。 - 定时任务/网关:在记录超时前中止并限制性地清理超时的隔离代理回合,以便过期的定时任务会话不会在超时后使 Discord 或其他聊天频道卡在 `processing` 状态。感谢 @vincentkoc。 - 代理/错误:在流式工具调用 JSON 片段到达聊天界面之前抑制格式错误的片段,同时保留提供商请求验证诊断信息。修复 #59076;将 #59080 保留为重复覆盖项。(#59118) 感谢 @singleGanghood。 - CLI/模型:恢复针对无清单/静态目录覆盖的提供商(包括 Anthropic 和 Amazon Bedrock)的提供商过滤 `models list --all --provider <id>` 行,同时保持兼容性回退机制不触发昂贵的可用性和解析器路径。感谢 @shakkernerd。 - CLI/模型:保持清单身份验证凭据在 `models status`、身份验证探测和 PI 模型发现中可见,以便工作区范围的提供商身份验证在列出、探测和执行之间保持一致。感谢 @shakkernerd。 - CLI/模型:将 Google Vertex ADC 等本地凭据证据移至通用插件清单设置元数据中,以便模型列表身份验证索引保持声明式,无需提供商特定的运行时分支。感谢 @shakkernerd。 - CLI/模型:通过单一命令本地提供商身份验证索引计算 `models list` 的 Auth 列,以便行渲染不再对每个模型行重复执行身份验证配置文件、环境变量、已配置提供商、AWS 或合成身份验证检查。感谢 @shakkernerd。 - CLI/模型:将 OpenAI 可列出目录移至插件清单中,以便 `models list --all --provider openai` 使用清单快速路径,而不是加载提供商运行时规范化钩子。感谢 @shakkernerd。 - CLI/工具:将网关 `tools.*` RPC 命名空间排除在插件命令发现和托管代理启动之外,以便 `openclaw tools effective` 等孤立命令快速失败,而不是冷加载插件元数据。引用 #73477。感谢 @oromeis。 - CLI/状态:除非设置了 `--deep` 或 `--all`,否则在仅元数据通道扫描中保持默认文本 `openclaw status --usage`,并将孤立的 `openclaw tools --help` 通过预计算根帮助快速路径发送,以便延迟排查命令在打印前避免插件/运行时冷加载。引用 #73477 和 #74220。感谢 @oromeis 和 @NianJiuZst。 - 代理/诊断:在模型 I/O 之前追踪嵌入式运行启动和准备阶段的耗时,并仅对严重缓慢的阶段发出警告,以便 Docker/VPS 延迟报告能够识别是插件加载、身份验证/模型解析、工具清单、引导、MCP/LSP、资源加载还是流设置主导了运行前延迟,而不会产生嘈杂的正常日志。引用 #73428。感谢 @Dimaoggg、@quangtran88 和 @Heyvhuang。 - 代理/子代理:按文件签名缓存持久化的子代理运行注册表读取,同时保持新鲜解析隔离,以便繁忙的网关停止在控制器/列表/状态热路径上重新解析未更改的 `subagents/runs.json`。引用 #72338。感谢 @argus-as。 - 网关/客户端:在打开网关 WebSocket RPC/探测/客户端连接之前等待事件循环变得响应,并将该就绪等待时间计入调用方超时,以便 Windows 延迟模块评估停滞不再导致状态、TUI、ACP、MCP、node-host 和插件客户端路径上的健康回环网关出现假握手超时。引用 #74279 和 #48270。感谢 @wongcode 和 @joost-heijden。 - 网关/Windows:在回退到 `wmic` 之前通过 PowerShell 读取监听器命令行,以便重启健康检查能够识别现代 Windows 安装上的 OpenClaw 监听器,并避免漫长的匿名端口等待。引用 #74280。感谢 @zym951223。 - 插件/运行时依赖:在捆绑依赖安装锁中记录进程启动时间并过期回收的 PID 锁,以便 Docker 网关重启能够从过期的 `.openclaw-runtime-deps.lock` 目录中恢复,而无需等待重复的五分钟超时。修复 #74346。(#74361) 感谢 @jhsmith409。 - 插件/运行时依赖:在首次成功执行后缓存打包的捆绑运行时 dist-mirror 准备过程,同时保持源码检出镜像可刷新,从而资源受限的 Docker/VPS 安装可在聊天回合前避免重复的根目录扫描。引用 #73428, #73421, #73532 和 #73477。感谢 @Dimaoggg, @oromeis, @oadiazp, @jmfraga, @bstanbury, @antoniusfelix 和 @jkobject。 - 频道/Discord:将匹配有效 Discord DM 白名单的纯数字出站目标视为用户私聊,同时保留账户特定的旧版 `dm.allowFrom` 优先于继承的根级 `allowFrom`。 (#74303) 感谢 @Squirbie。 - 频道/Discord/Slack:在运行时、设置、白名单编辑和 doctor 修复中共享同一个 DM 策略/白名单解析器,使旧版 `dm.policy` / `dm.allowFrom` 兼容性迁移到标准的 `dmPolicy` / `allowFrom` 时不会产生分歧的访问检查。感谢 @Squirbie。 - 控制界面:使聊天侧边栏分割线可聚焦、支持键盘调整大小、具备 ARIA 描述并基于指针事件,从而实现无需鼠标即可调整侧边栏大小。感谢 @BunsDev。 - 代理/使用:将 PI 嵌入式运行的遥测数据归因于解析出的模型提供商,而非 PI 框架标签,从而使 OpenRouter 及其他提供商支持的回合在会话使用和追踪中报告正确的提供商。感谢 @vincentkoc。 - 代理/归属:在原生 OpenAI 和 Codex 流量(包括 SDK 传输、实时语音和 TTS、设备码认证、WHAM 使用及远程嵌入)中发送 OpenClaw 归属头信息,防止 PI 来源的默认值泄露到提供商请求中。感谢 @vincentkoc。 - 代理/认证:保持从主代理继承的 OAuth 认证配置为只读穿透,而非将刷新令牌复制到次要代理中,并针对所属存储刷新 Codex 应用服务器令牌,从而避免多代理集群因重复使用刷新令牌而失败。修复 #74055。感谢 @ClarityInvest。 - 频道/Telegram:在构建仅支持 HTTP/1 的 Telegram Bot API 传输层时,遵循 `ALL_PROXY` / `all_proxy` 及服务级 `OPENCLAW_PROXY_URL` 设置,使依赖这些代理设置的 Windows 及服务安装不再回退到直接出站。修复 #74014;引用 #74086。感谢 @SymbolStar。 - 频道/Telegram:将原始的主机/网络不可达 Bot API 连接失败视为非致命错误,并将带标签的轮询未捕获异常路由至 Telegram 重启路径,从而避免临时可达性故障导致网关崩溃或长轮询卡死。修复 #60515;引用 #74540。感谢 @HemantSudarshan, @thacid22 和 @ewimsatt。 - 频道/Telegram:当 `deleteWebhook` 遭遇临时网络故障但 `getWebhookInfo` 确认未配置 Webhook 时,继续轮询,从而在 Webhook 已被移除后避免启动时无限重试清理。引用 #74086;延续 #47384。感谢 @clovericbot。 - 频道/Telegram:当 Telegram 返回 `QUOTE_TEXT_INVALID` 时,重试不带 `reply_parameters.quote` 的原生引用回复,从而避免过期或截断的引用片段导致整条回复丢失。修复 #74581。感谢 @moeedahmed。 - 频道/Telegram:当 grammY 包装预连接失败时,对入站最终回复应用严格的安全发送重试,同时保留模糊的纯网络信封为单次发送,以避免重复的可见消息。修复 #74203。感谢 @nanli2000cn。 - 频道/Telegram:当运行中的长轮询器在启动宽限期内未完成 `getUpdates` 或其传输活动已过期时,在频道状态和 doctor 诊断中显示轮询存活警告,从而避免静默的轮询失败看起来正常。引用 #74299。感谢 @lolaopenclaw。 - 频道/Telegram:发布 Webhook 运行时状态,并在 `setWebhook` 于启动宽限期内未完成时发出警告,从而避免 Webhook 模式账户在注册仍在失败或重试时显示为健康状态。引用 #74299。感谢 @lolaopenclaw 和 @martingarramon。 - 频道/Telegram:限制原生命令菜单 `deleteMyCommands` 和 `setMyCommands` Bot API 调用,并允许与其他启动控制调用相同的超时触发传输回退重试,从而避免 Windows/WSL 网络停滞导致命令同步在正常运行的提供商后挂起。引用 #74086。感谢 @SymbolStar。 - ACP/命令:在 OpenClaw 桥接中接受转发的 ACP 超时配置控制,将不支持的丢弃-关闭控制视为可恢复的清理操作,并恢复原生的 `/verbose full` 及无参数状态行为,从而使 Discord 命令菜单和嵌套 ACP 回合不再在支持的会话控制上失败。感谢 @vincentkoc。 - Codex 框架:中断并释放在 OpenClaw 动态工具响应后保持沉默且未发送 `turn/completed` 的原生应用服务器回合,从而避免 Discord 及其他聊天通道卡在 `processing` 状态。感谢 @vincentkoc。 - Codex 框架:将 OpenClaw 动态工具响应限制为 30 秒,并在应用服务器桥接原本会使回合卡在 `processing` 时,以明确的工具结果安全失败。感谢 @vincentkoc。 - TUI/状态:当活动运行已清除且无跟踪运行剩余时,若最终事件到达则清除过期的 `streaming` 页脚状态,同时保留并发运行所有权及非活动本地 `/btw` 终端处理。修复 #64825;延续 #64842, #64843, #64847 和 #64862。感谢 @briandevans 和 @Yanhu007。 - 频道/Discord:当 Discord 无法解析机器人自身身份时关闭启动失败,并在仅配置提及模式可检测提及时保持提及门控激活,从而避免提供商在缺少 bot id 的情况下继续运行。修复 #42219;延续 #46856 和 #49218。感谢 @education-01 和 @BenediktSchackenberg。 - 频道/Discord:在标点和码点安全回退边界处拆分长 CJK 回复,使 Discord 分块保持可读且不损坏辅助平面字符。修复 #38597;修复 #71384。感谢 @p3nchan。 - TUI:在活跃工具/生命周期保活期间保持流式监控存活,在断开连接时暂停它,并在陈旧重连运行后重新加载历史记录,从而使长时间运行的聊天不再误判为空闲或卡在陈旧流式传输中。修复 #69081。感谢 @EenvoudJasper。 - 浏览器/网关:忽略来自 `Page.handleJavaScriptDialog` 的 Playwright 对话框关闭竞态条件,这样当对话框在 Playwright 接受之前消失时,浏览器自动化操作将不再导致网关崩溃。(#40067) 感谢 @randyjtw。 - 定时任务/网关:将错过的独立代理回合追赶任务推迟到频道启动窗口之外,这样在重启后提供商连接期间,超时的定时任务工作不会导致 Discord 或 Telegram 饥饿。感谢 @vincentkoc。 - 心跳/定时任务:在定时任务工作活跃或排队时推迟心跳回合,为子代理/嵌套车道压力添加可选的 `heartbeat.skipWhenBusy`,并在不推进计划的情况下重试忙碌跳过,从而使本地 Ollama 主机不会并发运行心跳和定时任务提示。修复 #50773。感谢 @scottgl9。 - 代理/思考:尊重包含 `xhigh` 的已配置模型 `compat.supportedReasoningEfforts` 条目,从而使自定义 OpenAI 兼容提供商引用能在命令菜单、网关会话、代理 CLI 和 `llm-task` 中一致地暴露和验证 `/think xhigh`。延续 #48904。感谢 @Milchstrassse 和 @wufunc。 - Vercel AI 网关:为可信的 OpenAI/Codex 上游引用暴露提供商拥有的 `/think xhigh`,为 Anthropic 上游引用暴露 Claude 自适应思考,同时保持不受信任的命名空间引用处于基础级别。延续 #41561。感谢 @Zcg2021。 - 插件/运行时依赖:在网关启动期间清理陈旧的 `openclaw-unknown-*` 捆绑运行时依赖根目录,同时保留最新或锁定的根目录,从而使旧的暂存碎片不会在重启间持续累积。感谢 @vincentkoc。 - 插件/运行时依赖:将另外十个根包运行时依赖(`@agentclientprotocol/sdk`, `@lydell/node-pty`, `croner`, `dotenv`, `jiti`, `json5`, `jszip`, `markdown-it`, `tar`, `web-push`)加入 `MIRRORED_CORE_RUNTIME_DEP_NAMES`,使它们能与 `semver` 和 `tslog` 一起镜像到运行时依赖树中,防止在没有任何启用扩展拥有该依赖时,核心分发代码(例如 `qmd-manager`, `cron/schedule`, `infra/archive`, `infra/push-web`, `infra/backup-create`, `process/supervisor/adapters/pty`)出现 `Cannot find package 'X'` 失败。新增静态漂移防护测试,扫描 `src/` 中根包依赖的值导入,若镜像白名单或扩展拥有集中缺少某项则 CI 失败。引用 #74199。感谢 @maxpuppet。 - Ollama:将调用者中止信号与 guarded-fetch 超时组合用于原生 `/api/chat` 流,这样 `/stop` 和早期取消仍能中断同样携带提供商超时预算的本地 Ollama 请求。引用 #74133。感谢 @obviyus。 - 医生/TTS:在 `openclaw doctor --fix` 期间将遗留的 `messages.tts.enabled`、代理 TTS、频道 TTS 和语音呼叫插件 TTS 切换迁移至 `auto` 模式,以匹配文档化的 TTS 配置契约。感谢 @vincentkoc。 - CLI/日志:当隐式回环网关连接在 `logs.tail` 之前或期间关闭或超时时,回退到配置的网关文件日志,从而使 `openclaw logs` 在诊断本地模型网关断开连接时仍可使用。引用 #74078。感谢 @sakalaboator。 - MCP/插件:使用聊天内容强制转换而非默认对象字符串化来处理非数组插件工具结果,从而使 MCP 调用者能从插件工具接收到有用的 JSON/文本内容。感谢 @vincentkoc。 - 活跃内存/QMD:通过 `memory.qmd.update.startup` 将网关启动时的 QMD 刷新设为可选,保持正常内存访问为懒加载,保留交互式文件监听,并使监听器依赖/构建忽略与 QMD 的扫描器对齐,从而使冷启动网关默认不再导入或初始化 QMD。感谢 @codexGW。 - 频道/Discord:通过共享频道生命周期队列移除 Discord 拥有的排队运行超时回复,同时保留消息顺序和兼容性超时常量,从而使长时间的 Discord 回合仍由会话/工具/运行时生命周期管理,而不是频道回退错误。感谢 @codexGW。 - 代理/工具:将 `process.poll` 等待时间限制为 30 秒,在工具模式中声明该上限,并在等待期间尊重中止信号,从而使长时间命令轮询在取消后不会阻塞代理响应能力。感谢 @vincentkoc。 - 插件 SDK:添加已跟踪的 Discord 组件消息辅助函数和 Telegram 账户解析兼容性适配层,从而使使用这些子路径的现有插件能正常解析,同时新插件保持在通用频道 SDK 契约上。感谢 @vincentkoc。 - 共享标签:在组/频道 slug 规范化中保留 Unicode 组合标记和 NFC 等效的带重音文本,从而使非拉丁语标签不再丢失有意义的字符。修复 #58932;延续 #58942 和 #58995。感谢 @fengqing-git, @Starhappysh 和 @koen666。 - 频道/Telegram:在发送普通 Telegram 视频时包含探测到的视频宽度和高度,从而使竖屏片段能正确渲染方向,而不是被客户端拉伸。(#18915) 感谢 @storyarcade。 - 文档/Hetzner:明确 SSH 隧道访问需要在运行 `ssh -L` 之前配置 `AllowTcpForwarding local`,从而使加固的 VPS sshd 配置不会阻止回环网关访问。修复 #54557;延续 #54564;引用 #54954。感谢 @satishkc7, @blackstrype 和 @Aftabbs。 - 代理/配置:在缩窄的内部配置写入期间保留用户编写的 `agents.defaults.params` 和按模型配置的 `agents.defaults.models[].params`,从而使 `transport: "sse"` 和 `openaiWsWarmup: false` 等 OpenAI 传输覆盖配置不会从 `openclaw.json` 中被剥离。修复 #73607;引用 #73428。感谢 @quangtran88。 - 代理/模型配置:通过规范模型键解析按模型的额外参数,同时保留遗留的双前缀回退条目,从而使带提供商前缀的模型 ID(如 `openrouter/auto`)能保留其配置的运行时参数。(#44319) 感谢 @HenryXiaoYang。 - Gateway/shutdown:通过 `ShutdownResult` 报告结构化的关闭警告和 HTTP 关闭超时警告,同时保留生命周期钩子的加固机制。延续 #41296。感谢 @edenfunf。 - Control UI:在选项渲染后,使 Agents Overview 和 config-form 选择下拉菜单保持其配置的值,同时保留继承的代理模型占位符。修复 #40352;延续 #52948。感谢 @xiaoquanidea。 - Agents/exec:启动 zsh、bash 和 fish 主机执行 shell 时抑制启动文件,同时保留现有的 PATH 回退机制,以防止守护进程环境被 shell 启动文件覆盖。延续 #40200;修复 #40179。感谢 @NewdlDewdl。 - Plugins/QA:在插件测试套件(gauntlet)源码运行前预构建私有 QA 通道运行时,以免包装器 CPU/RSS 测量值被私有 QA 发行版重建工作污染。感谢 @vincentkoc。 - Plugins/QA:新增一个 Kitchen Sink 插件测试套件,用于安装外部包,检查命令清单、MCP 工具、通道状态、提供程序轮次、网关 RSS、CPU 及致命日志异常。感谢 @vincentkoc。 - Plugins/config:在单次配置规范化过程中复用内置插件别名扫描,使 Kitchen Sink 风格的插件配置不再因在代理轮次前反复重新扫描内置元数据而占用网关 CPU。感谢 @vincentkoc。 - Plugins/channels:在损坏的运行时通道注册(缺少必需的 config helpers)污染通道状态前予以拒绝。感谢 @vincentkoc。 - MCP/plugins:通过 plugin-tools MCP 桥接序列化原始插件工具返回值,使 Kitchen Sink 风格的工具不再暴露 `undefined` 内容。感谢 @vincentkoc。 - Gateway/reload:将默认重启延迟和 SIGUSR1 重启排空限制为五分钟,同时保留显式的 `deferralTimeoutMs: 0` 无限等待,以防止过期的活跃工作计数永远阻塞配置重载。感谢 @vincentkoc。 - Active Memory:将 prompt-build 钩子注册为配置的召回超时加上设置缓冲时间,而非 150 秒的最大预算,从而防止默认内存召回延迟多个轮次的启动。感谢 @vincentkoc。 - Gateway/readiness:在本地或已认证的 `/readyz` 响应中包含 `eventLoop` 诊断块,提供事件循环延迟(p99 和最大值)、事件循环利用率、CPU 核心比及 `degraded` 标志,以便运维人员查看缓慢启动或失控轮次何时阻塞事件循环。感谢 @vincentkoc。 - Gateway/agents:在已接受的 RPC 帧有机会刷新后再调度已接受的代理运行,从而降低预轮次 prompt/context 工作饿死即时 `agent.wait` 调用者的可能性。感谢 @vincentkoc。 - CLI/update:在尽力而为的 CLI 进程清理期间容忍过期的 memory-runtime 导入失败,这样 `openclaw update` 在终结器运行前替换哈希运行时块时,不再在退出时显示 `Cannot find module` 的干扰信息。感谢 @vincentkoc。 - CLI/channels logs:复用滚动日志文件解析器,使 `openclaw channels logs` 在跨越日期边界时回退到活跃的日期日志,而不会读取无关的自定义日志文件。修复 #42875;延续 #42904 和 #43043。感谢 @ethanclaw 和 @wdskuki。 - CLI/update:在 npm、ClawHub 或市场更新检查前的更新后插件同步阶段,跳过配置中禁用的已跟踪插件,保留其安装记录且不导致更新失败。修复 #73880。感谢 @islandpreneur007。 - Control UI:修复浏览器时区启用夏令时(DST)时“峰值错误时段”显示错误的小时速率问题。通过将小时消息计数存储为 UTC 日期键,并使用支持 DST 的 `Date.getHours()` 进行本地转换来解决。同时提取 `accumulateMessageCounts` 辅助函数以减少重复的每日/每小时聚合逻辑。(#49396) 感谢 @konanok。 - iMessage:规范化已发送消息回显文本键上已知的 `attributedBody` 前缀损坏标记,以便丢弃带有 U+FFFD/U+FFFE/U+FFFF/FEFF 前缀的延迟反射回显,同时不破坏内部文本。修复 #59973;延续 #59980 和 #62191。感谢 @neeravmakwana 和 @maguilar631697。 - Security/audit:将危险节点命令 ID 识别为有效的 `gateway.nodes.denyCommands` 条目,从而使审计功能仅对真正的拼写错误或不受支持的模式发出警告。(#56923) 感谢 @chziyue。 - Cron:将带有代理轮次覆盖的隐式文本负载视为代理轮次,保留计划文本提示的模型覆盖,而不是将其作为系统事件修剪。修复 #28905。(#64060) 感谢 @liaoandi。 - Telegram/exec approvals:停止将通用 Telegram 聊天白名单和 `defaultTo` 路由视为原生执行审批者;Telegram 现在使用显式的 `execApprovals.approvers` 或来自 `commands.ownerAllowFrom` 的所有者身份,以匹配首次配对的所有者引导路径。感谢 @pashpashpash。 - Plugins/providers:将网关启动时的主模型发现保留在仅含元数据的提供程序条目上,并在存在显式插件条目时复用活动的非语音能力提供程序,从而避免启动和媒体能力检查期间不必要的提供程序注册表加载。修复 #73729、#73835 和 #73793;延续 #73853 和 #73794。感谢 @sg1416-zg、@brokemac79 和 @poolside-ventures。 - Chat commands:将敏感群组 `/diagnostics` 和 `/export-trajectory` 的审批及结果路由至私有所有者路由,优先使用同平台 DM,回退至首个配置的所有者路由,从而使 Discord 群组调用在 Telegram 作为主要所有者界面时能正确路由至 Telegram。感谢 @pashpashpash。 - Gateway/hooks:对成功执行但 `deliver:false` 的代理钩子保持静默,为被抑制的成功公告记录钩子审计日志,并在尝试钩子投递后抑制回退摘要,同时仍暴露失败的钩子运行。修复 #55761;基于 #36332 和 #49234 构建。感谢 @EffortlessSteven、@cioclawcode 和 @BrennerSpear。 - 插件 SDK/Discord:恢复已弃用的 `openclaw/plugin-sdk/discord` 兼容性外观及已发布 `@openclaw/[email protected]` 包的旧版兼容组策略警告导出,涵盖其 config、account、directory、status 和 thread-binding 导入,同时保持新插件使用通用 SDK 子路径。修复 #73685;取代 #73703。感谢 @rderickson9 和 @SymbolStar。 - 频道/Discord:当多个启用的账号解析为同一 bot token 时,抑制重复的网关监控器,优先使用配置 token 而非默认环境变量回退,并将跳过的重复项报告为已禁用。取代 #73608。感谢 @kagura-agent。 - CLI/健康检查:基于检查的凭据元数据和运行时状态构建频道健康摘要,使 `openclaw health --json` 报告的 Discord `running`、`connected` 和 `tokenSource` 与频道状态保持一致。修复 #44354。感谢 @ferenc-acs。 - 控制 UI/语音通话:解码 Google Live 二进制 WebSocket JSON 帧,并在中断或关闭时停止队列中的浏览器音频,使浏览器 Talk 离开 `Connecting Talk...` 状态后,抢占式通话(barge-in)不再播放过期音频。修复 #73601 和 #73460;取代 #73466。感谢 @Spolen23 和 @WadydX。 - 频道/Discord:在 Discord 频道重新配置给其他代理后,忽略过期的路由式对话绑定,同时保留显式焦点和子代理绑定。修复 #73626。感谢 @ramitrkar-hash。 - 代理/引导:将待处理的 BOOTSTRAP.md 内容通过首次运行用户提示传递,同时将其排除在特权系统上下文之外,并在无法访问工作区文件时显示有限的引导指导。修复 #73622。感谢 @mark1010。 - ACP/任务:无论持久运行时模式如何,都将父级拥有的 ACP 会话归类为后台工作,并在无活动绑定时关闭终端中的过期 ACP 会话,使委托的 ACP 输出通过父任务通知器报告,而非表现为普通前台聊天会话。引用 #73609。感谢 @joerod26。 - 任务:保持终端镜像的 TaskFlow 时间戳固定于任务完成时间,并允许维护任务修复过期镜像,使 ACP 终端交付更新不再导致不一致的流程审计。引用 #73609。感谢 @joerod26。 - 网关/会话:添加保守的卡死会话恢复机制,仅在活动嵌入式运行、回复操作和通道任务保持序列化时释放过期会话通道,使排队跟进任务可正常排空,而不会中止合法的长轮询。引用 #73581、#73655、#73652、#73705、#73647、#73602、#73592 和 #73601。感谢 @WS-Q0758、@bryangauvin、@spenceryang1996-dot、@bmilne1981、@mattmcintyre、@Vksh07 和 @Spolen23。 - 插件:按文件签名缓存未更改的插件清单加载,减少在突发启动和运行时注册表路径中重复的 JSON/JSON5 解析与清单规范化。引用 #73532 和 #73647;延续 #73678。感谢 @TheDutchRuler。 - 插件/运行时依赖:缓存未更改的捆绑运行时镜像 dist 文件物化决策,并在所有者写入失败时关闭文件锁句柄,减少重复的启动块扫描并避免 FileHandle-GC 恢复停滞。引用 #73532。感谢 @oadiazp 和 @bstanbury。 - 插件/运行时依赖:对拥有的运行时暂存目录的临时清理失败进行重试和延迟处理,使 CLI 启动在捆绑依赖成功替换后不再中止。引用 #73903。感谢 @bobfreeman1989。 - 插件/运行时依赖:按文件签名缓存捆绑运行时依赖的 JSON/包文件,减少在捆绑频道启动期间重复读取暂存运行时元数据。引用 #73647 和 #73705。感谢 @mattmcintyre 和 @bmilne1981。 - 插件/运行时依赖:将捆绑插件依赖的暂存工作委托给具有持久运行时状态的 npm/pnpm 安装计划完成,从网关启动中移除保留清单和源码签出缓存的协调。引用 #73532。感谢 @oadiazp、@bstanbury 和 @jmfraga。 - 插件/运行时依赖:以显式的镜像根依赖元数据替换网关启动时的根块依赖推断,减少暂存运行时扫描,同时保留每个插件的按需安装。引用 #73532。感谢 @oadiazp 和 @bstanbury。 - 插件/运行时依赖:在仓库工作区外部运行 pnpm 暂存安装,并禁用 pnpm 发布年龄限制以实现精确的捆绑运行时依赖物化,使捆绑插件依赖修复能将包写入生成的暂存目录,而不阻塞全新的打包依赖。引用 #73532。感谢 @oadiazp 和 @bstanbury。 - CLI/TUI:将 `chat.history` 排除在模型目录发现之外,使初始网关支持的 TUI 历史记录加载不会因低核主机上缓慢的提供商/插件模型扫描而阻塞。引用 #73524。感谢 @harshcatsystems-collab。 - 频道/WhatsApp:即使套接字当前健康,也在频道状态中标记最近重新连接的关联账号,使 WhatsApp Web 会话在短暂重连后不再显示为正常状态。引用 #73602。感谢 @Vksh07。 - 频道/WhatsApp:记录共享调度器交付失败信息(包含回复类型、消息 ID、聊天 ID 和连接 ID),使“仅输入未发送”报告能够识别 WhatsApp 发送路径是否拒绝了生成的回复。引用 #74269。感谢 @tomcosta-git。 - 飞书:在流式卡片已关闭后抑制独立的延迟 `final` 文本交付,同时保持媒体附件可交付,使延迟最终文本不再重新打开重复的飞书卡片。修复 #71977。(#72294)感谢 @MonkeyLeeT。 - 网关:在配置、模式(schema)和文档中暴露 `gateway.handshakeTimeoutMs`,同时保留 `OPENCLAW_HANDSHAKE_TIMEOUT_MS` 的优先级,使负载较高或低配主机无需修补 dist 文件即可调整本地 WebSocket 预认证握手超时。取代 #51282;引用 #73592 和 #73652。感谢 @henry-the-frog。 - Gateway/TUI/status:对齐本地客户端、探测器和回退 RPC 之间基于配置与环境变量的 WebSocket 握手预算,同时保留显式状态超时与配对设备认证回退机制,从而避免较短的客户端看门狗将响应缓慢的本地网关标记为不可达。Refs #73524, #73535, #73592, and #73602。感谢 @harshcatsystems-collab, @DJBlackhawk, 和 @Vksh07。 - Gateway/startup:在 sidecar 启动窗口期间返回可重试的 `UNAVAILABLE` 状态,并让 CLI/TUI/status 客户端在现有超时预算内继续重试,从而避免早期连接显示为终端握手失败。Fixes #73652。感谢 @spenceryang1996-dot。 - Gateway/proxy:为本地 Gateway 控制平面 WebSocket(目标为 `localhost` 及回环 IP)绕过继承的代理环境变量,从而防止 Windows/WSL 代理设置拦截本地 CLI/TUI Gateway 连接。Supersedes #73474;refs #73602。感谢 @DhtIsCoding。 - Doctor/Gateway:在检查 Gateway 存活状态时使用轻量级的 `status` RPC,不执行通道摘要工作,从而避免缓慢的健康快照错误触发服务重启修复。Fixes #64400;supersedes #64511。感谢 @CHE10X 和 @EronFan。 - Agents/auth:在模型认证状态检查与启动预热期间,将外部 CLI 凭据发现范围限制为已配置的提供商,从而防止仅使用 opencode 及其他单提供商网关因无关的 Claude CLI Keychain 探测而阻塞。Fixes #73908。感谢 @Ailuras。 - Agents/model selection:在提供商/模型解析前解析斜杠形式的别名,并使别名解析后的主模型仍受临时提供商冷却期限制,从而避免 cron 任务和持久化会话重试已冷却的原始别名。Fixes #73573 和 #73657。感谢 @akai-shuuichi 和 @hashslingers。 - Agents/Claude CLI:在无提示读取 Claude 凭据时复用已缓存的 macOS Keychain 凭据,从而确保 doctor/runtime 检查不会遗漏新鲜的交互式 Claude 认证。Fixes #73682。感谢 @RyanSandoval。 - Agents/Claude CLI doctor:将工作区和项目目录检查范围限定为实际使用 Claude CLI runtime 的代理,从而防止非默认的 Claude 代理使默认代理看起来具有 Claude 支持。Fixes #73903。感谢 @bobfreeman1989。 - Gateway/sessions:在会话行、`sessions.patch` 和本地 `openclaw sessions --json` 中暴露有效的代理运行时元数据,同时保持由 Claude CLI 支持的行位于标准模型提供商下,从而避免运行时后端与模型身份混淆。Fixes #73090。感谢 @vishutdhar。 - Gateway/auth status:将外部 CLI 凭据覆盖范围限制为已配置的提供商、运行时或配置文件,并避免状态读取触发新的 Keychain 提示,从而防止单提供商 Gateway 配置在启动时探测无关的 Claude/Codex/MiniMax 认证。Fixes #73908。感谢 @Ailuras。 - Agents/runtime status:在 `agents.list`、Control UI 代理面板和 `/agents` 中暴露有效的代理运行时元数据,并避免将陈旧或累积的 CLI token 总量渲染为实时上下文用量。Fixes #73660, #73578, 和 #45268。感谢 @spartman, @DashLabsDev, 和 @xyooz。 - Agents/transcripts:剥离空的助手文本块,同时保留有效文本、图片和签名,从而防止 Anthropic 风格提供商拒绝已清理的对话轮次。Fixes #73640。感谢 @jowhee327。 - Gateway/sessions:在隐藏的生命周期事件中保留会话键,从而确保通过通道路由的运行仍持久化终端会话状态,并避免在 Codex 轮次完成后将会话状态挂起为运行中。感谢 @cathrynlavery。 - Providers/Bedrock:针对 Claude Opus 4.7 Bedrock 模型 ID、命名及应用程序推理配置文件(包括带点的 `opus-4.7` 引用)省略已弃用的 `temperature` 参数,并对嵌套验证响应进行分类以支持故障转移。Fixes #73663。感谢 @bstanbury。 - Gateway:将预认证/连接挑战超时时间提升至 15 秒,以便在较慢的主机上冷启动 CLI 时,在 Gateway 关闭连接前有更多时间处理 WebSocket 挑战。Fixes #51469;refs #73592 和 #62060。感谢 @GothicFox 和 @jackychen-png。 - CLI/status:当回环详细探测超时或报告未知能力时,回退到有界本地 `status` RPC,从而避免缓慢的读取诊断将可达的本地网关标记为不可达。Fixes #73535;refs #48360, #62762, #51357, 和 #42019。感谢 @RacecarGuy, @justinschille, @DJBlackhawk, @tianyaqpzm, 和 @0xrsydn。 - CLI/gateway:在 `gateway probe` 期间复用缓存的配对设备认证,并将连接后的诊断失败报告为可用性降级,从而避免在回环认证或读取超时后将健康的本地网关标记为不可达。Fixes #48360。感谢 @RacecarGuy。 - Channels/Discord:为 Discord Gateway WebSocket 握手设置 30 秒超时,以便停滞的 TLS/网络转换触发错误,使 Carbon 能继续重连循环,而不是让机器人静默直到重启。Refs #50046。感谢 @codexGW。 - Mattermost/WebSocket:发送协议 ping/pong 保活消息,并在 pong 停止到达时终止陈旧会话,从而实现静默 TCP 断连后的重连,而不是让监控处于空闲状态。Fixes #41837;carries forward #57621;refs #50138, #44160, 和 #51104。感谢 @JasonWang1124。 - Channels/Telegram:当面向用户的助手错误回复已覆盖该轮次时,抑制独立的失败编辑/写入警告负载,同时保持未解决的修改失败在看似成功或已抑制错误的回复后可见。Fixes #39631;refs #73750;carries forward #39636 和 #39717;将 #39406 留给可配置的投递策略。感谢 @Bartok9 和 @Bortlesboat。 - Control UI/agents:通过 `agents.list[].default` 持久化“设为默认”操作,而不是写入不受支持的 `agents.defaultId` 字段,从而确保保存的默认代理更改能通过配置验证。Fixes #65565;carries forward #72585。感谢 @luyao618。 - NVIDIA/NIM:持久化 `NVIDIA_API_KEY` 提供商标记,并将内置的 NVIDIA Chat Completions 模型标记为字符串内容兼容,以便 NIM 模型从 `models.json` 加载,且 OpenAI 兼容的子代理调用会发送纯文本内容。修复了 #73013 和 #50107;引用 #73014。感谢 @bautrey、@iot2edge、@ifearghal 和 @futhgar。 - Channels/Discord:允许仅文本配置移除 `GuildVoiceStates` 网关意图,并暴露带有速率限制回退日志的有界 `/gateway/bot` 元数据超时,从而降低空闲 CPU 占用和警告泛滥。修复了 #73709 和 #73585。感谢 @sanchezm86 和 @trac3r00。 - Agents/sessions:在提示到达模型之前,为同轮次的 `sessions_send` 和 A2A 回复提示添加跨会话 `isUser=false` 信封,使外部会话输出不再作为裸活跃用户文本呈现。修复了 #73702;引用 #73698、#73609、#73595 和 #73622。感谢 @alvelda。 - Channels/Telegram:当账户级公共 DM 设置与限制性顶层 `allowFrom` 冲突时拒绝访问,并在 `dmPolicy="open"` 表现为公共访问前要求有效的通配符。修复了 #73756;引用 #73698。感谢 @Hilo-Hilo 和 @xace1825。 - Channels/security:将开放 DM 白名单语义移至共享策略辅助函数中,并统一 Discord、Slack、Mattermost、Matrix、飞书、LINE、IRC、Google Chat、Zalo、Zalo User、QQ Bot 和 Synology Chat 的行为,使 `dmPolicy="open"` 仅在存在有效通配符时公开,否则仍尊重发送者白名单。引用 #73756 和 #73698。感谢 @Hilo-Hilo 和 @xace1825。 - ACP/tasks:清理任务记录已消失的孤立父级 ACP 会话,保留已绑定的持久会话,但清除未绑定的陈旧 ACPX 元数据,防止旧子会话无声地重新生成到聊天中。修复了 #73609。感谢 @joerod26。 - Outbound/security:在最终渠道交付边界剥离已知的内部运行时脚手架(如 `<system-reminder>` 和 `<previous_response>`),并在 Discord 输出中保留定向标签剥离,以防止降级后的框架回复向用户泄露这些标签。修复了 #73595。感谢 @gabrielexito-stack 和 @martingarramon。 - Security/Telegram:在只读审计/诊断模式下加载 Telegram 安全适配器,即使群组已禁用也会审计格式错误的 Telegram DM `allowFrom` 条目,并防止白名单 DM 审计统计陈旧的配对存储发送者,以确保公共/共享 DM 风险检查保持准确。引用 #73698。感谢 @xace1825。 - Plugins:移除隐藏的清单、提供商所有者、引导程序和渠道元数据缓存,以便在下一次读取元数据时可见插件安装、清单编辑和捆绑根目录更改,同时保留实际插件代码的运行时/模块加载器缓存。感谢 @shakkernerd。 - CLI/plugins:使用插件元数据快照进行安装槽位选择,并添加可选的插件生命周期时序追踪,使插件安装避免仅为元数据决策而运行时加载插件注册表。感谢 @shakkernerd。 - fix(plugins):将捆绑插件目录解析限制为受信任的包根目录。(#73275) 感谢 @pgondhi987。 - fix(security):防止通过服务环境变量和回收站辅助函数注入工作区 PATH。(#73264) 感谢 @pgondhi987。 - Active Memory:允许 `allowedChatTypes` 包含显式门户/webchat 会话,并在不透明会话 ID 遮蔽聊天类型之前对 `agent:...:explicit:...` 会话键进行分类。修复了 #65775。(#66285) 感谢 @Lidang-Jiang。 - Active Memory:允许隐藏的召回子代理同时使用 `memory_recall` 和传统的 `memory_search`/`memory_get` 内存工具契约,从而使内置 `memory-lancedb` 召回功能正常工作且不会破坏默认的 `memory-core` 路径。修复了 #73502。(#73584) 感谢 @Takhoffman。 - fix(device-pairing):在修复时针对已解析的令牌作用域验证 callerScopes [AI]。(#72925) 感谢 @pgondhi987。 - Active Memory docs:记录 `cacheTtlMs` 的 1000-120000 ms 范围及 15000 ms 默认值,以便设置代码片段不会引导用户超出模式限制。修复了 #65708。(#65737) 感谢 @WuKongAI-CMU。 - fix(agents):在 byProvider 工具策略查找中对提供商别名进行规范化 [AI]。(#72917) 感谢 @pgondhi987。 - fix(security):阻止来自工作区 .env 的 npm_execpath 注入 [AI辅助]。(#73262) 感谢 @pgondhi987。 - Tools/web_fetch:在提取前使用声明的 HTTP、XML 或 HTML meta 字符集将响应体从原始字节解码,使 Shift_JIS 及其他传统字符集页面不再返回乱码。修复了 #72916。感谢 @amknight。 - Active Memory:在构建调试遥测数据时跳过无负载的 `memory_search` 转录工具结果,使较新的空条目不再掩盖最新的有用调试负载。(#68773) 感谢 @SimbaKingjoe。 - Active Memory:防止召回设置时间消耗配置的模型超时,同时为钩子运行器提供插件的明确有界预算,使缓慢的嵌入式运行设置不再导致立即召回超时。修复了 #72606。(#72620) 感谢 @hyspacex。 - Channels/Discord:限制消息读取/搜索 REST 调用,将这些操作路由至网关执行,并在 `SessionKey` 为空时回退使用 `CommandTargetSessionKey` 作为入站钩子会话键,使 Discord 读取不会挂起且钩子仍能触发。修复了 #73431。(#73521) 感谢 @amknight。 - Plugins/media:自动启用由 `agents.defaults.imageGenerationModel`、`videoGenerationModel` 和 `musicGenerationModel` 主/回退引用所引用的提供商插件,使配置的 Google 和 MiniMax 媒体提供商不会因限制性插件白名单而保持禁用状态。感谢 @vincentkoc。 - Memory-core/dreaming:在启动后当定时任务服务尚不可达时重试托管式“梦境”定时任务注册,使计划的内存梦境推广清理能够恢复而无需等待心跳流量。修复了 #72841。感谢 @amknight。 - Acpx/runtime:在 `AcpxRuntime.ensureSession` 包装器边界处验证运行时会话模式,以便传入 `persistent` 或 `oneshot` 以外参数的调用者获得明确的 `ACP_INVALID_RUNTIME_OPTION` 错误,而不是静默地通过编码句柄回环为默认的 `persistent` 模式,随后再抛出 `SessionResumeRequiredError`。调查上下文:#73071。(#73548) 感谢 @amknight。 - CLI/infer:在缺少提供商 API 密钥时保留网页搜索回退机制,保留所选提供商的结构化验证错误,并允许每次请求的图像描述提示词覆盖配置的媒体入口提示词。(#63263) 感谢 @Spolen23。 - 聊天命令:在构建 `/think` 参数菜单时包含配置的模型目录推理元数据,以便 Ollama Cloud 和其他提供商拥有的推理模型显示支持的级别,而不仅仅是 `off`。修复 #73515;取代 #73568。感谢 @danielzinhu99 和 @neeravmakwana。 - Channels/Telegram:当关闭预览流式传输时抑制通用的工具进度提示,以便非流式 Telegram 轮次仅交付最终回复,同时审批、媒体和错误仍正常路由。引用 #72363 和 #72482。感谢 @neeravmakwana 和 @SweetSophia。 - CLI/model probes:为 `infer model run` 添加可重复的图像 `--file` 输入,用于本地和网关多模态模型的冒烟测试,以便通过原始模型探测接口测试 Ollama Qwen VL 和 Gemini 等视觉模型。修复 #63700。感谢 @cedricjanssens。 - CLI/model probes:为 `infer model run --gateway --model <provider/model>` 请求受信任的操作员作用域,以便网关原始模型冒烟测试可以使用一次性提供商/模型覆盖,而不是在提供商身份验证解析前被拒绝。修复 #73759。感谢 @chrislro。 - CLI/image describe:通过 `infer image describe` 和 `describe-many` 传递 `--prompt` 和 `--timeout-ms`,以便自定义视觉指令和较慢的本地模型预算能够到达 Ollama、OpenAI、Google 和 OpenRouter 等媒体理解提供商。引用 #63700。感谢 @cedricjanssens。 - 模型选择:当清除存储的会话覆盖时,包含被拒绝的提供商/模型引用和允许列表恢复提示,以便本地模型选择(如 Gemma GGUF 变体)不会使用通用消息回退到默认值。引用 #71069。感谢 @CyberRaccoonTeam。 - OpenAI 兼容提供商:在 OpenAI SDK 流式解析器看到之前丢弃仅含事件或数据为空的格式错误 SSE 帧,以便将 `event:` 与 `data:` 分离的代理不再因 `Unexpected end of JSON input` 导致流式运行崩溃。修复 #52802。感谢 @LyHug。 - 网关/OpenAI 兼容流式传输:在 `<final>` 标签跨越流式模型增量拆分后、到达 SSE 客户端之前将其剥离,以便 `/v1/chat/completions` 不再输出标签残留或在最终答案包装器跨越块边界时丢失内容。修复 #63325。感谢 @tzwickl。 - Ollama:当 `/api/tags` 省略时,通过 `/api/show` 解析明确选择的已登录 `:cloud` 模型,以便 `gemini-3-flash-preview:cloud` 和 `deepseek-v4-pro:cloud` 等可用模型不会在原生 `/api/chat` 传输运行前动态解析失败。修复 #73909。感谢 @chtse53。 - Discord/exec 审批:在没有原生 Discord 审批运行时保持本地 `/approve` 提示,并在原生审批投递无目标时发送手动回退通知,以便失败的 DM 卡片不再导致审批轮次静默或依赖模型编写的 Shell 命令。修复 #73954;延续 #74027。感谢 @guarismo 和 @brokemac79。 - 本地模型提示词缓存:将稳定的项目上下文置于易变的频道/会话提示词指导之上,并停止在消息工具描述中嵌入当前频道名称,以便 Ollama、MLX、llama.cpp 及其他前缀缓存后端避免在频道轮次间进行不必要的完整提示词重新处理。修复 #40256;取代 #40296。感谢 @rhclaw 和 @sriram369。 - 网关/OpenAI 兼容 API:针对 `models` 值非数组的运行时提供商保护提供商策略查找,以便 `/v1/chat/completions` 不再因 `provider?.models?.some is not a function` 而失败。修复 #66744;延续 #66761。感谢 @MightyMoud、@MukundaKatta。 - WhatsApp/Web:将明确的 Baileys 套接字时序参数传入每个 WhatsApp Web 套接字,并暴露 `web.whatsapp.*` 保活、连接和查询超时设置,以便不稳定网络可避免重复的 408 断开和握手超时循环。修复 #56365。(#73580) 感谢 @velvet-shark。 - WhatsApp/Web:当 408 重连后持续接收传输帧但停止投递应用消息时,恢复最近活跃的监听器,同时保持群组元数据回退不通过 Baileys 发送。修复 #63855 和 #66920;引用 #7433、#67986、#70856、#60007 和 #72621。感谢 @legonhilltech-jpg、@octopuslabs-fl、@Kanorin-chan 和 @stuswan。 - Channels/Telegram:在目标会话上持久化原生命令元数据,以便主题、助手和 ACP 绑定斜杠命令将其会话元数据附加到路由的对话中。(#57548) 感谢 @GaosCode。 - Channels/native commands:在群组聊天中保持已验证的原生斜杠命令回复可见,同时保留用于命令授权的明确所有者白名单。(#73672) 感谢 @obviyus。 - Pairing/doctor:当不存在命令所有者时,从首次批准的 DM 配对中引导 `commands.ownerAllowFrom`,并由 doctor 解释缺失的所有者,以便特权斜杠命令在入职后不会意外变得不可用。感谢 @pashpashpash。 - Telegram/exec:从 `commands.ownerAllowFrom` 推断原生执行审批者,并在可解析所有者时自动启用 Telegram 审批客户端,以便 `/diagnostics` 等仅限所有者的命令可在 Telegram 中审批,而无需重复的按频道审批者配置。感谢 @pashpashpash。 - 自动回复/会话:在静默的回复会话重置(压缩失败、角色顺序冲突)期间,将用户/助手对话的尾部内容保留至新生成的对话记录中,以确保直接对话的连续性在重新绑定后得以维持。修复 #70853。(#70898) 感谢 @neeravmakwana。 - 技能:从配置的技能根目录加载分组技能目录(如 `skills/<group>/<skill>/SKILL.md`),同时限制大型目录的分组发现范围。修复 #56915。(#72534) 感谢 @ottodeng、@MoerAI 和 @i010542。 - 配置:在环境变量引用检查前跳过格式错误的非字符串 `env.vars` 条目,使配置加载不再因数字或布尔值等 JSON 值而崩溃。(#42402) 感谢 @MiltonHeYan。 - Docker Compose:将缺失的配置和工作区绑定挂载默认设为 `${HOME:-/tmp}/.openclaw`,避免手动运行 compose 时生成无效的空白源卷规格。(#64485) 感谢 @jlapenna。 - 智能体/上下文引擎:在子智能体清理并重新解析上下文引擎时,保留子智能体配置的 `agentDir`,确保 `onSubagentEnded` 钩子始终作用于正确的单智能体状态。(#67243) 感谢 @jarimustonen。 - 渠道/WhatsApp:将配对验证回复限制为真实入站用户内容,防止来自已读回执、输入指示器、在线状态更新及其他非消息类 Baileys 更新带来的未请求提示。修复 #73797。(#73823) 感谢 @hclsys。 - 配置/Ollama:在仅云或云+本地设置完成后显示已配置的 Ollama 模型白名单,并跳过缓慢的逐模型云端元数据拉取。(#73995) 感谢 @obviyus。 - 渠道/WhatsApp:当机器人的 E.164 号码包含在 `allowFrom` 中时,重新检测显式群组 `@提及`,使共享号码设置不再跳过直接提及机器人的群组消息。修复 #49317。(#73453) 感谢 @juan-flores077。 - WhatsApp/可靠性:将真实的传输存活状态发布到 WhatsApp 渠道状态中,并在传输静默停滞时强制更早重连,使安静且健康的会话保持连接,同时在阻塞套接字恢复时避免触发后续的远程 408 超时路径。(#72656) 感谢 @Sathvik-1007。 - 核心/渠道:在保持现有行为不变的前提下,收紧对特定运行时、媒体和插件的边缘情况处理。感谢 @jesse-merhi。 - 渠道/WhatsApp:在所有 WhatsApp 可见的出站路径上剥离泄露的复数工具调用 XML 包装器,并将渠道错误载荷隔离在 WhatsApp 聊天之外。(#71830) 感谢 @rubencu。 - 智能体/嵌入式运行器:在边界感知的嵌入式流回退机制中注入已解析的 OAuth Bearer 令牌(并转发运行中止信号),使通过 `openai-codex-responses` 及其他边界感知传输路由的模型不再因 `401 Unauthorized: Missing bearer or basic authentication in header` 而失败。修复 #73559。(#73588) 感谢 @openperf。 - Telegram/网关:限制出站 Bot API 调用并缓存内置插件别名查找,使缓慢的 Telegram 发送或 WSL2 文件系统扫描不再导致网关回复阻塞。(#74210) 感谢 @obviyus。 - 配置/GitHub Copilot:在配置过程中复用现有的 Copilot 认证,并在模型选择器中显示提供方的清单模型目录。(#74276) 感谢 @obviyus。 - 配置/模型:将模型选择器的范围限制在所选清单提供方内,并在目录查找前启用其内置插件,使选择 GitHub Copilot 时不再回退到 Ollama 或跳过目录。(#74322) 感谢 @obviyus。 - 自动回复/子智能体:拒绝来自叶子子智能体的 `/focus` 命令,并将回退目标解析范围限制在请求子智能体的子级内,防止子智能体绑定超出其控制边界的对话。(#73613) 感谢 @drobison00。 - 网关/启动:为无真实工作区写入权限的沙箱派生会话跳过继承的工作区启动内存,使 `/new` 不再将主机工作区内存预加载到隔离的子进程中。(#73611) 感谢 @drobison00。 - 智能体/工具策略:在应用组范围工具策略或持久化网关组元数据前,针对会话或派生上下文验证调用者组 ID,防止伪造的组 ID 解锁权限更宽松的工具。(#73720) 感谢 @mmaps。 - 命令:将带渠道前缀的所有者白名单条目限制在匹配的提供方范围内,防止 webchat 命令上下文继承外部渠道所有者。感谢 @zsxsoft。 - 认证/设备配对:将引导交接令牌的签发、兑换及已批准配对基线限制在文档化的按角色作用域白名单内,使引导批准无法持久授予 `operator.admin`、`operator.pairing` 或 `node.exec` 作用域。感谢 @eleqtrizit。 - 提供方/GitHub Copilot:支持 GUI/RPC 向导的设备代码认证流程,使非 TTY 客户端(网关 RPC 桥接、GUI 向导)的引导流程能够正常完成而非返回空配置。危险状态处理现能区分 `access_denied` 和 `expired_token` 与传输错误。(#73290) 感谢 @indierawk2k2。 - 安装器/Linux:在将不可写的 npm 全局前缀切换至 `~/.npm-global` 前发出警告,并指导用户使用 `npm i -g openclaw@latest`(无需 `sudo`)运行后续全局更新,使 npm 继续使用重定向的用户前缀。修复 #44365;延续 #50479。感谢 @Sayeem3051。 - 网关/插件:在 Windows 上为内置插件模块启用原生 `require()` 快速路径,使插件加载使用 `require()` 而非 Jiti 的转换管道,在典型 6 插件配置下将启动时间从约 39 秒降至约 2 秒。修复 #68656。(#74173) 感谢 @galiniliev。 - macOS 应用:检测过期的网关 TLS 证书固定值,自动修复受信任的 Tailscale Serve 轮换,并显示已配对但未连接的 Mac 辅助节点,使部分网关连接不再显示为健康状态。感谢 @guti。