diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs index 7c6f2d4db..3fad0ae77 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs @@ -845,6 +845,24 @@ pub(crate) fn hydrate_design_agent_session( Ok(Some(design_view(&session, active.is_none()))) } +#[tauri::command] +pub(crate) fn reset_design_agent_session(project_path: String) -> Result<(), String> { + let root = Path::new(project_path.trim()); + enforce_project_permission_policy(root, "conversation.write")?; + design_project_id(root)?; + let _lock = acquire_game_creator_agent_runtime_project_write_lock_with_wait( + root, + "design.session-reset", + )?; + let path = crate::agent::runtime_protocol::design_session_path(root); + if path.exists() { + let backup = path.with_file_name(format!("session.corrupted.{}.json", unix_timestamp())); + std::fs::rename(&path, &backup) + .map_err(|error| format!("备份损坏的策划会话失败:{error}"))?; + } + Ok(()) +} + #[tauri::command] pub(crate) fn get_design_agent_runtime_mode( project_path: String, diff --git a/apps/ai-game-creator-shell/src-tauri/src/main.rs b/apps/ai-game-creator-shell/src-tauri/src/main.rs index 5be012475..8fc62362c 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/main.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/main.rs @@ -2583,6 +2583,7 @@ fn main() { decide_planning_artifact_v2, hydrate_planning_session_v2, hydrate_design_agent_session, + reset_design_agent_session, get_design_agent_runtime_mode, set_design_agent_runtime_mode, debug_fast_forward_design_session, diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx index 21ab10253..cc58ed5c8 100644 --- a/apps/ai-game-creator-shell/src/App.tsx +++ b/apps/ai-game-creator-shell/src/App.tsx @@ -3117,7 +3117,9 @@ export function App({ } } catch (error) { if (planningStartMode) { - throw error; + setPlanGddError( + `策划会话无法恢复:${error instanceof Error ? error.message : String(error)}`, + ); } } try {