From d974af304280435abbfc58546b3b4528b921f4d0 Mon Sep 17 00:00:00 2001 From: iven Date: Sat, 11 Apr 2026 12:51:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(reflection):=20=E4=BF=AE=E5=A4=8D=20state?= =?UTF-8?q?=20restore=20=E7=AB=9E=E6=80=81=20=E2=80=94=20peek+pop=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E7=9B=B4=E6=8E=A5=20pop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: pop_restored_state 在 getHistory 读取前删除数据。 修复: 先 peek 非破坏性读取,apply 后再 pop,确保数据可被多次读取。 --- desktop/src-tauri/src/intelligence_hooks.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/desktop/src-tauri/src/intelligence_hooks.rs b/desktop/src-tauri/src/intelligence_hooks.rs index de244d6..ea2e9d0 100644 --- a/desktop/src-tauri/src/intelligence_hooks.rs +++ b/desktop/src-tauri/src/intelligence_hooks.rs @@ -112,12 +112,15 @@ pub async fn post_conversation_hook( // Step 2: Record conversation for reflection let mut engine = reflection_state.lock().await; - // Apply restored state on first call (one-shot after app restart) - if let Some(restored_state) = crate::intelligence::reflection::pop_restored_state(agent_id) { + // Apply restored state on first call (peek-then-pop to avoid race with getHistory) + if let Some(restored_state) = crate::intelligence::reflection::peek_restored_state(agent_id) { engine.apply_restored_state(restored_state); + // Pop after successful apply to prevent re-processing + crate::intelligence::reflection::pop_restored_state(agent_id); } - if let Some(restored_result) = crate::intelligence::reflection::pop_restored_result(agent_id) { + if let Some(restored_result) = crate::intelligence::reflection::peek_restored_result(agent_id) { engine.apply_restored_result(restored_result); + crate::intelligence::reflection::pop_restored_result(agent_id); } engine.record_conversation();