@mmnto/totem 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compile-lesson.d.ts +25 -1
- package/dist/compile-lesson.d.ts.map +1 -1
- package/dist/compile-lesson.js +33 -9
- package/dist/compile-lesson.js.map +1 -1
- package/dist/compile-lesson.test.js +135 -5
- package/dist/compile-lesson.test.js.map +1 -1
- package/dist/compiler-schema.d.ts +86 -4
- package/dist/compiler-schema.d.ts.map +1 -1
- package/dist/compiler-schema.js +34 -2
- package/dist/compiler-schema.js.map +1 -1
- package/dist/compiler.d.ts +0 -4
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +30 -5
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.test.js +128 -0
- package/dist/compiler.test.js.map +1 -1
- package/dist/config-schema.d.ts +440 -0
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +24 -0
- package/dist/config-schema.js.map +1 -1
- package/dist/config-schema.test.js +127 -0
- package/dist/config-schema.test.js.map +1 -1
- package/dist/drift-detector.d.ts +6 -2
- package/dist/drift-detector.d.ts.map +1 -1
- package/dist/drift-detector.js +34 -5
- package/dist/drift-detector.js.map +1 -1
- package/dist/drift-detector.test.js +77 -0
- package/dist/drift-detector.test.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/ingest/pipeline.js +1 -1
- package/dist/ingest/pipeline.js.map +1 -1
- package/dist/lesson-io.d.ts.map +1 -1
- package/dist/lesson-io.js +21 -3
- package/dist/lesson-io.js.map +1 -1
- package/dist/lesson-io.test.js +48 -0
- package/dist/lesson-io.test.js.map +1 -1
- package/dist/lesson-pattern.d.ts +22 -0
- package/dist/lesson-pattern.d.ts.map +1 -1
- package/dist/lesson-pattern.js +95 -7
- package/dist/lesson-pattern.js.map +1 -1
- package/dist/lesson-pattern.test.js +255 -1
- package/dist/lesson-pattern.test.js.map +1 -1
- package/dist/rule-engine.d.ts.map +1 -1
- package/dist/rule-engine.js +11 -9
- package/dist/rule-engine.js.map +1 -1
- package/dist/rule-metrics.d.ts +114 -2
- package/dist/rule-metrics.d.ts.map +1 -1
- package/dist/rule-metrics.js +24 -1
- package/dist/rule-metrics.js.map +1 -1
- package/dist/rule-metrics.test.js +60 -1
- package/dist/rule-metrics.test.js.map +1 -1
- package/dist/rule-tester.d.ts +8 -0
- package/dist/rule-tester.d.ts.map +1 -1
- package/dist/rule-tester.js +19 -1
- package/dist/rule-tester.js.map +1 -1
- package/dist/rule-tester.test.js +36 -1
- package/dist/rule-tester.test.js.map +1 -1
- package/dist/semantic-dedup.d.ts +12 -1
- package/dist/semantic-dedup.d.ts.map +1 -1
- package/dist/semantic-dedup.js +34 -4
- package/dist/semantic-dedup.js.map +1 -1
- package/dist/semantic-dedup.test.d.ts +2 -0
- package/dist/semantic-dedup.test.d.ts.map +1 -0
- package/dist/semantic-dedup.test.js +83 -0
- package/dist/semantic-dedup.test.js.map +1 -0
- package/dist/store/lance-search.d.ts +4 -4
- package/dist/store/lance-search.d.ts.map +1 -1
- package/dist/store/lance-search.js +27 -12
- package/dist/store/lance-search.js.map +1 -1
- package/dist/store/lance-search.test.js +109 -27
- package/dist/store/lance-search.test.js.map +1 -1
- package/dist/store/lance-store.d.ts +17 -2
- package/dist/store/lance-store.d.ts.map +1 -1
- package/dist/store/lance-store.js +20 -4
- package/dist/store/lance-store.js.map +1 -1
- package/dist/store/lance-store.test.js +1 -1
- package/dist/store/lance-store.test.js.map +1 -1
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
1
2
|
/** RRF constant — standard value from the original RRF paper. */
|
|
2
3
|
const RRF_K = 60;
|
|
3
4
|
/**
|
|
@@ -7,21 +8,21 @@ const RRF_K = 60;
|
|
|
7
8
|
*/
|
|
8
9
|
const HYBRID_OVERFETCH_FACTOR = 3;
|
|
9
10
|
/** Pure vector search (original behavior). */
|
|
10
|
-
export async function runVectorSearch(table, embedder, query, typeFilter, maxResults, boundary) {
|
|
11
|
+
export async function runVectorSearch(table, embedder, query, typeFilter, maxResults, sourceContext, boundary) {
|
|
11
12
|
const [queryVector] = await embedder.embed([query]);
|
|
12
13
|
let q = table.vectorSearch(queryVector).limit(maxResults);
|
|
13
14
|
const whereClause = buildWhereClause(typeFilter, boundary);
|
|
14
15
|
if (whereClause)
|
|
15
16
|
q = q.where(whereClause);
|
|
16
17
|
const results = await q.toArray();
|
|
17
|
-
return results.map(rowToSearchResult);
|
|
18
|
+
return results.map((row) => rowToSearchResult(row, sourceContext));
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* Hybrid search: runs vector + FTS in parallel, merges with RRF.
|
|
21
22
|
* Each leg fetches `maxResults * HYBRID_OVERFETCH_FACTOR` candidates
|
|
22
23
|
* to give RRF enough diversity to produce `maxResults` fused results.
|
|
23
24
|
*/
|
|
24
|
-
export async function runHybridSearch(table, embedder, onWarn, query, typeFilter, maxResults, boundary) {
|
|
25
|
+
export async function runHybridSearch(table, embedder, onWarn, query, typeFilter, maxResults, sourceContext, boundary) {
|
|
25
26
|
const fetchCount = maxResults * HYBRID_OVERFETCH_FACTOR;
|
|
26
27
|
const whereClause = buildWhereClause(typeFilter, boundary);
|
|
27
28
|
const [queryVector] = await embedder.embed([query]);
|
|
@@ -31,7 +32,7 @@ export async function runHybridSearch(table, embedder, onWarn, query, typeFilter
|
|
|
31
32
|
runFtsLeg(table, onWarn, query, whereClause, fetchCount),
|
|
32
33
|
]);
|
|
33
34
|
// Merge with RRF
|
|
34
|
-
return rrfMerge(vectorResults, ftsResults, maxResults);
|
|
35
|
+
return rrfMerge(vectorResults, ftsResults, maxResults, sourceContext);
|
|
35
36
|
}
|
|
36
37
|
async function runVectorLeg(table, queryVector, whereClause, limit) {
|
|
37
38
|
let q = table.vectorSearch(queryVector).limit(limit).withRowId();
|
|
@@ -45,11 +46,11 @@ async function runVectorLeg(table, queryVector, whereClause, limit) {
|
|
|
45
46
|
}));
|
|
46
47
|
}
|
|
47
48
|
/** FTS-only search — no embedder required. For use when embedding is unavailable (offline, no API key). */
|
|
48
|
-
export async function runFtsSearch(table, onWarn, query, typeFilter, maxResults, boundary) {
|
|
49
|
+
export async function runFtsSearch(table, onWarn, query, typeFilter, maxResults, sourceContext, boundary) {
|
|
49
50
|
const whereClause = buildWhereClause(typeFilter, boundary);
|
|
50
51
|
const rows = await runFtsLeg(table, onWarn, query, whereClause, maxResults);
|
|
51
52
|
return rows.map(({ row, rank }) => {
|
|
52
|
-
const result = rowToSearchResult(row);
|
|
53
|
+
const result = rowToSearchResult(row, sourceContext);
|
|
53
54
|
// If FTS didn't provide _score, use rank-based scoring (1.0 → 0.0)
|
|
54
55
|
if (row['_score'] == null) {
|
|
55
56
|
result.score = 1 / rank;
|
|
@@ -108,8 +109,15 @@ function buildWhereClause(typeFilter, boundary) {
|
|
|
108
109
|
}
|
|
109
110
|
return conditions.length > 0 ? conditions.join(' AND ') : undefined;
|
|
110
111
|
}
|
|
111
|
-
/**
|
|
112
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Convert a raw LanceDB row to a SearchResult.
|
|
114
|
+
*
|
|
115
|
+
* `sourceContext` is **required** (mmnto/totem#1295 — CR outside-diff catch).
|
|
116
|
+
* An optional context with a silent `filePath` fallback for `absoluteFilePath`
|
|
117
|
+
* sent legacy callers down the wrong repo root instead of failing fast.
|
|
118
|
+
* Making the parameter required is the type-level fix for that drift.
|
|
119
|
+
*/
|
|
120
|
+
function rowToSearchResult(row, sourceContext) {
|
|
113
121
|
// Vector search returns _distance (lower = better); FTS returns _score (higher = better)
|
|
114
122
|
let score = 0;
|
|
115
123
|
if (row['_distance'] != null) {
|
|
@@ -118,21 +126,28 @@ function rowToSearchResult(row) {
|
|
|
118
126
|
else if (row['_score'] != null) {
|
|
119
127
|
score = row['_score'];
|
|
120
128
|
}
|
|
121
|
-
|
|
129
|
+
const filePath = row['filePath'];
|
|
130
|
+
const absoluteFilePath = path.join(sourceContext.absolutePathRoot, filePath);
|
|
131
|
+
const result = {
|
|
122
132
|
content: row['content'],
|
|
123
133
|
contextPrefix: row['contextPrefix'],
|
|
124
|
-
filePath
|
|
134
|
+
filePath,
|
|
135
|
+
absoluteFilePath,
|
|
125
136
|
type: row['type'],
|
|
126
137
|
label: row['label'],
|
|
127
138
|
score,
|
|
128
139
|
metadata: JSON.parse(row['metadata'] || '{}'),
|
|
129
140
|
};
|
|
141
|
+
if (sourceContext.sourceRepo) {
|
|
142
|
+
result.sourceRepo = sourceContext.sourceRepo;
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
130
145
|
}
|
|
131
146
|
/**
|
|
132
147
|
* Reciprocal Rank Fusion — merges two ranked result lists.
|
|
133
148
|
* score(d) = Σ 1 / (k + rank_in_list) for each list containing d.
|
|
134
149
|
*/
|
|
135
|
-
function rrfMerge(listA, listB, limit) {
|
|
150
|
+
function rrfMerge(listA, listB, limit, sourceContext) {
|
|
136
151
|
const scores = new Map();
|
|
137
152
|
for (const list of [listA, listB]) {
|
|
138
153
|
for (const { row, rank, id } of list) {
|
|
@@ -144,6 +159,6 @@ function rrfMerge(listA, listB, limit) {
|
|
|
144
159
|
return [...scores.values()]
|
|
145
160
|
.sort((a, b) => b.score - a.score)
|
|
146
161
|
.slice(0, limit)
|
|
147
|
-
.map(({ score, row }) => ({ ...rowToSearchResult(row), score }));
|
|
162
|
+
.map(({ score, row }) => ({ ...rowToSearchResult(row, sourceContext), score }));
|
|
148
163
|
}
|
|
149
164
|
//# sourceMappingURL=lance-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lance-search.js","sourceRoot":"","sources":["../../src/store/lance-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lance-search.js","sourceRoot":"","sources":["../../src/store/lance-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,13 +53,22 @@ function mockEmbedder(vec = [1, 0, 0]) {
|
|
|
53
53
|
embed: async (texts) => texts.map(() => vec),
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Default SourceContext for tests that don't specifically exercise the
|
|
58
|
+
* source-tagging path. Required by the search functions since
|
|
59
|
+
* mmnto/totem#1295 made sourceContext a required parameter (removing
|
|
60
|
+
* the silent `filePath` fallback that CR flagged as Tenet 4 drift).
|
|
61
|
+
* Tests that DO care about the tagging live in the "source context
|
|
62
|
+
* tagging" describe block and pass their own context.
|
|
63
|
+
*/
|
|
64
|
+
const DEFAULT_CTX = { absolutePathRoot: '/test' };
|
|
56
65
|
// ─── runVectorSearch ────────────────────────────────────
|
|
57
66
|
describe('runVectorSearch', () => {
|
|
58
67
|
it('returns results mapped from LanceDB rows', async () => {
|
|
59
68
|
const table = mockTable({
|
|
60
69
|
vectorRows: [fakeRow('a', { _distance: 0.5 }), fakeRow('b', { _distance: 1.0 })],
|
|
61
70
|
});
|
|
62
|
-
const results = await runVectorSearch(table, mockEmbedder(), 'test query', undefined, 10);
|
|
71
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'test query', undefined, 10, DEFAULT_CTX);
|
|
63
72
|
expect(results).toHaveLength(2);
|
|
64
73
|
expect(results[0].content).toBe('content-a');
|
|
65
74
|
expect(results[0].score).toBeCloseTo(1 / (1 + 0.5));
|
|
@@ -68,26 +77,26 @@ describe('runVectorSearch', () => {
|
|
|
68
77
|
});
|
|
69
78
|
it('returns empty array when table has no matches', async () => {
|
|
70
79
|
const table = mockTable({ vectorRows: [] });
|
|
71
|
-
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5);
|
|
80
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX);
|
|
72
81
|
expect(results).toHaveLength(0);
|
|
73
82
|
});
|
|
74
83
|
it('passes type filter as a WHERE clause', async () => {
|
|
75
84
|
const table = mockTable({ vectorRows: [] });
|
|
76
|
-
await runVectorSearch(table, mockEmbedder(), 'query', 'spec', 5);
|
|
85
|
+
await runVectorSearch(table, mockEmbedder(), 'query', 'spec', 5, DEFAULT_CTX);
|
|
77
86
|
expect(table._vectorBuilder.where).toHaveBeenCalledOnce();
|
|
78
87
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
79
88
|
expect(clause).toContain("`type` = 'spec'");
|
|
80
89
|
});
|
|
81
90
|
it('passes boundary filter as a WHERE LIKE clause', async () => {
|
|
82
91
|
const table = mockTable({ vectorRows: [] });
|
|
83
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, 'src/utils');
|
|
92
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, 'src/utils');
|
|
84
93
|
expect(table._vectorBuilder.where).toHaveBeenCalledOnce();
|
|
85
94
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
86
95
|
expect(clause).toContain("`filePath` LIKE 'src/utils%'");
|
|
87
96
|
});
|
|
88
97
|
it('combines type and boundary filters with AND', async () => {
|
|
89
98
|
const table = mockTable({ vectorRows: [] });
|
|
90
|
-
await runVectorSearch(table, mockEmbedder(), 'query', 'code', 5, 'src/');
|
|
99
|
+
await runVectorSearch(table, mockEmbedder(), 'query', 'code', 5, DEFAULT_CTX, 'src/');
|
|
91
100
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
92
101
|
expect(clause).toContain("`type` = 'code'");
|
|
93
102
|
expect(clause).toContain("`filePath` LIKE 'src/%'");
|
|
@@ -95,7 +104,7 @@ describe('runVectorSearch', () => {
|
|
|
95
104
|
});
|
|
96
105
|
it('handles multiple boundary prefixes with OR', async () => {
|
|
97
106
|
const table = mockTable({ vectorRows: [] });
|
|
98
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, [
|
|
107
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, [
|
|
99
108
|
'src/a',
|
|
100
109
|
'src/b',
|
|
101
110
|
]);
|
|
@@ -106,32 +115,35 @@ describe('runVectorSearch', () => {
|
|
|
106
115
|
});
|
|
107
116
|
it('does not call where when no filters are provided', async () => {
|
|
108
117
|
const table = mockTable({ vectorRows: [] });
|
|
109
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5);
|
|
118
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX);
|
|
110
119
|
expect(table._vectorBuilder.where).not.toHaveBeenCalled();
|
|
111
120
|
});
|
|
112
121
|
it('escapes SQL wildcards in boundary prefixes', async () => {
|
|
113
122
|
const table = mockTable({ vectorRows: [] });
|
|
114
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, 'src/50%_off');
|
|
123
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, 'src/50%_off');
|
|
115
124
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
116
125
|
// % and _ should be escaped
|
|
117
126
|
expect(clause).toContain('50\\%\\_off');
|
|
118
127
|
});
|
|
119
128
|
it('normalizes Windows backslashes in boundary prefixes', async () => {
|
|
120
129
|
const table = mockTable({ vectorRows: [] });
|
|
121
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, 'src\\utils\\foo');
|
|
130
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, 'src\\utils\\foo');
|
|
122
131
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
123
132
|
expect(clause).toContain('src/utils/foo');
|
|
124
133
|
expect(clause).not.toContain('\\\\');
|
|
125
134
|
});
|
|
126
135
|
it('escapes single quotes in boundary prefixes', async () => {
|
|
127
136
|
const table = mockTable({ vectorRows: [] });
|
|
128
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, "it's/a/path");
|
|
137
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, "it's/a/path");
|
|
129
138
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
130
139
|
expect(clause).toContain("it''s/a/path");
|
|
131
140
|
});
|
|
132
141
|
it('filters out empty boundary strings', async () => {
|
|
133
142
|
const table = mockTable({ vectorRows: [] });
|
|
134
|
-
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5,
|
|
143
|
+
await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX, [
|
|
144
|
+
'',
|
|
145
|
+
'src/',
|
|
146
|
+
]);
|
|
135
147
|
const clause = table._vectorBuilder.where.mock.calls[0][0];
|
|
136
148
|
expect(clause).toContain("`filePath` LIKE 'src/%'");
|
|
137
149
|
expect(clause).not.toContain("LIKE '%'");
|
|
@@ -140,14 +152,14 @@ describe('runVectorSearch', () => {
|
|
|
140
152
|
const table = mockTable({
|
|
141
153
|
vectorRows: [fakeRow('x', { _distance: null })],
|
|
142
154
|
});
|
|
143
|
-
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5);
|
|
155
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX);
|
|
144
156
|
expect(results[0].score).toBe(0);
|
|
145
157
|
});
|
|
146
158
|
it('parses metadata JSON from row', async () => {
|
|
147
159
|
const table = mockTable({
|
|
148
160
|
vectorRows: [fakeRow('m', { metadata: '{"key":"value"}' })],
|
|
149
161
|
});
|
|
150
|
-
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5);
|
|
162
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, DEFAULT_CTX);
|
|
151
163
|
expect(results[0].metadata).toEqual({ key: 'value' });
|
|
152
164
|
});
|
|
153
165
|
});
|
|
@@ -159,7 +171,7 @@ describe('runHybridSearch', () => {
|
|
|
159
171
|
const ftsRows = [fakeRow('a'), fakeRow('c')];
|
|
160
172
|
const table = mockTable({ vectorRows, ftsRows });
|
|
161
173
|
const onWarn = vi.fn();
|
|
162
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
174
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
163
175
|
// 'a' appears in both lists, so it should have the highest RRF score
|
|
164
176
|
expect(results.length).toBeGreaterThanOrEqual(3);
|
|
165
177
|
expect(results[0].content).toBe('content-a');
|
|
@@ -178,7 +190,7 @@ describe('runHybridSearch', () => {
|
|
|
178
190
|
ftsError: new Error('FTS index not found'),
|
|
179
191
|
});
|
|
180
192
|
const onWarn = vi.fn();
|
|
181
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
193
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
182
194
|
expect(results).toHaveLength(2);
|
|
183
195
|
expect(onWarn).toHaveBeenCalledOnce();
|
|
184
196
|
expect(onWarn.mock.calls[0][0]).toContain('FTS search failed');
|
|
@@ -186,7 +198,7 @@ describe('runHybridSearch', () => {
|
|
|
186
198
|
it('returns empty array when both legs return empty', async () => {
|
|
187
199
|
const table = mockTable({ vectorRows: [], ftsRows: [] });
|
|
188
200
|
const onWarn = vi.fn();
|
|
189
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
201
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
190
202
|
expect(results).toHaveLength(0);
|
|
191
203
|
});
|
|
192
204
|
it('returns results when only FTS leg has results (vector empty)', async () => {
|
|
@@ -195,7 +207,7 @@ describe('runHybridSearch', () => {
|
|
|
195
207
|
ftsRows: [fakeRow('x')],
|
|
196
208
|
});
|
|
197
209
|
const onWarn = vi.fn();
|
|
198
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
210
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
199
211
|
expect(results).toHaveLength(1);
|
|
200
212
|
expect(results[0].content).toBe('content-x');
|
|
201
213
|
});
|
|
@@ -205,7 +217,7 @@ describe('runHybridSearch', () => {
|
|
|
205
217
|
const ftsRows = Array.from({ length: 5 }, (_, i) => fakeRow(`f${i}`));
|
|
206
218
|
const table = mockTable({ vectorRows, ftsRows });
|
|
207
219
|
const onWarn = vi.fn();
|
|
208
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 3);
|
|
220
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 3, DEFAULT_CTX);
|
|
209
221
|
expect(results).toHaveLength(3);
|
|
210
222
|
});
|
|
211
223
|
it('ranks items appearing in both lists higher than single-list items', async () => {
|
|
@@ -214,7 +226,7 @@ describe('runHybridSearch', () => {
|
|
|
214
226
|
const ftsRows = [fakeRow('shared')];
|
|
215
227
|
const table = mockTable({ vectorRows, ftsRows });
|
|
216
228
|
const onWarn = vi.fn();
|
|
217
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
229
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
218
230
|
// 'shared' = 1/(60+2) + 1/(60+1) = 1/62 + 1/61
|
|
219
231
|
// 'solo' = 1/(60+1) = 1/61
|
|
220
232
|
// shared should rank higher
|
|
@@ -227,7 +239,7 @@ describe('runHybridSearch', () => {
|
|
|
227
239
|
const ftsRows = [fakeRow('only')];
|
|
228
240
|
const table = mockTable({ vectorRows, ftsRows });
|
|
229
241
|
const onWarn = vi.fn();
|
|
230
|
-
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10);
|
|
242
|
+
const results = await runHybridSearch(table, mockEmbedder(), onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
231
243
|
expect(results).toHaveLength(1);
|
|
232
244
|
// Both at rank 1: score = 2 * 1/(60+1) = 2/61
|
|
233
245
|
expect(results[0].score).toBeCloseTo(2 / 61, 6);
|
|
@@ -235,7 +247,7 @@ describe('runHybridSearch', () => {
|
|
|
235
247
|
it('passes type filter through to both legs', async () => {
|
|
236
248
|
const table = mockTable({ vectorRows: [], ftsRows: [] });
|
|
237
249
|
const onWarn = vi.fn();
|
|
238
|
-
await runHybridSearch(table, mockEmbedder(), onWarn, 'query', 'spec', 5);
|
|
250
|
+
await runHybridSearch(table, mockEmbedder(), onWarn, 'query', 'spec', 5, DEFAULT_CTX);
|
|
239
251
|
// Vector leg should get a where clause
|
|
240
252
|
expect(table._vectorBuilder.where).toHaveBeenCalled();
|
|
241
253
|
const vectorClause = table._vectorBuilder.where.mock.calls[0][0];
|
|
@@ -255,7 +267,7 @@ describe('runFtsSearch', () => {
|
|
|
255
267
|
];
|
|
256
268
|
const table = mockTable({ ftsRows });
|
|
257
269
|
const onWarn = vi.fn();
|
|
258
|
-
const results = await runFtsSearch(table, onWarn, 'test query', undefined, 10);
|
|
270
|
+
const results = await runFtsSearch(table, onWarn, 'test query', undefined, 10, DEFAULT_CTX);
|
|
259
271
|
expect(results).toHaveLength(2);
|
|
260
272
|
expect(results[0].content).toBe('content-a');
|
|
261
273
|
expect(results[1].content).toBe('content-b');
|
|
@@ -267,7 +279,7 @@ describe('runFtsSearch', () => {
|
|
|
267
279
|
];
|
|
268
280
|
const table = mockTable({ ftsRows });
|
|
269
281
|
const onWarn = vi.fn();
|
|
270
|
-
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10);
|
|
282
|
+
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
271
283
|
// Rank 1 → score 1/1 = 1.0, Rank 2 → score 1/2 = 0.5
|
|
272
284
|
expect(results[0].score).toBeCloseTo(1.0);
|
|
273
285
|
expect(results[1].score).toBeCloseTo(0.5);
|
|
@@ -276,13 +288,13 @@ describe('runFtsSearch', () => {
|
|
|
276
288
|
const ftsRows = [fakeRow('a', { _distance: undefined, _score: 2.5 })];
|
|
277
289
|
const table = mockTable({ ftsRows });
|
|
278
290
|
const onWarn = vi.fn();
|
|
279
|
-
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10);
|
|
291
|
+
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
280
292
|
expect(results[0].score).toBeCloseTo(2.5);
|
|
281
293
|
});
|
|
282
294
|
it('returns empty on FTS failure and warns', async () => {
|
|
283
295
|
const table = mockTable({ ftsError: new Error('no FTS index') });
|
|
284
296
|
const onWarn = vi.fn();
|
|
285
|
-
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10);
|
|
297
|
+
const results = await runFtsSearch(table, onWarn, 'query', undefined, 10, DEFAULT_CTX);
|
|
286
298
|
expect(results).toHaveLength(0);
|
|
287
299
|
expect(onWarn).toHaveBeenCalledOnce();
|
|
288
300
|
expect(onWarn.mock.calls[0][0]).toContain('FTS search failed');
|
|
@@ -290,7 +302,7 @@ describe('runFtsSearch', () => {
|
|
|
290
302
|
it('passes type filter as WHERE clause', async () => {
|
|
291
303
|
const table = mockTable({ ftsRows: [] });
|
|
292
304
|
const onWarn = vi.fn();
|
|
293
|
-
await runFtsSearch(table, onWarn, 'query', 'lesson', 5);
|
|
305
|
+
await runFtsSearch(table, onWarn, 'query', 'lesson', 5, DEFAULT_CTX);
|
|
294
306
|
expect(table._ftsBuilder.where).toHaveBeenCalled();
|
|
295
307
|
const clause = table._ftsBuilder.where.mock.calls[0][0];
|
|
296
308
|
expect(clause).toContain("`type` = 'lesson'");
|
|
@@ -298,10 +310,80 @@ describe('runFtsSearch', () => {
|
|
|
298
310
|
it('passes boundary filter as WHERE LIKE clause', async () => {
|
|
299
311
|
const table = mockTable({ ftsRows: [] });
|
|
300
312
|
const onWarn = vi.fn();
|
|
301
|
-
await runFtsSearch(table, onWarn, 'query', undefined, 5, 'packages/core');
|
|
313
|
+
await runFtsSearch(table, onWarn, 'query', undefined, 5, { absolutePathRoot: '/test' }, 'packages/core');
|
|
302
314
|
expect(table._ftsBuilder.where).toHaveBeenCalled();
|
|
303
315
|
const clause = table._ftsBuilder.where.mock.calls[0][0];
|
|
304
316
|
expect(clause).toContain("`filePath` LIKE 'packages/core%'");
|
|
305
317
|
});
|
|
306
318
|
});
|
|
319
|
+
// ─── Source context tagging (mmnto/totem#1294 Phase 1 + #1295 required-context) ──
|
|
320
|
+
//
|
|
321
|
+
// Phase 1 originally tested a "no sourceContext" fallback where
|
|
322
|
+
// `absoluteFilePath === filePath`. CR flagged that test on PR #1295 as
|
|
323
|
+
// locking in silent drift — legacy callers that forgot the context would
|
|
324
|
+
// keep looking healthy instead of failing fast. The fix was to make
|
|
325
|
+
// sourceContext required at the type level (see mmnto/totem#1295 review
|
|
326
|
+
// cycle). The tests below now ONLY exercise the required-context path.
|
|
327
|
+
describe('source context tagging', () => {
|
|
328
|
+
it('runVectorSearch: primary sourceContext (no sourceRepo) → absoluteFilePath joined, sourceRepo absent', async () => {
|
|
329
|
+
const table = mockTable({
|
|
330
|
+
vectorRows: [fakeRow('a', { _distance: 0.5, filePath: 'src/foo.ts' })],
|
|
331
|
+
});
|
|
332
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, { absolutePathRoot: '/d/Dev/totem' });
|
|
333
|
+
expect(results).toHaveLength(1);
|
|
334
|
+
expect(results[0].filePath).toBe('src/foo.ts');
|
|
335
|
+
// path.join normalizes to the platform separator; check with posix + win32 forms
|
|
336
|
+
expect(results[0].absoluteFilePath).toMatch(/^[/\\]d[/\\]Dev[/\\]totem[/\\]src[/\\]foo\.ts$/);
|
|
337
|
+
expect(results[0].sourceRepo).toBeUndefined();
|
|
338
|
+
});
|
|
339
|
+
it('runVectorSearch: linked sourceContext → absoluteFilePath joined AND sourceRepo set', async () => {
|
|
340
|
+
const table = mockTable({
|
|
341
|
+
vectorRows: [fakeRow('a', { _distance: 0.5, filePath: 'adr/adr-001.md' })],
|
|
342
|
+
});
|
|
343
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, {
|
|
344
|
+
sourceRepo: 'strategy',
|
|
345
|
+
absolutePathRoot: '/d/Dev/totem-strategy',
|
|
346
|
+
});
|
|
347
|
+
expect(results).toHaveLength(1);
|
|
348
|
+
expect(results[0].filePath).toBe('adr/adr-001.md');
|
|
349
|
+
expect(results[0].absoluteFilePath).toMatch(/^[/\\]d[/\\]Dev[/\\]totem-strategy[/\\]adr[/\\]adr-001\.md$/);
|
|
350
|
+
expect(results[0].sourceRepo).toBe('strategy');
|
|
351
|
+
});
|
|
352
|
+
it('runHybridSearch: sourceContext flows through RRF merge to final results', async () => {
|
|
353
|
+
const table = mockTable({
|
|
354
|
+
vectorRows: [fakeRow('a', { _distance: 0.5, filePath: 'src/foo.ts' })],
|
|
355
|
+
ftsRows: [fakeRow('a', { _score: 10, filePath: 'src/foo.ts' })],
|
|
356
|
+
});
|
|
357
|
+
const results = await runHybridSearch(table, mockEmbedder(), () => { }, 'query', undefined, 5, { sourceRepo: 'playground', absolutePathRoot: '/d/Dev/totem-playground' });
|
|
358
|
+
// RRF merges the same row from both legs — should produce one result
|
|
359
|
+
expect(results).toHaveLength(1);
|
|
360
|
+
expect(results[0].sourceRepo).toBe('playground');
|
|
361
|
+
expect(results[0].absoluteFilePath).toMatch(/^[/\\]d[/\\]Dev[/\\]totem-playground[/\\]src[/\\]foo\.ts$/);
|
|
362
|
+
});
|
|
363
|
+
it('runFtsSearch: sourceContext threads through FTS-only path', async () => {
|
|
364
|
+
const table = mockTable({
|
|
365
|
+
ftsRows: [fakeRow('a', { _score: 10, filePath: 'proposals/active/215-mesh.md' })],
|
|
366
|
+
});
|
|
367
|
+
const results = await runFtsSearch(table, () => { }, 'mesh query', undefined, 5, {
|
|
368
|
+
sourceRepo: 'strategy',
|
|
369
|
+
absolutePathRoot: '/d/Dev/totem-strategy',
|
|
370
|
+
});
|
|
371
|
+
expect(results).toHaveLength(1);
|
|
372
|
+
expect(results[0].sourceRepo).toBe('strategy');
|
|
373
|
+
expect(results[0].filePath).toBe('proposals/active/215-mesh.md');
|
|
374
|
+
expect(results[0].absoluteFilePath).toMatch(/^[/\\]d[/\\]Dev[/\\]totem-strategy[/\\]proposals[/\\]active[/\\]215-mesh\.md$/);
|
|
375
|
+
});
|
|
376
|
+
it('runVectorSearch: sourceRepo of empty string is treated as absent', async () => {
|
|
377
|
+
// Edge case: someone passes sourceRepo: '' — should NOT set the tag
|
|
378
|
+
// (mirrors the truthy check in rowToSearchResult)
|
|
379
|
+
const table = mockTable({
|
|
380
|
+
vectorRows: [fakeRow('a', { _distance: 0.5, filePath: 'src/foo.ts' })],
|
|
381
|
+
});
|
|
382
|
+
const results = await runVectorSearch(table, mockEmbedder(), 'query', undefined, 5, {
|
|
383
|
+
sourceRepo: '',
|
|
384
|
+
absolutePathRoot: '/d/Dev/totem',
|
|
385
|
+
});
|
|
386
|
+
expect(results[0].sourceRepo).toBeUndefined();
|
|
387
|
+
});
|
|
388
|
+
});
|
|
307
389
|
//# sourceMappingURL=lance-search.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lance-search.test.js","sourceRoot":"","sources":["../../src/store/lance-search.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnF,2DAA2D;AAE3D,2EAA2E;AAC3E,SAAS,OAAO,CAAC,EAAU,EAAE,YAAqC,EAAE;IAClE,OAAO;QACL,OAAO,EAAE,WAAW,EAAE,EAAE;QACxB,aAAa,EAAE,UAAU,EAAE,EAAE;QAC7B,QAAQ,EAAE,OAAO,EAAE,KAAK;QACxB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,SAAS,EAAE,EAAE;QACpB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAS,gBAAgB,CAAC,IAA+B;IACvD,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;QAC/B,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAc,EAAE,EAAE;YAC9B,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;YACxB,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QACF,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC;QAChC,SAAS,EAAE,QAAQ;KACpB,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mCAAmC;AACnC,SAAS,SAAS,CAAC,IAIlB;IACC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAExD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,IAAI,CAAC,QAAQ,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;QACxC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;QAC/B,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,SAAS,YAAY,CAAC,MAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,MAAM;QACtB,KAAK,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,2DAA2D;AAE3D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG,SAAS,CAAC;YACtB,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;SACjF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,YAAY,EACZ,SAAS,EACT,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAE1F,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAElF,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE;YAC3E,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAE5F,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,4BAA4B;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAEhG,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAE5F,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAE3F,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,KAAK,GAAG,SAAS,CAAC;YACtB,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAChD,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC;YACtB,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;SAC5D,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,2DAA2D;AAE3D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,sEAAsE;QACtE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,qEAAqE;QACrE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9C,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAE3D,yEAAyE;QACzE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC;YACtB,UAAU;YACV,QAAQ,EAAE,IAAI,KAAK,CAAC,qBAAqB,CAAC;SAC3C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,KAAK,GAAG,SAAS,CAAC;YACtB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,2BAA2B;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,qEAAqE;QACrE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,+CAA+C;QAC/C,6BAA6B;QAC7B,4BAA4B;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,KAAc,EACd,YAAY,EAAE,EACd,MAAM,EACN,OAAO,EACP,SAAS,EACT,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,8CAA8C;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,eAAe,CAAC,KAAc,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAElF,uCAAuC;QACvC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QAC5E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAElD,yCAAyC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,6DAA6D;AAE7D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,OAAO,GAAG;YACd,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SACvC,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,OAAO,GAAG;YACd,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC1D,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnF,qDAAqD;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,YAAY,CAAC,KAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QAEnF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"lance-search.test.js","sourceRoot":"","sources":["../../src/store/lance-search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Embedder } from '../embedders/embedder.js';
|
|
2
|
-
import type { Chunk, HealthCheckResult, SearchOptions, SearchResult } from '../types.js';
|
|
2
|
+
import type { Chunk, HealthCheckResult, SearchOptions, SearchResult, SourceContext } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Escape a string for use in a LanceDB SQL WHERE clause (single-quoted literal).
|
|
5
5
|
*
|
|
@@ -16,7 +16,22 @@ export declare class LanceStore {
|
|
|
16
16
|
private embedder;
|
|
17
17
|
private hasFtsIndex;
|
|
18
18
|
private onWarn;
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Source repo context injected at construction time. Primary stores use
|
|
21
|
+
* `{ absolutePathRoot: projectRoot }` with no `sourceRepo`; linked stores
|
|
22
|
+
* (mmnto/totem#1294 Cross-Repo Context Mesh) use
|
|
23
|
+
* `{ sourceRepo: '<link name>', absolutePathRoot: '<linked repo root>' }`.
|
|
24
|
+
* Passed down to every `search` / `searchFts` call so every SearchResult
|
|
25
|
+
* gets stamped with the owning store's identity via `rowToSearchResult`.
|
|
26
|
+
*
|
|
27
|
+
* **Required** since mmnto/totem#1295 — CR flagged that an optional
|
|
28
|
+
* context with a silent `filePath` fallback for `absoluteFilePath` sent
|
|
29
|
+
* legacy callers down the wrong repo root instead of failing fast.
|
|
30
|
+
* Making the parameter required closes that class of bug at the type
|
|
31
|
+
* level and forces every call site to state its source explicitly.
|
|
32
|
+
*/
|
|
33
|
+
private sourceContext;
|
|
34
|
+
constructor(dbPath: string, embedder: Embedder, sourceContext: SourceContext, onWarn?: (msg: string) => void);
|
|
20
35
|
/**
|
|
21
36
|
* Connect to LanceDB. Auto-heals on version mismatch, corruption,
|
|
22
37
|
* or embedder dimension change by deleting the index and signaling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lance-store.d.ts","sourceRoot":"","sources":["../../src/store/lance-store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"lance-store.d.ts","sourceRoot":"","sources":["../../src/store/lance-store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,EAEd,MAAM,aAAa,CAAC;AAKrB;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAwB;IACtC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,aAAa,CAAgB;gBAGnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAQhC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrC,8EAA8E;YAChE,oBAAoB;IAalC,gEAAgE;IAChE,OAAO,CAAC,eAAe;IAcvB,6DAA6D;YAC/C,YAAY;IAiB1B,uDAAuD;IACjD,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B5C;;;;;OAKG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrC,sDAAsD;YACxC,cAAc;IAiB5B,4DAA4D;IAC5D,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+B7D;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAchE,yEAAyE;IACnE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,qDAAqD;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,kFAAkF;IAC5E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,+DAA+D;IACzD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAKjC,oDAAoD;IAC9C,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,4CAA4C;IACtC,KAAK,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAe/E,mFAAmF;IAC7E,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAShD"}
|
|
@@ -22,9 +22,25 @@ export class LanceStore {
|
|
|
22
22
|
embedder;
|
|
23
23
|
hasFtsIndex = false;
|
|
24
24
|
onWarn;
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Source repo context injected at construction time. Primary stores use
|
|
27
|
+
* `{ absolutePathRoot: projectRoot }` with no `sourceRepo`; linked stores
|
|
28
|
+
* (mmnto/totem#1294 Cross-Repo Context Mesh) use
|
|
29
|
+
* `{ sourceRepo: '<link name>', absolutePathRoot: '<linked repo root>' }`.
|
|
30
|
+
* Passed down to every `search` / `searchFts` call so every SearchResult
|
|
31
|
+
* gets stamped with the owning store's identity via `rowToSearchResult`.
|
|
32
|
+
*
|
|
33
|
+
* **Required** since mmnto/totem#1295 — CR flagged that an optional
|
|
34
|
+
* context with a silent `filePath` fallback for `absoluteFilePath` sent
|
|
35
|
+
* legacy callers down the wrong repo root instead of failing fast.
|
|
36
|
+
* Making the parameter required closes that class of bug at the type
|
|
37
|
+
* level and forces every call site to state its source explicitly.
|
|
38
|
+
*/
|
|
39
|
+
sourceContext;
|
|
40
|
+
constructor(dbPath, embedder, sourceContext, onWarn) {
|
|
26
41
|
this.dbPath = dbPath;
|
|
27
42
|
this.embedder = embedder;
|
|
43
|
+
this.sourceContext = sourceContext;
|
|
28
44
|
this.onWarn = onWarn ?? (() => { });
|
|
29
45
|
}
|
|
30
46
|
/**
|
|
@@ -205,9 +221,9 @@ export class LanceStore {
|
|
|
205
221
|
const boundary = options.boundary;
|
|
206
222
|
const useHybrid = (options.hybrid ?? true) && this.hasFtsIndex;
|
|
207
223
|
if (useHybrid) {
|
|
208
|
-
return runHybridSearch(this.table, this.embedder, this.onWarn, options.query, options.typeFilter, maxResults, boundary);
|
|
224
|
+
return runHybridSearch(this.table, this.embedder, this.onWarn, options.query, options.typeFilter, maxResults, this.sourceContext, boundary);
|
|
209
225
|
}
|
|
210
|
-
return runVectorSearch(this.table, this.embedder, options.query, options.typeFilter, maxResults, boundary);
|
|
226
|
+
return runVectorSearch(this.table, this.embedder, options.query, options.typeFilter, maxResults, this.sourceContext, boundary);
|
|
211
227
|
}
|
|
212
228
|
/**
|
|
213
229
|
* FTS-only search — no embedder required.
|
|
@@ -217,7 +233,7 @@ export class LanceStore {
|
|
|
217
233
|
async searchFts(options) {
|
|
218
234
|
if (!this.table || !this.hasFtsIndex)
|
|
219
235
|
return [];
|
|
220
|
-
return runFtsSearch(this.table, this.onWarn, options.query, options.typeFilter, options.maxResults ?? 5, options.boundary);
|
|
236
|
+
return runFtsSearch(this.table, this.onWarn, options.query, options.typeFilter, options.maxResults ?? 5, this.sourceContext, options.boundary);
|
|
221
237
|
}
|
|
222
238
|
/** Delete all chunks from a specific file (for incremental re-index). */
|
|
223
239
|
async deleteByFile(filePath) {
|