From 2f3d20bd13d459f2fa25b4b97c647aff7ae1c581 Mon Sep 17 00:00:00 2001 From: suzmii Date: Wed, 2 Sep 2026 16:50:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E8=B7=AF=E7=94=B1=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=8F=91?= =?UTF-8?q?=E9=80=81=E7=AD=89=E5=BE=85=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - codex_app_server 模式复用 DirectHome Codex 通道执行自动项目命名 - 首页开启创作与项目对话发送按钮忙碌时显示旋转动画 --- .../src-tauri/src/commands.rs | 25 ++++++++++++------- .../ProjectSupervisorView.tsx | 9 +++++-- .../src/view/home/index.tsx | 11 +++++++- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/commands.rs b/apps/ai-game-creator-shell/src-tauri/src/commands.rs index cbfb9024a..3bb33d389 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/commands.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/commands.rs @@ -16,6 +16,8 @@ const AGENT_EDITOR_ASSET_ID_MAX_CHARS: usize = 512; const AUTOMATIC_PROJECT_NAME_MAX_PROMPT_CHARS: usize = 8_000; const AUTOMATIC_PROJECT_NAME_MAX_ATTACHMENTS: usize = 20; const AUTOMATIC_PROJECT_NAME_MAX_OUTPUT_TOKENS: u32 = 64; +const AUTOMATIC_PROJECT_NAME_SYSTEM_PROMPT: &str = + "你是项目命名助手。只根据用户输入提炼一个原创、简短、中文的项目名称;不要使用知名作品名、路径、URL、凭据、Markdown、引号或解释。输出必须有且只有一行纯文本,长度为 2 到 16 个字符。信息不足时输出:未命名游戏原型"; #[derive(Clone, Debug, Deserialize, Eq, PartialEq)] #[serde(rename_all = "camelCase", deny_unknown_fields)] @@ -106,18 +108,23 @@ async fn request_automatic_project_name( ) -> Result, String> { let user_prompt = build_automatic_project_name_prompt(prompt, attachments)?; let app_config = load_game_creator_app_config()?; + if app_config.agent_mode == GAME_CREATOR_AGENT_MODE_CODEX_APP_SERVER { + let reply = crate::agent::direct_game_creator_home_codex_chat( + AUTOMATIC_PROJECT_NAME_SYSTEM_PROMPT.to_string(), + user_prompt, + ) + .await?; + return Ok(normalize_suggested_project_name(reply.trim())); + } let mut llm = app_config.llm.clone(); llm.max_retries = 0; let client = build_game_creator_llm_client_from_llm_config(&llm, "llm")?; - let request = LlmRunRequest::single_turn( - "你是项目命名助手。只根据用户输入提炼一个原创、简短、中文的项目名称;不要使用知名作品名、路径、URL、凭据、Markdown、引号或解释。输出必须有且只有一行纯文本,长度为 2 到 16 个字符。信息不足时输出:未命名游戏原型", - user_prompt, - ) - .with_api_kind(parse_game_creator_llm_api_kind(&llm.api_kind)?) - .with_model(llm.model.clone()) - .with_request_timeout_ms(llm.request_timeout_ms) - .with_max_output_tokens(AUTOMATIC_PROJECT_NAME_MAX_OUTPUT_TOKENS) - .with_web_search(false); + let request = LlmRunRequest::single_turn(AUTOMATIC_PROJECT_NAME_SYSTEM_PROMPT, user_prompt) + .with_api_kind(parse_game_creator_llm_api_kind(&llm.api_kind)?) + .with_model(llm.model.clone()) + .with_request_timeout_ms(llm.request_timeout_ms) + .with_max_output_tokens(AUTOMATIC_PROJECT_NAME_MAX_OUTPUT_TOKENS) + .with_web_search(false); let response = client .run(request) .await diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx index dba7534dc..4dfe14403 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx @@ -1,4 +1,4 @@ -import { ArrowUp } from 'lucide-react'; +import { ArrowUp, Loader2 } from 'lucide-react'; import type { ComponentProps, Dispatch, @@ -108,6 +108,7 @@ export function ProjectSupervisorView({ : runtimePanelProps.controlBusy ? '思考中' : '发送'; + const submitting = runtimePanelProps.controlBusy && !needsUserInput; return (
-