#![forbid(unsafe_code)]
#![warn(missing_docs)]
mod cache;
mod crypto;
mod embed;
mod embed_cmd;
mod error;
mod format;
mod index;
pub mod mcp;
mod memory;
mod pager;
mod result_cache;
mod session;
mod store;
mod wal;
pub use crypto::KdfParams;
pub use embed::{Embedder, EmbedderIdentity};
pub use embed_cmd::{EmbedCmd, DEFAULT_EMBED_TIMEOUT};
pub use error::{MnemoError, Result};
pub use index::{IndexConfig, IndexInfo};
pub use memory::{Memory, MemoryType, Metric, Scope, ScoreWeights};
pub use result_cache::{
CacheBudget, CacheFlushPolicy, CachePutOpts, CacheStats, CachedValue, SemanticCachePutOpts,
DEFAULT_BATCH_MAX_AGE, DEFAULT_BATCH_MAX_DIRTY, DEFAULT_MAX_BYTES, DEFAULT_MAX_ENTRIES,
DEFAULT_SEMANTIC_THRESHOLD,
};
pub use session::{Role, Session, Turn};
pub use store::{
CompactReport, Mnemo, MnemoConfig, RecallRequest, RecallResult, SnapshotInfo, Stats,
};
pub use ulid::Ulid;
#[cfg(any(test, feature = "failpoints"))]
#[doc(hidden)]
pub mod __failpoints {
pub fn set_writes_until_fail(n: i64) {
crate::pager::failpoints::set_writes_until_fail(n)
}
}
#[doc(hidden)]
pub mod __fuzz {
pub fn parse_header(bytes: &[u8]) -> crate::Result<()> {
crate::format::Header::from_page(bytes).map(|_| ())
}
pub fn wal_recover_bytes(region: &[u8], wal_seq: u64) -> crate::Result<()> {
crate::wal::recover_bytes(region, wal_seq).map(|_| ())
}
pub fn decode_memory(bytes: &[u8]) -> crate::Result<()> {
rmp_serde::from_slice::<crate::Memory>(bytes)
.map(|_| ())
.map_err(|e| crate::MnemoError::Serialize(e.to_string()))
}
pub fn decode_cache_entry(bytes: &[u8]) -> crate::Result<()> {
rmp_serde::from_slice::<crate::result_cache::CacheEntry>(bytes)
.map(|_| ())
.map_err(|e| crate::MnemoError::Serialize(e.to_string()))
}
pub fn decode_cache_directory(bytes: &[u8]) -> crate::Result<()> {
rmp_serde::from_slice::<Vec<crate::result_cache::CacheDirectoryEntry>>(bytes)
.map(|_| ())
.map_err(|e| crate::MnemoError::Serialize(e.to_string()))
}
pub fn parse_mcp_request_line(line: &str) -> Result<(), String> {
crate::mcp::__fuzz_parse_request_line(line)
}
}