Skip to content

feat: 应用自更新(Wails OTA),首版 macOS 不做覆盖更新 #46

Description

@yujiezhang-ops

会议要求「基于 Wails 自带的 OTA 自动更新框架实现项目自更新」,同时明确「首版暂不实现 macOS 应用覆盖更新,避免触发系统安全权限限制」。

当前状态:完全没有

全仓库 grep selfupdate / SelfUpdate / OTA / autoupdateinternal/cmd/frontend/src/零命中。现有的更新能力全部是针对被管理的 Agent(internal/app/update.go 更新 npm/uv 包),不是 OneAgent 自身。

用户拿到 0.0.1 之后没有任何途径知道有新版本,只能自己回 GitHub 看。

与 macOS 限制的关系

会议的判断是对的,而且当前打包方式让问题更明确:build-artifacts.yml:126 只做 ad-hoc 签名

codesign --force --deep --sign - "bin/OneAgent.app"

ad-hoc 签名的应用没有稳定身份,就地替换 .app 会破坏已有的 Gatekeeper 放行记录,用户每次更新后都要重新手动放行。所以首版做「检查并提示 + 打开下载页」而不是「下载并覆盖」是合理的。

另外发行渠道仍是 technical-preview-unsignedREADME.md:17),在有正式签名之前,静默覆盖更新不应该做。

建议范围(首版)

  1. 一个检查接口:读取 GitHub Releases 的 latest tag,与 internal/version.Version 比较
  2. 有新版时在界面提示,按钮跳转到 Release 页面,不自己下载不自己替换
  3. 检查动作要走 internal/ 已有的超时与脱敏约定;这是首个主动对外网请求,需要确认它符合 docs/product-boundary-baseline.md(该文件把网络访问边界写死,新增出站请求建议先确认是否需要 ADR)
  4. 检查失败必须静默降级,不能因为拿不到版本信息就阻塞界面

依赖

版本号本身还没有唯一真源,也没有在界面上展示,见 #45。那个先做,否则「当前版本」比较的对象是空字符串。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions