diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts b/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts index 56ad362ab..5af8a319e 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts +++ b/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts @@ -413,12 +413,11 @@ export function useUiEditorSession( resourceId !== undefined && savedStateSignature !== null && savedStateSignature !== stateSignature; - const nextStep: UiEditorStepId | null = - activeStep === 'reference-analysis' - ? 'structure-recognition' - : activeStep === 'structure-recognition' - ? 'asset-separation' - : null; + const nextStepByStep: Partial> = { + 'reference-analysis': 'structure-recognition', + 'structure-recognition': 'asset-separation', + }; + const nextStep = nextStepByStep[activeStep] ?? null; const spriteReferenceCounts = useMemo(() => { const counts: Record = {}; @@ -1195,13 +1194,18 @@ export function useUiEditorSession( })); if (separationResult === null) throw new Error('自动切分素材没有返回结果'); - const completedResult = separationResult as SeparationDTO; + const completedResult = separationResult; if (!(await save({ allowDuringSeparation: true }))) { throw new Error( '自动切分素材结果已写入编辑器,但 State 保存失败;sidecar 已保留,可继续恢复。', ); } if (backfillErrors.length > 0) { + const recovery = await invoke( + 'inspect_separation_recovery', + { projectPath, assetId: resourceId }, + ); + setSeparationRecovery(recovery); reportWorkflowCompletion( 'asset-separation', 'failure',