修复 AGC 异步操作恢复闭环 (#346)
## 变更内容 AGC 登录、Runner 会话、最近项目检查和首页自动创建原先各自维护异步状态,响应体卡住、单目录变慢或切页会导致按钮长期 busy、项目列表整体不可用或重复创建项目。本 PR 将这些入口收口到可恢复的生命周期边界: - 认证响应体读取增加独立超时,refresh singleflight 在失败后释放; - Runner 会话安装/清除移到 blocking worker,登录/退出增加 45 秒 UI fence; - 最近项目逐项检查并设置单项目超时,已完成行不受其它慢目录阻塞; - 首页自动创建锁提升到 WorkspaceLauncher,切页后仍防重并保留状态; - 新增异步闭环技术方案、body 卡住测试、逐行项目测试和跨页创建测试。 ## 验证 - `npm --prefix apps/ai-game-creator-shell run typecheck` - `npm --prefix apps/ai-game-creator-shell exec -- vitest run tests/clientHttp.test.ts tests/clientApi.test.ts tests/recentProjectsModel.test.ts --reporter=dot` - `npm --prefix apps/ai-game-creator-shell exec -- vitest run tests/appSurface.test.ts --reporter=dot` - `cargo check --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml` - `npm run check:doc-index` - `npm run check:encoding` - `git diff --check` `appSurface.test.ts` 390/390 通过;保留仓库既有 act/jsdom media warning。本 PR 未触发真实 Provider 或发布安装包。 Reviewed-on: #346 Co-authored-by: kdletters <kdletters@qq.com> Co-committed-by: kdletters <kdletters@qq.com>
This commit was merged in pull request #346.
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
- [LLM 累计额度结算](./technical/【技术方案】LLM累计额度结算-2026-09-05.md):Router 累计额度、首次基线与原子钱包结算。
|
||||
|
||||
- [AI 游戏创作智能体 App 实施计划](./technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md):当前 DirectProject、受控语义工具、UI workflow、资源和运行时合同。
|
||||
- [AGC 异步操作可恢复闭环](./【技术方案】AGC异步操作可恢复闭环-2026-09-14.md):认证响应体、最近项目检查和首页自动创建的超时、逐项恢复与跨页防重合同。
|
||||
- [策划会话 Runtime V2 接入与旧链路退役方案](./technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md):新单 Agent 策划会话、GDD 策略、未来 MCP/Skill 兼容插槽、阶段任务与退役验收合同。
|
||||
- [DirectProject Codex 原始历史与异常恢复](<./technical/【技术方案】DirectProject Codex原始历史与异常恢复-2026-09-04.md>):原始 Responses item 持久化、线程注入与异常回合收尾。
|
||||
- [DirectProject 客户端 Skill 与 MCP 扩展导入方案](./technical/【技术方案】DirectProject客户端Skill与MCP扩展导入方案-2026-08-31.md):客户端扩展导入、按独立 Skill/MCP 拆分、命名、启用和启动时注入边界。
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# 【技术方案】AGC 异步操作可恢复闭环
|
||||
|
||||
更新时间:`2026-09-14`
|
||||
|
||||
## 目标
|
||||
|
||||
让 AGC 的认证、最近项目检查和首页自动创建在响应体卡住、单目录慢、页面切换或操作迟到时仍然可观察、可重试且不会重复创建或覆盖当前项目。
|
||||
|
||||
## 非目标
|
||||
|
||||
- 本轮不改变认证接口、Runner 协议、SpacetimeDB schema 或 External API。
|
||||
- 不处理环境中其它 worktree 的进程;运行环境清理需单独按进程归属执行。
|
||||
- 不把 UI 测试警告全部清零,除非它们阻碍本轮新增行为验证。
|
||||
|
||||
## 入口与边界
|
||||
|
||||
- 用户/系统入口:AGC 登录恢复、登录/验证码/退出、首页最近项目、首页做游戏/做素材/做方案。
|
||||
- 涉及模块:`clientHttp`、`clientAuth`、`AuthenticatedClient`、最近项目 controller/model、`useHomeProjectCreation`、`HomeView`。
|
||||
- 正式状态来源:认证 token 与 platform session、Tauri 项目 manifest;前端操作状态仅用于防重和恢复提示。
|
||||
|
||||
## 必须成立的行为
|
||||
|
||||
1. HTTP 响应头已返回但响应体未结束时,认证请求在有界时间内失败并释放 refresh singleflight;下一次重试必须发起新请求。
|
||||
2. 最近项目逐项独立检查;单项超时/失败只影响该行,已完成且可打开的项目立即可操作。
|
||||
3. 首页自动创建状态由 `WorkspaceLauncher` 生命周期持有;切页期间仍防重,迟到结果不能覆盖用户已打开的其它项目。
|
||||
4. 认证恢复和 Runner 连接继续有明确超时、错误和重试入口;本地 Runner 会话安装/清除的阻塞工作不得占用 Tauri 窗口线程。
|
||||
|
||||
## 契约与迁移
|
||||
|
||||
不新增公开 API、DTO、schema 或持久化字段。Runner command 协议保持不变。
|
||||
|
||||
## 验收标准与证据
|
||||
|
||||
| 条款 | 验收方式 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| 响应体超时 | client auth/http 定向测试 | body 卡住抛出稳定超时,第二次 refresh 请求计数为 2 |
|
||||
| 最近项目独立完成 | model/controller 定向测试或 appSurface 场景 | A 完成时可打开,B 继续检查 |
|
||||
| 首页创建跨页防重 | appSurface 场景 | 切页返回后按钮仍禁用,迟到创建不覆盖已有项目 |
|
||||
| Runner 会话不阻塞窗口 | Rust 编译检查与登录/退出 UI fence | command 使用 blocking worker,前端使用 45 秒可恢复超时 |
|
||||
| 现有行为不回归 | typecheck、AGC 定向测试、编码和 diff 检查 | 命令输出 |
|
||||
|
||||
## 未决问题与决策
|
||||
|
||||
Runner 同步 Tauri command 的窗口线程影响需要通过当前 Rust command 注册与调用链复核;若要改为异步 command,应单独补 Rust 线程/取消语义测试,不在未验证前引入表面异步包装。
|
||||
Reference in New Issue
Block a user