Files
boocode/openspec/changes/memory-v2-hybrid-search/tasks.md

1.2 KiB

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.tsrankByRelevancerankByHybrid 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