diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx index 9ca76cfcc..21c09ca58 100644 --- a/apps/ai-game-creator-shell/src/App.tsx +++ b/apps/ai-game-creator-shell/src/App.tsx @@ -4073,7 +4073,7 @@ export function App({ } function handleChatComposerChange(draft: ChatComposerDraft) { - const content = draft.content ?? []; + const content = draft.content; setChatContent(content); setChatInput(directCodexContentToPromptText(content, manifest.assets)); setChatReferences( diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx index 7a8759cb9..cec28710a 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx @@ -916,11 +916,7 @@ function ResourceReferenceEditor({ ); const readPromptText = useCallback( - () => - directCodexContentToPromptText( - liveDraftRef.current.content ?? [], - assets, - ), + () => directCodexContentToPromptText(liveDraftRef.current.content, assets), [assets], ); const resolvePolishContext = useCallback( @@ -957,7 +953,7 @@ function ResourceReferenceEditor({ const submitCurrentDraft = useCallback(() => { setReminderOpen(false); acknowledgedDraftKeyRef.current = chatPromptDraftKey( - liveDraftRef.current.content ?? [], + liveDraftRef.current.content, ); rootRef.current?.closest('form')?.requestSubmit(); }, [rootRef]); @@ -995,9 +991,9 @@ function ResourceReferenceEditor({ const handleFormSubmit = (event: Event) => { if ( !shouldRemindChatPromptPolish({ - content: liveDraftRef.current.content ?? [], + content: liveDraftRef.current.content, prompt: directCodexContentToPromptText( - liveDraftRef.current.content ?? [], + liveDraftRef.current.content, assetsRef.current, ), acknowledgedDraftKey: acknowledgedDraftKeyRef.current, @@ -1016,7 +1012,7 @@ function ResourceReferenceEditor({ // 草稿发出去或被清空后重新开始一轮:清掉润色结果与「本轮已确认」标记。 useEffect(() => { - if ((liveDraftRef.current.content ?? []).length > 0) return; + if (liveDraftRef.current.content.length > 0) return; resetPromptPolish(); acknowledgedDraftKeyRef.current = null; }, [resetPromptPolish]); @@ -1365,9 +1361,9 @@ function ResourceReferenceEditor({ const nextDraft = readResourceReferenceDraft(editorState); liveDraftRef.current = nextDraft; setDraftText( - directCodexContentToPromptText(nextDraft.content ?? [], assets), + directCodexContentToPromptText(nextDraft.content, assets), ); - if ((nextDraft.content ?? []).length === 0) { + if (nextDraft.content.length === 0) { resetPromptPolish(); acknowledgedDraftKeyRef.current = null; } diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/resourceReferences.ts b/apps/ai-game-creator-shell/src/features/project-workspace/resourceReferences.ts index e111106a5..1be2d478e 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/resourceReferences.ts +++ b/apps/ai-game-creator-shell/src/features/project-workspace/resourceReferences.ts @@ -51,8 +51,8 @@ export type ChatReference = ResourceReference | RuntimeRegionReference; export type ChatComposerDraft = { text: string; references: ChatReference[]; - /** Lexical 顺序对应的 canonical user content;仅由编辑器读回时提供。 */ - content?: DirectCodexUserContentPart[]; + /** Lexical 顺序对应的 canonical user content,是草稿的唯一结构化来源。 */ + content: DirectCodexUserContentPart[]; }; export const RESOURCE_REFERENCE_INSERT_EVENT = 'agc-resource-reference-insert'; @@ -153,22 +153,10 @@ export function chatComposerDraftToDirectCodexUserItem( draft: ChatComposerDraft, id: string, ): DirectCodexUserItem { - const content = - draft.content ?? - (draft.references.length > 0 - ? [ - ...(draft.text - ? [{ type: 'input_text' as const, text: draft.text }] - : []), - ...draft.references.map(chatReferenceToContentPart), - ] - : draft.text - ? [{ type: 'input_text' as const, text: draft.text }] - : []); return { type: 'message', role: 'user', - content, + content: draft.content, id, } satisfies DirectCodexUserItem; } 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 3359be08e..d81dd7083 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 @@ -6712,7 +6712,7 @@ export default function ProjectDevelopmentView({ if ( currentDraft && directCodexContentToPromptText( - currentDraft.content ?? [], + currentDraft.content, manifest.assets, ) !== text ) { @@ -6743,7 +6743,7 @@ export default function ProjectDevelopmentView({ const applyResourceQuickEditDraft = useCallback( (draft: ChatComposerDraft) => { applyResourceQuickEditPrompt( - directCodexContentToPromptText(draft.content ?? [], manifest.assets), + directCodexContentToPromptText(draft.content, manifest.assets), ); }, [applyResourceQuickEditPrompt, manifest.assets],