← 返回更新日志

OpenClaw v2026.4.29-beta.4 预发布

2026-04-30 · GitHub 原文
## 2026.4.29 ### 亮点 - 消息与自动化默认启用活动运行引导(active-run steering),强制可见回复,生成子代理的路由元数据,以及心跳提醒的可选跟进承诺。感谢 @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/配对/所有者范围处理、Docker/接入自动化,以及可信代理栈的 web-fetch 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。 - 安全策略:对于 GHSA 分类,将超出配置接受限制后的媒体/Base64 解码及格式转换开销归类为纯性能问题,除非报告证明存在限制绕过、崩溃、资源耗尽、数据泄露或其他边界绕过。(#74311) - 安全/OpenGrep:新增精确的 OpenGrep 规则包、源规则编译器、来源元数据检查,以及 PR/全量扫描工作流,用于验证内部代码和仅规则包更改,同时上传 SARIF 至 GitHub 代码扫描。(#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 验证后恢复 `openai-codex/gpt-5.4-mini` 用于 ChatGPT/Codex OAuth PI 运行,并统一清单、前向兼容元数据、文档和回归测试,使过期的 cron 和心跳配置重新生效。修复 #74451。感谢 @0xCyda、@hclsys 和 @Marvae。 - 内存/运行时依赖:仅在配置本地内存搜索时保留原生 `node-llama-cpp` 运行时,使打包安装能够修复本地嵌入而无需依赖无法访问的全局 npm 安装。修复 #74777。感谢 @LLagoon3。 - Plugins/runtime-deps:在写入运行时镜像临时文件前替换过期的符号链接镜像目标根目录,并跳过重写已实际生成的硬链接,从而在跨版本容器升级时避免在只读镜像层路径上陷入崩溃循环,同时减少预热镜像的频繁变更。修复 #75108;引用 #75069。感谢 @coletebou 和 @xiaohuaxi。 - Plugins/runtime-deps:保持从暂存插件运行时依赖中加载捆绑的提供程序策略配置,从而在严格限制的 `/var/lib/openclaw/plugin-runtime-deps` 目录上读取配置不再失败。修复 #74971。感谢 @eurojojo。 - Plugins/runtime-deps:在生成的 runtime-deps 安装清单中始终写入依赖映射,从而在计划为空时避免 npm 崩溃或修剪暂存的捆绑插件包。修复 #74949。感谢 @hclsys。 - Security/outbound:在纯文本清理过程中剥离重新生成的 HTML 标签,防止嵌套标签片段留下 CodeQL 检测到的 `<script>` 序列。感谢 @vincentkoc。 - Security/secrets:使用填充的时序安全缓冲区比较凭证字节,而不是在相等性检查前对候选密码进行哈希处理。感谢 @vincentkoc。 - Security/QQBot:在写入 `console.*` 前清理调试日志参数,从而在启用调试日志时防止网关负载字段伪造额外的日志行。感谢 @vincentkoc。 - QQBot:在命令注册表中统一斜杠命令认证和 c2cOnly 访问限制,发送斜杠命令文件附件时传递 `allowQQBotDataDownloads`,将 clear-storage 与实际下载目录对齐,并添加 `/bot-me` 以显示发送者用户 ID。(#73616) 感谢 @cxyhhhhh。 - CLI/agents/status:使 `openclaw agents`、文本 `agents list` 和纯文本 `status` 在只读元数据路径上运行,从而在打印前不再预加载插件运行时或实时通道扫描。修复 #74195。感谢 @NianJiuZst。 - Agents/local models:基于有效模型窗口派生上下文窗口保护阈值(设置 4k/8k 安全下限),从而避免小尺寸本地模型被固定的 16k/32k 预检截断值拒绝。修复 #42999。感谢 @chengjialu8888。 - PDF extraction:从已安装包的根目录解析 PDF.js 标准字体,并将文件系统路径传递给 Node 回退提取器,从而在渲染内置字体 PDF 时避免 `file://` URL 查找失败。修复 #51455;延续修复 #70936、#54447 和 #62175。感谢 @anyech、@JuanRdBO 和 @solomonneas。 - Media:将带有 `application/msword` 或 `application/x-cfb` MIME 类型的旧版 Word/OLE 附件视为二进制文件,从而避免看似可打印的 `.doc` 文件被作为文本嵌入提示词中。修复 #54176;延续修复 #54380。感谢 @andyliu。 - Config:在严格的根配置验证中接受文档记录的 `browser.tabCleanup` 键,从而在运行时读取前配置的标签清理不再失败。修复 #74577。感谢 @lonexreb 和 @ezdlp。 - Cron:在持久化更新前验证禁用任务的计划编辑,从而避免无效的 cron 更改部分修改已存储的任务。修复 #74459。感谢 @yfge。 - CLI/cron:当 `openclaw cron add --message` 省略非空的 `--agent`(包括空 agent 值和 session-key 任务)时发出警告,从而让计划中的 agent-turn 任务明确默认 agent 回退,同时保持系统事件静默。修复 #42196;延续修复 #42245。感谢 @ethanclaw。 - CLI/progress:当 TUI 输入独占原始 stdin 时抑制嵌套进度旋转器和行清除,从而避免 Crestodian `/status` 干扰当前输入行。(#75003) 感谢 @velvet-shark。 - Channels/status:将 Telegram、Slack 和 Google Chat 的只读白名单/默认目标访问器限制在仅配置路径上,从而避免状态和通道摘要解析基于 SecretRef 的运行时凭证。感谢 @eusine。 - Telegram:使用持久化消息编辑进行流式预览,而不是使用原生草稿状态,从而避免生成的回复在看似重复的草稿到消息转换中闪烁。(#75073) 感谢 @obviyus。 - Telegram:限制过低的长轮询客户端超时时间,从而避免配置的 `timeoutSeconds` 值低于 `getUpdates` 轮询窗口时每秒强制建立新的 HTTPS 连接。修复 #75114。感谢 @hpinho77。 - Active Memory:澄清已弃用的 `modelFallbackPolicy` 警告和配置帮助,将 `modelFallback` 描述为链式解析的最后手段,而非运行时故障转移。(#74602) 感谢 @jeffrey701。 - Channels/Discord:防止只读白名单/默认目标访问器解析基于 SecretRef 的机器人令牌,从而在令牌仅在网关运行时可用时避免状态和通道摘要失败。(#74737) 感谢 @eusine。 - Gateway/sessions:统一 `chat`、`agent` 和 `sessions` 服务器方法中的会话中止等待语义,使中止 RPC 在目标会话实际停止后才返回,而不是在运行仍在排空时提前解析。(#74751) 感谢 @BunsDev。 - Agents/output:在提供程序重放前丢弃仅包含元数据的复制入站助手重放回合,而不是合成占位符,从而避免 Telegram 和其他通道将 `[assistant copied inbound metadata omitted]` 作为模型输出接收。修复 #74745。感谢 @adamwdear 和 @Marvae。 - Doctor/memory:对 Ollama 和 LM Studio 等密钥可选的提供程序抑制跳过的嵌入就绪警告,同时保留超时和未就绪诊断。修复 #74608 和 #73882。感谢 @hclsys。 - Channels/groups:为已准备的调度路径保留仅观察模式的回合抑制,并恢复已弃用的通道回合运行时别名,从而在旧插件持续编译时保持被动观察者/组流静默。感谢 @vincentkoc。 - Feishu:跳过不携带任何媒体的空文本消息(例如 `{"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/命令:在 select 控件上保留原生命令参数菜单,使编码选项值不超过 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` 时,触发终端生命周期兜底机制,从而避免 Gateway 会话在故障转移暴露超时时卡在 `running` 状态。修复 #74607。感谢 @millerc79。 - 网关/诊断:在警告中包含会话卡住的原因提示和恢复跳过原因,从而允许运维人员判断通道是正在等待活跃工作、排队工作还是陈旧的事务记录。感谢 @vincentkoc。 - Providers/DeepSeek:通过提供者的 `resolveThinkingProfile` 钩子暴露原生 DeepSeek V4 的 `xhigh` 和 `max` 思考级别,使 `/think xhigh|max` 能够应用预期的计算强度,而非回退至基础级别。(#73008) 感谢 @ai-hpc。 - Agents/Codex:在运行时故障后限制嵌入式运行的清理、轨迹刷新及命令通道任务超时,使 Discord 及其他聊天会话恢复空闲状态,避免卡在处理中。感谢 @vincentkoc。 - Heartbeat/exec:静默消费仅含元数据的成功异步执行完成事件,使 Telegram 及其他聊天界面在出现 `No session found` 后不再请求缺失的命令日志。修复 #74595。感谢 @gkoch02。 - Web fetch:新增文档记录的 `tools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange` 可选配置,并将其贯穿至缓存键与 DNS/IP 检查中,使使用 `fc00::/7` 的信任型假 IP 代理栈无需广泛访问私有网络即可正常运行。修复 #74351。感谢 @jeffrey701。 - OpenAI Codex:恢复 `/verbose full` 的持久化及应用服务器工具输出转发,并重试 Gateway E2E 临时目录清理,使调试运行不会因过期的验证或清理不稳定因素而回退。感谢 @vincentkoc。 - Anthropic/Meridian:保留在 `content_block_start` 时播种到 anthropic-messages 流中的文本与思考内容,使 `[thinking, text]` 回复不再持久化为空回合或触发空响应回退。修复 #74410。感谢 @vyctorbrzezowski。 - Channels/Matrix:在 `openclaw matrix verify confirm-sas` 上完成交叉签名握手,使操作员的其他 Matrix 设备在代理确认后清除 `Verifying…` 循环,避免卡住。(#74542) 感谢 @nklock。 - CLI/status:在报告有效上下文时尊重特定频道的模型上下文窗口覆盖设置,使频道作用域的会话在 `openclaw status` 中正确反映当前窗口。感谢 @HemantSudarshan。 - Sandbox/Docker:当沙箱模式关闭时容忍 Docker 守护进程不可用,使 doctor 和预检检查不再在未运行 Docker 守护进程的安装上失败。修复 #73671。感谢 @kaseonedge。 - Control UI/mobile:通过 Lit 管理的状态持久化移动端聊天设置,并通过相同的状态路径路由移动端导航,使聊天面板切换在窄视口过渡时得以保留。感谢 @BunsDev。 - Control UI/exports:对齐可调整分隔线、移动端布局和导出 HTML 转录模板中的侧边栏触发区域,使侧边栏切换与导出的转录侧边栏渲染时具有一致的点击区域和样式。感谢 @BunsDev。 - Control UI/chat:在聊天运行活跃时禁用页面刷新功能,使意外刷新不会中止进行中的回复。感谢 @Angfr95 和 @BunsDev。 - Memory/LanceDB:从 `openclaw ltm list` 返回真实的记忆记录(支持可选的 `--limit` 和 createdAt 排序),而非空占位符,使 CLI 界面符合文档中记录的 LTM 列示规范。(#67952) 感谢 @zhangyue19921010。 - Media:在视觉管道错误中包含脱敏的逐次调整大小失败记录及已解析的模型输入能力,使 ARM64 图像故障可在不中断剩余路由调查的情况下进行诊断。引用 #74552。感谢 @1yihui。 - Control UI/i18n:使 zh-CN 的 agent、debug、channel-refresh 和 exec-approval 文案通过本地化源路由,同时保留英文 `Cron Jobs` 代理标签及安全审计命令样式。延续 #39692 的修复上下文。感谢 @hepeng154833488 和 @vincentkoc。 - Auto-reply:针对干净的纯空或仅推理的直接聊天回合,尊重显式的 `silentReply.direct: "allow"` 配置,同时保持默认直接聊天空响应防护的保守性。修复 #74409。感谢 @jesuskannolis。 - OpenAI Codex:当 Codex 回合仅包含基于 systemPrompt 的指令时,发送非空的 Responses 输入项,避免因 `input: []` 导致 ChatGPT 后端返回 400 错误。修复 #73820。感谢 @woodhouse-bot。 - Ollama:在原生流边界处规范化带提供者前缀的工具调用名称,使 Kimi/Ollama 的 `functions.exec` 等调用能正确分发为 `exec`,而非找不到配置的工具。修复 #74487。感谢 @afurm 和 @carreipeia。 - Security/audit:在模型层级和小参数检查之前解析配置的模型别名,使基于别名的 GPT-5/Codex 配置不再报告虚假的弱模型警告。修复 #74455。感谢 @blaspat。 - CLI/agent:将 Gateway 超时的嵌入式回退运行隔离在显式的 `gateway-fallback-*` 会话下,使已接受的 Gateway 运行不会竞争转录锁或替换路由的对话会话。修复 #62981。感谢 @HemantSudarshan。 - CLI/QR/device-pair:在颁发移动端配对引导令牌之前拒绝格式错误的公共设置 URL,同时保留对有效裸 host:port 设置 URL 的支持。感谢 @Lucenx9。 - Models/UI:从默认 Web 聊天、`/models` 和模型设置选择器中隐藏未认证的提供者,同时保留通过 `view: "all"`、`/models <provider> all` 和 `models list --all` 进行完整目录浏览的显式路径。修复 #74423。感谢 @guarismo 和 @SymbolStar。 - Ollama:在跳过 PI 发现时,使显式的本地模型运行保留在目标提供者的运行时钩子上,使一次性 Ollama 调用在流式传输前不再冷加载无关的提供者运行时。修复 #74078。感谢 @sakalaboator。 - Slack/prompts:依赖 Slack `interactiveReplies` 指导而非通用的 `inlineButtons` 配置提示,使已启用的 Slack 按钮指令不被冲突。修复 #46647。感谢 @jeremykoerber。 - Slack/reactions:将重复的 `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。 - Exec:拒绝无效的每次调用 `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/模型:恢复提供商过滤的 `models list --all --provider <id>` 行,适用于没有清单/静态目录覆盖的提供商(包括 Anthropic 和 Amazon Bedrock),同时保持兼容性回退不占用昂贵的可用性和解析器路径。感谢 @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:在运行时、设置、白名单编辑和健康检查修复中共享同一个 DM 策略/白名单解析器,使旧版 `dm.policy` / `dm.allowFrom` 兼容性迁移到标准的 `dmPolicy` / `allowFrom`,且不会产生分歧的访问检查。感谢 @Squirbie。 - 控制面板 UI:使聊天侧边栏分割线可聚焦、支持键盘调整大小、具有 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 重启路径,从而使临时连通性故障不再导致 Gateway 崩溃或长轮询卡死。修复 #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` 或其传输活动过时,在频道状态和健康检查中显示轮询存活警告,从而使静默的轮询故障不再看似正常。引用 #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。 - 终端 UI/状态:当活动运行已清除且无跟踪运行剩余时,若最终事件到达则清除过时的 `streaming` 页脚状态,同时保留并发运行所有权和非活动本地 `/btw` 终端处理。修复 #64825;延续 #64842、#64843、#64847 和 #64862。感谢 @briandevans 和 @Yanhu007。 - 频道/Discord:当 Discord 无法解析机器人自身身份时使启动失败关闭,并在仅配置提及模式可检测提及时保持提及门控激活,从而使提供商不再在缺少 bot id 的情况下继续运行。修复 #42219;延续 #46856 和 #49218。感谢 @education-01 和 @BenediktSchackenberg。 - 频道/Discord:在标点和码点安全回退边界处拆分长 CJK 回复,从而使 Discord 分块保持可读且不损坏 Unicode 辅助平面字符。修复 #38597;修复 #71384。感谢 @p3nchan。 - TUI:在活跃工具/生命周期心跳检测期间保持流式监控存活,在断开连接时暂停它,并在失效重连运行后重新加载历史记录,从而防止长时间运行的聊天误判为空闲或卡在陈旧流式中。修复 #69081。感谢 @EenvoudJasper。 - Browser/gateway:忽略来自 `Page.handleJavaScriptDialog` 的 Playwright 对话框关闭竞态条件,这样当对话框在 Playwright 接受前消失时,浏览器自动化操作不再导致 Gateway 崩溃。(#40067) 感谢 @randyjtw。 - Cron/Gateway:将错过的独立 Agent 回合追赶任务推迟到频道启动窗口之外,这样在重启后提供商连接期间,超时的 Cron 任务不会导致 Discord 或 Telegram 消息阻塞。感谢 @vincentkoc。 - Heartbeat/cron:在 Cron 任务活跃或排队时推迟心跳回合,为子 Agent/嵌套通道压力添加可选的 `heartbeat.skipWhenBusy` 配置,并在繁忙跳过时重试而不推进调度,从而防止本地 Ollama 主机并发运行心跳和 Cron 提示。修复 #50773。感谢 @scottgl9。 - Agents/thinking:尊重包含 `xhigh` 的已配置模型 `compat.supportedReasoningEfforts` 条目,以便自定义 OpenAI 兼容提供商引用能在命令菜单、Gateway 会话、Agent CLI 和 `llm-task` 中一致地暴露并验证 `/think xhigh`。延续 #48904。感谢 @Milchstrassse 和 @wufunc。 - Vercel AI Gateway:为可信的 OpenAI/Codex 上游引用暴露提供商拥有的 `/think xhigh`,为 Anthropic 上游引用暴露 Claude 自适应思考,同时保持不受信任的命名空间引用在基础级别。延续 #41561。感谢 @Zcg2021。 - Plugins/runtime-deps:在 Gateway 启动期间清理陈旧的 `openclaw-unknown-*` 捆绑运行时依赖根目录,同时保留最近或锁定的根目录,从而防止旧暂存垃圾在重启间不断累积。感谢 @vincentkoc。 - Plugins/runtime-deps:将另外十个根包运行时依赖(`@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。 - Doctor/TTS:在运行 `openclaw doctor --fix` 期间,将遗留的 `messages.tts.enabled`、Agent TTS、频道 TTS 和语音通话插件 TTS 开关迁移至 `auto` 模式,以匹配文档中记录的 TTS 配置契约。感谢 @vincentkoc。 - CLI/logs:当隐式回环 Gateway 连接在 `logs.tail` 之前或期间关闭或超时时,回退到配置的 Gateway 文件日志,以便在诊断本地模型 Gateway 断开连接时 `openclaw logs` 仍能正常工作。引用 #74078。感谢 @sakalaboator。 - MCP/plugins:使用聊天内容强制转换而非默认对象字符串化来处理非数组插件工具结果,以便 MCP 调用者能从插件工具接收到有用的 JSON/文本内容。感谢 @vincentkoc。 - Active Memory/QMD:通过 `memory.qmd.update.startup` 将 Gateway 启动时的 QMD 刷新设为可选,保持正常内存访问为懒加载,保留交互式文件监听,并使监听器的依赖/构建忽略项与 QMD 扫描器对齐,从而冷启动 Gateway 时默认不再导入或初始化 QMD。感谢 @codexGW。 - Channels/Discord:通过共享频道生命周期队列移除 Discord 拥有的排队运行超时回复,同时保留消息顺序和兼容性超时常量,这样长时间的 Discord 回合仍由会话/工具/运行时生命周期管理,而非频道回退错误。感谢 @codexGW。 - Agents/tools:将 `process.poll` 等待时间限制为 30 秒,在工具模式中声明该上限,并在等待期间尊重中止信号,从而防止长时间命令轮询在取消后仍阻塞 Agent 响应。感谢 @vincentkoc。 - Plugin SDK:新增追踪的 Discord 组件消息辅助函数和 Telegram 账户解析兼容性外观,以便使用这些子路径的现有插件能正常解析,同时新插件保持使用通用频道 SDK 契约。感谢 @vincentkoc。 - Shared labels:在组/频道 slug 规范化过程中保留 Unicode 组合标记和 NFC 等效的带重音文本,使非拉丁标签不再丢失有意义的字符。修复 #58932;延续 #58942 和 #58995。感谢 @fengqing-git、@Starhappysh 和 @koen666。 - Channels/Telegram:发送普通 Telegram 视频时包含探测到的视频宽高,使竖屏片段能正确显示方向,而非被客户端拉伸。(#18915) 感谢 @storyarcade。 - Docs/Hetzner:明确 SSH 隧道访问需在运行 `ssh -L` 前配置 `AllowTcpForwarding local`,从而防止加固的 VPS sshd 配置阻断回环 Gateway 访问。修复 #54557;延续 #54564;引用 #54954。感谢 @satishkc7、@blackstrype 和 @Aftabbs。 - Agents/config:在缩小内部配置写入期间保留用户编写的 `agents.defaults.params` 和按模型配置的 `agents.defaults.models[].params`,从而防止 `openclaw.json` 中的 OpenAI 传输覆盖(如 `transport: "sse"` 和 `openaiWsWarmup: false`)被剥离。修复 #73607;引用 #73428。感谢 @quangtran88。 - Agents/model config:通过标准模型键解析按模型的额外参数,同时保留遗留的双前缀回退条目,从而使带提供商前缀的模型 ID(如 `openrouter/auto`)能保留其配置的运行时参数。(#44319) 感谢 @HenryXiaoYang。 - Gateway/shutdown:通过 `ShutdownResult` 报告结构化的关闭警告和 HTTP 关闭超时警告,同时保留生命周期钩子的加固机制。承接 #41296。感谢 @edenfunf。 - Control UI:在选项渲染后,使 Agents Overview 和配置表单的选择下拉菜单保持其配置的值,同时保留继承的代理模型占位符。修复 #40352;承接 #52948。感谢 @xiaoquanidea。 - Agents/exec:启动 zsh、bash 和 fish 主机执行 shell 时抑制启动文件,同时保留现有的 PATH 回退机制,以防止守护进程环境被 shell 启动文件覆盖。承接 #40200;修复 #40179。感谢 @NewdlDewdl。 - Plugins/QA:在插件测试套件运行前预构建私有 QA 通道运行时,以免包装器的 CPU/RSS 测量值被私有 QA 发行版重建工作污染。感谢 @vincentkoc。 - Plugins/QA:新增一个 Kitchen Sink 插件测试套件,用于安装外部包、检查命令清单、MCP 工具、通道状态、提供商轮次、Gateway RSS、CPU 及致命日志异常。感谢 @vincentkoc。 - Plugins/config:在单次配置规范化过程中复用内置插件别名扫描,使 Kitchen Sink 风格的插件配置不再因在代理轮次前反复重新扫描内置元数据而占用 Gateway CPU。感谢 @vincentkoc。 - Plugins/channels:在运行时的通道注册遗漏所需配置辅助程序并污染通道状态前,拒绝格式错误的注册。感谢 @vincentkoc。 - MCP/plugins:通过 plugin-tools MCP 桥接序列化原始插件工具返回值,使 Kitchen Sink 风格的工具不再暴露 `undefined` 内容。感谢 @vincentkoc。 - Gateway/reload:将默认重启延迟和 SIGUSR1 重启排空限制为五分钟,同时保留显式的 `deferralTimeoutMs: 0` 无限等待,以防止过时的活跃工作计数永远阻塞配置重载。感谢 @vincentkoc。 - Active Memory:使用配置的召回超时加上设置缓冲期(而非 150 秒最大预算)注册 prompt-build 钩子,使默认内存召回不会导致轮次启动延迟数分钟。感谢 @vincentkoc。 - Gateway/readiness:在本地或认证的 `/readyz` 响应中包含 `eventLoop` 诊断块,提供事件循环延迟(p99 和最大值)、事件循环利用率、CPU 核心比率及 `degraded` 标志,使操作员能够查看缓慢启动或失控轮次何时阻塞事件循环。感谢 @vincentkoc。 - Gateway/agents:在已接受的 RPC 帧有机会刷新后再调度已接受的代理运行,从而降低预轮次 prompt/上下文工作饿死即时 `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` 路由视为原生 exec 批准者;Telegram 现使用显式的 `execApprovals.approvers` 或来自 `commands.ownerAllowFrom` 的所有者身份,以匹配首次配对的所有者引导路径。感谢 @pashpashpash。 - Plugins/providers:保持 Gateway 启动时的主模型发现仅针对仅元数据的提供商条目,并在存在显式插件条目时复用活动的非语音能力提供商,避免启动期间和媒体能力检查时不必要的提供商注册表加载。修复 #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` 兼容性外观(facade)以及已发布 `@openclaw/[email protected]` 包的遗留兼容性组策略警告导出,涵盖其 config、account、directory、status 和 thread-binding 导入,同时保持新插件使用通用 SDK 子路径。修复 #73685;取代 #73703。感谢 @rderickson9 和 @SymbolStar。 - 频道/Discord:当多个启用的账户解析为同一个机器人令牌时,抑制重复的网关监控器,优先使用配置令牌而非默认环境变量回退,并将跳过的重复项报告为已禁用。取代 #73608。感谢 @kagura-agent。 - CLI/健康检查:基于检查的凭据元数据和运行时状态构建频道健康摘要,使 `openclaw health --json` 报告的 Discord `running`、`connected` 和 `tokenSource` 与频道状态保持一致。修复 #44354。感谢 @ferenc-acs。 - 控制面板 UI/Talk:解码 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。 - 插件/运行时依赖:缓存未更改的捆绑运行时镜像分发文件实例化决策,并在所有者写入失败时关闭文件锁句柄,减少重复的启动块扫描并避免 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。 - 网关:在配置、架构和文档中暴露 `gateway.handshakeTimeoutMs`,同时保留 `OPENCLAW_HANDSHAKE_TIMEOUT_MS` 的优先级,使负载较高或低配主机能够调整本地 WebSocket 预认证握手,而无需修补分发文件。取代 #51282;引用 #73592 和 #73652。感谢 @henry-the-frog。 - Gateway/TUI/status:对齐本地客户端、探测器和回退 RPC 中配置的与基于环境变量的 WebSocket 握手时间预算,同时保留显式状态超时与配对设备认证回退机制,从而避免较短的客户端看门狗将响应缓慢的本地网关误判为不可达。Refs #73524, #73535, #73592, and #73602. Thanks @harshcatsystems-collab, @DJBlackhawk, and @Vksh07. - Gateway/startup:在 sidecar 启动窗口期返回可重试的 `UNAVAILABLE` 状态,并让 CLI/TUI/status 客户端在其现有超时预算内继续重试,从而避免早期连接被报告为终端握手失败。Fixes #73652. Thanks @spenceryang1996-dot. - Gateway/proxy:为指向 `localhost` 及回环 IP 的本地 Gateway 控制平面 WebSocket 连接绕过继承的代理环境变量,从而防止 Windows/WSL 的代理设置拦截本地 CLI/TUI Gateway 连接。Supersedes #73474; refs #73602. Thanks @DhtIsCoding. - Doctor/Gateway:在检查 Gateway 存活状态时使用轻量级的 `status` RPC,跳过通道摘要处理,从而避免因健康快照缓慢而错误触发服务重启修复。Fixes #64400; supersedes #64511. Thanks @CHE10X and @EronFan. - Agents/auth:在模型认证状态检查与启动预热期间,将外部 CLI 凭据发现范围限制为已配置的提供商,从而防止仅支持 opencode 及其他单提供商网关因探测无关的 Claude CLI Keychain 而阻塞。Fixes #73908. Thanks @Ailuras. - Agents/model selection:在提供商/模型解析前解析斜杠格式别名,并使解析后的主模型仍受临时提供商冷却期限制,从而避免 cron 任务和持久化会话重试已冷却的原始别名。Fixes #73573 and #73657. Thanks @akai-shuuichi and @hashslingers. - Agents/Claude CLI:在无提示读取 Claude 凭据时复用已缓存的 macOS Keychain 凭据,从而确保 doctor/runtime 检查不会遗漏新鲜的交互式 Claude 认证。Fixes #73682. Thanks @RyanSandoval. - Agents/Claude CLI doctor:将工作区和项目目录检查范围限定为实际使用 Claude CLI runtime 的代理,从而防止非默认的 Claude 代理误导默认代理显示为 Claude 支持。Fixes #73903. Thanks @bobfreeman1989. - Gateway/sessions:在会话行、`sessions.patch` 及本地 `openclaw sessions --json` 中暴露有效的代理运行时元数据,同时保持由 Claude CLI 支持的会话行归属于标准模型提供商,从而避免运行时后端与模型身份混淆。Fixes #73090. Thanks @vishutdhar. - Gateway/auth status:将外部 CLI 凭据覆盖范围限制为已配置的提供商、运行时或配置文件,并使状态读取不触发新的 Keychain 提示,从而防止单提供商网关在启动时探测无关的 Claude/Codex/MiniMax 认证。Fixes #73908. Thanks @Ailuras. - Agents/runtime status:在 `agents.list`、Control UI 代理面板及 `/agents` 中暴露有效的代理运行时元数据,并避免将过期或累积的 CLI token 总量渲染为实时上下文用量。Fixes #73660, #73578, and #45268. Thanks @spartman, @DashLabsDev, and @xyooz. - Agents/transcripts:在保留有效文本、图片和签名时剥离空的助手文本块,从而防止类 Anthropic 提供商拒绝已清理的对话轮次。Fixes #73640. Thanks @jowhee327. - Gateway/sessions:在隐藏的生命周期事件中保留会话键,从而确保通道路由的运行仍能持久化终端会话状态,并避免在 Codex 轮次完成后将会话状态悬停为运行中。Thanks @cathrynlavery. - Providers/Bedrock:在 Claude Opus 4.7 的 Bedrock 模型 ID、命名及应用程序推理配置文件中省略已弃用的 `temperature` 参数(包括带点号的 `opus-4.7` 引用),并对嵌套的验证响应进行分类以支持故障转移。Fixes #73663. Thanks @bstanbury. - Gateway:将预认证/连接挑战超时时间提升至 15 秒,从而让较慢主机上的冷启动 CLI 在 Gateway 关闭连接前有更多时间处理 WebSocket 挑战。Fixes #51469; refs #73592 and #62060. Thanks @GothicFox and @jackychen-png. - CLI/status:当回环详细探测超时或报告未知能力时,回退到有界本地 `status` RPC,从而避免缓慢的读取诊断将可访问的本地网关误判为不可达。Fixes #73535; refs #48360, #62762, #51357, and #42019. Thanks @RacecarGuy, @justinschille, @DJBlackhawk, @tianyaqpzm, and @0xrsydn. - CLI/gateway:在 `gateway probe` 期间复用已缓存的配对设备认证,并将连接后的诊断失败报告为可用性降级,从而避免在回环认证或读取超时后将健康的本地网关标记为不可达。Fixes #48360. Thanks @RacecarGuy. - Channels/Discord:为 Discord Gateway WebSocket 握手设置 30 秒超时,从而在 TLS/网络转换停滞时触发错误,使 Carbon 能继续重连循环,而非在重启前保持机器人静默。Refs #50046. Thanks @codexGW. - Mattermost/WebSocket:发送协议 ping/pong 保活消息,并在 pong 停止到达时终止陈旧会话,从而在 TCP 静默断开时触发重连,而非让监控处于空闲状态。Fixes #41837; carries forward #57621; refs #50138, #44160, and #51104. Thanks @JasonWang1124. - Channels/Telegram:当面向用户的助手错误回复已覆盖该轮次时,抑制独立的编辑/写入失败警告负载,同时保持未解决的变更失败在看似成功或已抑制错误的回复下可见。Fixes #39631; refs #73750; carries forward #39636 and #39717; leaves #39406 for configurable delivery policy. Thanks @Bartok9 and @Bortlesboat. - Control UI/agents:通过 `agents.list[].default` 持久化“设为默认”操作,而非写入不支持的 `agents.defaultId` 字段,从而确保保存的默认代理更改能通过配置验证。Fixes #65565; carries forward #72585. Thanks @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` 包含显式门户/网络聊天会话,并在不透明会话 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 文档:记录 `cacheTtlMs` 的 1000-120000 毫秒范围及 15000 毫秒默认值,使安装代码片段不会引导用户超出模式限制。修复了 #65708。(#65737) 感谢 @WuKongAI-CMU。 - fix(agents):在按提供商工具策略查找中对提供商别名进行规范化 [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。 - 频道/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 兼容流式传输:在到达 SSE 客户端之前,剥离跨流式模型增量分割的 `<final>` 标签,这样 `/v1/chat/completions` 不再在最终答案包装器跨越块边界时输出标签残留或丢失内容。修复 #63325。感谢 @tzwickl。 - Ollama:当 `/api/tags` 省略已明确选择的已登录 `:cloud` 模型时,通过 `/api/show` 解析它们,以便 `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。 - 频道/Telegram:在目标会话上持久化原生命令元数据,以便主题、助手和 ACP 绑定的斜杠命令能将其会话元数据附加到路由的对话中。(#57548) 感谢 @GaosCode。 - 频道/原生命令:在群组聊天中保持已验证的原生斜杠命令回复可见,同时保留用于命令授权显式的所有者允许列表。(#73672) 感谢 @obviyus。 - 配对/医生:当不存在命令所有者时,从首次批准的 DM 配对中引导 `commands.ownerAllowFrom`,并让医生解释缺失的所有者,以便特权斜杠命令在引导后不会意外不可用。感谢 @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` 时,重新检测显式群组 `@mentions`,使共享号码设置不再跳过直接提及机器人的群组消息。修复 #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。