<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>安全修复 on Kalend's Blog</title><link>https://blog.kalend.top/tags/%E5%AE%89%E5%85%A8%E4%BF%AE%E5%A4%8D/</link><description>Recent content in 安全修复 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 02 Jul 2026 14:00:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/%E5%AE%89%E5%85%A8%E4%BF%AE%E5%A4%8D/index.xml" rel="self" type="application/rss+xml"/><item><title>Hermes v0.18.0 更新：12 天 1760 个 commit，这次安全修复最狠</title><link>https://blog.kalend.top/2026/07/02/hermes-v0.18.0-update.html/</link><pubDate>Thu, 02 Jul 2026 14:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/07/02/hermes-v0.18.0-update.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;v0.18.0，代号没有，但安全修复密度史无前例。
12 天，1760 个 commit，其中安全相关提交超过 60 个。
这是 Hermes 有史以来安全修复最密集的一次更新。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;这次更新的核心主题只有一个：&lt;strong&gt;安全加固&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Gateway 会话劫持漏洞堵了，浏览器私有网络访问锁死了，子进程环境变量凭证泄漏补了。&lt;/p&gt;
&lt;p&gt;功能上最大的亮点是 Google Vertex AI 支持——Gemini 用户终于可以原生接入了。&lt;/p&gt;
&lt;p&gt;稳定性方面，MoA（Model of Agents）和上下文压缩各修了一堆关键 bug。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一句话判断：如果你用了 Gateway 远程连接或多账号场景，必须升。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="全景统计fix-占近六成进入打磨期"&gt;全景统计：fix 占近六成，进入打磨期
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;类型&lt;/th&gt;
					&lt;th&gt;数量&lt;/th&gt;
					&lt;th&gt;占比&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;fix&lt;/td&gt;
					&lt;td&gt;1033&lt;/td&gt;
					&lt;td&gt;58.7%&lt;/td&gt;
					&lt;td&gt;修复为主&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;feat&lt;/td&gt;
					&lt;td&gt;209&lt;/td&gt;
					&lt;td&gt;11.9%&lt;/td&gt;
					&lt;td&gt;新功能&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;test&lt;/td&gt;
					&lt;td&gt;141&lt;/td&gt;
					&lt;td&gt;8.0%&lt;/td&gt;
					&lt;td&gt;测试补充&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;chore&lt;/td&gt;
					&lt;td&gt;116&lt;/td&gt;
					&lt;td&gt;6.6%&lt;/td&gt;
					&lt;td&gt;工程维护&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;docs&lt;/td&gt;
					&lt;td&gt;91&lt;/td&gt;
					&lt;td&gt;5.2%&lt;/td&gt;
					&lt;td&gt;文档更新&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;refactor&lt;/td&gt;
					&lt;td&gt;78&lt;/td&gt;
					&lt;td&gt;4.4%&lt;/td&gt;
					&lt;td&gt;代码重构&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;security&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
					&lt;td&gt;0.9%&lt;/td&gt;
					&lt;td&gt;安全专用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;其他&lt;/td&gt;
					&lt;td&gt;77&lt;/td&gt;
					&lt;td&gt;4.4%&lt;/td&gt;
					&lt;td&gt;ci/other&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;fix:feat ≈ 5:1，典型的打磨期比例。&lt;/p&gt;
&lt;p&gt;fix 排名前五的方向：gateway（134）、desktop（90）、agent（71）、security（47）、telegram（39）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：Gateway 和安全是这次改动最集中的两个方向。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下面逐个拆解重点更新。&lt;/p&gt;
&lt;h2 id="一安全加固本次绝对主角"&gt;一、安全加固（本次绝对主角）
&lt;/h2&gt;&lt;h3 id="1-gateway-resume-idor-修复堵住会话劫持"&gt;1. Gateway /resume IDOR 修复：堵住会话劫持
&lt;/h3&gt;&lt;p&gt;这是本次最严重的安全修复。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;漏洞原理：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gateway 的 &lt;code&gt;/resume&lt;/code&gt; 和 &lt;code&gt;/sessions&lt;/code&gt; 接口，之前没有严格绑定调用者身份。&lt;/p&gt;
&lt;p&gt;也就是说，理论上有人可以构造请求，读取或恢复&lt;strong&gt;不属于自己&lt;/strong&gt;的会话。&lt;/p&gt;
&lt;p&gt;这是一种 IDOR（Insecure Direct Object Reference）漏洞。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复内容（7 个连环提交）：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;提交&lt;/th&gt;
					&lt;th&gt;修复点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;scope /resume to caller&amp;rsquo;s origin&lt;/td&gt;
					&lt;td&gt;核心修复：严格绑定调用者来源&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;fail closed on blank-source&lt;/td&gt;
					&lt;td&gt;空来源行直接拒绝&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;fail closed on no-provenance&lt;/td&gt;
					&lt;td&gt;无来源信息直接拒绝&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;fail closed on identity-less&lt;/td&gt;
					&lt;td&gt;无身份调用者直接拒绝&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;scope Matrix by thread&lt;/td&gt;
					&lt;td&gt;Matrix 按 thread 隔离，不只是 room&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;tighten DM scoping&lt;/td&gt;
					&lt;td&gt;收紧私信范围&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;allow shared-group resume&lt;/td&gt;
					&lt;td&gt;合法共享组恢复正常&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;设计原则：所有无法验证来源的请求，一律 fail closed（拒绝），而不是放行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;c4f278c02&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="2-浏览器私有网络防护增强cdp-不再豁免"&gt;2. 浏览器私有网络防护增强：CDP 不再豁免
&lt;/h3&gt;&lt;p&gt;之前的浏览器安全防护有个漏洞：cloud-metadata 地址拦截只对本地 backend 生效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题场景：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你的 Agent 跑在云服务器上，用本地 headless Chromium，它可以导航到 &lt;code&gt;169.254.169.254&lt;/code&gt;（云元数据地址），读取实例凭证。&lt;/p&gt;
&lt;p&gt;而且 CDP（Chrome DevTools Protocol）远程浏览器被错误地判定为&amp;quot;本地&amp;quot;，跳过了私有网络检查。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复内容（3 个提交）：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;提交&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;enforce cloud-metadata floor on all backends&lt;/td&gt;
					&lt;td&gt;所有 backend 强制拦截云元数据地址&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;re-check after browser_back&lt;/td&gt;
					&lt;td&gt;导航后退后重新检查私有网络&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;extend guard to browser_console&lt;/td&gt;
					&lt;td&gt;browser_console 也纳入检查&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;云元数据拦截地址：&lt;/strong&gt; &lt;code&gt;169.254.169.254&lt;/code&gt;、&lt;code&gt;metadata.google.internal&lt;/code&gt;、ECS/Azure/GCP IMDS——全部无条件拦截。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;0a7561651&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="3-子进程凭证清理堵住环境变量泄漏"&gt;3. 子进程凭证清理：堵住环境变量泄漏
&lt;/h3&gt;&lt;p&gt;之前 Hermes 的动态密钥会泄漏到所有子进程的环境变量中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题：&lt;/strong&gt; Agent 启动的子进程（如 terminal 命令、脚本）可以读取到 Hermes 自身的会话密钥和凭证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复（3 个连环提交）：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;提交&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;strip dynamic Hermes secrets&lt;/td&gt;
					&lt;td&gt;核心修复：spawn 时清除所有动态密钥&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;close cross-session leak&lt;/td&gt;
					&lt;td&gt;修复跨会话 HERMES_SESSION_* 泄漏&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;close same session leak&lt;/td&gt;
					&lt;td&gt;修复同一会话的 spawn surface 泄漏&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;清除的凭证类型：&lt;/strong&gt; 会话令牌、动态密钥等 Hermes 内部凭证。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;a658f3b28&lt;/code&gt;，2026-07-01&lt;/p&gt;
&lt;h3 id="4-其他安全修复"&gt;4. 其他安全修复
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;修复&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;portal_base_url 校验&lt;/td&gt;
					&lt;td&gt;防止伪造 Portal 地址&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;pairing 同步 allowlist&lt;/td&gt;
					&lt;td&gt;pairing 权限不再绕过 allowlist&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;path traversal 防护&lt;/td&gt;
					&lt;td&gt;Teams 录音文件名清除目录组件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;browser credential denylist&lt;/td&gt;
					&lt;td&gt;收窄凭证查询拦截名单&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="二新功能"&gt;二、新功能
&lt;/h2&gt;&lt;h3 id="1-google-vertex-ai-providergemini-原生接入"&gt;1. Google Vertex AI Provider：Gemini 原生接入
&lt;/h3&gt;&lt;p&gt;新增 Google Vertex AI 作为 Provider，通过 OAuth2 认证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持内容：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;模型&lt;/td&gt;
					&lt;td&gt;Gemini 系列&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;认证&lt;/td&gt;
					&lt;td&gt;OAuth2&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;配置入口&lt;/td&gt;
					&lt;td&gt;桌面端 Keys tab 可直接配置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;原生适配&lt;/td&gt;
					&lt;td&gt;合并同角色内容、移除 stream_options&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;实际意义：&lt;/strong&gt; 之前用 Gemini 要走第三方 API 中转，现在直接 OAuth2 认证，延迟更低，成本更可控。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;c73e74386&lt;/code&gt;，2026-07-01&lt;/p&gt;
&lt;h3 id="2-kanban-通知路由优化"&gt;2. Kanban 通知路由优化
&lt;/h3&gt;&lt;p&gt;通知不再盲目广播，而是通过 owning profile 精准路由。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;改动：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通知通过任务所属的 profile 路由&lt;/li&gt;
&lt;li&gt;路由到 profile 后，唤醒创建该任务的 agent&lt;/li&gt;
&lt;li&gt;支持多语言通知消息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;实际意义：&lt;/strong&gt; 多 profile 场景下，通知不再串台。A profile 的任务完成通知，只发给 A profile 绑定的渠道。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;c69643026&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="3-子代理工具集自动继承"&gt;3. 子代理工具集自动继承
&lt;/h3&gt;&lt;p&gt;之前 &lt;code&gt;delegate_task&lt;/code&gt; 需要手动指定子代理的 toolsets 参数。&lt;/p&gt;
&lt;p&gt;现在移除了这个参数——&lt;strong&gt;子代理自动继承父代理的完整工具集。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;变化：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 之前（需要手动指定）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;delegate_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;toolsets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;terminal&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 现在（自动继承，不需要指定）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;delegate_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;少了一个容易出错的参数。子代理默认拥有和父代理相同的能力范围。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;ba0bc01d1&lt;/code&gt;，2026-07-01&lt;/p&gt;
&lt;h2 id="三稳定性修复"&gt;三、稳定性修复
&lt;/h2&gt;&lt;h3 id="1-moamodel-of-agents大修"&gt;1. MoA（Model of Agents）大修
&lt;/h3&gt;&lt;p&gt;这次 MoA 修了至少 10 个 bug，核心三个：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;问题&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
					&lt;th&gt;影响&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;辅助超时太短&lt;/td&gt;
					&lt;td&gt;提升至 900s，Codex 路径获得稳定 provider&lt;/td&gt;
					&lt;td&gt;长推理不再中途超时&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;预设选择丢失&lt;/td&gt;
					&lt;td&gt;持久化预设选择&lt;/td&gt;
					&lt;td&gt;不再每次都重置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;成本计算虚高&lt;/td&gt;
					&lt;td&gt;按 aggregator 真实模型计价&lt;/td&gt;
					&lt;td&gt;会话成本不再被 advisor 拉高&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;之前的问题：&lt;/strong&gt; MoA 的 aggregator 轮次被按 advisor（辅助模型）计价，导致会话成本显示虚高。而且 Codex 路径缺少稳定的 prompt_cache_key，导致缓存命中率低、延迟高。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修复后：&lt;/strong&gt; 成本按真实模型计算，Codex 路径有稳定缓存键，900s 超时兜底长推理。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;eae3700b1&lt;/code&gt;、&lt;code&gt;aa605b66c&lt;/code&gt;、&lt;code&gt;9be292f1e&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="2-上下文压缩修复"&gt;2. 上下文压缩修复
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;问题&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;压缩期间中断请求丢失&lt;/td&gt;
					&lt;td&gt;中断请求排队，不再丢弃&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;merge-into-tail 摘要越界&lt;/td&gt;
					&lt;td&gt;检测并截断分隔符后的内容&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;END MARKER 位置错误&lt;/td&gt;
					&lt;td&gt;END MARKER 放在摘要末尾&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;之前的问题：&lt;/strong&gt; 压缩过程中如果有新消息进来，会直接丢失。而且 merge-into-tail 模式的摘要有时会越过分隔符，污染后续内容。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;5eaccf580&lt;/code&gt;、&lt;code&gt;b795a45b8&lt;/code&gt;、&lt;code&gt;a1a8a967e&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="3-windows-平台修复"&gt;3. Windows 平台修复
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;问题&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;terminal 路径错误&lt;/td&gt;
					&lt;td&gt;init_session 的 cd 走 Windows 路径转换&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;bash 选择错误&lt;/td&gt;
					&lt;td&gt;优先使用 Git for Windows bash&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;破坏性命令检测&lt;/td&gt;
					&lt;td&gt;新增 Windows 破坏性 shell 命令检测&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;实际意义：&lt;/strong&gt; Windows 用户之前可能遇到 terminal 工作目录不对、bash 版本选错等问题，这次都修了。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;5d613a563&lt;/code&gt;、&lt;code&gt;ad5f3341d&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="4-gateway-稳定性"&gt;4. Gateway 稳定性
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;问题&lt;/th&gt;
					&lt;th&gt;修复&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;/restart 失效&lt;/td&gt;
					&lt;td&gt;Restart=on-failure 模式下正确恢复&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;pairing 权限不一致&lt;/td&gt;
					&lt;td&gt;pairing 同步到 allowlist&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Telegram 连接超时&lt;/td&gt;
					&lt;td&gt;每次 initialize() 加 30s 超时兜底&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Telegram 超时修复细节：&lt;/strong&gt; 之前如果 telegram.org 和所有备用 IP 都不可达，initialize() 没有外层超时限制，会阻塞数分钟导致 Gateway 卡死。现在每次尝试限制 30s，失败后重试退避。&lt;/p&gt;
&lt;p&gt;commit: &lt;code&gt;40dbfa0e3&lt;/code&gt;、&lt;code&gt;1bfe08145&lt;/code&gt;、&lt;code&gt;9f0309504&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="升级建议"&gt;升级建议
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查看当前版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes --version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 升级到最新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;按使用场景分级建议：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;场景&lt;/th&gt;
					&lt;th&gt;紧迫度&lt;/th&gt;
					&lt;th&gt;原因&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Gateway 远程连接&lt;/td&gt;
					&lt;td&gt;必须升&lt;/td&gt;
					&lt;td&gt;IDOR 漏洞修复&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;多账号 / 多 profile&lt;/td&gt;
					&lt;td&gt;必须升&lt;/td&gt;
					&lt;td&gt;会话隔离加固&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;浏览器工具在云服务器&lt;/td&gt;
					&lt;td&gt;必须升&lt;/td&gt;
					&lt;td&gt;云元数据拦截&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MoA 用户&lt;/td&gt;
					&lt;td&gt;强烈建议&lt;/td&gt;
					&lt;td&gt;超时/成本/缓存全修&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows 用户&lt;/td&gt;
					&lt;td&gt;强烈建议&lt;/td&gt;
					&lt;td&gt;terminal 路径修复&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;单机纯 CLI&lt;/td&gt;
					&lt;td&gt;建议升&lt;/td&gt;
					&lt;td&gt;稳定性提升&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="写在最后"&gt;写在最后
&lt;/h2&gt;&lt;p&gt;这次更新让我印象深刻的是安全修复的密度。&lt;/p&gt;
&lt;p&gt;7 个连环提交堵一个 IDOR 漏洞，3 个提交锁死云元数据访问，3 个提交清理子进程凭证——&lt;/p&gt;
&lt;p&gt;每一个都是真实可被利用的攻击面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;fix 占比 58.7% 不是坏事。&lt;/strong&gt; 一个 AI Agent 框架在快速迭代后进入安全打磨期，说明项目在认真对待生产环境可靠性。&lt;/p&gt;
&lt;p&gt;如果你在用 Gateway 或多账号，这次更新不要跳过。&lt;/p&gt;
&lt;section style="margin:20px 0;padding:16px 20px;background:linear-gradient(135deg,#4a90d9,#357abd);border-radius:8px;text-align:center;"&gt;
&lt;p style="margin:0;color:#fff;font-size:16px;font-weight:bold;line-height:1.6;"&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;
&lt;/section&gt;</description></item></channel></rss>