diff --git a/apps/ai-game-creator-shell/src/features/app-shell/useHomeProjectCreation.ts b/apps/ai-game-creator-shell/src/features/app-shell/useHomeProjectCreation.ts index d8dd02110..84e470c91 100644 --- a/apps/ai-game-creator-shell/src/features/app-shell/useHomeProjectCreation.ts +++ b/apps/ai-game-creator-shell/src/features/app-shell/useHomeProjectCreation.ts @@ -44,12 +44,6 @@ type UseHomeProjectCreationOptions = { rememberRecentWorkspace: (projectPath: string) => void; }; -// 首页的「做游戏 / 做素材 / 做方案」模式选择随 HomeAgentMode 一起被 master 的直连 -// Codex 改造删掉了,`startMode` 在前端因此暂时没有 `planning` 的来源。立项策划链路 -// 的代码全部保留(后端、prompt、澄清卡、审批卡都在),只是 UI 入口待产品侧重新定; -// 在那之前首页统一按直接构建进入。 -const HOME_DRAFT_START_MODE: ProjectStartMode = 'direct-build'; - export function useHomeProjectCreation({ setStatus, setLauncherView, @@ -454,7 +448,10 @@ export function useHomeProjectCreation({ pendingNonEmptyProject !== null, ); - async function createHomeDraft(draft: HomeDraft) { + async function createHomeDraft( + draft: HomeDraft, + startMode: ProjectStartMode, + ) { const invoke = resolveTauriInvoke(); if (!invoke) { throw new Error('需要在 Tauri App 内运行'); @@ -470,11 +467,14 @@ export function useHomeProjectCreation({ selectedPath, draft.prompt, draft.attachments, - HOME_DRAFT_START_MODE, + startMode, ); } - async function createHomeDraftAutomatically(draft: HomeDraft) { + async function createHomeDraftAutomatically( + draft: HomeDraft, + startMode: ProjectStartMode, + ) { const invoke = resolveTauriInvoke(); if (!invoke) { throw new Error('需要在陶泥儿客户端内运行'); @@ -489,7 +489,7 @@ export function useHomeProjectCreation({ result, draft.prompt, draft.attachments, - HOME_DRAFT_START_MODE, + startMode, ); setStatus('已创建工作区,正在开始智能创作'); return '已创建工作区并进入项目开发'; diff --git a/apps/ai-game-creator-shell/src/view/home/index.tsx b/apps/ai-game-creator-shell/src/view/home/index.tsx index d8aa95000..f60c95354 100644 --- a/apps/ai-game-creator-shell/src/view/home/index.tsx +++ b/apps/ai-game-creator-shell/src/view/home/index.tsx @@ -1,8 +1,15 @@ -import { FolderKanban, FolderOpen, Plus, Sparkles } from 'lucide-react'; +import { + FileText, + FolderKanban, + FolderOpen, + Plus, + Sparkles, +} from 'lucide-react'; import type { FormEvent } from 'react'; import { useRef, useState } from 'react'; import BRAND_ICON from '../../../../../packages/shared/src/icons/taonier-product-ip.png'; +import type { ProjectStartMode } from '../../app/types'; import RichInputArea, { UploadButton } from './components/RichInputArea'; import { richTextToAttachments, @@ -24,7 +31,10 @@ type HomeViewProps = { status: string; onStatusChange: (status: string) => void; recentProjectRows: readonly HomeProjectRow[]; - onCreateDraftAutomatically: (draft: HomeDraft) => Promise; + onCreateDraftAutomatically: ( + draft: HomeDraft, + startMode: ProjectStartMode, + ) => Promise; onProjectsOpen: () => void; onProjectOpen: (path: string) => void; onProjectPick: () => void; @@ -46,6 +56,13 @@ export default function HomeView({ ); const [homeCreationBusy, setHomeCreationBusy] = useState(false); const homeCreationBusyRef = useRef(false); + // 首页只保留「做方案」一个开关:做游戏 / 做素材 沿用 master 的直连默认,走 + // direct-build;立项策划要委派子 Agent、挂澄清 pending、过 GDD 审批,只能由 + // planning 起链,所以必须在建项目之前就把 startMode 定下来。 + const [planningSelected, setPlanningSelected] = useState(false); + const startMode: ProjectStartMode = planningSelected + ? 'planning' + : 'direct-build'; async function createFromHome() { if (homeCreationBusyRef.current) { @@ -62,10 +79,10 @@ export default function HomeView({ onStatusChange('正在创建工作区'); try { onStatusChange( - await onCreateDraftAutomatically({ - prompt, - attachments: referencedAttachments, - }), + await onCreateDraftAutomatically( + { prompt, attachments: referencedAttachments }, + startMode, + ), ); } catch (error) { onStatusChange(error instanceof Error ? error.message : String(error)); @@ -110,18 +127,38 @@ export default function HomeView({ > { void createFromHome(); }} >
- + + + +