Hermes v0.21.3:桌面从睡眠醒来后,会话不再被自己踢下线

你把笔记本合上去开会,回来打开 Hermes 桌面,界面正常加载,然后它要求你重新登录。你不是被踢了账号——是你自己的客户端把会话作废了。这种情况在远程网关 + 桌面端同时用的时候尤其容易发生,而且总在你最不想处理的时候出现。
v0.21.3(tag v2026.9.14,2026 年 9 月 14 日发布,官方昵称 “The Sign-In Patch”)就是为这件事切的。它同时也是一个“给云端用户的小更新通道”:Docker 镜像与 Hermes Cloud 都从最新的 release tag 构建,所以修复必须先滚进一个稳定 tag,才能送到那些从不手动跑 hermes update 的安装上。
唤醒时的并发刷新,为什么会让整个会话作废
先搞清楚这条链路上有哪些东西。远程访问 Hermes 时,客户端手里是一对令牌:access token(短期,用来发请求)和 refresh token(长期,用来换新的 access token)。为了降低泄露风险,授权服务器每次收到 refresh token 就把它轮换一次——旧值立刻作废,只认新值。如果同一个旧值被第二次出示,服务器会认为“这个令牌被人偷走了”,保护性动作就是吊销整个会话。
问题就出在有两条刷新路径:网关的 cookie 网关,以及桌面端自己的原生 bearer 路由。这两条路径各自持有同一个轮换中的 refresh token。桌面从睡眠中恢复时,会一次性发出多个请求——这就是一次天然的请求风暴——两条路径几乎同时去刷新,于是同一个旧值被出示了两次,整个会话被自己的客户端注销(#110061,修复 #55712)。
修复的做法是“合并”(coalesce):同一时刻携带同一个轮换令牌的并发刷新只由一个请求真正执行轮换,其余的采用它的结果,不再各自去出示。另外,刷新过程从事件循环上移开了,所以身份提供方响应慢的时候,/api/status 不会再被一起冻住。
Portal 侧还有一处配套改动(hermes-portal#1209):空闲期改为滑动 30 天,并给刚轮换掉的旧令牌留 5 分钟宽限期。这意味着哪怕真的有一个请求在途、恰好拿着刚被轮换的值到达,也不会被立刻判成盗用。
顺带修掉的:state.db 句柄重复泄漏
同一个窗口里还有一条跟“会话”有关的修复,症状藏在日志里。如果你在诊断时见过 N live SessionDB handles 这类告警,它本该表示“有不止一个进程在写同一个数据库”,但实际在健康拓扑上也会出现(#110934,修复 #100896、#103339)。
原因是网关、dashboard/桌面后端、ACP 以及与 CLI 相关的读取方各自开了一个写入句柄。现在规则被钉死了:读取方以只读方式附加,进程内的写入方共享注册表里的那一个句柄。句柄数量下降,某个组件意外取消另一个组件锁的机会也随之下降——这正是 v0.21.2 补丁版用六个 PR 关掉的那类故障,state.db 排查那篇里也讲过它当时的形态。
v0.21.3 里还有什么(但正式说明留给 v0.22.0)
v0.21.3 是个滚动的 tag:自 v0.21.2 以来合并的约 338 个 PR、1,036 个非合并提交、2,642 个改动文件都在这个窗口里。官方把其中大部分留给了 v0.22.0 的正式发布说明,这里按领域列一下,方便你知道“下一个版本会讲什么”:
| 领域 | 内容 |
|---|---|
| 网关线上契约 | 服务端到客户端的 JSON-RPC 请求取代 *.request / *.respond 事件对(#110521);Pydantic 线上契约注册表生成 TypeScript 与 OpenRPC 类型(#110522、#110523) |
| 模型与推理 | 每个模型选择器都能设置推理强度;桌面端新增 composer 强度药丸与按辅助任务控制;OpenRouter 支持 OAuth PKCE 登录 |
| MCP | 存储的 OAuth refresh token 绑定到签发它的授权服务器;桌面端每天提醒一次需要重新登录的服务器 |
| 媒体 | HEIF / HEIC / AVIF 图像解码 |
| Provider | FAL 目录新增 Wan 3.0、Kling 3.0 / Kling Image v3、MiniMax H3 Max Turbo、Gemini Omni Flash 1.1、Meta Muse;Honcho peer-model 设置重做 |
| 平台 | Slack 支持粘贴的表格,并加入 Agent Sessions API |
| 存储与 profile | 多路复用 profile 的隔离与网关存活性修复;拒绝在跨 VM 文件系统上使用 WAL |
完整的按块清单在 v0.21.3 发版页面上,窗口 diff 见 v2026.9.11…v2026.9.14。
你要做什么
手动安装照常一条命令:
hermes update
Docker 或托管环境从新 tag 重建:
docker pull nousresearch/hermes-agent:v2026.9.14
如果你的会话此前经常在桌面唤醒后失效,这次升级是值得优先做的;如果你从来没有遇到过,那说明你的使用节奏没撞上那个并发窗口,升级同样没有副作用。