修复策划回复重复播放并保留伪流式 #501

Merged
lhk229 merged 4 commits from fix/design-agent-fe into master 2026-09-23 19:19:26 +08:00
Member

按消息 ID 合并实时正文与正式消息,保留逐步显示进度
分离请求收尾与动画结束,隔离旧回合事件及异步返回
独立展示工具状态,保留 Provider 重试的正文重置语义
补充重复终态、整块回复、多消息及回合隔离回归测试
同步更新策划展示规范与排障记录

按消息 ID 合并实时正文与正式消息,保留逐步显示进度 分离请求收尾与动画结束,隔离旧回合事件及异步返回 独立展示工具状态,保留 Provider 重试的正文重置语义 补充重复终态、整块回复、多消息及回合隔离回归测试 同步更新策划展示规范与排障记录
lhk229 added 1 commit 2026-09-23 18:38:47 +08:00
修复策划回复重复播放并保留伪流式
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m28s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m59s
Project CI / Backend tests (pull_request) Successful in 5m1s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 8m7s
Project CI / Native shell tests (pull_request) Successful in 6m17s
Project CI / Frontend tests (pull_request) Successful in 2m9s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 9m29s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m42s
Project CI / Repository checks (pull_request) Successful in 2m18s
688cf7a971
按消息 ID 合并实时正文与正式消息,保留逐步显示进度
分离请求收尾与动画结束,隔离旧回合事件及异步返回
独立展示工具状态,保留 Provider 重试的正文重置语义
补充重复终态、整块回复、多消息及回合隔离回归测试
同步更新策划展示规范与排障记录
Author
Member

代码审查(master...fix/design-agent-fe,单提交 688cf7a)

总体结论

改动方向正确,可以合并。核心收益:正文动画按 messageId 与正式消息共用一个气泡,重复终态(状态事件 + 命令返回)幂等,不再出现「正式回复旁重播一遍后消失」;请求收尾与动画结束解耦,旧回合的迟到事件和 finally 不会污染新回合。已核对后端 design_runtime.rs:805-897,所有 text 事件均携带 message_id,前端对 payload.messageId 的强依赖成立;applyDesignViewmessageId: message.id 的映射(App.tsx:514)与动画键一致。

本地验证:tests/designReplyAnimation.test.tsx 2 项通过;appSurface.test.ts -t "Design Agent" 8 项通过。

发现的问题

1.(建议修复)项目切换中途回合可能导致 chatAgentBusy 卡死

回合进行中切换项目时,resetChatState(App.tsx:1294-1307)清空了 designAgentTurnRef 但不清 chatAgentBusy;旧 invoke 返回后 finallyisCurrentDesignTurn 为 false 跳过清理(App.tsx:610-613,decide_design_phase 路径同理 App.tsx:2269-2276)。chatAgentBusy 只剩 applyDesignView 里的 setChatAgentBusy(view.running) 会复位(App.tsx:539)——若新项目没有可 hydrate 的策划会话(hydrateDesignAgentSession 返回 null,App.tsx:571-573),忙碌态无人清除,输入框和提交永久禁用(App.tsx:2146、2307)。旧实现 finally 无条件清 busy,这是本次收尾隔离引入的一个窄回归。建议在 resetChatState 里补 setChatAgentBusy(false)(该函数本就把 turnRef 置空,语义一致)。

次要观察(不阻塞)

  • receiveText 对已持久化条目直接忽略(useDesignReplyAnimation.ts:38-40),与后端「空文本仅在 attempt 开始、消息持久化之前发出」的顺序吻合;注释已说明,逻辑正确。
  • 未持久化动画气泡先追加在列表末尾、持久化后回到会话原位(PlanningChatView.tsx:181-191),同 key 复用 DOM,位置跳变可接受。
  • 迟到 reasoning 仍按原回合接收(设计如此,事件区注释已说明),与旧行为一致。

覆盖确认

文档同步符合仓库规范(实施计划 + pitfalls 均已更新);新增回归覆盖重复终态、整块返回、工具间多条正文、重试空串、旧请求不能结束新回合,与 PR 描述一致。

## 代码审查(master...fix/design-agent-fe,单提交 688cf7a) ### 总体结论 改动方向正确,可以合并。核心收益:正文动画按 `messageId` 与正式消息共用一个气泡,重复终态(状态事件 + 命令返回)幂等,不再出现「正式回复旁重播一遍后消失」;请求收尾与动画结束解耦,旧回合的迟到事件和 `finally` 不会污染新回合。已核对后端 `design_runtime.rs:805-897`,所有 `text` 事件均携带 `message_id`,前端对 `payload.messageId` 的强依赖成立;`applyDesignView` 中 `messageId: message.id` 的映射(App.tsx:514)与动画键一致。 本地验证:`tests/designReplyAnimation.test.tsx` 2 项通过;`appSurface.test.ts -t "Design Agent"` 8 项通过。 ### 发现的问题 **1.(建议修复)项目切换中途回合可能导致 `chatAgentBusy` 卡死** 回合进行中切换项目时,`resetChatState`(App.tsx:1294-1307)清空了 `designAgentTurnRef` 但不清 `chatAgentBusy`;旧 invoke 返回后 `finally` 因 `isCurrentDesignTurn` 为 false 跳过清理(App.tsx:610-613,`decide_design_phase` 路径同理 App.tsx:2269-2276)。`chatAgentBusy` 只剩 `applyDesignView` 里的 `setChatAgentBusy(view.running)` 会复位(App.tsx:539)——若新项目没有可 hydrate 的策划会话(`hydrateDesignAgentSession` 返回 null,App.tsx:571-573),忙碌态无人清除,输入框和提交永久禁用(App.tsx:2146、2307)。旧实现 `finally` 无条件清 busy,这是本次收尾隔离引入的一个窄回归。建议在 `resetChatState` 里补 `setChatAgentBusy(false)`(该函数本就把 turnRef 置空,语义一致)。 ### 次要观察(不阻塞) - `receiveText` 对已持久化条目直接忽略(useDesignReplyAnimation.ts:38-40),与后端「空文本仅在 attempt 开始、消息持久化之前发出」的顺序吻合;注释已说明,逻辑正确。 - 未持久化动画气泡先追加在列表末尾、持久化后回到会话原位(PlanningChatView.tsx:181-191),同 key 复用 DOM,位置跳变可接受。 - 迟到 reasoning 仍按原回合接收(设计如此,事件区注释已说明),与旧行为一致。 ### 覆盖确认 文档同步符合仓库规范(实施计划 + pitfalls 均已更新);新增回归覆盖重复终态、整块返回、工具间多条正文、重试空串、旧请求不能结束新回合,与 PR 描述一致。
lhk229 added 1 commit 2026-09-23 19:03:54 +08:00
补全聊天作用域重置时的忙碌态清理
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
2c778fb027
重置聊天状态时同步清空 chatAgentBusy,保留旧请求的回合归属检查。

同步更新策划会话的作用域清理约定。
lhk229 added 1 commit 2026-09-23 19:04:34 +08:00
Merge branch 'master' into fix/design-agent-fe
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m19s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 57s
Project CI / Backend tests (pull_request) Successful in 5m11s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m33s
Project CI / Native shell tests (pull_request) Successful in 6m43s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 9m7s
Project CI / Frontend tests (pull_request) Successful in 3m1s
Project CI / Repository checks (pull_request) Successful in 3m23s
Project CI / AI game creator shell web tests (pull_request) Failing after 2m37s
efbfc8085d
lhk229 self-assigned this 2026-09-23 19:06:04 +08:00
lhk229 added 1 commit 2026-09-23 19:19:14 +08:00
合并主线更新并保留双方排障记录
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m24s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m1s
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
248003a445
合并 origin/master 的上传续传、标题栏弹窗及测试更新。

解决排障文档冲突,保留策划回复与标题栏问题记录。
lhk229 merged commit 9bd4a1734c into master 2026-09-23 19:19:26 +08:00
lhk229 deleted branch fix/design-agent-fe 2026-09-23 19:20:03 +08:00
Sign in to join this conversation.