← 返回更新日志

OpenClaw v2026.4.20-beta.1 预发布

2026-04-21 · GitHub 原文
### 变更 - **引导/向导**:重新设计安装安全免责声明,采用单一黄色警告横幅、分节标题和项目符号清单,并取消注释区域的淡化效果,使关键指引更易于扫描;在初始模型目录加载期间添加加载旋转图标,避免向导在加载过程中空白;在提供商 API 密钥提示中添加“API 密钥”占位符。(#69553) 感谢 @Patrick-Erichsen。 - **代理/提示词**:强化默认系统提示词和 OpenAI GPT-5 覆盖层,加入更清晰的完成偏好、实时状态检查、弱结果恢复以及验证后再最终输出的指导。 - **模型/成本**:支持来自缓存目录和配置模型的分层模型定价,并为令牌使用报告包含捆绑的 Moonshot Kimi K2.6/K2.5 成本估算。(#67605) 感谢 @sliverp。 - **会话/维护**:默认强制执行内置的条目上限和时效性修剪,并在加载时修剪过大的存储,以防止累积的 cron/执行器会话积压导致网关在写入路径运行前发生内存溢出。(#69404) 感谢 @bobrenze-bot。 - **插件/测试**:在重复的相同上下文加载中复用插件加载器别名和 Jiti 配置解析,减少导入密集型测试开销。(#69316) 感谢 @amknight。 - **Cron**:将运行时执行状态拆分为 `jobs-state.json`,使 `jobs.json` 保持稳定以用于 Git 跟踪的作业定义。(#63105) 感谢 @Feelw00。 - **代理/压缩**:在上下文压缩期间发送选择加入的开始和完成通知。(#67830) 感谢 @feniix。 - **Moonshot/Kimi**:默认将捆绑的 Moonshot 设置、网络搜索和媒体理解界面设为 `kimi-k2.6`,同时保留 `kimi-k2.5` 以兼容旧版本。(#69477) 感谢 @scoootscooob。 - **Moonshot/Kimi**:允许在 `moonshot/kimi-k2.6` 上设置 `thinking.keep = "all"`,并为其他 Moonshot 模型或固定了 `tool_choice` 而禁用思考的请求剥离该设置。(#68816) 感谢 @aniaan。 - **BlueBubbles/群组**:将每组的 `systemPrompt` 配置转发到入站上下文的 `GroupSystemPrompt` 中,以便配置的组特定行为指令(例如线程回复和轻点回应约定)在每一轮都被注入。支持 `"*"` 通配符回退匹配现有的 `requireMention` 模式。关闭 #60665。(#69198) 感谢 @omarshahine。 - **插件/任务**:添加分离的运行时注册合约,使插件执行器能够拥有分离的任务生命周期和取消功能,而无需触及核心任务内部结构。(#68915) 感谢 @mbelinky。 - **终端/日志**:通过用单个正则表达式替换迭代控制字符剥离循环来优化 `sanitizeForLog()`,同时保留现有的 ANSI 优先消毒行为。(#67205) 感谢 @bulutmuf。 - **QA/CI**:使 `openclaw qa suite` 和 `openclaw qa telegram` 在场景失败时默认失败,为仅生成产物的运行添加 `--allow-failures`,并为 CI 自动化收紧实时通道默认值。(#69122) 感谢 @joshavant。 - **Mattermost**:将思考过程、工具活动和部分回复文本流式传输到单个草稿预览帖子中,并在安全时原地定稿。(#47838) 感谢 @ninjaa。 ### 修复 - **执行/YOLO**:通过 Python/Node 脚本预飞行硬化路径,停止在 `security=full` 加 `ask=off` 模式下拒绝网关主机执行,因此无提示的 YOLO 执行可以再次直接运行解释器 stdin 和 here-doc 形式,如 `node <<'NODE' ... NODE`。 - **OpenAI Codex**:将默认 OpenAI/Codex 和 GitHub Copilot 兼容主机上的遗留 `openai-completions` 传输覆盖规范化回原生 Codex 响应传输,同时保持自定义代理不变。(#45304, #42194) 感谢 @dyss1992 和 @DeadlySilent。 - **Anthropic/插件**:将 Anthropic `api: "anthropic-messages"` 默认范围限定为 Anthropic 拥有的提供商,因此 `openai-codex` 和其他没有显式 `api` 的提供商不再被重写到错误的传输。修复 #64534。 - **fix(qqbot)**:在 uploadC2CMedia 和 uploadGroupMedia 中添加 SSRF 防护以保护直接上传 URL 路径 [AI 辅助]。(#69595) 感谢 @pgondhi987。 - **fix(gateway)**:在模板渲染的映射 sessionKeys 上强制执行 allowRequestSessionKey 门控。(#69381) 感谢 @pgondhi987。 - **浏览器/Chrome MCP**:将 `DevToolsActivePort` 附加失败作为浏览器连接错误而非通用的“等待标签页”超时抛出,并将已注销的回退指向托管的 `openclaw` 配置文件。 - **Webchat/图片**:将内联图片附件视为媒体以进行空回合门控,同时仍忽略仅元数据的空白回合。(#69474) 感谢 @Jaswir。 - **Discord/think**:仅在 `/think` 自动补全中为实际支持提供商托管自适应思考的提供商/模型对显示 `adaptive`,因此 GPT/OpenAI 模型不再广告 Anthropic 专属选项。 - **思考**:仅为显式支持提供商最大推理的模型暴露 `max`,并在用户切换到其他模型时将存储的 `max` 设置重新映射到支持的最大思考模式。 - **网关/使用情况**:使用 FIFO 驱逐限制成本使用缓存,以便日期/范围查找不会无限增长。(#68842) 感谢 @Feelw00。 - **OpenAI/响应**:针对每个 GPT 模型支持的推理工作量解析 `/think` 级别,因此 `/think off` 不再变为高推理或发送不支持的 `reasoning.effort: "none"` 负载。 - **Lobster/TaskFlow**:允许管理的批准恢复在不使用恢复令牌的情况下使用 `approvalId`,并在批准等待状态中持久化该 ID。(#69559) 感谢 @kirkluokun。 - **插件/启动**:将捆绑的运行时依赖安装到每个插件自己的运行时目录中,在重建后复用源代码检出修复缓存,并且仅记录实际安装的包,以便在依赖存在后重复的网关启动保持安静。 - **插件/启动**:在修复捆绑插件运行时依赖时忽略 pnpm 的 `npm_execpath`,并跳过仅工作区包规范,因此仅 npm 安装标志或本地工作区链接不会破坏打包的插件启动。 - **MCP**:为标准输入服务器阻止解释器启动环境键(如 `NODE_OPTIONS`),同时保留普通凭据和代理环境变量。(#69540) 感谢 @drobison00。 - **代理/shell**:忽略非交互式占位符 shell(如 `/usr/bin/false` 和 `/sbin/nologin`),回退到 `sh`,以便服务用户执行运行不再立即退出。(#69308) 感谢 @sk7n4k3d。 - **设置/TUI**:在保留配置的网关目标和认证源的同时,在新进程中重新启动设置 hatch TUI,以便入职干净地恢复终端状态,而不会在命令行参数上暴露网关密钥。(#69524) 感谢 @shakkernerd。 - **Codex**:避免在具有入站图像的本地视觉回合中重新公开图像生成工具,并保持配置的图像提供程序上的裸图像模型覆盖。(#65061) 感谢 @zhulijin1991。 - **会话/重置**:在 `/new` 和 `/reset` 上清除自动 sourced 模型、提供商和认证配置文件覆盖,同时保留显式用户选择,因此频道会话停止固定到运行时回退选择。(#69419) 感谢 @sk7n4k3d。 - **会话/成本**:像令牌计数器一样快照 `estimatedCostUsd`,因此重复的持久化路径不再将同一运行成本累积多达数十次。(#69403) 感谢 @MrMiaigi。 - **OpenAI Codex**:将 ChatGPT/Codex OAuth 响应请求通过 `/backend-api/codex` 端点路由,因此 `openai-codex/gpt-5.4` 不再命中已移除的 `/backend-api/responses` 别名。(#69336) 感谢 @mzogithub。 - **OpenAI/响应**:在出站响应 API 调用前剥离孤立推理块,因此压缩或恢复的历史记录不再因独立的推理项而失败。(#55787) 感谢 @suboss87。 - **Cron/CLI**:以与逗号分隔输入相同的方式解析 PowerShell 风格的 `--tools` 允许列表,因此 `cron add` 和 `cron edit` 不再在 Windows 上将 `exec read write` 持久化为一个组合工具条目。(#68858) 感谢 @chen-zhang-cs-code。 - **浏览器/用户配置文件**:让现有会话 `profile="user"` 工具调用自动路由到连接的浏览器节点或使用显式 `target="node"`,同时仍遵守显式 `target="host"` 固定。(#48677) - **Discord/斜杠命令**:容忍斜杠命令和模型选择器流程中的部分 Discord 频道元数据,因此当频道名称、主题或线程父元数据不可用时,部分频道对象不再崩溃。(#68953) 感谢 @dutifulbob。 - **BlueBubbles**:合并出站 HTTP 通过类型化的 `BlueBubblesClient`,在构造时解决一次 SSRF 策略,因此图片附件不再因 localhost 被阻止,反应不再因私有 IP BlueBubbles 部署被阻止。修复 #34749 和 #59722。(#68234) 感谢 @omarshahine。 - **Cron/网关**:在添加/更新时拒绝模糊的公告传递配置,因此无效的多频道或目标 ID 提供商设置提前失败,而不是持久化损坏的 cron 作业。(#69015) 感谢 @obviyus。 - **Cron/主会话传递**:通过延迟唤醒排队、网关唤醒转发和相同目标唤醒合并保留 `heartbeat.target="last"`,因此排队的 cron 回复仍返回到最后活跃聊天。(#69021) 感谢 @obviyus。 - **Cron/网关**:在检查公告传递模糊性时忽略禁用频道,并针对实时 cron 服务默认代理验证主会话传递补丁,因此热重新加载的代理配置不会错误拒绝有效更新。(#69040) 感谢 @obviyus。 - **Matrix/允许列表**:在入站消息上热重新加载 `dm.allowFrom` 和 `groupAllowFrom` 条目,同时保持配置删除的权威性,因此 Matrix 允许列表更改不再需要频道重启来添加或撤销发送者。(#68546) 感谢 @johnlanni。 - **BlueBubbles**:始终在出站文本发送上显式设置 `method`(可用时为 `"private-api"`,否则为 `"apple-script"`),并在 macOS 26 上即使对于纯文本也优先使用私有 API。修复了没有私有 API 的 macOS 设置上的静默传递失败,其中省略的 `method` 让 BB 服务器回退到版本依赖的默认行为,静默丢弃消息 (#64480),以及 macOS 26 Tahoe 纯文本发送上的 AppleScript `-1700` 错误 (#53159)。(#69070) 感谢 @xqing3。 - **Matrix/命令**:识别以机器人的 Matrix 提及为前缀的斜杠命令,因此像 `@bot:server /new` 这样的房间消息触发命令路径而无需自定义提及正则表达式。(#68570) 感谢 @nightq 和 @johnlanni。 - **网关/配对**:返回原因特定的 `PAIRING_REQUIRED` 详情、修复提示和请求 ID,因此未批准设备和范围升级失败在 CLI 和控制 UI 中显示可操作的恢复指导。(#69227) 感谢 @obviyus。 - **代理/子代理**:在子代理失败负载中包含请求的角色和运行时计时,以便父代理可以关联失败或超时的子工作。(#68726) 感谢 @BKF-Gitty。 - **网关/会话**:在代理从配置中移除后拒绝陈旧的代理作用域会话,同时保留遗留默认代理主会话别名。(#65986) 感谢 @bittoby。 - **医生/网关**:显示待处理设备配对请求、范围升级批准漂移和陈旧设备令牌不匹配修复步骤,因此 `openclaw doctor --fix` 不再留下未解释的配对/认证设置失败。(#69210) 感谢 @obviyus。 - **Cron/隔离代理**:为隔离运行保留显式 `delivery.mode: "none"` 消息目标,而不继承隐式 `last` 路由,因此代理发起的 Telegram 发送保留其作者目的地,而裸 `mode:none` 作业保持无目标。(#69153) 感谢 @obviyus。 - **Cron/隔离代理**:防止 `delivery.mode: "none"` 仅账户或仅线程配置继承陈旧的隐式收件人,因此隔离运行仅在作业 authored 显式 `to` 目标时解析消息路由。(#69163) 感谢 @obviyus。 - **网关/TUI**:在本地网关仍在完成启动时重试会话历史,因此 `openclaw tui` 重新连接不再因瞬态 `chat.history unavailable during gateway startup` 错误而失败。(#69164) 感谢 @shakkernerd。 - **BlueBubbles/反应**:当代理使用 iMessage 轻点回复集(`love`/`like`/`dislike`/`laugh`/`emphasize`/`question`)之外的 emoji 反应时,回退到 `love`,因此更广泛词汇的模型反应(如 `👀`)仍产生可见的轻点回复而不是失败整个反应请求。配置的确认反应仍通过新的 `normalizeBlueBubblesReactionInputStrict` 路径严格验证。(#64693) 感谢 @zqchris。 - **BlueBubbles**:当同一句柄存在两个聊天时优先选择 iMessage 而非 SMS,遵守显式 `sms:` 目标,并且绝不静默降级可用的 iMessage 收件人。(#61781) 感谢 @rmartin。 - **Telegram/设置**:在设置期间要求数字 `allowFrom` 用户 ID,而不是提供不支持的 `@username` DM 解析,并将操作员指向 `from.id`/`getUpdates` 进行发现。(#69191) 感谢 @obviyus。 - **GitHub Copilot/入职**:将 GitHub Copilot 设置默认设为 `claude-opus-4.6` 并保持捆绑默认模型列表一致,因此新的 Copilot 设置不再以较旧的 `gpt-4o` 默认值开始。(#69207) 感谢 @obviyus。 - **网关/状态**:分离可达性、能力和读取探测报告,因此仅连接或范围受限的会话不再看起来完全健康,并规范化以 `ssh user@host` 输入的 SSH 目标。(#69215) 感谢 @obviyus。 - **Slack**:修复通过 `file` 或 `exec` 密钥源配置的账户出站回复失败并出现“未解析 SecretRef”的问题;发送路径现在容忍运行时快照保留未解析的频道 SecretRef,当引导解析的令牌覆盖已可用时。(#68954) 感谢 @openperf。 - **控制 UI/设备配对**:在重新连接期间解释范围和角色批准升级,并在控制 UI 和 `openclaw devices` 中显示请求与批准的访问,因此更广泛的重新连接不再看起来像丢失的配对。(#69221) 感谢 @obviyus。 - **网关/控制 UI**:在认证错误和控制 UI 提示中显示待处理的范围、角色和设备元数据配对批准,因此更广泛的重新连接不再看起来像随机的认证中断。(#69226) 感谢 @obviyus。