@monoes/monograph 1.6.11 → 1.6.12

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 (68) hide show
  1. package/dist/src/pipeline/phases/orm-helpers.d.ts +11 -0
  2. package/dist/src/pipeline/phases/orm-helpers.d.ts.map +1 -0
  3. package/dist/src/pipeline/phases/orm-helpers.js +72 -0
  4. package/dist/src/pipeline/phases/orm-helpers.js.map +1 -0
  5. package/dist/src/pipeline/phases/orm-mongoose.d.ts +8 -0
  6. package/dist/src/pipeline/phases/orm-mongoose.d.ts.map +1 -0
  7. package/dist/src/pipeline/phases/orm-mongoose.js +51 -0
  8. package/dist/src/pipeline/phases/orm-mongoose.js.map +1 -0
  9. package/dist/src/pipeline/phases/orm-prisma.d.ts +8 -0
  10. package/dist/src/pipeline/phases/orm-prisma.d.ts.map +1 -0
  11. package/dist/src/pipeline/phases/orm-prisma.js +41 -0
  12. package/dist/src/pipeline/phases/orm-prisma.js.map +1 -0
  13. package/dist/src/pipeline/phases/orm-sequelize.d.ts +12 -0
  14. package/dist/src/pipeline/phases/orm-sequelize.d.ts.map +1 -0
  15. package/dist/src/pipeline/phases/orm-sequelize.js +97 -0
  16. package/dist/src/pipeline/phases/orm-sequelize.js.map +1 -0
  17. package/dist/src/pipeline/phases/orm-sqlalchemy.d.ts +8 -0
  18. package/dist/src/pipeline/phases/orm-sqlalchemy.d.ts.map +1 -0
  19. package/dist/src/pipeline/phases/orm-sqlalchemy.js +42 -0
  20. package/dist/src/pipeline/phases/orm-sqlalchemy.js.map +1 -0
  21. package/dist/src/pipeline/phases/orm-typeorm.d.ts +10 -0
  22. package/dist/src/pipeline/phases/orm-typeorm.d.ts.map +1 -0
  23. package/dist/src/pipeline/phases/orm-typeorm.js +52 -0
  24. package/dist/src/pipeline/phases/orm-typeorm.js.map +1 -0
  25. package/dist/src/pipeline/phases/orm.d.ts.map +1 -1
  26. package/dist/src/pipeline/phases/orm.js +6 -336
  27. package/dist/src/pipeline/phases/orm.js.map +1 -1
  28. package/dist/src/pipeline/phases/scope-resolution-edges.d.ts +9 -0
  29. package/dist/src/pipeline/phases/scope-resolution-edges.d.ts.map +1 -0
  30. package/dist/src/pipeline/phases/scope-resolution-edges.js +30 -0
  31. package/dist/src/pipeline/phases/scope-resolution-edges.js.map +1 -0
  32. package/dist/src/pipeline/phases/scope-resolution-function-index.d.ts +31 -0
  33. package/dist/src/pipeline/phases/scope-resolution-function-index.d.ts.map +1 -0
  34. package/dist/src/pipeline/phases/scope-resolution-function-index.js +96 -0
  35. package/dist/src/pipeline/phases/scope-resolution-function-index.js.map +1 -0
  36. package/dist/src/pipeline/phases/scope-resolution-target.d.ts +6 -0
  37. package/dist/src/pipeline/phases/scope-resolution-target.d.ts.map +1 -0
  38. package/dist/src/pipeline/phases/scope-resolution-target.js +69 -0
  39. package/dist/src/pipeline/phases/scope-resolution-target.js.map +1 -0
  40. package/dist/src/pipeline/phases/scope-resolution.d.ts.map +1 -1
  41. package/dist/src/pipeline/phases/scope-resolution.js +3 -189
  42. package/dist/src/pipeline/phases/scope-resolution.js.map +1 -1
  43. package/dist/src/storage/fts-store-hybrid.d.ts +17 -0
  44. package/dist/src/storage/fts-store-hybrid.d.ts.map +1 -0
  45. package/dist/src/storage/fts-store-hybrid.js +119 -0
  46. package/dist/src/storage/fts-store-hybrid.js.map +1 -0
  47. package/dist/src/storage/fts-store-search.d.ts +29 -0
  48. package/dist/src/storage/fts-store-search.d.ts.map +1 -0
  49. package/dist/src/storage/fts-store-search.js +177 -0
  50. package/dist/src/storage/fts-store-search.js.map +1 -0
  51. package/dist/src/storage/fts-store-terms.d.ts +8 -0
  52. package/dist/src/storage/fts-store-terms.d.ts.map +1 -0
  53. package/dist/src/storage/fts-store-terms.js +174 -0
  54. package/dist/src/storage/fts-store-terms.js.map +1 -0
  55. package/dist/src/storage/fts-store.d.ts +12 -46
  56. package/dist/src/storage/fts-store.d.ts.map +1 -1
  57. package/dist/src/storage/fts-store.js +11 -459
  58. package/dist/src/storage/fts-store.js.map +1 -1
  59. package/dist/src/web/api-queries.d.ts +89 -0
  60. package/dist/src/web/api-queries.d.ts.map +1 -0
  61. package/dist/src/web/api-queries.js +245 -0
  62. package/dist/src/web/api-queries.js.map +1 -0
  63. package/dist/src/web/api.d.ts +2 -87
  64. package/dist/src/web/api.d.ts.map +1 -1
  65. package/dist/src/web/api.js +3 -244
  66. package/dist/src/web/api.js.map +1 -1
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ // Split out of scope-resolution.ts (file-size sweep). Pure move: no behaviour change.
2
+ // ── Target resolution ────────────────────────────────────────────────────────
3
+ export function pickBestId(ids, site) {
4
+ if (ids.length === 1)
5
+ return ids[0];
6
+ if (ids.length === 0)
7
+ return null;
8
+ const suffix = site.form === 'method' ? '_method' : '_function';
9
+ const match = ids.find((id) => id.endsWith(suffix));
10
+ if (!match && site.calleeRaw.startsWith('new ')) {
11
+ const classMatch = ids.find((id) => id.endsWith('_class'));
12
+ if (classMatch)
13
+ return classMatch;
14
+ }
15
+ return match ?? ids[0];
16
+ }
17
+ export function resolveTarget(site, callerFilePath, importMap, fnIndex, ctorMap, importedFiles) {
18
+ const methodName = site.methodName;
19
+ if (!methodName)
20
+ return null;
21
+ let candidateFilePaths;
22
+ if (site.form === 'method' && site.receiverName) {
23
+ const receiverPath = importMap.get(site.receiverName);
24
+ if (receiverPath) {
25
+ candidateFilePaths = [receiverPath];
26
+ }
27
+ else {
28
+ const className = ctorMap?.get(site.receiverName);
29
+ const classFilePath = className ? importMap.get(className) : undefined;
30
+ if (classFilePath) {
31
+ candidateFilePaths = [classFilePath, callerFilePath];
32
+ }
33
+ else {
34
+ const sameFileIds = fnIndex.get(callerFilePath)?.get(methodName);
35
+ if (sameFileIds && sameFileIds.length > 0) {
36
+ return { targetId: pickBestId(sameFileIds, site) };
37
+ }
38
+ const matches = importedFiles.filter((fp) => fnIndex.get(fp)?.has(methodName));
39
+ if (matches.length === 1) {
40
+ const ids = fnIndex.get(matches[0])?.get(methodName);
41
+ return { targetId: pickBestId(ids, site) };
42
+ }
43
+ return null;
44
+ }
45
+ }
46
+ }
47
+ else if (site.form === 'direct') {
48
+ const importedFrom = importMap.get(methodName);
49
+ if (importedFrom) {
50
+ candidateFilePaths = [importedFrom, callerFilePath];
51
+ }
52
+ else {
53
+ candidateFilePaths = [callerFilePath, ...importedFiles];
54
+ }
55
+ }
56
+ else {
57
+ return null;
58
+ }
59
+ for (const fp of candidateFilePaths) {
60
+ const ids = fnIndex.get(fp)?.get(methodName);
61
+ if (ids && ids.length > 0) {
62
+ const best = pickBestId(ids, site);
63
+ if (best)
64
+ return { targetId: best };
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ //# sourceMappingURL=scope-resolution-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolution-target.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-target.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scope-resolution.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBlE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AA8PD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,qBAAqB,CAsNrE,CAAC"}
1
+ {"version":3,"file":"scope-resolution.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyBjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAWD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,qBAAqB,CAsNrE,CAAC"}
@@ -3,198 +3,12 @@ import { extname, join } from 'node:path';
3
3
  import { makeId } from '../../types.js';
4
4
  import { CJS_MJS_EXTS, extractCallSites, extractConstructorAssignments, isSupportedExt, TS_JS_EXTS, } from './call-site-extractors.js';
5
5
  import { buildAllImportMapsFromSource, buildWorkspacePackageMap, extractImportNames, REEXPORT_RE, resolveModuleSpecifier, } from './module-resolution.js';
6
+ import { emitEdge, prepareEdgeStmts } from './scope-resolution-edges.js';
7
+ import { buildEnclosingIndex, buildFunctionIndex, buildLineOffsets, findEnclosingSymbolId, } from './scope-resolution-function-index.js';
8
+ import { resolveTarget } from './scope-resolution-target.js';
6
9
  export { extractGoCallSites, extractJavaCallSites, extractRustCallSites, } from './call-site-extractors.js';
7
10
  // Re-export for external consumers
8
11
  export { buildWorkspacePackageMap, clearWorkspacePackageMapCache, resolveModuleSpecifier, } from './module-resolution.js';
9
- // ── Function index ───────────────────────────────────────────────────────────
10
- function buildFunctionIndex(ctx) {
11
- const byFilePath = new Map();
12
- const nameCounts = new Map();
13
- if (!ctx.db)
14
- return { byFilePath, nameCounts };
15
- const rows = ctx.db
16
- .prepare(`SELECT id, name, file_path FROM nodes WHERE label IN ('Function', 'Method', 'Constructor', 'Class') AND file_path IS NOT NULL`)
17
- .all();
18
- for (const row of rows) {
19
- let fileMap = byFilePath.get(row.file_path);
20
- if (!fileMap) {
21
- fileMap = new Map();
22
- byFilePath.set(row.file_path, fileMap);
23
- }
24
- let ids = fileMap.get(row.name);
25
- if (!ids) {
26
- ids = [];
27
- fileMap.set(row.name, ids);
28
- }
29
- ids.push(row.id);
30
- nameCounts.set(row.name, (nameCounts.get(row.name) ?? 0) + 1);
31
- }
32
- return { byFilePath, nameCounts };
33
- }
34
- /**
35
- * Line ranges of every callable, grouped by file, innermost-first.
36
- *
37
- * Call edges are attributed to the enclosing function rather than the file.
38
- * Attributing them to the file makes a function appear "used" by its own file
39
- * purely because it is declared there, which silently disabled dead-export
40
- * detection: `detectDeadCodeNodes` rejects any candidate with an inbound CALLS
41
- * edge, and that self-edge always existed.
42
- */
43
- function buildEnclosingIndex(ctx) {
44
- const byFile = new Map();
45
- if (!ctx.db)
46
- return byFile;
47
- const rows = ctx.db
48
- .prepare(`SELECT id, file_path, start_line, end_line FROM nodes
49
- WHERE label IN ('Function', 'Method', 'Constructor')
50
- AND file_path IS NOT NULL AND start_line IS NOT NULL AND end_line IS NOT NULL`)
51
- .all();
52
- for (const row of rows) {
53
- let list = byFile.get(row.file_path);
54
- if (!list) {
55
- list = [];
56
- byFile.set(row.file_path, list);
57
- }
58
- list.push({ id: row.id, startLine: row.start_line, endLine: row.end_line });
59
- }
60
- // Narrowest range first, so the first containing match is the innermost
61
- // scope — a call inside a closure belongs to the closure, not the function
62
- // that happens to wrap it.
63
- for (const list of byFile.values()) {
64
- list.sort((a, b) => a.endLine - a.startLine - (b.endLine - b.startLine));
65
- }
66
- return byFile;
67
- }
68
- /** Line-start offsets, for turning a match offset into a 1-based line number. */
69
- function buildLineOffsets(source) {
70
- const offsets = [0];
71
- for (let i = 0; i < source.length; i++) {
72
- if (source.charCodeAt(i) === 10)
73
- offsets.push(i + 1);
74
- }
75
- return offsets;
76
- }
77
- function lineAtOffset(lineOffsets, offset) {
78
- let lo = 0, hi = lineOffsets.length - 1;
79
- while (lo < hi) {
80
- const mid = (lo + hi + 1) >> 1;
81
- if (lineOffsets[mid] <= offset)
82
- lo = mid;
83
- else
84
- hi = mid - 1;
85
- }
86
- return lo + 1;
87
- }
88
- /**
89
- * The innermost callable containing `offset`, or null when the call sits at
90
- * module top level — which is genuinely file-scoped, so the file node stays
91
- * the correct source for those.
92
- */
93
- function findEnclosingSymbolId(enclosing, lineOffsets, offset) {
94
- if (!enclosing || enclosing.length === 0 || offset === undefined)
95
- return null;
96
- const line = lineAtOffset(lineOffsets, offset);
97
- for (const sym of enclosing) {
98
- if (line >= sym.startLine && line <= sym.endLine)
99
- return sym.id;
100
- }
101
- return null;
102
- }
103
- // ── Target resolution ────────────────────────────────────────────────────────
104
- function pickBestId(ids, site) {
105
- if (ids.length === 1)
106
- return ids[0];
107
- if (ids.length === 0)
108
- return null;
109
- const suffix = site.form === 'method' ? '_method' : '_function';
110
- const match = ids.find((id) => id.endsWith(suffix));
111
- if (!match && site.calleeRaw.startsWith('new ')) {
112
- const classMatch = ids.find((id) => id.endsWith('_class'));
113
- if (classMatch)
114
- return classMatch;
115
- }
116
- return match ?? ids[0];
117
- }
118
- function resolveTarget(site, callerFilePath, importMap, fnIndex, ctorMap, importedFiles) {
119
- const methodName = site.methodName;
120
- if (!methodName)
121
- return null;
122
- let candidateFilePaths;
123
- if (site.form === 'method' && site.receiverName) {
124
- const receiverPath = importMap.get(site.receiverName);
125
- if (receiverPath) {
126
- candidateFilePaths = [receiverPath];
127
- }
128
- else {
129
- const className = ctorMap?.get(site.receiverName);
130
- const classFilePath = className ? importMap.get(className) : undefined;
131
- if (classFilePath) {
132
- candidateFilePaths = [classFilePath, callerFilePath];
133
- }
134
- else {
135
- const sameFileIds = fnIndex.get(callerFilePath)?.get(methodName);
136
- if (sameFileIds && sameFileIds.length > 0) {
137
- return { targetId: pickBestId(sameFileIds, site) };
138
- }
139
- const matches = importedFiles.filter((fp) => fnIndex.get(fp)?.has(methodName));
140
- if (matches.length === 1) {
141
- const ids = fnIndex.get(matches[0])?.get(methodName);
142
- return { targetId: pickBestId(ids, site) };
143
- }
144
- return null;
145
- }
146
- }
147
- }
148
- else if (site.form === 'direct') {
149
- const importedFrom = importMap.get(methodName);
150
- if (importedFrom) {
151
- candidateFilePaths = [importedFrom, callerFilePath];
152
- }
153
- else {
154
- candidateFilePaths = [callerFilePath, ...importedFiles];
155
- }
156
- }
157
- else {
158
- return null;
159
- }
160
- for (const fp of candidateFilePaths) {
161
- const ids = fnIndex.get(fp)?.get(methodName);
162
- if (ids && ids.length > 0) {
163
- const best = pickBestId(ids, site);
164
- if (best)
165
- return { targetId: best };
166
- }
167
- }
168
- return null;
169
- }
170
- function prepareEdgeStmts(db) {
171
- return {
172
- selectExisting: db.prepare(`SELECT id, confidence_score FROM edges WHERE source_id = ? AND target_id = ? AND relation = 'CALLS'`),
173
- updateScore: db.prepare(`UPDATE edges SET confidence_score = ?, confidence = 'EXTRACTED' WHERE id = ?`),
174
- insertNew: db.prepare(`INSERT OR IGNORE INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', ?)`),
175
- };
176
- }
177
- const RESOLVED_CONFIDENCE_SCORE = 0.75;
178
- function emitEdge(stmts, sourceId, targetId) {
179
- if (sourceId === targetId)
180
- return 'skipped';
181
- const existing = stmts.selectExisting.get(sourceId, targetId);
182
- if (existing) {
183
- const newScore = Math.max(existing.confidence_score, RESOLVED_CONFIDENCE_SCORE);
184
- if (newScore > existing.confidence_score) {
185
- stmts.updateScore.run(newScore, existing.id);
186
- }
187
- return 'upgraded';
188
- }
189
- const edgeId = makeId(sourceId, targetId, 'calls_resolved');
190
- try {
191
- stmts.insertNew.run(edgeId, sourceId, targetId, RESOLVED_CONFIDENCE_SCORE);
192
- return 'inserted';
193
- }
194
- catch {
195
- return 'skipped';
196
- }
197
- }
198
12
  // ── Phase definition ──────────────────────────────────────────────────────────
199
13
  function getImportMap(allImportMaps, fileNodeId) {
200
14
  return allImportMaps.get(fileNodeId) ?? new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"scope-resolution.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-resolution.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type Database from 'better-sqlite3';
2
+ import { type FtsResult } from './fts-store-search.js';
3
+ export interface HybridSearchResult extends FtsResult {
4
+ combinedScore: number;
5
+ matchStrategy: 'fts' | 'like' | 'fuzzy';
6
+ }
7
+ /**
8
+ * Hybrid search combining three strategies:
9
+ * 1. FTS5 (trigram) BM25 match via `ftsSearch`
10
+ * 2. LIKE fallback for short queries (≤3 chars) or when FTS returns 0 results
11
+ * 3. In-memory fuzzy character-sequence scoring applied to all candidates
12
+ *
13
+ * Results are deduped by id (highest combinedScore wins), re-ranked, and
14
+ * trimmed to `limit`. The existing `ftsSearch` is left unchanged.
15
+ */
16
+ export declare function hybridSearch(db: Database.Database, query: string, limit: number, label?: string): HybridSearchResult[];
17
+ //# sourceMappingURL=fts-store-hybrid.d.ts.map
@@ -0,0 +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;AAC3C,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,uBAAuB,CAAC;AAExF,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,MAAM,GACb,kBAAkB,EAAE,CA0EtB"}
@@ -0,0 +1,119 @@
1
+ // ── Hybrid search ─────────────────────────────────────────────────────────────
2
+ // File-size sweep: split out of fts-store.ts.
3
+ import { ftsSearch, relevanceFromFtsRank } from './fts-store-search.js';
4
+ /**
5
+ * Computes an in-memory fuzzy sequence score for `query` against `name`.
6
+ * Walks through query chars left-to-right, finding each in `name` sequentially.
7
+ * Returns a score in [0, 1]: higher means a tighter match.
8
+ */
9
+ function computeFuzzyScore(name, query) {
10
+ if (!query.length)
11
+ return 0;
12
+ const lname = name.toLowerCase();
13
+ const lquery = query.toLowerCase();
14
+ let nameIdx = 0;
15
+ let matched = 0;
16
+ let gapPenalty = 0;
17
+ let lastMatchPos = -1;
18
+ for (let qi = 0; qi < lquery.length; qi++) {
19
+ const ch = lquery[qi];
20
+ const pos = lname.indexOf(ch, nameIdx);
21
+ if (pos === -1)
22
+ break;
23
+ matched++;
24
+ if (lastMatchPos !== -1) {
25
+ gapPenalty += pos - lastMatchPos - 1;
26
+ }
27
+ lastMatchPos = pos;
28
+ nameIdx = pos + 1;
29
+ }
30
+ if (matched === 0)
31
+ return 0;
32
+ const matchRatio = matched / lquery.length;
33
+ const normalizedGap = gapPenalty / (lname.length || 1);
34
+ return matchRatio * (1 / (1 + normalizedGap));
35
+ }
36
+ /** Returns a small bonus based on node label to favour structural node types. */
37
+ function computeNodeTypeBonus(label) {
38
+ if (label === 'File' || label === 'Module')
39
+ return 0.02;
40
+ if (label === 'Class')
41
+ return 0.01;
42
+ return 0;
43
+ }
44
+ /**
45
+ * Hybrid search combining three strategies:
46
+ * 1. FTS5 (trigram) BM25 match via `ftsSearch`
47
+ * 2. LIKE fallback for short queries (≤3 chars) or when FTS returns 0 results
48
+ * 3. In-memory fuzzy character-sequence scoring applied to all candidates
49
+ *
50
+ * Results are deduped by id (highest combinedScore wins), re-ranked, and
51
+ * trimmed to `limit`. The existing `ftsSearch` is left unchanged.
52
+ */
53
+ export function hybridSearch(db, query, limit, label) {
54
+ const safeQuery = query.replace(/[*]/g, ' ').trim();
55
+ if (!safeQuery)
56
+ return [];
57
+ // id → best result so far
58
+ const best = new Map();
59
+ const upsert = (result) => {
60
+ const existing = best.get(result.id);
61
+ if (!existing || result.combinedScore > existing.combinedScore) {
62
+ best.set(result.id, result);
63
+ }
64
+ };
65
+ // ── Strategy 1: FTS5 BM25 ──────────────────────────────────────────────────
66
+ const ftsRows = ftsSearch(db, safeQuery, limit * 2, label);
67
+ for (const row of ftsRows) {
68
+ const ftsScore = relevanceFromFtsRank(row.rank);
69
+ const fuzz = computeFuzzyScore(row.name, safeQuery);
70
+ const combined = ftsScore + fuzz + computeNodeTypeBonus(row.label);
71
+ upsert({ ...row, combinedScore: combined, matchStrategy: 'fts' });
72
+ }
73
+ // ── Strategy 2: LIKE fallback ──────────────────────────────────────────────
74
+ // Always run for short queries (≤3 chars) or when FTS returned nothing.
75
+ if (safeQuery.length <= 3 || ftsRows.length === 0) {
76
+ const escapedSafeQuery = safeQuery
77
+ .replace(/\\/g, '\\\\')
78
+ .replace(/%/g, '\\%')
79
+ .replace(/_/g, '\\_');
80
+ const likePattern = `%${escapedSafeQuery}%`;
81
+ let likeSql = `
82
+ SELECT n.id, n.name, n.norm_label, n.file_path, n.label,
83
+ n.start_line, n.end_line
84
+ FROM nodes n
85
+ WHERE (n.name LIKE ? ESCAPE '\\' OR n.norm_label LIKE ? ESCAPE '\\')
86
+ `;
87
+ const likeParams = [likePattern, likePattern];
88
+ if (label) {
89
+ likeSql += ' AND n.label = ?';
90
+ likeParams.push(label);
91
+ }
92
+ likeSql += ' LIMIT ?';
93
+ likeParams.push(limit * 2);
94
+ const likeRows = db.prepare(likeSql).all(...likeParams);
95
+ for (const r of likeRows) {
96
+ const name = r.name;
97
+ const lbl = r.label;
98
+ const fuzz = computeFuzzyScore(name, safeQuery);
99
+ const combined = 0.3 + fuzz + computeNodeTypeBonus(lbl);
100
+ upsert({
101
+ id: r.id,
102
+ name,
103
+ normLabel: r.norm_label,
104
+ filePath: r.file_path ?? null,
105
+ label: lbl,
106
+ rank: 0,
107
+ startLine: r.start_line ?? null,
108
+ endLine: r.end_line ?? null,
109
+ combinedScore: combined,
110
+ matchStrategy: 'like',
111
+ });
112
+ }
113
+ }
114
+ // ── Sort, dedupe (handled by Map), slice ───────────────────────────────────
115
+ return Array.from(best.values())
116
+ .sort((a, b) => b.combinedScore - a.combinedScore)
117
+ .slice(0, limit);
118
+ }
119
+ //# sourceMappingURL=fts-store-hybrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fts-store-hybrid.js","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface FtsResult {
3
+ id: string;
4
+ name: string;
5
+ normLabel: string;
6
+ filePath: string | null;
7
+ label: string;
8
+ rank: number;
9
+ /** First line of the symbol in its source file (1-based, null if unknown). */
10
+ startLine: number | null;
11
+ /** Last line of the symbol in its source file (1-based, null if unknown). */
12
+ endLine: number | null;
13
+ }
14
+ /**
15
+ * THE single conversion from FTS5's `rank` to monograph's score convention.
16
+ *
17
+ * SCORE CONVENTION: every score that leaves the search layer is
18
+ * **higher-is-better and non-negative**. SQLite FTS5's `rank` is the opposite
19
+ * (negative, and *more* negative means a *better* match), so a raw rank must
20
+ * never escape this module — forwarding one into a ranker that takes maxima
21
+ * lets an unrelated node sitting at 0 outrank a genuine match at -0.656.
22
+ *
23
+ * Maps |rank| through x/(1+x) into (0, 1): monotonically increasing, so
24
+ * relative BM25 order is preserved, and bounded, so it composes with the
25
+ * additive fuzzy/node-type bonuses without one term swamping the others.
26
+ */
27
+ export declare function relevanceFromFtsRank(rank: number): number;
28
+ export declare function ftsSearch(db: Database.Database, query: string, limit: number, label?: string): FtsResult[];
29
+ //# sourceMappingURL=fts-store-search.d.ts.map
@@ -0,0 +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;AAG3C,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,MAAM,GACb,SAAS,EAAE,CA+Jb"}