feat(memory): lucid memory integration with optional backends (#285)
This commit is contained in:
parent
04bf94443f
commit
53844f7207
11 changed files with 1089 additions and 137 deletions
|
|
@ -547,7 +547,7 @@ fn default_http_timeout_secs() -> u64 {
|
|||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct MemoryConfig {
|
||||
/// "sqlite" | "markdown" | "none"
|
||||
/// "sqlite" | "lucid" | "markdown" | "none" (`none` = explicit no-op memory)
|
||||
pub backend: String,
|
||||
/// Auto-save conversation context to memory
|
||||
pub auto_save: bool,
|
||||
|
|
@ -1618,7 +1618,6 @@ fn sync_directory(_path: &Path) -> Result<()> {
|
|||
mod tests {
|
||||
use super::*;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Mutex, OnceLock};
|
||||
use tempfile::TempDir;
|
||||
|
||||
// ── Defaults ─────────────────────────────────────────────
|
||||
|
|
@ -2449,19 +2448,18 @@ default_temperature = 0.7
|
|||
assert!(parsed.browser.allowed_domains.is_empty());
|
||||
}
|
||||
|
||||
fn env_override_lock() -> std::sync::MutexGuard<'static, ()> {
|
||||
static ENV_LOCK: OnceLock<Mutex<()>> = OnceLock::new();
|
||||
ENV_LOCK
|
||||
.get_or_init(|| Mutex::new(()))
|
||||
// ── Environment variable overrides (Docker support) ─────────
|
||||
|
||||
fn env_override_test_guard() -> std::sync::MutexGuard<'static, ()> {
|
||||
static ENV_OVERRIDE_TEST_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
|
||||
ENV_OVERRIDE_TEST_LOCK
|
||||
.lock()
|
||||
.expect("env override test lock poisoned")
|
||||
}
|
||||
|
||||
// ── Environment variable overrides (Docker support) ─────────
|
||||
|
||||
#[test]
|
||||
fn env_override_api_key() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
assert!(config.api_key.is_none());
|
||||
|
||||
|
|
@ -2474,7 +2472,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_api_key_fallback() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::remove_var("ZEROCLAW_API_KEY");
|
||||
|
|
@ -2487,7 +2485,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_provider() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::set_var("ZEROCLAW_PROVIDER", "anthropic");
|
||||
|
|
@ -2499,7 +2497,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_provider_fallback() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::remove_var("ZEROCLAW_PROVIDER");
|
||||
|
|
@ -2512,7 +2510,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_model() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::set_var("ZEROCLAW_MODEL", "gpt-4o");
|
||||
|
|
@ -2524,7 +2522,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_workspace() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::set_var("ZEROCLAW_WORKSPACE", "/custom/workspace");
|
||||
|
|
@ -2536,7 +2534,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_empty_values_ignored() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
let original_provider = config.default_provider.clone();
|
||||
|
||||
|
|
@ -2549,7 +2547,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_gateway_port() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
assert_eq!(config.gateway.port, 3000);
|
||||
|
||||
|
|
@ -2562,7 +2560,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_port_fallback() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::remove_var("ZEROCLAW_GATEWAY_PORT");
|
||||
|
|
@ -2575,7 +2573,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_gateway_host() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
assert_eq!(config.gateway.host, "127.0.0.1");
|
||||
|
||||
|
|
@ -2588,7 +2586,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_host_fallback() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::remove_var("ZEROCLAW_GATEWAY_HOST");
|
||||
|
|
@ -2601,7 +2599,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_temperature() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
|
||||
std::env::set_var("ZEROCLAW_TEMPERATURE", "0.5");
|
||||
|
|
@ -2613,7 +2611,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_temperature_out_of_range_ignored() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
// Clean up any leftover env vars from other tests
|
||||
std::env::remove_var("ZEROCLAW_TEMPERATURE");
|
||||
|
||||
|
|
@ -2633,7 +2631,7 @@ default_temperature = 0.7
|
|||
|
||||
#[test]
|
||||
fn env_override_invalid_port_ignored() {
|
||||
let _guard = env_override_lock();
|
||||
let _env_guard = env_override_test_guard();
|
||||
let mut config = Config::default();
|
||||
let original_port = config.gateway.port;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue