31 lines
1.2 KiB
Markdown
31 lines
1.2 KiB
Markdown
# Tasks — Memory v2
|
|
|
|
## Prerequisites
|
|
- v2.8.0 on main (v1 memory module shipped)
|
|
|
|
## Tasks
|
|
|
|
### 1. BM25 ranker
|
|
- [ ] 1.1 Write `bm25.ts` — pure function, no deps. BM25Okapi formula: `sum over terms of IDF * (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * docLen / avgDocLen))`
|
|
- [ ] 1.2 Unit tests with known corpus
|
|
|
|
### 2. Embedding module
|
|
- [ ] 2.1 Write `embeddings.ts` — load ONNX model, `embed(texts: string[]): number[][]`
|
|
- [ ] 2.2 Write `ranker.ts` — cosine similarity + BM25 weighted merge
|
|
- [ ] 2.3 Fallback to BM25-only when model unavailable
|
|
|
|
### 3. Hybrid recall
|
|
- [ ] 3.1 Refactor `recall.ts` — `rankByRelevance` → `rankByHybrid` using BM25 + embedding when available
|
|
- [ ] 3.2 Keep keyword-only path as `MEMORY_SEARCH=keyword` env fallback
|
|
- [ ] 3.3 Server tests pass
|
|
|
|
### 4. Agent tools
|
|
- [ ] 4.1 Create `extract_memory` tool — persists entry, returns path
|
|
- [ ] 4.2 Create `search_memory` tool — replaces raw injection when used
|
|
- [ ] 4.3 Tool tests pass
|
|
|
|
### 5. Smoke
|
|
- [ ] 5.1 Create `.boocode/memory/project/style.md` with "Use two-space indentation"
|
|
- [ ] 5.2 `search_memory("what spacing convention")` returns the entry
|
|
- [ ] 5.3 `extract_memory("project", "Naming", "PascalCase for components")` creates the file
|