@amsterdamdatalabs/enact-docs-search 0.1.2 → 0.2.1
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.
- package/README.md +29 -4
- package/dist/cli.js +158 -53
- package/dist/cli.js.map +1 -1
- package/dist/indexing/chunker.d.ts +6 -1
- package/dist/indexing/chunker.d.ts.map +1 -1
- package/dist/indexing/chunker.js +17 -11
- package/dist/indexing/chunker.js.map +1 -1
- package/dist/indexing/embedding-text.d.ts +22 -0
- package/dist/indexing/embedding-text.d.ts.map +1 -0
- package/dist/indexing/embedding-text.js +27 -0
- package/dist/indexing/embedding-text.js.map +1 -0
- package/dist/indexing/frontmatter.d.ts +48 -0
- package/dist/indexing/frontmatter.d.ts.map +1 -0
- package/dist/indexing/frontmatter.js +162 -0
- package/dist/indexing/frontmatter.js.map +1 -0
- package/dist/indexing/indexing-service.d.ts +1 -4
- package/dist/indexing/indexing-service.d.ts.map +1 -1
- package/dist/indexing/indexing-service.js +24 -12
- package/dist/indexing/indexing-service.js.map +1 -1
- package/dist/search/authority.d.ts +31 -0
- package/dist/search/authority.d.ts.map +1 -0
- package/dist/search/authority.js +50 -0
- package/dist/search/authority.js.map +1 -0
- package/dist/search/relevance.d.ts +80 -0
- package/dist/search/relevance.d.ts.map +1 -0
- package/dist/search/relevance.js +119 -0
- package/dist/search/relevance.js.map +1 -0
- package/dist/search/search-service.d.ts +44 -2
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/search/search-service.js +186 -23
- package/dist/search/search-service.js.map +1 -1
- package/dist/search/snippet.d.ts +11 -0
- package/dist/search/snippet.d.ts.map +1 -1
- package/dist/search/snippet.js +102 -17
- package/dist/search/snippet.js.map +1 -1
- package/dist/storage/document-store.d.ts +47 -5
- package/dist/storage/document-store.d.ts.map +1 -1
- package/dist/storage/document-store.js +94 -16
- package/dist/storage/document-store.js.map +1 -1
- package/dist/storage/persistence.d.ts +6 -10
- package/dist/storage/persistence.d.ts.map +1 -1
- package/dist/storage/persistence.js +20 -20
- package/dist/storage/persistence.js.map +1 -1
- package/dist/storage/vector-store.d.ts +2 -3
- package/dist/storage/vector-store.d.ts.map +1 -1
- package/dist/storage/vector-store.js +3 -11
- package/dist/storage/vector-store.js.map +1 -1
- package/dist/types.d.ts +2 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -20
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/search/snippet.js
CHANGED
|
@@ -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
|
-
*
|
|
49
|
-
*
|
|
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
|
-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
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
|
-
/**
|
|
92
|
-
*
|
|
93
|
-
* "
|
|
94
|
-
*
|
|
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
|
-
|
|
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
|
|
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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"}
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
* Adapted from obsidian-qmd (MIT): https://github.com/thirteen37/obsidian-qmd
|
|
3
3
|
* Source: src/storage/DocumentStore.ts — the original had no Obsidian
|
|
4
4
|
* dependency at all (pure MiniSearch wrapper). Adjustments: added
|
|
5
|
-
* `startLine` to the indexed schema for path:line output
|
|
6
|
-
*
|
|
7
|
-
* `pluginBasePath` option that was already unused upstream.
|
|
5
|
+
* `startLine` to the indexed schema for path:line output and dropped the
|
|
6
|
+
* Obsidian-flavoured `pluginBasePath` option that was already unused upstream.
|
|
8
7
|
*
|
|
9
8
|
* DocumentStore provides full-text search using MiniSearch.
|
|
10
9
|
* Implements proper BM25 ranking with inverted index.
|
|
11
10
|
*/
|
|
12
11
|
import MiniSearch from "minisearch";
|
|
13
|
-
import type { Scope } from "../types.js";
|
|
14
12
|
import type { HighlightMode } from "../search/snippet.js";
|
|
15
13
|
export interface IndexedDocument {
|
|
16
14
|
/** Unique identifier for this document/chunk */
|
|
@@ -27,6 +25,18 @@ export interface IndexedDocument {
|
|
|
27
25
|
startLine: number;
|
|
28
26
|
/** Heading hierarchy at the start of this chunk */
|
|
29
27
|
headingBreadcrumb?: string[];
|
|
28
|
+
/** Document title from frontmatter, denormalised onto every chunk. */
|
|
29
|
+
title?: string;
|
|
30
|
+
/** Document description from frontmatter, denormalised onto every chunk. */
|
|
31
|
+
description?: string;
|
|
32
|
+
/** Heading breadcrumb flattened for the keyword index. */
|
|
33
|
+
headings?: string;
|
|
34
|
+
/** Frontmatter `status`, e.g. "stable" or "draft". */
|
|
35
|
+
status?: string;
|
|
36
|
+
/** Frontmatter `document_type`. */
|
|
37
|
+
documentType?: string;
|
|
38
|
+
/** Frontmatter `last_update`, ISO-8601 as written. */
|
|
39
|
+
lastUpdate?: string;
|
|
30
40
|
}
|
|
31
41
|
export interface SearchResult {
|
|
32
42
|
id: string;
|
|
@@ -37,10 +47,17 @@ export interface SearchResult {
|
|
|
37
47
|
snippet: string;
|
|
38
48
|
headingBreadcrumb?: string[];
|
|
39
49
|
content: string;
|
|
50
|
+
title?: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
/** Flattened heading path. Carried so the relevance gate sees exactly the
|
|
53
|
+
* text document frequency was counted over. */
|
|
54
|
+
headings?: string;
|
|
55
|
+
status?: string;
|
|
56
|
+
documentType?: string;
|
|
57
|
+
lastUpdate?: string;
|
|
40
58
|
}
|
|
41
59
|
export interface SearchOptions {
|
|
42
60
|
limit?: number;
|
|
43
|
-
scope?: Scope;
|
|
44
61
|
/** How matched terms should be marked in generated snippets. Defaults to
|
|
45
62
|
* "plain" (no markup) when omitted. */
|
|
46
63
|
highlight?: HighlightMode;
|
|
@@ -54,6 +71,22 @@ export interface ExportedDocumentStore {
|
|
|
54
71
|
documents: IndexedDocument[];
|
|
55
72
|
index: ReturnType<MiniSearch<IndexedDocument>["toJSON"]>;
|
|
56
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The fields a keyword hit may have matched on, concatenated.
|
|
76
|
+
*
|
|
77
|
+
* Exported and shared with the relevance gate deliberately. Document frequency
|
|
78
|
+
* and the gate must read the SAME text: when df counted `headings` and the
|
|
79
|
+
* gate only read `headingBreadcrumb`, a term could be reported as present in
|
|
80
|
+
* every document while being unmatchable in all of them -- which is round-1
|
|
81
|
+
* blocker #2 again, one level up.
|
|
82
|
+
*/
|
|
83
|
+
export declare function searchableText(doc: {
|
|
84
|
+
title?: string;
|
|
85
|
+
description?: string;
|
|
86
|
+
headings?: string;
|
|
87
|
+
headingBreadcrumb?: string[];
|
|
88
|
+
content?: string;
|
|
89
|
+
}): string;
|
|
57
90
|
export declare class DocumentStore {
|
|
58
91
|
private documents;
|
|
59
92
|
private searchIndex;
|
|
@@ -66,6 +99,15 @@ export declare class DocumentStore {
|
|
|
66
99
|
/** Search for documents using MiniSearch with BM25 scoring. */
|
|
67
100
|
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
68
101
|
getDocumentCount(): Promise<number>;
|
|
102
|
+
/**
|
|
103
|
+
* Document frequency for each term, plus the corpus size, for IDF-weighted
|
|
104
|
+
* relevance gating. Exact matching only -- prefix and fuzzy expansion would
|
|
105
|
+
* inflate the count and make rare terms look common.
|
|
106
|
+
*/
|
|
107
|
+
corpusStats(terms: string[]): {
|
|
108
|
+
totalDocs: number;
|
|
109
|
+
documentFrequency: Map<string, number>;
|
|
110
|
+
};
|
|
69
111
|
getAllFilePaths(): Promise<string[]>;
|
|
70
112
|
export(): ExportedDocumentStore;
|
|
71
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.d.ts","sourceRoot":"","sources":["../../src/storage/document-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"document-store.d.ts","sourceRoot":"","sources":["../../src/storage/document-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;mDAC+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;2CACuC;IACvC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B;;;wCAGoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC1D;AAmCD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAIT;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,KAAK,CAAS;IAEhB,UAAU,CAAC,YAAY,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BrE,OAAO,IAAI,OAAO;IAIZ,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAIxD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,+DAA+D;IACzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4D3E,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAqBrF,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1C,MAAM,IAAI,qBAAqB;CAOhC"}
|
|
@@ -2,25 +2,59 @@
|
|
|
2
2
|
* Adapted from obsidian-qmd (MIT): https://github.com/thirteen37/obsidian-qmd
|
|
3
3
|
* Source: src/storage/DocumentStore.ts — the original had no Obsidian
|
|
4
4
|
* dependency at all (pure MiniSearch wrapper). Adjustments: added
|
|
5
|
-
* `startLine` to the indexed schema for path:line output
|
|
6
|
-
*
|
|
7
|
-
* `pluginBasePath` option that was already unused upstream.
|
|
5
|
+
* `startLine` to the indexed schema for path:line output and dropped the
|
|
6
|
+
* Obsidian-flavoured `pluginBasePath` option that was already unused upstream.
|
|
8
7
|
*
|
|
9
8
|
* DocumentStore provides full-text search using MiniSearch.
|
|
10
9
|
* Implements proper BM25 ranking with inverted index.
|
|
11
10
|
*/
|
|
12
11
|
import MiniSearch from "minisearch";
|
|
13
|
-
import {
|
|
14
|
-
|
|
12
|
+
import { extractQueryTerms, buildSnippet, containsTerm } from "../search/snippet.js";
|
|
13
|
+
/**
|
|
14
|
+
* Field weights. A document's own title is the strongest statement it makes
|
|
15
|
+
* about what it is about, so a title hit outranks a passing body mention.
|
|
16
|
+
* Keep these in one place: they are the ranking contract.
|
|
17
|
+
*/
|
|
18
|
+
const FIELD_BOOST = {
|
|
19
|
+
title: 8,
|
|
20
|
+
description: 4,
|
|
21
|
+
headings: 2,
|
|
22
|
+
content: 1,
|
|
23
|
+
};
|
|
15
24
|
const MINISEARCH_OPTIONS = {
|
|
16
|
-
fields: ["content"],
|
|
17
|
-
storeFields: [
|
|
25
|
+
fields: ["title", "description", "headings", "content"],
|
|
26
|
+
storeFields: [
|
|
27
|
+
"filePath",
|
|
28
|
+
"chunkIndex",
|
|
29
|
+
"mtimeMs",
|
|
30
|
+
"startLine",
|
|
31
|
+
"headingBreadcrumb",
|
|
32
|
+
"title",
|
|
33
|
+
"description",
|
|
34
|
+
"status",
|
|
35
|
+
"documentType",
|
|
36
|
+
"lastUpdate",
|
|
37
|
+
],
|
|
18
38
|
searchOptions: {
|
|
19
|
-
boost: {
|
|
39
|
+
boost: { ...FIELD_BOOST },
|
|
20
40
|
fuzzy: 0.2,
|
|
21
41
|
prefix: true,
|
|
22
42
|
},
|
|
23
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* The fields a keyword hit may have matched on, concatenated.
|
|
46
|
+
*
|
|
47
|
+
* Exported and shared with the relevance gate deliberately. Document frequency
|
|
48
|
+
* and the gate must read the SAME text: when df counted `headings` and the
|
|
49
|
+
* gate only read `headingBreadcrumb`, a term could be reported as present in
|
|
50
|
+
* every document while being unmatchable in all of them -- which is round-1
|
|
51
|
+
* blocker #2 again, one level up.
|
|
52
|
+
*/
|
|
53
|
+
export function searchableText(doc) {
|
|
54
|
+
return [doc.title, doc.description, doc.headings ?? (doc.headingBreadcrumb ?? []).join(" "), doc.content]
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.join(" ");
|
|
57
|
+
}
|
|
24
58
|
export class DocumentStore {
|
|
25
59
|
documents = new Map();
|
|
26
60
|
searchIndex = null;
|
|
@@ -32,6 +66,7 @@ export class DocumentStore {
|
|
|
32
66
|
this.searchIndex = MiniSearch.loadJSON(JSON.stringify(existingData.index), {
|
|
33
67
|
fields: [...MINISEARCH_OPTIONS.fields],
|
|
34
68
|
storeFields: [...MINISEARCH_OPTIONS.storeFields],
|
|
69
|
+
searchOptions: { ...MINISEARCH_OPTIONS.searchOptions },
|
|
35
70
|
});
|
|
36
71
|
for (const doc of existingData.documents) {
|
|
37
72
|
this.documents.set(doc.id, doc);
|
|
@@ -88,26 +123,45 @@ export class DocumentStore {
|
|
|
88
123
|
if (!trimmedQuery)
|
|
89
124
|
return [];
|
|
90
125
|
const limit = options.limit ?? 20;
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
for (const result of miniSearchResults
|
|
126
|
+
const miniSearchResults = this.searchIndex.search(trimmedQuery);
|
|
127
|
+
// Collapse to the best chunk per file. Title and description are
|
|
128
|
+
// denormalised onto every chunk, so without this a long document matches
|
|
129
|
+
// once per chunk and floods the page with itself.
|
|
130
|
+
const bestByFile = new Map();
|
|
131
|
+
for (const result of miniSearchResults) {
|
|
97
132
|
const doc = this.documents.get(result.id);
|
|
98
133
|
if (!doc)
|
|
99
134
|
continue;
|
|
100
|
-
const
|
|
135
|
+
const incumbent = bestByFile.get(doc.filePath);
|
|
136
|
+
if (!incumbent || result.score > incumbent.score) {
|
|
137
|
+
bestByFile.set(doc.filePath, { id: doc.id, score: result.score });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const ranked = Array.from(bestByFile.values())
|
|
141
|
+
.sort((a, b) => b.score - a.score)
|
|
142
|
+
.slice(0, limit);
|
|
143
|
+
const terms = extractQueryTerms(trimmedQuery);
|
|
144
|
+
const results = [];
|
|
145
|
+
for (const entry of ranked) {
|
|
146
|
+
const doc = this.documents.get(entry.id);
|
|
147
|
+
if (!doc)
|
|
148
|
+
continue;
|
|
101
149
|
const snippet = await buildSnippet({ filePath: doc.filePath, content: doc.content, startLine: doc.startLine }, terms, options.highlight ?? "plain", options.repoRoot);
|
|
102
150
|
results.push({
|
|
103
151
|
id: doc.id,
|
|
104
152
|
filePath: doc.filePath,
|
|
105
153
|
chunkIndex: doc.chunkIndex,
|
|
106
154
|
startLine: doc.startLine,
|
|
107
|
-
score:
|
|
155
|
+
score: entry.score,
|
|
108
156
|
snippet,
|
|
109
157
|
headingBreadcrumb: doc.headingBreadcrumb,
|
|
110
158
|
content: doc.content,
|
|
159
|
+
title: doc.title,
|
|
160
|
+
description: doc.description,
|
|
161
|
+
headings: doc.headings,
|
|
162
|
+
status: doc.status,
|
|
163
|
+
documentType: doc.documentType,
|
|
164
|
+
lastUpdate: doc.lastUpdate,
|
|
111
165
|
});
|
|
112
166
|
}
|
|
113
167
|
return results;
|
|
@@ -115,6 +169,30 @@ export class DocumentStore {
|
|
|
115
169
|
async getDocumentCount() {
|
|
116
170
|
return this.documents.size;
|
|
117
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Document frequency for each term, plus the corpus size, for IDF-weighted
|
|
174
|
+
* relevance gating. Exact matching only -- prefix and fuzzy expansion would
|
|
175
|
+
* inflate the count and make rare terms look common.
|
|
176
|
+
*/
|
|
177
|
+
corpusStats(terms) {
|
|
178
|
+
if (!this.searchIndex)
|
|
179
|
+
throw new Error("Document store not initialized");
|
|
180
|
+
// Counted with `containsTerm`, the same matcher the relevance gate uses.
|
|
181
|
+
// Asking MiniSearch instead would answer a different question -- it
|
|
182
|
+
// tokenises, so "device-tree" would be counted as device OR tree -- and a
|
|
183
|
+
// frequency that disagrees with the membership test inverts the ranking
|
|
184
|
+
// it is supposed to weight.
|
|
185
|
+
const documentFrequency = new Map(terms.map((term) => [term, 0]));
|
|
186
|
+
for (const doc of this.documents.values()) {
|
|
187
|
+
const text = searchableText(doc);
|
|
188
|
+
for (const term of terms) {
|
|
189
|
+
if (containsTerm(text, term)) {
|
|
190
|
+
documentFrequency.set(term, documentFrequency.get(term) + 1);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { totalDocs: this.documents.size, documentFrequency };
|
|
195
|
+
}
|
|
118
196
|
async getAllFilePaths() {
|
|
119
197
|
const filePaths = new Set();
|
|
120
198
|
for (const doc of this.documents.values()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.js","sourceRoot":"","sources":["../../src/storage/document-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"document-store.js","sourceRoot":"","sources":["../../src/storage/document-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoErF;;;;GAIG;AACH,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACF,CAAC;AAEX,MAAM,kBAAkB,GAAG;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC;IACvD,WAAW,EAAE;QACX,UAAU;QACV,YAAY;QACZ,SAAS;QACT,WAAW;QACX,mBAAmB;QACnB,OAAO;QACP,aAAa;QACb,QAAQ;QACR,cAAc;QACd,YAAY;KACb;IACD,aAAa,EAAE;QACb,KAAK,EAAE,EAAE,GAAG,WAAW,EAAE;QACzB,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,IAAI;KACb;CACO,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,GAM9B;IACC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;SACtG,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,SAAS,GAAiC,IAAI,GAAG,EAAE,CAAC;IACpD,WAAW,GAAuC,IAAI,CAAC;IACvD,KAAK,GAAG,KAAK,CAAC;IAEtB,KAAK,CAAC,UAAU,CAAC,YAAoC;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,MAAM,WAAW,GACf,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAE5F,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAa,CAAC,KAAK,CAAC,EAAE;gBAC1E,MAAM,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC;gBACtC,WAAW,EAAE,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC;gBAChD,aAAa,EAAE,EAAE,GAAG,kBAAkB,CAAC,aAAa,EAAE;aACvD,CAAC,CAAC;YACH,KAAK,MAAM,GAAG,IAAI,YAAa,CAAC,SAAS,EAAE,CAAC;gBAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAkB;gBACjD,MAAM,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC;gBACtC,WAAW,EAAE,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC;gBAChD,aAAa,EAAE,EAAE,GAAG,kBAAkB,CAAC,aAAa,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAuB;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEzE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAyB,EAAE;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEzE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhE,iEAAiE;QACjE,yEAAyE;QACzE,kDAAkD;QAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyC,CAAC;QACpE,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACjD,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;aAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAC1E,KAAK,EACL,OAAO,CAAC,SAAS,IAAI,OAAO,EAC5B,OAAO,CAAC,QAAQ,CACjB,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO;gBACP,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAe;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEzE,yEAAyE;QACzE,oEAAoE;QACpE,0EAA0E;QAC1E,wEAAwE;QACxE,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC7B,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACzE,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9C,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;SACjC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { ExportedDocumentStore } from "./document-store.js";
|
|
2
2
|
import type { SidecarData } from "./vector-store.js";
|
|
3
|
-
import type { Scope } from "../types.js";
|
|
4
3
|
export interface ManifestEntry {
|
|
5
4
|
/** mtime (epoch ms) at the time this file was last text-indexed; null means removed */
|
|
6
5
|
textMtimeMs: number | null;
|
|
@@ -16,13 +15,10 @@ export interface Manifest {
|
|
|
16
15
|
embeddingModel: string;
|
|
17
16
|
/** repo-relative file path -> last-indexed mtime */
|
|
18
17
|
files: Record<string, ManifestEntry>;
|
|
19
|
-
/** Informational audit trail: scopes passed to a successful `index` run.
|
|
20
|
-
* Not used for freshness logic — see checkFreshness()'s doc comment. */
|
|
21
|
-
indexedScopes: string[];
|
|
22
18
|
/** epoch ms of the last successful index run */
|
|
23
19
|
lastIndexedAt: number;
|
|
24
20
|
}
|
|
25
|
-
export declare const MANIFEST_VERSION =
|
|
21
|
+
export declare const MANIFEST_VERSION = 5;
|
|
26
22
|
export declare const EMBEDDING_MODEL_ID = "Xenova/all-MiniLM-L6-v2";
|
|
27
23
|
export declare class CachePermissionError extends Error {
|
|
28
24
|
}
|
|
@@ -64,19 +60,19 @@ export declare function writeVectorSidecar(cacheDir: string, data: SidecarData):
|
|
|
64
60
|
export declare function removeVectorCache(cacheDir: string): Promise<void>;
|
|
65
61
|
export declare function vectorIndexExists(cacheDir: string): Promise<boolean>;
|
|
66
62
|
export interface FreshnessReport {
|
|
67
|
-
/** Repo-relative paths that are new, changed, or removed since the last index
|
|
63
|
+
/** Repo-relative paths that are new, changed, or removed since the last index. */
|
|
68
64
|
staleCount: number;
|
|
69
65
|
/** Repo-relative paths whose vector embeddings are missing or stale. */
|
|
70
66
|
vectorStaleCount: number;
|
|
71
|
-
/** True if
|
|
67
|
+
/** True if the docs tree has never been indexed. */
|
|
72
68
|
neverIndexed: boolean;
|
|
73
69
|
}
|
|
74
70
|
/**
|
|
75
|
-
* Compare the current on-disk files
|
|
76
|
-
*
|
|
71
|
+
* Compare the current on-disk docs files against the manifest, without
|
|
72
|
+
* mutating anything. Used by `query`
|
|
77
73
|
* to refresh a stale or nonexistent index before searching (I-08).
|
|
78
74
|
*/
|
|
79
|
-
export declare function checkFreshness(manifest: Manifest | null,
|
|
75
|
+
export declare function checkFreshness(manifest: Manifest | null, currentFiles: {
|
|
80
76
|
path: string;
|
|
81
77
|
mtimeMs: number;
|
|
82
78
|
}[], requireVectors?: boolean): FreshnessReport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/storage/persistence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/storage/persistence.ts"],"names":[],"mappings":"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"}
|