diff --git a/src-tauri/src/core/fs.rs b/src-tauri/src/core/fs.rs index 35bcceb09..f0ffb9a71 100644 --- a/src-tauri/src/core/fs.rs +++ b/src-tauri/src/core/fs.rs @@ -1,3 +1,5 @@ +// WARNING: These APIs will be deprecated soon due to removing FS API access from frontend. +// It's added to ensure the legacy implementation from frontend still functions before removal. use crate::core::cmd::get_jan_data_folder_path; use std::fs; use std::path::PathBuf; diff --git a/src-tauri/src/core/setup.rs b/src-tauri/src/core/setup.rs index 8e9e03d2b..705ee27e0 100644 --- a/src-tauri/src/core/setup.rs +++ b/src-tauri/src/core/setup.rs @@ -11,19 +11,18 @@ use tauri_plugin_shell::process::CommandEvent; use tauri_plugin_shell::ShellExt; use tauri_plugin_store::StoreExt; -use super::{cmd::get_jan_extensions_path, state::AppState}; +use super::{ + cmd::{get_jan_data_folder_path, get_jan_extensions_path}, + mcp::run_mcp_commands, + state::AppState, +}; pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), String> { let store = app.store("store.json").expect("Store not initialized"); - let stored_version = if let Some(version) = store.get("version") { - if let Some(version_str) = version.as_str() { - version_str.to_string() - } else { - "".to_string() - } - } else { - "".to_string() - }; + let stored_version = store + .get("version") + .and_then(|v| v.as_str().map(String::from)) + .unwrap_or_default(); let app_version = app .config() @@ -31,10 +30,8 @@ pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), Stri .clone() .unwrap_or_else(|| "".to_string()); - if !force { - if stored_version == app_version { - return Ok(()); - } + if !force && stored_version == app_version { + return Ok(()); } let extensions_path = get_jan_extensions_path(app.clone()); let pre_install_path = PathBuf::from("./resources/pre-install"); @@ -46,6 +43,10 @@ pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), Stri }); } + if !force { + return Ok(()); + }; + // Attempt to create it again if !extensions_path.exists() { fs::create_dir_all(&extensions_path).map_err(|e| e.to_string())?; @@ -177,6 +178,19 @@ fn extract_extension_manifest( Ok(None) } +pub fn setup_mcp(app: &App) { + let app_path = get_jan_data_folder_path(app.handle().clone()); + + let state = app.state::().inner(); + let app_path_str = app_path.to_str().unwrap().to_string(); + let servers = state.mcp_servers.clone(); + tauri::async_runtime::spawn(async move { + if let Err(e) = run_mcp_commands(app_path_str, servers).await { + eprintln!("Failed to run mcp commands: {}", e); + } + }); +} + pub fn setup_sidecar(app: &App) -> Result<(), String> { // Setup sidecar diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index c10864bd7..85578d680 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,13 +1,11 @@ mod core; use core::{ - cmd::get_jan_data_folder_path, - mcp::run_mcp_commands, - setup::{self, setup_engine_binaries, setup_sidecar}, + setup::{self, setup_engine_binaries, setup_mcp, setup_sidecar}, state::{generate_app_token, AppState}, }; use std::{collections::HashMap, sync::Arc}; -use tauri::{Emitter, Manager}; +use tauri::Emitter; use tokio::sync::Mutex; #[cfg_attr(mobile, tauri::mobile_entry_point)] @@ -62,16 +60,7 @@ pub fn run() { eprintln!("Failed to install extensions: {}", e); } - let app_path = get_jan_data_folder_path(app.handle().clone()); - - let state = app.state::().inner(); - let app_path_str = app_path.to_str().unwrap().to_string(); - let servers = state.mcp_servers.clone(); - tauri::async_runtime::spawn(async move { - if let Err(e) = run_mcp_commands(app_path_str, servers).await { - eprintln!("Failed to run mcp commands: {}", e); - } - }); + setup_mcp(app); setup_sidecar(app).expect("Failed to setup sidecar"); @@ -80,7 +69,7 @@ pub fn run() { Ok(()) }) .on_window_event(|window, event| match event { - tauri::WindowEvent::CloseRequested { .. } => { + tauri::WindowEvent::CloseRequested { .. } => { window.emit("kill-sidecar", ()).unwrap(); } _ => {} diff --git a/web/containers/Providers/CoreConfigurator.tsx b/web/containers/Providers/CoreConfigurator.tsx index 8af31162d..54b716309 100644 --- a/web/containers/Providers/CoreConfigurator.tsx +++ b/web/containers/Providers/CoreConfigurator.tsx @@ -24,7 +24,9 @@ export const CoreConfigurator = ({ children }: PropsWithChildren) => { setTimeout(async () => { if (!isCoreExtensionInstalled()) { setSettingUp(true) - await setupBaseExtensions() + + await new Promise((resolve) => setTimeout(resolve, 500)) + setupBaseExtensions() return }