remem-ai 0.3.8

Persistent memory for Claude Code — single binary, zero subprocesses
Documentation
use crate::memory::Memory;

use super::discover::discover_entities;
use super::merge::rank_merged_ids;

fn make_memory(id: i64, title: &str, text: &str) -> Memory {
    Memory {
        id,
        session_id: None,
        project: "proj".to_string(),
        topic_key: None,
        title: title.to_string(),
        text: text.to_string(),
        memory_type: "discovery".to_string(),
        files: None,
        created_at_epoch: 0,
        updated_at_epoch: 0,
        status: "active".to_string(),
        branch: None,
        scope: "project".to_string(),
    }
}

#[test]
fn discover_entities_skips_query_entities_and_deduplicates() {
    let first_hop = vec![
        make_memory(1, "Melanie", "Tom Sarah"),
        make_memory(2, "Tom", "Sarah Tom"),
    ];

    let entities = discover_entities("Melanie", &first_hop);
    assert_eq!(entities, vec!["Tom", "Sarah"]);
}

#[test]
fn rank_merged_ids_boosts_overlap_and_respects_limit() {
    let ranked = rank_merged_ids(&[1, 2], &[2, 3], 3);
    assert_eq!(ranked, vec![2, 1, 3]);

    let limited = rank_merged_ids(&[1, 2], &[2, 3], 2);
    assert_eq!(limited, vec![2, 1]);
}