@monoes/monograph 2.24.1 → 2.25.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/dist/src/embeddings/store.d.ts +38 -0
- package/dist/src/embeddings/store.d.ts.map +1 -0
- package/dist/src/embeddings/store.js +147 -0
- package/dist/src/embeddings/store.js.map +1 -0
- package/dist/src/embeddings/transformers-embedder.d.ts +19 -0
- package/dist/src/embeddings/transformers-embedder.d.ts.map +1 -0
- package/dist/src/embeddings/transformers-embedder.js +48 -0
- package/dist/src/embeddings/transformers-embedder.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp-tools/brief.d.ts +40 -0
- package/dist/src/mcp-tools/brief.d.ts.map +1 -0
- package/dist/src/mcp-tools/brief.js +65 -0
- package/dist/src/mcp-tools/brief.js.map +1 -0
- package/dist/src/mcp-tools/context.d.ts +9 -0
- package/dist/src/mcp-tools/context.d.ts.map +1 -1
- package/dist/src/mcp-tools/context.js +20 -0
- package/dist/src/mcp-tools/context.js.map +1 -1
- package/dist/src/mcp-tools/impact.d.ts +9 -0
- package/dist/src/mcp-tools/impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/impact.js +37 -0
- package/dist/src/mcp-tools/impact.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +1 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/pipeline/manifest.d.ts +34 -0
- package/dist/src/pipeline/manifest.d.ts.map +1 -0
- package/dist/src/pipeline/manifest.js +38 -0
- package/dist/src/pipeline/manifest.js.map +1 -0
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/src/pipeline/orchestrator.js +15 -0
- package/dist/src/pipeline/orchestrator.js.map +1 -1
- package/dist/src/pipeline/phases/agent-registry.d.ts +33 -0
- package/dist/src/pipeline/phases/agent-registry.d.ts.map +1 -0
- package/dist/src/pipeline/phases/agent-registry.js +153 -0
- package/dist/src/pipeline/phases/agent-registry.js.map +1 -0
- package/dist/src/pipeline/phases/cross-file.d.ts.map +1 -1
- package/dist/src/pipeline/phases/cross-file.js +8 -2
- package/dist/src/pipeline/phases/cross-file.js.map +1 -1
- package/dist/src/pipeline/phases/god-nodes.d.ts +8 -0
- package/dist/src/pipeline/phases/god-nodes.d.ts.map +1 -1
- package/dist/src/pipeline/phases/god-nodes.js +8 -0
- package/dist/src/pipeline/phases/god-nodes.js.map +1 -1
- package/dist/src/pipeline/phases/parse.d.ts.map +1 -1
- package/dist/src/pipeline/phases/parse.js +18 -2
- package/dist/src/pipeline/phases/parse.js.map +1 -1
- package/dist/src/pipeline/phases/summaries.d.ts +22 -0
- package/dist/src/pipeline/phases/summaries.d.ts.map +1 -0
- package/dist/src/pipeline/phases/summaries.js +196 -0
- package/dist/src/pipeline/phases/summaries.js.map +1 -0
- package/dist/src/pipeline/phases/tests-edges.d.ts +16 -0
- package/dist/src/pipeline/phases/tests-edges.d.ts.map +1 -0
- package/dist/src/pipeline/phases/tests-edges.js +44 -0
- package/dist/src/pipeline/phases/tests-edges.js.map +1 -0
- package/dist/src/pipeline/runner.d.ts.map +1 -1
- package/dist/src/pipeline/runner.js +5 -0
- package/dist/src/pipeline/runner.js.map +1 -1
- package/dist/src/search/eval.d.ts +44 -0
- package/dist/src/search/eval.d.ts.map +1 -0
- package/dist/src/search/eval.js +35 -0
- package/dist/src/search/eval.js.map +1 -0
- package/dist/src/search/fused-search.d.ts +22 -0
- package/dist/src/search/fused-search.d.ts.map +1 -0
- package/dist/src/search/fused-search.js +103 -0
- package/dist/src/search/fused-search.js.map +1 -0
- package/dist/src/search/hybrid-query.d.ts +29 -2
- package/dist/src/search/hybrid-query.d.ts.map +1 -1
- package/dist/src/search/hybrid-query.js +113 -2
- package/dist/src/search/hybrid-query.js.map +1 -1
- package/dist/src/staleness/git-staleness.d.ts.map +1 -1
- package/dist/src/staleness/git-staleness.js +2 -0
- package/dist/src/staleness/git-staleness.js.map +1 -1
- package/dist/src/storage/db.d.ts.map +1 -1
- package/dist/src/storage/db.js +3 -2
- package/dist/src/storage/db.js.map +1 -1
- package/dist/src/storage/fts-store-hybrid.d.ts +2 -2
- package/dist/src/storage/fts-store-hybrid.d.ts.map +1 -1
- package/dist/src/storage/fts-store-hybrid.js +4 -3
- package/dist/src/storage/fts-store-hybrid.js.map +1 -1
- package/dist/src/storage/fts-store-search.d.ts +14 -1
- package/dist/src/storage/fts-store-search.d.ts.map +1 -1
- package/dist/src/storage/fts-store-search.js +25 -8
- package/dist/src/storage/fts-store-search.js.map +1 -1
- package/dist/src/storage/fts-store-terms.d.ts +1 -0
- package/dist/src/storage/fts-store-terms.d.ts.map +1 -1
- package/dist/src/storage/fts-store-terms.js +1 -1
- package/dist/src/storage/fts-store-terms.js.map +1 -1
- package/dist/src/storage/schema.d.ts +14 -2
- package/dist/src/storage/schema.d.ts.map +1 -1
- package/dist/src/storage/schema.js +22 -5
- package/dist/src/storage/schema.js.map +1 -1
- package/dist/src/storage/summary-search.d.ts +13 -0
- package/dist/src/storage/summary-search.d.ts.map +1 -0
- package/dist/src/storage/summary-search.js +58 -0
- package/dist/src/storage/summary-search.js.map +1 -0
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexical + semantic retrieval, fused.
|
|
3
|
+
*
|
|
4
|
+
* Lexical search (names, stemmed summaries) is exact and fast but only finds
|
|
5
|
+
* what shares words with the query. Embeddings find "which agent should handle
|
|
6
|
+
* a task" -> `pickAgents` but blur exact identifiers. Reciprocal-rank fusion
|
|
7
|
+
* keeps the strengths of both; the weights follow the query's style, and an
|
|
8
|
+
* exact name match is always pinned first.
|
|
9
|
+
*
|
|
10
|
+
* Degrades to plain lexical search when no embedder is supplied, nothing has
|
|
11
|
+
* been embedded yet, or the query only concerns documentation.
|
|
12
|
+
*/
|
|
13
|
+
import { semanticSearch } from '../embeddings/store.js';
|
|
14
|
+
import { AGENT_SCOPE_LABELS, CODE_SCOPE_LABELS, searchGraph, TEST_FACTOR, TEST_INTENT, TEST_PATH, } from './hybrid-query.js';
|
|
15
|
+
const RRF_K = 60;
|
|
16
|
+
/** How many of keyword search's top hits are never dropped by fusion. */
|
|
17
|
+
const PROTECTED_LEXICAL = 2;
|
|
18
|
+
/** [lexical, semantic] weights. */
|
|
19
|
+
const WEIGHTS_IDENTIFIER = [2, 1];
|
|
20
|
+
const WEIGHTS_NATURAL = [1, 2];
|
|
21
|
+
/** A single token (`UserService`, `agent-pick`, `fts-store.ts`) is a name, not a question. */
|
|
22
|
+
export function isIdentifierQuery(query) {
|
|
23
|
+
return !/\s/.test(query.trim());
|
|
24
|
+
}
|
|
25
|
+
function semanticLabels(options) {
|
|
26
|
+
if (options.label)
|
|
27
|
+
return options.label;
|
|
28
|
+
if (options.scope === 'code')
|
|
29
|
+
return CODE_SCOPE_LABELS;
|
|
30
|
+
if (options.scope === 'agents')
|
|
31
|
+
return AGENT_SCOPE_LABELS;
|
|
32
|
+
if (options.scope === 'docs')
|
|
33
|
+
return ['Document'];
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
export async function searchGraphFused(db, query, options = {}) {
|
|
37
|
+
const { embedder, ...base } = options;
|
|
38
|
+
const limit = base.limit ?? 20;
|
|
39
|
+
const q = (query ?? '').trim();
|
|
40
|
+
if (limit <= 0 || !q)
|
|
41
|
+
return [];
|
|
42
|
+
const pool = Math.max(limit * 5, 50);
|
|
43
|
+
const lexical = searchGraph(db, q, { ...base, limit: pool });
|
|
44
|
+
if (!embedder)
|
|
45
|
+
return lexical.slice(0, limit);
|
|
46
|
+
let sem = [];
|
|
47
|
+
try {
|
|
48
|
+
sem = semanticSearch(db, await embedder.embedQuery(q), pool, semanticLabels(base));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return lexical.slice(0, limit);
|
|
52
|
+
}
|
|
53
|
+
if (sem.length === 0)
|
|
54
|
+
return lexical.slice(0, limit);
|
|
55
|
+
const [wl, ws] = isIdentifierQuery(q) ? WEIGHTS_IDENTIFIER : WEIGHTS_NATURAL;
|
|
56
|
+
const wantsTests = TEST_INTENT.test(q);
|
|
57
|
+
const fused = new Map();
|
|
58
|
+
const add = (hit, rank, weight) => {
|
|
59
|
+
const penalty = !wantsTests && hit.filePath && TEST_PATH.test(hit.filePath) ? TEST_FACTOR : 1;
|
|
60
|
+
const entry = fused.get(hit.id) ?? { hit, score: 0 };
|
|
61
|
+
entry.score += (weight * penalty) / (RRF_K + rank + 1);
|
|
62
|
+
fused.set(hit.id, entry);
|
|
63
|
+
};
|
|
64
|
+
lexical.forEach((hit, i) => add(hit, i, wl));
|
|
65
|
+
sem.forEach((s, i) => add({
|
|
66
|
+
id: s.id,
|
|
67
|
+
name: s.name,
|
|
68
|
+
normLabel: s.normLabel,
|
|
69
|
+
filePath: s.filePath,
|
|
70
|
+
label: s.label,
|
|
71
|
+
relevance: 0,
|
|
72
|
+
startLine: s.startLine,
|
|
73
|
+
endLine: s.endLine,
|
|
74
|
+
matchStrategy: 'semantic',
|
|
75
|
+
}, i, ws));
|
|
76
|
+
const ceiling = (wl + ws) / (RRF_K + 1);
|
|
77
|
+
const ranked = [...fused.values()]
|
|
78
|
+
.sort((a, b) => b.score - a.score)
|
|
79
|
+
.map(({ hit, score }) => ({ ...hit, relevance: score / ceiling }));
|
|
80
|
+
// An exact name match is what the caller typed; nothing the fusion adds outranks it.
|
|
81
|
+
const lower = q.toLowerCase();
|
|
82
|
+
const exact = ranked.filter((r) => r.name.toLowerCase() === lower);
|
|
83
|
+
const rest = ranked.filter((r) => r.name.toLowerCase() !== lower);
|
|
84
|
+
const final = [...exact, ...rest].slice(0, limit);
|
|
85
|
+
// Keyword search's two best hits stay in the results even when the semantic lane crowds
|
|
86
|
+
// them out (a sentence that contains a real name — "share a meeting" -> shareRoutes —
|
|
87
|
+
// is exactly where a keyword hit is right and the embedding is only roughly so).
|
|
88
|
+
const present = new Set(final.map((r) => r.id));
|
|
89
|
+
const protectedHits = lexical.slice(0, PROTECTED_LEXICAL).filter((h) => !present.has(h.id));
|
|
90
|
+
for (const hit of protectedHits) {
|
|
91
|
+
if (final.length >= limit) {
|
|
92
|
+
if (final.length <= exact.length)
|
|
93
|
+
break; // never evict an exact name match
|
|
94
|
+
final.pop();
|
|
95
|
+
}
|
|
96
|
+
final.push({
|
|
97
|
+
...(ranked.find((r) => r.id === hit.id) ?? hit),
|
|
98
|
+
relevance: final.at(-1)?.relevance ?? 0,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return final;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=fused-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fused-search.js","sourceRoot":"","sources":["../../../src/search/fused-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,9 +30,32 @@ import type { RankedResult } from './rrf.js';
|
|
|
30
30
|
* wants pure lexical ranking with no heuristic bonuses.
|
|
31
31
|
*/
|
|
32
32
|
export type RetrievalMode = 'bm25' | 'hybrid';
|
|
33
|
+
/**
|
|
34
|
+
* Which part of the graph a search covers.
|
|
35
|
+
*
|
|
36
|
+
* - `code` — symbols, files, routes and tools.
|
|
37
|
+
* - `docs` — markdown sections, documents and concepts.
|
|
38
|
+
* - `agents` — agent and skill definitions.
|
|
39
|
+
* - `all` — everything, ranked purely by relevance.
|
|
40
|
+
* - `auto` (default) — code first, with documentation filling any slots the
|
|
41
|
+
* code left empty; a query that is plainly about documentation flips that
|
|
42
|
+
* order. Doc sections outnumber code symbols roughly 1:2 in this repo, so
|
|
43
|
+
* without this an abstract task query is answered entirely by headings.
|
|
44
|
+
*/
|
|
45
|
+
export type SearchScope = 'code' | 'docs' | 'agents' | 'all' | 'auto';
|
|
46
|
+
export declare const CODE_SCOPE_LABELS: readonly string[];
|
|
47
|
+
export declare const DOC_SCOPE_LABELS: readonly string[];
|
|
48
|
+
export declare const AGENT_SCOPE_LABELS: readonly string[];
|
|
49
|
+
/** True when the query is asking which agent or skill to use. */
|
|
50
|
+
export declare function hasAgentIntent(query: string): boolean;
|
|
51
|
+
/** True when the query is plainly asking about documentation rather than code. */
|
|
52
|
+
export declare function hasDocIntent(query: string): boolean;
|
|
33
53
|
export interface GraphSearchOptions {
|
|
34
54
|
limit?: number;
|
|
35
|
-
label
|
|
55
|
+
/** Exact node label (or labels). Overrides `scope`. */
|
|
56
|
+
label?: string | readonly string[];
|
|
57
|
+
/** Part of the graph to search (default: `auto`). */
|
|
58
|
+
scope?: SearchScope;
|
|
36
59
|
/** Retrieval strategy (default: `hybrid`). */
|
|
37
60
|
mode?: RetrievalMode;
|
|
38
61
|
}
|
|
@@ -49,7 +72,7 @@ export interface GraphSearchResult {
|
|
|
49
72
|
/** Last line of the symbol in its source file (1-based, null if unknown). */
|
|
50
73
|
endLine: number | null;
|
|
51
74
|
/** Which retrieval strategy surfaced this row. */
|
|
52
|
-
matchStrategy: 'fts' | 'like' | 'fuzzy';
|
|
75
|
+
matchStrategy: 'fts' | 'like' | 'fuzzy' | 'semantic';
|
|
53
76
|
}
|
|
54
77
|
/**
|
|
55
78
|
* Run a lexical search over the graph and return results under the
|
|
@@ -68,6 +91,10 @@ export interface GraphSearchResult {
|
|
|
68
91
|
* would break the LIKE fallback against a capitalized name.
|
|
69
92
|
*/
|
|
70
93
|
export declare function searchGraph(db: Database.Database, query: string, options?: GraphSearchOptions): GraphSearchResult[];
|
|
94
|
+
/** Tests restate the code they exercise; they rank below it unless asked for. */
|
|
95
|
+
export declare const TEST_PATH: RegExp;
|
|
96
|
+
export declare const TEST_INTENT: RegExp;
|
|
97
|
+
export declare const TEST_FACTOR = 0.6;
|
|
71
98
|
export interface BM25QueryOptions {
|
|
72
99
|
limit?: number;
|
|
73
100
|
label?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-query.d.ts","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"hybrid-query.d.ts","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,28 @@
|
|
|
19
19
|
* practice (the embeddings table stayed empty) and did a JS cosine full scan.
|
|
20
20
|
*/
|
|
21
21
|
import { ftsSearch, hybridSearch, relevanceFromFtsRank } from '../storage/fts-store.js';
|
|
22
|
+
import { contentWords, summarySearch } from '../storage/summary-search.js';
|
|
23
|
+
import { SYMBOL_NODE_LABELS } from '../types.js';
|
|
24
|
+
export const CODE_SCOPE_LABELS = [
|
|
25
|
+
...SYMBOL_NODE_LABELS,
|
|
26
|
+
'File',
|
|
27
|
+
'Module',
|
|
28
|
+
'Route',
|
|
29
|
+
'Tool',
|
|
30
|
+
];
|
|
31
|
+
export const DOC_SCOPE_LABELS = ['Section', 'Document', 'Concept'];
|
|
32
|
+
export const AGENT_SCOPE_LABELS = ['Agent', 'Skill'];
|
|
33
|
+
// Whole words in a multi-word question — not `agent` inside `agent-pick` or `AgentSpawn`.
|
|
34
|
+
const AGENT_INTENT = /(?:^|\s)(?:agents?|subagents?|skills?)(?:\s|$)/i;
|
|
35
|
+
const DOC_INTENT = /\b(docs?|documentation|readme|guide|adr|changelog|tutorial|concept|explain(?:s|ed)?)\b/i;
|
|
36
|
+
/** True when the query is asking which agent or skill to use. */
|
|
37
|
+
export function hasAgentIntent(query) {
|
|
38
|
+
return /\s/.test(query.trim()) && AGENT_INTENT.test(query);
|
|
39
|
+
}
|
|
40
|
+
/** True when the query is plainly asking about documentation rather than code. */
|
|
41
|
+
export function hasDocIntent(query) {
|
|
42
|
+
return DOC_INTENT.test(query);
|
|
43
|
+
}
|
|
22
44
|
/**
|
|
23
45
|
* Run a lexical search over the graph and return results under the
|
|
24
46
|
* higher-is-better score convention.
|
|
@@ -36,12 +58,101 @@ import { ftsSearch, hybridSearch, relevanceFromFtsRank } from '../storage/fts-st
|
|
|
36
58
|
* would break the LIKE fallback against a capitalized name.
|
|
37
59
|
*/
|
|
38
60
|
export function searchGraph(db, query, options = {}) {
|
|
39
|
-
const { limit = 20, label, mode = 'hybrid' } = options;
|
|
61
|
+
const { limit = 20, label, mode = 'hybrid', scope = 'auto' } = options;
|
|
40
62
|
if (limit <= 0)
|
|
41
63
|
return [];
|
|
42
64
|
const normalizedQuery = (query ?? '').trim();
|
|
43
65
|
if (!normalizedQuery)
|
|
44
66
|
return [];
|
|
67
|
+
if (label || scope === 'all')
|
|
68
|
+
return searchLabels(db, normalizedQuery, limit, mode, label);
|
|
69
|
+
if (scope === 'code')
|
|
70
|
+
return searchLabels(db, normalizedQuery, limit, mode, CODE_SCOPE_LABELS);
|
|
71
|
+
if (scope === 'docs')
|
|
72
|
+
return searchLabels(db, normalizedQuery, limit, mode, DOC_SCOPE_LABELS);
|
|
73
|
+
if (scope === 'agents')
|
|
74
|
+
return searchLabels(db, normalizedQuery, limit, mode, AGENT_SCOPE_LABELS);
|
|
75
|
+
const order = hasDocIntent(normalizedQuery)
|
|
76
|
+
? [DOC_SCOPE_LABELS, CODE_SCOPE_LABELS, AGENT_SCOPE_LABELS]
|
|
77
|
+
: [CODE_SCOPE_LABELS, DOC_SCOPE_LABELS, AGENT_SCOPE_LABELS];
|
|
78
|
+
const results = [];
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
// A question about agents or skills gets up to half the slots first; the
|
|
81
|
+
// code that matches it (an agent *picker*, say) keeps the rest.
|
|
82
|
+
if (hasAgentIntent(normalizedQuery)) {
|
|
83
|
+
for (const r of searchLabels(db, normalizedQuery, Math.ceil(limit / 2), mode, AGENT_SCOPE_LABELS)) {
|
|
84
|
+
results.push(r);
|
|
85
|
+
seen.add(r.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const labels of order) {
|
|
89
|
+
if (results.length >= limit)
|
|
90
|
+
break;
|
|
91
|
+
for (const r of searchLabels(db, normalizedQuery, limit - results.length, mode, labels)) {
|
|
92
|
+
if (seen.has(r.id))
|
|
93
|
+
continue;
|
|
94
|
+
results.push(r);
|
|
95
|
+
seen.add(r.id);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return results.slice(0, limit);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Summary hits sit below an exact lexical hit (whose relevance can exceed 1)
|
|
102
|
+
* but above weak fuzzy ones; a node found by both signals gets the summary
|
|
103
|
+
* score added, since two independent signals agreeing is the strongest evidence.
|
|
104
|
+
*/
|
|
105
|
+
const SUMMARY_WEIGHT = 0.8;
|
|
106
|
+
const LEXICAL_ONLY_FACTOR = 0.25;
|
|
107
|
+
/** Tests restate the code they exercise; they rank below it unless asked for. */
|
|
108
|
+
export const TEST_PATH = /(\.test\.|\.spec\.|__tests__|__mocks__|\/tests?\/)/;
|
|
109
|
+
export const TEST_INTENT = /\b(tests?|specs?|mocks?|fixtures?)\b/i;
|
|
110
|
+
export const TEST_FACTOR = 0.6;
|
|
111
|
+
function searchLabels(db, normalizedQuery, limit, mode, label) {
|
|
112
|
+
const lexical = searchLexical(db, normalizedQuery, limit, mode, label);
|
|
113
|
+
// Documents carry a body excerpt in their summary, so a single word is a
|
|
114
|
+
// meaningful query there (#698); for code a bare word is the lexical path's job.
|
|
115
|
+
const described = summarySearch(db, normalizedQuery, limit * 2, label, label === DOC_SCOPE_LABELS ? 1 : 2);
|
|
116
|
+
if (described.length === 0)
|
|
117
|
+
return lexical;
|
|
118
|
+
// A multi-word question is not an identifier: a lexical-only hit is then
|
|
119
|
+
// usually a substring accident ("handle" inside handleTasksStatus), so it
|
|
120
|
+
// counts for less than a hit the descriptions also support.
|
|
121
|
+
if (contentWords(normalizedQuery).length >= 2) {
|
|
122
|
+
const supported = new Set(described.map((r) => r.id));
|
|
123
|
+
for (const r of lexical)
|
|
124
|
+
if (!supported.has(r.id))
|
|
125
|
+
r.relevance *= LEXICAL_ONLY_FACTOR;
|
|
126
|
+
}
|
|
127
|
+
const byId = new Map(lexical.map((r) => [r.id, r]));
|
|
128
|
+
for (const row of described) {
|
|
129
|
+
const score = SUMMARY_WEIGHT * relevanceFromFtsRank(row.rank);
|
|
130
|
+
const hit = byId.get(row.id);
|
|
131
|
+
if (hit) {
|
|
132
|
+
hit.relevance += score;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
byId.set(row.id, {
|
|
136
|
+
id: row.id,
|
|
137
|
+
name: row.name,
|
|
138
|
+
normLabel: row.normLabel,
|
|
139
|
+
filePath: row.filePath,
|
|
140
|
+
label: row.label,
|
|
141
|
+
relevance: score,
|
|
142
|
+
startLine: row.startLine,
|
|
143
|
+
endLine: row.endLine,
|
|
144
|
+
matchStrategy: 'fts',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const wantsTests = TEST_INTENT.test(normalizedQuery);
|
|
149
|
+
for (const r of byId.values()) {
|
|
150
|
+
if (!wantsTests && r.filePath && TEST_PATH.test(r.filePath))
|
|
151
|
+
r.relevance *= TEST_FACTOR;
|
|
152
|
+
}
|
|
153
|
+
return [...byId.values()].sort((a, b) => b.relevance - a.relevance).slice(0, limit);
|
|
154
|
+
}
|
|
155
|
+
function searchLexical(db, normalizedQuery, limit, mode, label) {
|
|
45
156
|
if (mode === 'bm25') {
|
|
46
157
|
// Over-fetch a little: FTS5's own ordering is what we keep, but a wider
|
|
47
158
|
// window gives the caller's label filter something to bite on.
|
|
@@ -81,7 +192,7 @@ export function searchGraph(db, query, options = {}) {
|
|
|
81
192
|
*/
|
|
82
193
|
export async function bm25Query(db, query, options = {}) {
|
|
83
194
|
const { limit = 20, label } = options;
|
|
84
|
-
return searchGraph(db, query, { limit, label, mode: 'bm25' }).map((r) => ({
|
|
195
|
+
return searchGraph(db, query, { limit, label, mode: 'bm25', scope: 'all' }).map((r) => ({
|
|
85
196
|
id: r.id,
|
|
86
197
|
name: r.name,
|
|
87
198
|
normLabel: r.normLabel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-query.js","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"hybrid-query.js","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKzF,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKzF,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAqJD,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA6HjF"}
|
|
@@ -53,6 +53,7 @@ function checkDirtyWorktree(repoPath) {
|
|
|
53
53
|
cwd: repoPath,
|
|
54
54
|
encoding: 'utf8',
|
|
55
55
|
maxBuffer: 8 * 1024 * 1024,
|
|
56
|
+
env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' }, // #681: never take .git/index.lock
|
|
56
57
|
stdio: ['ignore', 'pipe', 'pipe'], // #371
|
|
57
58
|
});
|
|
58
59
|
// Porcelain v1 lines are `XY <path>`; ignored files are excluded by default.
|
|
@@ -208,6 +209,7 @@ export function checkStaleness(db, repoPath) {
|
|
|
208
209
|
const diff = execSync(`git diff --name-only ${indexedCommitFull}..HEAD`, {
|
|
209
210
|
cwd: repoPath,
|
|
210
211
|
encoding: 'utf8',
|
|
212
|
+
env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' }, // #681
|
|
211
213
|
});
|
|
212
214
|
changedSince = diff.trim().split('\n').filter(Boolean);
|
|
213
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAoBtC,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,WAAW,CAwB/E;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE7C;AAqCD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAgCtF"}
|
package/dist/src/storage/db.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, renameSync, unlinkSync } from 'node:fs';
|
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
import Database from 'better-sqlite3';
|
|
4
4
|
import { MonographError } from '../types.js';
|
|
5
|
-
import { CREATE_AGENT_INTERACTIONS, CREATE_AGENT_INTERACTIONS_IDX, CREATE_AGENT_INTERACTIONS_ORG_IDX, CREATE_AGENT_INTERACTIONS_TS_IDX, CREATE_AGENT_INTERACTIONS_TYPE_IDX, CREATE_COMMUNITIES, CREATE_EDGES,
|
|
5
|
+
import { CREATE_AGENT_INTERACTIONS, CREATE_AGENT_INTERACTIONS_IDX, CREATE_AGENT_INTERACTIONS_ORG_IDX, CREATE_AGENT_INTERACTIONS_TS_IDX, CREATE_AGENT_INTERACTIONS_TYPE_IDX, CREATE_COMMUNITIES, CREATE_EDGES, CREATE_INDEX_META, CREATE_INDEXES, CREATE_NODE_EMBEDDINGS, CREATE_NODE_SUMMARIES_FTS, CREATE_NODES, CREATE_NODES_FTS, CREATE_WIKI_PAGES, FTS_SYNC_TRIGGERS, } from './schema.js';
|
|
6
6
|
export function openDb(dbPath, options = {}) {
|
|
7
7
|
if (options.fileMustExist && !existsSync(dbPath)) {
|
|
8
8
|
throw new MonographError(`Monograph database does not exist at ${dbPath}. Run monograph build first.`);
|
|
@@ -36,10 +36,11 @@ function applyMigrations(db) {
|
|
|
36
36
|
db.exec(CREATE_COMMUNITIES);
|
|
37
37
|
db.exec(CREATE_INDEX_META);
|
|
38
38
|
db.exec(CREATE_NODES_FTS);
|
|
39
|
+
db.exec(CREATE_NODE_SUMMARIES_FTS);
|
|
40
|
+
db.exec(CREATE_NODE_EMBEDDINGS);
|
|
39
41
|
for (const idx of CREATE_INDEXES)
|
|
40
42
|
db.exec(idx);
|
|
41
43
|
db.exec(FTS_SYNC_TRIGGERS);
|
|
42
|
-
db.exec(CREATE_EMBEDDINGS);
|
|
43
44
|
db.exec(CREATE_WIKI_PAGES);
|
|
44
45
|
db.exec(CREATE_AGENT_INTERACTIONS);
|
|
45
46
|
db.exec(CREATE_AGENT_INTERACTIONS_IDX);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
-
import { type FtsResult } from './fts-store-search.js';
|
|
2
|
+
import { type FtsResult, type LabelFilter } from './fts-store-search.js';
|
|
3
3
|
export interface HybridSearchResult extends FtsResult {
|
|
4
4
|
combinedScore: number;
|
|
5
5
|
matchStrategy: 'fts' | 'like' | 'fuzzy';
|
|
@@ -13,5 +13,5 @@ export interface HybridSearchResult extends FtsResult {
|
|
|
13
13
|
* Results are deduped by id (highest combinedScore wins), re-ranked, and
|
|
14
14
|
* trimmed to `limit`. The existing `ftsSearch` is left unchanged.
|
|
15
15
|
*/
|
|
16
|
-
export declare function hybridSearch(db: Database.Database, query: string, limit: number, label?:
|
|
16
|
+
export declare function hybridSearch(db: Database.Database, query: string, limit: number, label?: LabelFilter): HybridSearchResult[];
|
|
17
17
|
//# sourceMappingURL=fts-store-hybrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts-store-hybrid.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"fts-store-hybrid.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,WAAW,EAGjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,WAAW,GAClB,kBAAkB,EAAE,CA4EtB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ── Hybrid search ─────────────────────────────────────────────────────────────
|
|
2
2
|
// File-size sweep: split out of fts-store.ts.
|
|
3
3
|
import { NOT_ANONYMOUS_CLOSURE_SQL } from './anonymous-closure.js';
|
|
4
|
-
import { ftsSearch, relevanceFromFtsRank } from './fts-store-search.js';
|
|
4
|
+
import { ftsSearch, labelClause, relevanceFromFtsRank, } from './fts-store-search.js';
|
|
5
5
|
/**
|
|
6
6
|
* Computes an in-memory fuzzy sequence score for `query` against `name`.
|
|
7
7
|
* Walks through query chars left-to-right, finding each in `name` sequentially.
|
|
@@ -88,8 +88,9 @@ export function hybridSearch(db, query, limit, label) {
|
|
|
88
88
|
`;
|
|
89
89
|
const likeParams = [likePattern, likePattern];
|
|
90
90
|
if (label) {
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
const lc = labelClause(label);
|
|
92
|
+
likeSql += lc.sql;
|
|
93
|
+
likeParams.push(...lc.params);
|
|
93
94
|
}
|
|
94
95
|
likeSql += ' LIMIT ?';
|
|
95
96
|
likeParams.push(limit * 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts-store-hybrid.js","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,8CAA8C;AAG9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"fts-store-hybrid.js","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,5 +25,18 @@ export interface FtsResult {
|
|
|
25
25
|
* additive fuzzy/node-type bonuses without one term swamping the others.
|
|
26
26
|
*/
|
|
27
27
|
export declare function relevanceFromFtsRank(rank: number): number;
|
|
28
|
-
|
|
28
|
+
/** A single node label, or any of several (e.g. every code-symbol label). */
|
|
29
|
+
export type LabelFilter = string | readonly string[];
|
|
30
|
+
/** SQL fragment + params restricting `n.label`; expects the `n` alias. */
|
|
31
|
+
export declare function labelClause(label: LabelFilter): {
|
|
32
|
+
sql: string;
|
|
33
|
+
params: string[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Keyword search over node names and file paths (FTS5 trigram index), best
|
|
37
|
+
* match first. A plain-language query that matches nothing is retried on the
|
|
38
|
+
* identifier-like words extracted from it, and a short or malformed query falls
|
|
39
|
+
* back to a substring (LIKE) match, so a search never fails on its syntax.
|
|
40
|
+
*/
|
|
41
|
+
export declare function ftsSearch(db: Database.Database, query: string, limit: number, label?: LabelFilter): FtsResult[];
|
|
29
42
|
//# sourceMappingURL=fts-store-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts-store-search.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAgBD,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"fts-store-search.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAErD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjF;AAgBD;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,WAAW,GAClB,SAAS,EAAE,CAoKb"}
|
|
@@ -18,6 +18,13 @@ export function relevanceFromFtsRank(rank) {
|
|
|
18
18
|
const magnitude = Math.abs(rank);
|
|
19
19
|
return magnitude / (1 + magnitude);
|
|
20
20
|
}
|
|
21
|
+
/** SQL fragment + params restricting `n.label`; expects the `n` alias. */
|
|
22
|
+
export function labelClause(label) {
|
|
23
|
+
const labels = typeof label === 'string' ? [label] : [...label];
|
|
24
|
+
if (labels.length === 1)
|
|
25
|
+
return { sql: ' AND n.label = ?', params: labels };
|
|
26
|
+
return { sql: ` AND n.label IN (${labels.map(() => '?').join(',')})`, params: labels };
|
|
27
|
+
}
|
|
21
28
|
/**
|
|
22
29
|
* Quote a single FTS5 search term as a string literal when it contains characters
|
|
23
30
|
* that would otherwise be parsed as FTS5 syntax (quotes, parens, boolean keywords
|
|
@@ -32,6 +39,12 @@ function quoteFtsTerm(term) {
|
|
|
32
39
|
const escaped = term.replace(/"/g, '""');
|
|
33
40
|
return `"${escaped}"`;
|
|
34
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Keyword search over node names and file paths (FTS5 trigram index), best
|
|
44
|
+
* match first. A plain-language query that matches nothing is retried on the
|
|
45
|
+
* identifier-like words extracted from it, and a short or malformed query falls
|
|
46
|
+
* back to a substring (LIKE) match, so a search never fails on its syntax.
|
|
47
|
+
*/
|
|
35
48
|
export function ftsSearch(db, query, limit, label) {
|
|
36
49
|
// Sanitize: strip only characters that break FTS5 MATCH syntax (* still stripped,
|
|
37
50
|
// trigram handles substring natively; " is now preserved since trigram doesn't need it removed)
|
|
@@ -51,8 +64,9 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
51
64
|
`;
|
|
52
65
|
const matchParams = [ftsQuery];
|
|
53
66
|
if (label) {
|
|
54
|
-
|
|
55
|
-
|
|
67
|
+
const lc = labelClause(label);
|
|
68
|
+
matchSql += lc.sql;
|
|
69
|
+
matchParams.push(...lc.params);
|
|
56
70
|
}
|
|
57
71
|
matchSql += ' ORDER BY nodes_fts.rank LIMIT ?';
|
|
58
72
|
matchParams.push(limit);
|
|
@@ -79,8 +93,9 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
79
93
|
`;
|
|
80
94
|
const termParams = [termFtsQuery];
|
|
81
95
|
if (label) {
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
const lc = labelClause(label);
|
|
97
|
+
termSql += lc.sql;
|
|
98
|
+
termParams.push(...lc.params);
|
|
84
99
|
}
|
|
85
100
|
termSql += ' ORDER BY nodes_fts.rank LIMIT ?';
|
|
86
101
|
termParams.push(limit * 2);
|
|
@@ -107,8 +122,9 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
107
122
|
`;
|
|
108
123
|
const termLikeParams = [pat, pat];
|
|
109
124
|
if (label) {
|
|
110
|
-
|
|
111
|
-
|
|
125
|
+
const lc = labelClause(label);
|
|
126
|
+
termLikeSql += lc.sql;
|
|
127
|
+
termLikeParams.push(...lc.params);
|
|
112
128
|
}
|
|
113
129
|
termLikeSql += ' LIMIT ?';
|
|
114
130
|
termLikeParams.push(limit);
|
|
@@ -150,8 +166,9 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
150
166
|
}
|
|
151
167
|
likeSql += `) AND ${NOT_ANONYMOUS_CLOSURE_SQL}`;
|
|
152
168
|
if (label) {
|
|
153
|
-
|
|
154
|
-
|
|
169
|
+
const lc = labelClause(label);
|
|
170
|
+
likeSql += lc.sql;
|
|
171
|
+
likeParams.push(...lc.params);
|
|
155
172
|
}
|
|
156
173
|
likeSql += ' LIMIT ?';
|
|
157
174
|
likeParams.push(limit);
|