diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx index 143026428..364d7f16c 100644 --- a/apps/ai-game-creator-shell/src/App.tsx +++ b/apps/ai-game-creator-shell/src/App.tsx @@ -81,10 +81,10 @@ import type { MemoryScope, MemoryWriteMode, OpenCanvasProjectResult, - PlanGddDecisionAction, - PlanGddStateViewV1, PendingCommand, PendingUiConfirmation, + PlanGddDecisionAction, + PlanGddStateViewV1, ProjectPermissionPolicy, ProjectPermissionPolicyView, SyncCanvasProjectAssetsResult, @@ -721,7 +721,14 @@ export function App({ }, [hydratePlanGddState, localProject?.projectPath]); useEffect(() => { - if (!localProject?.projectPath || !projectSupervisorRuntime) { + // 存在性判据故意走 `status`(必选字段,为 `undefined` 当且仅当 runtime 为 null)而不是整个 + // 对象:依赖里只挖 phase/status/updatedAt 三个标量,是为了只在监工状态真的动了时 + // 重灌。把 `projectSupervisorRuntime` 本体写进依赖会让每一轮轮询新建的对象身份都触发一次 + // hydrate,白烧 IPC。 + if ( + !localProject?.projectPath || + projectSupervisorRuntime?.status === undefined + ) { return; } void hydratePlanGddState(localProject.projectPath); diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectWorkspaceChatPane.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectWorkspaceChatPane.tsx index 207a5fe30..4500e1a03 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectWorkspaceChatPane.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectWorkspaceChatPane.tsx @@ -23,10 +23,10 @@ import type { LocalProjectCheckpointSummary, LocalProjectFileEntry, MemoryScope, - PlanGddDecisionAction, - PlanGddStateViewV1, PendingCommand, PendingUiConfirmation, + PlanGddDecisionAction, + PlanGddStateViewV1, } from '../../app/types'; import type { ProjectAgentResultSummary } from '../../view/project-development'; import { @@ -47,12 +47,12 @@ import { taskGroupLabels, taskStatusLabels, } from '../project-summary/projectSummary'; +import { GddApprovalCard } from './GddApprovalCard'; import { pendingCommandDetail, pendingCommandTitle, } from './pendingCommandPresentation'; import { resolvePendingCommandProjectPath } from './projectCommandPolicy'; -import { GddApprovalCard } from './GddApprovalCard'; type ProjectWorkspaceChatPaneProps = { agentRunStatus: string;