添加 AGC 客户端更新检查与下载能力 #230

Merged
kdletters merged 23 commits from codex/agc-update-check into master 2026-09-01 19:23:56 +08:00
Member

实现 AGC 启动版本检测与 OSS 安装包下载。

  • 每次客户端打开时从 OSS latest.json 检查新版本
  • 新版本提示支持 releaseNotes,并通过 Tauri 命令下载到系统下载目录
  • 下载地址限制受信任 OSS、HTTPS、大小与可选 SHA-256 校验
  • 补充 Tauri capability/CSP、单测和发布文档

Closes #224

实现 AGC 启动版本检测与 OSS 安装包下载。 - 每次客户端打开时从 OSS latest.json 检查新版本 - 新版本提示支持 releaseNotes,并通过 Tauri 命令下载到系统下载目录 - 下载地址限制受信任 OSS、HTTPS、大小与可选 SHA-256 校验 - 补充 Tauri capability/CSP、单测和发布文档 Closes #224
kdletters added 1 commit 2026-08-31 14:35:49 +08:00
添加 AGC 客户端更新检查与下载能力
Project CI / Native shell tests (pull_request) Failing after 17m13s
Project CI / Repository checks (pull_request) Successful in 9m13s
Project CI / Frontend tests (pull_request) Failing after 2m56s
Project CI / Backend tests (pull_request) Successful in 8m27s
da76cb9056
新增 OSS 版本清单检查和更新提示
增加受控安装包下载与完整性校验
补充 Tauri OSS 权限、样式、测试和技术文档
kdletters force-pushed codex/agc-update-check from 3540d11ac7 to da76cb9056 2026-08-31 14:35:49 +08:00 Compare
kdletters added 1 commit 2026-08-31 14:56:00 +08:00
构建时自动生成 AGC 更新清单
Project CI / Repository checks (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 14s
Project CI / Frontend tests (pull_request) Successful in 3m6s
Project CI / Native shell tests (pull_request) Failing after 16m48s
0899118fe1
新增发布构建包装脚本并扫描平台安装包
自动计算下载地址、文件大小和 SHA-256
补充构建脚本测试与发布文档
kdletters added 1 commit 2026-08-31 15:00:05 +08:00
切换 AGC 更新服务到 agc-dev OSS
Project CI / Frontend tests (pull_request) Successful in 3m58s
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Native shell tests (pull_request) Failing after 16m9s
f6109b058b
更新客户端清单默认地址
同步下载白名单与 CSP 域名
修正构建清单的 OSS 下载前缀
kdletters added 1 commit 2026-08-31 15:02:58 +08:00
固定 AGC Windows x64 发布目标
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m45s
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Native shell tests (pull_request) Failing after 5m10s
13cc6c2a5d
构建默认使用 x86_64-pc-windows-msvc
更新清单只扫描 Windows NSIS 安装包
同步构建产物目录说明
kdletters added 1 commit 2026-08-31 15:06:35 +08:00
增加 AGC 一键构建上传命令
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 4m31s
Project CI / Native shell tests (pull_request) Failing after 20m21s
4a66677547
构建完成后自动生成并上传更新清单
通过 ossutil 上传 Windows x64 安装包
保留本机凭据与 OSS 参数配置边界
kdletters added 1 commit 2026-08-31 15:24:56 +08:00
构建前按 OSS 版本递增 AGC patch
Project CI / Repository checks (pull_request) Failing after 8s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Native shell tests (pull_request) Failing after 16m58s
9ecc4eeae8
构建前读取 OSS latest.json 并选择较高版本递增 patch

同步更新 AGC package、Tauri 与 Cargo 版本字段

让一键上传复用版本准备流程并更新发布文档

补充版本计算、配置校验与清单生成测试
kdletters force-pushed codex/agc-update-check from fea7a72246 to 9ecc4eeae8 2026-08-31 15:24:56 +08:00 Compare
kdletters added 1 commit 2026-08-31 15:39:39 +08:00
Merge branch 'master' into codex/agc-update-check
Project CI / Repository checks (pull_request) Successful in 2m41s
Project CI / Backend tests (pull_request) Successful in 7m19s
Project CI / Native shell tests (pull_request) Failing after 16m42s
Project CI / Frontend tests (pull_request) Successful in 3m2s
5c58c4380f
JenkenB reviewed 2026-08-31 15:53:33 +08:00
JenkenB left a comment
Owner

审查 head sha: 5c58c4380f

发现一个错误处理问题:downloadAppUpdate() 在 Tauri 命令失败(例如下载地址不被原生白名单接受、网络失败、大小或 SHA-256 校验失败、保存失败)时会 reject,而 handleDownload() 只有 finally,没有 catch/错误状态。结果是点击“下载更新”后按钮恢复,但用户没有任何失败反馈,浏览器还可能产生未处理 Promise rejection,无法判断是否需要重试。建议捕获异常并显示可访问的错误提示(必要时提供重试),同时覆盖该路径的组件测试。

审查 head sha: 5c58c4380f10c7881d1cabc6a779befffbe14221 发现一个错误处理问题:`downloadAppUpdate()` 在 Tauri 命令失败(例如下载地址不被原生白名单接受、网络失败、大小或 SHA-256 校验失败、保存失败)时会 reject,而 `handleDownload()` 只有 `finally`,没有 `catch`/错误状态。结果是点击“下载更新”后按钮恢复,但用户没有任何失败反馈,浏览器还可能产生未处理 Promise rejection,无法判断是否需要重试。建议捕获异常并显示可访问的错误提示(必要时提供重试),同时覆盖该路径的组件测试。
Owner

downloadAppUpdate 的 rejection 在这里没有被捕获;下载失败时用户无反馈,并可能产生未处理 Promise rejection。请增加错误状态/提示和重试行为。

`downloadAppUpdate` 的 rejection 在这里没有被捕获;下载失败时用户无反馈,并可能产生未处理 Promise rejection。请增加错误状态/提示和重试行为。
JenkenB requested changes 2026-08-31 15:54:01 +08:00
JenkenB left a comment
Owner

PR 230 review head fea7a72246: 阻塞问题:append_jsonl_line_unlocked 已移除 no-follow 与打开后身份校验,普通 OpenOptions::open(path) 会跟随 .agent 下被替换的符号链接,导致 JSONL 追加或尾部修复写入项目外文件。请恢复原有 symlink/hardlink/父目录替换防护。全量 Rust 测试实际 885 passed / 1501 failed。

PR 230 review head fea7a722460ca7808623b78577f1effa118d85eb: 阻塞问题:append_jsonl_line_unlocked 已移除 no-follow 与打开后身份校验,普通 OpenOptions::open(path) 会跟随 .agent 下被替换的符号链接,导致 JSONL 追加或尾部修复写入项目外文件。请恢复原有 symlink/hardlink/父目录替换防护。全量 Rust 测试实际 885 passed / 1501 failed。
Owner

阻塞安全回归:普通 OpenOptions::open(path) 会跟随符号链接;请恢复 O_NOFOLLOW、普通文件/单硬链接校验和打开后 inode/句柄复核,或使用已验证目录句柄的 openat 等价实现。

阻塞安全回归:普通 OpenOptions::open(path) 会跟随符号链接;请恢复 O_NOFOLLOW、普通文件/单硬链接校验和打开后 inode/句柄复核,或使用已验证目录句柄的 openat 等价实现。
kdletters added 1 commit 2026-08-31 17:02:02 +08:00
增加 AGC Windows Jenkins 构建流水线
Project CI / Repository checks (pull_request) Successful in 2m52s
Project CI / Native shell tests (pull_request) Failing after 19m10s
Project CI / Frontend tests (pull_request) Successful in 3m11s
Project CI / Backend tests (pull_request) Successful in 8m14s
0e2bee9fa7
新增 Windows Agent 构建与上传流水线

补充 AGC Jenkins 节点工具链和 OSS 权限约定
kdletters added 1 commit 2026-09-01 10:38:38 +08:00
对齐 AGC Windows 节点标签
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Frontend tests (pull_request) Successful in 3m33s
Project CI / Native shell tests (pull_request) Failing after 12m43s
c4d99a1f35
使用现有 windows 与 win2022 标签调度构建

同步更新 Jenkins 节点文档
kdletters added 1 commit 2026-09-01 11:34:49 +08:00
修复AGC Windows流水线工具路径
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Frontend tests (pull_request) Successful in 3m46s
Project CI / Native shell tests (pull_request) Failing after 5m55s
56aac66f02
为Windows x64构建注入Git、Node、Rust、NSIS和ossutil路径
kdletters added 1 commit 2026-09-01 11:36:36 +08:00
修正AGC Windows流水线环境配置
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Successful in 3m52s
Project CI / Native shell tests (pull_request) Failing after 16m19s
df5ae8f927
通过withEnv注入Windows构建工具路径

覆盖源码检出、依赖安装和构建上传阶段
kdletters added 1 commit 2026-09-01 11:47:06 +08:00
改用显式Git完成AGC检出
Project CI / Native shell tests (pull_request) Failing after 5m28s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m14s
322cc84115
在Windows节点通过sshagent调用已安装的Git可执行文件

保留分支与指定commit校验
kdletters added 1 commit 2026-09-01 11:48:35 +08:00
修复AGC流水线SSH凭据注入
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m22s
Project CI / Native shell tests (pull_request) Failing after 17m40s
5351b5f87c
改用Jenkins凭据绑定支持Windows源码检出

使用显式Git和临时SSH密钥连接Gitea
kdletters added 1 commit 2026-09-01 11:53:08 +08:00
修复Windows构建调用npm
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Successful in 4m6s
Project CI / Native shell tests (pull_request) Failing after 17m52s
bccc969855
在Windows平台使用npm.cmd启动Tauri构建
kdletters added 1 commit 2026-09-01 11:54:57 +08:00
修复Windows命令脚本启动
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Frontend tests (pull_request) Successful in 3m40s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Native shell tests (pull_request) Failing after 16m26s
b913aa9ed3
使用shell模式执行npm.cmd以兼容Windows子进程
kdletters reviewed 2026-09-01 11:56:26 +08:00
kdletters left a comment
Author
Member

审查 head sha: bccc969855

发现 2 个明确问题,详见行内评论。

审查 head sha: bccc9698558a6921cea2a6a797ae72d34c5f2292 发现 2 个明确问题,详见行内评论。
Author
Member

明确问题:downloadAppUpdate 失败时会 reject,但这里没有 catch 或错误状态。网络、白名单、完整性校验或保存失败后按钮恢复却无用户反馈,并可能产生未处理 Promise rejection。建议捕获异常并显示可访问的错误/重试提示,补充失败路径测试。

明确问题:downloadAppUpdate 失败时会 reject,但这里没有 catch 或错误状态。网络、白名单、完整性校验或保存失败后按钮恢复却无用户反馈,并可能产生未处理 Promise rejection。建议捕获异常并显示可访问的错误/重试提示,补充失败路径测试。
Author
Member

安全问题:StrictHostKeyChecking=no 禁用了 SSH 主机身份校验。构建节点无法确认 192.168.35.82 是受信任的 Git 服务器,中间人可提供恶意源码并在 Jenkins 构建/上传阶段执行。建议使用受管控的 known_hosts 或 Jenkins host-key verification strategy 校验固定指纹。

安全问题:StrictHostKeyChecking=no 禁用了 SSH 主机身份校验。构建节点无法确认 192.168.35.82 是受信任的 Git 服务器,中间人可提供恶意源码并在 Jenkins 构建/上传阶段执行。建议使用受管控的 known_hosts 或 Jenkins host-key verification strategy 校验固定指纹。
Author
Member

审查 head sha: b913aa9ed3

发现 2 个明确问题:

  1. 中等:下载失败没有用户可见反馈apps/ai-game-creator-shell/src/components/AppUpdateNotice.tsx:30
    downloadAppUpdate() 的 reject 没有被 catch;handleDownload 只有 finally。网络失败、原生下载命令拒绝、大小/SHA-256 校验失败或保存失败时,界面不会显示错误,且会产生未处理的 Promise rejection。建议增加错误状态,在 catch 中展示可访问的失败提示/重试入口,并补充组件测试。

  2. 高:响应体在大小限制检查前被一次性读入内存apps/ai-game-creator-shell/src-tauri/src/main.rs:84
    response.bytes() 会先缓冲完整响应,只有之后才检查 512 MiB 上限。服务端省略 Content-Length 并发送超大 chunked 响应时,可绕过这段保护并造成客户端内存耗尽。建议使用 bytes_stream() 分块读取,累计超过上限立即中止,并在写临时文件时计算 SHA-256/size。

本次未提交 REQUEST_CHANGES:Gitea 拒绝 PR 作者 kdletters 审查自己的 PR(HTTP 422)。

审查 head sha: b913aa9ed318e4d58df45abcd3f0ce638141bbbd 发现 2 个明确问题: 1. **中等:下载失败没有用户可见反馈**(`apps/ai-game-creator-shell/src/components/AppUpdateNotice.tsx:30`) `downloadAppUpdate()` 的 reject 没有被 catch;`handleDownload` 只有 `finally`。网络失败、原生下载命令拒绝、大小/SHA-256 校验失败或保存失败时,界面不会显示错误,且会产生未处理的 Promise rejection。建议增加错误状态,在 catch 中展示可访问的失败提示/重试入口,并补充组件测试。 2. **高:响应体在大小限制检查前被一次性读入内存**(`apps/ai-game-creator-shell/src-tauri/src/main.rs:84`) `response.bytes()` 会先缓冲完整响应,只有之后才检查 512 MiB 上限。服务端省略 Content-Length 并发送超大 chunked 响应时,可绕过这段保护并造成客户端内存耗尽。建议使用 `bytes_stream()` 分块读取,累计超过上限立即中止,并在写临时文件时计算 SHA-256/size。 本次未提交 REQUEST_CHANGES:Gitea 拒绝 PR 作者 kdletters 审查自己的 PR(HTTP 422)。
kdletters added 1 commit 2026-09-01 12:09:13 +08:00
消除AGC流水线密钥插值警告
Project CI / Repository checks (pull_request) Failing after 8s
Project CI / Frontend tests (pull_request) Successful in 3m42s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Native shell tests (pull_request) Failing after 14m42s
25b4da1ab7
在Windows PowerShell内设置临时Git SSH命令
kdletters added 1 commit 2026-09-01 14:23:06 +08:00
接入Jenkins OSS发布凭据
Project CI / Backend tests (pull_request) Failing after 14s
Project CI / Repository checks (pull_request) Failing after 15s
Project CI / Frontend tests (pull_request) Successful in 4m44s
Project CI / Native shell tests (pull_request) Failing after 17m22s
e746559dc0
通过受保护凭据注入阿里云AccessKey

让Windows x64发布流水线完成安装包和latest.json上传
kdletters added 1 commit 2026-09-01 15:56:19 +08:00
合并master到AGC更新分支
Project CI / Repository checks (pull_request) Successful in 3m16s
Project CI / Frontend tests (pull_request) Successful in 5m7s
Project CI / Backend tests (pull_request) Successful in 7m14s
Project CI / Native shell tests (pull_request) Failing after 15m54s
1ce880c89b
同步master最新代码与文档

保留AGC客户端更新检查文档索引
kdletters added 1 commit 2026-09-01 16:25:56 +08:00
客户端更新下载改为自动安装
Project CI / Repository checks (pull_request) Successful in 3m12s
Project CI / Frontend tests (pull_request) Successful in 3m58s
Project CI / Backend tests (pull_request) Successful in 6m48s
Project CI / Native shell tests (pull_request) Failing after 18m57s
de3dbd330e
下载时显示全屏进度遮罩

更新完成后从临时目录静默安装

关于页支持手动检查更新

构建流水线支持指定版本号
Author
Member

审查 head sha: de3dbd330e

发现 1 个明确的高风险问题:

  • 高:OSS 凭据通过命令行参数泄露apps/ai-game-creator-shell/scripts/release-upload.mjs:23)。runOssutil()AGC_OSS_ACCESS_KEY_SECRET 放入 spawnSync 的 argv;Jenkins/同机用户/进程审计可能读取完整命令行,从而泄露 OSS Secret。这也与发布文档所述“不能写入命令行参数”矛盾。建议改用 ossutil 配置文件、标准输入或其他不会出现在 argv 的认证方式,并增加 CI 检查确认进程命令行不包含密钥。

尝试提交行内 REQUEST_CHANGES 评审,但 Gitea 拒绝作者 kdletters 审查自己的 PR(HTTP 422),因此本次通过总评论回写。

审查 head sha: de3dbd330e96b8ce29c3355bfbe7d348c87179c5 发现 1 个明确的高风险问题: - **高:OSS 凭据通过命令行参数泄露**(`apps/ai-game-creator-shell/scripts/release-upload.mjs:23`)。`runOssutil()` 将 `AGC_OSS_ACCESS_KEY_SECRET` 放入 `spawnSync` 的 argv;Jenkins/同机用户/进程审计可能读取完整命令行,从而泄露 OSS Secret。这也与发布文档所述“不能写入命令行参数”矛盾。建议改用 ossutil 配置文件、标准输入或其他不会出现在 argv 的认证方式,并增加 CI 检查确认进程命令行不包含密钥。 尝试提交行内 REQUEST_CHANGES 评审,但 Gitea 拒绝作者 kdletters 审查自己的 PR(HTTP 422),因此本次通过总评论回写。
kdletters added 1 commit 2026-09-01 17:01:40 +08:00
修复更新下载加载动画
Project CI / Frontend tests (pull_request) Successful in 3m22s
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Native shell tests (pull_request) Failing after 19m10s
72d972c37a
为下载遮罩加载图标添加持续旋转动画
kdletters added 1 commit 2026-09-01 17:04:56 +08:00
修复更新安装提权启动
Project CI / Frontend tests (pull_request) Successful in 4m10s
Project CI / Repository checks (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Native shell tests (pull_request) Failing after 18m3s
9eae0a0a87
通过 Windows UAC 启动 NSIS 静默安装

释放临时安装包句柄后再提交并启动

同步更新客户端升级技术方案
kdletters added 1 commit 2026-09-01 18:11:54 +08:00
修复客户端更新流程与设置布局
Project CI / Repository checks (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / Frontend tests (pull_request) Failing after 3m49s
Project CI / Native shell tests (pull_request) Failing after 16m5s
51f19f3b72
补充安装完成后的客户端自动重启

修正关于页检查更新按钮被裁切

同步更新提权安装流程文档
kdletters reviewed 2026-09-01 18:21:24 +08:00
kdletters left a comment
Author
Member

审查 head sha: 51f19f3b72

结论:未发现明确问题。按 base 80f34d062d 审查了当前 head 的差异。实际验证:Node release 脚本测试 4/4 通过;head 工作树 cargo check 通过(仅有既有 warnings)。前端 Vitest/typecheck 在独立 head 工作树无法运行,原因是该工作树未安装 node_modules,报错为找不到 vitest/vite client 类型;未将其作为代码问题。

审查 head sha: 51f19f3b72fedcd5eaa62bf441b8ba78fb6c267f 结论:未发现明确问题。按 base 80f34d062d4578678359171682851e55c5f00fc2 审查了当前 head 的差异。实际验证:Node release 脚本测试 4/4 通过;head 工作树 cargo check 通过(仅有既有 warnings)。前端 Vitest/typecheck 在独立 head 工作树无法运行,原因是该工作树未安装 node_modules,报错为找不到 vitest/vite client 类型;未将其作为代码问题。
kdletters added 1 commit 2026-09-01 19:12:43 +08:00
Merge branch 'master' into codex/agc-update-check
Project CI / Repository checks (pull_request) Failing after 1m45s
Project CI / Frontend tests (pull_request) Successful in 4m0s
Project CI / Backend tests (pull_request) Successful in 7m14s
Project CI / Native shell tests (pull_request) Failing after 16m51s
e016e2a8b9
kdletters merged commit a7e810b999 into master 2026-09-01 19:23:56 +08:00
kdletters deleted branch codex/agc-update-check 2026-09-01 19:23:56 +08:00
Sign in to join this conversation.