[package]
name = "mentisdb"
version = "0.9.5"
authors = ["Angel Leon <gubatron@gmail.com>"]
edition = "2021"
license = "MIT"
description = "Semantic, hash-chained durable memory for long-running and multi-agent systems."
repository = "https://github.com/CloudLLM-ai/mentisdb"
documentation = "https://docs.rs/mentisdb/latest/mentisdb/"
readme = "README.md"
keywords = ["agents", "memory", "event-sourcing", "llm", "orchestration"]
categories = ["data-structures", "development-tools", "asynchronous"]
exclude = ["data/", "docs/", "lme-benches/", ".fastembed_cache/", ".github/", "start_mentisdbd"]

[features]
default = ["server", "startup-sound", "llm-extraction"]
server = ["dep:axum", "dep:env_logger", "dep:log", "dep:tokio", "mcp/server", "dep:rcgen", "dep:axum-server", "dep:rustls-pemfile", "dep:reqwest", "dep:rustls"]
startup-sound = ["dep:rodio"]
local-embeddings = ["dep:fastembed", "dep:rustls"]
llm-extraction = ["dep:openai-rust2", "dep:anyhow"]

[dependencies]
async-trait = "0.1.89"
# WARNING: do not update bincode to 3.0.0, it's not functional
bincode = { version = "2.0.1", features = ["serde"] }
dashmap = "6"
rust-stemmers = "1"
subtle = "2.6"
chrono = { version = "0.4.44", features = ["serde"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
diffy = "0.4"
ed25519-dalek = { version = "2", features = ["alloc"] }
sha2 = "0.10.9"
crossterm = "0.28"
ratatui = "0.30.0"
toml_edit = "0.22.27"
uuid = { version = "1.22.0", features = ["v4", "serde"] }
mcp = { package = "cloudllm_mcp", version = "0.2.1" }
axum = { version = "0.8.8", optional = true }
axum-server = { version = "0.8", features = ["tls-rustls"], optional = true }
env_logger = { version = "0.11.8", optional = true }
log = { version = "0.4.28", optional = true }
rcgen = { version = "0.14", optional = true }
rustls-pemfile = { version = "2", optional = true }
rodio = { version = "0.22", optional = true }
tokio = { version = "1.50.0", features = ["full"], optional = true }
fastembed = { version = "5.13.1", optional = true }
# Needed to install an explicit rustls crypto provider.  The server feature
# pulls in rustls transitively via axum-server and reqwest; when both aws-lc-rs
# and ring are compiled in, rustls refuses to auto-select a default provider.
rustls = { version = "0.23", features = ["ring"], optional = true }
ureq = { version = "2", features = ["json"] }
arboard = { version = "3", default-features = false }
openai-rust2 = { version = "1.7.2", optional = true }
anyhow = { version = "1", optional = true }
zip = { version = "2.2", default-features = false, features = ["deflate"] }
walkdir = "2.5"

[target.'cfg(unix)'.dependencies]
libc = "0.2"
reqwest = { version = "0.13.2", features = ["json", "rustls"], optional = true, default-features = false }

[target.'cfg(windows)'.dependencies]
reqwest = { version = "0.13.2", features = ["json", "native-tls"], optional = true, default-features = false }

[dev-dependencies]
# WARNING: do not update bincode to 3.0.0, it's not functional
bincode = { version = "2.0.1", features = ["serde"] }
chrono = { version = "0.4.44", features = ["serde"] }
criterion = { version = "0.5", features = ["html_reports"] }
ed25519-dalek = { version = "2", features = ["alloc"] }
serde = { version = "1.0.228", features = ["derive"] }
sha2 = "0.10.9"
tempfile = "3"
tower = { version = "0.5.3", features = ["util"] }
uuid = { version = "1.22.0", features = ["v4", "serde"] }

[[bench]]
name = "thought_chain"
harness = false

[[bench]]
name = "skill_registry"
harness = false

[[bench]]
name = "http_concurrency"
harness = false

[[bench]]
name = "search_baseline"
harness = false

[[bench]]
name = "search_ranked"
harness = false

[[bin]]
name = "mentisdbd"
path = "src/bin/mentisdbd.rs"
required-features = ["server"]
