@lotargo/memory_plugin 1.1.4 → 1.1.6
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 +243 -234
- package/mcp-server/admin/server.js +228 -228
- package/mcp-server/admin/snapshot.js +303 -303
- package/mcp-server/benchmarks/fetch_real_corpus.js +351 -351
- package/mcp-server/benchmarks/gpu_profile_benchmark.js +170 -0
- package/mcp-server/benchmarks/stress_ingestion.js +195 -193
- package/mcp-server/benchmarks/test_dual_layer.js +140 -140
- package/mcp-server/cli.js +293 -7
- package/mcp-server/config/config_manager.js +11 -7
- package/mcp-server/db/database.js +43 -43
- package/mcp-server/graph/graph_extractor.js +72 -72
- package/mcp-server/graph/knowledge_linker.js +102 -102
- package/mcp-server/index.js +454 -454
- package/mcp-server/ingest/chunker.js +337 -337
- package/mcp-server/ingest/exporter.js +80 -80
- package/mcp-server/ingest/normalizer.js +104 -104
- package/mcp-server/ingest/pipeline.js +22 -7
- package/mcp-server/ingest/sentence_segmenter.js +74 -74
- package/mcp-server/memory.js +72 -72
- package/mcp-server/ml/gpu_monitor.js +166 -0
- package/mcp-server/ml/model_manager.js +327 -17
- package/mcp-server/preinstall.js +44 -22
- package/mcp-server/retrieval/retriever.js +10 -5
- package/mcp-server/setup.js +148 -148
- package/mcp-server/storage/blob_store.js +62 -62
- package/opencode-plugin/index.js +244 -244
- package/package.json +58 -54
- package/skills/using-memory/SKILL.md +122 -122
package/README.md
CHANGED
|
@@ -1,234 +1,243 @@
|
|
|
1
|
-
<div align="center">
|
|
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
|
-
```bash
|
|
114
|
-
npx @lotargo/memory_plugin
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
| Tool
|
|
130
|
-
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
|
166
|
-
| |
|
|
167
|
-
|
|
|
168
|
-
| |
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Lotargo/memory_pugin/main/assets/hero.jpg" alt="@lotargo/memory_plugin" width="480" style="max-width: 100%; border-radius: 12px; margin-bottom: 16px;">
|
|
4
|
+
|
|
5
|
+
# @lotargo/memory_plugin
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/@lotargo/memory_plugin)
|
|
8
|
+
[](./LICENSE)
|
|
9
|
+
|
|
10
|
+
<br>
|
|
11
|
+
|
|
12
|
+
**Zero-Docker Local Hybrid RAG Engine & Long-Term Memory for AI Coding Agents**
|
|
13
|
+
|
|
14
|
+
Automatically remembers durable user facts, ingests complex document repositories, and performs high-precision hybrid retrieval across sessions and platforms.
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Why @lotargo/memory_plugin?
|
|
21
|
+
|
|
22
|
+
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.
|
|
23
|
+
|
|
24
|
+
`@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.
|
|
25
|
+
|
|
26
|
+
### Practical Use Cases
|
|
27
|
+
|
|
28
|
+
#### 1. Software Development
|
|
29
|
+
|
|
30
|
+
- **Architectural Decisions**: _"In this project, we use Fastify instead of Express and strict schema validation via Zod."_
|
|
31
|
+
- **Coding Conventions**: _"Place all helper utilities inside `src/utils/` and always cover new functions with Vitest tests."_
|
|
32
|
+
- **Environment Constraints**: _"Our target deployment environment is Node.js 20 on AWS Lambda."_
|
|
33
|
+
|
|
34
|
+
#### 2. Everyday Chat & Interaction
|
|
35
|
+
|
|
36
|
+
- **User Profile & Communication Tone**: _"My name is Alex. I prefer concise, direct answers without conversational filler."_
|
|
37
|
+
- **Explanation Format**: _"Explain complex technical concepts using real-world code examples."_
|
|
38
|
+
- **Goals & Context**: _"I am currently building a multi-platform memory plugin and RAG engine."_
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Dual-Layer Architecture
|
|
43
|
+
|
|
44
|
+
1. **Layer 1: Notebook Store (Durable Personal & Project Facts)**
|
|
45
|
+
- Managed via `remember`, `recall`, and `forget`.
|
|
46
|
+
- Stores user preferences, identity, project conventions, and system rules in human-readable Markdown format.
|
|
47
|
+
- Guaranteed 100% precision instant retrieval as persistent context without threshold filtering or vector degradation.
|
|
48
|
+
|
|
49
|
+
2. **Layer 2: RAG Knowledge Base (Documentation & Repositories)**
|
|
50
|
+
- Managed via `ingest_document`, `query_knowledge_base`, and `manage_knowledge_base`.
|
|
51
|
+
- Ingests raw files, Markdown, HTML, and code repositories.
|
|
52
|
+
- 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.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Key Features
|
|
57
|
+
|
|
58
|
+
- **Zero Heavy Infrastructure**: No Docker, no Python server, no binary C++ build dependencies (`node-gyp`). Uses Node.js native SQLite database.
|
|
59
|
+
- **Bilingual & Multilingual Support**: SOTA semantic understanding across Russian, English, and technical code symbols.
|
|
60
|
+
- **3-Tier Hierarchy Chunking**: Document (Big) -> Section (Medium) -> Micro-Chunk (Small).
|
|
61
|
+
- **Hybrid RRF Fusion**: Combines SQLite FTS5 keyword precision with ONNX dense vector similarity.
|
|
62
|
+
- **GraphRAG Lite**: Automatically links documents and extracted code symbols (classes, functions, types).
|
|
63
|
+
- **Content-Addressable Storage (CAS)**: Local S3-style compressed blob store for raw original documents.
|
|
64
|
+
- **Dual-Source Model Failover**: Automatic HuggingFace CDN model downloading with fallback to GitHub Repository Mirror in case of rate-limits or HF outages.
|
|
65
|
+
- **Embedded Web Admin Dashboard**: Interactive single-page app served on `http://localhost:8765` with dynamic port resolution.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Supported Platforms
|
|
70
|
+
|
|
71
|
+
| Platform | Status | Mechanism |
|
|
72
|
+
| ---------------------------- | --------- | --------------------------------------------------------------------------- |
|
|
73
|
+
| **Antigravity / Gemini CLI** | Supported | MCP Server (`~/.gemini/config/mcp_config.json` & `.agents/mcp_config.json`) |
|
|
74
|
+
| **OpenCode** | Native | Native plugin + MCP Server (`~/.config/opencode/opencode.json`) |
|
|
75
|
+
| **Claude Code** | Supported | MCP Server (`~/.claude.json`) |
|
|
76
|
+
| **Codex** | Supported | MCP Server (`~/.codex/config.toml`) |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Minimum System Requirements
|
|
81
|
+
|
|
82
|
+
- **Node.js**: version `18.0.0` or higher
|
|
83
|
+
- **Package Manager**: `npm` / `npx` (included with Node.js)
|
|
84
|
+
- **Supported Environment**: OpenCode, Antigravity / Gemini CLI, Claude Code, or Codex
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Installation & Setup
|
|
89
|
+
|
|
90
|
+
Run this single command in your terminal to automatically configure memory for your AI tools:
|
|
91
|
+
|
|
92
|
+
### Install for All Detected Environments
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx @lotargo/memory_plugin setup
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Targeted Installation for a Specific Platform
|
|
99
|
+
|
|
100
|
+
- **Antigravity / Gemini CLI only**:
|
|
101
|
+
```bash
|
|
102
|
+
npx @lotargo/memory_plugin setup --antigravity
|
|
103
|
+
```
|
|
104
|
+
- **OpenCode only**:
|
|
105
|
+
```bash
|
|
106
|
+
npx @lotargo/memory_plugin setup --opencode
|
|
107
|
+
```
|
|
108
|
+
- **Claude Code only**:
|
|
109
|
+
```bash
|
|
110
|
+
npx @lotargo/memory_plugin setup --claude
|
|
111
|
+
```
|
|
112
|
+
- **Codex only**:
|
|
113
|
+
```bash
|
|
114
|
+
npx @lotargo/memory_plugin setup --codex
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Launch Web Admin Dashboard
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npx @lotargo/memory_plugin admin
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Available MCP Tools
|
|
126
|
+
|
|
127
|
+
### 1. Memory Tools (Key-Value Notebook)
|
|
128
|
+
|
|
129
|
+
| Tool | Description |
|
|
130
|
+
| ---------- | ------------------------------------------------------------ |
|
|
131
|
+
| `remember` | Save an important durable fact (`global` or `project` scope) |
|
|
132
|
+
| `recall` | Display saved facts (`project`, `global`, or `all`) |
|
|
133
|
+
| `forget` | Remove a saved fact by number or query |
|
|
134
|
+
|
|
135
|
+
### 2. Hybrid RAG Knowledge Base Tools
|
|
136
|
+
|
|
137
|
+
| Tool | Description |
|
|
138
|
+
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
139
|
+
| `ingest_document` | Ingest local files, web URLs, or raw text into 3-tier hierarchy index with ONNX vector embeddings and symbol extraction |
|
|
140
|
+
| `query_knowledge_base` | Perform hybrid RSF/RRF search (BM25 + Vector) to retrieve relevant candidate sections, code symbols, and context |
|
|
141
|
+
| `manage_knowledge_base` | List documents, delete documents (purging CAS & SQLite), view database stats, or export/import portable snapshots |
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Interactive CLI & Engine Tuning
|
|
146
|
+
|
|
147
|
+
Launch the interactive CLI terminal interface to configure fusion algorithm (RSF / RRF), alpha weights, embedding models, and reranker options:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# From local repository folder:
|
|
151
|
+
node mcp-server/index.js cli
|
|
152
|
+
# or
|
|
153
|
+
npx . cli
|
|
154
|
+
|
|
155
|
+
# If installed / linked globally via npm link:
|
|
156
|
+
memory_plugin cli
|
|
157
|
+
# or
|
|
158
|
+
memory-cli
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### CLI Menu Structure
|
|
162
|
+
|
|
163
|
+
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.
|
|
164
|
+
|
|
165
|
+
| Block | Item | What it does |
|
|
166
|
+
| ------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
167
|
+
| **Engine Settings** | Fusion Algorithm | Switch between `rsf`, `rrf`, `semantic_only`, `lexical_only`. Affects every `query_knowledge_base` call until changed. |
|
|
168
|
+
| | 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). |
|
|
169
|
+
| | Embedding Model | Pick any HF `Xenova/...` ONNX model. First query after switching downloads weights and pays a one-time memory cost. |
|
|
170
|
+
| | Reranker Model | Enable a cross-encoder (e.g. `bge-reranker-base`) on top of hybrid results, or disable for zero-latency fusion. |
|
|
171
|
+
| **Notebook** | Layer 1 Facts | Browse / delete `global` and per-project `.md` fact stores. Hooks `remember` / `recall` / `forget`. |
|
|
172
|
+
| **RAG Docs** | Layer 2 RAG Base | List ingested documents, inspect micro-chunk/section counts, and purge a document from FTS5 + vector index + CAS blobs. |
|
|
173
|
+
| **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. |
|
|
174
|
+
| | Run Search Verification Query | Issue a one-off `hybridQuery` against the live index to sanity-check retrieval with current settings. |
|
|
175
|
+
| | Clear Benchmark Corpus Cache | Delete the cached GitHub README corpus used by the benchmark (frees disk for re-fetch from scratch). |
|
|
176
|
+
| | Reset Config to Factory Defaults | Restore `config_defaults.json` to disk. |
|
|
177
|
+
|
|
178
|
+
### Why use the CLI?
|
|
179
|
+
|
|
180
|
+
- **Iterative tuning**: change `alpha` and re-run the benchmark in <60 s to see if MRR/Recall move — no model reload, corpus is cached.
|
|
181
|
+
- **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.
|
|
182
|
+
- **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.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Testing & Benchmarking
|
|
187
|
+
|
|
188
|
+
To run the automated test suite and benchmarks locally:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cd mcp-server
|
|
192
|
+
|
|
193
|
+
# Run unit and integration tests
|
|
194
|
+
npm test
|
|
195
|
+
|
|
196
|
+
# Run benchmark suite (ONNX embeddings + real technical corpus)
|
|
197
|
+
npm run benchmark
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Benchmark Methodology
|
|
201
|
+
|
|
202
|
+
The benchmark suite (`mcp-server/benchmarks/`) is the canonical way to evaluate retrieval quality changes. It runs three phases end-to-end:
|
|
203
|
+
|
|
204
|
+
1. **Dual-layer verification** — asserts Notebook and RAG layers are isolated (zero crosstalk, 100% precision on `recall`).
|
|
205
|
+
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.
|
|
206
|
+
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`.
|
|
207
|
+
|
|
208
|
+
**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").
|
|
209
|
+
|
|
210
|
+
**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.
|
|
211
|
+
|
|
212
|
+
> **Note**: The runner auto-respawns with `--expose-gc` so heap deltas can be measured post-GC. Pass `--no-respawn` to disable.
|
|
213
|
+
|
|
214
|
+
### Empirical Search Quality & Benchmark Summary
|
|
215
|
+
|
|
216
|
+
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).
|
|
217
|
+
|
|
218
|
+
#### Current Benchmark Performance (Instruction-Tuned Paradigm)
|
|
219
|
+
|
|
220
|
+
_Model: Xenova/multilingual-e5-small over full 32-document technical corpus (21 queries)._
|
|
221
|
+
|
|
222
|
+
| Retrieval Strategy | MRR@5 | Recall@5 | NDCG@5 |
|
|
223
|
+
| ----------------------------- | :--------: | :--------: | :--------: |
|
|
224
|
+
| BM25 Lexical Search Only | 0.5873 | 66.67% | 0.6077 |
|
|
225
|
+
| Dense ONNX Vector Only | 0.8333 | 85.71% | 0.8396 |
|
|
226
|
+
| Hybrid RRF ($k=60$) | 0.9048 | 90.48% | 0.9048 |
|
|
227
|
+
| **Hybrid RSF ($\alpha=0.5$)** | **0.9206** | **95.24%** | **0.9286** |
|
|
228
|
+
|
|
229
|
+
For complete benchmark methodology, baseline comparisons, mathematical formulations, and category breakdowns, refer to [BENCHMARKS.md](./BENCHMARKS.md).
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Storage & Privacy
|
|
234
|
+
|
|
235
|
+
- **100% Local Storage**: All SQLite indexes, ONNX models, CAS blobs, and Markdown notebooks are stored locally under `~/.config/opencode/memory/`.
|
|
236
|
+
- **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.
|
|
237
|
+
- **Zero External Telemetry**: No third-party network calls are required after initial model setup.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## License
|
|
242
|
+
|
|
243
|
+
MIT
|