@liendev/core 0.19.5
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 +336 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +46 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +20 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +71 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/migration-manager.d.ts +46 -0
- package/dist/config/migration-manager.d.ts.map +1 -0
- package/dist/config/migration-manager.js +119 -0
- package/dist/config/migration-manager.js.map +1 -0
- package/dist/config/migration.d.ts +20 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +155 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/schema.d.ts +101 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +58 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +122 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +477 -0
- package/dist/config/service.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/embeddings/cache.d.ts +45 -0
- package/dist/embeddings/cache.d.ts.map +1 -0
- package/dist/embeddings/cache.js +109 -0
- package/dist/embeddings/cache.js.map +1 -0
- package/dist/embeddings/local.d.ts +10 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +63 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/embeddings/types.d.ts +9 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +5 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/errors/codes.d.ts +18 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +25 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +85 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +134 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/frameworks/detector-service.d.ts +59 -0
- package/dist/frameworks/detector-service.d.ts.map +1 -0
- package/dist/frameworks/detector-service.js +219 -0
- package/dist/frameworks/detector-service.js.map +1 -0
- package/dist/frameworks/laravel/config.d.ts +6 -0
- package/dist/frameworks/laravel/config.d.ts.map +1 -0
- package/dist/frameworks/laravel/config.js +68 -0
- package/dist/frameworks/laravel/config.js.map +1 -0
- package/dist/frameworks/laravel/detector.d.ts +6 -0
- package/dist/frameworks/laravel/detector.d.ts.map +1 -0
- package/dist/frameworks/laravel/detector.js +96 -0
- package/dist/frameworks/laravel/detector.js.map +1 -0
- package/dist/frameworks/nodejs/config.d.ts +6 -0
- package/dist/frameworks/nodejs/config.d.ts.map +1 -0
- package/dist/frameworks/nodejs/config.js +57 -0
- package/dist/frameworks/nodejs/config.js.map +1 -0
- package/dist/frameworks/nodejs/detector.d.ts +6 -0
- package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
- package/dist/frameworks/nodejs/detector.js +77 -0
- package/dist/frameworks/nodejs/detector.js.map +1 -0
- package/dist/frameworks/php/config.d.ts +6 -0
- package/dist/frameworks/php/config.d.ts.map +1 -0
- package/dist/frameworks/php/config.js +53 -0
- package/dist/frameworks/php/config.js.map +1 -0
- package/dist/frameworks/php/detector.d.ts +7 -0
- package/dist/frameworks/php/detector.d.ts.map +1 -0
- package/dist/frameworks/php/detector.js +101 -0
- package/dist/frameworks/php/detector.js.map +1 -0
- package/dist/frameworks/registry.d.ts +20 -0
- package/dist/frameworks/registry.d.ts.map +1 -0
- package/dist/frameworks/registry.js +38 -0
- package/dist/frameworks/registry.js.map +1 -0
- package/dist/frameworks/shopify/config.d.ts +6 -0
- package/dist/frameworks/shopify/config.d.ts.map +1 -0
- package/dist/frameworks/shopify/config.js +50 -0
- package/dist/frameworks/shopify/config.js.map +1 -0
- package/dist/frameworks/shopify/detector.d.ts +6 -0
- package/dist/frameworks/shopify/detector.d.ts.map +1 -0
- package/dist/frameworks/shopify/detector.js +103 -0
- package/dist/frameworks/shopify/detector.js.map +1 -0
- package/dist/frameworks/types.d.ts +51 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +21 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/git/tracker.d.ts +56 -0
- package/dist/git/tracker.d.ts.map +1 -0
- package/dist/git/tracker.js +189 -0
- package/dist/git/tracker.js.map +1 -0
- package/dist/git/utils.d.ts +60 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +152 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/ast/chunker.d.ts +28 -0
- package/dist/indexer/ast/chunker.d.ts.map +1 -0
- package/dist/indexer/ast/chunker.js +268 -0
- package/dist/indexer/ast/chunker.js.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.js +106 -0
- package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
- package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
- package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
- package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/halstead.js +290 -0
- package/dist/indexer/ast/complexity/halstead.js.map +1 -0
- package/dist/indexer/ast/complexity/index.d.ts +13 -0
- package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/index.js +12 -0
- package/dist/indexer/ast/complexity/index.js.map +1 -0
- package/dist/indexer/ast/parser.d.ts +27 -0
- package/dist/indexer/ast/parser.d.ts.map +1 -0
- package/dist/indexer/ast/parser.js +103 -0
- package/dist/indexer/ast/parser.js.map +1 -0
- package/dist/indexer/ast/symbols.d.ts +17 -0
- package/dist/indexer/ast/symbols.d.ts.map +1 -0
- package/dist/indexer/ast/symbols.js +265 -0
- package/dist/indexer/ast/symbols.js.map +1 -0
- package/dist/indexer/ast/traversers/index.d.ts +19 -0
- package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/index.js +42 -0
- package/dist/indexer/ast/traversers/index.js.map +1 -0
- package/dist/indexer/ast/traversers/php.d.ts +21 -0
- package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/php.js +67 -0
- package/dist/indexer/ast/traversers/php.js.map +1 -0
- package/dist/indexer/ast/traversers/python.d.ts +28 -0
- package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/python.js +67 -0
- package/dist/indexer/ast/traversers/python.js.map +1 -0
- package/dist/indexer/ast/traversers/types.d.ts +98 -0
- package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/types.js +2 -0
- package/dist/indexer/ast/traversers/types.js.map +1 -0
- package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
- package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/typescript.js +88 -0
- package/dist/indexer/ast/traversers/typescript.js.map +1 -0
- package/dist/indexer/ast/types.d.ts +59 -0
- package/dist/indexer/ast/types.d.ts.map +1 -0
- package/dist/indexer/ast/types.js +2 -0
- package/dist/indexer/ast/types.js.map +1 -0
- package/dist/indexer/change-detector.d.ts +17 -0
- package/dist/indexer/change-detector.d.ts.map +1 -0
- package/dist/indexer/change-detector.js +207 -0
- package/dist/indexer/change-detector.js.map +1 -0
- package/dist/indexer/chunk-batch-processor.d.ts +103 -0
- package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
- package/dist/indexer/chunk-batch-processor.js +179 -0
- package/dist/indexer/chunk-batch-processor.js.map +1 -0
- package/dist/indexer/chunker.d.ts +10 -0
- package/dist/indexer/chunker.d.ts.map +1 -0
- package/dist/indexer/chunker.js +96 -0
- package/dist/indexer/chunker.js.map +1 -0
- package/dist/indexer/dependency-analyzer.d.ts +60 -0
- package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
- package/dist/indexer/dependency-analyzer.js +261 -0
- package/dist/indexer/dependency-analyzer.js.map +1 -0
- package/dist/indexer/incremental.d.ts +47 -0
- package/dist/indexer/incremental.d.ts.map +1 -0
- package/dist/indexer/incremental.js +284 -0
- package/dist/indexer/incremental.js.map +1 -0
- package/dist/indexer/index.d.ts +80 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +364 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/json-template-chunker.d.ts +9 -0
- package/dist/indexer/json-template-chunker.d.ts.map +1 -0
- package/dist/indexer/json-template-chunker.js +83 -0
- package/dist/indexer/json-template-chunker.js.map +1 -0
- package/dist/indexer/liquid-chunker.d.ts +13 -0
- package/dist/indexer/liquid-chunker.d.ts.map +1 -0
- package/dist/indexer/liquid-chunker.js +272 -0
- package/dist/indexer/liquid-chunker.js.map +1 -0
- package/dist/indexer/manifest.d.ts +122 -0
- package/dist/indexer/manifest.d.ts.map +1 -0
- package/dist/indexer/manifest.js +262 -0
- package/dist/indexer/manifest.js.map +1 -0
- package/dist/indexer/progress-tracker.d.ts +35 -0
- package/dist/indexer/progress-tracker.d.ts.map +1 -0
- package/dist/indexer/progress-tracker.js +33 -0
- package/dist/indexer/progress-tracker.js.map +1 -0
- package/dist/indexer/scanner.d.ts +16 -0
- package/dist/indexer/scanner.d.ts.map +1 -0
- package/dist/indexer/scanner.js +159 -0
- package/dist/indexer/scanner.js.map +1 -0
- package/dist/indexer/symbol-extractor.d.ts +18 -0
- package/dist/indexer/symbol-extractor.d.ts.map +1 -0
- package/dist/indexer/symbol-extractor.js +351 -0
- package/dist/indexer/symbol-extractor.js.map +1 -0
- package/dist/indexer/types.d.ts +34 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/insights/complexity-analyzer.d.ts +82 -0
- package/dist/insights/complexity-analyzer.d.ts.map +1 -0
- package/dist/insights/complexity-analyzer.js +356 -0
- package/dist/insights/complexity-analyzer.js.map +1 -0
- package/dist/insights/formatters/index.d.ts +11 -0
- package/dist/insights/formatters/index.d.ts.map +1 -0
- package/dist/insights/formatters/index.js +20 -0
- package/dist/insights/formatters/index.js.map +1 -0
- package/dist/insights/formatters/json.d.ts +7 -0
- package/dist/insights/formatters/json.d.ts.map +1 -0
- package/dist/insights/formatters/json.js +14 -0
- package/dist/insights/formatters/json.js.map +1 -0
- package/dist/insights/formatters/sarif.d.ts +6 -0
- package/dist/insights/formatters/sarif.d.ts.map +1 -0
- package/dist/insights/formatters/sarif.js +113 -0
- package/dist/insights/formatters/sarif.js.map +1 -0
- package/dist/insights/formatters/text.d.ts +6 -0
- package/dist/insights/formatters/text.d.ts.map +1 -0
- package/dist/insights/formatters/text.js +154 -0
- package/dist/insights/formatters/text.js.map +1 -0
- package/dist/insights/types.d.ts +73 -0
- package/dist/insights/types.d.ts.map +1 -0
- package/dist/insights/types.js +9 -0
- package/dist/insights/types.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/path-matching.d.ts +69 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +123 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/result.d.ts +65 -0
- package/dist/utils/result.d.ts.map +1 -0
- package/dist/utils/result.js +67 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/version.d.ts +22 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +28 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/vectordb/batch-insert.d.ts +14 -0
- package/dist/vectordb/batch-insert.d.ts.map +1 -0
- package/dist/vectordb/batch-insert.js +185 -0
- package/dist/vectordb/batch-insert.js.map +1 -0
- package/dist/vectordb/boosting/composer.d.ts +51 -0
- package/dist/vectordb/boosting/composer.d.ts.map +1 -0
- package/dist/vectordb/boosting/composer.js +65 -0
- package/dist/vectordb/boosting/composer.js.map +1 -0
- package/dist/vectordb/boosting/index.d.ts +22 -0
- package/dist/vectordb/boosting/index.d.ts.map +1 -0
- package/dist/vectordb/boosting/index.js +22 -0
- package/dist/vectordb/boosting/index.js.map +1 -0
- package/dist/vectordb/boosting/strategies.d.ts +40 -0
- package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
- package/dist/vectordb/boosting/strategies.js +174 -0
- package/dist/vectordb/boosting/strategies.js.map +1 -0
- package/dist/vectordb/boosting/types.d.ts +20 -0
- package/dist/vectordb/boosting/types.d.ts.map +1 -0
- package/dist/vectordb/boosting/types.js +2 -0
- package/dist/vectordb/boosting/types.js.map +1 -0
- package/dist/vectordb/intent-classifier.d.ts +99 -0
- package/dist/vectordb/intent-classifier.d.ts.map +1 -0
- package/dist/vectordb/intent-classifier.js +193 -0
- package/dist/vectordb/intent-classifier.js.map +1 -0
- package/dist/vectordb/lancedb.d.ts +45 -0
- package/dist/vectordb/lancedb.d.ts.map +1 -0
- package/dist/vectordb/lancedb.js +203 -0
- package/dist/vectordb/lancedb.js.map +1 -0
- package/dist/vectordb/maintenance.d.ts +18 -0
- package/dist/vectordb/maintenance.d.ts.map +1 -0
- package/dist/vectordb/maintenance.js +87 -0
- package/dist/vectordb/maintenance.js.map +1 -0
- package/dist/vectordb/query.d.ts +34 -0
- package/dist/vectordb/query.d.ts.map +1 -0
- package/dist/vectordb/query.js +303 -0
- package/dist/vectordb/query.js.map +1 -0
- package/dist/vectordb/relevance.d.ts +15 -0
- package/dist/vectordb/relevance.d.ts.map +1 -0
- package/dist/vectordb/relevance.js +19 -0
- package/dist/vectordb/relevance.js.map +1 -0
- package/dist/vectordb/types.d.ts +29 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +2 -0
- package/dist/vectordb/types.js.map +1 -0
- package/dist/vectordb/version.d.ts +16 -0
- package/dist/vectordb/version.d.ts.map +1 -0
- package/dist/vectordb/version.js +40 -0
- package/dist/vectordb/version.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { EmbeddingService } from '../embeddings/types.js';
|
|
2
|
+
import { VectorDB } from '../vectordb/lancedb.js';
|
|
3
|
+
import { LienConfig, LegacyLienConfig } from '../config/schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* Normalize a file path to a consistent relative format.
|
|
6
|
+
* This ensures paths from different sources (git diff, scanner, etc.)
|
|
7
|
+
* are stored and queried consistently in the index.
|
|
8
|
+
*
|
|
9
|
+
* @param filepath - Absolute or relative file path
|
|
10
|
+
* @param rootDir - Workspace root directory (defaults to cwd)
|
|
11
|
+
* @returns Relative path from rootDir
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeToRelativePath(filepath: string, rootDir?: string): string;
|
|
14
|
+
export interface IncrementalIndexOptions {
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Indexes a single file incrementally by updating its chunks in the vector database.
|
|
19
|
+
* This is the core function for incremental reindexing - it handles file changes,
|
|
20
|
+
* deletions, and additions.
|
|
21
|
+
*
|
|
22
|
+
* @param filepath - Absolute path to the file to index
|
|
23
|
+
* @param vectorDB - Initialized VectorDB instance
|
|
24
|
+
* @param embeddings - Initialized embeddings service
|
|
25
|
+
* @param config - Lien configuration
|
|
26
|
+
* @param options - Optional settings
|
|
27
|
+
*/
|
|
28
|
+
export declare function indexSingleFile(filepath: string, vectorDB: VectorDB, embeddings: EmbeddingService, config: LienConfig | LegacyLienConfig, options?: IncrementalIndexOptions): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Indexes multiple files incrementally.
|
|
31
|
+
* Processes files sequentially for simplicity and reliability.
|
|
32
|
+
*
|
|
33
|
+
* Uses Result type for explicit error handling, making it easier to test
|
|
34
|
+
* and reason about failure modes.
|
|
35
|
+
*
|
|
36
|
+
* Note: This function counts both successfully indexed files AND successfully
|
|
37
|
+
* handled deletions (files that don't exist but were removed from the index).
|
|
38
|
+
*
|
|
39
|
+
* @param filepaths - Array of absolute file paths to index
|
|
40
|
+
* @param vectorDB - Initialized VectorDB instance
|
|
41
|
+
* @param embeddings - Initialized embeddings service
|
|
42
|
+
* @param config - Lien configuration
|
|
43
|
+
* @param options - Optional settings
|
|
44
|
+
* @returns Number of successfully processed files (indexed or deleted)
|
|
45
|
+
*/
|
|
46
|
+
export declare function indexMultipleFiles(filepaths: string[], vectorDB: VectorDB, embeddings: EmbeddingService, config: LienConfig | LegacyLienConfig, options?: IncrementalIndexOptions): Promise<number>;
|
|
47
|
+
//# sourceMappingURL=incremental.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../src/indexer/incremental.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAkC,MAAM,qBAAqB,CAAC;AAMnG;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBlF;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA+FD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,UAAU,GAAG,gBAAgB,EACrC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkEf;AAkCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,UAAU,GAAG,gBAAgB,EACrC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,CAAC,CAmGjB"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { chunkFile } from './chunker.js';
|
|
4
|
+
import { isModernConfig, isLegacyConfig } from '../config/schema.js';
|
|
5
|
+
import { ManifestManager } from './manifest.js';
|
|
6
|
+
import { EMBEDDING_MICRO_BATCH_SIZE } from '../constants.js';
|
|
7
|
+
import { Ok, Err, isOk } from '../utils/result.js';
|
|
8
|
+
/**
|
|
9
|
+
* Normalize a file path to a consistent relative format.
|
|
10
|
+
* This ensures paths from different sources (git diff, scanner, etc.)
|
|
11
|
+
* are stored and queried consistently in the index.
|
|
12
|
+
*
|
|
13
|
+
* @param filepath - Absolute or relative file path
|
|
14
|
+
* @param rootDir - Workspace root directory (defaults to cwd)
|
|
15
|
+
* @returns Relative path from rootDir
|
|
16
|
+
*/
|
|
17
|
+
export function normalizeToRelativePath(filepath, rootDir) {
|
|
18
|
+
// Normalize root and strip trailing slash to ensure consistent comparison
|
|
19
|
+
const root = (rootDir || process.cwd()).replace(/\\/g, '/').replace(/\/$/, '');
|
|
20
|
+
const normalized = filepath.replace(/\\/g, '/');
|
|
21
|
+
// If already relative, return as-is
|
|
22
|
+
if (!path.isAbsolute(filepath)) {
|
|
23
|
+
return normalized;
|
|
24
|
+
}
|
|
25
|
+
// Convert absolute to relative
|
|
26
|
+
if (normalized.startsWith(root + '/')) {
|
|
27
|
+
return normalized.slice(root.length + 1);
|
|
28
|
+
}
|
|
29
|
+
if (normalized.startsWith(root)) {
|
|
30
|
+
return normalized.slice(root.length);
|
|
31
|
+
}
|
|
32
|
+
// Fallback: use path.relative
|
|
33
|
+
return path.relative(root, filepath).replace(/\\/g, '/');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Shared helper that processes file content into chunks and embeddings.
|
|
37
|
+
* This is the core logic shared between indexSingleFile and indexMultipleFiles.
|
|
38
|
+
*
|
|
39
|
+
* Returns null for empty files (0 chunks), which callers should handle appropriately.
|
|
40
|
+
*
|
|
41
|
+
* @param filepath - Path to the file being processed
|
|
42
|
+
* @param content - File content
|
|
43
|
+
* @param embeddings - Embeddings service
|
|
44
|
+
* @param config - Lien configuration
|
|
45
|
+
* @param verbose - Whether to log verbose output
|
|
46
|
+
* @returns ProcessFileResult for non-empty files, null for empty files
|
|
47
|
+
*/
|
|
48
|
+
async function processFileContent(filepath, content, embeddings, config, verbose) {
|
|
49
|
+
// Get chunk settings (support both v0.3.0 and legacy v0.2.0 configs)
|
|
50
|
+
const chunkSize = isModernConfig(config)
|
|
51
|
+
? config.core.chunkSize
|
|
52
|
+
: (isLegacyConfig(config) ? config.indexing.chunkSize : 75);
|
|
53
|
+
const chunkOverlap = isModernConfig(config)
|
|
54
|
+
? config.core.chunkOverlap
|
|
55
|
+
: (isLegacyConfig(config) ? config.indexing.chunkOverlap : 10);
|
|
56
|
+
const useAST = isModernConfig(config)
|
|
57
|
+
? config.chunking.useAST
|
|
58
|
+
: true;
|
|
59
|
+
const astFallback = isModernConfig(config)
|
|
60
|
+
? config.chunking.astFallback
|
|
61
|
+
: 'line-based';
|
|
62
|
+
// Chunk the file
|
|
63
|
+
const chunks = chunkFile(filepath, content, {
|
|
64
|
+
chunkSize,
|
|
65
|
+
chunkOverlap,
|
|
66
|
+
useAST,
|
|
67
|
+
astFallback,
|
|
68
|
+
});
|
|
69
|
+
if (chunks.length === 0) {
|
|
70
|
+
// Empty file - return null so caller can handle appropriately
|
|
71
|
+
if (verbose) {
|
|
72
|
+
console.error(`[Lien] Empty file: ${filepath}`);
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// Generate embeddings for all chunks
|
|
77
|
+
// Use micro-batching to prevent event loop blocking
|
|
78
|
+
const texts = chunks.map(c => c.content);
|
|
79
|
+
const vectors = [];
|
|
80
|
+
for (let j = 0; j < texts.length; j += EMBEDDING_MICRO_BATCH_SIZE) {
|
|
81
|
+
const microBatch = texts.slice(j, Math.min(j + EMBEDDING_MICRO_BATCH_SIZE, texts.length));
|
|
82
|
+
const microResults = await embeddings.embedBatch(microBatch);
|
|
83
|
+
vectors.push(...microResults);
|
|
84
|
+
// Yield to event loop for responsiveness
|
|
85
|
+
if (texts.length > EMBEDDING_MICRO_BATCH_SIZE) {
|
|
86
|
+
await new Promise(resolve => setImmediate(resolve));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
chunkCount: chunks.length,
|
|
91
|
+
vectors,
|
|
92
|
+
chunks,
|
|
93
|
+
texts,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Indexes a single file incrementally by updating its chunks in the vector database.
|
|
98
|
+
* This is the core function for incremental reindexing - it handles file changes,
|
|
99
|
+
* deletions, and additions.
|
|
100
|
+
*
|
|
101
|
+
* @param filepath - Absolute path to the file to index
|
|
102
|
+
* @param vectorDB - Initialized VectorDB instance
|
|
103
|
+
* @param embeddings - Initialized embeddings service
|
|
104
|
+
* @param config - Lien configuration
|
|
105
|
+
* @param options - Optional settings
|
|
106
|
+
*/
|
|
107
|
+
export async function indexSingleFile(filepath, vectorDB, embeddings, config, options = {}) {
|
|
108
|
+
const { verbose } = options;
|
|
109
|
+
// Normalize to relative path for consistent storage and queries
|
|
110
|
+
// This ensures paths from git diff (absolute) match paths from scanner (relative)
|
|
111
|
+
const normalizedPath = normalizeToRelativePath(filepath);
|
|
112
|
+
try {
|
|
113
|
+
// Check if file exists (use original filepath for filesystem operations)
|
|
114
|
+
try {
|
|
115
|
+
await fs.access(filepath);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// File doesn't exist - delete from index and manifest using normalized path
|
|
119
|
+
if (verbose) {
|
|
120
|
+
console.error(`[Lien] File deleted: ${normalizedPath}`);
|
|
121
|
+
}
|
|
122
|
+
await vectorDB.deleteByFile(normalizedPath);
|
|
123
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
124
|
+
await manifest.removeFile(normalizedPath);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Read file content
|
|
128
|
+
const content = await fs.readFile(filepath, 'utf-8');
|
|
129
|
+
// Process file content (chunking + embeddings) - use normalized path for storage
|
|
130
|
+
const result = await processFileContent(normalizedPath, content, embeddings, config, verbose || false);
|
|
131
|
+
// Get actual file mtime for manifest
|
|
132
|
+
const stats = await fs.stat(filepath);
|
|
133
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
134
|
+
if (result === null) {
|
|
135
|
+
// Empty file - remove from vector DB but keep in manifest with chunkCount: 0
|
|
136
|
+
await vectorDB.deleteByFile(normalizedPath);
|
|
137
|
+
await manifest.updateFile(normalizedPath, {
|
|
138
|
+
filepath: normalizedPath,
|
|
139
|
+
lastModified: stats.mtimeMs,
|
|
140
|
+
chunkCount: 0,
|
|
141
|
+
});
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Non-empty file - update in database (atomic: delete old + insert new)
|
|
145
|
+
await vectorDB.updateFile(normalizedPath, result.vectors, result.chunks.map(c => c.metadata), result.texts);
|
|
146
|
+
// Update manifest after successful indexing
|
|
147
|
+
await manifest.updateFile(normalizedPath, {
|
|
148
|
+
filepath: normalizedPath,
|
|
149
|
+
lastModified: stats.mtimeMs,
|
|
150
|
+
chunkCount: result.chunkCount,
|
|
151
|
+
});
|
|
152
|
+
if (verbose) {
|
|
153
|
+
console.error(`[Lien] ✓ Updated ${normalizedPath} (${result.chunkCount} chunks)`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
// Log error but don't throw - we want to continue with other files
|
|
158
|
+
console.error(`[Lien] ⚠️ Failed to index ${normalizedPath}: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Process a single file, returning a Result type.
|
|
163
|
+
* This helper makes error handling explicit and testable.
|
|
164
|
+
*
|
|
165
|
+
* @param filepath - Original filepath (may be absolute)
|
|
166
|
+
* @param normalizedPath - Normalized relative path for storage
|
|
167
|
+
*/
|
|
168
|
+
async function processSingleFileForIndexing(filepath, normalizedPath, embeddings, config, verbose) {
|
|
169
|
+
try {
|
|
170
|
+
// Read file stats and content using original path (for filesystem access)
|
|
171
|
+
const stats = await fs.stat(filepath);
|
|
172
|
+
const content = await fs.readFile(filepath, 'utf-8');
|
|
173
|
+
// Process content using normalized path (for storage)
|
|
174
|
+
const result = await processFileContent(normalizedPath, content, embeddings, config, verbose);
|
|
175
|
+
return Ok({
|
|
176
|
+
filepath: normalizedPath, // Store normalized path
|
|
177
|
+
result,
|
|
178
|
+
mtime: stats.mtimeMs,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
return Err(`Failed to process ${normalizedPath}: ${error}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Indexes multiple files incrementally.
|
|
187
|
+
* Processes files sequentially for simplicity and reliability.
|
|
188
|
+
*
|
|
189
|
+
* Uses Result type for explicit error handling, making it easier to test
|
|
190
|
+
* and reason about failure modes.
|
|
191
|
+
*
|
|
192
|
+
* Note: This function counts both successfully indexed files AND successfully
|
|
193
|
+
* handled deletions (files that don't exist but were removed from the index).
|
|
194
|
+
*
|
|
195
|
+
* @param filepaths - Array of absolute file paths to index
|
|
196
|
+
* @param vectorDB - Initialized VectorDB instance
|
|
197
|
+
* @param embeddings - Initialized embeddings service
|
|
198
|
+
* @param config - Lien configuration
|
|
199
|
+
* @param options - Optional settings
|
|
200
|
+
* @returns Number of successfully processed files (indexed or deleted)
|
|
201
|
+
*/
|
|
202
|
+
export async function indexMultipleFiles(filepaths, vectorDB, embeddings, config, options = {}) {
|
|
203
|
+
const { verbose } = options;
|
|
204
|
+
let processedCount = 0;
|
|
205
|
+
// Batch manifest updates for performance
|
|
206
|
+
const manifestEntries = [];
|
|
207
|
+
// Process each file sequentially (simple and reliable)
|
|
208
|
+
for (const filepath of filepaths) {
|
|
209
|
+
// Normalize to relative path for consistent storage and queries
|
|
210
|
+
// This ensures paths from git diff (absolute) match paths from scanner (relative)
|
|
211
|
+
const normalizedPath = normalizeToRelativePath(filepath);
|
|
212
|
+
const result = await processSingleFileForIndexing(filepath, normalizedPath, embeddings, config, verbose || false);
|
|
213
|
+
if (isOk(result)) {
|
|
214
|
+
const { filepath: storedPath, result: processResult, mtime } = result.value;
|
|
215
|
+
if (processResult === null) {
|
|
216
|
+
// Empty file - remove from vector DB but keep in manifest with chunkCount: 0
|
|
217
|
+
try {
|
|
218
|
+
await vectorDB.deleteByFile(storedPath);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
// Ignore errors if file wasn't in index
|
|
222
|
+
}
|
|
223
|
+
// Update manifest immediately for empty files (not batched)
|
|
224
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
225
|
+
await manifest.updateFile(storedPath, {
|
|
226
|
+
filepath: storedPath,
|
|
227
|
+
lastModified: mtime,
|
|
228
|
+
chunkCount: 0,
|
|
229
|
+
});
|
|
230
|
+
processedCount++;
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
// Non-empty file - delete old chunks if they exist
|
|
234
|
+
try {
|
|
235
|
+
await vectorDB.deleteByFile(storedPath);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
// Ignore - file might not be in index yet
|
|
239
|
+
}
|
|
240
|
+
// Insert new chunks
|
|
241
|
+
await vectorDB.insertBatch(processResult.vectors, processResult.chunks.map(c => c.metadata), processResult.texts);
|
|
242
|
+
// Queue manifest update (batch at end)
|
|
243
|
+
manifestEntries.push({
|
|
244
|
+
filepath: storedPath,
|
|
245
|
+
chunkCount: processResult.chunkCount,
|
|
246
|
+
mtime,
|
|
247
|
+
});
|
|
248
|
+
if (verbose) {
|
|
249
|
+
console.error(`[Lien] ✓ Updated ${storedPath} (${processResult.chunkCount} chunks)`);
|
|
250
|
+
}
|
|
251
|
+
processedCount++;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
// File doesn't exist or couldn't be read - handle deletion
|
|
255
|
+
if (verbose) {
|
|
256
|
+
console.error(`[Lien] ${result.error}`);
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
await vectorDB.deleteByFile(normalizedPath);
|
|
260
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
261
|
+
await manifest.removeFile(normalizedPath);
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
// Ignore errors if file wasn't in index
|
|
265
|
+
if (verbose) {
|
|
266
|
+
console.error(`[Lien] Note: ${normalizedPath} not in index`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Count as processed regardless of deletion success/failure
|
|
270
|
+
processedCount++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Batch update manifest at the end (much faster than updating after each file)
|
|
274
|
+
if (manifestEntries.length > 0) {
|
|
275
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
276
|
+
await manifest.updateFiles(manifestEntries.map(entry => ({
|
|
277
|
+
filepath: entry.filepath,
|
|
278
|
+
lastModified: entry.mtime, // Use actual file mtime for accurate change detection
|
|
279
|
+
chunkCount: entry.chunkCount,
|
|
280
|
+
})));
|
|
281
|
+
}
|
|
282
|
+
return processedCount;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=incremental.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../src/indexer/incremental.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core indexing module - programmatic API without CLI dependencies.
|
|
3
|
+
*
|
|
4
|
+
* This module provides the core indexing functionality that can be used by:
|
|
5
|
+
* - @liendev/cli (with UI wrapper)
|
|
6
|
+
* - @liendev/action (directly)
|
|
7
|
+
* - @liendev/cloud (worker processes)
|
|
8
|
+
* - Third-party integrations
|
|
9
|
+
*/
|
|
10
|
+
import { type LienConfig } from '../config/schema.js';
|
|
11
|
+
import type { EmbeddingService } from '../embeddings/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Options for indexing a codebase
|
|
14
|
+
*/
|
|
15
|
+
export interface IndexingOptions {
|
|
16
|
+
/** Root directory to index (defaults to cwd) */
|
|
17
|
+
rootDir?: string;
|
|
18
|
+
/** Show verbose output */
|
|
19
|
+
verbose?: boolean;
|
|
20
|
+
/** Force full reindex, skip incremental */
|
|
21
|
+
force?: boolean;
|
|
22
|
+
/** Pre-initialized embedding service (for warm workers) */
|
|
23
|
+
embeddings?: EmbeddingService;
|
|
24
|
+
/** Pre-loaded config (skip loading from disk) */
|
|
25
|
+
config?: LienConfig;
|
|
26
|
+
/** Progress callback for external UI */
|
|
27
|
+
onProgress?: (progress: IndexingProgress) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Progress information during indexing
|
|
31
|
+
*/
|
|
32
|
+
export interface IndexingProgress {
|
|
33
|
+
phase: 'initializing' | 'scanning' | 'embedding' | 'indexing' | 'saving' | 'complete';
|
|
34
|
+
message: string;
|
|
35
|
+
filesTotal?: number;
|
|
36
|
+
filesProcessed?: number;
|
|
37
|
+
chunksProcessed?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Result of indexing operation
|
|
41
|
+
*/
|
|
42
|
+
export interface IndexingResult {
|
|
43
|
+
success: boolean;
|
|
44
|
+
filesIndexed: number;
|
|
45
|
+
chunksCreated: number;
|
|
46
|
+
durationMs: number;
|
|
47
|
+
incremental: boolean;
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Index a codebase, creating vector embeddings for semantic search.
|
|
52
|
+
*
|
|
53
|
+
* This is the main entry point for indexing. It:
|
|
54
|
+
* - Tries incremental indexing first (if not forced)
|
|
55
|
+
* - Falls back to full indexing if needed
|
|
56
|
+
* - Provides progress callbacks for UI integration
|
|
57
|
+
*
|
|
58
|
+
* @param options - Indexing options
|
|
59
|
+
* @returns Indexing result with stats
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* // Basic usage
|
|
64
|
+
* const result = await indexCodebase({ rootDir: '/path/to/project' });
|
|
65
|
+
*
|
|
66
|
+
* // With progress callback
|
|
67
|
+
* const result = await indexCodebase({
|
|
68
|
+
* rootDir: '/path/to/project',
|
|
69
|
+
* onProgress: (p) => console.log(`${p.phase}: ${p.message}`)
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // With pre-initialized embeddings (warm worker)
|
|
73
|
+
* const embeddings = new LocalEmbeddings();
|
|
74
|
+
* await embeddings.initialize();
|
|
75
|
+
* const result = await indexCodebase({ embeddings });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function indexCodebase(options?: IndexingOptions): Promise<IndexingResult>;
|
|
79
|
+
export type { FileIndexEntry } from './chunk-batch-processor.js';
|
|
80
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,EAAkC,KAAK,UAAU,EAAyB,MAAM,qBAAqB,CAAC;AAM7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iDAAiD;IACjD,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4YD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAoC1F;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
|