From c229a353be69650386a7820eef9f8c5281d5db87 Mon Sep 17 00:00:00 2001 From: Linghong Date: Tue, 15 Sep 2026 18:12:10 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AD=96=E5=88=92?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E8=BE=93=E5=85=A5=E6=8F=90=E7=A4=BA=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 策划模式保留输入框但隐藏占位文案 补充策划模式输入框显示回归测试 --- .../project-workspace/ProjectSupervisorView.tsx | 4 +++- .../tests/appSurface/plan-gdd.suite.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx index 655d5cef5..fb292db68 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx @@ -491,7 +491,9 @@ export function ProjectSupervisorView({ placeholder={ directCodex ? '告诉陶泥儿接下来要做什么,或输入 @ 选择资源' - : '告诉项目总控接下来要做什么,或输入 @ 选择资源' + : planningSurfaceActive + ? '' + : '告诉项目总控接下来要做什么,或输入 @ 选择资源' } onChange={onChatInputChange} /> diff --git a/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts b/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts index 510d73029..310faa120 100644 --- a/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts +++ b/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts @@ -577,6 +577,21 @@ export function registerPlanGddApprovalTests() { expect(screen.queryByText(/计划 \d+\/\d+/)).toBeNull(); }); + it('keeps the chat composer but hides its placeholder in the planning lane', async () => { + const harness = createProjectSupervisorRuntimeHarness({ + planningV2Result: planningV2WorkingResult(), + }); + await mountPlanningSurface(harness); + + expect(screen.getByRole('textbox', { name: '项目需求' })).not.toBeNull(); + expect( + screen.queryByText('告诉策划 Agent 接下来要做什么,或输入 @ 选择资源'), + ).toBeNull(); + expect( + screen.queryByText('告诉项目总控接下来要做什么,或输入 @ 选择资源'), + ).toBeNull(); + }); + it('still surfaces the clarification card on the planning lane', async () => { // 澄清卡是 V2 策划链路唯一需要用户动手的交互面之一。 const harness = createProjectSupervisorRuntimeHarness({ -- 2.52.0 From d8a167e0f3bea4e58626f2c01564c832dcfe1da1 Mon Sep 17 00:00:00 2001 From: Linghong Date: Tue, 15 Sep 2026 18:33:37 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AD=96=E5=88=92?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=A6=96=E6=9D=A1=E5=AF=B9=E8=AF=9D=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=94=81=E7=AB=9E=E4=BA=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 项目对话保存改为使用有界等待项目写锁 --- apps/ai-game-creator-shell/src-tauri/src/commands.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/commands.rs b/apps/ai-game-creator-shell/src-tauri/src/commands.rs index 6b00b2ff1..9de008de2 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/commands.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/commands.rs @@ -5170,7 +5170,12 @@ pub(crate) fn create_game_creator_agent_session( let root = Path::new(project_path.trim()); enforce_project_permission_policy(root, "conversation.read")?; enforce_project_permission_policy(root, "conversation.write")?; - let _lock = acquire_project_write_lock(root, "conversation.write")?; + // 首轮策划消息可能紧跟项目初始化写入到达;对话保存应等待这段短暂的 + // 项目锁竞争,避免把可恢复的初始化竞态直接显示成保存失败。 + let _lock = acquire_game_creator_agent_runtime_project_write_lock_with_wait( + root, + "conversation.write", + )?; create_game_creator_agent_session_at(root, agent_id.trim(), title.trim()) } -- 2.52.0