diff --git a/config/directory_config.json b/config/directory_config.json index f7655638f..7549f975f 100644 --- a/config/directory_config.json +++ b/config/directory_config.json @@ -1,7 +1,7 @@ { "base_url": "http://localhost:8300", "default_org": { - "id": "359341929336406018", + "id": "359454828524470274", "name": "default", "domain": "default.localhost" }, @@ -13,8 +13,8 @@ "first_name": "Admin", "last_name": "User" }, - "admin_token": "JP3vRy5eNankB5x204_ANNe4GYXt3Igb5xZuJNW17Chf42fsAcUh4Iw_U6JatCI7dJkRMsw", + "admin_token": "vuZlSrNRdCEm0qY6jBj4KrUT5QFepGbtu9Zn_JDXby4HaTXejQKhRgYmSie3T_qLOmcuDZw", "project_id": "", - "client_id": "359341929806233602", - "client_secret": "ktwHx7cmAIdp7NC2x3BYPD1NWiuvLAWHYHF6EyjbC0gZAgTgjFEDNA7KukXMAgdC" + "client_id": "359454829094961154", + "client_secret": "OVzcDUzhBqcWDWmoakDbZ8HKAiy7RHcCBeD71dvhdFmcVpQc3Rq3pvr1CpX2zmIe" } \ No newline at end of file diff --git a/src/basic/keywords/add_suggestion.rs b/src/basic/keywords/add_suggestion.rs index 204a61634..bf8f561ca 100644 --- a/src/basic/keywords/add_suggestion.rs +++ b/src/basic/keywords/add_suggestion.rs @@ -406,17 +406,18 @@ pub fn get_suggestions( session_id ); - // Clear suggestions from Redis after fetching to prevent them from being sent again - if !suggestions.is_empty() { - let _: Result = redis::cmd("DEL") - .arg(&redis_key) - .query(&mut conn); - info!( - "[SUGGESTIONS] Cleared {} suggestions from Redis for session {}", - suggestions.len(), - session_id - ); - } + // DO NOT clear suggestions from Redis - keep them persistent for the session + // TODO: This may cause suggestions to appear multiple times, need better solution + // if !suggestions.is_empty() { + // let _: Result = redis::cmd("DEL") + // .arg(&redis_key) + // .query(&mut conn); + // info!( + // "[SUGGESTIONS] Cleared {} suggestions from Redis for session {}", + // suggestions.len(), + // session_id + // ); + // } } Err(e) => error!("Failed to get suggestions from Redis: {}", e), } diff --git a/src/basic/keywords/format.rs b/src/basic/keywords/format.rs index 88d8fd78a..9a4a3c734 100644 --- a/src/basic/keywords/format.rs +++ b/src/basic/keywords/format.rs @@ -82,8 +82,25 @@ fn format_impl(value: Dynamic, pattern: String) -> Result { pub fn format_keyword(engine: &mut Engine) { // Register FORMAT as a regular function with two parameters - engine.register_fn("FORMAT", format_impl); - engine.register_fn("format", format_impl); + // Wrap format_impl to unwrap Result before returning to Rhai + engine.register_fn("FORMAT", |value: Dynamic, pattern: String| -> String { + match format_impl(value, pattern) { + Ok(result) => result, + Err(e) => { + log::error!("FORMAT error: {}", e); + String::new() + } + } + }); + engine.register_fn("format", |value: Dynamic, pattern: String| -> String { + match format_impl(value, pattern) { + Ok(result) => result, + Err(e) => { + log::error!("format error: {}", e); + String::new() + } + } + }); } fn parse_pattern(pattern: &str) -> (String, usize, String) { let mut prefix = String::new(); diff --git a/src/core/package_manager/installer.rs b/src/core/package_manager/installer.rs index edfdca533..11c764cbd 100644 --- a/src/core/package_manager/installer.rs +++ b/src/core/package_manager/installer.rs @@ -310,7 +310,8 @@ impl PackageManager { binary_name: Some("valkey-server".to_string()), pre_install_cmds_linux: vec![], post_install_cmds_linux: vec![ - + "ln -sf {{BIN_PATH}}/src/valkey-server {{BIN_PATH}}/valkey-server 2>/dev/null || true".to_string(), + "ln -sf {{BIN_PATH}}/src/valkey-cli {{BIN_PATH}}/valkey-cli 2>/dev/null || true".to_string(), "ln -sf {{BIN_PATH}}/valkey-server {{BIN_PATH}}/redis-server 2>/dev/null || true".to_string(), "ln -sf {{BIN_PATH}}/valkey-cli {{BIN_PATH}}/redis-cli 2>/dev/null || true".to_string(), ], @@ -321,7 +322,7 @@ impl PackageManager { env_vars: HashMap::new(), data_download_list: Vec::new(), exec_cmd: "nohup {{BIN_PATH}}/valkey-server --port 6379 --dir {{DATA_PATH}} --logfile {{LOGS_PATH}}/valkey.log --daemonize yes > {{LOGS_PATH}}/valkey-startup.log 2>&1".to_string(), - check_cmd: "pgrep -f 'valkey-server' >/dev/null 2>&1 || {{BIN_PATH}}/valkey-cli ping 2>/dev/null | grep -q PONG".to_string(), + check_cmd: "{{BIN_PATH}}/valkey-cli ping 2>/dev/null | grep -q PONG".to_string(), }, ); } diff --git a/src/drive/local_file_monitor.rs b/src/drive/local_file_monitor.rs index 8dd407604..8cfe18540 100644 --- a/src/drive/local_file_monitor.rs +++ b/src/drive/local_file_monitor.rs @@ -23,6 +23,7 @@ struct LocalFileState { pub struct LocalFileMonitor { state: Arc, data_dir: PathBuf, + work_root: PathBuf, file_states: Arc>>, is_processing: Arc, } @@ -34,11 +35,15 @@ impl LocalFileMonitor { .unwrap_or_else(|_| ".".to_string())) .join("data"); - info!("[LOCAL_MONITOR] Initializing with data_dir: {:?}", data_dir); + // Use botserver/work as the work directory for generated files + let work_root = PathBuf::from("work"); + + info!("[LOCAL_MONITOR] Initializing with data_dir: {:?}, work_root: {:?}", data_dir, work_root); Self { state, data_dir, + work_root, file_states: Arc::new(RwLock::new(HashMap::new())), is_processing: Arc::new(AtomicBool::new(false)), } @@ -255,8 +260,8 @@ impl LocalFileMonitor { .and_then(|s| s.to_str()) .unwrap_or("unknown"); - // Create work directory structure - let work_dir = self.data_dir.join(format!("{}.gbai", bot_name)); + // Create work directory structure in botserver/work (not in data/) + let work_dir = self.work_root.join(format!("{}.gbai/{}.gbdialog", bot_name, bot_name)); // Read the file content let source_content = tokio::fs::read_to_string(file_path).await?; @@ -319,6 +324,7 @@ impl Clone for LocalFileMonitor { Self { state: Arc::clone(&self.state), data_dir: self.data_dir.clone(), + work_root: self.work_root.clone(), file_states: Arc::clone(&self.file_states), is_processing: Arc::clone(&self.is_processing), }