@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.
- package/README.md +10 -26
- package/dist/config/global-config.d.ts +37 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +160 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config/merge.js +1 -1
- package/dist/config/merge.js.map +1 -1
- package/dist/config/schema.d.ts +8 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +2 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/config/service.d.ts +2 -25
- package/dist/config/service.d.ts.map +1 -1
- package/dist/config/service.js +4 -79
- package/dist/config/service.js.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +20 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/indexer/ast/chunker.d.ts +2 -0
- package/dist/indexer/ast/chunker.d.ts.map +1 -1
- package/dist/indexer/ast/chunker.js +13 -7
- package/dist/indexer/ast/chunker.js.map +1 -1
- package/dist/indexer/change-detector.d.ts +2 -3
- package/dist/indexer/change-detector.d.ts.map +1 -1
- package/dist/indexer/change-detector.js +19 -34
- package/dist/indexer/change-detector.js.map +1 -1
- package/dist/indexer/chunk-batch-processor.d.ts +2 -2
- package/dist/indexer/chunk-batch-processor.d.ts.map +1 -1
- package/dist/indexer/chunk-batch-processor.js.map +1 -1
- package/dist/indexer/chunker.d.ts +2 -0
- package/dist/indexer/chunker.d.ts.map +1 -1
- package/dist/indexer/chunker.js +9 -5
- package/dist/indexer/chunker.js.map +1 -1
- package/dist/indexer/incremental.d.ts +4 -4
- package/dist/indexer/incremental.d.ts.map +1 -1
- package/dist/indexer/incremental.js +35 -23
- package/dist/indexer/incremental.js.map +1 -1
- package/dist/indexer/index.d.ts +3 -1
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +109 -47
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/json-template-chunker.d.ts +4 -1
- package/dist/indexer/json-template-chunker.d.ts.map +1 -1
- package/dist/indexer/json-template-chunker.js +3 -1
- package/dist/indexer/json-template-chunker.js.map +1 -1
- package/dist/indexer/liquid-chunker.d.ts +4 -1
- package/dist/indexer/liquid-chunker.d.ts.map +1 -1
- package/dist/indexer/liquid-chunker.js +16 -14
- package/dist/indexer/liquid-chunker.js.map +1 -1
- package/dist/indexer/progress-tracker.d.ts +3 -1
- package/dist/indexer/progress-tracker.d.ts.map +1 -1
- package/dist/indexer/progress-tracker.js +8 -2
- package/dist/indexer/progress-tracker.js.map +1 -1
- package/dist/indexer/scanner.d.ts.map +1 -1
- package/dist/indexer/scanner.js +28 -6
- package/dist/indexer/scanner.js.map +1 -1
- package/dist/indexer/types.d.ts +12 -0
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/insights/complexity-analyzer.d.ts +6 -5
- package/dist/insights/complexity-analyzer.d.ts.map +1 -1
- package/dist/insights/complexity-analyzer.js +33 -14
- package/dist/insights/complexity-analyzer.js.map +1 -1
- package/dist/test/helpers/mock-embeddings.d.ts +12 -0
- package/dist/test/helpers/mock-embeddings.d.ts.map +1 -0
- package/dist/test/helpers/mock-embeddings.js +43 -0
- package/dist/test/helpers/mock-embeddings.js.map +1 -0
- package/dist/test/helpers/test-db.d.ts +21 -0
- package/dist/test/helpers/test-db.d.ts.map +1 -0
- package/dist/test/helpers/test-db.js +48 -0
- package/dist/test/helpers/test-db.js.map +1 -0
- package/dist/vectordb/factory.d.ts +15 -0
- package/dist/vectordb/factory.d.ts.map +1 -0
- package/dist/vectordb/factory.js +64 -0
- package/dist/vectordb/factory.js.map +1 -0
- package/dist/vectordb/qdrant-payload-mapper.d.ts +47 -0
- package/dist/vectordb/qdrant-payload-mapper.d.ts.map +1 -0
- package/dist/vectordb/qdrant-payload-mapper.js +78 -0
- package/dist/vectordb/qdrant-payload-mapper.js.map +1 -0
- package/dist/vectordb/qdrant.d.ts +87 -0
- package/dist/vectordb/qdrant.d.ts.map +1 -0
- package/dist/vectordb/qdrant.js +462 -0
- package/dist/vectordb/qdrant.js.map +1 -0
- package/dist/vectordb/types.d.ts +11 -1
- package/dist/vectordb/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/config/loader.d.ts +0 -12
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -46
- package/dist/config/loader.js.map +0 -1
- package/dist/config/migration-manager.d.ts +0 -46
- package/dist/config/migration-manager.d.ts.map +0 -1
- package/dist/config/migration-manager.js +0 -119
- package/dist/config/migration-manager.js.map +0 -1
- package/dist/config/migration.d.ts +0 -20
- package/dist/config/migration.d.ts.map +0 -1
- package/dist/config/migration.js +0 -155
- 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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"}
|
package/dist/vectordb/types.d.ts
CHANGED
|
@@ -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;
|
|
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.
|
|
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",
|
package/dist/config/loader.d.ts
DELETED
|
@@ -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"}
|
package/dist/config/loader.js
DELETED
|
@@ -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"}
|