@liendev/core 0.20.0 → 0.21.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.
Files changed (102) hide show
  1. package/README.md +10 -26
  2. package/dist/config/global-config.d.ts +37 -0
  3. package/dist/config/global-config.d.ts.map +1 -0
  4. package/dist/config/global-config.js +160 -0
  5. package/dist/config/global-config.js.map +1 -0
  6. package/dist/config/merge.js +1 -1
  7. package/dist/config/merge.js.map +1 -1
  8. package/dist/config/schema.d.ts +8 -1
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/config/schema.js +2 -2
  11. package/dist/config/schema.js.map +1 -1
  12. package/dist/config/service.d.ts +2 -25
  13. package/dist/config/service.d.ts.map +1 -1
  14. package/dist/config/service.js +4 -79
  15. package/dist/config/service.js.map +1 -1
  16. package/dist/constants.d.ts +0 -1
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js +0 -3
  19. package/dist/constants.js.map +1 -1
  20. package/dist/index.d.ts +20 -8
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +25 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/indexer/ast/chunker.d.ts +2 -0
  25. package/dist/indexer/ast/chunker.d.ts.map +1 -1
  26. package/dist/indexer/ast/chunker.js +13 -7
  27. package/dist/indexer/ast/chunker.js.map +1 -1
  28. package/dist/indexer/change-detector.d.ts +2 -3
  29. package/dist/indexer/change-detector.d.ts.map +1 -1
  30. package/dist/indexer/change-detector.js +19 -34
  31. package/dist/indexer/change-detector.js.map +1 -1
  32. package/dist/indexer/chunk-batch-processor.d.ts +2 -2
  33. package/dist/indexer/chunk-batch-processor.d.ts.map +1 -1
  34. package/dist/indexer/chunk-batch-processor.js.map +1 -1
  35. package/dist/indexer/chunker.d.ts +2 -0
  36. package/dist/indexer/chunker.d.ts.map +1 -1
  37. package/dist/indexer/chunker.js +9 -5
  38. package/dist/indexer/chunker.js.map +1 -1
  39. package/dist/indexer/incremental.d.ts +4 -4
  40. package/dist/indexer/incremental.d.ts.map +1 -1
  41. package/dist/indexer/incremental.js +35 -23
  42. package/dist/indexer/incremental.js.map +1 -1
  43. package/dist/indexer/index.d.ts +3 -1
  44. package/dist/indexer/index.d.ts.map +1 -1
  45. package/dist/indexer/index.js +109 -47
  46. package/dist/indexer/index.js.map +1 -1
  47. package/dist/indexer/json-template-chunker.d.ts +4 -1
  48. package/dist/indexer/json-template-chunker.d.ts.map +1 -1
  49. package/dist/indexer/json-template-chunker.js +3 -1
  50. package/dist/indexer/json-template-chunker.js.map +1 -1
  51. package/dist/indexer/liquid-chunker.d.ts +4 -1
  52. package/dist/indexer/liquid-chunker.d.ts.map +1 -1
  53. package/dist/indexer/liquid-chunker.js +16 -14
  54. package/dist/indexer/liquid-chunker.js.map +1 -1
  55. package/dist/indexer/progress-tracker.d.ts +3 -1
  56. package/dist/indexer/progress-tracker.d.ts.map +1 -1
  57. package/dist/indexer/progress-tracker.js +8 -2
  58. package/dist/indexer/progress-tracker.js.map +1 -1
  59. package/dist/indexer/scanner.d.ts.map +1 -1
  60. package/dist/indexer/scanner.js +28 -6
  61. package/dist/indexer/scanner.js.map +1 -1
  62. package/dist/indexer/types.d.ts +12 -0
  63. package/dist/indexer/types.d.ts.map +1 -1
  64. package/dist/insights/complexity-analyzer.d.ts +6 -5
  65. package/dist/insights/complexity-analyzer.d.ts.map +1 -1
  66. package/dist/insights/complexity-analyzer.js +33 -14
  67. package/dist/insights/complexity-analyzer.js.map +1 -1
  68. package/dist/test/helpers/mock-embeddings.d.ts +12 -0
  69. package/dist/test/helpers/mock-embeddings.d.ts.map +1 -0
  70. package/dist/test/helpers/mock-embeddings.js +43 -0
  71. package/dist/test/helpers/mock-embeddings.js.map +1 -0
  72. package/dist/test/helpers/test-db.d.ts +21 -0
  73. package/dist/test/helpers/test-db.d.ts.map +1 -0
  74. package/dist/test/helpers/test-db.js +48 -0
  75. package/dist/test/helpers/test-db.js.map +1 -0
  76. package/dist/vectordb/factory.d.ts +15 -0
  77. package/dist/vectordb/factory.d.ts.map +1 -0
  78. package/dist/vectordb/factory.js +64 -0
  79. package/dist/vectordb/factory.js.map +1 -0
  80. package/dist/vectordb/qdrant-payload-mapper.d.ts +47 -0
  81. package/dist/vectordb/qdrant-payload-mapper.d.ts.map +1 -0
  82. package/dist/vectordb/qdrant-payload-mapper.js +78 -0
  83. package/dist/vectordb/qdrant-payload-mapper.js.map +1 -0
  84. package/dist/vectordb/qdrant.d.ts +87 -0
  85. package/dist/vectordb/qdrant.d.ts.map +1 -0
  86. package/dist/vectordb/qdrant.js +462 -0
  87. package/dist/vectordb/qdrant.js.map +1 -0
  88. package/dist/vectordb/types.d.ts +11 -1
  89. package/dist/vectordb/types.d.ts.map +1 -1
  90. package/package.json +2 -1
  91. package/dist/config/loader.d.ts +0 -12
  92. package/dist/config/loader.d.ts.map +0 -1
  93. package/dist/config/loader.js +0 -46
  94. package/dist/config/loader.js.map +0 -1
  95. package/dist/config/migration-manager.d.ts +0 -46
  96. package/dist/config/migration-manager.d.ts.map +0 -1
  97. package/dist/config/migration-manager.js +0 -119
  98. package/dist/config/migration-manager.js.map +0 -1
  99. package/dist/config/migration.d.ts +0 -20
  100. package/dist/config/migration.d.ts.map +0 -1
  101. package/dist/config/migration.js +0 -155
  102. package/dist/config/migration.js.map +0 -1
@@ -0,0 +1,462 @@
1
+ import { QdrantClient } from '@qdrant/js-client-rest';
2
+ import crypto from 'crypto';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { EMBEDDING_DIMENSION } from '../embeddings/types.js';
6
+ import { calculateRelevance } from './relevance.js';
7
+ import { DatabaseError } from '../errors/index.js';
8
+ import { readVersionFile } from './version.js';
9
+ import { QdrantPayloadMapper } from './qdrant-payload-mapper.js';
10
+ /**
11
+ * QdrantDB implements VectorDBInterface using Qdrant vector database.
12
+ *
13
+ * Features:
14
+ * - Multi-tenant support via payload filtering (orgId/repoId)
15
+ * - Collection naming: `lien_org_{orgId}`
16
+ * - Cross-repo search by omitting repoId filter
17
+ * - Tenant isolation via orgId filtering
18
+ */
19
+ export class QdrantDB {
20
+ client;
21
+ collectionName;
22
+ orgId;
23
+ repoId;
24
+ initialized = false;
25
+ dbPath; // For compatibility with manifest/version file operations
26
+ lastVersionCheck = 0;
27
+ currentVersion = 0;
28
+ payloadMapper;
29
+ constructor(url, apiKey, orgId, projectRoot) {
30
+ this.client = new QdrantClient({
31
+ url,
32
+ apiKey, // Optional, required for Qdrant Cloud
33
+ });
34
+ this.orgId = orgId;
35
+ this.repoId = this.extractRepoId(projectRoot);
36
+ // Collection naming: one per org
37
+ this.collectionName = `lien_org_${orgId}`;
38
+ // Initialize payload mapper
39
+ this.payloadMapper = new QdrantPayloadMapper(this.orgId, this.repoId);
40
+ // dbPath is used for manifest and version files (stored locally even with Qdrant)
41
+ // Use same path structure as LanceDB for consistency
42
+ const projectName = path.basename(projectRoot);
43
+ const pathHash = crypto
44
+ .createHash('md5')
45
+ .update(projectRoot)
46
+ .digest('hex')
47
+ .substring(0, 8);
48
+ this.dbPath = path.join(os.homedir(), '.lien', 'indices', `${projectName}-${pathHash}`);
49
+ }
50
+ /**
51
+ * Extract repository identifier from project root.
52
+ * Uses project name + path hash for stable, unique identification.
53
+ */
54
+ extractRepoId(projectRoot) {
55
+ const projectName = path.basename(projectRoot);
56
+ const pathHash = crypto
57
+ .createHash('md5')
58
+ .update(projectRoot)
59
+ .digest('hex')
60
+ .substring(0, 8);
61
+ return `${projectName}-${pathHash}`;
62
+ }
63
+ /**
64
+ * Generate a unique point ID from chunk metadata.
65
+ * Uses hash of file path + line range for stable identification.
66
+ */
67
+ generatePointId(metadata) {
68
+ const idString = `${metadata.file}:${metadata.startLine}:${metadata.endLine}`;
69
+ return crypto.createHash('md5').update(idString).digest('hex');
70
+ }
71
+ async initialize() {
72
+ try {
73
+ // Check if collection exists (returns { exists: boolean })
74
+ const collectionCheck = await this.client.collectionExists(this.collectionName);
75
+ if (!collectionCheck.exists) {
76
+ // Create collection with proper vector configuration
77
+ await this.client.createCollection(this.collectionName, {
78
+ vectors: {
79
+ size: EMBEDDING_DIMENSION,
80
+ distance: 'Cosine',
81
+ },
82
+ });
83
+ }
84
+ // Read and cache the current version
85
+ try {
86
+ this.currentVersion = await readVersionFile(this.dbPath);
87
+ }
88
+ catch {
89
+ // Version file doesn't exist yet, will be created on first index
90
+ this.currentVersion = 0;
91
+ }
92
+ this.initialized = true;
93
+ }
94
+ catch (error) {
95
+ throw new DatabaseError(`Failed to initialize Qdrant database: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
96
+ }
97
+ }
98
+ async insertBatch(vectors, metadatas, contents) {
99
+ if (!this.initialized) {
100
+ throw new DatabaseError('Qdrant database not initialized');
101
+ }
102
+ if (vectors.length !== metadatas.length || vectors.length !== contents.length) {
103
+ throw new DatabaseError('Vectors, metadatas, and contents arrays must have the same length', {
104
+ vectorsLength: vectors.length,
105
+ metadatasLength: metadatas.length,
106
+ contentsLength: contents.length,
107
+ });
108
+ }
109
+ if (vectors.length === 0) {
110
+ return; // No-op for empty batches
111
+ }
112
+ try {
113
+ // Prepare points for upsert
114
+ const points = vectors.map((vector, i) => {
115
+ const metadata = metadatas[i];
116
+ const payload = this.payloadMapper.toPayload(metadata, contents[i]);
117
+ return {
118
+ id: this.generatePointId(metadata),
119
+ vector: Array.from(vector),
120
+ payload,
121
+ };
122
+ });
123
+ // Upsert points in batches (Qdrant recommends batches of 100-1000)
124
+ const batchSize = 100;
125
+ for (let i = 0; i < points.length; i += batchSize) {
126
+ const batch = points.slice(i, Math.min(i + batchSize, points.length));
127
+ await this.client.upsert(this.collectionName, {
128
+ wait: true,
129
+ points: batch,
130
+ });
131
+ }
132
+ }
133
+ catch (error) {
134
+ throw new DatabaseError(`Failed to insert batch into Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
135
+ }
136
+ }
137
+ async search(queryVector, limit = 5, _query // Optional query string (not used in vector search, but kept for interface compatibility)
138
+ ) {
139
+ if (!this.initialized) {
140
+ throw new DatabaseError('Qdrant database not initialized');
141
+ }
142
+ try {
143
+ // Search with tenant isolation (filter by orgId and repoId)
144
+ const results = await this.client.search(this.collectionName, {
145
+ vector: Array.from(queryVector),
146
+ limit,
147
+ filter: {
148
+ must: [
149
+ { key: 'orgId', match: { value: this.orgId } },
150
+ { key: 'repoId', match: { value: this.repoId } },
151
+ ],
152
+ },
153
+ });
154
+ return results.map(result => ({
155
+ content: result.payload?.content || '',
156
+ metadata: this.payloadMapper.fromPayload(result.payload || {}),
157
+ score: result.score || 0,
158
+ relevance: calculateRelevance(result.score || 0),
159
+ }));
160
+ }
161
+ catch (error) {
162
+ throw new DatabaseError(`Failed to search Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
163
+ }
164
+ }
165
+ /**
166
+ * Search across all repos in the organization (cross-repo search).
167
+ * Omits repoId filter to enable cross-repo queries.
168
+ */
169
+ async searchCrossRepo(queryVector, limit = 5, repoIds) {
170
+ if (!this.initialized) {
171
+ throw new DatabaseError('Qdrant database not initialized');
172
+ }
173
+ try {
174
+ const filter = {
175
+ must: [
176
+ { key: 'orgId', match: { value: this.orgId } },
177
+ ],
178
+ };
179
+ // Optionally filter to specific repos
180
+ if (repoIds && repoIds.length > 0) {
181
+ filter.must.push({
182
+ key: 'repoId',
183
+ match: { any: repoIds },
184
+ });
185
+ }
186
+ const results = await this.client.search(this.collectionName, {
187
+ vector: Array.from(queryVector),
188
+ limit,
189
+ filter,
190
+ });
191
+ return results.map(result => ({
192
+ content: result.payload?.content || '',
193
+ metadata: this.payloadMapper.fromPayload(result.payload || {}),
194
+ score: result.score || 0,
195
+ relevance: calculateRelevance(result.score || 0),
196
+ }));
197
+ }
198
+ catch (error) {
199
+ throw new DatabaseError(`Failed to search Qdrant (cross-repo): ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
200
+ }
201
+ }
202
+ async scanWithFilter(options) {
203
+ if (!this.initialized) {
204
+ throw new DatabaseError('Qdrant database not initialized');
205
+ }
206
+ try {
207
+ const filter = {
208
+ must: [
209
+ { key: 'orgId', match: { value: this.orgId } },
210
+ { key: 'repoId', match: { value: this.repoId } },
211
+ ],
212
+ };
213
+ if (options.language) {
214
+ filter.must.push({ key: 'language', match: { value: options.language } });
215
+ }
216
+ if (options.pattern) {
217
+ // Qdrant supports regex in match filters
218
+ filter.must.push({ key: 'file', match: { text: options.pattern } });
219
+ }
220
+ const limit = options.limit || 100;
221
+ const results = await this.client.scroll(this.collectionName, {
222
+ filter,
223
+ limit,
224
+ with_payload: true,
225
+ with_vector: false,
226
+ });
227
+ return (results.points || []).map(point => ({
228
+ content: point.payload?.content || '',
229
+ metadata: this.payloadMapper.fromPayload(point.payload || {}),
230
+ score: 0, // No relevance score for filtered scans
231
+ relevance: 'not_relevant',
232
+ }));
233
+ }
234
+ catch (error) {
235
+ throw new DatabaseError(`Failed to scan Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
236
+ }
237
+ }
238
+ async scanAll(options = {}) {
239
+ // Use scanWithFilter with a high limit to get all chunks
240
+ return this.scanWithFilter({
241
+ ...options,
242
+ limit: 100000, // High limit for "all" chunks
243
+ });
244
+ }
245
+ /**
246
+ * Scan with filter across all repos in the organization (cross-repo).
247
+ * Omits repoId filter to enable cross-repo queries.
248
+ */
249
+ async scanCrossRepo(options) {
250
+ if (!this.initialized) {
251
+ throw new DatabaseError('Qdrant database not initialized');
252
+ }
253
+ try {
254
+ const filter = {
255
+ must: [
256
+ { key: 'orgId', match: { value: this.orgId } },
257
+ ],
258
+ };
259
+ // Optionally filter to specific repos
260
+ if (options.repoIds && options.repoIds.length > 0) {
261
+ filter.must.push({
262
+ key: 'repoId',
263
+ match: { any: options.repoIds },
264
+ });
265
+ }
266
+ if (options.language) {
267
+ filter.must.push({ key: 'language', match: { value: options.language } });
268
+ }
269
+ if (options.pattern) {
270
+ filter.must.push({ key: 'file', match: { text: options.pattern } });
271
+ }
272
+ const limit = options.limit || 10000; // Higher default for cross-repo
273
+ const results = await this.client.scroll(this.collectionName, {
274
+ filter,
275
+ limit,
276
+ with_payload: true,
277
+ with_vector: false,
278
+ });
279
+ return (results.points || []).map(point => ({
280
+ content: point.payload?.content || '',
281
+ metadata: this.payloadMapper.fromPayload(point.payload || {}),
282
+ score: 0,
283
+ relevance: 'not_relevant',
284
+ }));
285
+ }
286
+ catch (error) {
287
+ throw new DatabaseError(`Failed to scan Qdrant (cross-repo): ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
288
+ }
289
+ }
290
+ async querySymbols(options) {
291
+ if (!this.initialized) {
292
+ throw new DatabaseError('Qdrant database not initialized');
293
+ }
294
+ try {
295
+ const filter = {
296
+ must: [
297
+ { key: 'orgId', match: { value: this.orgId } },
298
+ { key: 'repoId', match: { value: this.repoId } },
299
+ ],
300
+ };
301
+ if (options.language) {
302
+ filter.must.push({ key: 'language', match: { value: options.language } });
303
+ }
304
+ if (options.symbolType) {
305
+ filter.must.push({ key: 'symbolType', match: { value: options.symbolType } });
306
+ }
307
+ if (options.pattern) {
308
+ filter.must.push({ key: 'symbolName', match: { text: options.pattern } });
309
+ }
310
+ const limit = options.limit || 100;
311
+ const results = await this.client.scroll(this.collectionName, {
312
+ filter,
313
+ limit,
314
+ with_payload: true,
315
+ with_vector: false,
316
+ });
317
+ return (results.points || []).map(point => ({
318
+ content: point.payload?.content || '',
319
+ metadata: this.payloadMapper.fromPayload(point.payload || {}),
320
+ score: 0,
321
+ relevance: 'not_relevant',
322
+ }));
323
+ }
324
+ catch (error) {
325
+ throw new DatabaseError(`Failed to query symbols in Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
326
+ }
327
+ }
328
+ async clear() {
329
+ if (!this.initialized) {
330
+ throw new DatabaseError('Qdrant database not initialized');
331
+ }
332
+ try {
333
+ // Check if collection exists before trying to clear it (returns { exists: boolean })
334
+ const collectionCheck = await this.client.collectionExists(this.collectionName);
335
+ if (!collectionCheck.exists) {
336
+ // Collection doesn't exist yet, nothing to clear
337
+ return;
338
+ }
339
+ // Delete all points for this repository only (filter by both orgId and repoId)
340
+ // This ensures we only clear the current repo's data, not all repos in the org
341
+ await this.client.delete(this.collectionName, {
342
+ filter: {
343
+ must: [
344
+ { key: 'orgId', match: { value: this.orgId } },
345
+ { key: 'repoId', match: { value: this.repoId } },
346
+ ],
347
+ },
348
+ });
349
+ }
350
+ catch (error) {
351
+ throw new DatabaseError(`Failed to clear Qdrant collection: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
352
+ }
353
+ }
354
+ async deleteByFile(filepath) {
355
+ if (!this.initialized) {
356
+ throw new DatabaseError('Qdrant database not initialized');
357
+ }
358
+ try {
359
+ await this.client.delete(this.collectionName, {
360
+ filter: {
361
+ must: [
362
+ { key: 'orgId', match: { value: this.orgId } },
363
+ { key: 'repoId', match: { value: this.repoId } },
364
+ { key: 'file', match: { value: filepath } },
365
+ ],
366
+ },
367
+ });
368
+ }
369
+ catch (error) {
370
+ throw new DatabaseError(`Failed to delete file from Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName, filepath });
371
+ }
372
+ }
373
+ async updateFile(filepath, vectors, metadatas, contents) {
374
+ if (!this.initialized) {
375
+ throw new DatabaseError('Qdrant database not initialized');
376
+ }
377
+ if (vectors.length !== metadatas.length || vectors.length !== contents.length) {
378
+ throw new DatabaseError('Vectors, metadatas, and contents arrays must have the same length');
379
+ }
380
+ try {
381
+ // Delete existing chunks for this file
382
+ await this.deleteByFile(filepath);
383
+ // Insert new chunks
384
+ if (vectors.length > 0) {
385
+ await this.insertBatch(vectors, metadatas, contents);
386
+ }
387
+ }
388
+ catch (error) {
389
+ throw new DatabaseError(`Failed to update file in Qdrant: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName, filepath });
390
+ }
391
+ }
392
+ async hasData() {
393
+ if (!this.initialized) {
394
+ return false;
395
+ }
396
+ try {
397
+ const info = await this.client.getCollection(this.collectionName);
398
+ return (info.points_count || 0) > 0;
399
+ }
400
+ catch {
401
+ return false;
402
+ }
403
+ }
404
+ /**
405
+ * Get the collection name (useful for debugging).
406
+ */
407
+ getCollectionName() {
408
+ return this.collectionName;
409
+ }
410
+ /**
411
+ * Get the organization ID.
412
+ */
413
+ getOrgId() {
414
+ return this.orgId;
415
+ }
416
+ /**
417
+ * Get the repository ID.
418
+ */
419
+ getRepoId() {
420
+ return this.repoId;
421
+ }
422
+ async checkVersion() {
423
+ const now = Date.now();
424
+ // Cache version checks for 1 second to minimize I/O
425
+ if (now - this.lastVersionCheck < 1000) {
426
+ return false;
427
+ }
428
+ this.lastVersionCheck = now;
429
+ try {
430
+ const version = await readVersionFile(this.dbPath);
431
+ if (version > this.currentVersion) {
432
+ this.currentVersion = version;
433
+ return true;
434
+ }
435
+ return false;
436
+ }
437
+ catch (error) {
438
+ // If we can't read version file, don't reconnect
439
+ return false;
440
+ }
441
+ }
442
+ async reconnect() {
443
+ try {
444
+ // For Qdrant, reconnection just means re-reading the version
445
+ // The client connection is stateless, so we just need to refresh version cache
446
+ await this.initialize();
447
+ }
448
+ catch (error) {
449
+ throw new DatabaseError(`Failed to reconnect to Qdrant database: ${error instanceof Error ? error.message : String(error)}`, { collectionName: this.collectionName });
450
+ }
451
+ }
452
+ getCurrentVersion() {
453
+ return this.currentVersion;
454
+ }
455
+ getVersionDate() {
456
+ if (this.currentVersion === 0) {
457
+ return 'Unknown';
458
+ }
459
+ return new Date(this.currentVersion).toLocaleString();
460
+ }
461
+ }
462
+ //# sourceMappingURL=qdrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../src/vectordb/qdrant.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,20 @@ export interface SearchResult {
7
7
  relevance: RelevanceCategory;
8
8
  }
9
9
  export interface VectorDBInterface {
10
+ /** Path to local storage (used for manifest and version files, even with remote backends like Qdrant) */
11
+ readonly dbPath: string;
10
12
  initialize(): Promise<void>;
11
13
  insertBatch(vectors: Float32Array[], metadatas: ChunkMetadata[], contents: string[]): Promise<void>;
12
- search(queryVector: Float32Array, limit?: number): Promise<SearchResult[]>;
14
+ search(queryVector: Float32Array, limit?: number, query?: string): Promise<SearchResult[]>;
13
15
  scanWithFilter(options: {
14
16
  language?: string;
15
17
  pattern?: string;
16
18
  limit?: number;
17
19
  }): Promise<SearchResult[]>;
20
+ scanAll(options?: {
21
+ language?: string;
22
+ pattern?: string;
23
+ }): Promise<SearchResult[]>;
18
24
  querySymbols(options: {
19
25
  language?: string;
20
26
  pattern?: string;
@@ -25,5 +31,9 @@ export interface VectorDBInterface {
25
31
  deleteByFile(filepath: string): Promise<void>;
26
32
  updateFile(filepath: string, vectors: Float32Array[], metadatas: ChunkMetadata[], contents: string[]): Promise<void>;
27
33
  hasData(): Promise<boolean>;
34
+ checkVersion(): Promise<boolean>;
35
+ reconnect(): Promise<void>;
36
+ getCurrentVersion(): number;
37
+ getVersionDate(): string;
28
38
  }
29
39
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vectordb/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpG,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3E,cAAc,CAAC,OAAO,EAAE;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,YAAY,CAAC,OAAO,EAAE;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;QAChD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vectordb/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,yGAAyG;IACzG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpG,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3F,cAAc,CAAC,OAAO,EAAE;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,OAAO,CAAC,EAAE;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,YAAY,CAAC,OAAO,EAAE;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;QAChD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,iBAAiB,IAAI,MAAM,CAAC;IAC5B,cAAc,IAAI,MAAM,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liendev/core",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Core indexing and analysis engine for Lien",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@lancedb/lancedb": "^0.17.0",
22
+ "@qdrant/js-client-rest": "^1.16.2",
22
23
  "@xenova/transformers": "2.17.0",
23
24
  "collect.js": "^4.36.1",
24
25
  "glob": "10.3.0",
@@ -1,12 +0,0 @@
1
- import { LienConfig } from './schema.js';
2
- /**
3
- * @deprecated Use ConfigService.load() instead. This function is kept for backward compatibility.
4
- * @see ConfigService
5
- */
6
- export declare function loadConfig(rootDir?: string): Promise<LienConfig>;
7
- /**
8
- * @deprecated Use ConfigService.exists() instead. This function is kept for backward compatibility.
9
- * @see ConfigService
10
- */
11
- export declare function configExists(rootDir?: string): Promise<boolean>;
12
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAIxD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAuBrF;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQpF"}
@@ -1,46 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { defaultConfig } from './schema.js';
4
- import { deepMergeConfig } from './merge.js';
5
- import { MigrationManager } from './migration-manager.js';
6
- /**
7
- * @deprecated Use ConfigService.load() instead. This function is kept for backward compatibility.
8
- * @see ConfigService
9
- */
10
- export async function loadConfig(rootDir = process.cwd()) {
11
- const configPath = path.join(rootDir, '.lien.config.json');
12
- try {
13
- const configContent = await fs.readFile(configPath, 'utf-8');
14
- const userConfig = JSON.parse(configContent);
15
- // Check if migration is needed
16
- const migrationManager = new MigrationManager(rootDir);
17
- if (await migrationManager.needsMigration()) {
18
- console.log('🔄 Migrating config from v0.2.0 to v0.3.0...');
19
- return await migrationManager.autoMigrate();
20
- }
21
- // Use the shared merge function for consistency
22
- return deepMergeConfig(defaultConfig, userConfig);
23
- }
24
- catch (error) {
25
- if (error.code === 'ENOENT') {
26
- // Config doesn't exist, return defaults
27
- return defaultConfig;
28
- }
29
- throw error;
30
- }
31
- }
32
- /**
33
- * @deprecated Use ConfigService.exists() instead. This function is kept for backward compatibility.
34
- * @see ConfigService
35
- */
36
- export async function configExists(rootDir = process.cwd()) {
37
- const configPath = path.join(rootDir, '.lien.config.json');
38
- try {
39
- await fs.access(configPath);
40
- return true;
41
- }
42
- catch {
43
- return false;
44
- }
45
- }
46
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE7C,+BAA+B;QAC/B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,MAAM,gBAAgB,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAC9C,CAAC;QAED,gDAAgD;QAChD,OAAO,eAAe,CAAC,aAAa,EAAE,UAAiC,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,wCAAwC;YACxC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,46 +0,0 @@
1
- import { LienConfig } from './schema.js';
2
- /**
3
- * Result of a migration operation
4
- */
5
- export interface MigrationResult {
6
- migrated: boolean;
7
- backupPath?: string;
8
- config: LienConfig;
9
- }
10
- /**
11
- * Centralized migration orchestration service
12
- *
13
- * Handles all config migration scenarios:
14
- * - Auto-migration during config loading
15
- * - Interactive upgrade via CLI
16
- * - Migration status checking
17
- */
18
- export declare class MigrationManager {
19
- private readonly rootDir;
20
- private readonly targetVersion;
21
- constructor(rootDir?: string, targetVersion?: string);
22
- /**
23
- * Get the config file path
24
- */
25
- private getConfigPath;
26
- /**
27
- * Check if the current config needs migration
28
- */
29
- needsMigration(): Promise<boolean>;
30
- /**
31
- * Perform silent migration (for auto-migration during load)
32
- * Returns the migrated config without user interaction
33
- */
34
- autoMigrate(): Promise<LienConfig>;
35
- /**
36
- * Perform interactive upgrade (for CLI upgrade command)
37
- * Provides detailed feedback and handles edge cases
38
- */
39
- upgradeInteractive(): Promise<void>;
40
- /**
41
- * Perform migration and return result
42
- * Used when programmatic access to migration result is needed
43
- */
44
- migrate(): Promise<MigrationResult>;
45
- }
46
- //# sourceMappingURL=migration-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration-manager.d.ts","sourceRoot":"","sources":["../../src/config/migration-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAKxD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,OAAO,GAAE,MAAsB,EAC/B,aAAa,GAAE,MAA+B;IAGjE;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAYxC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC;IAYxC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA+DzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAG1C"}