# 自动升级 — 任务规划

> 创建时间：2026-05-28

## 阶段一：版本基础设施

- [ ] `main.go` 增加版本变量，`-ldflags` 编译注入
- [ ] `config.go` 增加 `update_url`、`auto_check_update`、`skip_version` 字段
- [ ] `updater.go` 实现版本检查函数 `checkUpdate()`

## 阶段二：升级弹窗

- [ ] `web/update.html` 升级弹窗页面（右下角气泡 + 居中弹窗两种模式）
- [ ] Go 端创建无边框 WebView2 弹窗窗口
- [ ] 弹窗内容渲染：版本号、更新说明、按钮
- [ ] 根据 `force` 字段切换弹窗位置和按钮

## 阶段三：升级器程序

- [ ] `updater/main.go` 独立程序骨架
- [ ] HTTP 下载安装包 + 进度日志
- [ ] SHA256 校验
- [ ] 备份旧版本
- [ ] 替换 + 启动新版本
- [ ] 启动失败自动回滚
- [ ] 日志写入 `updater.log`

## 阶段四：主程序集成

- [ ] 主程序释放 updater.exe 到临时目录
- [ ] 构造命令行参数启动 updater
- [ ] 主程序退出
- [ ] 托盘菜单增加"检查更新"

## 阶段五：发布流程

- [ ] 构建脚本同时构建 u-desktop.exe + updater.exe
- [ ] publish 技能自动生成 version.json（版本号 + SHA256 + 下载 URL）
- [ ] 上传 version.json 和安装包到 c.1216.top

## 阶段六：验证

- [ ] 手动模拟版本更新，测试弹窗流程
- [ ] 测试 updater 下载 + 替换 + 重启
- [ ] 测试回滚机制
- [ ] 测试强制升级流程

## 技术要点

- 版本号通过 `-ldflags "-X main.version=x.x.x"` 注入
- updater.exe 通用设计，参数化驱动，不含业务逻辑
- 弹窗用 WebView2 无边框窗口，风格与设置窗口一致
- version.json 放 c.1216.top，静态文件
