Atlas 自动更新机制解析:4 阶段后台渐进式更新,如何快速跟上最新 Agent 功能
2026/9/18 13:23:58 网站建设 项目流程

Atlas 自动更新机制解析:4 阶段后台渐进式更新,如何快速跟上最新 Agent 功能

【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlas

如果你在用Atlas 多 Agent 版本控制桌面应用(Source control for agents:让多个 coding agent 协同编码、统一追踪并查询它们的改动),你一定关心一个问题:应用如何跟上不断迭代的 Agent 功能?Atlas 的答案是一套自动更新(auto-updater)机制:后台检查、静默下载、签名校验、渐进式安装(staged update),全程不打断你的编码流。下面用通俗语言拆解它背后的 4 个阶段。

更新体验:为什么它"不打扰你"?

传统更新要么弹框打断,要么直接替换运行中的程序,风险高。Atlas 借鉴了 Figma、VSCode、Zed 的后台渐进式更新思路(源码注释中明确提到这一点,见 updater.rs):

  • 下载阶段:应用照常使用,只有标题栏出现一个小小的进度弧线;
  • 准备就绪后:才弹出"Restart to update(重启以更新)"小卡片,提供「Restart now」或「Later」两个选择;
  • 选择 Later:本次退出应用时自动完成安装,下次启动即为新版本。

整个流程的状态机只有 5 个阶段:idle → downloading → ready → applying → error,定义在 updater-store.ts。

阶段一:后台检查更新(每 2 小时一次)

启动时与之后每2 小时RECHECK_INTERVAL,见 updater.rs),Atlas 会发起一次非阻塞的后台检查,入口在 lib.rs:

  1. 读取auto_update设置(默认开启)与"已忽略版本";
  2. 通过遥测客户端的远程配置接口拉取{version, uri}两个值——最新版本号与 DMG 下载地址,实现见 fetch_remote_config;
  3. 用语义化版本(semver)判断远程是否严格更新,且未被用户手动忽略,才触发下载。

值得注意:检查更新走的是远程配置,独立于遥测开关——即使你关闭了数据上报,更新检查依然有效。

阶段二:8 路并行下载,快且可降级

下载是整个流程中最"工程化"的部分(download_to):

  • 先用一个 1 字节的 Range 请求"探测"文件大小,并确认服务器支持分段下载;
  • 文件大于 4 MB 时,拆成8 个并行字节区间同时拉取,每个区间精确写回磁盘对应偏移——这能有效打满被限速的 CDN 带宽(源码注释提到单连接时曾观测到 20 MB 仅约 67 KB/s);
  • 若分段下载失败(某些 CDN 的 Range 行为异常),自动降级为单连接流式下载,保证正确性优先;
  • 文件先写入.part临时文件,完整后原子重命名为正式 DMG,避免半成品被误用。

下载期间,前端通过atlas:update-progress事件收到进度(updater-api.ts),只用来画标题栏弧线,绝不抢占焦点

阶段三:三重签名校验 + 渐进式安装

DMG 下载完成后,进入安全关键的一步——验证(verify_signature),三道关卡必须全部通过:

校验项命令作用
代码签名完整性codesign --verify --deep --strict确保 DMG 内容未被篡改
签名团队 IDcodesign -dvvv比对EXPECTED_TEAM_ID只接受官方团队签名,防止伪造更新源
公证(Notarization)spctl --assess通过 macOS Gatekeeper 评估

校验通过后,用ditto.app解包到独立的staged(暂存)目录,此时正在运行的旧版本完全不动。暂存状态持久化到staging.json清单(updater.rs),即使中途退出应用,下次启动也不会丢失进度或重复下载。

阶段四:重启应用 或 退出时自动安装

用户看到"Update Ready"弹窗(update-available-modal.tsx)后有两个选择:

  • Restart now:立即交换。交换策略见 swap_app——先把当前应用备份为.app.bak,优先尝试同卷原子目录重命名(近乎瞬间),失败则回退ditto拷贝;若安装失败,自动回滚到原版本;
  • Later:本次不重启,应用在下一次自然退出时执行 apply_on_exit(退出事件钩子挂在 lib.rs),下次启动即新版本,并在启动时弹出"已更新"提示、清理暂存目录。

此外,设置页中的「Check for updates」手动检查(update_check_now)会绕过自动更新开关与忽略版本,方便你主动催更。

上手与延伸阅读

作为用户,你几乎不需要操心这套机制——保持auto_update开启(默认值见 app_state.rs),Atlas 就会在后台安静地帮你保持最新。若你想知道"更新时到底发生了什么",可以按这条线索阅读源码:

  • 更新器核心逻辑:updater.rs
  • 启动接线与退出钩子:lib.rs
  • 远程配置(版本与地址来源):telemetry/mod.rs
  • 前端事件桥接:updater-api.ts
  • 更新弹窗 UI:update-available-modal.tsx

一句话总结:Atlas 的自动更新 =定时检查 + 并行下载 + 三重签名验证 + 渐进式安装 + 失败回滚,让多 Agent 编码工作流永远跑在最新的功能之上,而你几乎感觉不到它的存在。

【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlas

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询