项目位置:
backend/hermes-agent/(第三方仓库NousResearch/hermes-agent的本地克隆,已通过父项目.gitignore排除) 文档目的:记录一次 hermes-agent 上游升级(git pull)带来的总量数据、关键变更、与本项目的兼容性影响,便于后续评估升级风险、规划适配工作。 评估时点:2026-08-03 评估范围:基线021ed69141(2026-06-11)→ HEADf4604f89(2026-08-02)
Hermes-Agent 是 NousResearch/hermes-agent 仓库提供的智能体运行时,本项目(agent-management)通过 backend/hermes-bridge/ 内的 Python Bridge 进程托管它,再由 Java 侧 HermesBridgeClient 通过 SSE 通信完成工作流编排。Bridge 与 hermes-agent 的耦合点主要包括:agent.clarify_callback 钩子、tools.clarify_gateway 模块、tools.file_tools 中的路径解析函数(由 sandbox_patch.py 做 monkey-patch 实现沙箱隔离)。
本次升级的核心影响:上游已原生支持 clarify 永久等待(timeout=None/<=0),本项目对 tools/clarify_gateway.py 的私有 patch 已被覆盖、可废弃。
| 维度 | 数值 |
|---|---|
| 基线 commit | 021ed6914162416522462b009de0bec1513c73a1 |
| 基线时间 | 2026-06-11 17:22:22 -0400 |
| 基线 subject | docs: finish Automation Blueprints terminology rebrand (#44470) |
| 当前 HEAD | f4604f89dec8d225d67d7a68065c1b425fd3732a |
| HEAD 时间 | 2026-08-02 22:14:27 -0500 |
| HEAD subject | Merge pull request #77275 from NousResearch/bb/tab-reload |
| 时间跨度 | 约 52 天 |
| 提交总数 | 8 936 |
| 文件变更 | 6 620 个 |
| 代码变更 | +1 055 298 / −359 700 行 |
涉及 tools/ 的 commit |
1 376 |
涉及 agent/ 的 commit |
993 |
量级说明:约 52 天内涌入近 9000 个 commit、超过 100 万行新增代码,远超普通迭代节奏。这通常意味着上游在此期间合并了一个或多个长期分支(long-running feature branch),或完成了某次大规模重构。
docs: finish Automation Blueprints terminology rebrand这条基线 commit subject 也暗示此前刚刚完成术语统一("Automation Blueprints" 大概率是新品牌名),本次升级见证了术语落地后的特性爆发期。
| 类型 | 数量 | 占比 |
|---|---|---|
fix |
4 443 | 49.7% |
feat |
988 | 11.0% |
Merge PR |
764 | 8.5% |
test |
610 | 6.8% |
chore |
513 | 5.7% |
refactor |
275 | 3.1% |
docs |
183 | 2.0% |
perf |
142 | 1.6% |
fmt |
118 | 1.3% |
security |
25 | 0.3% |
观察:fix 数量是 feat 的 4.5 倍,说明此阶段上游以密集修复为主,新特性交付与修复并行;security 有 25 条,建议单独过一遍(见第 5 节)。
| 子系统 | feat 数 | 备注 |
|---|---|---|
| desktop | 279 | 桌面客户端,本轮最大特性波 |
| gateway | 53 | HTTP/SSE 网关与 clarify 重写 |
| cli | 32 | 命令行 |
| agent | 28 | AIAgent 核心抽象 |
| relay | 27 | Hermes Relay 远程协同 |
| skills | 21 | 技能系统 |
| kanban | 20 | Kanban 任务视图 |
| dashboard | 20 | 仪表盘 |
| voice | 17 | 语音输入 |
| slack | 17 | Slack 集成 |
| moa | 15 | Mixture-of-Agents |
| tui / ui-tui | 23 | 终端 UI |
| memory | 12 | 记忆系统 |
| cron | 12 | 定时任务 |
| tts | 10 | 文本转语音 |
| tools | 10 | 工具集 |
| compression | 10 | 上下文压缩 |
| mcp | 9 | Model Context Protocol |
| photon | 8 | iMessage 集成 |
| models | 8 | 模型管理 |
| config | 8 | 配置 |
| ci | 8 | 持续集成 |
| secrets | 7 | 密钥处理 |
| providers | 7 | 模型 provider |
| plugins | 7 | 插件 |
| delegation | 7 | 委托 |
| themes | 6 | 主题 |
上表按 feat 数倒序排列前 27 个子系统。desktop 一项就占全部 feat 的 28%,是本轮迭代的主战场。
这是本次升级中对 agent-management 影响最大的主题。
507d479c8c fix(clarify): one canonical timeout across CLI, TUI/desktop, and gateway (#69774)(2026-07-22)
tools.clarify_gateway.resolve_clarify_timeout(config)。clarify.timeout(向后兼容)→ agent.clarify_timeout(默认 3600)→ 兜底 3600。<= 0 与 None 都被视为"永久不超时",仅靠 1s 切片轮询维持 watchdog 心跳。backend/hermes-bridge/hermes_bridge.py:403 的 wait_for_response(clarify_id, timeout=None) 直接命中上游新能力,对 tools/clarify_gateway.py 的私有 patch 已可废弃。详见 docs/patches/hermes-agent/README.md。10b7ab5cb6 feat(clarify): extend multi-select to gateway text fallback and TUI bridge —— 多选 clarify 扩展到 gateway 文本回退路径。fe95194c59 feat(photon): render multiple-choice clarify as a native iMessage poll —— 多选 clarify 在 iMessage 上渲染为原生 poll。c0dd6e1f3f fix(desktop): stop a clarify card swallowing keys it doesn't bind —— 桌面端 clarify 卡片不再吞键盘事件。251b668f4d fix(desktop): let the composer answer past a clarify card —— composer 可越过 clarify 卡片继续回答。aa40f16d3e fix(gateway): transcribe clarify voice replies —— 转写 clarify 语音回复。aacc15b2c9 fix(clarify): raise default clarify_timeout to 3600s (#32762) —— 默认超时从 60s 提升到 3600s。tools/clarify_gateway.py:单文件 +202/−21,几乎重写。近期 merge PR 主线:
bb/tab-reload、bb/composer-path-copy、bb/composer-link-open、bb/composer-placeholder —— composer(输入框)多轮打磨。bb/desktop-lockfile-engines、bb/npm-engine-outage —— 桌面运行时引擎隔离与 npm 引擎故障修复。bb/win-update-lock-handoff、ethie/bundled-node-path-windows-layout —— Windows 升级锁交接与打包 Node 路径修复。bb/sqlite-repair-locked —— SQLite 锁修复。bb/kanban-model-picker —— Kanban 视图模型选择器。bb/example-plugin-off-by-default —— 示例插件默认关闭。与本项目关系:完全独立。本项目通过 Bridge 进程调用 hermes-agent,不使用其桌面应用。升级不影响 Bridge 兼容性。
tools/clarify_gateway.py 引入 resolve_clarify_timeout 统一解析器(见 4.1)。notify / resolve_gateway_clarify 等 API 形态有调整。建议:Bridge 侧调用的
clarify_gateway.register、clarify_gateway.resolve_gateway_clarify、clarify_gateway.clear_session、clarify_gateway.wait_for_response这四个 API 升级后是否仍保持原签名,需在新版本上跑一次完整 clarify 流程验证(详见第 6 节)。
b792bd0529 feat(delegation): structured stall metadata + live per-child status in /agents。06c7f9b26f fix(agent): clarify compress_context ceiling is pre-commit only。a1ff62a139 fix: context-length fallback logging, batch trajectory durability, pool cleanup。建议:
agent.clarify_callback钩子签名(hermes_bridge.py:451用到)若变化会直接破坏 Bridge,需重点验证。
run.py 线程时间戳(不再自我锚定重推导)。9acc4b47f5 perf(state): external-content FTS + tool-row-free trigram index(schema v23)—— 状态索引大重构。3a69e34702 perf(update): cut redundant network + subprocess work from hermes update —— 升级流程提速。fe8c0f7eef fix(secrets): pass OP_LOAD_DESKTOP_APP_SETTINGS through to the op child env。/private/var 路径收窄:7f4d155159 fix(tools): validate timeout, reject whitespace old_string, narrow /private/var block。b9dba7eff5 fix(env-probe): stuck Windows probe can no longer deadlock system-prompt builds (#67999)。73b3a8afe3 fix(bootstrap): download timeouts + BOM upgrade for pre-fix cached scripts (#67193 follow-up)。58708c7066 fix(git): never block internal git calls on credential prompts。| 风险点 | 影响层级 | 评估结论 | 建议动作 |
|---|---|---|---|
wait_for_response(timeout=None) 语义 |
Bridge | ✅ 上游 PR #69774 已原生支持 | 私有 patch 废弃 |
agent.clarify_callback 钩子签名 |
Bridge | ⚠️ 上游 agent 模块 993 commit、28 feat,签名可能有微调 | 跑一次完整 clarify 流程验证 |
clarify_gateway.{register, resolve_gateway_clarify, clear_session, wait_for_response} API |
Bridge | ⚠️ 单文件 +202/−21,几乎重写 | 同上 |
tools.file_tools._resolve_path_for_task / _resolve_base_dir |
sandbox_patch.py monkey-patch 目标 | ⚠️ tools/ 涉及 1376 个 commit | 跑一次文件读写流程验证 |
agent.coding_context._git_root |
sandbox_patch.py monkey-patch 目标 | ⚠️ 同上 | 跑一次 git 操作流程验证 |
| 桌面 / Kanban / Photon / Slack 等子系统 | Bridge | ✅ 完全独立 | 无需动作 |
升级 hermes-agent 后,建议按以下清单手动回归(参考 AGENTS.md:复杂网页操作不使用 Playwright,交由人工测试):
AIAgent.run 主路径无回归。sandbox_patch.py 的 _resolve_path_for_task / _resolve_base_dir patch 仍生效(路径仍被限制在 workingDir)。_git_root 的操作,验证 patch 仍指向正确的 workingDir。clarify_gateway.register / wait_for_response(timeout=None) / resolve_gateway_clarify 全链路无异常。_clarify_ids 集合与 clear_session 清理正常。SseEmitter(86_400_000L) 与 setReadTimeout(86_400_000) 未提前超时。本节内容用于
docs/patches/hermes-agent/README.md的"上游基线"小节同步更新。
| 项 | 值 |
|---|---|
| 远程仓库 | https://github.com/NousResearch/hermes-agent |
| 子项目本地路径 | backend/hermes-agent/ |
父项目 .gitignore 排除规则 |
hermes-agent/ |
| 当前基线 commit | f4604f89dec8d225d67d7a68065c1b425fd3732a |
| 基线 commit subject | Merge pull request #77275 from NousResearch/bb/tab-reload |
| 基线时间 | 2026-08-02 22:14:27 -0500 |
| 当前 main 分支跟踪状态 | 正常跟踪 origin/main(非 detached HEAD) |
本次升级的实际操作记录:
# 在父项目根目录
cd backend/hermes-agent
# 当前工作区有私有 patch(已 apply),先还原
python ../docs/patches/hermes-agent/apply-patches.py --revert
# 拉取上游
git pull --ff-only origin main
# 验证 patch 是否仍需要(--check 显示找不到原始锚点,说明上游已重写该段)
python ../docs/patches/hermes-agent/apply-patches.py --check
# 决策:上游 PR #69774 已原生覆盖能力 → 不再 apply,标记 patch 为废弃
docs/patches/hermes-agent/README.md