1.2.0: smarter recall ranking with per-category reserve
Reworks recall ranking so the most relevant context leads, across both the CLI recall and the MCP recall_context — they now share one pipeline (buildRecallSections).
Exact-match ranking. Exact (lexical) grep matches used to print as an unranked sidecar after the semantic top-N, burying canonical docs that scored below the semantic threshold or sat in the compressed score band.
- Semantic hits an exact term also matched are annotated (
exact: <terms>). - Exact-match docs with no semantic hit are promoted into the ranked list (rendered
exact:), categorized from their URI. - Ranking is category-first → exact-term count → semantic score. The sidecar now lists only matches not already shown.
Per-category reserve. selectShownHits reserves up to RECALL_CATEGORY_RESERVE (2) slots per category before filling the rest of the window by global rank, so a memory-heavy result no longer crowds seeded resources and skills out of view. Memories still lead and take every leftover slot; under a tight nodeLimit the reserve is best-effort by priority.
Also:
- Memories rank ahead of resources ahead of skills;
dedupeByContentcollapses resource/skill hits with identical snippets (memories never collapsed), after exact-boost so an exact-matched twin survives. - Seeding ignores
.claude/worktrees/and.worktrees/. - MCP
grepdefaultsurito the caller's memories root instead of erroring when omitted. - Bumps the package version to
1.2.0.
PR: #28