1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
[]
= "mnem-cli"
= "Command-line interface for mnem - git for knowledge graphs."
= true
= true
= true
= true
= true
= true
= true
= ["command-line-utilities", "database"]
= ["mnem", "knowledge-graph", "cli", "vcs"]
= "README.md"
= "https://docs.rs/mnem-cli"
[[]]
= "mnem"
= "src/main.rs"
# docs.rs rendering: the CLI is a binary + tiny library surface (mostly
# `config`, `commands` helpers exported for integration tests). No
# optional features on this crate, so the default build is the full API.
[]
= true
= ["--cfg", "docsrs"]
[]
= true
# Bundled-embedder default: the `bundled-embedder` feature opts
# the CLI into shipping a self-contained dense embedder so first-time
# users do not have to run `ollama serve` on a separate terminal AND
# do not have to issue `mnem config set embed.provider …` before
# semantic retrieve works. Forwards to `mnem-embed-providers`'s
# `onnx-bundled` feature, which uses `ort/download-binaries` so
# `cargo install` produces a single binary.
#
# When the feature is on, `config::resolve_embedder()` falls back to
# `OnnxConfig { model: "all-MiniLM-L6-v2", … }` whenever the per-
# repo and user-global configs are silent. The model itself (~92MB)
# is lazy-downloaded from HuggingFace on first use and cached under
# `~/.cache/huggingface/hub`.
#
# Switching to a custom embedder later: `mnem config set embed.provider
# ollama|openai|onnx` (per-repo) or write `~/.mnem/config.toml`
# (user-global). Either overrides the bundled fallback.
[]
= []
= ["mnem-embed-providers/onnx-bundled"]
# GPU execution-provider variants. Forward to the matching feature on
# `mnem-embed-providers` so the CLI ships a self-contained binary that
# routes inference through CUDA or DirectML when available, with the
# CPU EP as a runtime fallback. 5-15x speedup on a supported GPU; same
# vectors as the CPU build (small fp rounding differences only).
= ["mnem-embed-providers/onnx-bundled-cuda"]
= ["mnem-embed-providers/onnx-bundled-directml"]
# cargo-binstall metadata: lets `cargo binstall mnem-cli` fetch the
# prebuilt archive from the GitHub release instead of compiling from
# source. The URL template matches the archive names produced by
# `.github/workflows/release.yml` (`binaries` job).
# See https://github.com/cargo-bins/cargo-binstall for the spec.
[]
= "{ repo }/releases/download/v{ version }/mnem-{ target }.{ archive-format }"
= "mnem-{ target }/{ bin }{ binary-ext }"
= "tgz"
[]
= "zip"
[]
= { = "../mnem-core", = "=0.1.0" }
= { = "../mnem-backend-redb", = "=0.1.0" }
= { = "../mnem-transport", = "=0.1.0", = ["client"] }
= { = "../mnem-embed-providers", = "=0.1.0", = ["mock"] }
= { = "../mnem-rerank-providers", = "=0.1.0" }
= { = "../mnem-llm-providers", = "=0.1.0" }
# Ingest pipeline (Phase-B5c): parses Markdown / text / PDF / chat-JSON
# sources into Doc + Chunk + Entity subgraphs. Wired here behind the
# `mnem ingest` subcommand (Phase-B5d). The `keybert` feature (C3 FIX-3)
# forwards the statistical KeyBERT adapter so `mnem ingest --extractor
# keybert <file>` runs end-to-end against the operator's configured
# embedder; zero-cost when the flag is absent.
= { = "../mnem-ingest", = "=0.1.0", = ["keybert"] }
# E4 T2: Centroid+MMR extractive summarizer, wired behind the
# `--summarize` flag on `mnem retrieve`. Zero-impact without the
# flag: the crate is only called when `args.summarize` is true.
= { = "../mnem-graphrag", = "=0.1.0" }
# v1.0 benchmark harness for `mnem bench`. The crate compiles standalone
# (path-only dep, no version pin while v1.0 stabilises) and pulls its
# own dialoguer + indicatif + ureq + sha2 surface; we link by path so
# the workspace builds cleanly without a release of mnem-bench yet.
= { = "../mnem-bench", = "=0.1.0", = false }
# `info_span` + `info!` in `mnem ingest`; per-file progress rides the
# standard tracing subscriber so `RUST_LOG=mnem_ingest=info` shows it.
= { = true }
= { = "4.5", = ["derive"] }
# Shell-completion generator: emits bash / zsh / fish / powershell /
# elvish scripts from the same `Cli` derive that drives the main
# binary. Small crate, widely used, same release cadence as `clap`.
= "4.5"
= { = true, = ["derive"] }
= "1"
= "1"
= "1"
= { = true }
= { = true }
# TUI for `mnem integrate`. Default features off so we avoid the
# `fuzzy-select` + `console` colour bloat; fall back to plain prompts
# on dumb terminals. Small, well-maintained, widely used.
= { = "0.11", = false }
# Cross-platform home / config-dir detection for `mnem integrate` host
# probes and `mnem doctor`.
= "6"
# Used by `mnem doctor` to probe embedding-provider reachability
# (`GET {base}/api/tags` on Ollama, `GET /v1/models` on OpenAI).
# `mnem-embed-providers` already ships ureq transitively; we re-declare
# here so this crate builds in isolation (e.g. via `cargo install`).
= { = "2.12", = false, = ["tls"] }
# Async runtime for the remote-transport verbs (`mnem fetch` / `push`
# / `pull`). Single-threaded current-thread runtime is enough: the
# CLI blocks on a single round-trip, there is no parallel fan-out.
# Feature set mirrors `mnem-transport`'s `client` feature so the
# runtime boundaries line up.
= { = "1", = false, = ["rt", "macros"] }
# Progress bars for long-running ops: `mnem reindex` (per-node embed)
# and `mnem ingest --recursive` (per-file walk). Detects non-TTY
# automatically and degrades to no-op output on redirected stdout, so
# CI logs and shell pipelines stay clean. Default-on, no flag needed.
= { = "0.17", = false }
[]
# CLI integration tests: assert_cmd drives the built binary in a
# temp-dir repo and asserts on stdout + exit code. `tempfile` gives us
# isolated per-test directories.
= "2.0"
= "3.14"