#![allow(non_snake_case)] use crate::session_manager; #[tauri::command] pub async fn list_sessions() -> Result, String> { let sessions = tauri::async_runtime::spawn_blocking(session_manager::scan_sessions) .await .map_err(|e| format!("Failed to scan sessions: {e}"))?; Ok(sessions) } #[tauri::command] pub async fn get_session_messages( providerId: String, sourcePath: String, ) -> Result, String> { let provider_id = providerId.clone(); let source_path = sourcePath.clone(); tauri::async_runtime::spawn_blocking(move || { session_manager::load_messages(&provider_id, &source_path) }) .await .map_err(|e| format!("Failed to load session messages: {e}"))? } #[tauri::command] pub async fn launch_session_terminal( command: String, cwd: Option, custom_config: Option, ) -> Result { let command = command.clone(); let cwd = cwd.clone(); let custom_config = custom_config.clone(); // Read preferred terminal from global settings let preferred = crate::settings::get_preferred_terminal(); // Map global setting terminal names to session terminal names // Global uses "iterm2", session terminal uses "iterm" let target = match preferred.as_deref() { Some("iterm2") => "iterm".to_string(), Some(t) => t.to_string(), None => "terminal".to_string(), // Default to Terminal.app on macOS }; tauri::async_runtime::spawn_blocking(move || { session_manager::terminal::launch_terminal( &target, &command, cwd.as_deref(), custom_config.as_deref(), ) }) .await .map_err(|e| format!("Failed to launch terminal: {e}"))??; Ok(true) }