@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,29 @@
|
|
|
1
|
+
import type Parser from 'tree-sitter';
|
|
2
|
+
import type { LanguageTraverser, DeclarationFunctionInfo } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* TypeScript/JavaScript AST traverser
|
|
5
|
+
*
|
|
6
|
+
* Handles TypeScript and JavaScript AST node types and traversal patterns.
|
|
7
|
+
* Both languages share the same AST structure (via tree-sitter-typescript).
|
|
8
|
+
*/
|
|
9
|
+
export declare class TypeScriptTraverser implements LanguageTraverser {
|
|
10
|
+
targetNodeTypes: string[];
|
|
11
|
+
containerTypes: string[];
|
|
12
|
+
declarationTypes: string[];
|
|
13
|
+
functionTypes: string[];
|
|
14
|
+
shouldExtractChildren(node: Parser.SyntaxNode): boolean;
|
|
15
|
+
isDeclarationWithFunction(node: Parser.SyntaxNode): boolean;
|
|
16
|
+
getContainerBody(node: Parser.SyntaxNode): Parser.SyntaxNode | null;
|
|
17
|
+
shouldTraverseChildren(node: Parser.SyntaxNode): boolean;
|
|
18
|
+
findParentContainerName(node: Parser.SyntaxNode): string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a declaration node contains a function (arrow, function expression, etc.)
|
|
21
|
+
*/
|
|
22
|
+
findFunctionInDeclaration(node: Parser.SyntaxNode): DeclarationFunctionInfo;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* JavaScript uses the same traverser as TypeScript
|
|
26
|
+
*/
|
|
27
|
+
export declare class JavaScriptTraverser extends TypeScriptTraverser {
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/traversers/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,eAAe,WAOb;IAEF,cAAc,WAEZ;IAEF,gBAAgB,WAGd;IAEF,aAAa,WAIX;IAEF,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAIvD,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAI3D,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;IAOnE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAMxD,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS;IAYpE;;OAEG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,uBAAuB;CAyB5E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;CAAG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript/JavaScript AST traverser
|
|
3
|
+
*
|
|
4
|
+
* Handles TypeScript and JavaScript AST node types and traversal patterns.
|
|
5
|
+
* Both languages share the same AST structure (via tree-sitter-typescript).
|
|
6
|
+
*/
|
|
7
|
+
export class TypeScriptTraverser {
|
|
8
|
+
targetNodeTypes = [
|
|
9
|
+
'function_declaration',
|
|
10
|
+
'function',
|
|
11
|
+
'interface_declaration',
|
|
12
|
+
'method_definition',
|
|
13
|
+
'lexical_declaration', // For const/let with arrow functions
|
|
14
|
+
'variable_declaration', // For var with functions
|
|
15
|
+
];
|
|
16
|
+
containerTypes = [
|
|
17
|
+
'class_declaration', // We extract methods, not the class itself
|
|
18
|
+
];
|
|
19
|
+
declarationTypes = [
|
|
20
|
+
'lexical_declaration', // const/let
|
|
21
|
+
'variable_declaration', // var
|
|
22
|
+
];
|
|
23
|
+
functionTypes = [
|
|
24
|
+
'arrow_function',
|
|
25
|
+
'function_expression',
|
|
26
|
+
'function',
|
|
27
|
+
];
|
|
28
|
+
shouldExtractChildren(node) {
|
|
29
|
+
return this.containerTypes.includes(node.type);
|
|
30
|
+
}
|
|
31
|
+
isDeclarationWithFunction(node) {
|
|
32
|
+
return this.declarationTypes.includes(node.type);
|
|
33
|
+
}
|
|
34
|
+
getContainerBody(node) {
|
|
35
|
+
if (node.type === 'class_declaration') {
|
|
36
|
+
return node.childForFieldName('body');
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
shouldTraverseChildren(node) {
|
|
41
|
+
return node.type === 'program' ||
|
|
42
|
+
node.type === 'export_statement' ||
|
|
43
|
+
node.type === 'class_body';
|
|
44
|
+
}
|
|
45
|
+
findParentContainerName(node) {
|
|
46
|
+
let current = node.parent;
|
|
47
|
+
while (current) {
|
|
48
|
+
if (current.type === 'class_declaration') {
|
|
49
|
+
const nameNode = current.childForFieldName('name');
|
|
50
|
+
return nameNode?.text;
|
|
51
|
+
}
|
|
52
|
+
current = current.parent;
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a declaration node contains a function (arrow, function expression, etc.)
|
|
58
|
+
*/
|
|
59
|
+
findFunctionInDeclaration(node) {
|
|
60
|
+
const search = (n, depth) => {
|
|
61
|
+
if (depth > 3)
|
|
62
|
+
return null; // Don't search too deep
|
|
63
|
+
if (this.functionTypes.includes(n.type)) {
|
|
64
|
+
return n;
|
|
65
|
+
}
|
|
66
|
+
for (let i = 0; i < n.childCount; i++) {
|
|
67
|
+
const child = n.child(i);
|
|
68
|
+
if (child) {
|
|
69
|
+
const result = search(child, depth + 1);
|
|
70
|
+
if (result)
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
};
|
|
76
|
+
const functionNode = search(node, 0);
|
|
77
|
+
return {
|
|
78
|
+
hasFunction: functionNode !== null,
|
|
79
|
+
functionNode,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* JavaScript uses the same traverser as TypeScript
|
|
85
|
+
*/
|
|
86
|
+
export class JavaScriptTraverser extends TypeScriptTraverser {
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../../src/indexer/ast/traversers/typescript.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAC9B,eAAe,GAAG;QAChB,sBAAsB;QACtB,UAAU;QACV,uBAAuB;QACvB,mBAAmB;QACnB,qBAAqB,EAAK,qCAAqC;QAC/D,sBAAsB,EAAI,yBAAyB;KACpD,CAAC;IAEF,cAAc,GAAG;QACf,mBAAmB,EAAO,2CAA2C;KACtE,CAAC;IAEF,gBAAgB,GAAG;QACjB,qBAAqB,EAAK,YAAY;QACtC,sBAAsB,EAAI,MAAM;KACjC,CAAC;IAEF,aAAa,GAAG;QACd,gBAAgB;QAChB,qBAAqB;QACrB,UAAU;KACX,CAAC;IAEF,qBAAqB,CAAC,IAAuB;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,yBAAyB,CAAC,IAAuB;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,gBAAgB,CAAC,IAAuB;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB,CAAC,IAAuB;QAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,KAAK,kBAAkB;YAChC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;IACpC,CAAC;IAED,uBAAuB,CAAC,IAAuB;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACnD,OAAO,QAAQ,EAAE,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,IAAuB;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAoB,EAAE,KAAa,EAA4B,EAAE;YAC/E,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;YAEpD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,CAAC;YACX,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxC,IAAI,MAAM;wBAAE,OAAO,MAAM,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,WAAW,EAAE,YAAY,KAAK,IAAI;YAClC,YAAY;SACb,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;CAAG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type Parser from 'tree-sitter';
|
|
2
|
+
import type { CodeChunk } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* AST parse result containing the tree and any errors
|
|
5
|
+
*/
|
|
6
|
+
export interface ASTParseResult {
|
|
7
|
+
tree: Parser.Tree | null;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Symbol information extracted from AST nodes
|
|
12
|
+
*/
|
|
13
|
+
export interface SymbolInfo {
|
|
14
|
+
name: string;
|
|
15
|
+
type: 'function' | 'method' | 'class' | 'interface';
|
|
16
|
+
startLine: number;
|
|
17
|
+
endLine: number;
|
|
18
|
+
parentClass?: string;
|
|
19
|
+
signature?: string;
|
|
20
|
+
parameters?: string[];
|
|
21
|
+
returnType?: string;
|
|
22
|
+
complexity?: number;
|
|
23
|
+
cognitiveComplexity?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Semantic metadata for AST-aware chunks
|
|
27
|
+
*/
|
|
28
|
+
export interface SemanticMetadata {
|
|
29
|
+
symbolName?: string;
|
|
30
|
+
symbolType?: 'function' | 'method' | 'class' | 'interface';
|
|
31
|
+
parentClass?: string;
|
|
32
|
+
complexity?: number;
|
|
33
|
+
cognitiveComplexity?: number;
|
|
34
|
+
parameters?: string[];
|
|
35
|
+
signature?: string;
|
|
36
|
+
imports?: string[];
|
|
37
|
+
halsteadVolume?: number;
|
|
38
|
+
halsteadDifficulty?: number;
|
|
39
|
+
halsteadEffort?: number;
|
|
40
|
+
halsteadBugs?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* AST-aware chunk with enhanced semantic metadata
|
|
44
|
+
*/
|
|
45
|
+
export interface ASTChunk extends CodeChunk {
|
|
46
|
+
metadata: CodeChunk['metadata'] & SemanticMetadata;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Language-specific parser configuration
|
|
50
|
+
*/
|
|
51
|
+
export interface LanguageConfig {
|
|
52
|
+
extensions: string[];
|
|
53
|
+
parserName: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Supported languages for AST parsing
|
|
57
|
+
*/
|
|
58
|
+
export type SupportedLanguage = 'typescript' | 'javascript' | 'php' | 'python';
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/indexer/ast/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAGnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/indexer/ast/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { VectorDB } from '../vectordb/lancedb.js';
|
|
2
|
+
import { LienConfig, LegacyLienConfig } from '../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result of change detection, categorized by type of change
|
|
5
|
+
*/
|
|
6
|
+
export interface ChangeDetectionResult {
|
|
7
|
+
added: string[];
|
|
8
|
+
modified: string[];
|
|
9
|
+
deleted: string[];
|
|
10
|
+
reason: 'mtime' | 'full' | 'git-state-changed';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Detects which files have changed since last indexing.
|
|
14
|
+
* Uses git state detection to handle branch switches, then falls back to mtime.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectChanges(rootDir: string, vectorDB: VectorDB, config: LienConfig | LegacyLienConfig): Promise<ChangeDetectionResult>;
|
|
17
|
+
//# sourceMappingURL=change-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-detector.d.ts","sourceRoot":"","sources":["../../src/indexer/change-detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAkC,MAAM,qBAAqB,CAAC;AAKnG;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC;CAChD;AAwID;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,UAAU,GAAG,gBAAgB,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAwBhC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { ManifestManager } from './manifest.js';
|
|
4
|
+
import { scanCodebase, scanCodebaseWithFrameworks } from './scanner.js';
|
|
5
|
+
import { isModernConfig, isLegacyConfig } from '../config/schema.js';
|
|
6
|
+
import { GitStateTracker } from '../git/tracker.js';
|
|
7
|
+
import { isGitAvailable, isGitRepo, getChangedFiles } from '../git/utils.js';
|
|
8
|
+
import { normalizeToRelativePath } from './incremental.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check if git state has changed (branch switch, new commits).
|
|
11
|
+
*/
|
|
12
|
+
async function hasGitStateChanged(rootDir, dbPath, savedGitState) {
|
|
13
|
+
if (!savedGitState)
|
|
14
|
+
return { changed: false };
|
|
15
|
+
const gitAvailable = await isGitAvailable();
|
|
16
|
+
const isRepo = await isGitRepo(rootDir);
|
|
17
|
+
if (!gitAvailable || !isRepo)
|
|
18
|
+
return { changed: false };
|
|
19
|
+
const gitTracker = new GitStateTracker(rootDir, dbPath);
|
|
20
|
+
await gitTracker.initialize();
|
|
21
|
+
const currentState = gitTracker.getState();
|
|
22
|
+
if (!currentState)
|
|
23
|
+
return { changed: false };
|
|
24
|
+
const changed = currentState.branch !== savedGitState.branch ||
|
|
25
|
+
currentState.commit !== savedGitState.commit;
|
|
26
|
+
return { changed, currentState };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Categorize files from git diff into added, modified, deleted.
|
|
30
|
+
*/
|
|
31
|
+
function categorizeChangedFiles(changedFilesPaths, currentFileSet, normalizedManifestFiles, allFiles) {
|
|
32
|
+
const changedFilesSet = new Set(changedFilesPaths);
|
|
33
|
+
const added = [];
|
|
34
|
+
const modified = [];
|
|
35
|
+
const deleted = [];
|
|
36
|
+
// Categorize files from git diff
|
|
37
|
+
for (const filepath of changedFilesPaths) {
|
|
38
|
+
if (currentFileSet.has(filepath)) {
|
|
39
|
+
if (normalizedManifestFiles.has(filepath)) {
|
|
40
|
+
modified.push(filepath);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
added.push(filepath);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Find truly new files (not in git diff, but not in old manifest)
|
|
48
|
+
for (const filepath of allFiles) {
|
|
49
|
+
if (!normalizedManifestFiles.has(filepath) && !changedFilesSet.has(filepath)) {
|
|
50
|
+
added.push(filepath);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Find deleted files (in old manifest but not in current)
|
|
54
|
+
for (const normalizedPath of normalizedManifestFiles) {
|
|
55
|
+
if (!currentFileSet.has(normalizedPath)) {
|
|
56
|
+
deleted.push(normalizedPath);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { added, modified, deleted };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build normalized set of manifest file paths for comparison.
|
|
63
|
+
*/
|
|
64
|
+
function normalizeManifestPaths(manifestFiles, rootDir) {
|
|
65
|
+
const normalized = new Set();
|
|
66
|
+
for (const filepath of Object.keys(manifestFiles)) {
|
|
67
|
+
normalized.add(normalizeToRelativePath(filepath, rootDir));
|
|
68
|
+
}
|
|
69
|
+
return normalized;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Detect changes using git diff between commits.
|
|
73
|
+
*/
|
|
74
|
+
async function detectGitBasedChanges(rootDir, savedManifest, currentCommit, config) {
|
|
75
|
+
const changedFilesAbsolute = await getChangedFiles(rootDir, savedManifest.gitState.commit, currentCommit);
|
|
76
|
+
const changedFilesPaths = changedFilesAbsolute.map(fp => normalizeToRelativePath(fp, rootDir));
|
|
77
|
+
const allFiles = await getAllFiles(rootDir, config);
|
|
78
|
+
const currentFileSet = new Set(allFiles);
|
|
79
|
+
const normalizedManifestFiles = normalizeManifestPaths(savedManifest.files, rootDir);
|
|
80
|
+
const { added, modified, deleted } = categorizeChangedFiles(changedFilesPaths, currentFileSet, normalizedManifestFiles, allFiles);
|
|
81
|
+
return { added, modified, deleted, reason: 'git-state-changed' };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fall back to full reindex when git diff fails.
|
|
85
|
+
*/
|
|
86
|
+
async function fallbackToFullReindex(rootDir, savedManifest, config) {
|
|
87
|
+
const allFiles = await getAllFiles(rootDir, config);
|
|
88
|
+
const currentFileSet = new Set(allFiles);
|
|
89
|
+
const deleted = [];
|
|
90
|
+
for (const filepath of Object.keys(savedManifest.files)) {
|
|
91
|
+
const normalizedPath = normalizeToRelativePath(filepath, rootDir);
|
|
92
|
+
if (!currentFileSet.has(normalizedPath)) {
|
|
93
|
+
deleted.push(normalizedPath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { added: allFiles, modified: [], deleted, reason: 'git-state-changed' };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Detects which files have changed since last indexing.
|
|
100
|
+
* Uses git state detection to handle branch switches, then falls back to mtime.
|
|
101
|
+
*/
|
|
102
|
+
export async function detectChanges(rootDir, vectorDB, config) {
|
|
103
|
+
const manifest = new ManifestManager(vectorDB.dbPath);
|
|
104
|
+
const savedManifest = await manifest.load();
|
|
105
|
+
// No manifest = first run = full index
|
|
106
|
+
if (!savedManifest) {
|
|
107
|
+
const allFiles = await getAllFiles(rootDir, config);
|
|
108
|
+
return { added: allFiles, modified: [], deleted: [], reason: 'full' };
|
|
109
|
+
}
|
|
110
|
+
// Check if git state has changed
|
|
111
|
+
const gitCheck = await hasGitStateChanged(rootDir, vectorDB.dbPath, savedManifest.gitState);
|
|
112
|
+
if (gitCheck.changed && gitCheck.currentState) {
|
|
113
|
+
try {
|
|
114
|
+
return await detectGitBasedChanges(rootDir, savedManifest, gitCheck.currentState.commit, config);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.warn(`[Lien] Git diff failed, falling back to full reindex: ${error}`);
|
|
118
|
+
return await fallbackToFullReindex(rootDir, savedManifest, config);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Use mtime-based detection for file-level changes
|
|
122
|
+
return await mtimeBasedDetection(rootDir, savedManifest, config);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Gets all files in the project based on configuration.
|
|
126
|
+
* Always returns relative paths for consistent comparison with manifest and git diff.
|
|
127
|
+
*/
|
|
128
|
+
async function getAllFiles(rootDir, config) {
|
|
129
|
+
let files;
|
|
130
|
+
if (isModernConfig(config) && config.frameworks.length > 0) {
|
|
131
|
+
files = await scanCodebaseWithFrameworks(rootDir, config);
|
|
132
|
+
}
|
|
133
|
+
else if (isLegacyConfig(config)) {
|
|
134
|
+
files = await scanCodebase({
|
|
135
|
+
rootDir,
|
|
136
|
+
includePatterns: config.indexing.include,
|
|
137
|
+
excludePatterns: config.indexing.exclude,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
files = await scanCodebase({
|
|
142
|
+
rootDir,
|
|
143
|
+
includePatterns: [],
|
|
144
|
+
excludePatterns: [],
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Normalize all paths to relative for consistent comparison
|
|
148
|
+
return files.map(fp => normalizeToRelativePath(fp, rootDir));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Detects changes by comparing file modification times
|
|
152
|
+
*/
|
|
153
|
+
async function mtimeBasedDetection(rootDir, savedManifest, config) {
|
|
154
|
+
const added = [];
|
|
155
|
+
const modified = [];
|
|
156
|
+
const deleted = [];
|
|
157
|
+
// Get all current files (already normalized to relative paths by getAllFiles)
|
|
158
|
+
const currentFiles = await getAllFiles(rootDir, config);
|
|
159
|
+
const currentFileSet = new Set(currentFiles);
|
|
160
|
+
// Build a normalized map of manifest files for comparison
|
|
161
|
+
// This handles cases where manifest has absolute paths (from tests or legacy data)
|
|
162
|
+
const normalizedManifestFiles = new Map();
|
|
163
|
+
for (const [filepath, entry] of Object.entries(savedManifest.files)) {
|
|
164
|
+
const normalizedPath = normalizeToRelativePath(filepath, rootDir);
|
|
165
|
+
normalizedManifestFiles.set(normalizedPath, entry);
|
|
166
|
+
}
|
|
167
|
+
// Get mtimes for all current files
|
|
168
|
+
// Note: need to construct absolute path for fs.stat since currentFiles are relative
|
|
169
|
+
const fileStats = new Map();
|
|
170
|
+
for (const filepath of currentFiles) {
|
|
171
|
+
try {
|
|
172
|
+
// Construct absolute path for filesystem access (use path.join for cross-platform)
|
|
173
|
+
const absolutePath = path.isAbsolute(filepath) ? filepath : path.join(rootDir, filepath);
|
|
174
|
+
const stats = await fs.stat(absolutePath);
|
|
175
|
+
fileStats.set(filepath, stats.mtimeMs);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Ignore files we can't stat
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check for new and modified files
|
|
183
|
+
for (const [filepath, mtime] of fileStats) {
|
|
184
|
+
const entry = normalizedManifestFiles.get(filepath);
|
|
185
|
+
if (!entry) {
|
|
186
|
+
// New file
|
|
187
|
+
added.push(filepath);
|
|
188
|
+
}
|
|
189
|
+
else if (entry.lastModified < mtime) {
|
|
190
|
+
// File modified since last index
|
|
191
|
+
modified.push(filepath);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Check for deleted files (use normalized manifest paths)
|
|
195
|
+
for (const normalizedPath of normalizedManifestFiles.keys()) {
|
|
196
|
+
if (!currentFileSet.has(normalizedPath)) {
|
|
197
|
+
deleted.push(normalizedPath);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
added,
|
|
202
|
+
modified,
|
|
203
|
+
deleted,
|
|
204
|
+
reason: 'mtime',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=change-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-detector.js","sourceRoot":"","sources":["../../src/indexer/change-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChunkBatchProcessor - Handles concurrent chunk accumulation and batch processing.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from performFullIndex to:
|
|
5
|
+
* 1. Encapsulate mutex/lock management complexity
|
|
6
|
+
* 2. Make the batch processing logic testable
|
|
7
|
+
* 3. Separate concerns (accumulation vs processing vs coordination)
|
|
8
|
+
*
|
|
9
|
+
* Key responsibilities:
|
|
10
|
+
* - Accumulate chunks from concurrent file processing
|
|
11
|
+
* - Batch chunks for embedding generation
|
|
12
|
+
* - Manage concurrent access with mutex pattern
|
|
13
|
+
* - Process batches through embedding → vectordb pipeline
|
|
14
|
+
*/
|
|
15
|
+
import type { VectorDB } from '../vectordb/lancedb.js';
|
|
16
|
+
import type { EmbeddingService } from '../embeddings/types.js';
|
|
17
|
+
import type { ProgressTracker } from './progress-tracker.js';
|
|
18
|
+
import type { CodeChunk } from './types.js';
|
|
19
|
+
/** A chunk with its content ready for embedding */
|
|
20
|
+
export interface ChunkWithContent {
|
|
21
|
+
chunk: CodeChunk;
|
|
22
|
+
content: string;
|
|
23
|
+
}
|
|
24
|
+
/** Configuration for batch processing */
|
|
25
|
+
export interface BatchProcessorConfig {
|
|
26
|
+
/** Number of chunks to accumulate before triggering a batch */
|
|
27
|
+
batchThreshold: number;
|
|
28
|
+
/** Size of embedding batches (for API/memory limits) */
|
|
29
|
+
embeddingBatchSize: number;
|
|
30
|
+
}
|
|
31
|
+
/** Result of adding chunks - includes file metadata for manifest */
|
|
32
|
+
export interface FileIndexEntry {
|
|
33
|
+
filepath: string;
|
|
34
|
+
chunkCount: number;
|
|
35
|
+
mtime: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Process embeddings in micro-batches to prevent event loop blocking.
|
|
39
|
+
* Yields to the event loop between batches for UI responsiveness.
|
|
40
|
+
*/
|
|
41
|
+
export declare function processEmbeddingMicroBatches(texts: string[], embeddings: EmbeddingService): Promise<Float32Array[]>;
|
|
42
|
+
/**
|
|
43
|
+
* ChunkBatchProcessor handles the complex concurrent chunk accumulation
|
|
44
|
+
* and batch processing logic for indexing.
|
|
45
|
+
*
|
|
46
|
+
* Usage:
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const processor = new ChunkBatchProcessor(vectorDB, embeddings, config, tracker);
|
|
49
|
+
*
|
|
50
|
+
* // From concurrent file processing tasks:
|
|
51
|
+
* await processor.addChunks(chunks, filepath, mtime);
|
|
52
|
+
*
|
|
53
|
+
* // After all files processed:
|
|
54
|
+
* await processor.flush();
|
|
55
|
+
*
|
|
56
|
+
* // Get results:
|
|
57
|
+
* const { processedChunks, indexedFiles } = processor.getResults();
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class ChunkBatchProcessor {
|
|
61
|
+
private readonly vectorDB;
|
|
62
|
+
private readonly embeddings;
|
|
63
|
+
private readonly config;
|
|
64
|
+
private readonly progressTracker;
|
|
65
|
+
private readonly accumulator;
|
|
66
|
+
private readonly indexedFiles;
|
|
67
|
+
private processedChunkCount;
|
|
68
|
+
private addChunksLock;
|
|
69
|
+
private processingQueue;
|
|
70
|
+
constructor(vectorDB: VectorDB, embeddings: EmbeddingService, config: BatchProcessorConfig, progressTracker: ProgressTracker);
|
|
71
|
+
/**
|
|
72
|
+
* Add chunks from a processed file.
|
|
73
|
+
* Thread-safe: uses mutex to prevent race conditions with concurrent calls.
|
|
74
|
+
*
|
|
75
|
+
* @param chunks - Code chunks to add
|
|
76
|
+
* @param filepath - Source file path (for manifest)
|
|
77
|
+
* @param mtime - File modification time in ms (for change detection)
|
|
78
|
+
*/
|
|
79
|
+
addChunks(chunks: CodeChunk[], filepath: string, mtime: number): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Flush any remaining accumulated chunks.
|
|
82
|
+
* Call this after all files have been processed.
|
|
83
|
+
*/
|
|
84
|
+
flush(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Get processing results.
|
|
87
|
+
*/
|
|
88
|
+
getResults(): {
|
|
89
|
+
processedChunks: number;
|
|
90
|
+
indexedFiles: FileIndexEntry[];
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Trigger batch processing. Uses queue-based synchronization
|
|
94
|
+
* to prevent TOCTOU race conditions.
|
|
95
|
+
*/
|
|
96
|
+
private triggerProcessing;
|
|
97
|
+
/**
|
|
98
|
+
* The actual batch processing logic.
|
|
99
|
+
* Processes accumulated chunks through embedding → vectordb pipeline.
|
|
100
|
+
*/
|
|
101
|
+
private doProcess;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=chunk-batch-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-batch-processor.d.ts","sourceRoot":"","sources":["../../src/indexer/chunk-batch-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAZlC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,mBAAmB,CAAK;IAGhC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAA8B;gBAGlC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,eAAe,EAAE,eAAe;IAGnD;;;;;;;OAOG;IACG,SAAS,CACb,MAAM,EAAE,SAAS,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IA2ChB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,UAAU,IAAI;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,cAAc,EAAE,CAAA;KAAE;IAOzE;;;OAGG;YACW,iBAAiB;IAU/B;;;OAGG;YACW,SAAS;CA4CxB"}
|