优化首页建项流程:AI 项目命名改为创建后异步执行 #599
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
首页自动创建游戏工作区时,当前会先同步调用 AI 生成项目名称,等命名请求返回后才真正创建工作区。
用户点击「开启创作」后页面长时间停留在「正在创建工作区」,创建耗时被无关的项目命名请求放大。截图中已出现该现象。
代码证据
当前链路位于:
apps/ai-game-creator-shell/src/features/app-shell/useHomeProjectCreation.tssuggestAutomaticProjectName()在创建前被awaitcreate_automatic_local_game_projectapps/ai-game-creator-shell/src-tauri/src/commands/desktop.rsapps/ai-game-creator-shell/src-tauri/src/commands.rscreate_automatic_local_game_project_at()已支持未传名称时使用兜底名称rename_local_game_project()已提供项目改名基础能力当前命名失败会回退默认名称,但回退发生在等待请求结束之后,不能解决正常请求或超时请求造成的创建延迟。
原因
项目创建与项目命名被绑定成串行流程:
项目名称不是创建工作区、导入附件或发起首轮创作的前置条件,因此不应阻塞建项主链路。
实施方案
验收标准
create_automatic_local_game_project不再等待suggest_automatic_project_name返回。问题原因
首页「开启创作」的建项链路把 AI 项目命名
await在创建工作区之前:await suggest_automatic_project_name(宿主侧最长 15s 超时,正常请求同样占时);create_automatic_local_game_project。项目名称并不是创建工作区、导入附件或发起首轮创作的前置条件,这一步串行让用户停在「正在创建工作区」上,创建耗时被一个无关的命名请求放大。
打算进行的更改 / 实现思路
create_automatic_local_game_project固定传name: null,走宿主现有兜底名(GameAgent 项目 <8 位短 id>/策划项目 <8 位短 id>)。entrySettled)之后再回填当前项目上下文与最近项目行的目录重检,避免被进项目的兜底上下文覆盖。rename_local_game_project_if_unchanged(projectPath, expectedProjectId, expectedName, name):只有「项目 ID 相符」且「当前名称仍是本次创建的兜底名」才落盘改名;用户已手动改名、项目 ID 不符、名称未变一律跳过(renamed: false,不写盘)。与既有rename_local_game_project同口径,改名是簿记写入、不推进项目 revision。落地情况
e3c91c4e2(分支fix/home-project-naming-async),PR #606。src-tauri/src/commands.rs(新增条件改名命令 + 5 例单测)、src-tauri/src/desktop.rs(注册新命令 1 行)、src/features/app-shell/useHomeProjectCreation.ts(并行建项 + 后台回填)、WorkspaceLauncher.tsx(注入最近项目重检)、src/app/types.ts(结果类型)、tests/homeProjectNamingAsync.test.tsx(新增 9 例时序测试)、tests/appSurface/home.suite.ts(客户端级用例 + 既有附件用例改为name: null),另更新实施计划专题 / decision-log / pitfalls。conditional_project_rename_tests5 passed;前端闸门时序用例 9 passed;AGC 全量套件 1910 passed / 17 skipped;cargo check、cargo fmt --check、npm run agc:typecheck、npm run check:encoding、git diff --check全过。