diff --git a/Cargo.lock b/Cargo.lock index bde9f4800..a653c0ccc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5920,7 +5920,7 @@ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" [[package]] name = "shinkai_crypto_identities" -version = "1.1.18" +version = "1.1.19" dependencies = [ "chrono", "dashmap", @@ -5937,7 +5937,7 @@ dependencies = [ [[package]] name = "shinkai_embedding" -version = "1.1.18" +version = "1.1.19" dependencies = [ "async-trait", "bincode", @@ -5958,7 +5958,7 @@ dependencies = [ [[package]] name = "shinkai_fs" -version = "1.1.18" +version = "1.1.19" dependencies = [ "async-trait", "bincode", @@ -5991,7 +5991,7 @@ dependencies = [ [[package]] name = "shinkai_http_api" -version = "1.1.18" +version = "1.1.19" dependencies = [ "anyhow", "async-channel", @@ -6027,7 +6027,7 @@ dependencies = [ [[package]] name = "shinkai_job_queue_manager" -version = "1.1.18" +version = "1.1.19" dependencies = [ "chrono", "serde", @@ -6041,7 +6041,7 @@ dependencies = [ [[package]] name = "shinkai_libp2p_relayer" -version = "1.1.18" +version = "1.1.19" dependencies = [ "chrono", "clap 3.2.25", @@ -6066,7 +6066,7 @@ dependencies = [ [[package]] name = "shinkai_mcp" -version = "1.1.18" +version = "1.1.19" dependencies = [ "async-trait", "futures", @@ -6087,7 +6087,7 @@ dependencies = [ [[package]] name = "shinkai_message_primitives" -version = "1.1.18" +version = "1.1.19" dependencies = [ "aes-gcm", "async-trait", @@ -6115,7 +6115,7 @@ dependencies = [ [[package]] name = "shinkai_node" -version = "1.1.18" +version = "1.1.19" dependencies = [ "aes-gcm", "ai-model-catalog", @@ -6193,7 +6193,7 @@ dependencies = [ [[package]] name = "shinkai_non_rust_code" -version = "1.1.18" +version = "1.1.19" dependencies = [ "log", "serde", @@ -6206,7 +6206,7 @@ dependencies = [ [[package]] name = "shinkai_sqlite" -version = "1.1.18" +version = "1.1.19" dependencies = [ "bincode", "blake3", @@ -6268,7 +6268,7 @@ dependencies = [ [[package]] name = "shinkai_tools_primitives" -version = "1.1.18" +version = "1.1.19" dependencies = [ "base64 0.22.1", "log", diff --git a/Cargo.toml b/Cargo.toml index c9ad7b07d..d3986894e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ resolver = "2" [workspace.package] -version = "1.1.18" +version = "1.1.19" edition = "2021" authors = ["Nico Arqueros "] diff --git a/shinkai-bin/shinkai-node/src/network/v2_api/api_v2_commands_jobs.rs b/shinkai-bin/shinkai-node/src/network/v2_api/api_v2_commands_jobs.rs index 95c9ec76c..045099e35 100644 --- a/shinkai-bin/shinkai-node/src/network/v2_api/api_v2_commands_jobs.rs +++ b/shinkai-bin/shinkai-node/src/network/v2_api/api_v2_commands_jobs.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, sync::Arc, usize}; +use std::{collections::HashMap, path::PathBuf, sync::Arc, usize}; use async_channel::Sender; use ed25519_dalek::SigningKey; @@ -40,6 +40,7 @@ use crate::{ llm_provider::job_manager::JobManager, managers::IdentityManager, network::{node_error::NodeError, Node}, + utils::environment::fetch_node_environment, }; use x25519_dalek::StaticSecret as EncryptionStaticKey; @@ -1638,7 +1639,16 @@ impl Node { } }; - // Remove the job + // Get the job folder name BEFORE removing from DB (get_job_folder_name queries the jobs table) + let job_chat_folder = match db.get_job_folder_name(&job_id) { + Ok(folder) => Some(folder), + Err(_) => { + // If we can't get the folder name, log but continue - the job might not have a folder yet + None + } + }; + + // Remove the job from database match db.remove_job(&job_id) { Ok(_) => {} Err(err) => { @@ -1652,6 +1662,31 @@ impl Node { } } + // Remove the chat files folder (filesystem/Chat Files/{formatted_name}) + if let Some(chat_folder) = job_chat_folder { + use shinkai_fs::shinkai_file_manager::ShinkaiFileManager; + if chat_folder.exists() { + if let Err(err) = ShinkaiFileManager::remove_folder(chat_folder, &db) { + // Log the error but don't fail the request since DB removal succeeded + eprintln!("Warning: Failed to remove job chat folder: {}", err); + } + } + } + + // Remove the tools_storage folder (tools_storage/{job_id}) - used for tool execution files + let node_env = fetch_node_environment(); + let node_storage_path = node_env.node_storage_path.unwrap_or_default(); + let tools_storage_path = PathBuf::from(&node_storage_path) + .join("tools_storage") + .join(&job_id); + + if tools_storage_path.exists() { + if let Err(err) = std::fs::remove_dir_all(&tools_storage_path) { + // Log the error but don't fail the request since DB removal succeeded + eprintln!("Warning: Failed to remove tools_storage folder at {:?}: {}", tools_storage_path, err); + } + } + let _ = res .send(Ok(SendResponseBody { status: "success".to_string(),