← 返回更新日志

OpenClaw v2026.3.7

2026-03-08 · GitHub 原文
### 变更 - **Agents/context engine plugin interface(代理/上下文引擎插件接口)**:新增 `ContextEngine` 插件槽位,包含完整的生命周期钩子(`bootstrap`、`ingest`、`assemble`、`compact`、`afterTurn`、`prepareSubagentSpawn`、`onSubagentEnded`),基于槽位的注册表与配置驱动解析,`LegacyContextEngine` 封装器保留现有压缩行为,通过 `AsyncLocalStorage` 为插件运行时提供作用域子代理运行时,以及 `sessions.get` 网关方法。使 `lossless-claw` 等插件能够提供替代的上下文管理策略,而无需修改核心压缩逻辑。当未配置上下文引擎插件时,零行为变更。(#22201) 感谢 @jalehman。 - **ACP/persistent channel bindings(ACP/持久化频道绑定)**:新增持久的 Discord 频道和 Telegram 主题绑定存储、路由解析以及 CLI/文档支持,使 ACP 线程目标在重启后依然存在,并可进行一致管理。(#34873) 感谢 @dutifulbob。 - **Telegram/ACP topic bindings(Telegram/ACP 主题绑定)**:在 `/acp spawn` 中接受 Telegram Mac Unicode 短横线选项前缀,支持 Telegram 主题线程绑定(`--thread here|auto`),将绑定主题的后续操作路由到 ACP 会话,添加带有前缀批准 ID 解析的可操作 Telegram 批准按钮,并在主题中置顶成功的绑定确认。(#36683) 感谢 @huntharo。 - **Telegram/topic agent routing(Telegram/主题代理路由)**:在论坛群组和 DM 主题中支持每主题 `agentId` 覆盖,使主题能够路由到具有隔离会话的专用代理。(#33647;基于 #31513) 感谢 @kesor 和 @Sid-Qin。 - **Web UI/i18n(Web 用户界面/国际化)**:在控制界面中添加西班牙语(`es`)区域设置支持,包括区域检测、懒加载以及支持区域的语言选择器标签。(#35038) 感谢 @DaoPromociones。 - **Onboarding/web search(引导/网页搜索)**:在配置向导中添加提供商选择步骤和完整提供商列表,并在引导过程中支持 SecretRef 引用模式。(#34009) 感谢 @kesku 和 @thewilloftheshadow。 - **Tools/Web search(工具/网页搜索)**:将 Perplexity 提供商切换到 Search API,提供结构化结果以及新的语言/区域/时间过滤器。(#33822) 感谢 @kesku。 - **Gateway(网关)**:为 `gateway.auth.token` 添加 SecretRef 支持,并配合认证模式防护措施。(#35094) 感谢 @joshavant。 - **Docker/Podman extension dependency baking(Docker/Podman 扩展依赖烘焙)**:新增 `OPENCLAW_EXTENSIONS` 环境变量,使容器构建可以将选定的捆绑扩展 npm 依赖预安装到镜像中,从而在容器部署中实现更快、更可复现的启动。(#32223) 感谢 @sallyom。 - **Plugins/before_prompt_build system-context fields(插件/提示构建前的系统上下文字段)**:新增 `prependSystemContext` 和 `appendSystemContext`,使静态插件指导可以放置在系统提示空间中,以实现提供商缓存并降低重复提示令牌成本。(#35177) 感谢 @maweibin。 - **Plugins/hook policy(插件/钩子策略)**:新增 `plugins.entries.<id>.hooks.allowPromptInjection`,在运行时验证未知类型的钩子名称,并在禁用提示注入时保留遗留的 `before_agent_start` 模型/提供商覆盖,同时剥离提示变更字段。(#36567) 感谢 @gumadeiras。 - **Hooks/Compaction lifecycle(钩子/压缩生命周期)**:发出 `session:compact:before` 和 `session:compact:after` 内部事件,以及带有会话/计数元数据的插件压缩回调,使自动化能够一致地响应压缩运行。(#16788) 感谢 @vincentkoc。 - **Agents/compaction post-context configurability(代理/压缩后上下文可配置性)**:新增 `agents.defaults.compaction.postCompactionSections`,使部署可以选择在压缩后重新注入哪些 `AGENTS.md` 部分,同时在文档默认对以任意顺序配置时保留遗留回退行为。(#34556) 感谢 @efe-arv。 - **TTS/OpenAI-compatible endpoints(TTS/OpenAI 兼容端点)**:添加 `messages.tts.openai.baseUrl` 配置支持,配置优先于环境变量,端点感知指令验证,以及将 OpenAI TTS 请求路由到解析后的基础 URL。(#34321) 感谢 @RealKai42。 - **Slack/DM typing feedback(Slack/DM 输入反馈)**:新增 `channels.slack.typingReaction`,使 Socket Mode DM 即使在 Slack 原生助手输入不可用时也能显示基于反应的处理状态。(#19816) 感谢 @dalefrieswthat。 - **Discord/allowBots mention gating(Discord/允许机器人提及门控)**:新增 `allowBots: "mentions"`,仅接受提及机器人的机器人 authored 消息。感谢 @thewilloftheshadow。 - **Agents/tool-result truncation(代理/工具结果截断)**:通过使用头部+尾部截断来保留重要的尾部诊断信息,同时保持可配置的截断选项,以处理过大的工具结果。(#20076) 感谢 @jlwestsr。 - **Cron/job snapshot persistence(Cron/作业快照持久化)**:在 `ensureLoaded` 中的规范化持久化期间跳过备份,使 `jobs.json.bak` 保留编辑前的快照以供恢复,同时在显式用户驱动的写入时保留备份创建。(#35234) 感谢 @0xsline。 - **CLI(命令行界面)**:使只读 SecretRef 状态流能够安全降级。(#37023) 感谢 @joshavant。 - **Tools/Diffs guidance(工具/差异指导)**:在系统提示中恢复启用的差异简短提示,同时将详细说明保留在配套技能中,使差异使用指导不会进入用户提示空间。(#36904) 感谢 @gumadeiras。 - **Tools/Diffs guidance loading(工具/差异指导加载)**:将差异使用指导从无条件的提示钩子注入移动到插件配套技能路径,减少无关回合的提示噪音,同时保持差异工具行为不变。(#32630) 感谢 @sircrumpet。 - **Docs/Web search(文档/网页搜索)**:在 Brave 设置文档中移除过时的 Brave 免费层级表述,并将指令性的 AI 服务条款指导替换为中性合规语言。(#26860) 感谢 @HenryLoenwind。 - **Config/Compaction safeguard tuning(配置/压缩保护调优)**:通过验证的配置表面和嵌入式运行器连接,公开 `agents.defaults.compaction.recentTurnsPreserve` 和质量防护重试旋钮,并为真实配置加载和架构元数据提供回归覆盖。(#25557) 感谢 @rodrigouroz。 - **iOS/App Store Connect release prep(iOS/App Store Connect 发布准备)**:将 iOS 捆绑标识符统一在 `ai.openclaw.client` 下,刷新 Watch 应用图标,添加 Fastlane 元数据/截图自动化,并支持基于 Keychain 的 ASC 认证以上传。(#38936) 感谢 @ngutman。 - **Mattermost/model picker(Mattermost/模型选择器)**:为 `/oc_model` 和 `/oc_models` 添加 Telegram 风格的交互式提供商/模型浏览,修复选择器回调更新,并在选择模型时发出正常的确认回复。(#38767) 感谢 @mukhtharcm。 - **Docker/multi-stage build(Docker/多阶段构建)**:将 Dockerfile 重构为多阶段构建,以生成不包含构建工具、源代码或 Bun 的最小运行时镜像;添加 `OPENCLAW_VARIANT=slim` 构建参数以生成 bookworm-slim 变体。(#38479) 感谢 @sallyom。 - **Google/Gemini 3.1 Flash-Lite(Google/Gemini 3.1 Flash-Lite)**:在模型 ID 规范化、默认别名、媒体理解图像查找、Google Gemini CLI 前向兼容回退以及文档中,为 `google/gemini-3.1-flash-lite-preview` 添加一流支持。 ### 破坏性变更 - **BREAKING(破坏性变更):** 网关认证现在需要在同时配置 `gateway.auth.token` 和 `gateway.auth.password`(包括 SecretRefs)时显式设置 `gateway.auth.mode`。请在升级前将 `gateway.auth.mode` 设置为 `token` 或 `password`,以避免启动/配对/TUI 失败。(#35094) 感谢 @joshavant。 ### 修复 - **Models/MiniMax(模型/MiniMax)**:停止在内置提供商目录、引导元数据和文档中广告已移除的 `MiniMax-M2.5-Lightning`;将受支持的高速层模型保留为 `MiniMax-M2.5-highspeed`。 - **Security/Config(安全/配置)**:当 `loadConfig()` 遇到验证或读取错误时失败关闭,因此无效配置无法静默回退到宽松的运行时默认值。(#9040) 感谢 @joetomasone。 - **Memory/Hybrid search(内存/混合搜索)**:在 `bm25RankToScore()` 中保留负 FTS5 BM25 相关性排序,使更强的关键字匹配排名高于较弱的匹配,而不是折叠或反转分数。(#33757) 感谢 @lsdcc01。 - **LINE/`requireMention` group gating(LINE/`requireMention` 群组门控)**:跨原始、`group:` 和 `room:` 键(包括账户范围的群组配置)对齐入站和回复阶段 LINE 群组策略解析,保留插件支持的回复阶段回退行为,并为仅前缀的群组/房间配置以及回复阶段策略解析添加回归覆盖。(#35847) 感谢 @kirisame-wang。 - **Onboarding/local setup(引导/本地设置)**:将未设置的本地 `tools.profile` 默认值设为 `coding` 而不是 `messaging`,为新的本地安装恢复文件/运行时工具,同时保留用户显式设置的配置文件。(来自 #38241,与 #34958 重叠) 感谢 @cgdusek。 - **Gateway/Telegram stale-socket restart guard(网关/Telegram 陈旧套接字重启保护)**:仅对发布事件活跃时间戳的频道应用陈旧套接字重启,防止 Telegram 提供商仅因长时间运行而被错误归类为陈旧,并避免升级后出现重启/配对风暴。(openclaw#38464) - **Onboarding/headless Linux daemon probe hardening(引导/无头 Linux 守护进程探测强化)**:将 `systemctl --user is-enabled` 探测失败视为非致命,因此引导不再在 SSH/无头 VPS 环境中崩溃,然后再显示安装指导。(#37297) 感谢 @acarbajal-web。 - **Memory/QMD mcporter Windows spawn hardening(内存/QMD mcporter Windows 生成强化)**:当 `mcporter.cmd` 启动失败并出现 `spawn EINVAL` 时,通过裸 `mcporter` shell 解析重试,以便 QMD 召回可以继续,而不是回退到内置内存搜索。(#27402) 感谢 @i0ivi0i。 - **Tools/web_search Brave language-code validation(工具/web_search Brave 语言代码验证)**:使 `search_lang` 处理与 Brave 支持的代码对齐(包括 `zh-hans`、`zh-hant`、`en-gb` 和 `pt-br`),将常见别名输入(`zh`、`ja`)映射到有效的 Brave 值,并在上游请求前拒绝不支持的代码,以防止 422 失败。(#37260) 感谢 @heyanming。 - **Models/openai-completions streaming compatibility(模型/openai-completions 流式兼容性)**:对于非原生 OpenAI 兼容端点的模型规范化,强制 `compat.supportsUsageInStreaming=false`,防止仅使用情况的流式块在提供商流中触发 `choices[0]` 解析崩溃。(#8714) 感谢 @nonanon1。 - **Tools/xAI native web-search collision guard(工具/xAI 原生网页搜索冲突保护)**:在路由到 xAI/Grok 模型提供商(包括 OpenRouter `x-ai/*`)时,从工具注册中移除 OpenClaw `web_search`,以避免针对提供商原生 `web_search` 的重复工具名称请求失败。(#14749) 感谢 @realsamrat。 - **TUI/token copy-safety rendering(TUI/令牌复制安全渲染)**:将长的类似凭证的混合字母数字令牌(包括带引号的形式)视为渲染消毒中的复制敏感内容,因此格式化程序硬换行保护不会在显示前向认证样式值注入可见空格。(#26710) 感谢 @jasonthane。 - **WhatsApp/self-chat response prefix fallback(WhatsApp/自聊响应前缀回退)**:当未配置身份名称或响应前缀时,停止强制将 `"[openclaw]"` 作为隐式出站响应前缀,因此空白/默认前缀设置不再在自聊流程中意外注入品牌文本。(#27962) 感谢 @ecanmor。 - **Memory/QMD search result decoding(内存/QMD 搜索结果解码)**:接受仅包含 `file` URI(例如 `qmd://collection/path.md`)而没有 `docid` 的 `qmd search` 命中,通过管理的集合根解析它们,并保持多集合结果按文件回退键控,因此有效的 QMD 命中不再折叠为空的 `memory_search` 输出。(#28181) 感谢 @0x76696265。 - **Memory/QMD collection-name conflict recovery(内存/QMD 集合名称冲突恢复)**:当 `qmd collection add` 因另一个集合已占用相同的 `path + pattern` 而失败时,从 `collection list` 检测冲突集合,将其移除并重试添加,因此代理范围管理的集合可以确定性地创建,而不是被静默跳过;还添加了仅警告的回退,当 qmd 元数据不可用时,以避免破坏性猜测。(#25496) 感谢 @Ramsbaby。 - **Slack/app_mention race dedupe(Slack/app_mention 竞争去重)**:当 `app_mention` 分发在相同 `ts` `message` 准备仍在进行时获胜时,抑制后续消息分发,因此近同时的 Slack 交付不会产生重复回复;保持单次重试行为,并为丢弃和成功的消息准备结果添加回归覆盖。(#37033) 感谢 @Takhoffman。 - **Gateway/chat streaming tool-boundary text retention(网关/聊天流式工具边界文本保留)**:将助手增量段合并到每运行聊天缓冲区中,因此当提供商在工具后作为非前缀快照发出助手段时,工具前文本在实时聊天增量/最终中被保留。(#36957) 感谢 @Datyedyeguy。 - **TUI/model indicator freshness(TUI/模型指示器新鲜度)**:防止过时的会话快照覆盖新修补的模型选择(并在切换会话键时重置每会话新鲜度),因此 `/model` 更新立即反映,而不是滞后一个或多个命令。(#21255) 感谢 @kowza。 - **TUI/final-error rendering fallback(TUI/最终错误渲染回退)**:当聊天 `final` 事件没有可渲染的助手内容但包含信封 `errorMessage` 时,渲染格式化的错误文本而不是折叠为 `"(no output)"`,在会话中保留可操作的失败上下文。(#14687) 感谢 @Mquarmoc。 - **TUI/session-key alias event matching(TUI/会话键别名事件匹配)**:将会话键是规范别名(例如 `agent:<id>:main` 与 `main`)的聊天事件视为同一会话,同时保留跨代理隔离,因此助手回复不再消失或由于严格的键格式不匹配而出现在另一个终端窗口中。(#33937) 感谢 @yjh1412。 - **OpenAI Codex OAuth/login parity(OpenAI Codex OAuth/登录对等)**:即使没有提供商插件,也将 `openclaw models auth login --provider openai-codex` 保留在内置路径上,保留 Pi 生成的授权 URL 而不进行本地作用域重写,并在回调后停止针对公共 OpenAI Responses API 验证成功的 Codex 登录。(#37558;#36660 和 #24720 的后续) 感谢 @driesvints、@Skippy-Gunboat 和 @obviyus。 - **Agents/config schema lookup(代理/配置架构查找)**:添加 `gateway` 工具操作 `config.schema.lookup`,使代理可以在编辑之前一次检查一个配置路径,而无需将完整架构加载到提示上下文中。(#37266) 感谢 @gumadeiras。 - **Onboarding/API key input hardening(引导/API 密钥输入强化)**:从归一化的秘密输入中剥离非 Latin1 Unicode 伪影(同时保留 Latin-1 内容和内部空格),因此格式错误的复制 API 密钥不会触发 HTTP 头 `ByteString` 构造崩溃;为共享归一化和 MiniMax 认证头使用添加回归覆盖。(#24496) 感谢 @fa6maalassaf。 - **Kimi Coding/Anthropic tools compatibility(Kimi Coding/Anthropic 工具兼容性)**:将 `anthropic-messages` 工具有效负载规范化为 OpenAI 风格的 `tools[].function` + 兼容的 `tool_choice`,当针对 Kimi Coding 端点时,恢复在 v2026.3.2 之后回归的工具调用工作流。(#37038) 感谢 @mochimochimochi-hub。 - **Heartbeat/workspace-path guardrails(心跳/工作空间路径防护)**:在心跳提示中附加明确的工作空间 `HEARTBEAT.md` 路径指导(并避免 `docs/heartbeat.md`),因此心跳运行可以跨打包安装布局可靠地定位工作空间清单。(#37037) 感谢 @stofancy。 - **Subagents/kill-complete announce race(子代理/终止完成通知竞争)**:当较晚的 `subagent-complete` 生命周期事件在较早的终止标记之后到达时,清除陈旧的终止抑制/清理标志并重新运行通知清理,因此完成的运行不再被静默吞噬。(#37024) 感谢 @cmfinlan。 - **Agents/tool-result cleanup timeout hardening(代理/工具结果清理超时强化)**:在嵌入式运行器关闭空闲超时时,清除挂起的工具调用状态而不持久化合成的 `missing tool result` 条目,防止超时清理毒害后续回合;为超时清除与刷新行为添加回归覆盖。(#37081) 感谢 @Coyote-Den。 - **Agents/openai-completions stream timeout hardening(代理/openai-completions 流式超时强化)**:确保运行时 undici 全局调度器在嵌入式运行之前使用扩展的流式正文/头超时(包括 env-proxy 调度器模式),减少长生成过程中的强制中途 `terminated` 失败;为调度器选择和幂等重新配置添加回归覆盖。(#9708) 感谢 @scottchguard。 - **Agents/fallback cooldown probe execution(代理/回退冷却探测执行)**:将模型回退中的显式速率限制冷却探测意图线程到嵌入式运行器认证配置文件选择,因此当所有配置文件因 `rate_limit` 而冷却时,相同提供商的回退尝试实际上可以运行(而不是在运行前失败,显示 `No available auth profile`),同时保留默认冷却跳过行为并在回退和运行器层添加回归测试。(#13623) 感谢 @asfura。 - **Cron/OpenAI Codex OAuth refresh hardening(Cron/OpenAI Codex OAuth 刷新强化)**:当 `openai-codex` 令牌刷新在账户 ID 提取上失败时,重用缓存的访问令牌而不是立即失败运行,并为非 Codex 和不相关的刷新失败保持不变的回归覆盖。(#36604) 感谢 @laulopezreal。 - **TUI/session isolation for `/new`(TUI/`/new` 的会话隔离)**:使 `/new` 分配唯一的 `tui-<uuid>` 会话键,而不是重置共享的代理会话,因此同一代理上的多个 TUI 客户端停止相互接收回复;还在终端内对 `/new` 和 `/reset` 失败文本进行消毒。来自贡献者 PR #39238 by @widingmarcus-cyber。感谢 @widingmarcus-cyber。 - **Synology Chat/rate-limit env parsing(Synology Chat/速率限制环境解析)**:将 `SYNOLOGY_RATE_LIMIT=0` 视为显式值,同时对于格式错误的环境值仍回退到默认限制,而不是部分解析它们。来自贡献者 PR #39197 by @scoootscooob。感谢 @scoootscooob。 - **Voice-call/OpenAI Realtime STT config defaults(语音呼叫/OpenAI Realtime STT 配置默认值)**:尊重显式的 `vadThreshold: 0` 和 `silenceDurationMs: 0`,而不是用默认值静默替换它们。来自贡献者 PR #39196 by @scoootscooob。感谢 @scoootscooob。 - **Voice-call/OpenAI TTS speed config(语音呼叫/OpenAI TTS 速度配置)**:尊重显式的 `speed: 0` 而不是用默认速度静默替换它。来自贡献者 PR #39318 by @ql-wade。感谢 @ql-wade。 - **launchd/runtime PID parsing(launchd/运行时 PID 解析)**:拒绝来自 `launchctl print` 的 `pid <= 0`,因此守护进程状态解析器不再将内核/非运行哨兵值视为真实进程 ID。来自贡献者 PR #39281 by @mvanhorn。感谢 @mvanhorn。 - **Cron/file permission hardening(Cron/文件权限强化)**:对 cron 存储/备份/运行日志文件强制执行仅所有者(`0600`),并将 cron 存储 + 运行日志目录强化为 `0700`,包括来自旧安装的预先存在的目录。(#36078) 感谢 @aerelune。 - **Gateway/remote WS break-glass hostname support(网关/远程 WS 应急主机名支持)**:在引导验证和运行时网关连接检查中,为 `ws://` 主机名 URL(不仅是私有 IP 文字) honoring `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`,同时仍拒绝公共 IP 文字和非单播 IPv6 端点。(#36930) 感谢 @manju-rn。 - **Routing/binding lookup scalability(路由/绑定查找可扩展性)**:按频道/账户预索引路由绑定,并在频道-账户缓存轮换时避免完整的绑定列表重新扫描,防止大型绑定配置中 `resolveAgentRoute` 的秒级停顿。(#36915) 感谢 @songchenghao。 - **Browser/session cleanup(浏览器/会话清理)**:跟踪由会话范围的浏览器工具运行打开的浏览器标签,并在 `sessions.reset`/`sessions.delete` 运行时清理期间关闭跟踪的标签,防止孤立标签和会话拆除后浏览器内存无界增长。(#36666) 感谢 @Harnoor6693。 - **Plugin/hook install rollback hardening(插件/钩子安装回滚强化)**:在规范安装基础下暂存安装,在发布前验证和运行依赖安装,并通过重命名而不是删除目标路径来恢复更新,减少安装失败期间的局部替换和符号链接重新绑定风险。 - **Slack/local file upload allowlist parity(Slack/本地文件上传允许列表对等)**:通过 Slack 发送操作流水线传播 `mediaLocalRoots`,因此工作空间根附件通过 `assertLocalMediaAllowed` 检查,而非允许列表路径保持阻止。(综合:#36656;考虑自 #36516、#36496、#36493、#36484、#32648、#30888 的重叠) 感谢 @2233admin。 - **Agents/compaction safeguard pre-check(代理/压缩保护预检查)**:当会话没有真实对话消息时,在进入 Pi SDK 之前跳过嵌入式压缩,避免空闲会话上不必要的 LLM API 调用。(#36451) 感谢 @Sid-Qin。 - **Config/schema cache key stability(配置/架构缓存键稳定性)**:使用增量哈希构建合并的架构缓存键,避免大型单字符串序列化,并防止高基数插件/频道元数据上的 `RangeError: Invalid string length`。(#36603) 感谢 @powermaster888。 - **iMessage/cron completion announces(iMessage/cron 完成通知)**:从用户可见的完成文本中剥离泄漏的内联回复标签(例如 `[[reply_to:6100]]`),因此通知交付不暴露线程元数据。(#24600) 感谢 @vincentkoc。 - **Control UI/iMessage duplicate reply routing(控制界面/iMessage 重复回复路由)**:保持内部 webchat 回合在调度器交付上(而不是源频道重路由),因此控制界面聊天不会将重复回复复制到 iMessage,同时保留 webchat-提供商中继路由用于外部表面。修复 #33483。感谢 @alicexmolt。 - **Sessions/daily reset transcript archival(会话/每日重置记录存档)**:在陈旧会话计划的/每日重置期间,通过在滚动前捕获先前会话条目来存档先前的记录文件,防止磁盘上孤立记录文件。(#35493) 感谢 @byungsker。 - **Feishu/group slash command detection(飞书/群组斜杠命令检测)**:在命令授权探测之前规范化群组提及包装器,因此提及前缀的命令(例如 `@Bot/model` 和 `@Bot /reset`)被识别为网关命令而不是被转发到代理。(#35994) 感谢 @liuxiaopai-ai。 - **Control UI/auth token separation(控制界面/认证令牌分离)**:在浏览器认证验证中保持共享网关令牌,同时为签名的设备有效负载保留缓存的设备令牌,防止重启/轮换后的错误 `device token mismatch` 断开连接。来自贡献者 PR #37382 by @FradSer。感谢 @FradSer。 - **Gateway/browser auth reconnect hardening(网关/浏览器认证重新连接强化)**:停止将缺失的令牌/密码提交计数为认证速率限制失败,并停止在不可恢复的认证错误上自动重新连接控制界面客户端,因此配置错误的浏览器标签不再锁定健康会话。来自贡献者 PR #38725 by @ademczuk。感谢 @ademczuk。 - **Gateway/service token drift repair(网关/服务令牌漂移修复)**:停止将共享认证令牌持久化到已安装的网关服务单元,将过时的嵌入式服务令牌标记为重新安装,并将无令牌服务环境视为规范,因此令牌轮换/重启流程与配置/环境解析保持一致。来自贡献者 PR #28428 by @l0cka。感谢 @l0cka。 - **Control UI/agents-page selection(控制界面/代理页面选择)**:保存代理配置更改并重新加载代理列表后保持编辑的代理被选中,因此 `/agents` 不再弹回默认代理。来自贡献者 PR #39301 by @MumuTW。感谢 @MumuTW。 - **Gateway/auth follow-up hardening(网关/认证后续强化)**:在守护程序审计和医生修复中保留 systemd `EnvironmentFile=` 优先级/来源血统,阻止共享密码覆盖流搭便车缓存的设备令牌,并在配置优先的网关 SecretRefs 无法解析时失败关闭。后续 #39241。 - **Agents/context pruning(代理/上下文修剪)**:在 `block.type` 读取之前保护助手思考/文本字符估计 against 格式错误的块(缺失 `thinking`/`text` 字符串或空条目),因此格式错误的提供商内容不再导致修剪崩溃。(openclaw#35146) 感谢 @Sid-Qin。 - **Agents/transcript policy(代理/记录策略)**:在 `resolveTranscriptPolicy` 中将 `preserveSignatures` 设置为仅 Anthropic 处理,因此 Anthropic 思考签名被保留,而非 Anthropic 提供商保持不变。(#32813) 感谢 @Sid-Qin。 - **Agents/schema cleaning(代理/架构清理)**:将 Venice + Grok 模型 ID 检测为 xAI 代理目标,因此在请求前剥离不支持的 JSON Schema 关键字,防止 Venice/Grok `Invalid arguments` 失败。(openclaw#35355) 感谢 @Sid-Qin。 - **Skills/native command deduplication(技能/原生命令去重)**:通过 `listSkillCommandsForAgents` 中的规范 `skillName` 集中技能命令去重,因此重复的后缀变体(例如 `_2`)不再在 Discord 之外的界面中公开。(#27521) 感谢 @shivama205。 - **Agents/xAI tool-call argument decoding(代理/xAI 工具调用参数解码)**:在工具执行前解码 HTML 实体编码的 xAI/Grok 工具调用参数值(`&amp;`、`&quot;`、`&lt;`、`&gt;`、数字实体),因此带有 shell 运算符和引用的命令不再因解析错误而失败。(#35276) 感谢 @Sid-Qin。 - **Linux/WSL2 daemon install hardening(Linux/WSL2 守护进程安装强化)**:为 WSL 环境检测、WSL 特定 systemd 指导以及 `systemctl --user is-enabled` 失败路径添加回归覆盖,因此 WSL2/无头引导继续将总线不可用探测视为非致命,同时保留真实的权限错误。相关:#36495。感谢 @vincentkoc。 - **Linux/systemd status and degraded-session handling(Linux/systemd 状态和降级会话处理)**:将降级但可达的 `systemctl --user status` 结果视为可用,为真正不可用的用户总线情况保留早期错误,并将外部管理的运行服务报告为运行而不是 `not installed`。感谢 @vincentkoc。 - **Agents/thinking-tag promotion hardening(代理/思考标签提升强化)**:在 `block.type` 读取之前保护 `promoteThinkingTagsToBlocks` against 格式错误的助手内容条目(`null`/`undefined`),因此格式错误的提供商负载不再在会话处理期间崩溃,同时保留直通行为。(#35143) 感谢 @Sid-Qin。 - **Gateway/Control UI version reporting(网关/控制界面版本报告)**:对齐运行时和浏览器客户端版本元数据以避免 `dev` 占位符,在第一次 UI websocket 连接前等待引导版本,并且仅将引导 `serverVersion` 转发到同源网关目标,以防止跨目标版本泄漏。(来自 #35230、#30928、#33928) 感谢 @Sid-Qin、@joelnishanth 和 @MoerAI。 - **Control UI/markdown parser crash fallback(控制界面/markdown 解析器崩溃回退)**:捕获 `marked.parse()` 失败并回退到转义的纯文本 `<pre>` 渲染,因此格式错误的递归 markdown 不再在加载时导致控制界面会话渲染崩溃。(#36445) 感谢 @BinHPdev。 - **Control UI/markdown fallback regression coverage(控制界面/markdown 回退回归覆盖)**:为解析器错误回退行为添加显式回归断言,因此格式错误的 markdown 不再有风险在未来 markdown/解析器升级中重新引入硬崩溃渲染路径。(#36445) 感谢 @BinHPdev。 - **Web UI/config form(Web 用户界面/配置表单)**:将 `additionalProperties: true` 对象架构视为可编辑映射条目而不是不支持的字段,因此 Accounts 风格映射在表单模式下保持可编辑。(#35380,取代 #32072) 感谢 @stakeswky 和 @liuxiaopai-ai。 - **Feishu/streaming card delivery synthesis(飞书/流式卡片交付综合)**:统一快照和增量流式合并语义,应用重叠感知最终合并,抑制重复最终文本交付(包括文本+媒体最终数据包),在存在回复目标时优先主题线程 `message.reply` 路由,并调整卡片打印节奏以避免重复增量渲染。(来自 #33245、#32896、#33840) 感谢 @rexl2018、@kcinzgg 和 @aerelune。 - **Feishu/group mention detection(飞书/群组提及检测)**:将启动时探测的机器人显示名称通过监控调度携带,因此 `requireMention` 检查针对当前机器人身份而不是过时的配置名称进行比较,修复群组中遗漏的 `@bot` 处理,同时保留多机器人误报保护。(#36317、#34271) 感谢 @liuxiaopai-ai。 - **Security/dependency audit(安全/依赖审计)**:通过在生成解析路径中将 `hono` 固定到 `4.12.5` 并将 `@hono/node-server` 固定到 `1.19.10` 来修补传递的 Hono 漏洞。感谢 @shakkernerd。 - **Security/dependency audit(安全/依赖审计)**:将 `tar` 升级到 `7.5.10`(从 `7.5.9`)以解决高严重性硬链接路径遍历公告 (`GHSA-qffp-2rhf-9h96`)。感谢 @shakkernerd。 - **Cron/announce delivery robustness(Cron/通知交付稳健性)**:为 cron 完成发送绕过待处理后代通知保护,确保命名代理通知路由具有出站会话条目,并且仅当实际尝试并失败通知发送时才回退到直接交付。(来自 #35185、#32443、#34987) 感谢 @Sid-Qin、@scoootscooob 和 @bmendonca3。 - **Cron/announce best-effort fallback(Cron/通知最佳努力回退)**:在尝试通知失败后运行直接出站回退,即使交付配置为最佳努力,因此 Telegram cron 发送不会在 `cron announce delivery failed` 警告后留下尝试但未交付的状态。 - **Auto-reply/system events(自动回复/系统事件)**:将运行时系统事件恢复到消息时间线(`System:` 行),保留带有前置事件的思考提示解析,并将事件携带到延迟的后续/收集/积压工作流提示中,以保持缓存行为稳定而不丢弃排队元数据。(#34794) 感谢 @anisoptera。 - **Security/audit account handling(安全/审计账户处理)**:通过使用 `accounts` 的自有属性检查避免原型链账户 ID 的审计验证。(#34982) 感谢 @HOYALIM。 - **Cron/restart catch-up semantics(Cron/重启追赶语义)**:在启动时重放中断的重复作业和错过的即时 cron 时间槽,而不重放中断的一次性作业,通过防护的错失时间槽探测以避免格式错误计划的启动中止和重启后的重复触发漂移。(来自 #34466、#34896、#34625、#33206) 感谢 @dunamismax、@dsantoreis、@Octane0411 和 @Sid-Qin。 - **Venice/provider onboarding hardening(Venice/提供商引导强化)**:将每模型 Venice 完成令牌限制与发现元数据对齐,将不受信任的发现值限制到安全边界,将静态 Venice 回退目录与当前实时模型元数据同步,并禁用不支持函数调用的 Venice 模型的工具布线,因此默认 Venice 设置不再因 `max_completion_tokens` 或不支持工具 400 而失败。修复 #38168。感谢 @Sid-Qin、@powermaster888 和 @vincentkoc。 - **Agents/session usage tracking(代理/会话使用跟踪)**:在嵌入式 Pi 运行器错误退出时保留累积的使用元数据,因此失败的回合仍根据真实使用更新会话 `totalTokens`,而不是陈旧先前的值。(#34275) 感谢 @RealKai42。 - **Slack/reaction thread context routing(Slack/反应线程上下文路由)**:将 Slack 原生 DM 频道 ID 通过入站上下文和线程工具解析携带,因此反应目标在 DM `To=user:*` 会话(包括 `toolContext.currentChannelId` 回退行为)中一致解析。(来自 #34831;重叠 #34440、#34502、#34483、#32754) 感谢 @dunamismax。 - **Subagents/announce completion scoping(子代理/通知完成范围)**:将嵌套直接子完成聚合范围限定到当前请求者运行窗口,硬化冻结完成捕获以进行确定性后代综合,并通过父代理通知回合路由通知交付,具有来源感知内部事件。(#35080) 感谢 @tyler6204。 - **Nodes/system.run approval hardening(节点/system.run 批准强化)**:在重新生成准备的 `rawCommand` 时使用显式 argv 变异信令,并覆盖 `system.run.prepare -> system.run` 交接,因此直接基于 PATH 的 `nodes run` 命令不再因 `rawCommand does not match command` 而失败。(#33137) 感谢 @Sid-Qin。 - **Models/custom provider headers(模型/自定义提供商头)**:将 `models.providers.<name>.headers` 跨内联、回退和注册表发现的模型解析传播,因此头认证代理一致接收配置的请求头。(#27490) 感谢 @Sid-Qin。 - **Ollama/remote provider auth fallback(Ollama/远程提供商认证回退)**:为显式配置的 `models.providers.ollama` 条目综合本地运行时认证密钥,这些条目省略 `apiKey`,因此远程 Ollama 端点运行无需手动虚拟密钥设置,同时保留 env/配置文件/配置密钥优先级和缺失配置失败。(#11283) 感谢 @cpreecs。 - **Ollama/custom provider headers(Ollama/自定义提供商头)**:将解析的模型头转发到原生 Ollama 流请求,因此头认证 Ollama 代理接收配置的请求头。(#24337) 感谢 @echoVic。 - **Ollama/compaction and summarization(Ollama/压缩和摘要)**:为压缩、分支风格内部摘要和当前 `main` 上的 TTS 文本摘要注册自定义 `api: "ollama"` 处理,因此原生 Ollama 模型不再在主运行循环之外因 `No API provider registered for api: ollama` 而失败。感谢 @JaviLib。 - **Daemon/systemd install robustness(守护进程/systemd 安装稳健性)**:将 `systemctl --user is-enabled` 退出代码 4 `not-found` 响应视为未启用,通过组合 stderr/stdout 详细解析,因此 Ubuntu 全新安装不再因 `systemctl is-enabled unavailable` 而失败。(#33634) 感谢 @Yuandiaodiaodiao。 - **Slack/system-event session routing(Slack/系统事件会话路由)**:通过频道/账户绑定(具有发送者感知的 DM 路由)解析反应/成员/钉/交互系统事件会话键,因此入站 Slack 事件在多重账户设置中针对正确的代理会话,而不是回退到 `agent:main`。(#34045) 感谢 @paulomcg、@daht-mad 和 @vincentkoc。 - **Slack/native streaming markdown conversion(Slack/原生流式 markdown 转换)**:停止在流式开始/追加/停止路径中预规范化传递给 Slack 原生 `markdown_text` 的文本,以防止双重转换导致的 Markdown 样式损坏。(#34931) - **Gateway/HTTP tools invoke media compatibility(网关/HTTP 工具调用媒体兼容性)**:通过仅允许媒体 `nodes` 调用命令在 HTTP 工具上下文中,为直接 `/tools/invoke` 客户端保留原始媒体有效负载访问,同时阻止代理上下文媒体调用以防止 base64 提示膨胀。(#34365) 感谢 @obviyus。 - **Security/archive ZIP hardening(安全/归档 ZIP 强化)**:通过同目录临时文件加原子重命名提取 ZIP 条目,然后重新打开并在重命名后拒绝目标根之外的硬链接别名竞争。 - **Agents/Nodes media outputs(代理/节点媒体输出)**:添加专用的 `photos_latest` 操作处理,阻止媒体返回 `nodes invoke` 命令,保持仅元数据 `camera.list` 调用允许,并将空 `photos_latest` 结果规范化为一致的响应形状,以防止 base64 上下文膨胀。(#34332) 感谢 @obviyus。 - **TUI/session-key canonicalization(TUI/会话键规范化)**:将 `openclaw tui --session` 值规范化为小写,因此大写会话名称不再由于网关/TUI 键不匹配而丢弃实时流式更新。(#33866、#34013) 感谢 @lynnzc。 - **iMessage/echo loop hardening(iMessage/回声循环强化)**:从出站 iMessage 回复中剥离泄漏的助手内部脚手架,在重新进入入站处理之前丢弃反射的助手内容消息,扩展回声缓存文本保留以用于延迟反射,并在放大到队列溢出之前抑制重复循环流量。(#33295) 感谢 @joelnishanth。 - **Skills/workspace boundary hardening(技能/工作空间边界强化)**:拒绝真实路径逃逸配置源根的工作空间和额外目录技能根或 `SKILL.md` 文件,并跳过将这些逃逸技能同步到沙盒工作空间。 - **Outbound/send config threading(出站/发送配置线程)**:将解析的 SecretRef 配置通过出站适配器和辅助发送路径传递,因此发送流程不重新加载未解析的运行时配置。(#33987) 感谢 @joshavant。 - **gateway(网关)**:硬化 systemd、discord 和 node 主机之间的共享认证解析 (#39241) 感谢 @joshavant。 - **Secrets/models.json persistence hardening(秘密/models.json 持久化强化)**:保持 SecretRef 管理的 api 键 + 头不持久化到生成的 models.json 中,扩展审计/应用覆盖,并硬化标记处理/序列化。(#38955) 感谢 @joshavant。 - **Sessions/subagent attachments(会话/子代理附件)**:从 `sessions_spawn` 架构中移除 `attachments[].content.maxLength` 以避免 llama.cpp GBNF 重复溢出,并在缓冲区分配前预检 UTF-8 字节大小,同时保持运行时文件大小强制不变。(#33648) 感谢 @anisoptera。 - **Runtime/tool-state stability(运行时/工具状态稳定性)**:从压缩后恢复悬空的 Anthropic `tool_use`,无阻塞新入站事件地序列化长时间运行的 Discord 处理程序运行,并防止过时的忙碌快照抑制卡住频道恢复。(来自 #33630、#33583) 感谢 @kevinWangSheng 和 @theotarr。 - **ACP/Discord startup hardening(ACP/Discord 启动强化)**:在网关重启时清理卡住的 ACP 工作程序子级,在 Discord 启动协调期间解绑过时的 ACP 线程绑定,并添加每线程监听器看门狗超时,因此卡住的回合不会阻止稍后的消息。(#33699) 感谢 @dutifulbob。 - **Extensions/media local-root propagation(扩展/媒体本地根传播)**:通过扩展 `sendMedia` 适配器(Google Chat、Slack、iMessage、Signal、WhatsApp)一致转发 `mediaLocalRoots`,保留非本地媒体行为同时从配置的根恢复本地附件解析。综合 #33581、#33545、#33540、33536、33528。感谢 @bmendonca3。 - **Gateway/plugin HTTP auth hardening(网关/插件 HTTP 认证强化)**:当任何重叠的匹配路由需要认证时要求网关认证,在分发时阻止混合认证穿透,并在插件注册期间拒绝混合认证精确/前缀路由重叠。 - **Feishu/video media send contract(飞书/视频媒体发送合约)**:在 `msg_type: "media"` 上保持类 mp4 出站有效负载(包括回复和线程内回复路径),因此视频渲染为媒体而不是降级为文件链接行为,同时保留现有非视频文件子类型处理。(来自 #33720、#33808、#33678) 感谢 @polooooo、@dingjianrui 和 @kevinWangSheng。 - **Gateway/security default response headers(网关/安全默认响应头)**:为所有响应的基线网关 HTTP 安全头添加 `Permissions-Policy: camera=(), microphone=(), geolocation=()`。(#30186) 感谢 @habakan。 - **Plugins/startup loading(插件/启动加载)**:延迟初始化插件运行时,将启动关键插件 SDK 导入拆分为 `openclaw/plugin-sdk/core` 和 `openclaw/plugin-sdk/telegram`,并为插件兼容性保留 `api.runtime` 反射语义。(#28620) 感谢 @hmemcpy。 - **Plugins/startup performance(插件/启动性能)**:通过短进程内缓存减少突发插件发现/清单开销,跳过导入通过槽位选择禁用的捆绑内存插件,并通过运行时根别名路由加速遗留根 `openclaw/plugin-sdk` 兼容性,同时保留向后兼容性。感谢 @gumadeiras。 - **Build/lazy runtime boundaries(构建/延迟运行时边界)**:用专用的延迟运行时边界替换无效的动态导入站点,跨 Slack 斜杠处理、Telegram 审计、CLI 发送依赖、内存回退和出站交付路径,同时保留行为。(#33690) 感谢 @gumadeiras。 - **Gateway/password CLI hardening(网关/密码 CLI 强化)**:添加 `openclaw gateway run --password-file`,警告使用内联 `--password`,因为它可以通过进程列表泄露,并将环境/文件支持的密码输入记录为首选启动路径。修复 #27948。感谢 @vibewrk 和 @vincentkoc。 - **Config/heartbeat legacy-path handling(配置/心跳遗留路径处理)**:自动将顶级 `heartbeat` 迁移到 `agents.defaults.heartbeat`(具有保留显式默认的合并语义),并在详细无效配置路径中保留非可迁移遗留条目的启动失败,而不是通用迁移失败错误。(#32706) 感谢 @xiwan。 - **Plugins/SDK subpath parity(插件/SDK 子路径对等)**:跨捆绑频道/扩展(Discord、Slack、Signal、iMessage、WhatsApp、LINE 和捆绑配套插件)扩展插件 SDK 子路径,具有构建/导出/类型/运行时连接,因此作用域导入在源和发行版中一致解析,同时保留兼容性。(#33737) 感谢 @gumadeiras。 - **Google/Gemini Flash model selection(Google/Gemini Flash 模型选择)**:将内置 `gemini-flash` 默认值和文档/示例从不存在的 `google/gemini-3.1-flash-preview` ID 切换到工作的 `google/gemini-3-flash-preview`,同时规范仍使用旧 Flash 3.1 别名的遗留 OpenClaw 配置。 - **Plugins/bundled scoped-import migration(插件/捆绑作用域导入迁移)**:将捆绑插件从整体 `openclaw/plugin-sdk` 导入迁移到注册和启动敏感运行时文件中的范围子路径(或 `openclaw/plugin-sdk/core`),添加 CI/发布防护以防止回归,并为外部/社区插件保留根 `openclaw/plugin-sdk` 支持。感谢 @gumadeiras。 - **Routing/session duplicate suppression synthesis(路由/会话重复抑制综合)**:对齐共享会话交付上下文继承、频道配对路由字段合并和回复表面目标匹配,因此 dmScope=main 回合避免跨表面重复回复,同时线程感知转发保持预期路由语义。(来自 #33629、#26889、#17337、#33250) 感谢 @Yuandiaodiaodiao、@kevinwildenradt、@Glucksberg 和 @bmendonca3。 - **Routing/legacy session route inheritance(路由/遗留会话路由继承)**:为遗留频道会话键(`agent:<agent>:<channel>:<peer>` 和 `...:thread:<id>`)保留外部路由元数据继承,因此 `chat.send` 不错误回退到 webchat,当有效的交付上下文存在时。后续 #33786。 - **Routing/legacy route guard tightening(路由/遗留路由保护收紧)**:要求遗留会话键频道提示匹配保存的交付频道,然后继承外部路由元数据,防止自定义命名空间键如 `agent:<agent>:work:<ticket>` 继承过时的非 webchat 路由。 - **Gateway/internal client routing continuity(网关/内部客户端路由连续性)**:通过要求外部交付的显式 `deliver: true`,防止 webchat/TUI/UI 回合继承过时的外部回复路由,将主会话外部继承范围限定到非 Webchat/UI 客户端,并在识别主会话连续性时 honoring 配置的 `session.mainKey`。(来自 #35321、#34635、#35356) 感谢 @alexyyyander 和 @Octane0411。 - **Security/auth labels(安全/认证标签)**:从用户可见的认证状态标签中移除令牌和 API 密钥片段,因此 `/status` 和 `/models` 不暴露凭证片段。(#33262) 感谢 @cu1ch3n。 - **Models/MiniMax portal vision routing(模型/MiniMax 门户视觉路由)**:将 `MiniMax-VL-01` 添加到 `minimax-portal` 提供商,通过 MiniMax VLM 端点路由门户图像理解,并对齐媒体自动选择以及 Telegram 贴纸描述与共享门户图像提供商路径。(#33953) 感谢 @tars90percent。 - **Auth/credential semantics(认证/凭证语义)**:对齐配置文件资格 + 探测诊断与 SecretRef/过期规则,并硬化浏览器下载原子写入。(#33733) 感谢 @joshavant。 - **Security/audit denyCommands guidance(安全/审计 denyCommands 指导)**:为未知 `gateway.nodes.denyCommands` 条目建议可能的精确节点命令 ID,因此无效的拒绝列表条目更容易纠正。(#29713) 感谢 @liquidhorizon88-bot。 - **Agents/overload failover handling(代理/过载故障转移处理)**:将过载提供商失败与速率限制/状态超时分开分类,在重试/故障转移前添加短过载退避,将过载的提示/助手失败记录为临时认证配置文件冷却(具有可探测的相同提供商故障转移),而不是将其视为持久认证/计费失败,并保持一次性 cron 重试分类对齐,因此过载故障转移摘要仍计为临时重试。 - **Docs/security hardening guidance(文档/安全强化指导)**:记录 Docker `DOCKER-USER` + UFW 策略,并从 Docker 安装文档添加 VPS/公共主机设置的交叉链接。(#27613) 感谢 @dorukardahan。 - **Docs/security threat-model links(文档/安全威胁模型链接)**:在安全文档中将相对 `.md` 链接替换为 Mintlify 兼容的根相对路由,以防止内部导航中断。(#27698) 感谢 @clawdoo。 - **Plugins/Update integrity drift(插件/更新完整性漂移)**:当从未固定规范更新 npm 安装的插件时避免错误的完整性漂移提示,同时为精确固定版本保留漂移检查。(#37179) 感谢 @vincentkoc。 - **iOS/Voice timing safety(iOS/语音时间安全)**:保护系统语音开始/完成回调到活动发音,以避免在快速停止/重启循环期间错误归属的开始事件。(#33304) 感谢 @mbelinky;原始实现方向由 @ngutman。 - **Gateway/chat.send command scopes(网关/chat.send 命令范围)**:要求 `operator.admin` 用于通过网关聊天客户端路由的持久 `/config set|unset` 写入,同时保持 `/config show` 对正常写入范围操作客户端可用,保留消息频道配置命令行为而不将 RPC 写入范围扩大为管理员配置变异。感谢 @tdjackey 报告。 - **iOS/Talk incremental speech pacing(iOS/Talk 增量语音节奏)**:允许长的无标点助手块在安全空白边界开始说话,因此语音响应更早开始而不是等待终端标点。(#33305) 感谢 @mbelinky;原始实现由 @ngutman。 - **iOS/Watch reply reliability(iOS/Watch 回复可靠性)**:使 watch 会话激活等待器在并发请求下健壮,因此状态/发送调用不再间歇性挂起,并使委托回调与 Swift 6 actor 安全对齐。(#33306) 感谢 @mbelinky;原始实现由 @Rocuts。 - **Docs/tool-loop detection config keys(文档/工具循环检测配置键)**:对齐 `docs/tools/loop-detection.md` 示例和字段名称与当前 `tools.loopDetection` 架构,以防止过时键的复制粘贴验证失败。(#33182) 感谢 @Mylszd。 - **Gateway/session agent discovery(网关/会话代理发现)**:即使 `agents.list` 已配置,也将磁盘扫描的代理 ID 包含在 `listConfiguredAgentIds` 中,因此仅磁盘/ACP 代理会话在网关会话聚合和列表中保持可见。(#32831) 感谢 @Sid-Qin。 - **Discord/inbound debouncer(Discord/入站防抖器)**:在到达防抖队列之前跳过机器人自己的 MESSAGE_CREATE 事件,以避免繁忙服务器中的自触发减速。感谢 @thewilloftheshadow。 - **Discord/Agent-scoped media roots(Discord/代理范围媒体根)**:通过 Discord 监控回复交付(消息 + 组件交互路径)传递 `mediaLocalRoots`,因此本地媒体附件 honoring 每代理工作空间根而不是回退到默认全局根。感谢 @thewilloftheshadow。 - **Discord/slash command handling(Discord/斜杠命令处理)**:在频道中拦截基于文本的斜杠命令,将插件命令注册为原生,并为空斜杠运行发送回退确认,因此交互不挂起。感谢 @thewilloftheshadow。 - **Discord/thread session lifecycle(Discord/线程会话生命周期)**:当线程存档时重置线程范围会话,因此重新打开线程新鲜开始而不删除记录历史。感谢 @thewilloftheshadow。 - **Discord/presence defaults(Discord/存在默认值)**:在就绪时发送在线存在更新,当未配置自定义存在时,因此机器人不再默认显示为离线。感谢 @thewilloftheshadow。 - **Discord/typing cleanup(Discord/输入清理)**:在静默/NO_REPLY 运行后通过将运行标记为完成 before 调度空闲清理来停止输入指示器。感谢 @thewilloftheshadow。 - **ACP/sandbox spawn parity(ACP/沙盒生成对等)**:阻止来自与 `sessions_spawn({ runtime: "acp" })` 已强制执行的主机运行时保护相同的沙盒请求者会话的 `/acp spawn`,保留非沙盒 ACP 流程同时关闭命令路径策略差距。感谢 @patte。 - **Discord/config SecretRef typing(Discord/配置 SecretRef 类型)**:将 Discord 账户令牌配置类型与 SecretInput 对齐,以便 SecretRef 令牌类型检查。(#32490) 感谢 @scoootscooob。 - **Discord/voice messages(Discord/语音消息)**:使用 JSON fetch 调用请求上传槽位,因此语音消息上传不再因内容类型错误而失败。感谢 @thewilloftheshadow。 - **Discord/voice decoder fallback(Discord/语音解码器回退)**:删除原生 Opus 依赖并使用 opusscript 进行语音解码,以避免原生 opus 安装。感谢 @thewilloftheshadow。 - **Discord/auto presence health signal(Discord/自动存在健康信号)**:添加运行时可用性驱动的存在更新和连接状态报告,以改进健康监控和操作员可见性。(#33277) 感谢 @thewilloftheshadow。 - **HEIC image inputs(HEIC 图像输入)**:在网关 HTTP API 中接受 HEIC/HEIF `input_image` 源,在提供商交付前规范化为 JPEG,并记录扩展的默认 MIME 允许列表。感谢 @vincentkoc。 - **Gateway/HEIC input follow-up(网关/HEIC 输入后续)**:保持非 HEIC `input_image` MIME 处理不变,使 HEIC 测试 hermetic,并对规范化后的图像有效负载大小强制执行聊天完成 `maxTotalImageBytes`。感谢 @vincentkoc。 - **Telegram/draft-stream boundary stability(Telegram/草稿流边界稳定性)**:在助手消息/工具边界实现 DM 草稿预览,在最终交付前序列化车道边界回调,并将预览清理范围限定到活动预览,因此多步骤 Telegram 流不再丢失、覆盖或留下陈旧的预览气泡。(#33842) 感谢 @ngutman。 - **Telegram/DM draft finalization reliability(Telegram/DM 草稿最终化可靠性)**:在将草稿最终化视为交付之前要求验证的最终文本草稿发射,并在最终草稿交付未确认时回退到正常有效负载发送(防止缺失最终响应并保留媒体/按钮交付)。(#32118) 感谢 @OpenCils。 - **Telegram/DM draft final delivery(Telegram/DM 草稿最终交付)**:将仅文本 `sendMessageDraft` 预览实现为一个永久最终消息并跳过重复的最终有效负载发送,同时保留实现失败时的回退行为。(#34318) 感谢 @Brotherinlaw-13。 - **Telegram/DM draft duplicate display(Telegram/DM 草稿重复显示)**:实现真实最终消息后清除陈旧的 DM 草稿预览,包括 DM 主题查找失败时的无线程回退,因此部分流不再短暂显示重复回复。(#36746) 感谢 @joelnishanth。 - **Telegram/draft preview boundary + silent-token reliability(Telegram/草稿预览边界 + 静默令牌可靠性)**:在晚部分/消息开始竞争期间稳定答案车道消息边界,在正确边界保留/重置最终化的预览状态,并抑制 `NO_REPLY` 前导片段泄漏,没有广泛的心跳前缀误报。(#33169) 感谢 @obviyus。 - **Telegram/native commands `commands.allowFrom` precedence(Telegram/原生命令 `commands.allowFrom` 优先级)**:使原生 Telegram 命令 honoring `commands.allowFrom` 作为命令特定授权源,包括群组聊天,而不是回退到频道发送者允许列表。(#28216) 感谢 @toolsbybuddy 和 @vincentkoc。 - **Telegram/`groupAllowFrom` sender-ID validation(Telegram/`groupAllowFrom` 发送者 ID 验证)**:恢复仅发送者运行时验证,因此负聊天/组 ID 保持无效条目而不是显示接受同时仍无法授权组访问。(#37134) 感谢 @qiuyuemartin-max 和 @vincentkoc。 - **Telegram/native group command auth(Telegram/原生群组命令认证)**:在群组和论坛主题中授权原生命令 against `groupAllowFrom` 和每群组/主题发送者覆盖,同时保持授权拒绝回复在源主题线程中。感谢 @edwluo。 - **Telegram/named-account DMs(Telegram/命名账户 DMs)**:当命名 Telegram 账户回退到默认代理时,通过保持群组失败关闭但为 DMs 推导每账户会话键(包括身份链接规范化和回归覆盖)来恢复非默认账户 DM 路由。(来自 #32426;修复 #32351) 感谢 @chengzhichao-xydt。 - **Discord/audit wildcard warnings(Discord/审计通配符警告)**:在计算未解析的 guild 频道时忽略 `"*"` 通配符键,因此医生/状态不再在允许所有配置上警告。(#33125) 感谢 @thewilloftheshadow。 - **Discord/channel resolution(Discord/频道解析)**:将裸数字收件人默认为频道,用安全回退强化允许列表数字 ID 处理,并避免入站 WS 心跳停顿。(#33142) 感谢 @thewilloftheshadow。 - **Discord/chunk delivery reliability(Discord/块交付可靠性)**:在使用 REST 客户端时保留块排序,并使用账户重试设置在 429/5xx 上重试块发送。(#33226) 感谢 @thewilloftheshadow。 - **Discord/mention handling(Discord/提及处理)**:添加基于 ID 的提及格式化 + 缓存重写,将入站提及解析为显示名称,并添加可选的 ignoreOtherMentions 门控(排除 @everyone/@here)。(#33224) 感谢 @thewilloftheshadow。 - **Discord/media SSRF allowlist(Discord/媒体 SSRF 允许列表)**:在入站媒体 SSRF 策略中允许 Discord CDN 主机名(包括通配符域),以防止代理/VPN 假 IP 块。(#33275) 感谢 @thewilloftheshadow。 - **Telegram/device pairing notifications(Telegram/设备配对通知)**:在 `/pair qr` 上自动武装一次性通知,在新配对请求上自动 ping,并在 ping 未到达时通过 `/pair approve latest` 添加手动回退。(#33299) 感谢 @mbelinky。 - **Exec heartbeat routing(Exec 心跳路由)**:将 exec 触发的心跳唤醒范围限定到代理会话键,因此不相关的代理不再被 exec 事件唤醒,同时为非规范会话键保留遗留无范围行为。(#32724) 感谢 @altaywtf。 - **macOS/Tailscale remote gateway discovery(macOS/Tailscale 远程网关发现)**:当 Bonjour 和广域网 DNS-SD 发现返回无网关时,添加 Tailscale Serve 回退对等探测路径(`wss://<peer>.ts.net`),并从 macOS 引导刷新两条发现路径。(#32860) 感谢 @ngutman。 - **iOS/Gateway keychain hardening(iOS/网关钥匙串强化)**:将网关元数据和 TLS 指纹移动到设备钥匙串存储,具有更安全的迁移行为和回滚安全写入,以减少升级期间的凭证丢失风险。(#33029) 感谢 @mbelinky。 - **iOS/Concurrency stability(iOS/并发稳定性)**:在相机和网关连接路径中用锁保护访问模式替换有风险的共享状态访问,以减少负载下的崩溃风险。(#33241) 感谢 @mbelinky。 - **iOS/Security guardrails(iOS/安全防护)**:将生产 API 密钥源限制为应用配置,并使深度链接确认提示更安全,通过合并排队请求而不是静默丢弃它们。(#33031) 感谢 @mbelinky。 - **iOS/TTS playback fallback(iOS/TTS 播放回退)**:通过从 PCM 切换到 MP3 保持语音播放弹性,当提供商格式支持不可用时,同时避免在通用本地播放错误上的粘性回退。(#33032) 感谢 @mbelinky。 - **Plugin outbound/text-only adapter compatibility(插件出站/仅文本适配器兼容性)**:允许仅实现 `sendText`(没有 `sendMedia`)的直接交付频道插件保持出站能力,当 `sendMedia` 缺失时优雅回退到媒体有效负载的文本交付,并对于没有文本回退的仅媒体有效负载显式失败。(#32788) 感谢 @liuxiaopai-ai。 - **Telegram/multi-account default routing clarity(Telegram/多账户默认路由清晰度)**:仅对没有显式默认的模糊(2+)账户设置警告,为跨频道的多账户默认添加 `openclaw doctor` 警告,并记录频道路由和 Telegram 配置的显式默认指导。(#32544) 感谢 @Sid-Qin。 - **Telegram/plugin outbound hook parity(Telegram/插件出站钩子对等)**:在 Telegram 回复交付中运行 `message_sending` + `message_sent`,包括回复路径钩子元数据(`mediaUrls`、`threadId`),并在钩子空白文本且无出站消息交付时报告 `message_sent.success=false`。(#32649) 感谢 @KimGLee。 - **CLI/Coding-agent reliability(CLI/Coding-agent 可靠性)**:将默认 `claude-cli` 非交互参数切换到 `--permission-mode bypassPermissions`,自动将遗留 `--dangerously-skip-permissions` 后端覆盖规范化为现代权限模式形式,对齐 coding-agent + live-test 文档与非 PTY Claude 路径,并在 CLI 看门狗无输出超时终止运行时发出会话系统事件心跳通知。(#28610、#31149、#34055)。感谢 @niceysam、@cryptomaltese 和 @vincentkoc。 - **Gateway/OpenAI chat completions(网关/OpenAI 聊天完成)**:解析活动回合 `image_url` 内容部分(包括参数化数据 URI 和受保护的 URL 源),将它们作为多模态 `images` 转发,接受仅图像用户回合,强制执行每请求图像部分/字节预算,默认基于 URL 的图像获取为禁用除非配置显式启用,并在缓存跟踪/提供商有效负载诊断中编辑图像 base64 数据。(#17685) 感谢 @vincentkoc。 - **ACP/ACPX session bootstrap(ACP/ACPX 会话引导)**:当 `sessions ensure` 返回无会话标识符时使用 `sessions new` 重试,因此 ACP 生成避免受影响代理上的 `NO_SESSION`/`ACP_TURN_FAILED` 失败。(#28786、#31338、#34055)。感谢 @Sid-Qin 和 @vincentkoc。 - **ACP/sessions_spawn parent stream visibility(ACP/sessions_spawn 父流可见性)**:为 `runtime: "acp"` 添加 `streamTo: "parent"`,将初始子运行进度/无输出/完成更新作为系统事件转发回请求者会话(而不是直接子交付),并发出可跟踪的会话范围中继日志(`<sessionId>.acp-stream.jsonl`,在可用时作为 `streamLogPath` 返回),改进被阻止或长时间运行的 harness 回合的编排器可见性。(#34310、#29909;从 #34055 重新打开)。感谢 @vincentkoc。 - **Agents/bootstrap truncation warning handling(代理/引导截断警告处理)**:跨嵌入式 + CLI 运行时、`/context` 和 `openclaw doctor` 统一引导预算/截断分析;添加 `agents.defaults.bootstrapPromptTruncationWarning`(`off|once|always`,默认 `once`)并持久化警告签名元数据,因此截断警告一致且跨回合去重。(#32769) 感谢 @gumadeiras。 - **Agents/Skills runtime loading(代理/技能运行时加载)**:将运行配置传播到嵌入式尝试和压缩技能条目加载,因此当技能快照不已经提供解析条目时,显式启用的捆绑配套技能一致发现。感谢 @gumadeiras。 - **Agents/Session startup date grounding(代理/会话启动日期接地)**:在启动/后压缩 AGENTS 上下文中替换 `YYYY-MM-DD` 占位符,并为 `/new` 和 `/reset` 提示附加运行时当前时间行,因此每日内存引用正确解析。(#32381) 感谢 @chengzhichao-xydt。 - **Agents/Compaction template heading alignment(代理/压缩模板标题对齐)**:更新 AGENTS 模板部分名称为 `Session Startup`/`Red Lines` 并保留遗留 `Every Session`/`Safety` 回退提取,因此后压缩上下文跨模板版本保持完整。(#25098) 感谢 @echoVic。 - **Agents/Compaction continuity(代理/压缩连续性)**:扩展阶段摘要合并指令以保留活动任务状态、批次进度、最新用户请求和后续承诺,因此压缩交接保留进行中工作上下文。(#8903) 感谢 @joetomasone。 - **Agents/Compaction safeguard structure hardening(代理/压缩保护结构强化)**:需要精确的回退摘要标题,在提示嵌入前消毒不受信任的压缩指令文本,并在保留所有回合时保持结构化部分。(#25555) 感谢 @rodrigouroz。 - **Gateway/status self version reporting(网关/状态自版本报告)**:使 `openclaw status` 中的网关自版本优先运行时 `VERSION`(同时保留显式 `OPENCLAW_VERSION` 覆盖),防止升级后过时的应用版本输出。(#32655) 感谢 @liuxiaopai-ai。 - **Memory/QMD index isolation(内存/QMD 索引隔离)**:将 `QMD_CONFIG_DIR` 与 `XDG_CONFIG_HOME` 一起设置,因此 QMD 配置状态保持每代理,尽管上游 XDG 处理错误,防止跨代理集合索引和过量磁盘/CPU 使用。(#27028) 感谢 @HenryLoenwind。 - **Memory/QMD collection safety(内存/QMD 集合安全)**:当 QMD `collection list` 仅报告名称而没有路径元数据时,停止破坏性集合重新绑定,防止 `memory search` 在重新添加失败时删除现有集合。(#36870) 感谢 @Adnannnnnnna。 - **Memory/QMD duplicate-document recovery(内存/QMD 重复文档恢复)**:检测 `UNIQUE constraint failed: documents.collection, documents.path` 更新失败,重建管理的集合一次并重试更新,因此周期性 QMD 同步恢复而不是每次运行失败;包括回归覆盖以避免过度匹配不相关的唯一约束。(#27649) 感谢 @MiscMich。 - **Memory/local embedding initialization hardening(内存/本地嵌入初始化强化)**:为瞬态初始化重试和混合 `embedQuery` + `embedBatch` 并发启动添加回归覆盖,以锁定单次飞行初始化行为。(#15639) 感谢 @SubtleSpark。 - **CLI/Coding-agent reliability(CLI/Coding-agent 可靠性)**:将默认 `claude-cli` 非交互参数切换到 `--permission-mode bypassPermissions`,自动将遗留 `--dangerously-skip-permissions` 后端覆盖规范化为现代权限模式形式,对齐 coding-agent + live-test 文档与非 PTY Claude 路径,并在 CLI 看门狗无输出超时终止运行时发出会话系统事件心跳通知。与 #28261 相关。来自贡献者 PR #28610 和 #31149。感谢 @niceysam、@cryptomaltese 和 @vincentkoc。 - **ACP/ACPX session bootstrap(ACP/ACPX 会话引导)**:当 `sessions ensure` 返回无会话标识符时使用 `sessions new` 重试,因此 ACP 生成避免受影响代理上的 `NO_SESSION`/`ACP_TURN_FAILED` 失败。与 #28786 相关。来自贡献者 PR #31338。感谢 @Sid-Qin 和 @vincentkoc。 - **LINE/auth boundary hardening synthesis(LINE/认证边界强化综合)**:跨配对存储账户范围、DM/群组允许列表分离、失败关闭 webhook 认证/运行时行为以及重放/重复控制(包括飞行中重放保留和成功后重复标记)强制执行严格的 LINE webhook 认证/授权边界语义。(来自 #26701、#26683、#25978、#17593、#16619、#31990、#26047、#30584、#18777) 感谢 @bmendonca3、@davidahmann、@harshang03、@haosenwang1018、@liuxiaopai-ai、@coygeek 和 @Takhoffman。 - **LINE/media download synthesis(LINE/媒体下载综合)**:修复文件媒体下载处理和跨重叠 LINE 回归的 M4A 音频分类。(来自 #26386、#27761、#27787、#29509、#29755、#29776、#29785、#32240) 感谢 @kevinWangSheng、@loiie45e、@carrotRakko、@Sid-Qin、@codeafridi 和 @bmendonca3。 - **LINE/context and routing synthesis(LINE/上下文和路由综合)**:修复群组/房间对等路由和命令授权上下文传播,并在混合成功 webhook 批次中保持处理稍后事件。(来自 #21955、#24475、#27035、#28286) 感谢 @lailoo、@mcaxtr、@jervyclaw、@Glucksberg 和 @Takhoffman。 - **LINE/status/config/webhook synthesis(LINE/状态/配置/webhook 综合)**:修复来自快照/配置状态的误报,并接受 LINE webhook HEAD 探测以实现兼容性。(来自 #10487、#25726、#27537、#27908、#31387) 感谢 @BlueBirdBack、@stakeswky、@loiie45e、@puritysb 和 @mcaxtr。 - **LINE cleanup/test follow-ups(LINE 清理/测试后续)**:将清理/测试学习折叠到综合审查路径,同时保持运行时更改专注于回归修复。(来自 #17630、#17289) 感谢 @Clawborn 和 @davidahmann。 - **Mattermost/interactive buttons(Mattermost/交互按钮)**:添加交互按钮发送/回调支持,具有基于目录的频道/用户目标解析,并通过账户范围 HMAC 验证 plus 发送者范围 DM 路由硬化回调。(#19957) 感谢 @tonydehnke。 - **Feishu/groupPolicy legacy alias compatibility(飞书/groupPolicy 遗留别名兼容性)**:在架构解析和运行时策略检查中将遗留 `groupPolicy: "allowall"` 视为 `open`,因此当 `groupAllowFrom` 为空时,预期的开放群组配置不再静默丢弃群组消息。(来自 #36358) 感谢 @Sid-Qin。 - **Mattermost/plugin SDK import policy(Mattermost/插件 SDK 导入策略)**:在 Mattermost 提及门控路径/测试中用范围子路径(`openclaw/plugin-sdk/compat` 和 `openclaw/plugin-sdk/mattermost`)替换剩余的单一 `openclaw/plugin-sdk` 导入,因此 `pnpm check` 在基线上通过 `lint:plugins:no-monolithic-plugin-sdk-entry-imports`。(#36480) 感谢 @Takhoffman。 - **Telegram/polls(Telegram/投票)**:向频道操作发现和工具/CLI 投票流添加 Telegram 投票操作支持,多账户可发现性门控到可以实际执行投票的账户(`sendMessage` + `poll`)。(#36547) 感谢 @gumadeiras。 - **Agents/failover cooldown classification(代理/故障转移冷却分类)**:停止将通用 `cooling down` 文本视为提供商 `rate_limit`,因此健康模型不再显示错误的全局冷却/速率限制警告,同时显式 `model_cooldown` 标记仍触发故障转移。(#32972) 感谢 @stakeswky。 - **Agents/failover service-unavailable handling(代理/故障转移服务不可用处理)**:停止将裸代理/CDN `service unavailable` 错误视为提供商过载,同时通过超时/故障转移路径保持可重试,因此暂时中断不再显示错误的速率限制警告或阻止回退。(#36646) 感谢 @jnMetaCode。 - **Plugins/HTTP route migration diagnostics(插件/HTTP 路由迁移诊断)**:将遗留 `api.registerHttpHandler(...)` 加载器重写为可操作的迁移指导,因此医生/插件诊断将操作员指向 `api.registerHttpRoute(...)` 或 `registerPluginHttpRoute(...)`。(#36794) 感谢 @vincentkoc。 - **Doctor/Heartbeat upgrade diagnostics(医生/心跳升级诊断)**:当心跳交付配置有隐式 `directPolicy` 时警告,因此升级将直接/DM 行为显式固定而不是依赖当前默认值。(#36789) 感谢 @vincentkoc。 - **Agents/current-time UTC anchor(代理/当前时间 UTC 锚)**:在共享 cron 风格提示上下文中附加机器可读 UTC 后缀 alongside 本地 `Current time:` 行,因此代理可以比较 UTC 时间戳的工作空间时间戳,而无需做时区数学。(#32423) 感谢 @jriff。 - **Ollama/local model handling(Ollama/本地模型处理)**:在合并刷新期间保留显式较低 `contextWindow` / `maxTokens` 覆盖,并保持原生 Ollama 流式回复不再在真实内容开始流式后表面回退 `thinking` / `reasoning` 文本。(#39292) 感谢 @vincentkoc。 - **TUI/webchat command-owner scope alignment(TUI/webchat 命令所有者范围对齐)**:将具有 `operator.admin` 的内部频道网关会话视为命令认证中的所有者授权,恢复受影响 TUI/webchat 会话的 cron/网关/连接器工具访问,同时外部频道在基于身份的所有者检查上。(来自 #35666、#35673、#35704) 感谢 @Naylenv、@Octane0411 和 @Sid-Qin。 - **Discord/inbound timeout isolation(Discord/入站超时隔离)**:将入站工作程序超时跟踪与监听器超时预算分开,因此排队的 Discord 回复不再在监听器看门狗窗口中途到期时被丢弃。(#36602) 感谢 @dutifulbob。 - **Memory/doctor SecretRef handling(内存/医生 SecretRef 处理)**:将 SecretRef 支持的内存搜索 API 密钥视为已配置,并用显式未解析秘密错误失败嵌入设置,而不是崩溃。(#36835) 感谢 @joshavant。 - **Memory/flush default prompt(内存/刷新默认提示)**:在默认内存刷新运行期间禁止带时间戳变体文件名,因此持久笔记保持在规范的每日 `memory/YYYY-MM-DD.md` 文件中。(#34951) 感谢 @zerone0x。 - **Agents/reply delivery timing(代理/回复交付时间)**:在等待压缩重试之前刷新嵌入式 Pi 块回复,因此已生成的助手回复在压缩等待完成之前到达频道。(#35489) 感谢 @Sid-Qin。 - **Agents/gateway config guidance(代理/网关配置指导)**:停止通过代理 `gateway` 工具暴露 `config.schema`,从提示/文档指导中移除告诉代理调用它的内容,并保持代理在 `config.get` 加上 `config.patch`/`config.apply` 上进行配置更改。(#7382) 感谢 @kakuteki。 - **Provider/KiloCode(提供商/KiloCode)**:在格式错误的发现行后保留重复模型,并在代理推理注入跳过时剥离遗留 `reasoning_effort`。(#32352) 感谢 @pandemicsyn 和 @vincentkoc。 - **Agents/failover(代理/故障转移)**:将周期性提供商限制耗尽文本(例如 `Weekly/Monthly Limit Exhausted`)分类为 `rate_limit`,同时保持显式 `402 Payment Required` 变体在计费中,因此故障转移继续而不错误分类账单包装配额错误。(#33813) 感谢 @zhouhe-xydt。 - **Mattermost/interactive button callbacks(Mattermost/交互按钮回调)**:允许外部回调基础 URL 并且不再需要环回来源请求,因此当 Mattermost 通过 Tailscale、LAN 或反向代理到达网关时按钮点击工作。(#37543) 感谢 @mukhtharcm。 - **Gateway/chat.send route inheritance(网关/chat.send 路由继承)**:保持频道范围会话的显式外部交付,同时防止共享主和其他频道无关 webchat 会话继承过时的外部路由,因此控制界面回复保持在 webchat 而不破坏选定的频道目标会话。(#34669) 感谢 @vincentkoc。 - **Telegram/Discord media upload caps(Telegram/Discord 媒体上传上限)**:使出站上传 honoring 频道 `mediaMaxMb` 配置,将 Telegram 的默认媒体上限提高到 100MB,并移除保持某些 Telegram 上传在 16MB 的 MIME 回退限制。感谢 @vincentkoc。 - **Skills/nano-banana-pro resolution override(技能/nano-banana-pro 分辨率覆盖)**:在图像编辑期间尊重显式 `--resolution` 值,并且仅在标志省略时从输入图像自动检测输出大小。(#36880) 感谢 @shuofengzhang 和 @vincentkoc。 - **Skills/openai-image-gen CLI validation(技能/openai-image-gen CLI 验证)**:早期验证 `--background` 和 `--style` 输入,规范支持值,并在这些标志对不兼容模型被忽略时警告。(#36762) 感谢 @shuofengzhang 和 @vincentkoc。 - **Skills/openai-image-gen output formats(技能/openai-image-gen 输出格式)**:早期验证 `--output-format` 值,规范别名如 `jpg -> jpeg`,并在标志对不兼容模型被忽略时警告。(#36648) 感谢 @shuofengzhang 和 @vincentkoc。 - **ACP/skill env isolation(ACP/技能环境隔离)**:从 ACP harness 子进程环境中剥离技能注入的 API 密钥,因此像 Codex CLI 这样的工具保留自己的认证流而不是继承活动技能的计费提供商密钥。(#36316) 感谢 @taw0002 和 @vincentkoc。 - **WhatsApp media upload caps(WhatsApp 媒体上传上限)**:使出站媒体发送和自动回复 honoring `channels.whatsapp.mediaMaxMb` 具有每账户覆盖,因此入站和出站限制使用相同的频道配置。感谢 @vincentkoc。 - **Windows/Plugin install(Windows/插件安装)**:当 OpenClaw 在 Windows 上通过 Bun 运行且 `npm-cli.js` 不与运行时二进制并置时,回退到通过现有 `cmd.exe` 包装器的 `npm.cmd`/`npx.cmd`,因此 `openclaw plugins install` 不再因 `spawn EINVAL` 而失败。(#38056) 感谢 @0xlin2023。 - **Telegram/send retry classification(Telegram/发送重试分类)**:在发送流程中重试 grammY `Network request ... failed after N attempts` 信封,而不将普通 `Network request ... failed!` 包装器重新分类为临时,恢复预期重试路径,同时保持广泛的发送上下文消息匹配紧密。(#38056) 感谢 @0xlin2023。 - **Gateway/probes(网关/探测)**:当控制界面在 `/` 挂载时保持 `/health`、`/healthz`、`/ready`、`/readyz` 可访问,保留插件拥有的路由在这些路径上的优先级,并使 `/ready` 和 `//readyz` 报告频道支持的准备状态,具有启动宽限期加上 `503` 在断开连接的托管频道上,而 `/health` 和 `/healthz` 保持浅存活探测。(#18446) 感谢 @vibecodooor、@mahsumaktas 和 @vincentkoc。 - **Feishu/media downloads(飞书/媒体下载)**:从 SDK 方法调用中删除无效的超时字段,现在客户端级 `httpTimeoutMs` 应用于请求。(#38267) 感谢 @ant1eicher 和 @thewilloftheshadow。 - **PI embedded runner/Feishu docs(PI 嵌入式运行器/飞书文档)**:将发送者身份传播到嵌入式尝试,因此飞书文档自动授权恢复请求者访问嵌入式运行器执行。(#32915) 感谢 @cszhouwei。 - **Agents/usage normalization(代理/使用规范化)**:在压缩会计之前规范化缺失或部分的助手使用快照,因此 `openclaw agent --json` 不再在提供商有效负载省略 `totalTokens` 或相关使用字段时崩溃。(#34977) 感谢 @sp-hk2ldn。 - **Venice/default model refresh(Venice/默认模型刷新)**:将内置 Venice 默认切换到 `kimi-k2-5`,更新引导别名,并刷新 Venice 提供商文档/推荐以匹配当前私有和匿名目录。(来自 #12964) 修复 #20156。感谢 @sabrinaaquino 和 @vincentkoc。 - **Agents/skill API write pacing(代理/技能 API 写入节奏)**:添加将技能驱动的外部 API 写入视为默认速率限制的全局提示防护,因此运行器偏好批处理写入,避免紧密请求循环,并尊重 `429`/`Retry-After`。感谢 @vincentkoc。 - **Google Chat/multi-account webhook auth fallback(Google Chat/多账户 webhook 认证回退)**:当 `channels.googlechat.accounts.default` 携带共享 webhook 受众/路径设置(例如配置规范化后)时,为命名账户继承这些默认值,同时保留顶级和每账户覆盖,因此入站 webhook 验证不再对缺失重复受众字段的命名账户静默失败。修复 #38369。 - **Models/tool probing(模型/工具探测)**:将工具能力探测预算从 32 提升到 256 令牌,因此花费令牌在思考上然后返回所需工具调用的推理模型不太可能被错误分类为不支持工具。(#7521) 感谢 @jakobdylanc。 - **Gateway/transient network classification(网关/临时网络分类)**:将包装的 `...: fetch failed` 传输消息视为临时,同时避免像 `Web fetch failed (404): ...` 这样的广泛匹配,防止 Discord 重新连接包装器在没有抑制非网络工具失败的情况下导致网关崩溃。(#38530) 感谢 @xinhuagu。 - **ACP/console silent reply suppression(ACP/控制台静默回复抑制)**:在 `openclaw agent` 日志/交付之前过滤 ACP `NO_REPLY` 前导片段和仅静默最终,因此控制台支持的 ACP 会话不再泄漏 `NO`/`NO_REPLY` 占位符。(#38436) 感谢 @ql-wade。 - **Feishu/reply delivery reliability(飞书/回复交付可靠性)**:在飞书回复选项中禁用块流式,因此纯文本自动渲染回复不再在最终交付前静默丢弃。(#38258) 感谢 @xinhuagu。 - **Agents/reply MEDIA delivery(代理/回复 MEDIA 交付)**:在块/最终交付之前规范本地助手 `MEDIA:` 路径,保持媒体去重与消息工具发送对齐,并包含格式错误的媒体规范化失败,因此生成的文件可靠发送而不是回退到空响应。(#38572) 感谢 @obviyus。 - **Sessions/bootstrap cache rollover invalidation(会话/引导缓存轮换失效)**:当现有 `sessionKey` 在自动回复、命令和隔离 cron 会话解析器中滚动到新 `sessionId` 时清除缓存的 workspace 引导快照,因此 `AGENTS.md`/`MEMORY.md`/`USER.md` 更新在每日、空闲或强制会话重置后重新加载,而不是在网关重启前保持陈旧。(#38494) 感谢 @LivingInDrm。 - **Gateway/Telegram polling health monitor(网关/Telegram 轮询健康监控)**:跳过 Telegram 长轮询频道的陈旧套接字重启,并通过共享健康评估线程频道身份,因此轮询连接不在 WebSocket 陈旧套接字启发式上重启。(#38395) 感谢 @ql-wade 和 @Takhoffman。 - **Daemon/systemd fresh-install probe(守护进程/systemd 全新安装探测)**:在运行 `systemctl --user is-enabled` 之前检查 OpenClaw 的管理用户单元,因此首次 Linux 安装不再在通用缺失单元探测错误上失败。(#38819) 感谢 @adaHubble。 - **Gateway/container lifecycle(网关/容器生命周期)**:允许 `openclaw gateway stop` 向 SIGTERM 非托管网关监听器,`openclaw gateway restart` 向单个非托管监听器发送 SIGUSR1,当未安装服务管理器时,因此容器和基于监管器的部署不再被 `service disabled` 无操作响应阻止。修复 #36137。感谢 @vincentkoc。 - **Gateway/Windows restart supervision(网关/Windows 重启监管)**:通过带引用的辅助脚本命令路径通过计划任务重新启动任务管理的网关,区分每个平台的重启能力监管程序,并在自重启期间停止孤立的 Windows 网关子级。(#38825) 感谢 @obviyus。 - **Telegram/native topic command routing(Telegram/原生主题命令路由)**:通过相同的对话路由解析论坛主题原生命令,因此主题 `agentId` 覆盖和绑定主题会话目标活动会话而不是默认主题父会话。(#38871) 感谢 @obviyus。 - **Markdown/assistant image hardening(Markdown/助手图像强化)**:跨控制界面、导出 HTML 和共享 Swift 聊天将远程 markdown 图像扁平化为纯文本,同时保持内联 `data:image/...` markdown 可渲染,因此模型输出不再触发自动远程图像获取。(#38895) 感谢 @obviyus。 - **Config/compaction safeguard settings(配置/压缩保护设置)**:通过 `loadConfig()` 回归测试 `agents.defaults.compaction.recentTurnsPreserve` 并覆盖新的帮助元数据条目,因此暴露的保留旋钮通过架构验证和配置 UX 连接。(#25557) 感谢 @rodrigouroz。 - **iOS/Quick Setup presentation(iOS/快速设置呈现)**:当网关已配置(活动连接配置、最后已知连接、首选网关或手动主机)时跳过自动快速设置,因此重新连接安装不再被提示再次连接。(#38964) 感谢 @ngutman。 - **CLI/Docs memory help accuracy(CLI/文档内存帮助准确性)**:澄清 `openclaw memory status --deep` 行为,并将内存命令示例/文档与当前搜索选项对齐。(#31803) 感谢 @JasonOA888 和 @Avi974。 - **Auto-reply/allowlist store account scoping(自动回复/允许列表存储账户范围)**:保持 `/allowlist ... --store` 写入范围限定到选定的账户,并在移除默认账户存储访问时清除遗留无范围条目,防止从遗留配对存储读取的跨账户默认允许列表渗漏。感谢 @tdjackey 报告和 @vincentkoc 修复。 - **Security/Nostr(安全/Nostr)**:通过失败关闭非环回转发的客户端头(`x-forwarded-for` / `x-real-ip`)并拒绝 `sec-fetch-site: cross-site` 来强化配置文件突变/导入环回保护;为代理转发和浏览器跨站点突变尝试添加回归覆盖。 - **CLI/bootstrap Node version hint maintenance(CLI/引导 Node 版本提示维护)**:用 `MIN_NODE_MAJOR` 插值替换 `openclaw.mjs` 中的硬编码 nvm `22` 指令,因此未来最小 Node 提升保持启动指导自动同步。(#39056) 感谢 @onstash。 - **Discord/native slash command auth(Discord/原生斜杠命令认证)**:在 guild 斜杠命令预分发授权中 honoring `commands.allowFrom.discord`(和 `commands.allowFrom["*"]`),因此允许列表发送者不再被错误拒绝为未授权。(#38794) 感谢 @jskoiz 和 @thewilloftheshadow。 - **Outbound/message target normalization(出站/消息目标规范化)**:当提供显式 `target` 时忽略空遗留 `to`/`channelId` 字段,因此有效的基于目标发送不再失败遗留参数验证;包括回归覆盖。(#38944) 感谢 @Narcooo。 - **Models/auth token prompts(模型/认证令牌提示)**:保护取消的手动令牌提示,因此 `Symbol(clack:cancel)` 值不能持久化到认证配置文件中;为取消的 `models auth paste-token` 添加回归覆盖。(#38951) 感谢 @MumuTW。 - **Gateway/loopback announce URLs(网关/环回通知 URL)**:将 `http://` 和 `https://` 别名与 websocket URL 相同的环回/私有网络策略一起对待,因此环回 cron 通知交付不再失败安全 URL 验证。(#39064) 感谢 @Narcooo。 - **Models/default provider fallback(模型/默认提供商回退)**:当硬编码默认提供商从 `models.providers` 中移除时,从配置的提供商解析默认值,而不是在状态输出中报告过时的已移除提供商默认值。(#38947) 感谢 @davidemanuelDEV。 - **Agents/cache-trace stability(代理/缓存跟踪稳定性)**:保护稳定字符串化 against 跟踪有效负载中的循环引用,因此接近限制的有效负载不再因 `Maximum call stack size exceeded` 而崩溃;添加回归覆盖。(#38935) 感谢 @MumuTW。 - **Extensions/diffs CI stability(扩展/diffs CI 稳定性)**:在 `extensions/diffs/index.test.ts` 中的 `localReq` 测试助手添加 `headers`,因此转发提示检查不再因 `req.headers` 未定义而崩溃。(取代 #39063)感谢 @Shennng。 - **Agents/compaction thresholding(代理/压缩阈值)**:将 `agents.defaults.contextTokens` 上限应用到传入嵌入式运行和 `/compact` 会话创建的模型,因此自动压缩阈值使用有效上下文窗口,而不是原生模型最大上下文。(#39099) 感谢 @MumuTW。 - **Models/merge mode provider precedence(模型/合并模式提供商优先级)**:当 `models.mode: "merge"` 激活且配置显式设置提供商 `baseUrl` 时,保持配置为真相来源而不是保留过时的运行时 `models.json` `baseUrl` 值;包括规范化的提供商键覆盖。(#39103) 感谢 @BigUncle。 - **UI/Control chat tool streaming(UI/控制聊天工具流式)**:通过启用 `tool-events` 能力、修复流式/事件相关性以及围绕工具结果和终端事件重置/重新加载流状态,在 webchat 中实时渲染工具事件,无需刷新。(#39104) 感谢 @jakepresent。 - **Models/provider apiKey persistence hardening(模型/提供商 apiKey 持久化强化)**:当提供商 `apiKey` 值等于已知提供商环境变量值时,将规范环境变量名称持久化到 `models.json` 而不是解析的纯文本秘密。(#38889) 感谢 @gambletan。 - **Discord/model picker persistence check(Discord/模型选择器持久性检查)**:在分派后添加短暂的稳定延迟 before 读回会话模型状态,因此选择器确认在成功模型切换后停止报告错误的差异警告。(#39105) 感谢 @akropp。 - **Agents/OpenAI WS compat store flag(代理/OpenAI WS 兼容存储标志)**:当模型兼容设置 `supportsStore: false` 时从 `response.create` 有效负载中省略 `store`,防止严格的 OpenAI 兼容提供商因未知字段错误而拒绝 websocket 请求。(#39113) 感谢 @scoootscooob。 - **Config/validation log sanitization(配置/验证日志消毒)**:在记录前消毒配置验证问题路径/消息,因此控制字符和 ANSI 转义序列不能从格式错误的配置内容注入误导性终端输出。(#39116) 感谢 @powermaster888。 - **Agents/compaction counter accuracy(代理/压缩计数器准确性)**:在压缩计数器中计数成功的溢出触发自动压缩(`willRetry=true`),同时仍然排除中止/无结果事件,因此 `/status` 反映实际保护压缩活动。(#39123) 感谢 @MumuTW。 - **Gateway/chat delta ordering(网关/聊天增量排序)**:在发出工具 `start` 事件之前刷新缓冲的助手增量,因此工具前文本在工具卡片之前交付到控制界面,避免流式中的瞬态文本/工具排序伪影。(#39128) 感谢 @0xtangping。 - **Voice-call plugin schema parity(语音呼叫插件架构对等)**:添加缺失的清单 `configSchema` 字段(`webhookSecurity`、`streaming.preStartTimeoutMs|maxPendingConnections|maxPendingConnectionsPerIp|maxConnections`、`staleCallReaperSeconds`),因此网关 AJV 验证接受已经支持的运行时配置而不是因 `additionalProperties` 错误失败。(#38892) 感谢 @giumex。 - **Agents/OpenAI WS reconnect retry accounting(代理/OpenAI WS 重新连接重试核算)**:避免在重新连接失败同时发出 `error` 和 `close` 时双重重试调度,因此重试预算跟踪实际重新连接尝试而不是早期耗尽。(#39133) 感谢 @scoootscooob。 - **Daemon/Windows schtasks runtime detection(守护进程/Windows 计划任务运行时检测)**:使用语言无关的 `Last Run Result` 运行代码(`0x41301`/`267009`)作为主要运行信号,因此 `openclaw node status` 不再在非英语 Windows 语言环境上误报活动任务为已停止。(#39076) 感谢 @ademczuk。 - **Usage/token count formatting(使用/令牌计数格式化)**:将近百万令牌计数舍入到百万(`1.0m`)而不是 `1000k`,具有 `999_499` 和 `999_500` 的显式边界覆盖。(#39129) 感谢 @CurryMessi。 - **Gateway/session bootstrap cache invalidation ordering(网关/会话引导缓存失效排序)**:仅在活动嵌入式运行关闭等待完成后清除引导快照,防止垂死运行在 `/new`/`sessions.reset` 回合之间重新填充陈旧缓存。(#38873) 感谢 @MumuTW。 - **Browser/dispatcher error clarity(浏览器/调度器错误清晰度)**:在浏览器获取错误中保留调度器端失败上下文,同时仍然附加操作员指导和显式无重试模型提示,防止误导性 `"Can't reach service"` 包装并避免 LLM 重试循环。(#39090) 感谢 @NewdlDewdl。 - **Telegram/polling offset safety(Telegram/轮询偏移安全)**:在轮询启动前确认持久化偏移,同时将存储的 `lastUpdateId` 值验证为非负安全整数(具有溢出保护),因此格式错误的偏移状态不能导致更新跳过/丢弃。(#39111) 感谢 @MumuTW。 - **Telegram/status SecretRef read-only resolution(Telegram/状态 SecretRef 只读解析)**:在仅配置/状态检查中解析环境支持的机器人令牌 SecretRefs,同时尊重提供商源/默认和环境允许列表,因此状态不再崩溃或报告错误的就绪令牌用于不允许的提供商。(#39130) 感谢 @neocody。 - **Agents/OpenAI WS max-token zero forwarding(代理/OpenAI WS 最大令牌零转发)**:在 websocket `response.create` 有效负载中将 `maxTokens: 0` 视为显式值(而不是作为虚假值丢弃),具有零令牌转发的回归覆盖。(#39148) 感谢 @scoootscooob。 - **Podman/.env gateway bind precedence(Podman/.env 网关绑定优先级)**:在 `run-openclaw-podman.sh` 中 sourcing `.env` 后评估 `OPENCLAW_GATEWAY_BIND`,因此环境文件覆盖被 honoring。(#38785) 感谢 @majinyu666。 - **Models/default alias refresh(模型/默认别名刷新)**:将 `gpt` 提升到 `openai/gpt-5.4` 和 Gemini 默认到 `gemini-3.1` 预览别名(包括规范化/默认连接)以跟踪当前模型 ID。(#38638) 感谢 @ademczuk。 - **Config/env substitution degraded mode(配置/环境替换降级模式)**:在配置读取中将缺失的 `${VAR}` 解析从硬失败转换为警告支持的降级行为,同时防止未解析的占位符被接受为网关凭证。(#39050) 感谢 @akz142857。 - **Discord inbound listener non-blocking dispatch(Discord 入站监听器非阻塞分发)**:使 `MESSAGE_CREATE` 监听器交接异步(无每监听器队列阻塞),因此长时间运行不再停滞无关入站事件。(#39154) 感谢 @yaseenkadlemakki。 - **Daemon/Windows PATH freeze fix(守护进程/Windows PATH 冻结修复)**:停止将安装时间 `PATH` 快照持久化到计划任务脚本,因此运行时工具查找遵循当前主机 PATH 更新;还刷新本地 TUI 历史记录在静默本地最终上。(#39139) 感谢 @Narcooo。 - **Gateway/systemd service restart hardening(网关/systemd 服务重启强化)**:通过运行端口在服务绑定前清除过时的网关监听器,添加重启过时 pid 端口覆盖支持,调整 systemd 启动/停止/退出处理,并且仅在服务管理的运行时禁用分离子模式,因此 cgroup 停止语义可靠清理后代。(#38463) 感谢 @spirittechie。 - **Discord/plugin native command aliases(Discord/插件原生命令别名)**:让插件声明提供商特定的斜杠名称,因此原生 Discord 注册可以避免内置命令冲突;捆绑 Talk 语音插件现在在 Discord 上原生使用 `/talkvoice`,同时保持文本 `/voice`。 - **Daemon/Windows schtasks status normalization(守护进程/Windows 计划任务状态规范化)**:仅从语言无关的数字 `Last Run Result` 代码派生运行时状态(没有语言字符串匹配),并在数字结果数据不可用时表面未知,防止特定语言错误分类漂移。(#39153) 感谢 @scoootscooob。 - **Telegram/polling conflict recovery(Telegram/轮询冲突恢复)**:在 `getUpdates` 409 冲突上重置轮询 `webhookCleared` 锁存器,因此 webhook 清理在重启周期上重新运行,轮询避免无限冲突循环。(#39205) 感谢 @amittell。 - **Heartbeat/requests-in-flight scheduling(心跳/飞行中请求调度)**:停止推进 `nextDueMs` 并在飞行中请求跳过时避免立即 `scheduleNext()` 计时器覆盖,因此唤醒层重试冷却被 honoring 且心跳节奏不再在持续争用下漂移。(#39182) 感谢 @MumuTW。 - **Memory/SQLite contention resilience(内存/SQLite 争用弹性)**:在每个同步存储和 QMD 连接打开上重新应用 `PRAGMA busy_timeout`,因此进程重启/重新打开不再在锁争用下恢复立即 `SQLITE_BUSY` 失败。(#39183) 感谢 @MumuTW。 - **Gateway/webchat route safety(网关/webchat 路由安全)**:阻止 webchat/控制界面客户端在频道范围会话上继承存储的外部交付路由(同时为 UI/TUI 客户端保留路由继承),防止来自范围聊天的跨频道泄漏。(#39175) 感谢 @widingmarcus-cyber。 - **Telegram error-surface resilience(Telegram 错误表面弹性)**:当分发/防抖处理失败时返回用户可见的回退回复,而不是静默,同时保留草稿流清理和最佳努力线程范围回退交付。(#39209) 感谢 @riftzen-bit。 - **Gateway/password auth startup diagnostics(网关/密码认证启动诊断)**:检测 `gateway.auth.password` 中的未解析提供商引用对象,并用特定的引导秘密错误消息失败,而不是通用配置错误输出。(#39230) 感谢 @ademczuk。 - **Agents/OpenAI-responses compatibility(代理/OpenAI-responses 兼容性)**:当 `supportsStore=false` 时剥离不支持的 `store` 有效负载字段(包括 OpenAI 兼容非 OpenAI 提供商),同时保留服务器压缩有效负载行为。(#39219) 感谢 @ademczuk。 - **Agents/model fallback visibility(代理/模型回退可见性)**:当配置的模型 ID 无法解析且应用回退时警告,具有日志安全模型文本消毒以防止警告输出中的控制序列注入。(#39215) 感谢 @ademczuk。 - **Outbound delivery replay safety(出站交付重放安全)**:使用两阶段交付 ACK 标记(`.json` -> `.delivered` -> 取消链接)和启动标记清理,因此发送和清理之间的崩溃窗口不重放已交付的消息。(#38668) 感谢 @Gundam98。 - **Nodes/system.run approval binding(节点/system.run 批准绑定)**:将准备的批准计划通过网关转发携带,并将解释器风格脚本操作数跨批准绑定到执行,因此后批准脚本重写被拒绝,同时未更改的批准脚本运行保持工作。感谢 @tdjackey 报告。 - **Nodes/system.run PowerShell wrapper parsing(节点/system.run PowerShell 包装器解析)**:将 `pwsh`/`powershell` `-EncodedCommand` 形式视为 shell 包装器有效负载,因此允许列表模式仍需要批准而不是回退到普通 argv 分析。感谢 @tdjackey 报告。 - **Control UI/auth error reporting(控制界面/认证错误报告)**:将通用浏览器 `Fetch failed` websocket 关闭错误映射回可操作的网关认证消息(`gateway token mismatch`、`authentication failed`、`retry later`),因此仪表板断开连接停止隐藏凭证问题。来自贡献者 PR #28608 by @KimGLee。感谢 @KimGLee。 - **Media/mime unknown-kind handling(媒体/mime 未知种类处理)**:对于缺失/无法识别的 MIME 种类返回 `undefined`(不是 `"unknown"`),并对未知远程媒体使用文档大小回退上限,防止幻影 `<media:unknown>` Signal 事件被视为真实消息。(#39199) 感谢 @nicolasgrasset。 - **Nodes/system.run allow-always persistence(节点/system.run 允许始终持久性)**:在允许列表分析期间 honoring shell 注释语义,因此从不执行的 `#` 尾部有效负载不持久化为受信任的后续命令。感谢 @tdjackey 报告。 - **Signal/inbound attachment fan-in(Signal/入站附件扇入)**:通过 `MediaPaths`/`MediaUrls`/`MediaTypes` 转发所有成功获取的入站附件(而不是仅第一个),并改进提及门控挂起历史中的多附件占位符摘要。(#39212) 感谢 @joeykrug。 - **Nodes/system.run dispatch-wrapper boundary(节点/system.run 分发包装器边界)**:在深度边界保持 shell 包装器批准分类活动,因此 `env` 包装器堆栈无法在没有预期批准门的情况下到达 `/bin/sh -c` 执行。感谢 @tdjackey 报告。 - **Docker/token persistence on reconfigure(Docker/重新配置时的令牌持久性)**:在 `docker-setup.sh` 重新运行时重用现有的 `.env` 网关令牌并对齐 compose 令牌环境默认值,因此 Docker 安装停止静默轮换令牌并破坏现有仪表板会话。来自贡献者 PR #33097 by @chengzhichao-xydt。感谢 @chengzhichao-xydt。 - **Agents/strict OpenAI turn ordering(代理/严格 OpenAI 回合排序)**:将助手优先记录引导消毒应用于严格 OpenAI 兼容提供商(例如通过 `openai-completions` 的 vLLM/Gemma),而不添加 Google 特定会话标记,防止助手优先历史拒绝。(#39252) 感谢 @scoootscooob。 - **Discord/exec approvals gateway auth(Discord/exec 批准网关认证)**:将解析的共享网关凭证传递到 Discord exec-approvals 网关客户端,因此令牌认证安装停止因 `gateway token mismatch` 而失败批准。与 #38179 相关。感谢 @0riginal-claw 用于相邻 PR #35147 调查。 - **Subagents/workspace inheritance(子代理/工作空间继承)**:将父工作空间目录传播到生成的子代理运行,因此子会话可靠继承工作空间范围指令(`AGENTS.md`、`SOUL.md` 等),而不通过工具调用参数暴露工作空间覆盖。(#39247) 感谢 @jasonQin6。 - **Exec approvals/gateway-node policy(Exec 批准/网关节点策略)**:即使运行时默认更严格,也 honoring `exec-approvals.json` 中的显式 `ask=off`,因此受信任的完整/关闭设置停止在网关和节点 exec 路径上重新提示。来自贡献者 PR #26789 by @pandego。感谢 @pandego。 - **Exec approvals/config fallback(Exec 批准/配置回退)**:当 `tools.exec.ask` 未设置时从 `exec-approvals.json` 继承 `ask`,因此本地完整/关闭默认不再回退到 `on-miss` 用于 exec 工具和 `nodes run`。来自贡献者 PR #29187 by @Bartok9。感谢 @Bartok9。 - **Exec approvals/allow-always shell scripts(Exec 批准/允许始终 shell 脚本)**:为包装器调用如 `bash scripts/foo.sh` 持久化和匹配脚本路径,同时仍然阻止 `-c`/`-s` 包装器绕过。来自贡献者 PR #35137 by @yuweuii。感谢 @yuweuii。 - **Queue/followup dedupe across drain restarts(队列/跨排空重启的后续去重)**:在队列重新创建后去重排队重新交付 `message_id` 值,因此繁忙会话的后续在重放入站事件上不再重复。来自贡献者 PR #33168 by @rylena。感谢 @rylena。 - **Telegram/preview-final edit idempotence(Telegram/预览最终编辑幂等)**:将预览最终化期间的 `message is not modified` 错误视为已交付,因此部分流最终回复不因重复发送而回退。来自贡献者 PR #34983 by @HOYALIM。感谢 @HOYALIM。 - **Telegram/DM streaming transport parity(Telegram/DM 流式传输对等)**:对所有 DM 流式车道使用消息预览传输,因此最终交付可以编辑活动预览而不是发送重复最终。来自贡献者 PR #38906 by @gambletan。感谢 @gambletan。 - **Telegram/DM draft streaming restoration(Telegram/DM 草稿流式恢复)**:为 DM 答案流式恢复原生 `sendMessageDraft` 预览传输,同时保持推理在消息传输上,具有回归覆盖以保持草稿最终化不发送重复最终。(#39398) 感谢 @obviyus。 - **Telegram/send retry safety(Telegram/发送重试安全)**:仅对预连接失败重试非幂等发送路径并使自定义重试谓词严格,防止模糊重新连接重试发送重复消息。来自贡献者 PR #34238 by @hal-crackbot。感谢 @hal-crackbot。 - **ACP/run spawn delivery bootstrap(ACP/run 生成交付引导)**:停止为单次 `mode: "run"` ACP 生成重用请求者内联交付目标,因此新鲜运行模式工作程序在隔离中引导而不是继承线程绑定会话交付行为。(#39014) 感谢 @lidamao633。 - **Discord/DM session-key normalization(Discord/DM 会话键规范化)**:当发送者匹配时,将遗留 `discord:dm:*` 和幻影直接消息 `discord:channel:<user>` 会话键重写为 `discord:direct:*`,因此多代理 Discord DMs 停止落入空频道形状会话并恢复正确回复。 - **Discord/native slash session fallback(Discord/原生斜杠会话回退)**:将空配置绑定会话键视为缺失,因此 `/status` 和其他原生命令回退到路由斜杠会话和路由频道会话而不是清空 Discord 会话键在正常频道绑定中。 - **Agents/tool-call dispatch normalization(代理/工具调用分发规范化)**:在 `toolCall`、`toolUse` 和 `functionCall` 块之前规范提供商前缀工具名称,同时在剥离提供商包装器时保留多段工具后缀,因此格式错误但可恢复的工具名称不再因 `Tool not found` 而失败。(#39328) 感谢 @vincentkoc。 - **Agents/parallel tool-call compatibility(代理/并行工具调用兼容性)**:仅对 `openai-completions` 和 `openai-responses` 有效负载 honoring `parallel_tool_calls` / `parallelToolCalls` 额外参数,在配置和运行时层保留更高优先级别名覆盖,并忽略无效的非布尔值,因此单工具调用提供商如 NVIDIA 托管的 Kimi 停止因强制并行工具调用有效负载而失败。(#37048) 感谢 @vincentkoc。 - **Config/invalid-load fail-closed(配置/无效加载失败关闭)**:停止将 `INVALID_CONFIG` 转换为空运行时配置,仅通过显式最佳努力诊断读取保持有效设置可用,并路由只读 CLI 诊断通过该路径,因此未知键不再静默丢弃安全敏感配置。(#28140) 感谢 @bobsahur-robot 和 @vincentkoc。 - **Agents/codex-cli sandbox defaults(代理/codex-cli 沙盒默认值)**:将内置 Codex 后端从 `read-only` 切换到 `workspace-write`,因此生成的编码运行可以开箱即用地编辑文件。来自贡献者 PR #39336 by @0xtangping。感谢 @0xtangping。 - **Gateway/health-monitor restart reason labeling(网关/健康监控重启原因标记)**:为干净的频道断开重启报告 `disconnected` 而不是 `stuck`,因此操作员日志区分套接字掉落与真正卡住的频道。(#36436) 感谢 @Sid-Qin。 - **Control UI/agents-page overrides(控制界面/代理页面覆盖)**:编辑继承的代理时自动创建最小每代理配置条目,因此模型/工具/技能更改启用保存,继承的模型回退可以通过写入仅主覆盖清除。来自贡献者 PR #39326 by @dunamismax。感谢 @dunamismax。 - **Gateway/Telegram webhook-mode recovery(网关/Telegram webhook 模式恢复)**:在 webhook 注册期间添加 `webhookCertPath` 以重新上传自签名证书,并跳过 webhook 模式频道的陈旧套接字检测,因此 Telegram webhook 设置存活健康监控重启。来自贡献者 PR #39313 by @fellanH。感谢 @fellanH。 - **Discord/config schema parity(Discord/配置架构对等)**:向严格 Zod 配置架构添加 `channels.discord.agentComponents`,因此有效的 `agentComponents.enabled` 设置(根和账户范围)不再因无法识别键验证错误而失败。来自贡献者 PR #39378 by @gambletan。感谢 @gambletan 和 @thewilloftheshadow。 - **ACPX/MCP session bootstrap(ACPX/MCP 会话引导)**:将配置的 MCP 服务器注入 ACP `session/new` 和 `session/load` 用于 acpx 支持的会话,恢复 Canva 和其他外部 MCP 工具。来自贡献者 PR #39337。感谢 @goodspeed-apps。 - **Control UI/Telegram sender labels(控制界面/Telegram 发送者标签)**:在消毒的聊天历史中保留入站发送者标签,因此仪表板用户消息组正确分割并显示真实群组成员名称而不是 `You`。(#39414) 感谢 @obviyus。