赫尔墨斯更新管道故障 | AI生成和翻译

Home 2026.05

hermes update 的工作原理——它比看起来要复杂得多。

整个流程位于 hermes_cli/main.py 中,主要是 _cmd_update_impl()(第 7737 行)。以下是逐步的管道:

1. 挂断保护_install_hangup_protection,第 7317 行)

在开始任何操作之前,它会设置 SIGHUP=SIG_IGN,并将 stdout/stderr 包装后镜像到 ~/.hermes/logs/update.log。这可以防止 SSH 断开连接在更新过程中杀死 pip install,从而避免虚拟环境半损坏。SIGINT(Ctrl-C)和 SIGTERM 被故意保留——它们是合法的取消信号。

2. 更新前备份_run_pre_update_backup,第 7590 行)

updates.pre_update_backup 配置控制(默认关闭)。可以通过 --backup 标志强制启用。创建 HERMES_HOME 的完整 zip 快照。默认关闭,因为大型安装会使 zip 花费数分钟。

3. 安装方法检测(第 7760 行)

三种路径:

4. 分支检测_is_fork,第 6604 行)

origin 远程 URL 与 OFFICIAL_REPO_URLS(NousResearch/hermes-agent 仓库)进行比较。如果不匹配,则你处于分支上——它会打印一条警告,并稍后启用上游同步逻辑。

5. Git 更新(第 7811 行)

6. Git 拉取(第 7927 行)

7. 字节码缓存清理_clear_bytecode_cache,第 5647 行)

递归删除 __pycache__/ 目录。防止更新后的源代码引用旧编译 .pyc 文件中不存在的内容时导致 ImportError。这就是你看到的”Cleared 63 stale pycache directories”。

8. 分支上游同步_sync_with_upstream_if_needed,第 6699 行)

仅针对分支。巧妙之处:

9. Python 依赖(第 7994 行)

10. 懒加载后端刷新_refresh_active_lazy_features,第 7006 行)

大多数可选后端(provider、platform 等)都是”懒依赖”——首次使用时安装,不在 pyproject.toml 的 [all] 中。问题是:uv pip install -e .[all] 不会触及已安装的懒依赖,因此如果懒依赖的版本引脚被提升(CVE、错误修复),用户会永远保留过时的版本。这一步骤找出用户之前激活过的懒功能,并在当前引脚下重新安装它们。这就是你看到的”Refreshing 22 active lazy backend(s)… 14 refreshed”。

11. Node.js 依赖_update_node_dependencies,第 7212 行)

如果 package.json 存在,则在 TUI 目录(ui-tui/)中运行 npm install

12. 技能同步(第 8059 行)

将新的捆绑技能复制到 ~/.hermes/skills/,更新已更改的技能,但尊重用户修改(不会覆盖用户编辑过的技能)。然后同步到所有配置文件。

13. 配置迁移(第 8131 行)

检查缺失的环境变量、新的配置字段和配置版本升级。提供交互式迁移(或在非交互/网关模式下自动迁移)。这确保需要配置键的新功能能够获得它们。

14. 网关自动重启(第 8275 行)

如果以网关模式运行(--gateway),在代码更新后:

其创新之处在于:


Back Donate