@lotargo/memory_plugin 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,18 @@
1
1
  <div align="center">
2
2
 
3
- # @lotargo/memory_plugin
3
+ <img src="./assets/hero.jpg" alt="@lotargo/memory_plugin" width="800" style="max-width: 100%; border-radius: 12px; margin-bottom: 16px;">
4
+
5
+ <br>
6
+
7
+ <img src="./assets/title.svg" alt="@lotargo/memory_plugin" width="520" style="max-width: 100%; margin-bottom: 12px;">
8
+
9
+ <br>
4
10
 
5
11
  [![npm version](https://img.shields.io/npm/v/@lotargo/memory_plugin)](https://www.npmjs.com/package/@lotargo/memory_plugin)
6
12
  [![license](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)
13
+ [![node version](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)
14
+ [![mcp](https://img.shields.io/badge/MCP-Supported-8A2BE2)](https://modelcontextprotocol.io)
15
+ [![storage](https://img.shields.io/badge/Storage-100%25%20Local-success)](#storage--privacy)
7
16
 
8
17
  <br>
9
18
 
@@ -15,128 +24,134 @@ Automatically remembers durable user facts, ingests complex document repositorie
15
24
 
16
25
  ---
17
26
 
18
- ## Why @lotargo/memory_plugin?
27
+ ## Overview
19
28
 
20
- Standard AI coding assistants lose context as soon as a chat session closes or a conversation is reset. You end up having to repeatedly re-explain your preferences, architecture decisions, code style, or project conventions.
29
+ Standard AI coding assistants lose context as soon as a chat session closes or a conversation is reset. You end up repeatedly re-explaining your preferences, architectural decisions, coding style, or project conventions.
21
30
 
22
31
  `@lotargo/memory_plugin` gives your AI tools durable, 100% local long-term memory and document retrieval capabilities that persist across restarts and work seamlessly across all supported coding environments.
23
32
 
24
- ### Practical Use Cases
33
+ > **Project Scope & Runtime Notes**:
34
+ > `@lotargo/memory_plugin` is designed primarily as a practical plugin to expand capabilities and streamline daily interaction with AI coding tools. Benchmark scores in this repository represent internal synthetic evaluation runs and are not intended as generalized RAG benchmarks.
35
+ >
36
+ > **Hardware Acceleration**: GPU execution mode is an experimental feature and may vary in stability across different operating systems or models. For optimal stability and consistent runtime performance, using standard CPU mode with `multilingual-e5-small` or `multilingual-e5-base` is recommended.
25
37
 
26
- #### 1. Software Development
27
- - **Architectural Decisions**: *"In this project, we use Fastify instead of Express and strict schema validation via Zod."*
28
- - **Coding Conventions**: *"Place all helper utilities inside `src/utils/` and always cover new functions with Vitest tests."*
29
- - **Environment Constraints**: *"Our target deployment environment is Node.js 20 on AWS Lambda."*
38
+ ### Practical Use Cases
30
39
 
31
- #### 2. Everyday Chat & Interaction
32
- - **User Profile & Communication Tone**: *"My name is Alex. I prefer concise, direct answers without conversational filler."*
33
- - **Explanation Format**: *"Explain complex technical concepts using real-world code examples."*
34
- - **Goals & Context**: *"I am currently building a multi-platform memory plugin and RAG engine."*
40
+ - **Architectural Decisions**: _"In this project, we use Fastify instead of Express and strict schema validation via Zod."_
41
+ - **Coding Conventions**: _"Place all helper utilities inside `src/utils/` and cover new functions with Vitest tests."_
42
+ - **Environment Constraints**: _"Our target deployment environment is Node.js 20 on AWS Lambda."_
43
+ - **User Profile & Tone**: _"My name is Alex. I prefer concise, direct answers without conversational filler."_
35
44
 
36
45
  ---
37
46
 
38
- ## Dual-Layer Architecture
47
+ ## Quick Start
39
48
 
40
- 1. **Layer 1: Notebook Store (Durable Personal & Project Facts)**
41
- - Managed via `remember`, `recall`, and `forget`.
42
- - Stores user preferences, identity, project conventions, and system rules in human-readable Markdown format.
43
- - Guaranteed 100% precision instant retrieval as persistent context without threshold filtering or vector degradation.
49
+ ### Minimum System Requirements
44
50
 
45
- 2. **Layer 2: RAG Knowledge Base (Documentation & Repositories)**
46
- - Managed via `ingest_document`, `query_knowledge_base`, and `manage_knowledge_base`.
47
- - Ingests raw files, Markdown, HTML, and code repositories.
48
- - Dynamic 3-tier hierarchy chunking (Big / Medium / Small), SQLite FTS5 BM25 search, ONNX dense vector embeddings (`multilingual-e5-small`), Reciprocal Rank Fusion (RRF), and GraphRAG Lite code symbol extraction.
51
+ - **Node.js**: `18.0.0` or higher
52
+ - **Package Manager**: `npm` / `npx` (included with Node.js)
53
+ - **Supported Environment**: OpenCode, Antigravity / Gemini CLI, Claude Code, or Codex
49
54
 
50
- ---
55
+ ### Installation
51
56
 
52
- ## Key Features
57
+ Run the unified setup command to configure all detected AI environments automatically:
53
58
 
54
- - **Zero Heavy Infrastructure**: No Docker, no Python server, no binary C++ build dependencies (`node-gyp`). Uses Node.js native SQLite database.
55
- - **Bilingual & Multilingual Support**: SOTA semantic understanding across Russian, English, and technical code symbols.
56
- - **3-Tier Hierarchy Chunking**: Document (Big) -> Section (Medium) -> Micro-Chunk (Small).
57
- - **Hybrid RRF Fusion**: Combines SQLite FTS5 keyword precision with ONNX dense vector similarity.
58
- - **GraphRAG Lite**: Automatically links documents and extracted code symbols (classes, functions, types).
59
- - **Content-Addressable Storage (CAS)**: Local S3-style compressed blob store for raw original documents.
60
- - **Dual-Source Model Failover**: Automatic HuggingFace CDN model downloading with fallback to GitHub Repository Mirror in case of rate-limits or HF outages.
61
- - **Embedded Web Admin Dashboard**: Interactive single-page app served on `http://localhost:8765` with dynamic port resolution.
59
+ ```bash
60
+ npx @lotargo/memory_plugin setup
61
+ ```
62
+
63
+ To target a specific environment:
64
+
65
+ ```bash
66
+ # Antigravity / Gemini CLI
67
+ npx @lotargo/memory_plugin setup --antigravity
68
+
69
+ # OpenCode
70
+ npx @lotargo/memory_plugin setup --opencode
71
+
72
+ # Claude Code
73
+ npx @lotargo/memory_plugin setup --claude
74
+
75
+ # Codex
76
+ npx @lotargo/memory_plugin setup --codex
77
+ ```
62
78
 
63
79
  ---
64
80
 
65
- ## Supported Platforms
81
+ ## Dual-Layer Architecture
82
+
83
+ 1. **Layer 1: Notebook Store (Durable Facts)**
84
+ - **Tools**: `remember`, `recall`, `forget`
85
+ - **Scope**: User preferences, identity, project conventions, system rules.
86
+ - **Storage**: Human-readable Markdown format (`global` and per-project stores).
87
+ - **Performance**: Guaranteed 100% precision instant lookup without vector degradation or threshold filtering.
66
88
 
67
- | Platform | Status | Mechanism |
68
- |----------|--------|-----------|
69
- | **Antigravity / Gemini CLI** | Supported | MCP Server (`~/.gemini/config/mcp_config.json` & `.agents/mcp_config.json`) |
70
- | **OpenCode** | Native | Native plugin + MCP Server (`~/.config/opencode/opencode.json`) |
71
- | **Claude Code** | Supported | MCP Server (`~/.claude.json`) |
72
- | **Codex** | Supported | MCP Server (`~/.codex/config.toml`) |
89
+ 2. **Layer 2: RAG Knowledge Base (Technical Documents & Codebases)**
90
+ - **Tools**: `ingest_document`, `query_knowledge_base`, `manage_knowledge_base`
91
+ - **Capabilities**: Ingests raw text files, Markdown, HTML, and full code repositories.
92
+ - **Engine Components**: 3-tier hierarchy chunking (Big / Medium / Small), SQLite FTS5 BM25 search, ONNX dense vector embeddings (`multilingual-e5-small`), Reciprocal Rank Fusion (RRF / RSF), and GraphRAG Lite code symbol extraction.
73
93
 
74
94
  ---
75
95
 
76
- ## Minimum System Requirements
96
+ ## Key Features
77
97
 
78
- - **Node.js**: version `18.0.0` or higher
79
- - **Package Manager**: `npm` / `npx` (included with Node.js)
80
- - **Supported Environment**: OpenCode, Antigravity / Gemini CLI, Claude Code, or Codex
98
+ - **Zero Heavy Infrastructure**: No Docker, no Python server, no C++ compilation (`node-gyp`). Uses Node.js native SQLite database.
99
+ - **Bilingual & Multilingual Support**: State-of-the-art semantic precision across Russian, English, and technical code symbols.
100
+ - **3-Tier Hierarchy Chunking**: Document (Big) -> Section (Medium) -> Micro-Chunk (Small).
101
+ - **Hybrid RRF/RSF Fusion**: Combines SQLite FTS5 keyword precision with ONNX dense vector similarity.
102
+ - **GraphRAG Lite**: Automatically links documents and extracted code symbols (classes, functions, types).
103
+ - **Content-Addressable Storage (CAS)**: Local S3-style compressed blob store for raw original documents.
104
+ - **Dual-Source Model Failover**: Automatic HuggingFace CDN model downloading with GitHub Repository Mirror fallback.
105
+ - **Interactive CLI Management**: Terminal GUI interface for runtime engine tuning, database maintenance, and diagnostics.
81
106
 
82
107
  ---
83
108
 
84
- ## Installation & Setup
109
+ ## Supported Platforms
85
110
 
86
- Run this single command in your terminal to automatically configure memory for your AI tools:
111
+ | Platform | Status | Configuration Mechanism |
112
+ | :--------------------------- | :----------- | :-------------------------------------------------------------------------- |
113
+ | **Antigravity / Gemini CLI** | Supported | MCP Server (`~/.gemini/config/mcp_config.json` & `.agents/mcp_config.json`) |
114
+ | **OpenCode** | Native | Native plugin + MCP Server (`~/.config/opencode/opencode.json`) |
115
+ | **Claude Code** | Supported | MCP Server (`~/.claude.json`) |
116
+ | **Codex** | Supported | MCP Server (`~/.codex/config.toml`) |
117
+ | **Google Jules** | Experimental | MCP Server via global install (`npm install -g @lotargo/memory_plugin`) |
87
118
 
88
- ### Install for All Detected Environments
89
- ```bash
90
- npx @lotargo/memory_plugin setup
91
- ```
119
+ ### Google Jules Integration (Experimental)
92
120
 
93
- ### Targeted Installation for a Specific Platform
121
+ The plugin has been verified inside the **Google Jules** cloud workspace environment.
94
122
 
95
- - **Antigravity / Gemini CLI only**:
96
- ```bash
97
- npx @lotargo/memory_plugin setup --antigravity
98
- ```
99
- - **OpenCode only**:
100
- ```bash
101
- npx @lotargo/memory_plugin setup --opencode
102
- ```
103
- - **Claude Code only**:
123
+ - **Setup Method**: Global pre-installation:
104
124
  ```bash
105
- npx @lotargo/memory_plugin setup --claude
106
- ```
107
- - **Codex only**:
108
- ```bash
109
- npx @lotargo/memory_plugin setup --codex
125
+ npm install -g @lotargo/memory_plugin
110
126
  ```
111
-
112
- ### Launch Web Admin Dashboard
113
- ```bash
114
- npx @lotargo/memory_plugin admin
115
- ```
127
+ - **Verification**: Google Jules automatically discovers the registered MCP server upon workspace initialization and seamlessly interacts with memory & RAG tools (`remember`, `recall`, `ingest_document`, `query_knowledge_base`).
128
+ - **Current Limitation**: All memory stores and vector indexes operate locally within the workspace environment. Cross-session cloud synchronization across different Jules runs is planned for upcoming releases.
116
129
 
117
130
  ---
118
131
 
119
132
  ## Available MCP Tools
120
133
 
121
134
  ### 1. Memory Tools (Key-Value Notebook)
122
- | Tool | Description |
123
- |------|-------------|
124
- | `remember` | Save an important durable fact (`global` or `project` scope) |
125
- | `recall` | Display saved facts (`project`, `global`, or `all`) |
126
- | `forget` | Remove a saved fact by number or query |
135
+
136
+ | Tool | Scope / Target | Description |
137
+ | :--------- | :---------------------------- | :------------------------------------------- |
138
+ | `remember` | `global` or `project` | Save an important durable fact or preference |
139
+ | `recall` | `project`, `global`, or `all` | Display saved facts |
140
+ | `forget` | Index ID or query | Remove a saved fact |
127
141
 
128
142
  ### 2. Hybrid RAG Knowledge Base Tools
129
- | Tool | Description |
130
- |------|-------------|
131
- | `ingest_document` | Ingest local files, web URLs, or raw text into 3-tier hierarchy index with ONNX vector embeddings and symbol extraction |
132
- | `query_knowledge_base` | Perform hybrid RSF/RRF search (BM25 + Vector) to retrieve relevant candidate sections, code symbols, and context |
133
- | `manage_knowledge_base` | List documents, delete documents (purging CAS & SQLite), view database stats, or export/import portable snapshots |
143
+
144
+ | Tool | Target | Description |
145
+ | :---------------------- | :------------------------------ | :--------------------------------------------------------------------------- |
146
+ | `ingest_document` | Local files, Web URLs, Raw text | Ingest into 3-tier index with ONNX vector embeddings & symbol extraction |
147
+ | `query_knowledge_base` | Text / Code query | Perform hybrid RSF/RRF search (BM25 + Vector) to retrieve candidate sections |
148
+ | `manage_knowledge_base` | Actions / Documents | List documents, delete entries, view DB stats, or export/import snapshots |
134
149
 
135
150
  ---
136
151
 
137
152
  ## Interactive CLI & Engine Tuning
138
153
 
139
- Launch the interactive CLI terminal interface to configure fusion algorithm (RSF / RRF), alpha weights, embedding models, and reranker options:
154
+ Launch the interactive CLI terminal interface to manage engine settings, inspect databases, and tune retrieval parameters:
140
155
 
141
156
  ```bash
142
157
  # From local repository folder:
@@ -144,34 +159,29 @@ node mcp-server/index.js cli
144
159
  # or
145
160
  npx . cli
146
161
 
147
- # If installed / linked globally via npm link:
162
+ # If installed / linked globally:
148
163
  memory_plugin cli
149
164
  # or
150
165
  memory-cli
151
166
  ```
152
167
 
153
- ### CLI Menu Structure
168
+ ### CLI Menu Overview
154
169
 
155
- The interactive menu exposes the same runtime knobs that `hybridQuery` honours, so you can change search behaviour without editing code or restarting the MCP server. Keys: **↑ / ↓** to navigate, **ENTER** to select, **BACKSPACE** to go back.
170
+ The interactive menu exposes runtime parameters that `hybridQuery` honors, allowing search behavior modifications without restarting the MCP server. Use **Up / Down** arrows to navigate, **ENTER** to select, and **BACKSPACE** to go back.
156
171
 
157
- | Block | Item | What it does |
158
- |---|---|---|
159
- | **Engine Settings** | Fusion Algorithm | Switch between `rsf`, `rrf`, `semantic_only`, `lexical_only`. Affects every `query_knowledge_base` call until changed. |
160
- | | RSF Alpha Balance | Weight of semantic over lexical in `rsf` fusion (`α ∈ [0,1]`). Default `0.5`; best-in-class tuning is reported by the benchmark (see §Testing). |
161
- | | Embedding Model | Pick any HF `Xenova/...` ONNX model. First query after switching downloads weights and pays a one-time memory cost. |
162
- | | Reranker Model | Enable a cross-encoder (e.g. `bge-reranker-base`) on top of hybrid results, or disable for zero-latency fusion. |
163
- | **Notebook** | Layer 1 Facts | Browse / delete `global` and per-project `.md` fact stores. Hooks `remember` / `recall` / `forget`. |
164
- | **RAG Docs** | Layer 2 RAG Base | List ingested documents, inspect micro-chunk/section counts, and purge a document from FTS5 + vector index + CAS blobs. |
165
- | **Diagnostics** | Run Search Quality Benchmark | Executes the full benchmark suite in-process and prints the winner table (see §Testing). Surfaces `winner` + RRF-vs-RSF significance so you can decide before flipping the algorithm. |
166
- | | Run Search Verification Query | Issue a one-off `hybridQuery` against the live index to sanity-check retrieval with current settings. |
167
- | | Clear Benchmark Corpus Cache | Delete the cached GitHub README corpus used by the benchmark (frees disk for re-fetch from scratch). |
168
- | | Reset Config to Factory Defaults | Restore `config_defaults.json` to disk. |
172
+ | Block | Menu Item | Functionality |
173
+ | :------------------ | :--------------------------- | :----------------------------------------------------------------------------- |
174
+ | **Engine Settings** | Fusion Algorithm | Switch between `rsf`, `rrf`, `semantic_only`, `lexical_only`. |
175
+ | | RSF Alpha Balance | Weight of semantic over lexical in `rsf` fusion (`α ∈ [0,1]`). Default: `0.5`. |
176
+ | | Embedding Model | Select ONNX model (e.g. `Xenova/multilingual-e5-small`). |
177
+ | | Reranker Model | Enable Cross-Encoder reranking or disable for zero-latency fusion. |
178
+ | **Notebook** | Layer 1 Facts | Browse and manage `global` and per-project `.md` fact stores. |
179
+ | **RAG Docs** | Layer 2 RAG Base | List ingested documents, inspect chunk counts, and purge entries. |
180
+ | **Diagnostics** | Run Search Quality Benchmark | Execute in-process search evaluation across benchmark query set. |
181
+ | | Verification Query | Run a test `hybridQuery` against the active index. |
182
+ | | Clear Cache & Reset | Clear cached benchmark corpus or restore factory default config. |
169
183
 
170
- ### Why use the CLI?
171
-
172
- - **Iterative tuning**: change `alpha` and re-run the benchmark in <60 s to see if MRR/Recall move — no model reload, corpus is cached.
173
- - **Reproducible diagnostics**: the benchmark tabulates MRR/Recall/NDCG per mode and per category, so you can attribute a regression to a specific query or fusion knob.
174
- - **Zero config drift**: settings persist to `~/.config/opencode/memory/config.json` and are picked up by the MCP server on next `query_knowledge_base` / `hybridQuery` call.
184
+ Settings persist to `~/.config/opencode/memory/config.json` and are immediately loaded by the MCP server.
175
185
 
176
186
  ---
177
187
 
@@ -185,50 +195,53 @@ cd mcp-server
185
195
  # Run unit and integration tests
186
196
  npm test
187
197
 
188
- # Run benchmark suite (ONNX embeddings + real technical corpus)
198
+ # Run search quality & ingestion benchmarks
189
199
  npm run benchmark
190
200
  ```
191
201
 
192
202
  ### Benchmark Methodology
193
203
 
194
- The benchmark suite (`mcp-server/benchmarks/`) is the canonical way to evaluate retrieval quality changes. It runs three phases end-to-end:
204
+ The benchmark suite (`mcp-server/benchmarks/`) evaluates retrieval quality across three phases:
205
+
206
+ 1. **Dual-Layer Verification**: Asserts Notebook and RAG layers are isolated (zero crosstalk, 100% precision on `recall`).
207
+ 2. **Ingestion Benchmark**: Ingests test documents with ONNX `multilingual-e5-small` embeddings, reporting throughput, DB size, CAS blob footprint, and heap delta.
208
+ 3. **Search Quality Benchmark**: Evaluates cross-lingual and code-keyword queries against 4 retrieval strategies with bootstrap 95% CIs, paired t-tests, and hyperparameter sweeps over RSF $\alpha$ and RRF $k$.
195
209
 
196
- 1. **Dual-layer verification** asserts Notebook and RAG layers are isolated (zero crosstalk, 100% precision on `recall`).
197
- 2. **Ingestion benchmark** — fetches 27 real GitHub README documents, ingests them with ONNX `multilingual-e5-small` embeddings, and reports throughput, DB size, blob footprint, and heap delta.
198
- 3. **Search quality benchmark** — evaluates 21 challenging Russian→English / cross-lingual / code-keyword queries against 4 retrieval strategies with per-category breakdown, bootstrap 95% CIs, paired t-tests, and grid searches over RSF `α` and RRF `k`.
210
+ ### Search Quality Results (Smoke Test)
199
211
 
200
- **Strict matching policy**: a query is counted as hit iff the returned chunk belongs to one of the query's predefined `expectedDocIds` (derived from corpus source-id, e.g. `axios_readme`). This avoids false positives from substring overlap (e.g. query "next" against any doc mentioning "next").
212
+ _Note: The following metrics reflect a quick smoke-test evaluation run performed on a reduced subset of documents to verify retrieval logic precision._
201
213
 
202
- **Outputs**: In addition to the human-readable markdown report at `dev_docs/benchmark_results.md`, each run also writes a machine-readable JSON sidecar `dev_docs/benchmark_<timestamp>.json` and archives a copy under `dev_docs/benchmark_history/` for regression tracking across runs.
214
+ Evaluated across a reduced document subset using Mean Reciprocal Rank (MRR@5), Recall@5, and Normalized Discounted Cumulative Gain (NDCG@5):
203
215
 
204
- > **Note**: The runner auto-respawns with `--expose-gc` so heap deltas can be measured post-GC. Pass `--no-respawn` to disable.
216
+ | Retrieval Strategy | MRR@5 | Recall@5 | NDCG@5 |
217
+ | :---------------------------- | :--------: | :---------: | :--------: |
218
+ | BM25 Lexical Search Only | 0.6706 | 76.19% | 0.6934 |
219
+ | Dense ONNX Vector Only | 0.8135 | 100.00% | 0.8612 |
220
+ | Hybrid RRF ($k=10$) | 0.8810 | 95.24% | 0.8997 |
221
+ | **Hybrid RSF ($\alpha=0.5$)** | **0.9286** | **100.00%** | **0.9473** |
205
222
 
206
- ### Empirical Search Quality & Benchmark Summary
223
+ For complete methodology details, see [`docs/BENCHMARKS.md`](./docs/BENCHMARKS.md).
207
224
 
208
- The search quality of `@lotargo/memory_plugin` is evaluated across real-world multi-document technical repositories using Mean Reciprocal Rank (MRR@5), Recall@5, and Normalized Discounted Cumulative Gain (NDCG@5).
225
+ ---
209
226
 
210
- #### Current Benchmark Performance (Instruction-Tuned Paradigm)
211
- *Model: Xenova/multilingual-e5-small over full 32-document technical corpus (21 queries).*
227
+ ## Documentation & Reports
212
228
 
213
- | Retrieval Strategy | MRR@5 | Recall@5 | NDCG@5 |
214
- |---|:---:|:---:|:---:|
215
- | BM25 Lexical Search Only | 0.5873 | 66.67% | 0.6077 |
216
- | Dense ONNX Vector Only | 0.8333 | 85.71% | 0.8396 |
217
- | Hybrid RRF ($k=60$) | 0.9048 | 90.48% | 0.9048 |
218
- | **Hybrid RSF ($\alpha=0.5$)** | **0.9206** | **95.24%** | **0.9286** |
229
+ Detailed technical documentation and architectural specifications are available in the [`docs/`](./docs) directory:
219
230
 
220
- For complete benchmark methodology, baseline comparisons, mathematical formulations, and category breakdowns, refer to [BENCHMARKS.md](./BENCHMARKS.md).
231
+ - [**Verification Report (`MEMORY_PLUGIN_REPORT.md`)**](./docs/MEMORY_PLUGIN_REPORT.md): Summary report covering MCP Tool Registry, JSON-RPC integration testing, layer isolation validation, and search precision.
232
+ - [**Comprehensive Technical Report (`MEMORY_PLUGIN_COMPREHENSIVE_REPORT.md`)**](./docs/MEMORY_PLUGIN_COMPREHENSIVE_REPORT.md): Scientific analysis of system architecture, dual-layer model, hardware environment specifications, mathematical search formulations, and event-loop profiling.
233
+ - [**Benchmark Methodology & Guide (`BENCHMARKS.md`)**](./docs/BENCHMARKS.md): Guide to automated benchmark execution, hyperparameter sweeps (RSF $\alpha$, RRF $k$), search quality metrics, and performance tracking across releases.
221
234
 
222
235
  ---
223
236
 
224
237
  ## Storage & Privacy
225
238
 
226
239
  - **100% Local Storage**: All SQLite indexes, ONNX models, CAS blobs, and Markdown notebooks are stored locally under `~/.config/opencode/memory/`.
227
- - **Dual-Source Failover Model Fetching**: Primary model weights are fetched from HuggingFace CDN with automatic failover to GitHub Repository Mirror if rate-limited or offline.
240
+ - **Dual-Source Failover Model Fetching**: Primary model weights are fetched from HuggingFace CDN with automatic failover to GitHub Repository Mirror.
228
241
  - **Zero External Telemetry**: No third-party network calls are required after initial model setup.
229
242
 
230
243
  ---
231
244
 
232
245
  ## License
233
246
 
234
- MIT
247
+ [MIT](./LICENSE)