新增Direct回合跨页面生命周期规范并固定快照失败重试3次
Project CI / AI game creator shell Rust shard 4/4 (push) Successful in 5m13s
Project CI / AI game creator shell Rust shard 2/4 (push) Successful in 5m19s
Project CI / AI game creator shell Rust shard 1/4 (push) Successful in 5m33s
Project CI / AI game creator shell Rust shard 3/4 (push) Successful in 5m45s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m33s
Project CI / AI game creator shell Rust crates (push) Successful in 2m57s
Project CI / Frontend tests (push) Successful in 4m7s
Project CI / Repository checks (push) Successful in 3m15s
Project CI / Native shell tests (push) Successful in 6m49s
Project CI / Backend tests (push) Successful in 7m55s
Project CI / AI game creator shell web tests (push) Successful in 2m52s
Project CI / AI game creator shell Rust shard 4/4 (push) Successful in 5m13s
Project CI / AI game creator shell Rust shard 2/4 (push) Successful in 5m19s
Project CI / AI game creator shell Rust shard 1/4 (push) Successful in 5m33s
Project CI / AI game creator shell Rust shard 3/4 (push) Successful in 5m45s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m33s
Project CI / AI game creator shell Rust crates (push) Successful in 2m57s
Project CI / Frontend tests (push) Successful in 4m7s
Project CI / Repository checks (push) Successful in 3m15s
Project CI / Native shell tests (push) Successful in 6m49s
Project CI / Backend tests (push) Successful in 7m55s
Project CI / AI game creator shell web tests (push) Successful in 2m52s
新增《Direct回合跨页面生命周期与运行中项目可见性》里程碑与实施计划,约定离开项目页面不终止回合、重新进入需恢复忙碌态与进度并以快照 sequence 续接 主规范补充 Direct 回合跨页面行为合同、左上角运行中项目面板契约与验收标准 读取活动回合快照失败改为最多重试 3 次,3 次全部失败才向用户告知失败原因,且不得改写成业务、权限或审批结论
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# 【实施计划】Direct回合跨页面生命周期与运行中项目可见性-2026-09-15
|
||||
|
||||
Version: 1
|
||||
Status: in-progress
|
||||
Date: 2026-09-15
|
||||
Milestone: `【里程碑】Direct回合跨页面生命周期与运行中项目可见性-2026-09-15.md`
|
||||
|
||||
## 固定契约
|
||||
|
||||
只读快照命令(Tauri 本地命令,`src-tauri/src/agent/direct_runtime.rs`):
|
||||
|
||||
- `list_game_creator_direct_active_turns() -> Vec<GameCreatorDirectActiveTurn>`
|
||||
- 字段(camelCase):`projectPath`、`turnId`、`status`、`activity`(可空)、`startedAt`、`updatedAt`、`sequence`
|
||||
- `status` 取值集合与既有 Direct 回合事件一致:`accepted` / `running` / `streaming` / `finalizing` / `completed` / `failed`
|
||||
|
||||
身份锁与快照共用同一份进程内注册表;注册表条目在回合进入时写入 `startedAt`,在每次回合事件发射时更新 `status` / `activity` / `sequence` / `updatedAt`,在回合结束(guard drop)时移除。
|
||||
|
||||
## 代码边界
|
||||
|
||||
- `apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime.rs`:注册表结构扩展、快照读写、新命令、Rust 定向测试
|
||||
- `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/entrypoints.rs`:事件发射时投影到注册表
|
||||
- `apps/ai-game-creator-shell/src-tauri/src/main.rs`:命令注册
|
||||
- `apps/ai-game-creator-shell/src/App.tsx`:项目打开时重连、忙碌态与进度恢复、面板挂载
|
||||
- 面板组件(新文件,落在既有 feature 目录下)+ 对应测试
|
||||
- `apps/ai-game-creator-shell/src/features/agent-runtime/model.ts` + 测试:报错归类修正
|
||||
|
||||
## 修改顺序
|
||||
|
||||
1. Rust:扩展活动回合注册表并暴露只读快照命令,配定向用例(进入 / 进度 / 终态移除 / 多项目并存)。
|
||||
2. 前端:抽出并按契约接入快照读取(失败最多重试 3 次,前两次失败第三次成功不报错;3 次全部失败才把失败原因告诉用户),实现"重新进入项目 → 恢复忙碌态与进度 → 以快照 sequence 续接 → 阻止并发提交"。
|
||||
3. 前端:在左上角空白区域挂载"正在运行的项目"面板,复用既有组件与设计 token。
|
||||
4. 报错归类:按审计结论修正会误导的映射,逐条加回归用例;真实权限拒绝保持原提示。快照重试 3 次的成功/失败两态各加一条用例。
|
||||
5. 文档:主规范与共享记忆同步;里程碑验收后删除临时计划文件。
|
||||
|
||||
## 验证命令
|
||||
|
||||
- `cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_taonier_active -- --test-threads=1`(名称按实际用例调整)
|
||||
- `npx vitest run apps/ai-game-creator-shell/tests/agentRuntimeModel.test.ts`
|
||||
- `npx vitest run apps/ai-game-creator-shell/tests/appSurface.test.ts`
|
||||
- 面板组件测试文件单独一条 vitest
|
||||
- 快照重试用例(2 次失败 1 次成功不报错、3 次失败报失败原因)
|
||||
- `npm --prefix apps/ai-game-creator-shell run typecheck`
|
||||
- `npm run check:encoding`、`git diff --check`
|
||||
|
||||
## 风险与回滚点
|
||||
|
||||
- 快照命令暴露项目绝对路径给前端:与现有 `projectPath` 口径一致,不得额外泄露配置或 token;命令必须是只读、无副作用。
|
||||
- 续接基线 `sequence` 若取错,会让重新进入后的进度事件被丢弃或重复消费;取错时回滚"重连"部分,保留只读面板。
|
||||
- 忙碌态恢复不得与既有 `chatAgentBusy` 的失败清理互相覆盖;出现卡死忙碌态时优先回滚重连,不影响身份锁与后台回合本体。
|
||||
- 面板若在窄窗口挤压主内容,先按既有响应式约定隐藏面板,不改主布局。
|
||||
- 重试必须有界且串行:并发重试会放大 IPC 与注册表读取,也会让"第几次失败"失去唯一含义。
|
||||
- 报错归类修正若与既有断言冲突,先确认断言锁的是"正确行为"还是历史错误文案,再决定改断言还是改实现。
|
||||
@@ -0,0 +1,34 @@
|
||||
# 【里程碑】Direct回合跨页面生命周期与运行中项目可见性-2026-09-15
|
||||
|
||||
Version: 1
|
||||
Status: in-progress
|
||||
Date: 2026-09-15
|
||||
Parent Spec: `docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`「2026-09-15 Direct 回合跨页面生命周期与运行中项目可见性」
|
||||
|
||||
## 目标
|
||||
|
||||
离开项目界面不再等于"回合消失":后台继续跑的 Direct 回合必须能被前端重新发现并续接进度,同一项目在回合结束前不允许再发起第二条付费回合;壳层左上角提供"正在运行的项目"面板,列出当前确有在跑回合的项目并可点击进入。
|
||||
|
||||
## 边界
|
||||
|
||||
- 只读投影:新增命令只读当前 GUI 进程内的活动回合注册表,不写项目文件、不新增持久化账本。
|
||||
- 不新增取消入口;不改变身份锁排他性、项目写锁语义、计费与幂等身份。
|
||||
- 不新增跨端契约(Tauri 本地命令,不进 `packages/shared` / `shared-contracts` / OpenAPI)。
|
||||
- 面板与重连共用同一份快照,不各自维护第二份"谁在跑"的真相。
|
||||
- 报错归类修正只处理"说明与真相无关"的情况,不放宽身份锁、不吞真实失败。
|
||||
- 读取活动回合快照失败时最多重试 3 次,重试次数固定,不做无限重试或并发放大;只有 3 次全部失败才把失败原因告诉用户。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- 重新进入有在跑回合的项目后:界面进入"正在处理"、显示最近一次进度、以快照 `sequence` 续接后续事件;回合结束前提交第二条需求不会真正发起第二条付费回合。
|
||||
- 回合结束(completed / failed)后:忙碌态解除、可以再次发送;不重复追加助手消息。
|
||||
- 无在跑回合的项目:行为与今天一致(可正常发送,不出现额外提示或阻塞)。
|
||||
- 左上角面板:列出所有在跑项目,按 `startedAt` 升序,显示项目名(缺失时回退目录名)与状态/时长,点击进入对应项目;没有在跑回合时不渲染面板外壳。
|
||||
- 快照读取失败最多重试 3 次:前两次失败第三次成功时不出现用户可见失败;连续 3 次失败后才出现一次带失败原因的提示,且不阻断发送、不清空既有状态、不显示成业务失败或权限结论。
|
||||
- 已修的错误映射不回归:`direct-codex-turn-already-running:` 与历史同义中文正文都归一到"仍在处理这个项目的上一条需求";真正的 `项目权限策略拒绝执行:<command>` 仍显示审批提示。
|
||||
|
||||
## 未决事项
|
||||
|
||||
- "离开页面即取消"仍是未采纳的另一种语义;本轮只实现后台继续。
|
||||
- 应用重启后的"未完成回合"恢复不在本里程碑范围(回合注册表是进程内状态);若未来要求跨重启恢复,需要另立里程碑并定义持久化身份与对账合同。
|
||||
- 面板是否需要展示非 Direct(专业 Agent / 策划 Agent)运行中的项目,本轮不做;先把 Direct 回合这条事实链路做正确。
|
||||
Reference in New Issue
Block a user