remem-ai 0.6.70

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use anyhow::Context;

use super::tests::with_clean_env;
use super::*;

#[test]
fn local_only_query_uses_resolved_feature_hash_fallback_without_api_key() -> Result<()> {
    with_clean_env(|| {
        unsafe {
            std::env::set_var(ENV_PROVIDER, "api");
            std::env::set_var(ENV_FALLBACK, "feature-hash");
        }

        let embedding = embed_query_local_only_if_enabled("local fallback context")?
            .context("resolved local fallback should remain available")?;

        assert_eq!(embedding.model(), FEATURE_HASH_EMBEDDING_MODEL);
        assert_eq!(embedding.dimensions(), FEATURE_HASH_EMBEDDING_DIMENSIONS);
        Ok(())
    })
}

#[test]
fn local_only_query_skips_unavailable_api_without_local_fallback() -> Result<()> {
    with_clean_env(|| {
        unsafe {
            std::env::set_var(ENV_PROVIDER, "api");
        }

        assert!(embed_query_local_only_if_enabled("lexical context")?.is_none());

        unsafe {
            std::env::set_var(ENV_FALLBACK, "off");
        }
        assert!(embed_query_local_only_if_enabled("lexical context")?.is_none());
        Ok(())
    })
}

#[test]
fn local_only_profile_fingerprint_tracks_effective_vector_policy() -> Result<()> {
    with_clean_env(|| {
        unsafe {
            std::env::set_var(ENV_PROVIDER, "feature-hash");
        }
        let feature_hash = local_only_embedding_profile_fingerprint();

        unsafe {
            std::env::set_var(ENV_PROVIDER, "off");
        }
        let off = local_only_embedding_profile_fingerprint();

        unsafe {
            std::env::set_var(ENV_PROVIDER, "api");
            std::env::remove_var(ENV_FALLBACK);
        }
        let skipped_remote = local_only_embedding_profile_fingerprint();

        assert_eq!(feature_hash.len(), 64);
        assert_eq!(off.len(), 64);
        assert_eq!(skipped_remote.len(), 64);
        assert_ne!(feature_hash, off);
        assert_ne!(feature_hash, skipped_remote);
        assert_ne!(off, skipped_remote);
        Ok(())
    })
}