From 939deafb010ed522ec26b155c25ffa3f3b3b45de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 15 Sep 2026 19:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=B7=B2=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DirectProject wire 转换只读取一次项目 manifest 避免每个素材引用重复 I/O 与解析并缩小校验到解析之间的竞态窗口 --- .../src-tauri/src/agent/direct_codex_user_item/wire.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_user_item/wire.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_user_item/wire.rs index f31f14824..6fae76ca5 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_user_item/wire.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_user_item/wire.rs @@ -128,7 +128,7 @@ pub(crate) fn direct_codex_user_item_to_codex_turn_input( item: &DirectCodexUserItem, skill_roots: &[std::path::PathBuf], ) -> Result { - validate_direct_codex_user_item(root, item)?; + let manifest = validate_direct_codex_user_item(root, item)?; let DirectCodexUserItem::Message(message) = item; let mut input = Vec::with_capacity(message.content.len()); for part in &message.content { @@ -137,9 +137,9 @@ pub(crate) fn direct_codex_user_item_to_codex_turn_input( input.push(serde_json::json!({ "type": "text", "text": text })); } DirectCodexUserContentPart::AgcResourceReference { resource_id } => { - let asset = read_manifest_for_project(root)? + let asset = manifest .assets - .into_iter() + .iter() .find(|asset| asset.id == resource_id.trim()) .ok_or_else(|| "引用的素材已不存在,请移除后重新选择".to_string())?; let path = sanitize_attachment_local_path(&asset.local_path)