Goal
Enhance passive hydration to include keyword-matched tool results alongside semantic results. Catches exact matches that vector search misses.
Depends on: #69 (FTS5 keyword search)
Design: .oh/designs/fts5-tool-result-search.md (Phase 2)
Context
Passive hydration currently uses LanceDB vector search only. After #69 lands, we have an FTS5 store of all tool results. This issue adds a keyword boost step to passive hydration:
- Extract distinctive terms from the hot window (file paths, error codes, identifiers)
- Query FTS5 with those terms
- If any keyword results aren't already in the semantic results, append them (up to 2-3 extra entries within hydration budget)
Additive only -- doesn't replace semantic search, just catches the "exact error code" case.
Acceptance Criteria
Technical Notes
Files to modify
packages/coding-agent/src/context/recall/passive-hydration.ts
Approach
- After
searchRecall() returns semantic results, extract key terms from hot window
- Run FTS5 query via
ToolResultStore.search()
- Dedup against semantic results (match by content hash or turn number)
- Append novel keyword results up to budget
Goal
Enhance passive hydration to include keyword-matched tool results alongside semantic results. Catches exact matches that vector search misses.
Depends on: #69 (FTS5 keyword search)
Design:
.oh/designs/fts5-tool-result-search.md(Phase 2)Context
Passive hydration currently uses LanceDB vector search only. After #69 lands, we have an FTS5 store of all tool results. This issue adds a keyword boost step to passive hydration:
Additive only -- doesn't replace semantic search, just catches the "exact error code" case.
Acceptance Criteria
Technical Notes
Files to modify
packages/coding-agent/src/context/recall/passive-hydration.tsApproach
searchRecall()returns semantic results, extract key terms from hot windowToolResultStore.search()