lorefs 0.1.0

A lightweight, high-performance Rust native SDK for File-First Agent Memory.
Documentation
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use crate::error::{MemoryError, Result};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoreConfig {
    pub base_dir: PathBuf,
    pub git_enabled: bool,
    pub pinned_files: Vec<String>,
    pub reflection_every_n_turns: usize,
    pub auto_commit: bool,
}

impl LoreConfig {
    pub fn builder() -> LoreConfigBuilder {
        LoreConfigBuilder::default()
    }
}

pub struct LoreConfigBuilder {
    base_dir: Option<PathBuf>,
    git_enabled: bool,
    pinned_files: Vec<String>,
    reflection_every_n_turns: usize,
    auto_commit: bool,
}

impl Default for LoreConfigBuilder {
    fn default() -> Self {
        Self {
            base_dir: Some(PathBuf::from(".lore")),
            git_enabled: true,
            pinned_files: vec![
                "system/persona.md".into(),
                "system/preferences.md".into(),
                "MEMORY.md".into(),
            ],
            reflection_every_n_turns: 30,
            auto_commit: true,
        }
    }
}

impl LoreConfigBuilder {
    pub fn base_dir<P: Into<PathBuf>>(mut self, path: P) -> Self {
        self.base_dir = Some(path.into());
        self
    }

    pub fn git_enabled(mut self, enabled: bool) -> Self {
        self.git_enabled = enabled;
        self
    }

    pub fn pinned_files(mut self, files: Vec<String>) -> Self {
        self.pinned_files = files;
        self
    }

    pub fn reflection_every_n_turns(mut self, n: usize) -> Self {
        self.reflection_every_n_turns = n;
        self
    }

    pub fn auto_commit(mut self, enabled: bool) -> Self {
        self.auto_commit = enabled;
        self
    }

    pub fn build(self) -> Result<LoreConfig> {
        Ok(LoreConfig {
            base_dir: self.base_dir.ok_or_else(|| MemoryError::Config("Base directory is required".into()))?,
            git_enabled: self.git_enabled,
            pinned_files: self.pinned_files,
            reflection_every_n_turns: self.reflection_every_n_turns,
            auto_commit: self.auto_commit,
        })
    }
}