@mmnto/totem 1.13.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 +22 -5
- package/dist/compile-lesson.d.ts.map +1 -1
- package/dist/compile-lesson.js +30 -13
- package/dist/compile-lesson.js.map +1 -1
- package/dist/compile-lesson.test.js +113 -20
- package/dist/compile-lesson.test.js.map +1 -1
- package/dist/compiler-schema.d.ts +84 -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.test.js +97 -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 +27 -5
- package/dist/drift-detector.js.map +1 -1
- package/dist/drift-detector.test.js +67 -0
- package/dist/drift-detector.test.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 +92 -5
- package/dist/lesson-pattern.js.map +1 -1
- package/dist/lesson-pattern.test.js +250 -1
- package/dist/lesson-pattern.test.js.map +1 -1
- 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,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { extractAllFields, extractBadGoodSnippets, extractManualPattern, extractRuleExamples, stripInlineCode, } from './lesson-pattern.js';
|
|
2
|
+
import { extractAllFields, extractBadGoodSnippets, extractManualPattern, extractMultilineField, extractRuleExamples, stripInlineCode, } from './lesson-pattern.js';
|
|
3
3
|
describe('extractManualPattern', () => {
|
|
4
4
|
it('extracts all fields from a well-formed lesson body', () => {
|
|
5
5
|
const body = [
|
|
@@ -60,6 +60,246 @@ describe('extractManualPattern', () => {
|
|
|
60
60
|
const result = extractManualPattern(body);
|
|
61
61
|
expect(result?.pattern).toBe('process.kill($PID, 0)');
|
|
62
62
|
});
|
|
63
|
+
it('extracts fields with no whitespace after the closing bold marker (#1282 GCA)', () => {
|
|
64
|
+
// Pre-fix, extractField required \s+ which silently rejected **Pattern:**foo
|
|
65
|
+
// (no space). The lesson would fall through to Pipeline 2 instead of taking
|
|
66
|
+
// the manual path. Caught by gemini-code-assist as a cross-helper consistency
|
|
67
|
+
// cascade — the same pattern lesson-400fed87 describes.
|
|
68
|
+
const body = '**Pattern:**process\\.env\\[\n**Engine:**regex\n**Severity:**warning';
|
|
69
|
+
const result = extractManualPattern(body);
|
|
70
|
+
expect(result).not.toBeNull();
|
|
71
|
+
expect(result?.pattern).toBe('process\\.env\\[');
|
|
72
|
+
expect(result?.engine).toBe('regex');
|
|
73
|
+
expect(result?.severity).toBe('warning');
|
|
74
|
+
});
|
|
75
|
+
it('treats empty field values as absent (#1282 GCA)', () => {
|
|
76
|
+
// **Pattern:** with no value should return null (not a Pipeline 1 lesson)
|
|
77
|
+
// rather than producing a rule with an empty pattern. Same fix as the
|
|
78
|
+
// extractMultilineField empty-value handling — empty after trim → undefined
|
|
79
|
+
// → caller's `!value` fallback fires.
|
|
80
|
+
const body = '**Pattern:**\n**Engine:** regex';
|
|
81
|
+
const result = extractManualPattern(body);
|
|
82
|
+
expect(result).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
it('extracts all fields when the lesson uses the **Field**: form (#1282)', () => {
|
|
85
|
+
// Caught by Shield AI on PR #1282 as a partial-fix CRITICAL: extending
|
|
86
|
+
// extractMultilineField to support **Field**: without extending the shared
|
|
87
|
+
// extractField helper meant a lesson written entirely in alt-form would have
|
|
88
|
+
// extractManualPattern return null because Pattern wouldn't be found.
|
|
89
|
+
const body = [
|
|
90
|
+
'**Pattern**: console\\.log\\(',
|
|
91
|
+
'**Engine**: regex',
|
|
92
|
+
'**Scope**: src/**/*.ts',
|
|
93
|
+
'**Severity**: warning',
|
|
94
|
+
'**Message**: Use the structured logger instead of console output.',
|
|
95
|
+
].join('\n');
|
|
96
|
+
const result = extractManualPattern(body);
|
|
97
|
+
expect(result).not.toBeNull();
|
|
98
|
+
expect(result?.pattern).toBe('console\\.log\\(');
|
|
99
|
+
expect(result?.engine).toBe('regex');
|
|
100
|
+
expect(result?.fileGlobs).toEqual(['src/**/*.ts']);
|
|
101
|
+
expect(result?.severity).toBe('warning');
|
|
102
|
+
expect(result?.message).toBe('Use the structured logger instead of console output.');
|
|
103
|
+
});
|
|
104
|
+
it('extracts a single-line Message field (#1265)', () => {
|
|
105
|
+
const body = [
|
|
106
|
+
'**Pattern:** console\\.log\\(',
|
|
107
|
+
'**Engine:** regex',
|
|
108
|
+
'**Severity:** warning',
|
|
109
|
+
'**Message:** Use the structured logger instead of raw console output.',
|
|
110
|
+
].join('\n');
|
|
111
|
+
const result = extractManualPattern(body);
|
|
112
|
+
expect(result?.message).toBe('Use the structured logger instead of raw console output.');
|
|
113
|
+
});
|
|
114
|
+
it('extracts a multi-line Message field that spans paragraphs (#1265)', () => {
|
|
115
|
+
const body = [
|
|
116
|
+
'**Pattern:** componentDidCatch\\s*\\([^)]*\\)\\s*\\{\\s*\\}',
|
|
117
|
+
'**Engine:** regex',
|
|
118
|
+
'**Severity:** warning',
|
|
119
|
+
'**Message:** Hydration errors should not be caught silently.',
|
|
120
|
+
'',
|
|
121
|
+
'Log to Sentry before rendering fallback UI so you retain visibility',
|
|
122
|
+
'into the failure. Fix: add Sentry.captureException(error) before',
|
|
123
|
+
'returning the fallback component.',
|
|
124
|
+
].join('\n');
|
|
125
|
+
const result = extractManualPattern(body);
|
|
126
|
+
expect(result?.message).toContain('Hydration errors should not be caught silently.');
|
|
127
|
+
expect(result?.message).toContain('Sentry.captureException(error)');
|
|
128
|
+
expect(result?.message).toContain('returning the fallback component.');
|
|
129
|
+
});
|
|
130
|
+
it('Message field stops at the next bold field marker (#1265)', () => {
|
|
131
|
+
// Order independence: Message appears BEFORE Severity. Capture must terminate
|
|
132
|
+
// at the next **Field:** marker, not run into Severity's value.
|
|
133
|
+
const body = [
|
|
134
|
+
'**Pattern:** eval\\(',
|
|
135
|
+
'**Engine:** regex',
|
|
136
|
+
'**Message:** Never call eval on untrusted input.',
|
|
137
|
+
'It allows arbitrary code execution.',
|
|
138
|
+
'**Severity:** error',
|
|
139
|
+
'**Scope:** **/*.ts',
|
|
140
|
+
].join('\n');
|
|
141
|
+
const result = extractManualPattern(body);
|
|
142
|
+
expect(result?.message).toContain('Never call eval on untrusted input.');
|
|
143
|
+
expect(result?.message).toContain('It allows arbitrary code execution.');
|
|
144
|
+
expect(result?.message).not.toContain('error');
|
|
145
|
+
expect(result?.message).not.toContain('**/*.ts');
|
|
146
|
+
expect(result?.severity).toBe('error');
|
|
147
|
+
expect(result?.fileGlobs).toEqual(['**/*.ts']);
|
|
148
|
+
});
|
|
149
|
+
it('Message field is undefined when absent — backward compatible (#1265)', () => {
|
|
150
|
+
// Existing Pipeline 1 lessons that pre-date #1265 don't have a Message field.
|
|
151
|
+
// extractManualPattern must continue returning a valid result with message: undefined,
|
|
152
|
+
// and downstream buildManualRule will fall back to lesson.heading.
|
|
153
|
+
const body = [
|
|
154
|
+
'**Pattern:** process\\.env\\[',
|
|
155
|
+
'**Engine:** regex',
|
|
156
|
+
'**Severity:** warning',
|
|
157
|
+
].join('\n');
|
|
158
|
+
const result = extractManualPattern(body);
|
|
159
|
+
expect(result).not.toBeNull();
|
|
160
|
+
expect(result?.message).toBeUndefined();
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('extractMultilineField (#1265)', () => {
|
|
164
|
+
it('returns single-line value when followed by EOF', () => {
|
|
165
|
+
const body = '**Message:** Single line message.';
|
|
166
|
+
expect(extractMultilineField(body, 'Message')).toBe('Single line message.');
|
|
167
|
+
});
|
|
168
|
+
it('captures multiple paragraphs until EOF', () => {
|
|
169
|
+
const body = [
|
|
170
|
+
'**Message:** First paragraph of the message.',
|
|
171
|
+
'',
|
|
172
|
+
'Second paragraph here.',
|
|
173
|
+
'',
|
|
174
|
+
'Third paragraph at the end.',
|
|
175
|
+
].join('\n');
|
|
176
|
+
const result = extractMultilineField(body, 'Message');
|
|
177
|
+
expect(result).toContain('First paragraph');
|
|
178
|
+
expect(result).toContain('Second paragraph');
|
|
179
|
+
expect(result).toContain('Third paragraph');
|
|
180
|
+
});
|
|
181
|
+
it('stops at the next bold field marker', () => {
|
|
182
|
+
const body = [
|
|
183
|
+
'**Message:** This is the message.',
|
|
184
|
+
'It has two lines.',
|
|
185
|
+
'**Severity:** warning',
|
|
186
|
+
'This should NOT be captured.',
|
|
187
|
+
].join('\n');
|
|
188
|
+
const result = extractMultilineField(body, 'Message');
|
|
189
|
+
expect(result).toContain('This is the message.');
|
|
190
|
+
expect(result).toContain('It has two lines.');
|
|
191
|
+
expect(result).not.toContain('warning');
|
|
192
|
+
expect(result).not.toContain('This should NOT be captured');
|
|
193
|
+
});
|
|
194
|
+
it('treats bare-colon prose as continuation, not a new field', () => {
|
|
195
|
+
// "Note:" or "Fix:" mid-prose should NOT terminate the Message capture.
|
|
196
|
+
// Only **bold-marker:** lines act as field terminators.
|
|
197
|
+
const body = [
|
|
198
|
+
'**Message:** Use the structured logger.',
|
|
199
|
+
'Note: this is important for debugging.',
|
|
200
|
+
'Fix: replace console.log with logger.info().',
|
|
201
|
+
'**Severity:** warning',
|
|
202
|
+
].join('\n');
|
|
203
|
+
const result = extractMultilineField(body, 'Message');
|
|
204
|
+
expect(result).toContain('Note: this is important');
|
|
205
|
+
expect(result).toContain('Fix: replace console.log');
|
|
206
|
+
expect(result).not.toContain('warning');
|
|
207
|
+
});
|
|
208
|
+
it('returns undefined when the field is absent', () => {
|
|
209
|
+
const body = '**Pattern:** foo\n**Engine:** regex';
|
|
210
|
+
expect(extractMultilineField(body, 'Message')).toBeUndefined();
|
|
211
|
+
});
|
|
212
|
+
it('returns undefined for an empty field value (so caller fallback fires)', () => {
|
|
213
|
+
// **Message:** with no body — must return undefined, not "", so the caller's
|
|
214
|
+
// `manual.message ?? lesson.heading` fallback works correctly. Caught by Shield AI
|
|
215
|
+
// during the combined PR review.
|
|
216
|
+
const body = [
|
|
217
|
+
'**Pattern:** foo',
|
|
218
|
+
'**Engine:** regex',
|
|
219
|
+
'**Message:**',
|
|
220
|
+
'**Severity:** warning',
|
|
221
|
+
].join('\n');
|
|
222
|
+
expect(extractMultilineField(body, 'Message')).toBeUndefined();
|
|
223
|
+
});
|
|
224
|
+
it('handles CRLF line endings (Windows-authored lessons)', () => {
|
|
225
|
+
// body.split('\n') would leave trailing \r on each line. The startRe (.*)$ capture
|
|
226
|
+
// (no /m flag) would silently fail because $ requires end-of-string and . doesn't
|
|
227
|
+
// match \r. This is the same class of bug as the em-dash silent skip in #1263 —
|
|
228
|
+
// a Windows-authored lesson would have its Message field invisibly dropped.
|
|
229
|
+
// Caught by Shield AI during the combined PR review.
|
|
230
|
+
const body = '**Pattern:** foo\r\n**Message:** Use err not error.\r\n**Severity:** warning';
|
|
231
|
+
expect(extractMultilineField(body, 'Message')).toBe('Use err not error.');
|
|
232
|
+
});
|
|
233
|
+
it('handles CRLF in multi-line message capture', () => {
|
|
234
|
+
const body = [
|
|
235
|
+
'**Pattern:** eval\\(',
|
|
236
|
+
'**Message:** Never call eval.',
|
|
237
|
+
'It allows arbitrary code execution.',
|
|
238
|
+
'**Severity:** error',
|
|
239
|
+
].join('\r\n');
|
|
240
|
+
const result = extractMultilineField(body, 'Message');
|
|
241
|
+
expect(result).toContain('Never call eval.');
|
|
242
|
+
expect(result).toContain('It allows arbitrary code execution.');
|
|
243
|
+
expect(result).not.toContain('error');
|
|
244
|
+
});
|
|
245
|
+
it('trims leading and trailing whitespace from captured value', () => {
|
|
246
|
+
const body = [
|
|
247
|
+
'**Message:** Leading spaces preserved on first line.',
|
|
248
|
+
'',
|
|
249
|
+
' Trailing whitespace on the body. ',
|
|
250
|
+
' ',
|
|
251
|
+
].join('\n');
|
|
252
|
+
const result = extractMultilineField(body, 'Message');
|
|
253
|
+
expect(result).toBe('Leading spaces preserved on first line.\n\n Trailing whitespace on the body.');
|
|
254
|
+
});
|
|
255
|
+
it('accepts the **Field**: form (asterisks before colon) for both start and terminator', () => {
|
|
256
|
+
// Caught by gemini-code-assist on PR #1282 as a high-priority finding. Both the
|
|
257
|
+
// start regex and the field-marker terminator must accept **Field**: in addition
|
|
258
|
+
// to **Field:** so authors can use either common markdown convention without
|
|
259
|
+
// having later fields incorrectly swallowed into the Message capture.
|
|
260
|
+
const body = [
|
|
261
|
+
'**Pattern**: foo',
|
|
262
|
+
'**Message**: This message uses the alt-form heading.',
|
|
263
|
+
'It spans multiple lines.',
|
|
264
|
+
'**Severity**: warning',
|
|
265
|
+
'This should NOT be captured.',
|
|
266
|
+
].join('\n');
|
|
267
|
+
const result = extractMultilineField(body, 'Message');
|
|
268
|
+
expect(result).toContain('This message uses the alt-form heading.');
|
|
269
|
+
expect(result).toContain('It spans multiple lines.');
|
|
270
|
+
expect(result).not.toContain('warning');
|
|
271
|
+
expect(result).not.toContain('This should NOT be captured');
|
|
272
|
+
});
|
|
273
|
+
it('terminates on the bold-open-only **Field: form (#1282 CR)', () => {
|
|
274
|
+
// CR caught the missing form during PR #1282. extractField already accepted
|
|
275
|
+
// **Pattern: foo (bold-open, plain colon) since the original code, but
|
|
276
|
+
// fieldMarkerRe didn't recognize it as a terminator. Result: a lesson written
|
|
277
|
+
// with bold-open-only fields would have Message capture run past the next
|
|
278
|
+
// intended field. Now all four forms terminate consistently.
|
|
279
|
+
const body = [
|
|
280
|
+
'**Message:** Use the structured logger.',
|
|
281
|
+
'It survives across log rotations.',
|
|
282
|
+
'**Severity: warning', // bold-open-only — should terminate
|
|
283
|
+
'This should NOT be captured.',
|
|
284
|
+
].join('\n');
|
|
285
|
+
const result = extractMultilineField(body, 'Message');
|
|
286
|
+
expect(result).toContain('Use the structured logger.');
|
|
287
|
+
expect(result).toContain('It survives across log rotations.');
|
|
288
|
+
expect(result).not.toContain('warning');
|
|
289
|
+
expect(result).not.toContain('This should NOT be captured');
|
|
290
|
+
});
|
|
291
|
+
it('handles mixed **Field:** and **Field**: forms in the same body', () => {
|
|
292
|
+
const body = [
|
|
293
|
+
'**Pattern:** foo', // canonical
|
|
294
|
+
'**Message**: First line.', // alt form
|
|
295
|
+
'Second line.',
|
|
296
|
+
'**Severity:** warning', // canonical terminator
|
|
297
|
+
].join('\n');
|
|
298
|
+
const result = extractMultilineField(body, 'Message');
|
|
299
|
+
expect(result).toContain('First line.');
|
|
300
|
+
expect(result).toContain('Second line.');
|
|
301
|
+
expect(result).not.toContain('warning');
|
|
302
|
+
});
|
|
63
303
|
});
|
|
64
304
|
describe('extractAllFields', () => {
|
|
65
305
|
it('returns all matching fields in order', () => {
|
|
@@ -77,6 +317,15 @@ describe('extractAllFields', () => {
|
|
|
77
317
|
const body = '**Example Hit:**\n**Example Hit:** valid';
|
|
78
318
|
expect(extractAllFields(body, 'Example Hit')).toEqual(['', 'valid']);
|
|
79
319
|
});
|
|
320
|
+
it('extracts the **Field**: form (asterisks before colon) (#1282)', () => {
|
|
321
|
+
// Mirrors the extractField + extractMultilineField fix for cross-helper consistency.
|
|
322
|
+
const body = '**Example Hit**: hit-alt-1\n**Example Hit:** hit-canonical\n**Example Hit**: hit-alt-2';
|
|
323
|
+
expect(extractAllFields(body, 'Example Hit')).toEqual([
|
|
324
|
+
'hit-alt-1',
|
|
325
|
+
'hit-canonical',
|
|
326
|
+
'hit-alt-2',
|
|
327
|
+
]);
|
|
328
|
+
});
|
|
80
329
|
});
|
|
81
330
|
describe('stripInlineCode', () => {
|
|
82
331
|
it('strips surrounding backticks', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lesson-pattern.test.js","sourceRoot":"","sources":["../src/lesson-pattern.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG;YACX,uBAAuB;YACvB,+BAA+B;YAC/B,mBAAmB;YACnB,2CAA2C;YAC3C,uBAAuB;YACvB,EAAE;YACF,iEAAiE;SAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,kBAAkB;YAC3B,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;YAC/C,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,mDAAmD,CAAC;QACjE,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,+BAA+B,CAAC;QAC7C,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,+BAA+B,CAAC;QAC7C,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,mDAAmD,CAAC;QACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,yDAAyD,CAAC;QACvE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,6DAA6D,CAAC;QAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,wBAAwB,CAAC;QACtC,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,4DAA4D,CAAC;QAC1E,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,+EAA+E,CAAC;QAC7F,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,sCAAsC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,0CAA0C,CAAC;QACxD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,gFAAgF,CAAC;QAC9F,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,CAAC,oBAAoB,CAAC;YAC5B,MAAM,EAAE,CAAC,qBAAqB,CAAC;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,wCAAwC,CAAC;QACtD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG;YACX,UAAU;YACV,OAAO;YACP,qBAAqB;YACrB,KAAK;YACL,EAAE;YACF,WAAW;YACX,OAAO;YACP,sBAAsB;YACtB,KAAK;SACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,gEAAgE,CAAC;QAC9E,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,mDAAmD,CAAC;QACjE,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,+BAA+B,CAAC;QAC7C,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,iCAAiC,CAAC;QAC/C,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG;YACX,UAAU;YACV,OAAO;YACP,qBAAqB;YACrB,KAAK;YACL,iCAAiC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG;YACX,UAAU;YACV,OAAO;YACP,EAAE;YACF,qBAAqB;YACrB,EAAE;YACF,KAAK;YACL,WAAW;YACX,OAAO;YACP,EAAE;YACF,sBAAsB;YACtB,EAAE;YACF,KAAK;SACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG;YACX,UAAU;YACV,OAAO;YACP,cAAc;YACd,iBAAiB;YACjB,KAAK;YACL,EAAE;YACF,WAAW;YACX,OAAO;YACP,cAAc;YACd,iBAAiB;YACjB,KAAK;SACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"lesson-pattern.test.js","sourceRoot":"","sources":["../src/lesson-pattern.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type * as lancedb from '@lancedb/lancedb';
|
|
2
2
|
import type { ContentType } from '../config-schema.js';
|
|
3
3
|
import type { Embedder } from '../embedders/embedder.js';
|
|
4
|
-
import type { SearchResult } from '../types.js';
|
|
4
|
+
import type { SearchResult, SourceContext } from '../types.js';
|
|
5
5
|
/** Pure vector search (original behavior). */
|
|
6
|
-
export declare function runVectorSearch(table: lancedb.Table, embedder: Embedder, query: string, typeFilter: ContentType | undefined, maxResults: number, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
6
|
+
export declare function runVectorSearch(table: lancedb.Table, embedder: Embedder, query: string, typeFilter: ContentType | undefined, maxResults: number, sourceContext: SourceContext, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
7
7
|
/**
|
|
8
8
|
* Hybrid search: runs vector + FTS in parallel, merges with RRF.
|
|
9
9
|
* Each leg fetches `maxResults * HYBRID_OVERFETCH_FACTOR` candidates
|
|
10
10
|
* to give RRF enough diversity to produce `maxResults` fused results.
|
|
11
11
|
*/
|
|
12
|
-
export declare function runHybridSearch(table: lancedb.Table, embedder: Embedder, onWarn: (msg: string) => void, query: string, typeFilter: ContentType | undefined, maxResults: number, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
12
|
+
export declare function runHybridSearch(table: lancedb.Table, embedder: Embedder, onWarn: (msg: string) => void, query: string, typeFilter: ContentType | undefined, maxResults: number, sourceContext: SourceContext, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
13
13
|
/** FTS-only search — no embedder required. For use when embedding is unavailable (offline, no API key). */
|
|
14
|
-
export declare function runFtsSearch(table: lancedb.Table, onWarn: (msg: string) => void, query: string, typeFilter: ContentType | undefined, maxResults: number, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
14
|
+
export declare function runFtsSearch(table: lancedb.Table, onWarn: (msg: string) => void, query: string, typeFilter: ContentType | undefined, maxResults: number, sourceContext: SourceContext, boundary?: string | string[]): Promise<SearchResult[]>;
|
|
15
15
|
//# sourceMappingURL=lance-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lance-search.d.ts","sourceRoot":"","sources":["../../src/store/lance-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lance-search.d.ts","sourceRoot":"","sources":["../../src/store/lance-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkB/D,8CAA8C;AAC9C,wBAAsB,eAAe,CACnC,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAUzB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB;AAmBD,2GAA2G;AAC3G,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAWzB"}
|
|
@@ -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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"}
|