@amsterdamdatalabs/enact-docs-search 0.1.1 → 0.2.0

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.
Files changed (63) hide show
  1. package/README.md +74 -4
  2. package/dist/cli.js +182 -54
  3. package/dist/cli.js.map +1 -1
  4. package/dist/dependency-errors.d.ts +3 -0
  5. package/dist/dependency-errors.d.ts.map +1 -0
  6. package/dist/dependency-errors.js +26 -0
  7. package/dist/dependency-errors.js.map +1 -0
  8. package/dist/doctor.d.ts +17 -0
  9. package/dist/doctor.d.ts.map +1 -0
  10. package/dist/doctor.js +88 -0
  11. package/dist/doctor.js.map +1 -0
  12. package/dist/embeddings/embedding-service.d.ts.map +1 -1
  13. package/dist/embeddings/embedding-service.js +2 -3
  14. package/dist/embeddings/embedding-service.js.map +1 -1
  15. package/dist/indexing/chunker.d.ts +6 -1
  16. package/dist/indexing/chunker.d.ts.map +1 -1
  17. package/dist/indexing/chunker.js +17 -11
  18. package/dist/indexing/chunker.js.map +1 -1
  19. package/dist/indexing/embedding-text.d.ts +22 -0
  20. package/dist/indexing/embedding-text.d.ts.map +1 -0
  21. package/dist/indexing/embedding-text.js +27 -0
  22. package/dist/indexing/embedding-text.js.map +1 -0
  23. package/dist/indexing/frontmatter.d.ts +48 -0
  24. package/dist/indexing/frontmatter.d.ts.map +1 -0
  25. package/dist/indexing/frontmatter.js +162 -0
  26. package/dist/indexing/frontmatter.js.map +1 -0
  27. package/dist/indexing/indexing-service.d.ts +1 -4
  28. package/dist/indexing/indexing-service.d.ts.map +1 -1
  29. package/dist/indexing/indexing-service.js +24 -12
  30. package/dist/indexing/indexing-service.js.map +1 -1
  31. package/dist/search/authority.d.ts +31 -0
  32. package/dist/search/authority.d.ts.map +1 -0
  33. package/dist/search/authority.js +50 -0
  34. package/dist/search/authority.js.map +1 -0
  35. package/dist/search/relevance.d.ts +80 -0
  36. package/dist/search/relevance.d.ts.map +1 -0
  37. package/dist/search/relevance.js +119 -0
  38. package/dist/search/relevance.js.map +1 -0
  39. package/dist/search/search-service.d.ts +44 -2
  40. package/dist/search/search-service.d.ts.map +1 -1
  41. package/dist/search/search-service.js +181 -23
  42. package/dist/search/search-service.js.map +1 -1
  43. package/dist/search/snippet.d.ts +11 -0
  44. package/dist/search/snippet.d.ts.map +1 -1
  45. package/dist/search/snippet.js +102 -17
  46. package/dist/search/snippet.js.map +1 -1
  47. package/dist/storage/document-store.d.ts +47 -5
  48. package/dist/storage/document-store.d.ts.map +1 -1
  49. package/dist/storage/document-store.js +94 -16
  50. package/dist/storage/document-store.js.map +1 -1
  51. package/dist/storage/persistence.d.ts +6 -10
  52. package/dist/storage/persistence.d.ts.map +1 -1
  53. package/dist/storage/persistence.js +20 -20
  54. package/dist/storage/persistence.js.map +1 -1
  55. package/dist/storage/vector-store.d.ts +2 -3
  56. package/dist/storage/vector-store.d.ts.map +1 -1
  57. package/dist/storage/vector-store.js +5 -15
  58. package/dist/storage/vector-store.js.map +1 -1
  59. package/dist/types.d.ts +2 -7
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/types.js +2 -20
  62. package/dist/types.js.map +1 -1
  63. package/package.json +9 -2
@@ -1,5 +1,27 @@
1
+ /**
2
+ * Adapted from obsidian-qmd (MIT): https://github.com/thirteen37/obsidian-qmd
3
+ * Source: src/search/SearchService.ts. Carried over: the core idea of
4
+ * Reciprocal Rank Fusion over independently-ranked BM25 and vector result
5
+ * lists, with small positional bonuses for top ranks (RRF_K=60, same
6
+ * constant as upstream). Dropped: `QueryExpansionService` and
7
+ * `RerankingService` integration — both call out to an LLM, which is out of
8
+ * scope for this offline CLI (the brief's three dependencies are minisearch,
9
+ * @huggingface/transformers, and hnswlib-node; no LLM client). Also dropped:
10
+ * `groupByFile`/section dedup UI conveniences not needed by a line-oriented
11
+ * CLI, since callers get raw scored chunks that already carry a line number.
12
+ */
13
+ import { searchableText } from "../storage/document-store.js";
1
14
  import { extractQueryTerms, buildSnippet } from "./snippet.js";
15
+ import { passesKeywordGate, passesVectorGate, normalizeQuery, DEFAULT_MIN_TERM_COVERAGE, DEFAULT_MIN_VECTOR_SCORE, } from "./relevance.js";
16
+ import { authorityFactor } from "./authority.js";
2
17
  const RRF_K = 60;
18
+ /**
19
+ * Retrieval over-fetch. The gate and the authority pass both remove or demote
20
+ * results, so each modality is asked for more than the caller wants -- without
21
+ * this a demoted document merely shuffles within the page instead of leaving
22
+ * it.
23
+ */
24
+ const OVERFETCH = 3;
3
25
  export class SearchService {
4
26
  docStore;
5
27
  vectorStore;
@@ -9,54 +31,137 @@ export class SearchService {
9
31
  this.vectorStore = vectorStore;
10
32
  this.embeddingService = embeddingService;
11
33
  }
34
+ /**
35
+ * Fetch vector chunks and collapse to the best-scoring chunk per FILE,
36
+ * growing the request until `fileLimit` distinct files are found (or the
37
+ * store has no more chunks to give).
38
+ *
39
+ * `DocumentStore.search` collapses to one result per file before slicing
40
+ * to a limit (see its comment); a raw HNSW search can't do the equivalent
41
+ * because it has to be told a chunk budget upfront, and one large document
42
+ * can own most of that budget -- on the real corpus,
43
+ * docs/architecture/engine/lessons-learned.md supplied 26 of the top 30
44
+ * vector hits for one query, leaving only 4 chunk-slots (not file-slots)
45
+ * for every other document combined. Raising the chunk budget cannot fix
46
+ * this in general, since a bigger document just needs a bigger multiple.
47
+ * Instead ask for more chunks, geometrically, until enough distinct files
48
+ * have shown up -- the same "collapse before slice" shape the keyword side
49
+ * already gets from MiniSearch returning its full match list.
50
+ */
51
+ async fetchVectorResultsByFile(embedding, fileLimit) {
52
+ let k = fileLimit * OVERFETCH;
53
+ let byFile = new Map();
54
+ let previousRawCount = -1;
55
+ for (;;) {
56
+ const raw = await this.vectorStore.search(embedding, k);
57
+ byFile = new Map();
58
+ for (const r of raw) {
59
+ const incumbent = byFile.get(r.filePath);
60
+ if (!incumbent || r.score > incumbent.score)
61
+ byFile.set(r.filePath, r);
62
+ }
63
+ // Stop once enough distinct files have surfaced, or once a bigger
64
+ // request came back with exactly as many chunks as last time -- the
65
+ // store has no more to give and growing `k` further would only loop.
66
+ if (byFile.size >= fileLimit || raw.length === previousRawCount)
67
+ break;
68
+ previousRawCount = raw.length;
69
+ k *= 2;
70
+ }
71
+ return Array.from(byFile.values()).sort((a, b) => b.score - a.score);
72
+ }
12
73
  async search(query, options) {
13
- const trimmed = query.trim();
74
+ // The CLI normalizes (pipe-stripping, whitespace-collapsing) before
75
+ // calling in, but a library consumer of SearchService directly would
76
+ // otherwise get different pipe-handling than the CLI does for the exact
77
+ // same query string. Doing it here makes every caller's behaviour the
78
+ // same. Idempotent, so normalizing an already-normalized CLI query is a
79
+ // no-op, not a double-transform.
80
+ const trimmed = normalizeQuery(query);
14
81
  if (!trimmed)
15
82
  return [];
16
83
  const limit = options.limit ?? 10;
84
+ // The CLI validates its flags, but this is also a library entry point. An
85
+ // unchecked limit reached hnswlib as a negative k and surfaced a native
86
+ // error describing the opposite problem; a fractional or NaN limit silently
87
+ // emptied the page via slice(). Fail here, where the message can be true.
88
+ if (!Number.isInteger(limit) || limit < 1) {
89
+ throw new Error(`limit must be a positive integer, got ${String(options.limit)}`);
90
+ }
17
91
  const highlight = options.highlight ?? "plain";
18
92
  const repoRoot = options.repoRoot;
19
93
  switch (options.mode) {
20
94
  case "keyword":
21
- return this.textSearch(trimmed, options.scope, limit, highlight, repoRoot);
95
+ return this.finish(await this.textSearch(trimmed, limit, highlight, repoRoot, options), limit, options);
22
96
  case "semantic":
23
- return this.semanticSearch(trimmed, options.scope, limit, highlight, repoRoot);
97
+ return this.finish(await this.semanticSearch(trimmed, limit, highlight, repoRoot, options), limit, options);
24
98
  case "hybrid":
25
- return this.hybridSearch(trimmed, options.scope, limit, highlight, repoRoot);
99
+ return this.finish(await this.hybridSearch(trimmed, limit, highlight, repoRoot, options), limit, options);
26
100
  }
27
101
  }
28
- async textSearch(query, scope, limit, highlight, repoRoot) {
29
- const results = await this.docStore.search(query, { limit, scope, highlight, repoRoot });
30
- return results.map((r) => ({
102
+ async textSearch(query, limit, highlight, repoRoot, options) {
103
+ const minCoverage = options.minCoverage ?? DEFAULT_MIN_TERM_COVERAGE;
104
+ const stats = this.docStore.corpusStats(extractQueryTerms(query));
105
+ const results = await this.docStore.search(query, {
106
+ limit: limit * OVERFETCH,
107
+ highlight,
108
+ repoRoot,
109
+ });
110
+ return results
111
+ .filter((r) => passesKeywordGate(query, searchableText(r), minCoverage, stats))
112
+ .map((r) => ({
31
113
  id: r.id,
32
114
  filePath: r.filePath,
33
115
  chunkIndex: r.chunkIndex,
34
116
  startLine: r.startLine,
35
117
  textScore: r.score,
118
+ baseScore: r.score,
36
119
  snippet: r.snippet,
37
120
  content: r.content,
38
121
  headingBreadcrumb: r.headingBreadcrumb,
122
+ title: r.title,
123
+ description: r.description,
124
+ headings: r.headings,
125
+ status: r.status,
126
+ documentType: r.documentType,
127
+ lastUpdate: r.lastUpdate,
39
128
  source: "text",
40
129
  }));
41
130
  }
42
- async semanticSearch(query, scope, limit, highlight, repoRoot) {
131
+ async semanticSearch(query, limit, highlight, repoRoot, options) {
43
132
  if (!this.embeddingService) {
44
133
  throw new Error("Semantic search requires an embedding service");
45
134
  }
135
+ const minVectorScore = options.minVectorScore ?? DEFAULT_MIN_VECTOR_SCORE;
46
136
  const embedding = await this.embeddingService.embed(query);
47
- const results = await this.vectorStore.search(embedding, limit, scope);
137
+ const raw = await this.fetchVectorResultsByFile(embedding, limit * OVERFETCH);
138
+ const results = raw.filter((r) => passesVectorGate(r.score, minVectorScore));
48
139
  const queryTerms = extractQueryTerms(query);
49
140
  const hybridResults = [];
50
141
  for (const r of results) {
51
142
  const doc = await this.docStore.getDocument(r.id);
143
+ // The vector index and the document store are written separately, so a
144
+ // point can outlive its chunk. Without the chunk there is no line and no
145
+ // text to show -- it rendered as a citation to "file:0" with no snippet.
146
+ // Drop what we cannot substantiate rather than print a line that is not
147
+ // there.
148
+ if (!doc)
149
+ continue;
52
150
  hybridResults.push({
53
151
  id: r.id,
54
152
  filePath: r.filePath,
55
153
  chunkIndex: r.chunkIndex,
56
154
  startLine: doc?.startLine ?? 0,
57
155
  vectorScore: r.score,
156
+ baseScore: r.score,
58
157
  content: doc?.content,
59
158
  headingBreadcrumb: doc?.headingBreadcrumb,
159
+ title: doc?.title,
160
+ description: doc?.description,
161
+ headings: doc?.headings,
162
+ status: doc?.status,
163
+ documentType: doc?.documentType,
164
+ lastUpdate: doc?.lastUpdate,
60
165
  snippet: doc
61
166
  ? await buildSnippet({ filePath: r.filePath, content: doc.content, startLine: doc.startLine }, queryTerms, highlight, repoRoot)
62
167
  : undefined,
@@ -65,16 +170,28 @@ export class SearchService {
65
170
  }
66
171
  return hybridResults;
67
172
  }
68
- async hybridSearch(query, scope, limit, highlight, repoRoot) {
69
- const [textResults, vectorResults] = await Promise.all([
70
- this.docStore.search(query, { limit: limit * 2, scope, highlight, repoRoot }),
173
+ async hybridSearch(query, limit, highlight, repoRoot, options) {
174
+ const minCoverage = options.minCoverage ?? DEFAULT_MIN_TERM_COVERAGE;
175
+ const minVectorScore = options.minVectorScore ?? DEFAULT_MIN_VECTOR_SCORE;
176
+ const [rawText, rawVector] = await Promise.all([
177
+ this.docStore.search(query, { limit: limit * OVERFETCH, highlight, repoRoot }),
71
178
  this.embeddingService
72
- ? this.vectorStore.search(await this.embeddingService.embed(query), limit * 2, scope)
179
+ ? this.fetchVectorResultsByFile(await this.embeddingService.embed(query), limit * OVERFETCH)
73
180
  : Promise.resolve([]),
74
181
  ]);
75
- const byId = new Map();
182
+ // Gate each list on its own evidence before fusion. Afterwards the scores
183
+ // are ranks, and a rank cannot tell a good match from a bad one.
184
+ const stats = this.docStore.corpusStats(extractQueryTerms(query));
185
+ const textResults = rawText.filter((r) => passesKeywordGate(query, searchableText(r), minCoverage, stats));
186
+ const vectorResults = rawVector.filter((r) => passesVectorGate(r.score, minVectorScore));
187
+ // Fuse per FILE, not per chunk. The keyword and vector sides routinely pick
188
+ // different chunks of the same document; keyed by chunk id they would
189
+ // compete as separate entries and one side's evidence would be thrown away
190
+ // at the final collapse. Keyed by file they reinforce, which is what a
191
+ // document matching both ways should mean.
192
+ const byFile = new Map();
76
193
  textResults.forEach((r, index) => {
77
- byId.set(r.id, {
194
+ byFile.set(r.filePath, {
78
195
  id: r.id,
79
196
  filePath: r.filePath,
80
197
  chunkIndex: r.chunkIndex,
@@ -84,20 +201,32 @@ export class SearchService {
84
201
  snippet: r.snippet,
85
202
  content: r.content,
86
203
  headingBreadcrumb: r.headingBreadcrumb,
204
+ title: r.title,
205
+ description: r.description,
206
+ headings: r.headings,
207
+ status: r.status,
208
+ documentType: r.documentType,
209
+ lastUpdate: r.lastUpdate,
87
210
  source: "text",
88
211
  });
89
212
  });
90
213
  const queryTerms = extractQueryTerms(query);
91
214
  for (const [index, r] of vectorResults.entries()) {
92
- const existing = byId.get(r.id);
215
+ const existing = byFile.get(r.filePath);
93
216
  if (existing) {
94
- existing.vectorScore = r.score;
95
- existing.vectorRank = index + 1;
217
+ // Keep the keyword side's chunk for display -- its snippet already has
218
+ // the query terms marked -- and take the vector rank as extra evidence
219
+ // for the same document.
220
+ existing.vectorScore = Math.max(existing.vectorScore ?? 0, r.score);
221
+ existing.vectorRank = Math.min(existing.vectorRank ?? Infinity, index + 1);
96
222
  existing.source = "hybrid";
97
223
  }
98
224
  else {
99
225
  const doc = await this.docStore.getDocument(r.id);
100
- byId.set(r.id, {
226
+ // Same orphan case as in semanticSearch: no chunk, nothing to cite.
227
+ if (!doc)
228
+ continue;
229
+ byFile.set(r.filePath, {
101
230
  id: r.id,
102
231
  filePath: r.filePath,
103
232
  chunkIndex: r.chunkIndex,
@@ -106,6 +235,12 @@ export class SearchService {
106
235
  vectorRank: index + 1,
107
236
  content: doc?.content,
108
237
  headingBreadcrumb: doc?.headingBreadcrumb,
238
+ title: doc?.title,
239
+ description: doc?.description,
240
+ headings: doc?.headings,
241
+ status: doc?.status,
242
+ documentType: doc?.documentType,
243
+ lastUpdate: doc?.lastUpdate,
109
244
  snippet: doc
110
245
  ? await buildSnippet({ filePath: r.filePath, content: doc.content, startLine: doc.startLine }, queryTerms, highlight, repoRoot)
111
246
  : undefined,
@@ -113,7 +248,7 @@ export class SearchService {
113
248
  });
114
249
  }
115
250
  }
116
- const results = Array.from(byId.values()).map((r) => {
251
+ const results = Array.from(byFile.values()).map((r) => {
117
252
  let rrfScore = 0;
118
253
  if (r.textRank) {
119
254
  rrfScore += 1 / (RRF_K + r.textRank);
@@ -130,10 +265,33 @@ export class SearchService {
130
265
  rrfScore += 0.02;
131
266
  }
132
267
  const { textRank, vectorRank, ...clean } = r;
133
- return { ...clean, rrfScore };
268
+ return { ...clean, rrfScore, baseScore: rrfScore };
269
+ });
270
+ return results;
271
+ }
272
+ /**
273
+ * Apply authority weighting and produce the final page.
274
+ *
275
+ * Every mode ends here, so `--mode keyword` cannot become a quiet bypass of
276
+ * the same weighting hybrid results get.
277
+ */
278
+ finish(results, limit, options) {
279
+ const now = options.now ?? Date.now();
280
+ const weighted = results.map((r) => {
281
+ const base = r.baseScore ?? r.rrfScore ?? r.textScore ?? r.vectorScore ?? 0;
282
+ const authority = options.rawRank ? 1 : authorityFactor(r, now);
283
+ return { ...r, baseScore: base, authority, finalScore: base * authority };
134
284
  });
135
- results.sort((a, b) => (b.rrfScore ?? 0) - (a.rrfScore ?? 0));
136
- return results.slice(0, limit);
285
+ weighted.sort((a, b) => b.finalScore - a.finalScore);
286
+ // No per-file dedup here: every path into this method already returns
287
+ // at most one row per file. DocumentStore.search (used by both
288
+ // textSearch and hybridSearch's text side) and fetchVectorResultsByFile
289
+ // both collapse to the best-scoring chunk per file before their caller
290
+ // ever sees a result, and hybridSearch's fusion map is keyed by
291
+ // filePath. Verified with an instrumented dedup counter across the full
292
+ // test suite plus the exact "two chunks of one file both clear the
293
+ // gate" semantic-mode shape that used to need this -- it never fires.
294
+ return weighted.slice(0, limit).map(({ finalScore, ...r }) => r);
137
295
  }
138
296
  }
139
297
  //# sourceMappingURL=search-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-service.js","sourceRoot":"","sources":["../../src/search/search-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-service.js","sourceRoot":"","sources":["../../src/search/search-service.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,17 @@ export declare function extractQueryTerms(query: string): string[];
16
16
  * the output programmatically, so escape codes would just be noise, and
17
17
  * literal `**` clutter is exactly the bug being fixed). */
18
18
  export type HighlightMode = "ansi" | "plain";
19
+ /**
20
+ * Does `text` contain `term` as a word?
21
+ *
22
+ * The single definition of "contains this term", shared by snippet
23
+ * highlighting, the relevance gate, and the document-frequency count behind
24
+ * it. Two implementations of this question disagree silently: a substring
25
+ * test credited a document about a "dialog box" with the term "log" while
26
+ * reporting that "log" appeared in no document at all, which handed it
27
+ * maximum IDF weight and inverted the ranking.
28
+ */
29
+ export declare function containsTerm(text: string, term: string): boolean;
19
30
  /** Context needed to resolve a chunk-local match position against the real,
20
31
  * full source file rather than just the chunk's own text (fix #4 in the
21
32
  * module doc-comment). `chunkStartLine` is the chunk's 1-based start line
@@ -1 +1 @@
1
- {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../src/search/snippet.ts"],"names":[],"mappings":"AAwDA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKzD;AAMD;;;;;;;8DAO8D;AAC9D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAoO7C;;;;kCAIkC;AAClC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,GAAE,aAAuB,EACtC,WAAW,CAAC,EAAE,WAAW,GACxB,MAAM,CA4BR;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,aAAa,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
1
+ {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../src/search/snippet.ts"],"names":[],"mappings":"AAoFA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASzD;AAMD;;;;;;;8DAO8D;AAC9D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AA+C7C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGhE;AAsMD;;;;kCAIkC;AAClC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,GAAE,aAAuB,EACtC,WAAW,CAAC,EAAE,WAAW,GACxB,MAAM,CA4BR;AAuBD,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,aAAa,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -43,14 +43,42 @@
43
43
  * (JSON / non-TTY).
44
44
  */
45
45
  import { readFile } from "node:fs/promises";
46
+ import { parseFrontmatter, normalizeLineEndings } from "../indexing/frontmatter.js";
46
47
  import { join } from "node:path";
47
48
  /** Small, deliberately conservative English stopword list — short, very
48
- * common function words only. Not an aggressive/exhaustive list; the goal
49
- * is just to stop them from being treated as meaningful match terms. */
49
+ * English function words, plus the command and lookup verbs that read as
50
+ * filler inside a hybrid query. These drive both snippet highlighting and the
51
+ * relevance gate, so a word listed here cannot carry a query on its own. */
50
52
  const STOPWORDS = new Set([
51
- "a", "an", "and", "the", "to", "of", "in", "on", "for", "is", "are",
52
- "was", "were", "be", "been", "this", "that", "with", "as", "at", "by",
53
- "from", "or",
53
+ // Pronouns
54
+ "i", "me", "my", "mine", "myself", "we", "us", "our", "ours", "ourselves",
55
+ "you", "your", "yours", "he", "him", "his", "she", "her", "hers", "it",
56
+ "its", "they", "them", "their", "theirs", "who", "whom", "whose",
57
+ // be / have / do
58
+ "am", "is", "are", "was", "were", "be", "been", "being",
59
+ "have", "has", "had", "having", "do", "does", "did", "doing", "done",
60
+ // Modals
61
+ "can", "could", "will", "would", "shall", "should", "may", "might", "must",
62
+ // Determiners and quantifiers
63
+ "a", "an", "the", "this", "that", "these", "those", "some", "any", "each",
64
+ "every", "all", "both", "few", "more", "most", "other", "another", "such",
65
+ "own", "same",
66
+ // Prepositions
67
+ "about", "after", "again", "against", "at", "before", "between", "by",
68
+ "during", "for", "from", "in", "into", "of", "on", "onto", "out", "over",
69
+ "through", "to", "under", "until", "up", "upon", "with", "within", "without",
70
+ // Conjunctions
71
+ "and", "or", "but", "if", "nor", "so", "than", "because", "while", "then",
72
+ // Question and request scaffolding
73
+ "what", "when", "where", "which", "why", "how",
74
+ "tell", "explain", "describe", "give", "please", "want", "need", "let",
75
+ // Adverbs and fillers
76
+ "not", "no", "only", "very", "too", "also", "here", "there", "now", "still",
77
+ "even", "well", "once",
78
+ // Command and lookup verbs. A literal token like `just`, `get` or `list` is
79
+ // exactly what ripgrep answers instantly and precisely; inside a hybrid
80
+ // query it is filler that dilutes the terms carrying the meaning.
81
+ "just", "run", "set", "get", "list", "use", "used", "using", "show", "find",
54
82
  ]);
55
83
  /**
56
84
  * Extract meaningful query terms for match/highlight purposes: lowercase,
@@ -64,6 +92,10 @@ export function extractQueryTerms(query) {
64
92
  return query
65
93
  .toLowerCase()
66
94
  .split(/\s+/)
95
+ // Strip leading/trailing punctuation only. A term like "using?" would
96
+ // otherwise never match text, while still consuming weight in the
97
+ // relevance gate; interior punctuation is meaning ("pre-commit").
98
+ .map((t) => t.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu, ""))
67
99
  .filter((t) => t.length >= 3 && !STOPWORDS.has(t));
68
100
  }
69
101
  function escapeRegex(str) {
@@ -88,10 +120,43 @@ function applyMarkdownBold(text, mode) {
88
120
  // either mode — there's no meaningful bolding left to apply to it.
89
121
  return paired.replace(/\*\*/g, "");
90
122
  }
91
- /** Highlight `terms` inside `text`, requiring a word boundary on whichever
92
- * side of a term is itself a word character (so "and" won't match inside
93
- * "handle", but a term like "project_id" that starts/ends with `_` still
94
- * matches sensibly). In "plain" mode this is a no-op (no markers added). */
123
+ /**
124
+ * Match `term` in `text` anchored at a word START, allowing the word to
125
+ * continue: "log" does not match inside "dialog", but "pitfall" does match
126
+ * "pitfalls".
127
+ *
128
+ * The trailing side is open on purpose. MiniSearch indexes with
129
+ * `prefix: true`, so it retrieves "pitfalls" for the query "pitfall"; a gate
130
+ * that demanded an exact word then dropped what retrieval had just found, and
131
+ * since an unmatched term carries maximum IDF weight, a single missing
132
+ * morpheme emptied the whole result page. The gate must be at least as
133
+ * permissive as the retrieval it filters.
134
+ *
135
+ * The leading boundary is what keeps round-1's substring bug dead, and the
136
+ * document-frequency count uses this same function, so weighting and matching
137
+ * cannot drift apart again.
138
+ */
139
+ function termRegex(term, flags) {
140
+ const escaped = escapeRegex(term);
141
+ const leadingBoundary = /^\w/.test(term) ? "\\b" : "";
142
+ const trailingExtension = /\w$/.test(term) ? "\\w*" : "";
143
+ return new RegExp(`${leadingBoundary}(${escaped}${trailingExtension})`, flags);
144
+ }
145
+ /**
146
+ * Does `text` contain `term` as a word?
147
+ *
148
+ * The single definition of "contains this term", shared by snippet
149
+ * highlighting, the relevance gate, and the document-frequency count behind
150
+ * it. Two implementations of this question disagree silently: a substring
151
+ * test credited a document about a "dialog box" with the term "log" while
152
+ * reporting that "log" appeared in no document at all, which handed it
153
+ * maximum IDF weight and inverted the ranking.
154
+ */
155
+ export function containsTerm(text, term) {
156
+ if (!term)
157
+ return false;
158
+ return termRegex(term, "i").test(text);
159
+ }
95
160
  function highlightTerms(text, terms, mode) {
96
161
  if (mode !== "ansi")
97
162
  return text;
@@ -99,11 +164,7 @@ function highlightTerms(text, terms, mode) {
99
164
  for (const term of terms) {
100
165
  if (!term)
101
166
  continue;
102
- const escaped = escapeRegex(term);
103
- const leadingBoundary = /^\w/.test(term) ? "\\b" : "";
104
- const trailingBoundary = /\w$/.test(term) ? "\\b" : "";
105
- const regex = new RegExp(`${leadingBoundary}(${escaped})${trailingBoundary}`, "gi");
106
- result = result.replace(regex, `${ANSI_BOLD_ON}$1${ANSI_BOLD_OFF}`);
167
+ result = result.replace(termRegex(term, "gi"), `${ANSI_BOLD_ON}$1${ANSI_BOLD_OFF}`);
107
168
  }
108
169
  return result;
109
170
  }
@@ -324,6 +385,26 @@ export function generateSnippet(content, terms, highlightMode = "plain", fileCon
324
385
  // anything table formatting left untouched (fix #5).
325
386
  return applyMarkdownBold(highlighted, highlightMode);
326
387
  }
388
+ /**
389
+ * Blank the frontmatter block, keeping the line count intact.
390
+ *
391
+ * Indexing strips frontmatter, but snippets are drawn from the file on disk,
392
+ * so raw YAML was still reaching the screen -- the document's own `status:`
393
+ * and `related:` keys rendered as if they were prose. The lines are emptied
394
+ * rather than removed because `chunkStartLine` is a line number in this file:
395
+ * delete the lines and every citation shifts, so the region is cleared in
396
+ * place instead.
397
+ */
398
+ function blankFrontmatter(content) {
399
+ const { frontmatterLineCount } = parseFrontmatter(content);
400
+ if (frontmatterLineCount === 0)
401
+ return content;
402
+ const lines = normalizeLineEndings(content).split("\n");
403
+ for (let i = 0; i < frontmatterLineCount && i < lines.length; i++) {
404
+ lines[i] = "";
405
+ }
406
+ return lines.join("\n");
407
+ }
327
408
  /**
328
409
  * Convenience wrapper around `generateSnippet` for the common call-site
329
410
  * shape: an indexed chunk plus the repo root it lives under. Reads the full
@@ -340,10 +421,14 @@ export async function buildSnippet(doc, terms, highlightMode, repoRoot) {
340
421
  let fileContext;
341
422
  if (repoRoot) {
342
423
  try {
343
- const fullContent = await readFile(join(repoRoot, doc.filePath), "utf-8");
344
- fileContext = { fullContent, chunkStartLine: doc.startLine };
424
+ const raw = await readFile(join(repoRoot, doc.filePath), "utf-8");
425
+ fileContext = { fullContent: blankFrontmatter(raw), chunkStartLine: doc.startLine };
345
426
  }
346
- catch {
427
+ catch (err) {
428
+ // A missing source file is expected (the index can be staler than the working tree),
429
+ // but we must signal it rather than silently degrade. Emit a warning to stderr
430
+ // (never stdout — stdout must stay clean for --json consumers).
431
+ process.stderr.write(`warn: Could not read source file for snippet context: ${doc.filePath} (${err instanceof Error ? err.message : String(err)})\n`);
347
432
  fileContext = undefined;
348
433
  }
349
434
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../src/search/snippet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../src/search/snippet.ts"],"names":[],"mappings":"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"}