@liendev/core 0.20.1 → 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/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,64 @@
|
|
|
1
|
+
import { VectorDB } from './lancedb.js';
|
|
2
|
+
import { QdrantDB } from './qdrant.js';
|
|
3
|
+
import { loadGlobalConfig, extractOrgIdFromGit } from '../config/global-config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Factory function to create a VectorDB instance based on global configuration.
|
|
6
|
+
*
|
|
7
|
+
* Selects the backend (LanceDB or Qdrant) based on global config.
|
|
8
|
+
* Defaults to LanceDB if no config is provided.
|
|
9
|
+
*
|
|
10
|
+
* For Qdrant backend, automatically detects orgId from git remote URL.
|
|
11
|
+
*
|
|
12
|
+
* @param projectRoot - Root directory of the project
|
|
13
|
+
* @returns VectorDBInterface instance (LanceDB or QdrantDB)
|
|
14
|
+
* @throws Error if Qdrant config is invalid or orgId cannot be detected
|
|
15
|
+
*/
|
|
16
|
+
export async function createVectorDB(projectRoot) {
|
|
17
|
+
try {
|
|
18
|
+
const globalConfig = await loadGlobalConfig();
|
|
19
|
+
// Default to LanceDB if no backend specified or backend is lancedb
|
|
20
|
+
if (!globalConfig.backend || globalConfig.backend === 'lancedb') {
|
|
21
|
+
const db = new VectorDB(projectRoot);
|
|
22
|
+
// Verify it has the required methods
|
|
23
|
+
if (typeof db.initialize !== 'function') {
|
|
24
|
+
throw new Error('VectorDB instance missing initialize method');
|
|
25
|
+
}
|
|
26
|
+
return db;
|
|
27
|
+
}
|
|
28
|
+
// Create QdrantDB instance
|
|
29
|
+
if (globalConfig.backend === 'qdrant') {
|
|
30
|
+
if (!globalConfig.qdrant) {
|
|
31
|
+
throw new Error('Qdrant backend requires qdrant configuration in global config');
|
|
32
|
+
}
|
|
33
|
+
const { url, apiKey } = globalConfig.qdrant;
|
|
34
|
+
if (!url) {
|
|
35
|
+
throw new Error('Qdrant backend requires qdrant.url in global config');
|
|
36
|
+
}
|
|
37
|
+
// Auto-detect orgId from git remote
|
|
38
|
+
const orgId = await extractOrgIdFromGit(projectRoot);
|
|
39
|
+
if (!orgId) {
|
|
40
|
+
throw new Error('Qdrant backend requires a git repository with a remote URL. ' +
|
|
41
|
+
'Could not extract organization ID from git remote. ' +
|
|
42
|
+
'Make sure your project is a git repo with a remote configured (e.g., origin).');
|
|
43
|
+
}
|
|
44
|
+
const db = new QdrantDB(url, apiKey, orgId, projectRoot);
|
|
45
|
+
// Verify it has the required methods
|
|
46
|
+
if (typeof db.initialize !== 'function') {
|
|
47
|
+
throw new Error('QdrantDB instance missing initialize method');
|
|
48
|
+
}
|
|
49
|
+
return db;
|
|
50
|
+
}
|
|
51
|
+
// Unknown backend - fallback to LanceDB
|
|
52
|
+
throw new Error(`Unknown storage backend: ${globalConfig.backend}. Supported backends: 'lancedb', 'qdrant'`);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// If anything goes wrong, fall back to LanceDB
|
|
56
|
+
console.warn(`[Lien] Error creating vector DB, falling back to LanceDB: ${error}`);
|
|
57
|
+
const db = new VectorDB(projectRoot);
|
|
58
|
+
if (typeof db.initialize !== 'function') {
|
|
59
|
+
throw new Error(`Failed to create VectorDB: ${error instanceof Error ? error.message : String(error)}`);
|
|
60
|
+
}
|
|
61
|
+
return db;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEnF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAE9C,mEAAmE;QACnE,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrC,qCAAqC;YACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,2BAA2B;QAC3B,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;YAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,oCAAoC;YACpC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAErD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC9D,qDAAqD;oBACrD,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YACzD,qCAAqC;YACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,wCAAwC;QACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,CAAC,OAAO,2CAA2C,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,OAAO,CAAC,IAAI,CAAC,6DAA6D,KAAK,EAAE,CAAC,CAAC;QACnF,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChunkMetadata } from '../indexer/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Qdrant payload structure for storing chunk metadata.
|
|
4
|
+
*/
|
|
5
|
+
export interface QdrantPayload {
|
|
6
|
+
content: string;
|
|
7
|
+
file: string;
|
|
8
|
+
startLine: number;
|
|
9
|
+
endLine: number;
|
|
10
|
+
type: string;
|
|
11
|
+
language: string;
|
|
12
|
+
functionNames: string[];
|
|
13
|
+
classNames: string[];
|
|
14
|
+
interfaceNames: string[];
|
|
15
|
+
symbolName: string;
|
|
16
|
+
symbolType: string;
|
|
17
|
+
parentClass: string;
|
|
18
|
+
complexity: number;
|
|
19
|
+
cognitiveComplexity: number;
|
|
20
|
+
parameters: string[];
|
|
21
|
+
signature: string;
|
|
22
|
+
imports: string[];
|
|
23
|
+
halsteadVolume: number;
|
|
24
|
+
halsteadDifficulty: number;
|
|
25
|
+
halsteadEffort: number;
|
|
26
|
+
halsteadBugs: number;
|
|
27
|
+
orgId: string;
|
|
28
|
+
repoId: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Maps between ChunkMetadata and Qdrant payload format.
|
|
32
|
+
* Encapsulates the transformation logic for multi-tenant Qdrant storage.
|
|
33
|
+
*/
|
|
34
|
+
export declare class QdrantPayloadMapper {
|
|
35
|
+
private orgId;
|
|
36
|
+
private repoId;
|
|
37
|
+
constructor(orgId: string, repoId: string);
|
|
38
|
+
/**
|
|
39
|
+
* Transform chunk metadata to Qdrant payload format.
|
|
40
|
+
*/
|
|
41
|
+
toPayload(metadata: ChunkMetadata, content?: string): QdrantPayload;
|
|
42
|
+
/**
|
|
43
|
+
* Transform Qdrant payload back to ChunkMetadata.
|
|
44
|
+
*/
|
|
45
|
+
fromPayload(payload: Record<string, any>): ChunkMetadata;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=qdrant-payload-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant-payload-mapper.d.ts","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;gBADN,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAGxB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,MAAW,GAAG,aAAa;IAgCvE;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa;CA4BzD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps between ChunkMetadata and Qdrant payload format.
|
|
3
|
+
* Encapsulates the transformation logic for multi-tenant Qdrant storage.
|
|
4
|
+
*/
|
|
5
|
+
export class QdrantPayloadMapper {
|
|
6
|
+
orgId;
|
|
7
|
+
repoId;
|
|
8
|
+
constructor(orgId, repoId) {
|
|
9
|
+
this.orgId = orgId;
|
|
10
|
+
this.repoId = repoId;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Transform chunk metadata to Qdrant payload format.
|
|
14
|
+
*/
|
|
15
|
+
toPayload(metadata, content = '') {
|
|
16
|
+
return {
|
|
17
|
+
content,
|
|
18
|
+
file: metadata.file,
|
|
19
|
+
startLine: metadata.startLine,
|
|
20
|
+
endLine: metadata.endLine,
|
|
21
|
+
type: metadata.type,
|
|
22
|
+
language: metadata.language,
|
|
23
|
+
// Symbols
|
|
24
|
+
functionNames: metadata.symbols?.functions || [],
|
|
25
|
+
classNames: metadata.symbols?.classes || [],
|
|
26
|
+
interfaceNames: metadata.symbols?.interfaces || [],
|
|
27
|
+
// AST-derived metadata
|
|
28
|
+
symbolName: metadata.symbolName || '',
|
|
29
|
+
symbolType: metadata.symbolType || '',
|
|
30
|
+
parentClass: metadata.parentClass || '',
|
|
31
|
+
complexity: metadata.complexity || 0,
|
|
32
|
+
cognitiveComplexity: metadata.cognitiveComplexity || 0,
|
|
33
|
+
parameters: metadata.parameters || [],
|
|
34
|
+
signature: metadata.signature || '',
|
|
35
|
+
imports: metadata.imports || [],
|
|
36
|
+
// Halstead metrics
|
|
37
|
+
halsteadVolume: metadata.halsteadVolume || 0,
|
|
38
|
+
halsteadDifficulty: metadata.halsteadDifficulty || 0,
|
|
39
|
+
halsteadEffort: metadata.halsteadEffort || 0,
|
|
40
|
+
halsteadBugs: metadata.halsteadBugs || 0,
|
|
41
|
+
// Multi-tenant fields
|
|
42
|
+
orgId: this.orgId,
|
|
43
|
+
repoId: this.repoId,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Transform Qdrant payload back to ChunkMetadata.
|
|
48
|
+
*/
|
|
49
|
+
fromPayload(payload) {
|
|
50
|
+
return {
|
|
51
|
+
file: payload.file,
|
|
52
|
+
startLine: payload.startLine,
|
|
53
|
+
endLine: payload.endLine,
|
|
54
|
+
type: payload.type,
|
|
55
|
+
language: payload.language,
|
|
56
|
+
symbols: {
|
|
57
|
+
functions: payload.functionNames || [],
|
|
58
|
+
classes: payload.classNames || [],
|
|
59
|
+
interfaces: payload.interfaceNames || [],
|
|
60
|
+
},
|
|
61
|
+
symbolName: payload.symbolName || undefined,
|
|
62
|
+
symbolType: payload.symbolType || undefined,
|
|
63
|
+
parentClass: payload.parentClass || undefined,
|
|
64
|
+
complexity: payload.complexity || undefined,
|
|
65
|
+
cognitiveComplexity: payload.cognitiveComplexity || undefined,
|
|
66
|
+
parameters: payload.parameters || undefined,
|
|
67
|
+
signature: payload.signature || undefined,
|
|
68
|
+
imports: payload.imports || undefined,
|
|
69
|
+
halsteadVolume: payload.halsteadVolume || undefined,
|
|
70
|
+
halsteadDifficulty: payload.halsteadDifficulty || undefined,
|
|
71
|
+
halsteadEffort: payload.halsteadEffort || undefined,
|
|
72
|
+
halsteadBugs: payload.halsteadBugs || undefined,
|
|
73
|
+
repoId: payload.repoId || undefined,
|
|
74
|
+
orgId: payload.orgId || undefined,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=qdrant-payload-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant-payload-mapper.js","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"AAmCA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAEpB;IACA;IAFV,YACU,KAAa,EACb,MAAc;QADd,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;IACrB,CAAC;IAEJ;;OAEG;IACH,SAAS,CAAC,QAAuB,EAAE,UAAkB,EAAE;QACrD,OAAO;YACL,OAAO;YACP,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,UAAU;YACV,aAAa,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE;YAChD,UAAU,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;YAC3C,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;YAClD,uBAAuB;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;YACrC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;YACrC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;YACvC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;YACpC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,IAAI,CAAC;YACtD,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;YACrC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;YACnC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;YAC/B,mBAAmB;YACnB,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,CAAC;YAC5C,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,IAAI,CAAC;YACpD,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,CAAC;YAC5C,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,CAAC;YACxC,sBAAsB;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAA4B;QACtC,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE;gBACP,SAAS,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;gBACtC,OAAO,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;gBACjC,UAAU,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;aACzC;YACD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC3C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;YAC7C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC3C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,SAAS;YAC7D,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;YACzC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;YACrC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS;YACnD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,SAAS;YAC3D,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS;YACnD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,SAAS;YAC/C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;SAClC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { SearchResult, VectorDBInterface } from './types.js';
|
|
2
|
+
import { ChunkMetadata } from '../indexer/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* QdrantDB implements VectorDBInterface using Qdrant vector database.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Multi-tenant support via payload filtering (orgId/repoId)
|
|
8
|
+
* - Collection naming: `lien_org_{orgId}`
|
|
9
|
+
* - Cross-repo search by omitting repoId filter
|
|
10
|
+
* - Tenant isolation via orgId filtering
|
|
11
|
+
*/
|
|
12
|
+
export declare class QdrantDB implements VectorDBInterface {
|
|
13
|
+
private client;
|
|
14
|
+
private collectionName;
|
|
15
|
+
private orgId;
|
|
16
|
+
private repoId;
|
|
17
|
+
private initialized;
|
|
18
|
+
readonly dbPath: string;
|
|
19
|
+
private lastVersionCheck;
|
|
20
|
+
private currentVersion;
|
|
21
|
+
private payloadMapper;
|
|
22
|
+
constructor(url: string, apiKey: string | undefined, orgId: string, projectRoot: string);
|
|
23
|
+
/**
|
|
24
|
+
* Extract repository identifier from project root.
|
|
25
|
+
* Uses project name + path hash for stable, unique identification.
|
|
26
|
+
*/
|
|
27
|
+
private extractRepoId;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a unique point ID from chunk metadata.
|
|
30
|
+
* Uses hash of file path + line range for stable identification.
|
|
31
|
+
*/
|
|
32
|
+
private generatePointId;
|
|
33
|
+
initialize(): Promise<void>;
|
|
34
|
+
insertBatch(vectors: Float32Array[], metadatas: ChunkMetadata[], contents: string[]): Promise<void>;
|
|
35
|
+
search(queryVector: Float32Array, limit?: number, _query?: string): Promise<SearchResult[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Search across all repos in the organization (cross-repo search).
|
|
38
|
+
* Omits repoId filter to enable cross-repo queries.
|
|
39
|
+
*/
|
|
40
|
+
searchCrossRepo(queryVector: Float32Array, limit?: number, repoIds?: string[]): Promise<SearchResult[]>;
|
|
41
|
+
scanWithFilter(options: {
|
|
42
|
+
language?: string;
|
|
43
|
+
pattern?: string;
|
|
44
|
+
limit?: number;
|
|
45
|
+
}): Promise<SearchResult[]>;
|
|
46
|
+
scanAll(options?: {
|
|
47
|
+
language?: string;
|
|
48
|
+
pattern?: string;
|
|
49
|
+
}): Promise<SearchResult[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Scan with filter across all repos in the organization (cross-repo).
|
|
52
|
+
* Omits repoId filter to enable cross-repo queries.
|
|
53
|
+
*/
|
|
54
|
+
scanCrossRepo(options: {
|
|
55
|
+
language?: string;
|
|
56
|
+
pattern?: string;
|
|
57
|
+
limit?: number;
|
|
58
|
+
repoIds?: string[];
|
|
59
|
+
}): Promise<SearchResult[]>;
|
|
60
|
+
querySymbols(options: {
|
|
61
|
+
language?: string;
|
|
62
|
+
pattern?: string;
|
|
63
|
+
symbolType?: 'function' | 'class' | 'interface';
|
|
64
|
+
limit?: number;
|
|
65
|
+
}): Promise<SearchResult[]>;
|
|
66
|
+
clear(): Promise<void>;
|
|
67
|
+
deleteByFile(filepath: string): Promise<void>;
|
|
68
|
+
updateFile(filepath: string, vectors: Float32Array[], metadatas: ChunkMetadata[], contents: string[]): Promise<void>;
|
|
69
|
+
hasData(): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Get the collection name (useful for debugging).
|
|
72
|
+
*/
|
|
73
|
+
getCollectionName(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Get the organization ID.
|
|
76
|
+
*/
|
|
77
|
+
getOrgId(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Get the repository ID.
|
|
80
|
+
*/
|
|
81
|
+
getRepoId(): string;
|
|
82
|
+
checkVersion(): Promise<boolean>;
|
|
83
|
+
reconnect(): Promise<void>;
|
|
84
|
+
getCurrentVersion(): number;
|
|
85
|
+
getVersionDate(): string;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=qdrant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/vectordb/qdrant.ts"],"names":[],"mappings":"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"}
|