@wb200/mgrep 0.1.10

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 (46) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +288 -0
  3. package/dist/commands/login.js +28 -0
  4. package/dist/commands/login.js.map +1 -0
  5. package/dist/commands/search.js +191 -0
  6. package/dist/commands/search.js.map +1 -0
  7. package/dist/commands/watch.js +134 -0
  8. package/dist/commands/watch.js.map +1 -0
  9. package/dist/commands/watch_mcp.js +77 -0
  10. package/dist/commands/watch_mcp.js.map +1 -0
  11. package/dist/index.js +36 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/install/claude-code.js +71 -0
  14. package/dist/install/claude-code.js.map +1 -0
  15. package/dist/install/codex.js +116 -0
  16. package/dist/install/codex.js.map +1 -0
  17. package/dist/install/droid.js +191 -0
  18. package/dist/install/droid.js.map +1 -0
  19. package/dist/install/opencode.js +161 -0
  20. package/dist/install/opencode.js.map +1 -0
  21. package/dist/lib/config.js +216 -0
  22. package/dist/lib/config.js.map +1 -0
  23. package/dist/lib/context.js +35 -0
  24. package/dist/lib/context.js.map +1 -0
  25. package/dist/lib/file.js +154 -0
  26. package/dist/lib/file.js.map +1 -0
  27. package/dist/lib/git.js +167 -0
  28. package/dist/lib/git.js.map +1 -0
  29. package/dist/lib/logger.js +80 -0
  30. package/dist/lib/logger.js.map +1 -0
  31. package/dist/lib/model-studio.js +205 -0
  32. package/dist/lib/model-studio.js.map +1 -0
  33. package/dist/lib/store.js +639 -0
  34. package/dist/lib/store.js.map +1 -0
  35. package/dist/lib/sync-helpers.js +51 -0
  36. package/dist/lib/sync-helpers.js.map +1 -0
  37. package/dist/lib/utils.js +300 -0
  38. package/dist/lib/utils.js.map +1 -0
  39. package/dist/lib/warning.js +34 -0
  40. package/dist/lib/warning.js.map +1 -0
  41. package/dist/plugins/mgrep/.claude-plugin/plugin.json +9 -0
  42. package/dist/plugins/mgrep/hooks/hook.json +27 -0
  43. package/dist/plugins/mgrep/hooks/mgrep_watch.py +55 -0
  44. package/dist/plugins/mgrep/hooks/mgrep_watch_kill.py +50 -0
  45. package/dist/plugins/mgrep/skills/mgrep/SKILL.md +59 -0
  46. package/package.json +74 -0
@@ -0,0 +1,639 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import * as lancedb from "@lancedb/lancedb";
4
+ const CHUNKS_TABLE = "chunks";
5
+ const FILES_TABLE = "files";
6
+ const META_FILE = "meta.json";
7
+ const MAX_CHUNK_CHARS = 2000;
8
+ const MAX_CHUNK_LINES = 80;
9
+ const CHUNK_OVERLAP_LINES = 8;
10
+ const DEFAULT_TOP_K = 10;
11
+ const CANDIDATE_MULTIPLIER = 5;
12
+ const MIN_CANDIDATES = 20;
13
+ const MAX_RERANK_DOCUMENTS = 50;
14
+ function chunkText(externalId, content, maxChunkChars = MAX_CHUNK_CHARS, maxChunkLines = MAX_CHUNK_LINES, overlapLines = CHUNK_OVERLAP_LINES) {
15
+ const lines = content.split("\n");
16
+ const chunks = [];
17
+ let start = 0;
18
+ while (start < lines.length) {
19
+ let end = start;
20
+ let charCount = 0;
21
+ while (end < lines.length) {
22
+ const nextLineLength = lines[end].length + 1;
23
+ const nextLineCount = end - start + 1;
24
+ if (end > start &&
25
+ (charCount + nextLineLength > maxChunkChars ||
26
+ nextLineCount > maxChunkLines)) {
27
+ break;
28
+ }
29
+ charCount += nextLineLength;
30
+ end += 1;
31
+ }
32
+ if (end === start) {
33
+ end += 1;
34
+ }
35
+ const text = lines.slice(start, end).join("\n").trim();
36
+ if (text.length > 0) {
37
+ const chunkIndex = chunks.length;
38
+ chunks.push({
39
+ id: `${externalId}#${chunkIndex}`,
40
+ chunk_index: chunkIndex,
41
+ text,
42
+ start_line: start,
43
+ num_lines: end - start,
44
+ });
45
+ }
46
+ if (end >= lines.length) {
47
+ break;
48
+ }
49
+ start = Math.max(0, end - overlapLines);
50
+ }
51
+ return chunks;
52
+ }
53
+ function candidateLimit(topK) {
54
+ return Math.max(MIN_CANDIDATES, topK * CANDIDATE_MULTIPLIER);
55
+ }
56
+ function sqlString(value) {
57
+ return `'${value.replaceAll("'", "''")}'`;
58
+ }
59
+ function escapeLikeWildcards(value) {
60
+ return value.replaceAll("%", "\\%").replaceAll("_", "\\_");
61
+ }
62
+ function prefixPredicate(prefix) {
63
+ if (!prefix) {
64
+ return undefined;
65
+ }
66
+ return `path LIKE ${sqlString(`${escapeLikeWildcards(prefix)}%`)}`;
67
+ }
68
+ function scoreFromDistance(distance) {
69
+ if (distance === undefined) {
70
+ return 0;
71
+ }
72
+ return 1 / (1 + Math.max(distance, 0));
73
+ }
74
+ function normalizeScores(items) {
75
+ if (items.length === 0) {
76
+ return items;
77
+ }
78
+ const maxScore = Math.max(...items.map((item) => item.score), 0);
79
+ if (maxScore <= 0) {
80
+ return items;
81
+ }
82
+ return items.map((item) => ({
83
+ ...item,
84
+ score: item.score / maxScore,
85
+ }));
86
+ }
87
+ function extractPathPrefix(filters) {
88
+ const pathFilter = filters?.all?.find((filter) => filter.key === "path" && filter.operator === "starts_with");
89
+ return pathFilter?.value;
90
+ }
91
+ function chunkRowToResult(row, score) {
92
+ return {
93
+ type: "text",
94
+ text: row.text ?? "",
95
+ score,
96
+ metadata: {
97
+ path: row.path ?? "Unknown path",
98
+ hash: row.hash ?? "",
99
+ mtime: row.mtime,
100
+ },
101
+ chunk_index: row.chunk_index ?? 0,
102
+ generated_metadata: {
103
+ start_line: row.start_line ?? 0,
104
+ num_lines: row.num_lines ?? 0,
105
+ },
106
+ };
107
+ }
108
+ function buildSourcesContext(sources) {
109
+ return sources
110
+ .map((source, index) => {
111
+ const start = source.generated_metadata.start_line + 1;
112
+ const end = start + source.generated_metadata.num_lines - 1;
113
+ return [
114
+ `[${index}] ${source.metadata.path}:${start}-${end}`,
115
+ source.text,
116
+ ].join("\n");
117
+ })
118
+ .join("\n\n");
119
+ }
120
+ async function readText(file) {
121
+ if ("text" in file &&
122
+ typeof file.text === "function") {
123
+ return await file.text();
124
+ }
125
+ if ("getReader" in file) {
126
+ const reader = file.getReader();
127
+ const decoder = new TextDecoder();
128
+ let result = "";
129
+ while (true) {
130
+ const { done, value } = await reader.read();
131
+ if (done) {
132
+ break;
133
+ }
134
+ result += decoder.decode(value, { stream: true });
135
+ }
136
+ result += decoder.decode();
137
+ return result;
138
+ }
139
+ throw new Error("Unsupported upload type");
140
+ }
141
+ export class LanceStore {
142
+ config;
143
+ client;
144
+ connections = new Map();
145
+ ftsVerified = new Set();
146
+ constructor(config, client) {
147
+ this.config = config;
148
+ this.client = client;
149
+ }
150
+ storeSlug(storeId) {
151
+ return encodeURIComponent(storeId);
152
+ }
153
+ storePath(storeId) {
154
+ return path.join(this.config.lancedbPath, this.storeSlug(storeId));
155
+ }
156
+ metaPath(storeId) {
157
+ return path.join(this.storePath(storeId), META_FILE);
158
+ }
159
+ async ensureStoreDir(storeId) {
160
+ await fs.mkdir(this.storePath(storeId), { recursive: true });
161
+ }
162
+ async getConnection(storeId) {
163
+ const storePath = this.storePath(storeId);
164
+ const existing = this.connections.get(storePath);
165
+ if (existing) {
166
+ return await existing;
167
+ }
168
+ const created = (async () => {
169
+ await this.ensureStoreDir(storeId);
170
+ return await lancedb.connect(storePath);
171
+ })();
172
+ this.connections.set(storePath, created);
173
+ return await created;
174
+ }
175
+ async hasTable(storeId, tableName) {
176
+ const connection = await this.getConnection(storeId);
177
+ const names = await connection.tableNames();
178
+ return names.includes(tableName);
179
+ }
180
+ async openTableIfExists(storeId, tableName) {
181
+ const exists = await this.hasTable(storeId, tableName);
182
+ if (!exists) {
183
+ return null;
184
+ }
185
+ const connection = await this.getConnection(storeId);
186
+ return await connection.openTable(tableName);
187
+ }
188
+ currentMeta(storeId, description = "") {
189
+ const now = new Date().toISOString();
190
+ return {
191
+ name: storeId,
192
+ description,
193
+ created_at: now,
194
+ updated_at: now,
195
+ embedModel: this.config.embedModel,
196
+ embedDimensions: this.config.embedDimensions,
197
+ rerankModel: this.config.rerankModel,
198
+ llmModel: this.config.llmModel,
199
+ maxChunkChars: MAX_CHUNK_CHARS,
200
+ maxChunkLines: MAX_CHUNK_LINES,
201
+ overlapLines: CHUNK_OVERLAP_LINES,
202
+ };
203
+ }
204
+ async loadMeta(storeId) {
205
+ try {
206
+ const raw = await fs.readFile(this.metaPath(storeId), "utf-8");
207
+ return JSON.parse(raw);
208
+ }
209
+ catch {
210
+ return null;
211
+ }
212
+ }
213
+ async saveMeta(meta) {
214
+ await this.ensureStoreDir(meta.name);
215
+ await fs.writeFile(this.metaPath(meta.name), `${JSON.stringify(meta, null, 2)}\n`, "utf-8");
216
+ }
217
+ assertMetaCompatibility(meta) {
218
+ if (meta.embedModel !== this.config.embedModel ||
219
+ meta.embedDimensions !== this.config.embedDimensions ||
220
+ meta.maxChunkChars !== MAX_CHUNK_CHARS ||
221
+ meta.maxChunkLines !== MAX_CHUNK_LINES ||
222
+ meta.overlapLines !== CHUNK_OVERLAP_LINES) {
223
+ throw new Error(`Store "${meta.name}" was built with incompatible embedding or chunking settings. Rebuild the local store after changing embed model, dimensions, or chunking configuration.`);
224
+ }
225
+ }
226
+ async ensureMeta(storeId, description = "") {
227
+ const existing = await this.loadMeta(storeId);
228
+ if (existing) {
229
+ this.assertMetaCompatibility(existing);
230
+ if (description && existing.description !== description) {
231
+ const updated = {
232
+ ...existing,
233
+ description,
234
+ updated_at: new Date().toISOString(),
235
+ };
236
+ await this.saveMeta(updated);
237
+ return updated;
238
+ }
239
+ return existing;
240
+ }
241
+ const created = this.currentMeta(storeId, description);
242
+ await this.saveMeta(created);
243
+ return created;
244
+ }
245
+ async ensureFilesTable(storeId, row) {
246
+ const existing = await this.openTableIfExists(storeId, FILES_TABLE);
247
+ if (existing) {
248
+ return existing;
249
+ }
250
+ const connection = await this.getConnection(storeId);
251
+ return await connection.createTable(FILES_TABLE, [
252
+ row,
253
+ ]);
254
+ }
255
+ async ensureChunksTable(storeId, rows) {
256
+ const existing = await this.openTableIfExists(storeId, CHUNKS_TABLE);
257
+ if (existing) {
258
+ return existing;
259
+ }
260
+ this.ftsVerified.delete(storeId);
261
+ const connection = await this.getConnection(storeId);
262
+ return await connection.createTable(CHUNKS_TABLE, rows);
263
+ }
264
+ async ensureChunkIndices(table, storeId) {
265
+ if (this.ftsVerified.has(storeId)) {
266
+ return;
267
+ }
268
+ const indices = await table.listIndices();
269
+ const hasFts = indices.some((index) => index.indexType === "FTS" &&
270
+ index.columns.length === 1 &&
271
+ index.columns[0] === "text");
272
+ if (!hasFts) {
273
+ await table.createIndex("text", {
274
+ config: lancedb.Index.fts(),
275
+ replace: true,
276
+ waitTimeoutSeconds: 60,
277
+ });
278
+ }
279
+ this.ftsVerified.add(storeId);
280
+ }
281
+ async *listFiles(storeId, options) {
282
+ const meta = await this.loadMeta(storeId);
283
+ if (!meta) {
284
+ return;
285
+ }
286
+ this.assertMetaCompatibility(meta);
287
+ const table = await this.openTableIfExists(storeId, FILES_TABLE);
288
+ if (!table) {
289
+ return;
290
+ }
291
+ let query = table.query();
292
+ if (options?.pathPrefix) {
293
+ query = query.where(prefixPredicate(options.pathPrefix));
294
+ }
295
+ const rows = (await query.toArray());
296
+ for (const row of rows) {
297
+ yield {
298
+ external_id: row.external_id,
299
+ metadata: {
300
+ path: row.path,
301
+ hash: row.hash,
302
+ mtime: row.mtime,
303
+ },
304
+ };
305
+ }
306
+ }
307
+ async uploadFile(storeId, file, options) {
308
+ const metadata = options.metadata;
309
+ if (!metadata) {
310
+ throw new Error("Upload metadata is required");
311
+ }
312
+ await this.ensureMeta(storeId);
313
+ const content = await readText(file);
314
+ const chunks = chunkText(options.external_id, content);
315
+ const vectors = await this.client.embed(chunks.map((chunk) => chunk.text));
316
+ const fileRow = {
317
+ external_id: options.external_id,
318
+ path: metadata.path,
319
+ hash: metadata.hash,
320
+ mtime: metadata.mtime ?? Date.now(),
321
+ };
322
+ const chunkRows = chunks.map((chunk, index) => ({
323
+ id: chunk.id,
324
+ path: metadata.path,
325
+ hash: metadata.hash,
326
+ mtime: metadata.mtime ?? Date.now(),
327
+ chunk_index: chunk.chunk_index,
328
+ text: chunk.text,
329
+ vector: vectors[index],
330
+ start_line: chunk.start_line,
331
+ num_lines: chunk.num_lines,
332
+ }));
333
+ const filesTable = await this.ensureFilesTable(storeId, fileRow);
334
+ await filesTable.delete(`external_id = ${sqlString(options.external_id)}`);
335
+ await filesTable.add([fileRow]);
336
+ if (chunkRows.length === 0) {
337
+ const chunksTable = await this.openTableIfExists(storeId, CHUNKS_TABLE);
338
+ if (chunksTable) {
339
+ await chunksTable.delete(`path = ${sqlString(metadata.path)}`);
340
+ }
341
+ return;
342
+ }
343
+ const chunksTable = await this.ensureChunksTable(storeId, chunkRows);
344
+ await chunksTable.delete(`path = ${sqlString(metadata.path)}`);
345
+ await chunksTable.add(chunkRows);
346
+ await this.ensureChunkIndices(chunksTable, storeId);
347
+ }
348
+ async deleteFile(storeId, externalId) {
349
+ const filesTable = await this.openTableIfExists(storeId, FILES_TABLE);
350
+ if (filesTable) {
351
+ await filesTable.delete(`external_id = ${sqlString(externalId)}`);
352
+ }
353
+ const chunksTable = await this.openTableIfExists(storeId, CHUNKS_TABLE);
354
+ if (chunksTable) {
355
+ await chunksTable.delete(`path = ${sqlString(externalId)}`);
356
+ }
357
+ }
358
+ async searchStore(storeId, query, topK, searchOptions, filters) {
359
+ const meta = await this.loadMeta(storeId);
360
+ if (!meta) {
361
+ return [];
362
+ }
363
+ this.assertMetaCompatibility(meta);
364
+ const table = await this.openTableIfExists(storeId, CHUNKS_TABLE);
365
+ if (!table) {
366
+ return [];
367
+ }
368
+ const limit = candidateLimit(topK);
369
+ const predicate = prefixPredicate(extractPathPrefix(filters));
370
+ const [queryVector] = await this.client.embed([query]);
371
+ let vectorQuery = table.vectorSearch(queryVector).limit(limit);
372
+ let ftsQuery = table.search(query, "fts", "text").limit(limit);
373
+ if (predicate) {
374
+ vectorQuery = vectorQuery.where(predicate);
375
+ ftsQuery = ftsQuery.where(predicate);
376
+ }
377
+ const [vectorRows, ftsRows] = await Promise.all([
378
+ vectorQuery.toArray(),
379
+ ftsQuery.toArray(),
380
+ ]);
381
+ const fused = new Map();
382
+ const addRanked = (rows, key) => {
383
+ for (const [index, row] of rows.entries()) {
384
+ const rowId = row.id;
385
+ if (!rowId) {
386
+ continue;
387
+ }
388
+ const current = fused.get(rowId) ?? { row, score: 0 };
389
+ const rankScore = 1 / (60 + index + 1);
390
+ const localScore = key === "_distance"
391
+ ? scoreFromDistance(row._distance)
392
+ : Math.max(row._score ?? 0, 0);
393
+ current.row = row;
394
+ current.score += rankScore + localScore;
395
+ fused.set(rowId, current);
396
+ }
397
+ };
398
+ addRanked(vectorRows, "_distance");
399
+ addRanked(ftsRows, "_score");
400
+ let ranked = Array.from(fused.values())
401
+ .sort((a, b) => b.score - a.score)
402
+ .slice(0, MAX_RERANK_DOCUMENTS);
403
+ if (searchOptions?.rerank !== false && ranked.length > 0) {
404
+ const reranked = await this.client.rerank(query, ranked.map((item) => `${item.row.path}\n${item.row.text}`));
405
+ const next = reranked
406
+ .map((item) => {
407
+ const match = ranked[item.index];
408
+ if (!match) {
409
+ return null;
410
+ }
411
+ return {
412
+ row: match.row,
413
+ score: item.relevance_score,
414
+ };
415
+ })
416
+ .filter((item) => item !== null);
417
+ ranked = next.length > 0 ? next : ranked;
418
+ }
419
+ return normalizeScores(ranked.slice(0, topK)).map((item) => chunkRowToResult(item.row, item.score));
420
+ }
421
+ async runAgenticSearch(storeIds, query, topK, searchOptions, filters) {
422
+ const plannedQueries = await this.client.planQueries(query);
423
+ const combined = new Map();
424
+ for (const plannedQuery of plannedQueries) {
425
+ const results = await this.search(storeIds, plannedQuery, topK, {
426
+ ...searchOptions,
427
+ agentic: false,
428
+ }, filters);
429
+ for (const result of results.data) {
430
+ const key = `${result.metadata.path}:${result.chunk_index}`;
431
+ const existing = combined.get(key);
432
+ if (!existing || result.score > existing.score) {
433
+ combined.set(key, result);
434
+ }
435
+ }
436
+ }
437
+ return Array.from(combined.values())
438
+ .sort((a, b) => b.score - a.score)
439
+ .slice(0, topK);
440
+ }
441
+ async search(storeIds, query, top_k = DEFAULT_TOP_K, search_options, filters) {
442
+ if (search_options?.agentic) {
443
+ return {
444
+ data: await this.runAgenticSearch(storeIds, query, top_k, search_options, filters),
445
+ };
446
+ }
447
+ const allResults = await Promise.all(storeIds.map((storeId) => this.searchStore(storeId, query, top_k, search_options, filters)));
448
+ return {
449
+ data: allResults
450
+ .flat()
451
+ .sort((a, b) => b.score - a.score)
452
+ .slice(0, top_k),
453
+ };
454
+ }
455
+ async retrieve(storeId) {
456
+ const meta = await this.loadMeta(storeId);
457
+ if (!meta) {
458
+ throw new Error(`Store "${storeId}" does not exist`);
459
+ }
460
+ this.assertMetaCompatibility(meta);
461
+ return meta;
462
+ }
463
+ async create(options) {
464
+ const meta = await this.ensureMeta(options.name, options.description ?? "");
465
+ return meta;
466
+ }
467
+ async ask(storeIds, question, top_k = DEFAULT_TOP_K, search_options, filters) {
468
+ const sources = search_options?.agentic
469
+ ? await this.runAgenticSearch(storeIds, question, top_k, search_options, filters)
470
+ : (await this.search(storeIds, question, top_k, search_options, filters))
471
+ .data;
472
+ const answer = await this.client.answer(question, buildSourcesContext(sources));
473
+ return {
474
+ answer,
475
+ sources,
476
+ };
477
+ }
478
+ async getInfo(storeId) {
479
+ const meta = await this.ensureMeta(storeId);
480
+ return {
481
+ name: meta.name,
482
+ description: meta.description,
483
+ created_at: meta.created_at,
484
+ updated_at: meta.updated_at,
485
+ counts: {
486
+ pending: 0,
487
+ in_progress: 0,
488
+ },
489
+ };
490
+ }
491
+ }
492
+ export class TestStore {
493
+ path;
494
+ mutex = Promise.resolve();
495
+ constructor() {
496
+ const path = process.env.MGREP_TEST_STORE_PATH;
497
+ if (!path) {
498
+ throw new Error("MGREP_TEST_STORE_PATH is not set");
499
+ }
500
+ this.path = path;
501
+ }
502
+ async synchronized(fn) {
503
+ let unlock = () => { };
504
+ const newLock = new Promise((resolve) => {
505
+ unlock = resolve;
506
+ });
507
+ const previousLock = this.mutex;
508
+ this.mutex = newLock;
509
+ await previousLock;
510
+ try {
511
+ return await fn();
512
+ }
513
+ finally {
514
+ unlock();
515
+ }
516
+ }
517
+ async load() {
518
+ try {
519
+ const content = await fs.readFile(this.path, "utf-8");
520
+ return JSON.parse(content);
521
+ }
522
+ catch {
523
+ return {
524
+ info: {
525
+ name: "Test Store",
526
+ description: "A test store",
527
+ created_at: new Date().toISOString(),
528
+ updated_at: new Date().toISOString(),
529
+ counts: { pending: 0, in_progress: 0 },
530
+ },
531
+ files: {},
532
+ };
533
+ }
534
+ }
535
+ async save(data) {
536
+ await fs.writeFile(this.path, JSON.stringify(data, null, 2));
537
+ }
538
+ async readContent(file) {
539
+ return await readText(file);
540
+ }
541
+ async *listFiles(_storeId, options) {
542
+ const db = await this.load();
543
+ for (const [external_id, file] of Object.entries(db.files)) {
544
+ if (options?.pathPrefix &&
545
+ file.metadata?.path &&
546
+ !file.metadata.path.startsWith(options.pathPrefix)) {
547
+ continue;
548
+ }
549
+ yield {
550
+ external_id,
551
+ metadata: file.metadata,
552
+ };
553
+ }
554
+ }
555
+ async uploadFile(_storeId, file, options) {
556
+ const content = await this.readContent(file);
557
+ await this.synchronized(async () => {
558
+ const db = await this.load();
559
+ db.files[options.external_id] = {
560
+ metadata: options.metadata || { path: options.external_id, hash: "" },
561
+ content,
562
+ };
563
+ await this.save(db);
564
+ });
565
+ }
566
+ async deleteFile(_storeId, externalId) {
567
+ await this.synchronized(async () => {
568
+ const db = await this.load();
569
+ delete db.files[externalId];
570
+ await this.save(db);
571
+ });
572
+ }
573
+ async search(_storeIds, query, top_k = DEFAULT_TOP_K, search_options, filters) {
574
+ const db = await this.load();
575
+ const results = [];
576
+ for (const file of Object.values(db.files)) {
577
+ if (filters?.all) {
578
+ const pathFilter = filters.all.find((f) => f.key === "path" && f.operator === "starts_with");
579
+ if (pathFilter &&
580
+ file.metadata &&
581
+ !file.metadata.path.startsWith(pathFilter.value)) {
582
+ continue;
583
+ }
584
+ }
585
+ const lines = file.content.split("\n");
586
+ for (let i = 0; i < lines.length; i++) {
587
+ if (lines[i].toLowerCase().includes(query.toLowerCase())) {
588
+ const rerankSuffix = search_options?.rerank
589
+ ? ""
590
+ : " without reranking";
591
+ const agenticSuffix = search_options?.agentic ? " with agentic" : "";
592
+ results.push({
593
+ type: "text",
594
+ text: lines[i] + rerankSuffix + agenticSuffix,
595
+ score: 1.0,
596
+ metadata: file.metadata,
597
+ chunk_index: results.length,
598
+ generated_metadata: {
599
+ start_line: i,
600
+ num_lines: 1,
601
+ },
602
+ });
603
+ if (results.length >= top_k) {
604
+ break;
605
+ }
606
+ }
607
+ }
608
+ if (results.length >= top_k) {
609
+ break;
610
+ }
611
+ }
612
+ return { data: results };
613
+ }
614
+ async retrieve(_storeId) {
615
+ const db = await this.load();
616
+ return db.info;
617
+ }
618
+ async create(options) {
619
+ return await this.synchronized(async () => {
620
+ const db = await this.load();
621
+ db.info.name = options.name;
622
+ db.info.description = options.description || "";
623
+ await this.save(db);
624
+ return db.info;
625
+ });
626
+ }
627
+ async ask(storeIds, question, top_k, search_options, filters) {
628
+ const searchRes = await this.search(storeIds, question, top_k, search_options, filters);
629
+ return {
630
+ answer: 'This is a mock answer from TestStore.<cite i="0" />',
631
+ sources: searchRes.data,
632
+ };
633
+ }
634
+ async getInfo(_storeId) {
635
+ const db = await this.load();
636
+ return db.info;
637
+ }
638
+ }
639
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"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"}