From 61c33cd3c7fdc8a9eb867562aaa1c617462fd721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 5 Sep 2026 10:56:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20DirectProject=20=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E5=8E=86=E5=8F=B2=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 历史文件不存在时跳过幂等反向扫描 保留首条带 id item 的正常追加 --- .../src-tauri/src/agent/direct_project_history.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_project_history.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_project_history.rs index e51c425ae..b552a53b9 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_project_history.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_project_history.rs @@ -140,15 +140,18 @@ pub(crate) fn append_direct_project_history_item_at( } let _project_lock = crate::project::acquire_project_write_lock(root, "conversation.write")?; let path = history_path(root); - prepare_game_creator_private_path_for_read(&path, false, "DirectProject 历史")?; + let history_exists = + prepare_game_creator_private_path_for_read(&path, false, "DirectProject 历史")?; let lock = project_append_lock_for(&path)?; let _append_guard = lock.lock("DirectProject 历史追加写")?; - if let Some(item_id) = item.get("id").and_then(Value::as_str) { - if let Some(existing) = find_direct_project_history_item_by_id_at(&path, item_id)? { - if &existing == item { - return Ok(()); + if history_exists { + if let Some(item_id) = item.get("id").and_then(Value::as_str) { + if let Some(existing) = find_direct_project_history_item_by_id_at(&path, item_id)? { + if &existing == item { + return Ok(()); + } + return Err(format!("DirectProject 历史 item id 冲突:{item_id}")); } - return Err(format!("DirectProject 历史 item id 冲突:{item_id}")); } } let line = record(item)?;