From 04db93faaba492237e44d5c614231faeb464e2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 21 Sep 2026 00:29:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E7=94=9F=E6=88=90=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E3=80=8C=E6=8F=90=E4=BA=A4=E8=A2=AB=E6=8B=92=20+=20?= =?UTF-8?q?=E8=8D=89=E7=A8=BF=E5=BD=92=E5=B1=9E=E3=80=8D=E5=8A=A0=20TODO?= =?UTF-8?q?=EF=BC=88=E5=8F=AA=E7=95=99=E6=A0=87=E8=AE=B0=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E4=B8=BA=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `ResourceCanvasGenerationPanelView.submit()` 加 `TODO(resource-generation-panel-contract)`:说明 `onSubmit` 只返回 `void` 导致宿主同步拒绝时草稿没人接走的缺口,以及「`onSubmit` 回报受理结果、 只有受理成功才置位 `draftReleased` 并关闭」的修法 - `ResourceCanvasAssetGenerationPanelView.submit()` 加同名 TODO:图片类面板与音频面板是同一份 契约,要改一起改 - `index.tsx` 的 `submitResourceCanvasGeneration` 同步拒绝分支加同名 TODO:指向面板侧修法与 「这里改成 `return false`」的宿主侧动作 --- .../ResourceCanvasAssetGenerationPanelView.tsx | 6 ++++++ .../resource-canvas/ResourceCanvasGenerationPanelView.tsx | 7 +++++++ .../src/view/project-development/index.tsx | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx index 520299e8b..50b687831 100644 --- a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx +++ b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx @@ -368,6 +368,12 @@ export function ResourceCanvasAssetGenerationPanelView({ return; } setError(null); + /* + TODO(resource-generation-panel-contract): 与 `ResourceCanvasGenerationPanelView` 是同一份契约 + 问题——`onSubmit` 只返回 `void`,宿主同步拒绝时(今天只剩「队列未就绪」这条防御性分支)这里 + 已经置位 `released` 并关掉面板,草稿没人接走。修法同那一侧的 TODO:`onSubmit` 回报受理结果, + 只有受理成功才置位并 `onClose()`。 + */ // 这次输入被任务接走:卸载时不再写回草稿槽(失败重开由宿主的提交上下文负责)。 draftReleasedRef.current = true; // 点击即关闭:不等 IPC、不等排队、不等生成结束。失败要不要把面板带回来由宿主决定 diff --git a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx index 100b7fa1e..593f3cdff 100644 --- a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx +++ b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx @@ -239,6 +239,13 @@ export function ResourceCanvasGenerationPanelView({ requestRef.current, normalizedPrompt, ); + /* + TODO(resource-generation-panel-contract): `onSubmit` 现在只返回 `void`,所以这里只能「先置位 + `released`、再无脑关闭」;宿主那几条同步拒绝的分支(占位已不在画布 / 已在跑别的 operation) + 只给一条提示条,这次输入没人接走、草稿也跟着丢了。修法:让 `onSubmit` 回报受理结果 + (`accepted: boolean`),只有受理成功才置位并 `onClose()`。同一份契约落在 + `ResourceCanvasAssetGenerationPanelView` 与两个宿主调用点上——要改就一起改。 + */ // 这次输入被任务接走:卸载时不再往草稿槽里写一份内存副本(失败重开由宿主的提交上下文负责)。 draftReleasedRef.current = true; // 点击即关闭:不等 IPC、不等排队、不等生成结束。入参已经带上这次生成的请求身份, diff --git a/apps/ai-game-creator-shell/src/view/project-development/index.tsx b/apps/ai-game-creator-shell/src/view/project-development/index.tsx index 29414c29e..e5a900738 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/index.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/index.tsx @@ -7810,6 +7810,12 @@ export default function ProjectDevelopmentView({ ) => { const queue = resourceAssetGenerationQueueRef.current; const context = resourceAssetGenerationContextRef.current; + /* + TODO(resource-generation-panel-contract): 下面这几条同步拒绝只落一条提示条,而面板那边已经 + 置位 `draftReleased` 并关掉了 → 这次输入没人接走、用户刚敲的草稿跟着丢。修法:这里 `return + false`,由面板按 `onSubmit` 的返回值决定要不要关面板(见 + `ResourceCanvasGenerationPanelView` 的同名 TODO;图片类那个面板要一起改)。 + */ if (!queue || !draftId) { setResourceWorkbenchNotice( '生成任务队列尚未就绪,请重新打开项目后重试',