[package]
name = "memd"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "Local memory CLI for AI agents with hybrid retrieval"
repository = "https://github.com/fmschulz/memd"
homepage = "https://fmschulz.github.io/memd/"
documentation = "https://docs.rs/memd"
readme = "README.md"
keywords = ["memory", "cli", "agents", "retrieval"]
categories = ["command-line-utilities", "development-tools"]

[features]
default = []
cross-encoder-reranker = ["dep:ort", "dep:ndarray", "dep:flate2", "dep:tar"]
# Opt-in: run consolidation tests that invoke a real `claude`/`codex`
# CLI. OFF by default so the suite stays hermetic and offline.
live-llm = []
# Exposes `pub(crate)` test-only helpers (e.g.
# `SqliteMetadataStore::force_timestamp_created`) to integration tests in
# `crates/memd/tests/` that cannot see `#[cfg(test)]` items. The feature is
# OFF by default; enable it with `--features test-support` when an
# integration test needs these helpers, or let the in-tree `#[cfg(test)]`
# path cover the unit-test side.
test-support = []

[dependencies]
serde.workspace = true
serde_json.workspace = true
toml.workspace = true
thiserror.workspace = true
uuid.workspace = true
tracing.workspace = true
tracing-subscriber.workspace = true
clap.workspace = true
tokio.workspace = true
futures-util.workspace = true
async-trait.workspace = true
sha2.workspace = true

memmap2.workspace = true
rusqlite.workspace = true
roaring.workspace = true
crc32fast.workspace = true
bincode.workspace = true
byteorder.workspace = true
parking_lot.workspace = true
# Candle dependencies for embeddings
candle-core.workspace = true
candle-nn.workspace = true
candle-transformers.workspace = true
ort = { workspace = true, optional = true }
ndarray = { workspace = true, optional = true }
hnsw_rs.workspace = true
anndists.workspace = true
half.workspace = true
ureq.workspace = true
dirs.workspace = true
tokenizers.workspace = true
flate2 = { workspace = true, optional = true }
tar = { workspace = true, optional = true }
tantivy.workspace = true
rust-stemmers.workspace = true
unicode-segmentation.workspace = true
moka.workspace = true
# Tree-sitter for structural parsing
tree-sitter.workspace = true
streaming-iterator = "0.1"
tree-sitter-rust.workspace = true
tree-sitter-python.workspace = true
tree-sitter-typescript.workspace = true
tree-sitter-go.workspace = true
tree-sitter-javascript.workspace = true
tree-sitter-java.workspace = true
tree-sitter-cpp.workspace = true
regex.workspace = true

[dev-dependencies]
tempfile.workspace = true
rusqlite.workspace = true
proptest = "1.6"

[target.'cfg(unix)'.dependencies]
libc = { workspace = true }
