## 2026.7.33
这是 2026 年 7 月的扩展稳定版,涵盖 Gateway、官方 npm 插件以及对应的 Docker 镜像。
### 亮点
- **安全与凭据保护:**强化 Gateway 和官方插件中的命令解析、浏览器来源检查、插件 Git 安装、诊断信息、服务凭据和 Webhook 日志记录。
- **消息与会话完整性:**在重试、钩子、恢复以及频道生命周期转换期间,保留排队、导入、流式传输和工具结果消息。
- **Gateway 可靠性:**关闭失败的 HTTP 和 Responses 流,限制高开销读取和历史查询,并在报告完成前处理完关闭任务。感谢 @RomneyDa。
- **频道投递:**修复 Discord、Matrix、Telegram、Slack、WhatsApp、LINE、飞书、Zalo 和会议插件中可能导致消息丢失、损坏或阻塞的边缘情况。
- **提供商与媒体健壮性:**限制提供商请求和诊断,拒绝格式错误的负载,并保留有效的工具 schema 和响应生命周期。感谢 @RomneyDa。
### 变更
- **扩展稳定版发布工具:**沿用当前 Docker 频道分类器、发布器、验证策略和测试,以便 `v2026.7.33` 仅移动 `extended-stable*` 别名。感谢 @RomneyDa。
### 修复
- **安全边界:**拒绝包含转义换行符的命令词、精确来源不匹配、注入的 Git 选项参数、继承的密钥响应标识符、不安全的浏览器变更,以及格式错误或过大的节点负载。
- **投递与记录恢复:**确保重试延迟准确,保留导入的消息和被插件阻止的工具结果,保留已分离的准入请求,并避免静默丢弃频道操作或恢复任务。感谢 @RomneyDa。
- **资源与生命周期安全:**限制目录、历史、媒体、stderr、API 和提供商等待时间;停止已取消的并行工具;排空频道关闭操作;并在关闭后拒绝排队的工作线程请求。感谢 @RomneyDa。
- **文本与 schema 正确性:**在所有面向用户的截断路径中保留 UTF-16 边界,保留根工具 schema 属性,拒绝非有限 schema 值,并报告精确的 UTF-8 写入大小。
- **官方插件:**修复 npm 发布插件清单中的消息解析、代理路径、请求超时、媒体处理、隐私安全日志记录和运行时别名问题。
### 完整贡献记录
此经审计记录涵盖完整的 `v2026.7.1-2..42625327f91254cfe66cbeb6d7a1812780b1a694` 历史:共合并 126 个 PR。生成清单还提供直接提交作为编辑输入;上述分组说明优先突出用户影响。
#### 拉取请求
- **PR #102438** 修复:认证簿记不再回退已轮换的 OpenAI OAuth 凭据。相关 #102430。感谢 @obviyus。
- **PR #102125** 修复(gateway):在响应头发送后发生失败时完成插件 HTTP 响应。感谢 @mushuiyu886。
- **PR #102451** 修复(memory-host):在关闭时拒绝排队的工作线程请求。感谢 @QiuYuang。
- **PR #102276** 修复(agent-core):阻止已取消的并行工具启动。相关 #102252。感谢 @harjothkhara 和 @yetval。
- **PR #101739** 修复(secrets):拒绝继承的 exec 响应 ID。感谢 @Alix-007。
- **PR #102089** 修复(twilio):对 Webhook turnToken 诊断信息进行脱敏。感谢 @Alix-007。
- **PR #102403** 修复(backup):以仅所有者可访问的 `0o600` 权限写入备份归档。感谢 @yetval。
- **PR #102398** 修复(plugins):终止 git clone 参数,防止 `git:` 规范注入选项。感谢 @yetval。
- **PR #38290** Gateway:允许浏览器允许列表中的扩展来源。相关 #46520。感谢 @brunowowk 和 @mosidevv。
- **PR #102013** 修复(gateway):限制 `sessions.usage` 的全代理会话发现并发度。感谢 @masatohoshino。
- **PR #102825** 修复(gateway):线性解析图像数据 URL。相关 #102393。感谢 @wangyan2026 和 @yetval。
- **PR #102426** 修复:使用 schema 提示对诊断配置字段进行脱敏 [AI]。感谢 @pgondhi987。
- **PR #101000** 修复(plugins):限制非流式响应中托管目录源的读取量。感谢 @hugenshen 和 @cursoragent。
- **PR #104625** 修复(gateway):降低启动关闭传输竞态的严重性。
- **PR #104540** 修复(sessions):防止持久化工具详情中的 Unicode 损坏。感谢 @zhangguiping-xydt。
- **PR #104734** 修复(models):从 `models status --json` 中脱敏合成认证凭据。相关 #104713。感谢 @ObliviateRickLin 和 @davefano。
- **PR #104811** 修复(gateway):在关闭和重新加载期间保持频道停止。感谢 @ShiroKSH。
- **PR #102881** 修复(gateway):在 HTTP 接受 `auth.mode=none` 前拒绝不允许的浏览器 Origin(#102834)。感谢 @wangyan2026 和 @yetval。
- **PR #101469** 修复(hooks):在钩子安装验证期间限制 `HOOK.md` 的读取量。感谢 @cxbAsDev。
- **PR #103562** 修复(discord):重试回复会话初始化冲突,以防止静默消息丢失。相关 #102381。感谢 @cxbAsDev 和 @zuofengboss。
- **PR #113700** 修复:在正确的重试延迟后恢复出站消息。
- **PR #113703** 修复:保留不同的已导入 CLI 会话消息。
- **PR #113697** 修复:当插件阻止结果时,修复工具调用记录。
- **PR #114134** 修复:要求对包含转义换行符的 shell 词进行批准 [AI]。感谢 @pgondhi987。
- **PR #102331** 修复(google-meet):将 Meet 会话保留在加入会话的代理上。感谢 @steipete-oai。
- **PR #101630** 修复(mattermost):在代码点边界截断入站预览。感谢 @hugenshen 和 @cursoragent。
- **PR #101736** 修复(agents):确保引导元数据截断符合 UTF-16 安全要求。感谢 @chengzhichao-xydt 和 @Alix-007。
- **PR #101617** 修复(discord):防止重启后遗留过期的 Gateway 错误监听器。感谢 @zhangguiping-xydt。
- **PR #102246** 修复(discord):确保 Gateway 关闭原因符合 UTF-16 安全要求。感谢 @mushuiyu886。
- **PR #102332** 修复(agents):确保截断操作对代理项安全。感谢 @QiuYuang。
- **PR #101815** 修复(discord):将编码的视频 URL 与字幕分离。感谢 @VectorPeak。
- **PR #102090** 修复(gateway):确保会话标题和预览文本截断符合 UTF-16 安全要求。感谢 @wm0018。
- **PR #101976** 修复(acp):确保后台任务摘要在截断边界处符合 UTF-16 安全要求。感谢 @MoerAI。
- **PR #102378** 修复(acp):确保会话更新文本截断对代理项安全。感谢 @zw-xysk。
- **PR #102085** 修复(agents):确保 `chunkString` 和 `buildResumeMessage` 截断符合 UTF-16 安全要求。感谢 @wm0018。
- **PR #102105** 修复(google-meet):处理节点主机中的 stdout/stderr 流错误。感谢 @wangmiao0668000666。
- **PR #102157** 修复(google-meet):限制 Calendar v3 `events.list` 请求截止时间。感谢 @wangmiao0668000666。
- **PR #102395** 修复(matrix):确保 HTTP 错误和工具进度截断符合 UTF-16 安全要求。感谢 @wangmiao0668000666。
- **PR #102266** 修复(security):确保频道元数据和安装策略截断对代理项安全。感谢 @zw-xysk。
- **PR #101781** 修复(telegram):确保私信话题自动重命名的用户消息符合 UTF-16 安全要求。感谢 @hugenshen 和 @cursoragent。
- **PR #101934** 修复:确保重启/诊断输出中的任务标题截断符合 UTF-16 安全要求。感谢 @wm0018。
- **PR #102407** 修复(channels):确保入站日志预览符合 UTF-16 安全要求。感谢 @miorbnli。
- **PR #102466** 修复(agents):确保工具结果上下文保护的截断符合 UTF-16 安全要求。感谢 @chengzhichao-xydt。
- **PR #102464** 修复(tool-policy-audit):使用 `truncateUtf16Safe` 截断审计字段。感谢 @lsr911。
- **PR #102467** 修复(native-hook-relay):使用 `truncateUtf16Safe` 截断钩子显示文本。感谢 @lsr911。
- **PR #102470** 修复(gateway):确保聊天历史显示文本截断对代理项安全。感谢 @zw-xysk。
- **PR #102483** 修复(auto-reply,infra):确保启动上下文和心跳事件文本符合 UTF-16 安全要求。感谢 @wings1029。
- **PR #102478** 修复(memory):片段截断时会拆分 emoji。感谢 @qingminglong。
- **PR #101649** 修复(zalouser):认证完成后清除探测超时。感谢 @Alix-007。
- **PR #101506** 修复(browser):限制 Chrome 启动 stderr 诊断信息。感谢 @mikasa0818。
- **PR #102484** 修复(gateway):确保实时聊天助手缓冲区尾部截断符合 UTF-16 安全要求。感谢 @wings1029。
- **PR #102477** 修复(talk):对面向 LLM 提示的文本截断使用 `truncateUtf16Safe`。感谢 @xydt-tanshanshan。
- **PR #102496** 修复(agents):确保提供商错误详情截断符合 UTF-16 安全要求。感谢 @chengzhichao-xydt。
- **PR #102500** 修复(mcp-runtime):对 MCP 元数据文本截断使用 `truncateUtf16Safe`。感谢 @lsr911。
- **PR #102515** 修复(compaction):对压缩后上下文文本使用 `truncateUtf16Safe`。感谢 @lsr911。
- **PR #102525** 修复(discord):对部署错误正文截断使用 `truncateUtf16Safe`。感谢 @lsr911。
- **PR #102527** 修复(oc-path):对错误消息路径截断使用 `truncateUtf16Safe`。感谢 @lsr911。
- **PR #102536** 修复(nodes):恢复 Mac 应用允许列表执行。相关 #102528。
- **PR #102149** 修复(google-meet):限制 Meet v2 和 Drive `files.export` 请求截止时间。感谢 @wangmiao0668000666。
- **PR #102524** 修复(memory-core):对日记上下文截断使用 `truncateUtf16Safe`。感谢 @lsr911。
- **PR #102389** 修复(web-fetch):将恰好达到限制的响应正文报告为完整而非截断 [AI 辅助]。相关 #101837。感谢 @Supsumintong 和 @qingminglong。
- **PR #101832** 修复:在钳制后保持 Gemini 思考功能禁用。相关 #101785。感谢 @MonkeyLeeT 和 @aniruddhaadak80。
- **PR #104049** 修复:安装程序在命令失败后删除临时文件。
- **PR #97828** 修复(telegram):在 `forceNewMessage` 轮换前清除推理预览(#80862)。感谢 @ly-wang19 和 @kyle20026。
- **PR #102859** 修复(nextcloud-talk):为聊天室信息查询添加超时。感谢 @Alix-007 和 @Leon-SK668。
- **PR #102862** 修复(minimax):为 OAuth HTTP 请求添加超时。感谢 @Alix-007 和 @Leon-SK668。
- **PR #103547** 修复(voice-call):通过子系统日志记录器对事件日志中的电话号码进行脱敏。感谢 @xialonglee。
- **PR #103555** 修复(voice-call):将 Webhook 日志统一到注入的插件日志记录器,并断言记录文本的隐私边界。感谢 @xialonglee。
- **PR #104229** 修复:实时更新器构建完整的运行时资源。
- **PR #104306** 修复:按需启动本地嵌入服务。相关 #104214。感谢 @vincentkoc。
- **PR #102965** 修复(inworld):为语音列表请求添加超时。感谢 @chengzhichao-xydt。
- **PR #103752** 修复(google-meet):验证 Chrome 节点策略参数。感谢 @Leon-SK668。
- **PR #103728** 修复(memory):跳过空白搜索提供商引导。感谢 @Leon-SK668 和 @vincentkoc。
- **PR #104426** 修复(commitments):按代理隔离提取批次。相关 #104425。
- **PR #103731** 修复(plugins):遵守空文档提取器作用域。感谢 @Leon-SK668 和 @vincentkoc。
- **PR #104263** 修复(gateway):当数值限制过大时限制历史记录。感谢 @qingminglong。
- **PR #104156** 修复(agents):按字节限制截断多字节中间件详情。感谢 @qingminglong。
- **PR #104173** 修复(onboard):在安装服务前等待 Gateway 警告。感谢 @qingminglong。
- **PR #104110** 修复(agents):当代理停止时取消待处理的 bundle LSP 请求。感谢 @zhangguiping-xydt 和 @vincentkoc。
- **PR #104404** 修复(agents):在上下文修剪中保留 UTF-16 边界。感谢 @mushuiyu886 和 @vincentkoc。
- **PR #104440** 修复(browser):在 act 路由中拒绝十六进制点击坐标。感谢 @qingminglong。
- **PR #104260** 修复(voice-call):对受限子进程输出尾部上限使用 `sliceUtf16Safe`。感谢 @hugenshen。
- **PR #104151** 修复(file-transfer):确保受限 stderr 尾部符合 UTF-16 安全要求。感谢 @hugenshen。
- **PR #104148** 修复(agents):确保 scp stderr 尾部符合 UTF-16 安全要求。感谢 @hugenshen。
- **PR #104414** 修复(nodes):当 base64 无效时拒绝格式错误的媒体负载。感谢 @qingminglong。
- **PR #104556** 修复(file-transfer):在节点分发前拒绝过大的内联文件写入。感谢 @qingminglong。
- **PR #102974** 修复(google):流式处理 Gemini 批量 JSONL 输出,而非使用 `res.text()`。感谢 @hugenshen。
- **PR #104610** 修复(gateway):降低预期启动套接字中止的严重性。
- **PR #104301** 修复(utils):对超长 URL 超时日志使用 UTF-16 安全截断。感谢 @whiteyzy。
- **PR #103445** 修复(slack):在交互后保留无关操作行。感谢 @zw-xysk 和 @cursoragent。
- **PR #104677** 修复(browser):在 JSON 解析前运行变更保护。感谢 @Leon-SK668。
- **PR #104423** 修复(agents):在引导上下文中保留 UTF-16 边界。感谢 @mushuiyu886。
- **PR #104560** 修复(write):在成功消息中报告实际 UTF-8 字节数。感谢 @wings1029。
- **PR #104454** 修复(attempt-execution):对摘要文本截断使用 `truncateUtf16Safe`。感谢 @chenyangjun-xy。
- **PR #104715** 修复(browser):将配置文件代理策略应用于标签页列表脱敏。感谢 @Leon-SK668。
- **PR #104470** 修复(ai):拒绝非有限工具 schema 数字。相关 #104469。感谢 @VectorPeak。
- **PR #104498** 修复(feishu):避免记录原始的重复卡片操作令牌。感谢 @VectorPeak。
- **PR #113259** 修复(gateway):拒绝不完整的用量日期范围。感谢 @lzw112。
- **PR #112855** 修复:doctor 保留由精确 Gateway 进程标题拥有的锁。相关 #112854。感谢 @fr-meyer。
- **PR #113609** 修复(gateway):对已禁用的 OpenAI API 路由返回 404。
- **PR #113683** 修复:通过托管代理路由技能验证。
- **PR #113685** 修复:保留子进程信号退出代码。
- **PR #113106** 修复(xiaomi):拒绝 TTS 响应中格式错误的 base64 音频。感谢 @zenglingbiao。
- **PR #113109** 修复(volcengine):拒绝 TTS 响应中格式错误的 base64 音频。感谢 @zenglingbiao。
- **PR #113790** 修复:识别安装在登录配置文件中的 Bash 补全。
- **PR #113897** 修复(models):保持空模型列表可供机器读取。
- **PR #114051** 修复(agents):防止并发负载下的会话阻塞。
- **PR #114061** 修复(gateway):防止嵌套仪表板路由缺少资源。
- **PR #114280** 修复(gateway):防止失败的账户停止操作使同级账户陷入搁置状态。感谢 @yangxiansheng。
- **PR #114325** 修复:准确报告不可用的系统 Node 版本。感谢 @RomneyDa。
- **PR #93516** 修复(matrix):为 Matrix homeserver URL 提供反向代理路径支持。相关 #102885。感谢 @Papilionidae。
- **PR #114450** 修复(zalo):当可选媒体为空时投递文本。相关 #105078。感谢 @VectorPeak。
- **PR #114512** 修复(cron):在执行通道繁忙时避免错误的代理超时。感谢 @hugin-bot。
- **PR #112352** 修复(model):在报告模型变更后,再报告其触发的思考映射。感谢 @kesava500。
- **PR #114540** 修复(cron):防止本地模型预检套接字泄漏。感谢 @hugenshen。
- **PR #114500** 修复(auto-reply):规范化换行符分隔的静默令牌。相关 #103735。感谢 @Maless88。
- **PR #97024** 修复(session-delivery):传播非 ENOENT 的重试持久化失败。感谢 @0xghost42。
- **PR #114076** 修复:调试代理遵守响应背压(问题 #105701)。感谢 @qingminglong 和 @aniruddhaadak80。
- **PR #128799** 修复(ai):在扁平化根级 `anyOf` 工具 schema 时保留根属性。相关 #128743。感谢 @LiuwqGit、@Patrick-Erichsen 和 @schaba21。
- **PR #131546** 修复(copilot):管理 BYOK 响应流生命周期。相关 #131544。
- **PR #131195** 修复(line):`/card` 会在其数据内的逗号处分割操作、列表项或回执条目。相关 #129349。感谢 @edenfunf 和 @obviyus。
- **PR #131783** 修复(agents):在 `ls` 列表中保留悬挂符号链接的可见性。
- **PR #132014** 修复(line):将回传所携带的选择内容提供给代理。相关 #132000。感谢 @edenfunf 和 @obviyus。
- **PR #102636** 修复(handoff):对于没有子代理的独立代理,跳过协调器封装。相关 #102628。感谢 @Gary-Jia-new、@altaywtf 和 @Joakim-Emanuelson。
- **PR #132545** 修复(plugins):在构建后的运行时中保留已编译插件别名。
- **PR #102160** 修复(agents):运行生命周期可靠性:有界释放、基于证据的存活检测、看门狗语义。相关 #85826、#96168。感谢 @obviyus、@kiagentkronos-cell 和 @alvelda。
## 2026.7.33
This is the July 2026 Extended Stable release, covering the Gateway, official npm plugins, and matching Docker images.
### Highlights
- **Security and credential safety:** harden command parsing, browser origin checks, plugin Git installs, diagnostics, service credentials, and webhook logging across Gateway and official plugins.
- **Message and session integrity:** preserve queued, imported, streamed, and tool-result messages across retries, hooks, recovery, and channel lifecycle transitions.
- **Gateway reliability:** close failed HTTP and Responses streams, bound expensive reads and history queries, and settle shutdown work before reporting completion. Thanks @RomneyDa.
- **Channel delivery:** repair Discord, Matrix, Telegram, Slack, WhatsApp, LINE, Feishu, Zalo, and meeting-plugin edge cases that could lose, corrupt, or stall messages.
- **Provider and media robustness:** bound provider requests and diagnostics, reject malformed payloads, and preserve valid tool schemas and response lifecycles. Thanks @RomneyDa.
### Changes
- **Extended-stable release tooling:** carry the current Docker channel classifier, promoter, verification policy, and tests so `v2026.7.33` can move only the `extended-stable*` aliases. Thanks @RomneyDa.
### Fixes
- **Security boundaries:** reject escaped-newline command words, exact-origin mismatches, injected Git option arguments, inherited secret-response identifiers, unsafe browser mutations, and malformed or oversized node payloads.
- **Delivery and transcript recovery:** keep retry delays accurate, preserve imported messages and plugin-blocked tool results, retain detached admissions, and avoid silently dropping channel actions or recovery work. Thanks @RomneyDa.
- **Resource and lifecycle safety:** bound catalog, history, media, stderr, API, and provider waits; stop canceled parallel tools; drain channel shutdown; and reject queued worker requests after close. Thanks @RomneyDa.
- **Text and schema correctness:** preserve UTF-16 boundaries across user-visible truncation paths, keep root tool-schema properties, reject non-finite schema values, and report exact UTF-8 write sizes.
- **Official plugins:** repair message parsing, proxy paths, request timeouts, media handling, privacy-safe logging, and runtime aliases across the npm-published plugin inventory.
### Complete contribution record
This audited record covers the complete v2026.7.1-2..42625327f91254cfe66cbeb6d7a1812780b1a694 history: 126 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.
#### Pull requests
- **PR #102438** fix: auth bookkeeping no longer reverts rotated OpenAI OAuth credentials. Related #102430. Thanks @obviyus.
- **PR #102125** fix(gateway): finish plugin HTTP responses after post-header failures. Thanks @mushuiyu886.
- **PR #102451** fix(memory-host): reject queued worker requests on shutdown. Thanks @QiuYuang.
- **PR #102276** fix(agent-core): stop canceled parallel tools from starting. Related #102252. Thanks @harjothkhara and @yetval.
- **PR #101739** fix(secrets): reject inherited exec response ids. Thanks @Alix-007.
- **PR #102089** fix(twilio): redact webhook turnToken diagnostics. Thanks @Alix-007.
- **PR #102403** fix(backup): write backup archive with owner-only 0o600 permissions. Thanks @yetval.
- **PR #102398** fix(plugins): terminate git clone args so git: specs cannot inject options. Thanks @yetval.
- **PR #38290** Gateway: allow extension origins in browser allowlist. Related #46520. Thanks @brunowowk and @mosidevv.
- **PR #102013** fix(gateway): bound sessions.usage all-agent session discovery concurrency. Thanks @masatohoshino.
- **PR #102825** fix(gateway): parse image data URLs linearly. Related #102393. Thanks @wangyan2026 and @yetval.
- **PR #102426** fix: redact diagnostic config fields with schema hints [AI]. Thanks @pgondhi987.
- **PR #101000** fix(plugins): bound hosted catalog feed reads on non-streaming responses. Thanks @hugenshen and @cursoragent.
- **PR #104625** fix(gateway): demote startup close transport races.
- **PR #104540** fix(sessions): prevent corrupted Unicode in persisted tool details. Thanks @zhangguiping-xydt.
- **PR #104734** fix(models): redact synthetic auth credentials from models status --json. Related #104713. Thanks @ObliviateRickLin and @davefano.
- **PR #104811** fix(gateway): keep channels stopped during shutdown and reload. Thanks @ShiroKSH.
- **PR #102881** fix(gateway): reject disallowed browser Origin before accepting auth.mode=none on HTTP (#102834). Thanks @wangyan2026 and @yetval.
- **PR #101469** fix(hooks): bound HOOK.md reads during hook install validation. Thanks @cxbAsDev.
- **PR #103562** fix(discord): retry reply session init conflicts to prevent silent message loss. Related #102381. Thanks @cxbAsDev and @zuofengboss.
- **PR #113700** fix: recover outbound messages after the correct retry delay.
- **PR #113703** fix: preserve distinct imported CLI session messages.
- **PR #113697** fix: repair tool-call transcripts when plugins block results.
- **PR #114134** fix: require approval for escaped newline shell words [AI]. Thanks @pgondhi987.
- **PR #102331** fix(google-meet): keep Meet sessions on the agent that joined them. Thanks @steipete-oai.
- **PR #101630** fix(mattermost): truncate inbound preview on code-point boundary. Thanks @hugenshen and @cursoragent.
- **PR #101736** fix(agents): keep steering metadata truncation UTF-16 safe. Thanks @chengzhichao-xydt and @Alix-007.
- **PR #101617** fix(discord): prevent stale gateway error listeners after restart. Thanks @zhangguiping-xydt.
- **PR #102246** fix(discord): keep gateway close reasons UTF-16 safe. Thanks @mushuiyu886.
- **PR #102332** fix(agents): keep truncation surrogate-safe. Thanks @QiuYuang.
- **PR #101815** fix(discord): split encoded video URLs from captions. Thanks @VectorPeak.
- **PR #102090** fix(gateway): keep session title and preview text truncation UTF-16 safe. Thanks @wm0018.
- **PR #101976** fix(acp): keep background-task summaries UTF-16 safe at truncation boundaries. Thanks @MoerAI.
- **PR #102378** fix(acp): keep session update text truncation surrogate-safe. Thanks @zw-xysk.
- **PR #102085** fix(agents): keep chunkString and buildResumeMessage truncation UTF-16 safe. Thanks @wm0018.
- **PR #102105** fix(google-meet): handle stdout/stderr stream errors in node host. Thanks @wangmiao0668000666.
- **PR #102157** fix(google-meet): bound Calendar v3 events.list request deadline. Thanks @wangmiao0668000666.
- **PR #102395** fix(matrix): keep HTTP error and tool-progress truncations UTF-16 safe. Thanks @wangmiao0668000666.
- **PR #102266** fix(security): keep channel-metadata and install-policy truncation surrogate-safe. Thanks @zw-xysk.
- **PR #101781** fix(telegram): keep DM topic auto-rename user message UTF-16 safe. Thanks @hugenshen and @cursoragent.
- **PR #101934** fix: keep task title truncation UTF-16 safe in restart/diagnostic output. Thanks @wm0018.
- **PR #102407** fix(channels): keep inbound log previews UTF-16 safe. Thanks @miorbnli.
- **PR #102466** fix(agents): keep tool-result context guard truncation UTF-16 safe. Thanks @chengzhichao-xydt.
- **PR #102464** fix(tool-policy-audit): use truncateUtf16Safe for audit field truncation. Thanks @lsr911.
- **PR #102467** fix(native-hook-relay): use truncateUtf16Safe for hook display text truncation. Thanks @lsr911.
- **PR #102470** fix(gateway): keep chat history display text truncation surrogate-safe. Thanks @zw-xysk.
- **PR #102483** fix(auto-reply,infra): keep startup context and heartbeat event text UTF-16 safe. Thanks @wings1029.
- **PR #102478** fix(memory): snippets split emoji when truncated. Thanks @qingminglong.
- **PR #101649** fix(zalouser): clear probe timeout after auth resolves. Thanks @Alix-007.
- **PR #101506** fix(browser): bound Chrome launch stderr diagnostics. Thanks @mikasa0818.
- **PR #102484** fix(gateway): keep live chat assistant buffer tail truncation UTF-16 safe. Thanks @wings1029.
- **PR #102477** fix(talk): use truncateUtf16Safe for LLM-prompt-facing text truncation. Thanks @xydt-tanshanshan.
- **PR #102496** fix(agents): keep provider error detail truncation UTF-16 safe. Thanks @chengzhichao-xydt.
- **PR #102500** fix(mcp-runtime): use truncateUtf16Safe for MCP metadata text truncation. Thanks @lsr911.
- **PR #102515** fix(compaction): use truncateUtf16Safe for post-compaction context text. Thanks @lsr911.
- **PR #102525** fix(discord): use truncateUtf16Safe for deploy error body truncation. Thanks @lsr911.
- **PR #102527** fix(oc-path): use truncateUtf16Safe for error message path truncation. Thanks @lsr911.
- **PR #102536** fix(nodes): restore Mac app allowlist execution. Related #102528.
- **PR #102149** fix(google-meet): bound Meet v2 + Drive files.export request deadlines. Thanks @wangmiao0668000666.
- **PR #102524** fix(memory-core): use truncateUtf16Safe for diary context truncation. Thanks @lsr911.
- **PR #102389** fix(web-fetch): report exact-limit response bodies as complete, not truncated [AI-assisted]. Related #101837. Thanks @Supsumintong and @qingminglong.
- **PR #101832** fix: keep Gemini thinking disabled after clamp. Related #101785. Thanks @MonkeyLeeT and @aniruddhaadak80.
- **PR #104049** fix: installer removes temporary files after failed commands.
- **PR #97828** fix(telegram): clear reasoning preview before forceNewMessage rotation (#80862). Thanks @ly-wang19 and @kyle20026.
- **PR #102859** fix(nextcloud-talk): add timeout to room info lookup. Thanks @Alix-007 and @Leon-SK668.
- **PR #102862** fix(minimax): add timeouts to OAuth HTTP requests. Thanks @Alix-007 and @Leon-SK668.
- **PR #103547** fix(voice-call): redact phone numbers in event logs via subsystem logger. Thanks @xialonglee.
- **PR #103555** fix(voice-call): consolidate webhook logs on the injected plugin logger and assert transcript privacy boundary. Thanks @xialonglee.
- **PR #104229** fix: live updater builds complete runtime assets.
- **PR #104306** fix: start local embedding services on demand. Related #104214. Thanks @vincentkoc.
- **PR #102965** fix(inworld): add timeout to voices list request. Thanks @chengzhichao-xydt.
- **PR #103752** fix(google-meet): validate chrome node policy params. Thanks @Leon-SK668.
- **PR #103728** fix(memory): skip blank search provider bootstrap. Thanks @Leon-SK668 and @vincentkoc.
- **PR #104426** fix(commitments): isolate extraction batches by agent. Related #104425.
- **PR #103731** fix(plugins): honor empty document extractor scope. Thanks @Leon-SK668 and @vincentkoc.
- **PR #104263** fix(gateway): cap history when numeric limit is huge. Thanks @qingminglong.
- **PR #104156** fix(agents): truncate multibyte middleware details at byte limit. Thanks @qingminglong.
- **PR #104173** fix(onboard): wait for gateway warnings before installing service. Thanks @qingminglong.
- **PR #104110** fix(agents): cancel pending bundle LSP requests when the agent stops. Thanks @zhangguiping-xydt and @vincentkoc.
- **PR #104404** fix(agents): preserve UTF-16 boundaries in context pruning. Thanks @mushuiyu886 and @vincentkoc.
- **PR #104440** fix(browser): reject hex click coordinates in act route. Thanks @qingminglong.
- **PR #104260** fix(voice-call): use sliceUtf16Safe for bounded child output tail cap. Thanks @hugenshen.
- **PR #104151** fix(file-transfer): keep bounded stderr tail UTF-16 safe. Thanks @hugenshen.
- **PR #104148** fix(agents): keep scp stderr tail UTF-16 safe. Thanks @hugenshen.
- **PR #104414** fix(nodes): reject malformed media payloads when base64 is invalid. Thanks @qingminglong.
- **PR #104556** fix(file-transfer): reject oversized inline file writes before node dispatch. Thanks @qingminglong.
- **PR #102974** fix(google): stream Gemini batch JSONL output instead of res.text(). Thanks @hugenshen.
- **PR #104610** fix(gateway): demote expected startup socket aborts.
- **PR #104301** fix(utils): use UTF-16 safe truncation for long URL timeout logs. Thanks @whiteyzy.
- **PR #103445** fix(slack): preserve unrelated action rows after interactions. Thanks @zw-xysk and @cursoragent.
- **PR #104677** fix(browser): run mutation guard before JSON parsing. Thanks @Leon-SK668.
- **PR #104423** fix(agents): preserve UTF-16 boundaries in bootstrap context. Thanks @mushuiyu886.
- **PR #104560** fix(write): report actual UTF-8 byte count in success message. Thanks @wings1029.
- **PR #104454** fix(attempt-execution): use truncateUtf16Safe for summary text truncation. Thanks @chenyangjun-xy.
- **PR #104715** fix(browser): apply profile proxy policy to tab list redaction. Thanks @Leon-SK668.
- **PR #104470** fix(ai): reject non-finite tool schema numbers. Related #104469. Thanks @VectorPeak.
- **PR #104498** fix(feishu): avoid logging raw duplicate card-action tokens. Thanks @VectorPeak.
- **PR #113259** fix(gateway): reject incomplete usage date ranges. Thanks @lzw112.
- **PR #112855** fix: doctor preserves locks owned by exact gateway process title. Related #112854. Thanks @fr-meyer.
- **PR #113609** fix(gateway): return 404 for disabled OpenAI API routes.
- **PR #113683** fix: route skill verification through the managed proxy.
- **PR #113685** fix: preserve child process signal exit codes.
- **PR #113106** fix(xiaomi): reject malformed base64 audio in TTS responses. Thanks @zenglingbiao.
- **PR #113109** fix(volcengine): reject malformed base64 audio in TTS responses. Thanks @zenglingbiao.
- **PR #113790** fix: recognize Bash completion installed in login profiles.
- **PR #113897** fix(models): keep empty model lists machine-readable.
- **PR #114051** fix(agents): prevent session stalls under concurrent load.
- **PR #114061** fix(gateway): prevent missing assets on nested dashboard routes.
- **PR #114280** fix(gateway): keep failed account stops from stranding siblings. Thanks @yangxiansheng.
- **PR #114325** fix: report unavailable system Node versions accurately. Thanks @RomneyDa.
- **PR #93516** fix(matrix): reverse-proxy path support for Matrix homeserver URLs. Related #102885. Thanks @Papilionidae.
- **PR #114450** fix(zalo): deliver text when optional media is blank. Related #105078. Thanks @VectorPeak.
- **PR #114512** fix(cron): avoid false agent timeouts while execution lanes are busy. Thanks @hugin-bot.
- **PR #112352** fix(model): report the model change before the thinking remap it triggers. Thanks @kesava500.
- **PR #114540** fix(cron): prevent local model preflight socket leaks. Thanks @hugenshen.
- **PR #114500** fix(auto-reply): normalize newline-delimited silent tokens. Related #103735. Thanks @Maless88.
- **PR #97024** fix(session-delivery): propagate non-ENOENT retry persistence failures. Thanks @0xghost42.
- **PR #114076** fix: debug proxy respects response backpressure (issue #105701). Thanks @qingminglong and @aniruddhaadak80.
- **PR #128799** fix(ai): preserve root properties when flattening root-level anyOf tool schemas. Related #128743. Thanks @LiuwqGit and @Patrick-Erichsen and @schaba21.
- **PR #131546** fix(copilot): own BYOK response stream lifecycles. Related #131544.
- **PR #131195** fix(line): /card splits an action, list item, or receipt entry at a comma inside its data. Related #129349. Thanks @edenfunf and @obviyus.
- **PR #131783** fix(agents): keep dangling symlinks visible in ls listings.
- **PR #132014** fix(line): give the agent the selection a postback carries. Related #132000. Thanks @edenfunf and @obviyus.
- **PR #102636** fix(handoff): skip orchestrator framing for solo agents without subagents. Related #102628. Thanks @Gary-Jia-new and @altaywtf and @Joakim-Emanuelson.
- **PR #132545** fix(plugins): keep compiled plugin aliases on the built runtime.
- **PR #102160** fix(agents): run-lifecycle reliability — bounded release, evidence-based liveness, watchdog semantics. Related #85826, #96168. Thanks @obviyus and @kiagentkronos-cell and @alvelda.