@codragraph/cli 1.6.2
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 +341 -0
- package/dist/_shared/graph/types.d.ts +81 -0
- package/dist/_shared/graph/types.d.ts.map +1 -0
- package/dist/_shared/graph/types.js +8 -0
- package/dist/_shared/graph/types.js.map +1 -0
- package/dist/_shared/index.d.ts +55 -0
- package/dist/_shared/index.d.ts.map +1 -0
- package/dist/_shared/index.js +39 -0
- package/dist/_shared/index.js.map +1 -0
- package/dist/_shared/language-detection.d.ts +23 -0
- package/dist/_shared/language-detection.d.ts.map +1 -0
- package/dist/_shared/language-detection.js +139 -0
- package/dist/_shared/language-detection.js.map +1 -0
- package/dist/_shared/languages.d.ts +26 -0
- package/dist/_shared/languages.d.ts.map +1 -0
- package/dist/_shared/languages.js +27 -0
- package/dist/_shared/languages.js.map +1 -0
- package/dist/_shared/lbug/schema-constants.d.ts +16 -0
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -0
- package/dist/_shared/lbug/schema-constants.js +67 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -0
- package/dist/_shared/mro-strategy.d.ts +41 -0
- package/dist/_shared/mro-strategy.d.ts.map +1 -0
- package/dist/_shared/mro-strategy.js +2 -0
- package/dist/_shared/mro-strategy.js.map +1 -0
- package/dist/_shared/pipeline.d.ts +16 -0
- package/dist/_shared/pipeline.d.ts.map +1 -0
- package/dist/_shared/pipeline.js +5 -0
- package/dist/_shared/pipeline.js.map +1 -0
- package/dist/_shared/scope-resolution/def-index.d.ts +36 -0
- package/dist/_shared/scope-resolution/def-index.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/def-index.js +51 -0
- package/dist/_shared/scope-resolution/def-index.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts +69 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.js +84 -0
- package/dist/_shared/scope-resolution/evidence-weights.js.map +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +139 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.js +479 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -0
- package/dist/_shared/scope-resolution/language-classification.d.ts +26 -0
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/language-classification.js +44 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -0
- package/dist/_shared/scope-resolution/method-dispatch-index.d.ts +80 -0
- package/dist/_shared/scope-resolution/method-dispatch-index.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/method-dispatch-index.js +79 -0
- package/dist/_shared/scope-resolution/method-dispatch-index.js.map +1 -0
- package/dist/_shared/scope-resolution/module-scope-index.d.ts +46 -0
- package/dist/_shared/scope-resolution/module-scope-index.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/module-scope-index.js +58 -0
- package/dist/_shared/scope-resolution/module-scope-index.js.map +1 -0
- package/dist/_shared/scope-resolution/origin-priority.d.ts +14 -0
- package/dist/_shared/scope-resolution/origin-priority.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/origin-priority.js +21 -0
- package/dist/_shared/scope-resolution/origin-priority.js.map +1 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts +76 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/parsed-file.js +54 -0
- package/dist/_shared/scope-resolution/parsed-file.js.map +1 -0
- package/dist/_shared/scope-resolution/position-index.d.ts +62 -0
- package/dist/_shared/scope-resolution/position-index.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/position-index.js +134 -0
- package/dist/_shared/scope-resolution/position-index.js.map +1 -0
- package/dist/_shared/scope-resolution/qualified-name-index.d.ts +44 -0
- package/dist/_shared/scope-resolution/qualified-name-index.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/qualified-name-index.js +75 -0
- package/dist/_shared/scope-resolution/qualified-name-index.js.map +1 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts +75 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/reference-site.js +24 -0
- package/dist/_shared/scope-resolution/reference-site.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/class-registry.d.ts +27 -0
- package/dist/_shared/scope-resolution/registries/class-registry.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/class-registry.js +30 -0
- package/dist/_shared/scope-resolution/registries/class-registry.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/context.d.ts +69 -0
- package/dist/_shared/scope-resolution/registries/context.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/context.js +44 -0
- package/dist/_shared/scope-resolution/registries/context.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/evidence.d.ts +56 -0
- package/dist/_shared/scope-resolution/registries/evidence.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/evidence.js +150 -0
- package/dist/_shared/scope-resolution/registries/evidence.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/field-registry.d.ts +26 -0
- package/dist/_shared/scope-resolution/registries/field-registry.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/field-registry.js +31 -0
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts +81 -0
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/lookup-core.js +332 -0
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/lookup-qualified.d.ts +33 -0
- package/dist/_shared/scope-resolution/registries/lookup-qualified.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/lookup-qualified.js +56 -0
- package/dist/_shared/scope-resolution/registries/lookup-qualified.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/method-registry.d.ts +36 -0
- package/dist/_shared/scope-resolution/registries/method-registry.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/method-registry.js +32 -0
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -0
- package/dist/_shared/scope-resolution/registries/tie-breaks.d.ts +43 -0
- package/dist/_shared/scope-resolution/registries/tie-breaks.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/tie-breaks.js +60 -0
- package/dist/_shared/scope-resolution/registries/tie-breaks.js.map +1 -0
- package/dist/_shared/scope-resolution/resolve-type-ref.d.ts +53 -0
- package/dist/_shared/scope-resolution/resolve-type-ref.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/resolve-type-ref.js +126 -0
- package/dist/_shared/scope-resolution/resolve-type-ref.js.map +1 -0
- package/dist/_shared/scope-resolution/scope-id.d.ts +43 -0
- package/dist/_shared/scope-resolution/scope-id.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/scope-id.js +46 -0
- package/dist/_shared/scope-resolution/scope-id.js.map +1 -0
- package/dist/_shared/scope-resolution/scope-tree.d.ts +61 -0
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/scope-tree.js +186 -0
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -0
- package/dist/_shared/scope-resolution/shadow/aggregate.d.ts +63 -0
- package/dist/_shared/scope-resolution/shadow/aggregate.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/shadow/aggregate.js +122 -0
- package/dist/_shared/scope-resolution/shadow/aggregate.js.map +1 -0
- package/dist/_shared/scope-resolution/shadow/diff.d.ts +59 -0
- package/dist/_shared/scope-resolution/shadow/diff.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/shadow/diff.js +79 -0
- package/dist/_shared/scope-resolution/shadow/diff.js.map +1 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +34 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/_shared/scope-resolution/symbol-definition.js.map +1 -0
- package/dist/_shared/scope-resolution/types.d.ts +356 -0
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/types.js +17 -0
- package/dist/_shared/scope-resolution/types.js.map +1 -0
- package/dist/cli/ai-context.d.ts +27 -0
- package/dist/cli/ai-context.js +270 -0
- package/dist/cli/analyze.d.ts +43 -0
- package/dist/cli/analyze.js +312 -0
- package/dist/cli/augment.d.ts +13 -0
- package/dist/cli/augment.js +33 -0
- package/dist/cli/clean.d.ts +10 -0
- package/dist/cli/clean.js +78 -0
- package/dist/cli/config.d.ts +27 -0
- package/dist/cli/config.js +106 -0
- package/dist/cli/eval-server.d.ts +37 -0
- package/dist/cli/eval-server.js +398 -0
- package/dist/cli/graphstore.d.ts +40 -0
- package/dist/cli/graphstore.js +639 -0
- package/dist/cli/group.d.ts +2 -0
- package/dist/cli/group.js +306 -0
- package/dist/cli/index-repo.d.ts +15 -0
- package/dist/cli/index-repo.js +120 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +236 -0
- package/dist/cli/lazy-action.d.ts +6 -0
- package/dist/cli/lazy-action.js +18 -0
- package/dist/cli/list.d.ts +6 -0
- package/dist/cli/list.js +40 -0
- package/dist/cli/mcp.d.ts +8 -0
- package/dist/cli/mcp.js +36 -0
- package/dist/cli/remove.d.ts +30 -0
- package/dist/cli/remove.js +99 -0
- package/dist/cli/serve.d.ts +4 -0
- package/dist/cli/serve.js +37 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +543 -0
- package/dist/cli/skill-gen.d.ts +26 -0
- package/dist/cli/skill-gen.js +555 -0
- package/dist/cli/status.d.ts +6 -0
- package/dist/cli/status.js +36 -0
- package/dist/cli/tool.d.ts +43 -0
- package/dist/cli/tool.js +168 -0
- package/dist/cli/wiki.d.ts +21 -0
- package/dist/cli/wiki.js +579 -0
- package/dist/config/ignore-service.d.ts +35 -0
- package/dist/config/ignore-service.js +436 -0
- package/dist/config/supported-languages.d.ts +13 -0
- package/dist/config/supported-languages.js +13 -0
- package/dist/core/augmentation/engine.d.ts +26 -0
- package/dist/core/augmentation/engine.js +252 -0
- package/dist/core/embeddings/ast-utils.d.ts +22 -0
- package/dist/core/embeddings/ast-utils.js +105 -0
- package/dist/core/embeddings/character-chunk.d.ts +12 -0
- package/dist/core/embeddings/character-chunk.js +43 -0
- package/dist/core/embeddings/chunker.d.ts +14 -0
- package/dist/core/embeddings/chunker.js +239 -0
- package/dist/core/embeddings/embedder.d.ts +65 -0
- package/dist/core/embeddings/embedder.js +320 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +62 -0
- package/dist/core/embeddings/embedding-pipeline.js +486 -0
- package/dist/core/embeddings/http-client.d.ts +31 -0
- package/dist/core/embeddings/http-client.js +179 -0
- package/dist/core/embeddings/index.d.ts +10 -0
- package/dist/core/embeddings/index.js +10 -0
- package/dist/core/embeddings/line-index.d.ts +7 -0
- package/dist/core/embeddings/line-index.js +42 -0
- package/dist/core/embeddings/server-mapping.d.ts +15 -0
- package/dist/core/embeddings/server-mapping.js +33 -0
- package/dist/core/embeddings/structural-extractor.d.ts +15 -0
- package/dist/core/embeddings/structural-extractor.js +58 -0
- package/dist/core/embeddings/text-generator.d.ts +31 -0
- package/dist/core/embeddings/text-generator.js +208 -0
- package/dist/core/embeddings/types.d.ts +207 -0
- package/dist/core/embeddings/types.js +200 -0
- package/dist/core/git-staleness.d.ts +31 -0
- package/dist/core/git-staleness.js +137 -0
- package/dist/core/graph/graph.d.ts +2 -0
- package/dist/core/graph/graph.js +173 -0
- package/dist/core/graph/types.d.ts +36 -0
- package/dist/core/graph/types.js +1 -0
- package/dist/core/graphstore/index.d.ts +46 -0
- package/dist/core/graphstore/index.js +80 -0
- package/dist/core/graphstore/lbug-row-source.d.ts +19 -0
- package/dist/core/graphstore/lbug-row-source.js +141 -0
- package/dist/core/group/bridge-db.d.ts +82 -0
- package/dist/core/group/bridge-db.js +460 -0
- package/dist/core/group/bridge-schema.d.ts +27 -0
- package/dist/core/group/bridge-schema.js +55 -0
- package/dist/core/group/config-parser.d.ts +7 -0
- package/dist/core/group/config-parser.js +100 -0
- package/dist/core/group/contract-extractor.d.ts +7 -0
- package/dist/core/group/contract-extractor.js +1 -0
- package/dist/core/group/cross-impact.d.ts +41 -0
- package/dist/core/group/cross-impact.js +441 -0
- package/dist/core/group/extractors/fs-utils.d.ts +10 -0
- package/dist/core/group/extractors/fs-utils.js +24 -0
- package/dist/core/group/extractors/grpc-extractor.d.ts +25 -0
- package/dist/core/group/extractors/grpc-extractor.js +401 -0
- package/dist/core/group/extractors/grpc-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/go.js +97 -0
- package/dist/core/group/extractors/grpc-patterns/index.d.ts +19 -0
- package/dist/core/group/extractors/grpc-patterns/index.js +46 -0
- package/dist/core/group/extractors/grpc-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/java.js +173 -0
- package/dist/core/group/extractors/grpc-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/grpc-patterns/node.js +290 -0
- package/dist/core/group/extractors/grpc-patterns/proto.d.ts +9 -0
- package/dist/core/group/extractors/grpc-patterns/proto.js +134 -0
- package/dist/core/group/extractors/grpc-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/python.js +67 -0
- package/dist/core/group/extractors/grpc-patterns/types.d.ts +50 -0
- package/dist/core/group/extractors/grpc-patterns/types.js +1 -0
- package/dist/core/group/extractors/http-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/go.js +215 -0
- package/dist/core/group/extractors/http-patterns/index.d.ts +17 -0
- package/dist/core/group/extractors/http-patterns/index.js +44 -0
- package/dist/core/group/extractors/http-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/java.js +253 -0
- package/dist/core/group/extractors/http-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/http-patterns/node.js +484 -0
- package/dist/core/group/extractors/http-patterns/php.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/php.js +178 -0
- package/dist/core/group/extractors/http-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/python.js +133 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +61 -0
- package/dist/core/group/extractors/http-patterns/types.js +1 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +21 -0
- package/dist/core/group/extractors/http-route-extractor.js +421 -0
- package/dist/core/group/extractors/manifest-extractor.d.ts +54 -0
- package/dist/core/group/extractors/manifest-extractor.js +292 -0
- package/dist/core/group/extractors/topic-extractor.d.ts +8 -0
- package/dist/core/group/extractors/topic-extractor.js +97 -0
- package/dist/core/group/extractors/topic-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/go.js +120 -0
- package/dist/core/group/extractors/topic-patterns/index.d.ts +14 -0
- package/dist/core/group/extractors/topic-patterns/index.js +38 -0
- package/dist/core/group/extractors/topic-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/java.js +80 -0
- package/dist/core/group/extractors/topic-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/topic-patterns/node.js +155 -0
- package/dist/core/group/extractors/topic-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/python.js +116 -0
- package/dist/core/group/extractors/topic-patterns/types.d.ts +25 -0
- package/dist/core/group/extractors/topic-patterns/types.js +10 -0
- package/dist/core/group/extractors/tree-sitter-scanner.d.ts +113 -0
- package/dist/core/group/extractors/tree-sitter-scanner.js +94 -0
- package/dist/core/group/group-path-utils.d.ts +17 -0
- package/dist/core/group/group-path-utils.js +40 -0
- package/dist/core/group/matching.d.ts +13 -0
- package/dist/core/group/matching.js +198 -0
- package/dist/core/group/normalization.d.ts +3 -0
- package/dist/core/group/normalization.js +115 -0
- package/dist/core/group/resolve-at-member.d.ts +10 -0
- package/dist/core/group/resolve-at-member.js +31 -0
- package/dist/core/group/service-boundary-detector.d.ts +8 -0
- package/dist/core/group/service-boundary-detector.js +155 -0
- package/dist/core/group/service.d.ts +55 -0
- package/dist/core/group/service.js +394 -0
- package/dist/core/group/storage.d.ts +9 -0
- package/dist/core/group/storage.js +91 -0
- package/dist/core/group/sync.d.ts +21 -0
- package/dist/core/group/sync.js +196 -0
- package/dist/core/group/types.d.ts +160 -0
- package/dist/core/group/types.js +1 -0
- package/dist/core/ingestion/ast-cache.d.ts +26 -0
- package/dist/core/ingestion/ast-cache.js +47 -0
- package/dist/core/ingestion/binding-accumulator.d.ts +212 -0
- package/dist/core/ingestion/binding-accumulator.js +336 -0
- package/dist/core/ingestion/call-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/c-cpp.js +8 -0
- package/dist/core/ingestion/call-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/csharp.js +6 -0
- package/dist/core/ingestion/call-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/dart.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/go.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/jvm.js +51 -0
- package/dist/core/ingestion/call-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/php.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/python.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/ruby.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/rust.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/swift.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/typescript-javascript.js +8 -0
- package/dist/core/ingestion/call-extractors/generic.d.ts +5 -0
- package/dist/core/ingestion/call-extractors/generic.js +59 -0
- package/dist/core/ingestion/call-processor.d.ts +235 -0
- package/dist/core/ingestion/call-processor.js +2639 -0
- package/dist/core/ingestion/call-routing.d.ts +55 -0
- package/dist/core/ingestion/call-routing.js +95 -0
- package/dist/core/ingestion/call-types.d.ts +135 -0
- package/dist/core/ingestion/call-types.js +2 -0
- package/dist/core/ingestion/class-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/class-extractors/configs/c-cpp.js +11 -0
- package/dist/core/ingestion/class-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/csharp.js +21 -0
- package/dist/core/ingestion/class-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/dart.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/go.js +20 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.js +35 -0
- package/dist/core/ingestion/class-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/php.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/python.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/ruby.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/rust.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/swift.js +18 -0
- package/dist/core/ingestion/class-extractors/configs/typescript-javascript.d.ts +4 -0
- package/dist/core/ingestion/class-extractors/configs/typescript-javascript.js +28 -0
- package/dist/core/ingestion/class-extractors/generic.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/generic.js +135 -0
- package/dist/core/ingestion/class-types.d.ts +34 -0
- package/dist/core/ingestion/class-types.js +1 -0
- package/dist/core/ingestion/cluster-enricher.d.ts +38 -0
- package/dist/core/ingestion/cluster-enricher.js +168 -0
- package/dist/core/ingestion/cobol/cobol-copy-expander.d.ts +57 -0
- package/dist/core/ingestion/cobol/cobol-copy-expander.js +392 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.d.ts +210 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1715 -0
- package/dist/core/ingestion/cobol/jcl-parser.d.ts +68 -0
- package/dist/core/ingestion/cobol/jcl-parser.js +217 -0
- package/dist/core/ingestion/cobol/jcl-processor.d.ts +33 -0
- package/dist/core/ingestion/cobol/jcl-processor.js +229 -0
- package/dist/core/ingestion/cobol-processor.d.ts +54 -0
- package/dist/core/ingestion/cobol-processor.js +1232 -0
- package/dist/core/ingestion/community-processor.d.ts +39 -0
- package/dist/core/ingestion/community-processor.js +318 -0
- package/dist/core/ingestion/constants.d.ts +16 -0
- package/dist/core/ingestion/constants.js +16 -0
- package/dist/core/ingestion/emit-references.d.ts +88 -0
- package/dist/core/ingestion/emit-references.js +229 -0
- package/dist/core/ingestion/entry-point-scoring.d.ts +58 -0
- package/dist/core/ingestion/entry-point-scoring.js +380 -0
- package/dist/core/ingestion/export-detection.d.ts +57 -0
- package/dist/core/ingestion/export-detection.js +233 -0
- package/dist/core/ingestion/field-extractor.d.ts +29 -0
- package/dist/core/ingestion/field-extractor.js +25 -0
- package/dist/core/ingestion/field-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/field-extractors/configs/c-cpp.js +104 -0
- package/dist/core/ingestion/field-extractors/configs/csharp.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/csharp.js +116 -0
- package/dist/core/ingestion/field-extractors/configs/dart.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/dart.js +78 -0
- package/dist/core/ingestion/field-extractors/configs/go.d.ts +11 -0
- package/dist/core/ingestion/field-extractors/configs/go.js +60 -0
- package/dist/core/ingestion/field-extractors/configs/helpers.d.ts +53 -0
- package/dist/core/ingestion/field-extractors/configs/helpers.js +158 -0
- package/dist/core/ingestion/field-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/field-extractors/configs/jvm.js +118 -0
- package/dist/core/ingestion/field-extractors/configs/php.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/php.js +65 -0
- package/dist/core/ingestion/field-extractors/configs/python.d.ts +12 -0
- package/dist/core/ingestion/field-extractors/configs/python.js +91 -0
- package/dist/core/ingestion/field-extractors/configs/ruby.d.ts +16 -0
- package/dist/core/ingestion/field-extractors/configs/ruby.js +76 -0
- package/dist/core/ingestion/field-extractors/configs/rust.d.ts +9 -0
- package/dist/core/ingestion/field-extractors/configs/rust.js +52 -0
- package/dist/core/ingestion/field-extractors/configs/swift.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/swift.js +65 -0
- package/dist/core/ingestion/field-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/field-extractors/configs/typescript-javascript.js +56 -0
- package/dist/core/ingestion/field-extractors/generic.d.ts +49 -0
- package/dist/core/ingestion/field-extractors/generic.js +117 -0
- package/dist/core/ingestion/field-extractors/typescript.d.ts +77 -0
- package/dist/core/ingestion/field-extractors/typescript.js +291 -0
- package/dist/core/ingestion/field-types.d.ts +61 -0
- package/dist/core/ingestion/field-types.js +2 -0
- package/dist/core/ingestion/filesystem-walker.d.ts +28 -0
- package/dist/core/ingestion/filesystem-walker.js +91 -0
- package/dist/core/ingestion/finalize-orchestrator.d.ts +63 -0
- package/dist/core/ingestion/finalize-orchestrator.js +139 -0
- package/dist/core/ingestion/framework-detection.d.ts +150 -0
- package/dist/core/ingestion/framework-detection.js +786 -0
- package/dist/core/ingestion/heritage-extractors/configs/go.d.ts +13 -0
- package/dist/core/ingestion/heritage-extractors/configs/go.js +20 -0
- package/dist/core/ingestion/heritage-extractors/configs/ruby.d.ts +18 -0
- package/dist/core/ingestion/heritage-extractors/configs/ruby.js +65 -0
- package/dist/core/ingestion/heritage-extractors/generic.d.ts +23 -0
- package/dist/core/ingestion/heritage-extractors/generic.js +47 -0
- package/dist/core/ingestion/heritage-processor.d.ts +54 -0
- package/dist/core/ingestion/heritage-processor.js +360 -0
- package/dist/core/ingestion/heritage-types.d.ts +73 -0
- package/dist/core/ingestion/heritage-types.js +2 -0
- package/dist/core/ingestion/import-processor.d.ts +23 -0
- package/dist/core/ingestion/import-processor.js +373 -0
- package/dist/core/ingestion/import-resolvers/configs/c-cpp.d.ts +7 -0
- package/dist/core/ingestion/import-resolvers/configs/c-cpp.js +14 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +27 -0
- package/dist/core/ingestion/import-resolvers/configs/dart.d.ts +17 -0
- package/dist/core/ingestion/import-resolvers/configs/dart.js +54 -0
- package/dist/core/ingestion/import-resolvers/configs/go.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/go.js +26 -0
- package/dist/core/ingestion/import-resolvers/configs/jvm.d.ts +13 -0
- package/dist/core/ingestion/import-resolvers/configs/jvm.js +68 -0
- package/dist/core/ingestion/import-resolvers/configs/php.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/php.js +15 -0
- package/dist/core/ingestion/import-resolvers/configs/python.d.ts +12 -0
- package/dist/core/ingestion/import-resolvers/configs/python.js +41 -0
- package/dist/core/ingestion/import-resolvers/configs/ruby.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/ruby.js +16 -0
- package/dist/core/ingestion/import-resolvers/configs/rust.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/rust.js +54 -0
- package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/swift.js +29 -0
- package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.d.ts +9 -0
- package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.js +23 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +18 -0
- package/dist/core/ingestion/import-resolvers/csharp.js +115 -0
- package/dist/core/ingestion/import-resolvers/go.d.ts +17 -0
- package/dist/core/ingestion/import-resolvers/go.js +46 -0
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +27 -0
- package/dist/core/ingestion/import-resolvers/jvm.js +106 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +24 -0
- package/dist/core/ingestion/import-resolvers/php.js +77 -0
- package/dist/core/ingestion/import-resolvers/python.d.ts +22 -0
- package/dist/core/ingestion/import-resolvers/python.js +72 -0
- package/dist/core/ingestion/import-resolvers/resolver-factory.d.ts +24 -0
- package/dist/core/ingestion/import-resolvers/resolver-factory.js +33 -0
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +14 -0
- package/dist/core/ingestion/import-resolvers/ruby.js +17 -0
- package/dist/core/ingestion/import-resolvers/rust.d.ts +17 -0
- package/dist/core/ingestion/import-resolvers/rust.js +75 -0
- package/dist/core/ingestion/import-resolvers/standard.d.ts +30 -0
- package/dist/core/ingestion/import-resolvers/standard.js +142 -0
- package/dist/core/ingestion/import-resolvers/types.d.ts +68 -0
- package/dist/core/ingestion/import-resolvers/types.js +6 -0
- package/dist/core/ingestion/import-resolvers/utils.d.ts +35 -0
- package/dist/core/ingestion/import-resolvers/utils.js +149 -0
- package/dist/core/ingestion/import-target-adapter.d.ts +73 -0
- package/dist/core/ingestion/import-target-adapter.js +95 -0
- package/dist/core/ingestion/language-config.d.ts +52 -0
- package/dist/core/ingestion/language-config.js +181 -0
- package/dist/core/ingestion/language-provider.d.ts +410 -0
- package/dist/core/ingestion/language-provider.js +24 -0
- package/dist/core/ingestion/languages/c-cpp.d.ts +12 -0
- package/dist/core/ingestion/languages/c-cpp.js +329 -0
- package/dist/core/ingestion/languages/cobol.d.ts +1 -0
- package/dist/core/ingestion/languages/cobol.js +26 -0
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +21 -0
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +56 -0
- package/dist/core/ingestion/languages/csharp/arity-metadata.d.ts +26 -0
- package/dist/core/ingestion/languages/csharp/arity-metadata.js +46 -0
- package/dist/core/ingestion/languages/csharp/arity.d.ts +23 -0
- package/dist/core/ingestion/languages/csharp/arity.js +37 -0
- package/dist/core/ingestion/languages/csharp/cache-stats.d.ts +15 -0
- package/dist/core/ingestion/languages/csharp/cache-stats.js +26 -0
- package/dist/core/ingestion/languages/csharp/captures.d.ts +19 -0
- package/dist/core/ingestion/languages/csharp/captures.js +249 -0
- package/dist/core/ingestion/languages/csharp/import-decomposer.d.ts +19 -0
- package/dist/core/ingestion/languages/csharp/import-decomposer.js +93 -0
- package/dist/core/ingestion/languages/csharp/import-target.d.ts +25 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +123 -0
- package/dist/core/ingestion/languages/csharp/index.d.ts +82 -0
- package/dist/core/ingestion/languages/csharp/index.js +82 -0
- package/dist/core/ingestion/languages/csharp/interpret.d.ts +15 -0
- package/dist/core/ingestion/languages/csharp/interpret.js +132 -0
- package/dist/core/ingestion/languages/csharp/merge-bindings.d.ts +27 -0
- package/dist/core/ingestion/languages/csharp/merge-bindings.js +55 -0
- package/dist/core/ingestion/languages/csharp/namespace-siblings.d.ts +50 -0
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +374 -0
- package/dist/core/ingestion/languages/csharp/query.d.ts +35 -0
- package/dist/core/ingestion/languages/csharp/query.js +515 -0
- package/dist/core/ingestion/languages/csharp/receiver-binding.d.ts +31 -0
- package/dist/core/ingestion/languages/csharp/receiver-binding.js +135 -0
- package/dist/core/ingestion/languages/csharp/scope-resolver.d.ts +10 -0
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +63 -0
- package/dist/core/ingestion/languages/csharp/simple-hooks.d.ts +53 -0
- package/dist/core/ingestion/languages/csharp/simple-hooks.js +76 -0
- package/dist/core/ingestion/languages/csharp.d.ts +8 -0
- package/dist/core/ingestion/languages/csharp.js +152 -0
- package/dist/core/ingestion/languages/dart.d.ts +12 -0
- package/dist/core/ingestion/languages/dart.js +102 -0
- package/dist/core/ingestion/languages/go.d.ts +11 -0
- package/dist/core/ingestion/languages/go.js +44 -0
- package/dist/core/ingestion/languages/index.d.ts +39 -0
- package/dist/core/ingestion/languages/index.js +64 -0
- package/dist/core/ingestion/languages/java.d.ts +9 -0
- package/dist/core/ingestion/languages/java.js +44 -0
- package/dist/core/ingestion/languages/kotlin.d.ts +9 -0
- package/dist/core/ingestion/languages/kotlin.js +123 -0
- package/dist/core/ingestion/languages/php.d.ts +8 -0
- package/dist/core/ingestion/languages/php.js +240 -0
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +24 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +45 -0
- package/dist/core/ingestion/languages/python/arity.d.ts +22 -0
- package/dist/core/ingestion/languages/python/arity.js +38 -0
- package/dist/core/ingestion/languages/python/cache-stats.d.ts +17 -0
- package/dist/core/ingestion/languages/python/cache-stats.js +28 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +19 -0
- package/dist/core/ingestion/languages/python/captures.js +106 -0
- package/dist/core/ingestion/languages/python/import-decomposer.d.ts +15 -0
- package/dist/core/ingestion/languages/python/import-decomposer.js +112 -0
- package/dist/core/ingestion/languages/python/import-target.d.ts +21 -0
- package/dist/core/ingestion/languages/python/import-target.js +99 -0
- package/dist/core/ingestion/languages/python/index.d.ts +80 -0
- package/dist/core/ingestion/languages/python/index.js +80 -0
- package/dist/core/ingestion/languages/python/interpret.d.ts +15 -0
- package/dist/core/ingestion/languages/python/interpret.js +191 -0
- package/dist/core/ingestion/languages/python/merge-bindings.d.ts +16 -0
- package/dist/core/ingestion/languages/python/merge-bindings.js +44 -0
- package/dist/core/ingestion/languages/python/query.d.ts +9 -0
- package/dist/core/ingestion/languages/python/query.js +267 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +21 -0
- package/dist/core/ingestion/languages/python/receiver-binding.js +116 -0
- package/dist/core/ingestion/languages/python/scope-resolver.d.ts +16 -0
- package/dist/core/ingestion/languages/python/scope-resolver.js +53 -0
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +23 -0
- package/dist/core/ingestion/languages/python/simple-hooks.js +35 -0
- package/dist/core/ingestion/languages/python.d.ts +12 -0
- package/dist/core/ingestion/languages/python.js +91 -0
- package/dist/core/ingestion/languages/ruby.d.ts +9 -0
- package/dist/core/ingestion/languages/ruby.js +210 -0
- package/dist/core/ingestion/languages/rust.d.ts +12 -0
- package/dist/core/ingestion/languages/rust.js +132 -0
- package/dist/core/ingestion/languages/swift.d.ts +12 -0
- package/dist/core/ingestion/languages/swift.js +244 -0
- package/dist/core/ingestion/languages/typescript.d.ts +11 -0
- package/dist/core/ingestion/languages/typescript.js +184 -0
- package/dist/core/ingestion/languages/vue.d.ts +13 -0
- package/dist/core/ingestion/languages/vue.js +77 -0
- package/dist/core/ingestion/markdown-processor.d.ts +17 -0
- package/dist/core/ingestion/markdown-processor.js +124 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/ingestion/method-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/csharp.js +287 -0
- package/dist/core/ingestion/method-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/dart.js +376 -0
- package/dist/core/ingestion/method-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/go.js +176 -0
- package/dist/core/ingestion/method-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/method-extractors/configs/jvm.js +336 -0
- package/dist/core/ingestion/method-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/php.js +304 -0
- package/dist/core/ingestion/method-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/python.js +309 -0
- package/dist/core/ingestion/method-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/ruby.js +286 -0
- package/dist/core/ingestion/method-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/rust.js +195 -0
- package/dist/core/ingestion/method-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/swift.js +277 -0
- package/dist/core/ingestion/method-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/method-extractors/configs/typescript-javascript.js +338 -0
- package/dist/core/ingestion/method-extractors/generic.d.ts +11 -0
- package/dist/core/ingestion/method-extractors/generic.js +204 -0
- package/dist/core/ingestion/method-types.d.ts +90 -0
- package/dist/core/ingestion/method-types.js +2 -0
- package/dist/core/ingestion/model/field-registry.d.ts +18 -0
- package/dist/core/ingestion/model/field-registry.js +22 -0
- package/dist/core/ingestion/model/heritage-map.d.ts +105 -0
- package/dist/core/ingestion/model/heritage-map.js +260 -0
- package/dist/core/ingestion/model/index.d.ts +20 -0
- package/dist/core/ingestion/model/index.js +43 -0
- package/dist/core/ingestion/model/method-registry.d.ts +71 -0
- package/dist/core/ingestion/model/method-registry.js +134 -0
- package/dist/core/ingestion/model/registration-table.d.ts +138 -0
- package/dist/core/ingestion/model/registration-table.js +224 -0
- package/dist/core/ingestion/model/resolution-context.d.ts +93 -0
- package/dist/core/ingestion/model/resolution-context.js +337 -0
- package/dist/core/ingestion/model/resolve.d.ts +61 -0
- package/dist/core/ingestion/model/resolve.js +381 -0
- package/dist/core/ingestion/model/scope-resolution-indexes.d.ts +59 -0
- package/dist/core/ingestion/model/scope-resolution-indexes.js +42 -0
- package/dist/core/ingestion/model/semantic-model.d.ts +150 -0
- package/dist/core/ingestion/model/semantic-model.js +175 -0
- package/dist/core/ingestion/model/symbol-table.d.ts +200 -0
- package/dist/core/ingestion/model/symbol-table.js +206 -0
- package/dist/core/ingestion/model/type-registry.d.ts +39 -0
- package/dist/core/ingestion/model/type-registry.js +62 -0
- package/dist/core/ingestion/mro-processor.d.ts +46 -0
- package/dist/core/ingestion/mro-processor.js +597 -0
- package/dist/core/ingestion/named-bindings/csharp.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/csharp.js +37 -0
- package/dist/core/ingestion/named-bindings/java.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/java.js +29 -0
- package/dist/core/ingestion/named-bindings/kotlin.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/kotlin.js +36 -0
- package/dist/core/ingestion/named-bindings/php.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/php.js +61 -0
- package/dist/core/ingestion/named-bindings/python.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/python.js +49 -0
- package/dist/core/ingestion/named-bindings/rust.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/rust.js +66 -0
- package/dist/core/ingestion/named-bindings/types.d.ts +16 -0
- package/dist/core/ingestion/named-bindings/types.js +6 -0
- package/dist/core/ingestion/named-bindings/typescript.d.ts +3 -0
- package/dist/core/ingestion/named-bindings/typescript.js +58 -0
- package/dist/core/ingestion/parsing-processor.d.ts +40 -0
- package/dist/core/ingestion/parsing-processor.js +576 -0
- package/dist/core/ingestion/pipeline-phases/cobol.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/cobol.js +45 -0
- package/dist/core/ingestion/pipeline-phases/communities.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/communities.js +62 -0
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +156 -0
- package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/cross-file.js +63 -0
- package/dist/core/ingestion/pipeline-phases/index.d.ts +22 -0
- package/dist/core/ingestion/pipeline-phases/index.js +23 -0
- package/dist/core/ingestion/pipeline-phases/markdown.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/markdown.js +33 -0
- package/dist/core/ingestion/pipeline-phases/mro.d.ts +18 -0
- package/dist/core/ingestion/pipeline-phases/mro.js +36 -0
- package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +22 -0
- package/dist/core/ingestion/pipeline-phases/orm-extraction.js +92 -0
- package/dist/core/ingestion/pipeline-phases/orm.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/orm.js +74 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +58 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +458 -0
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +74 -0
- package/dist/core/ingestion/pipeline-phases/parse.js +33 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/processes.js +143 -0
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +21 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +243 -0
- package/dist/core/ingestion/pipeline-phases/runner.d.ts +22 -0
- package/dist/core/ingestion/pipeline-phases/runner.js +203 -0
- package/dist/core/ingestion/pipeline-phases/scan.d.ts +21 -0
- package/dist/core/ingestion/pipeline-phases/scan.js +46 -0
- package/dist/core/ingestion/pipeline-phases/structure.d.ts +27 -0
- package/dist/core/ingestion/pipeline-phases/structure.js +35 -0
- package/dist/core/ingestion/pipeline-phases/tools.d.ts +20 -0
- package/dist/core/ingestion/pipeline-phases/tools.js +79 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +79 -0
- package/dist/core/ingestion/pipeline-phases/types.js +37 -0
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +70 -0
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +312 -0
- package/dist/core/ingestion/pipeline.d.ts +36 -0
- package/dist/core/ingestion/pipeline.js +89 -0
- package/dist/core/ingestion/process-processor.d.ts +51 -0
- package/dist/core/ingestion/process-processor.js +317 -0
- package/dist/core/ingestion/registry-primary-flag.d.ts +86 -0
- package/dist/core/ingestion/registry-primary-flag.js +111 -0
- package/dist/core/ingestion/resolve-references.d.ts +63 -0
- package/dist/core/ingestion/resolve-references.js +175 -0
- package/dist/core/ingestion/route-extractors/expo.d.ts +1 -0
- package/dist/core/ingestion/route-extractors/expo.js +36 -0
- package/dist/core/ingestion/route-extractors/middleware.d.ts +47 -0
- package/dist/core/ingestion/route-extractors/middleware.js +167 -0
- package/dist/core/ingestion/route-extractors/nextjs.d.ts +3 -0
- package/dist/core/ingestion/route-extractors/nextjs.js +76 -0
- package/dist/core/ingestion/route-extractors/php.d.ts +7 -0
- package/dist/core/ingestion/route-extractors/php.js +22 -0
- package/dist/core/ingestion/route-extractors/response-shapes.d.ts +20 -0
- package/dist/core/ingestion/route-extractors/response-shapes.js +294 -0
- package/dist/core/ingestion/scope-extractor-bridge.d.ts +32 -0
- package/dist/core/ingestion/scope-extractor-bridge.js +44 -0
- package/dist/core/ingestion/scope-extractor.d.ts +86 -0
- package/dist/core/ingestion/scope-extractor.js +758 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +372 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +212 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +43 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +79 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +57 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +112 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +17 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +46 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.d.ts +19 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +30 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +37 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +113 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +38 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +73 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +42 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +198 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +27 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +131 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-return-types.d.ts +48 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-return-types.js +130 -0
- package/dist/core/ingestion/scope-resolution/passes/mro.d.ts +42 -0
- package/dist/core/ingestion/scope-resolution/passes/mro.js +99 -0
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +26 -0
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +61 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +46 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +327 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +47 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +130 -0
- package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.d.ts +68 -0
- package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +125 -0
- package/dist/core/ingestion/scope-resolution/pipeline/registry.d.ts +17 -0
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +21 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +66 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +157 -0
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +36 -0
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +52 -0
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +127 -0
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +349 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +52 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.js +61 -0
- package/dist/core/ingestion/shadow-harness.d.ts +113 -0
- package/dist/core/ingestion/shadow-harness.js +148 -0
- package/dist/core/ingestion/structure-processor.d.ts +2 -0
- package/dist/core/ingestion/structure-processor.js +36 -0
- package/dist/core/ingestion/tree-sitter-queries.d.ts +16 -0
- package/dist/core/ingestion/tree-sitter-queries.js +1338 -0
- package/dist/core/ingestion/type-env.d.ts +86 -0
- package/dist/core/ingestion/type-env.js +1128 -0
- package/dist/core/ingestion/type-extractors/c-cpp.d.ts +7 -0
- package/dist/core/ingestion/type-extractors/c-cpp.js +532 -0
- package/dist/core/ingestion/type-extractors/csharp.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/csharp.js +583 -0
- package/dist/core/ingestion/type-extractors/dart.d.ts +15 -0
- package/dist/core/ingestion/type-extractors/dart.js +369 -0
- package/dist/core/ingestion/type-extractors/go.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/go.js +513 -0
- package/dist/core/ingestion/type-extractors/jvm.d.ts +3 -0
- package/dist/core/ingestion/type-extractors/jvm.js +856 -0
- package/dist/core/ingestion/type-extractors/php.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/php.js +534 -0
- package/dist/core/ingestion/type-extractors/python.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/python.js +474 -0
- package/dist/core/ingestion/type-extractors/ruby.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/ruby.js +377 -0
- package/dist/core/ingestion/type-extractors/rust.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/rust.js +515 -0
- package/dist/core/ingestion/type-extractors/shared.d.ts +131 -0
- package/dist/core/ingestion/type-extractors/shared.js +796 -0
- package/dist/core/ingestion/type-extractors/swift.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/swift.js +484 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +172 -0
- package/dist/core/ingestion/type-extractors/types.js +1 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/typescript.js +661 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +89 -0
- package/dist/core/ingestion/utils/ast-helpers.js +535 -0
- package/dist/core/ingestion/utils/call-analysis.d.ts +75 -0
- package/dist/core/ingestion/utils/call-analysis.js +574 -0
- package/dist/core/ingestion/utils/env.d.ts +10 -0
- package/dist/core/ingestion/utils/env.js +10 -0
- package/dist/core/ingestion/utils/event-loop.d.ts +5 -0
- package/dist/core/ingestion/utils/event-loop.js +5 -0
- package/dist/core/ingestion/utils/graph-sort.d.ts +58 -0
- package/dist/core/ingestion/utils/graph-sort.js +100 -0
- package/dist/core/ingestion/utils/max-file-size.d.ts +20 -0
- package/dist/core/ingestion/utils/max-file-size.js +52 -0
- package/dist/core/ingestion/utils/method-props.d.ts +32 -0
- package/dist/core/ingestion/utils/method-props.js +147 -0
- package/dist/core/ingestion/utils/ruby-self-call.d.ts +52 -0
- package/dist/core/ingestion/utils/ruby-self-call.js +59 -0
- package/dist/core/ingestion/utils/verbose.d.ts +1 -0
- package/dist/core/ingestion/utils/verbose.js +7 -0
- package/dist/core/ingestion/variable-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +81 -0
- package/dist/core/ingestion/variable-extractors/configs/csharp.d.ts +9 -0
- package/dist/core/ingestion/variable-extractors/configs/csharp.js +63 -0
- package/dist/core/ingestion/variable-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/dart.js +94 -0
- package/dist/core/ingestion/variable-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/go.js +83 -0
- package/dist/core/ingestion/variable-extractors/configs/jvm.d.ts +18 -0
- package/dist/core/ingestion/variable-extractors/configs/jvm.js +115 -0
- package/dist/core/ingestion/variable-extractors/configs/php.d.ts +14 -0
- package/dist/core/ingestion/variable-extractors/configs/php.js +58 -0
- package/dist/core/ingestion/variable-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/python.js +101 -0
- package/dist/core/ingestion/variable-extractors/configs/ruby.d.ts +11 -0
- package/dist/core/ingestion/variable-extractors/configs/ruby.js +52 -0
- package/dist/core/ingestion/variable-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/rust.js +76 -0
- package/dist/core/ingestion/variable-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/swift.js +88 -0
- package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.js +83 -0
- package/dist/core/ingestion/variable-extractors/generic.d.ts +5 -0
- package/dist/core/ingestion/variable-extractors/generic.js +80 -0
- package/dist/core/ingestion/variable-types.d.ts +82 -0
- package/dist/core/ingestion/variable-types.js +2 -0
- package/dist/core/ingestion/vue-sfc-extractor.d.ts +44 -0
- package/dist/core/ingestion/vue-sfc-extractor.js +94 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +198 -0
- package/dist/core/ingestion/workers/parse-worker.js +1928 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +16 -0
- package/dist/core/ingestion/workers/worker-pool.js +126 -0
- package/dist/core/lbug/csv-generator.d.ts +33 -0
- package/dist/core/lbug/csv-generator.js +459 -0
- package/dist/core/lbug/lbug-adapter.d.ts +173 -0
- package/dist/core/lbug/lbug-adapter.js +1188 -0
- package/dist/core/lbug/pool-adapter.d.ts +93 -0
- package/dist/core/lbug/pool-adapter.js +543 -0
- package/dist/core/lbug/schema.d.ts +62 -0
- package/dist/core/lbug/schema.js +484 -0
- package/dist/core/run-analyze.d.ts +72 -0
- package/dist/core/run-analyze.js +315 -0
- package/dist/core/search/bm25-index.d.ts +41 -0
- package/dist/core/search/bm25-index.js +209 -0
- package/dist/core/search/hybrid-search.d.ts +49 -0
- package/dist/core/search/hybrid-search.js +118 -0
- package/dist/core/search/phase-timer.d.ts +72 -0
- package/dist/core/search/phase-timer.js +106 -0
- package/dist/core/tree-sitter/parser-loader.d.ts +8 -0
- package/dist/core/tree-sitter/parser-loader.js +84 -0
- package/dist/core/wiki/cursor-client.d.ts +31 -0
- package/dist/core/wiki/cursor-client.js +122 -0
- package/dist/core/wiki/generator.d.ts +129 -0
- package/dist/core/wiki/generator.js +898 -0
- package/dist/core/wiki/graph-queries.d.ts +84 -0
- package/dist/core/wiki/graph-queries.js +244 -0
- package/dist/core/wiki/html-viewer.d.ts +10 -0
- package/dist/core/wiki/html-viewer.js +303 -0
- package/dist/core/wiki/llm-client.d.ts +63 -0
- package/dist/core/wiki/llm-client.js +234 -0
- package/dist/core/wiki/prompts.d.ts +53 -0
- package/dist/core/wiki/prompts.js +181 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.js +3 -0
- package/dist/mcp/compatible-stdio-transport.d.ts +25 -0
- package/dist/mcp/compatible-stdio-transport.js +200 -0
- package/dist/mcp/core/embedder.d.ts +27 -0
- package/dist/mcp/core/embedder.js +122 -0
- package/dist/mcp/core/lbug-adapter.d.ts +5 -0
- package/dist/mcp/core/lbug-adapter.js +5 -0
- package/dist/mcp/local/graphstore-handler.d.ts +214 -0
- package/dist/mcp/local/graphstore-handler.js +272 -0
- package/dist/mcp/local/local-backend.d.ts +347 -0
- package/dist/mcp/local/local-backend.js +3218 -0
- package/dist/mcp/resources.d.ts +62 -0
- package/dist/mcp/resources.js +696 -0
- package/dist/mcp/server.d.ts +23 -0
- package/dist/mcp/server.js +533 -0
- package/dist/mcp/staleness.d.ts +5 -0
- package/dist/mcp/staleness.js +4 -0
- package/dist/mcp/tools.d.ts +27 -0
- package/dist/mcp/tools.js +823 -0
- package/dist/server/analyze-job.d.ts +55 -0
- package/dist/server/analyze-job.js +150 -0
- package/dist/server/analyze-worker.d.ts +13 -0
- package/dist/server/analyze-worker.js +59 -0
- package/dist/server/api.d.ts +47 -0
- package/dist/server/api.js +1727 -0
- package/dist/server/git-clone.d.ts +26 -0
- package/dist/server/git-clone.js +184 -0
- package/dist/server/mcp-http.d.ts +13 -0
- package/dist/server/mcp-http.js +100 -0
- package/dist/storage/git.d.ts +80 -0
- package/dist/storage/git.js +190 -0
- package/dist/storage/repo-manager.d.ts +458 -0
- package/dist/storage/repo-manager.js +766 -0
- package/dist/types/pipeline.d.ts +18 -0
- package/dist/types/pipeline.js +1 -0
- package/hooks/claude/codragraph-hook.cjs +268 -0
- package/hooks/claude/pre-tool-use.sh +79 -0
- package/hooks/claude/session-start.sh +42 -0
- package/package.json +127 -0
- package/scripts/bench-scope-resolution.ts +134 -0
- package/scripts/build-tree-sitter-proto.cjs +82 -0
- package/scripts/build.js +90 -0
- package/scripts/ci-list-migrated-languages.ts +24 -0
- package/scripts/patch-tree-sitter-swift.cjs +78 -0
- package/skills/codragraph-cli.md +82 -0
- package/skills/codragraph-debugging.md +89 -0
- package/skills/codragraph-exploring.md +78 -0
- package/skills/codragraph-guide.md +64 -0
- package/skills/codragraph-impact-analysis.md +97 -0
- package/skills/codragraph-pr-review.md +163 -0
- package/skills/codragraph-refactoring.md +121 -0
- package/vendor/leiden/index.cjs +355 -0
- package/vendor/leiden/utils.cjs +392 -0
- package/vendor/tree-sitter-proto/binding.gyp +30 -0
- package/vendor/tree-sitter-proto/bindings/node/binding.cc +20 -0
- package/vendor/tree-sitter-proto/bindings/node/index.d.ts +28 -0
- package/vendor/tree-sitter-proto/bindings/node/index.js +7 -0
- package/vendor/tree-sitter-proto/package.json +12 -0
- package/vendor/tree-sitter-proto/src/node-types.json +1145 -0
- package/vendor/tree-sitter-proto/src/parser.c +10149 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/alloc.h +54 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/array.h +291 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/parser.h +266 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Analysis Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Extracts the core analysis pipeline from the CLI analyze command into a
|
|
5
|
+
* reusable function that can be called from both the CLI and a server-side
|
|
6
|
+
* worker process.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: This module must NEVER call process.exit(). The caller (CLI
|
|
9
|
+
* wrapper or server worker) is responsible for process lifecycle.
|
|
10
|
+
*/
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import fs from 'fs/promises';
|
|
13
|
+
import { runPipelineFromRepo } from './ingestion/pipeline.js';
|
|
14
|
+
import { initLbug, loadGraphToLbug, getLbugStats, executeQuery, executeWithReusedStatement, closeLbug, loadCachedEmbeddings, } from './lbug/lbug-adapter.js';
|
|
15
|
+
import { getStoragePaths, saveMeta, loadMeta, addToGitignore, registerRepo, cleanupOldKuzuFiles, } from '../storage/repo-manager.js';
|
|
16
|
+
import { getCurrentCommit, getRemoteUrl, hasGitDir, getInferredRepoName } from '../storage/git.js';
|
|
17
|
+
import { recordAnalysisSnapshot } from './graphstore/index.js';
|
|
18
|
+
import { generateAIContextFiles } from '../cli/ai-context.js';
|
|
19
|
+
import { EMBEDDING_TABLE_NAME } from './lbug/schema.js';
|
|
20
|
+
import { STALE_HASH_SENTINEL } from './lbug/schema.js';
|
|
21
|
+
/** Threshold: auto-skip embeddings for repos with more nodes than this */
|
|
22
|
+
const EMBEDDING_NODE_LIMIT = 50_000;
|
|
23
|
+
export const PHASE_LABELS = {
|
|
24
|
+
extracting: 'Scanning files',
|
|
25
|
+
structure: 'Building structure',
|
|
26
|
+
parsing: 'Parsing code',
|
|
27
|
+
imports: 'Resolving imports',
|
|
28
|
+
calls: 'Tracing calls',
|
|
29
|
+
heritage: 'Extracting inheritance',
|
|
30
|
+
communities: 'Detecting communities',
|
|
31
|
+
processes: 'Detecting processes',
|
|
32
|
+
complete: 'Pipeline complete',
|
|
33
|
+
lbug: 'Loading into LadybugDB',
|
|
34
|
+
fts: 'Creating search indexes',
|
|
35
|
+
embeddings: 'Generating embeddings',
|
|
36
|
+
done: 'Done',
|
|
37
|
+
};
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Main orchestrator
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Run the full CodraGraph analysis pipeline.
|
|
43
|
+
*
|
|
44
|
+
* This is the shared core extracted from the CLI `analyze` command. It
|
|
45
|
+
* handles: pipeline execution, LadybugDB loading, FTS indexing, embedding
|
|
46
|
+
* generation, metadata persistence, and AI context file generation.
|
|
47
|
+
*
|
|
48
|
+
* The function communicates progress and log messages exclusively through
|
|
49
|
+
* the {@link AnalyzeCallbacks} interface — it never writes to stdout/stderr
|
|
50
|
+
* directly and never calls `process.exit()`.
|
|
51
|
+
*/
|
|
52
|
+
export async function runFullAnalysis(repoPath, options, callbacks) {
|
|
53
|
+
const log = (msg) => callbacks.onLog?.(msg);
|
|
54
|
+
const progress = (phase, percent, message) => callbacks.onProgress(phase, percent, message);
|
|
55
|
+
const { storagePath, lbugPath } = getStoragePaths(repoPath);
|
|
56
|
+
// Clean up stale KuzuDB files from before the LadybugDB migration.
|
|
57
|
+
const kuzuResult = await cleanupOldKuzuFiles(storagePath);
|
|
58
|
+
if (kuzuResult.found && kuzuResult.needsReindex) {
|
|
59
|
+
log('Migrating from KuzuDB to LadybugDB — rebuilding index...');
|
|
60
|
+
}
|
|
61
|
+
const repoHasGit = hasGitDir(repoPath);
|
|
62
|
+
const currentCommit = repoHasGit ? getCurrentCommit(repoPath) : '';
|
|
63
|
+
const existingMeta = await loadMeta(storagePath);
|
|
64
|
+
// ── Early-return: already up to date ──────────────────────────────
|
|
65
|
+
if (existingMeta && !options.force && existingMeta.lastCommit === currentCommit) {
|
|
66
|
+
// Non-git folders have currentCommit = '' — always rebuild since we can't detect changes
|
|
67
|
+
if (currentCommit !== '') {
|
|
68
|
+
return {
|
|
69
|
+
repoName: options.registryName ?? getInferredRepoName(repoPath) ?? path.basename(repoPath),
|
|
70
|
+
repoPath,
|
|
71
|
+
stats: existingMeta.stats ?? {},
|
|
72
|
+
alreadyUpToDate: true,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ── Cache embeddings from existing index before rebuild ────────────
|
|
77
|
+
let cachedEmbeddingNodeIds = new Set();
|
|
78
|
+
let cachedEmbeddings = [];
|
|
79
|
+
if (options.embeddings && existingMeta && !options.force) {
|
|
80
|
+
try {
|
|
81
|
+
progress('embeddings', 0, 'Caching embeddings...');
|
|
82
|
+
await initLbug(lbugPath);
|
|
83
|
+
const cached = await loadCachedEmbeddings();
|
|
84
|
+
cachedEmbeddingNodeIds = cached.embeddingNodeIds;
|
|
85
|
+
cachedEmbeddings = cached.embeddings;
|
|
86
|
+
await closeLbug();
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
try {
|
|
90
|
+
await closeLbug();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
/* swallow */
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ── Phase 1: Full Pipeline (0–60%) ────────────────────────────────
|
|
98
|
+
const pipelineResult = await runPipelineFromRepo(repoPath, (p) => {
|
|
99
|
+
const phaseLabel = PHASE_LABELS[p.phase] || p.phase;
|
|
100
|
+
const scaled = Math.round(p.percent * 0.6);
|
|
101
|
+
progress(p.phase, scaled, phaseLabel);
|
|
102
|
+
});
|
|
103
|
+
// ── Phase 2: LadybugDB (60–85%) ──────────────────────────────────
|
|
104
|
+
progress('lbug', 60, 'Loading into LadybugDB...');
|
|
105
|
+
await closeLbug();
|
|
106
|
+
const lbugFiles = [lbugPath, `${lbugPath}.wal`, `${lbugPath}.lock`];
|
|
107
|
+
for (const f of lbugFiles) {
|
|
108
|
+
try {
|
|
109
|
+
await fs.rm(f, { recursive: true, force: true });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
/* swallow */
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
await initLbug(lbugPath);
|
|
116
|
+
try {
|
|
117
|
+
// All work after initLbug is wrapped in try/finally to ensure closeLbug()
|
|
118
|
+
// is called even if an error occurs — the module-level singleton DB handle
|
|
119
|
+
// must be released to avoid blocking subsequent invocations.
|
|
120
|
+
let lbugMsgCount = 0;
|
|
121
|
+
await loadGraphToLbug(pipelineResult.graph, pipelineResult.repoPath, storagePath, (msg) => {
|
|
122
|
+
lbugMsgCount++;
|
|
123
|
+
const pct = Math.min(84, 60 + Math.round((lbugMsgCount / (lbugMsgCount + 10)) * 24));
|
|
124
|
+
progress('lbug', pct, msg);
|
|
125
|
+
});
|
|
126
|
+
// ── Phase 2.5: Versioned-graph snapshot (best-effort) ────────────
|
|
127
|
+
// Phase 4 hook: snapshot the freshly-loaded graph into the
|
|
128
|
+
// content-addressed `.codragraph/graphstore/`. Failures here do NOT
|
|
129
|
+
// break analyze — the user keeps a working LadybugDB index either
|
|
130
|
+
// way, they just don't get a versioning record for this run.
|
|
131
|
+
let graphstoreCurrentBranch;
|
|
132
|
+
let graphstoreHeadCommit;
|
|
133
|
+
try {
|
|
134
|
+
const snapshotResult = await recordAnalysisSnapshot({
|
|
135
|
+
storagePath,
|
|
136
|
+
indexedRepoCommit: currentCommit || undefined,
|
|
137
|
+
onSkipTable: (tableName, err) => {
|
|
138
|
+
log(`graphstore: skipped table "${tableName}": ${err instanceof Error ? err.message : String(err)}`);
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (snapshotResult) {
|
|
142
|
+
graphstoreCurrentBranch = snapshotResult.branch;
|
|
143
|
+
graphstoreHeadCommit = snapshotResult.commitId;
|
|
144
|
+
log(`graphstore: snapshot ${snapshotResult.snapshotId.slice(0, 19)}… ` +
|
|
145
|
+
`commit ${snapshotResult.commitId.slice(0, 19)}… ` +
|
|
146
|
+
`branch ${snapshotResult.branch}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
log(`graphstore: snapshot failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
151
|
+
}
|
|
152
|
+
// ── Phase 3: FTS (85–90%) ─────────────────────────────────────────
|
|
153
|
+
// FTS indexes are created lazily on first `query`/`context` call instead
|
|
154
|
+
// of eagerly here. On small repos / CI runners the LadybugDB
|
|
155
|
+
// CREATE_FTS_INDEX cost is ~440 ms × 5 (≈2 s) regardless of table size,
|
|
156
|
+
// which dominated `analyze` runtime and pushed Windows CI past its
|
|
157
|
+
// 30 s test budget. Lazy creation is implemented in
|
|
158
|
+
// `core/search/bm25-index.ts` via `ensureFTSIndex`.
|
|
159
|
+
// ── Phase 3.5: Re-insert cached embeddings ────────────────────────
|
|
160
|
+
if (cachedEmbeddings.length > 0) {
|
|
161
|
+
const cachedDims = cachedEmbeddings[0].embedding.length;
|
|
162
|
+
const { EMBEDDING_DIMS } = await import('./lbug/schema.js');
|
|
163
|
+
if (cachedDims !== EMBEDDING_DIMS) {
|
|
164
|
+
// Dimensions changed (e.g. switched embedding model) — discard cache and re-embed all
|
|
165
|
+
log(`Embedding dimensions changed (${cachedDims}d -> ${EMBEDDING_DIMS}d), discarding cache`);
|
|
166
|
+
cachedEmbeddings = [];
|
|
167
|
+
cachedEmbeddingNodeIds = new Set();
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
progress('embeddings', 88, `Restoring ${cachedEmbeddings.length} cached embeddings...`);
|
|
171
|
+
const { batchInsertEmbeddings: batchInsert } = await import('./embeddings/embedding-pipeline.js');
|
|
172
|
+
const EMBED_BATCH = 200;
|
|
173
|
+
for (let i = 0; i < cachedEmbeddings.length; i += EMBED_BATCH) {
|
|
174
|
+
const batch = cachedEmbeddings.slice(i, i + EMBED_BATCH);
|
|
175
|
+
try {
|
|
176
|
+
await batchInsert(executeWithReusedStatement, batch);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
/* some may fail if node was removed, that's fine */
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// ── Phase 4: Embeddings (90–98%) ──────────────────────────────────
|
|
185
|
+
const stats = await getLbugStats();
|
|
186
|
+
let embeddingSkipped = true;
|
|
187
|
+
if (options.embeddings) {
|
|
188
|
+
if (stats.nodes <= EMBEDDING_NODE_LIMIT) {
|
|
189
|
+
embeddingSkipped = false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (!embeddingSkipped) {
|
|
193
|
+
const { isHttpMode } = await import('./embeddings/http-client.js');
|
|
194
|
+
const httpMode = isHttpMode();
|
|
195
|
+
progress('embeddings', 90, httpMode ? 'Connecting to embedding endpoint...' : 'Loading embedding model...');
|
|
196
|
+
const { runEmbeddingPipeline } = await import('./embeddings/embedding-pipeline.js');
|
|
197
|
+
// Build a Map<nodeId, contentHash> from cached embeddings for incremental mode
|
|
198
|
+
let existingEmbeddings;
|
|
199
|
+
if (cachedEmbeddingNodeIds.size > 0) {
|
|
200
|
+
existingEmbeddings = new Map();
|
|
201
|
+
for (const e of cachedEmbeddings) {
|
|
202
|
+
existingEmbeddings.set(e.nodeId, e.contentHash ?? STALE_HASH_SENTINEL);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const { readServerMapping } = await import('./embeddings/server-mapping.js');
|
|
206
|
+
const projectName = path.basename(repoPath);
|
|
207
|
+
const serverName = await readServerMapping(projectName);
|
|
208
|
+
await runEmbeddingPipeline(executeQuery, executeWithReusedStatement, (p) => {
|
|
209
|
+
const scaled = 90 + Math.round((p.percent / 100) * 8);
|
|
210
|
+
const label = p.phase === 'loading-model'
|
|
211
|
+
? httpMode
|
|
212
|
+
? 'Connecting to embedding endpoint...'
|
|
213
|
+
: 'Loading embedding model...'
|
|
214
|
+
: `Embedding ${p.nodesProcessed || 0}/${p.totalNodes || '?'}`;
|
|
215
|
+
progress('embeddings', scaled, label);
|
|
216
|
+
}, {}, cachedEmbeddingNodeIds.size > 0 ? cachedEmbeddingNodeIds : undefined, { repoName: projectName, serverName }, existingEmbeddings);
|
|
217
|
+
}
|
|
218
|
+
// ── Phase 5: Finalize (98–100%) ───────────────────────────────────
|
|
219
|
+
progress('done', 98, 'Saving metadata...');
|
|
220
|
+
// Count embeddings in the index (cached + newly generated)
|
|
221
|
+
let embeddingCount = 0;
|
|
222
|
+
try {
|
|
223
|
+
const embResult = await executeQuery(`MATCH (e:${EMBEDDING_TABLE_NAME}) RETURN count(e) AS cnt`);
|
|
224
|
+
embeddingCount = embResult?.[0]?.cnt ?? 0;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
/* table may not exist if embeddings never ran */
|
|
228
|
+
}
|
|
229
|
+
const meta = {
|
|
230
|
+
repoPath,
|
|
231
|
+
lastCommit: currentCommit,
|
|
232
|
+
indexedAt: new Date().toISOString(),
|
|
233
|
+
// Captured here (not at registration) so it travels with the
|
|
234
|
+
// on-disk meta.json — sibling-clone fingerprinting works for
|
|
235
|
+
// out-of-tree consumers (group-status, future tooling) without
|
|
236
|
+
// a second git shellout. `undefined` when the repo has no
|
|
237
|
+
// origin remote, which is fine: paths-only repos behave as
|
|
238
|
+
// before.
|
|
239
|
+
remoteUrl: hasGitDir(repoPath) ? getRemoteUrl(repoPath) : undefined,
|
|
240
|
+
// Phase 4: written when the best-effort graphstore snapshot
|
|
241
|
+
// succeeded; absent otherwise so older meta consumers that don't
|
|
242
|
+
// know about these fields keep working.
|
|
243
|
+
currentBranch: graphstoreCurrentBranch,
|
|
244
|
+
headCommit: graphstoreHeadCommit,
|
|
245
|
+
stats: {
|
|
246
|
+
files: pipelineResult.totalFileCount,
|
|
247
|
+
nodes: stats.nodes,
|
|
248
|
+
edges: stats.edges,
|
|
249
|
+
communities: pipelineResult.communityResult?.stats.totalCommunities,
|
|
250
|
+
processes: pipelineResult.processResult?.stats.totalProcesses,
|
|
251
|
+
embeddings: embeddingCount,
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
await saveMeta(storagePath, meta);
|
|
255
|
+
// Forward the --name alias and the registry-collision bypass bit.
|
|
256
|
+
// `allowDuplicateName` is its own concern — independent from the
|
|
257
|
+
// pipeline `force` above. The CLI maps it from
|
|
258
|
+
// `--allow-duplicate-name` only; `--force` and `--skills` both
|
|
259
|
+
// trigger pipeline re-run but never bypass the registry guard.
|
|
260
|
+
// The returned name is the one actually written to the registry
|
|
261
|
+
// (after applying the precedence chain in registerRepo) — reuse it
|
|
262
|
+
// so AGENTS.md / skill files reference the same name MCP clients
|
|
263
|
+
// will look up (#979).
|
|
264
|
+
const projectName = await registerRepo(repoPath, meta, {
|
|
265
|
+
name: options.registryName,
|
|
266
|
+
allowDuplicateName: options.allowDuplicateName,
|
|
267
|
+
});
|
|
268
|
+
// Only attempt to update .gitignore when a .git directory is present.
|
|
269
|
+
if (hasGitDir(repoPath)) {
|
|
270
|
+
await addToGitignore(repoPath);
|
|
271
|
+
}
|
|
272
|
+
// ── Generate AI context files (best-effort) ───────────────────────
|
|
273
|
+
let aggregatedClusterCount = 0;
|
|
274
|
+
if (pipelineResult.communityResult?.communities) {
|
|
275
|
+
const groups = new Map();
|
|
276
|
+
for (const c of pipelineResult.communityResult.communities) {
|
|
277
|
+
const label = c.heuristicLabel || c.label || 'Unknown';
|
|
278
|
+
groups.set(label, (groups.get(label) || 0) + c.symbolCount);
|
|
279
|
+
}
|
|
280
|
+
aggregatedClusterCount = Array.from(groups.values()).filter((count) => count >= 5).length;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
await generateAIContextFiles(repoPath, storagePath, projectName, {
|
|
284
|
+
files: pipelineResult.totalFileCount,
|
|
285
|
+
nodes: stats.nodes,
|
|
286
|
+
edges: stats.edges,
|
|
287
|
+
communities: pipelineResult.communityResult?.stats.totalCommunities,
|
|
288
|
+
clusters: aggregatedClusterCount,
|
|
289
|
+
processes: pipelineResult.processResult?.stats.totalProcesses,
|
|
290
|
+
}, undefined, { skipAgentsMd: options.skipAgentsMd, noStats: options.noStats });
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Best-effort — don't fail the entire analysis for context file issues
|
|
294
|
+
}
|
|
295
|
+
// ── Close LadybugDB ──────────────────────────────────────────────
|
|
296
|
+
await closeLbug();
|
|
297
|
+
progress('done', 100, 'Done');
|
|
298
|
+
return {
|
|
299
|
+
repoName: projectName,
|
|
300
|
+
repoPath,
|
|
301
|
+
stats: meta.stats,
|
|
302
|
+
pipelineResult,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
// Ensure LadybugDB is closed even on error
|
|
307
|
+
try {
|
|
308
|
+
await closeLbug();
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
/* swallow */
|
|
312
|
+
}
|
|
313
|
+
throw err;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-Text Search via LadybugDB FTS
|
|
3
|
+
*
|
|
4
|
+
* Uses LadybugDB's built-in full-text search indexes for keyword-based search.
|
|
5
|
+
* Always reads from the database (no cached state to drift).
|
|
6
|
+
*
|
|
7
|
+
* FTS indexes are created lazily on first query (via `ensureFTSIndex`) — see
|
|
8
|
+
* `lbug-adapter.ts` for the rationale. This keeps `analyze` fast (the
|
|
9
|
+
* ~440 ms × 5 LadybugDB CREATE_FTS_INDEX cost dominates pipeline time on
|
|
10
|
+
* small repos / CI runners) at the cost of paying that overhead on the
|
|
11
|
+
* first `query`/`context` call in a session.
|
|
12
|
+
*/
|
|
13
|
+
export interface BM25SearchResult {
|
|
14
|
+
filePath: string;
|
|
15
|
+
score: number;
|
|
16
|
+
rank: number;
|
|
17
|
+
nodeIds?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Drop all ensured-FTS cache entries for a given repoId.
|
|
21
|
+
*
|
|
22
|
+
* Called from the pool-close listener so that a pool teardown / recreation
|
|
23
|
+
* forces the next `searchFTSFromLbug` call to re-issue `CREATE_FTS_INDEX`
|
|
24
|
+
* against the fresh connection rather than trust stale ensure-state from a
|
|
25
|
+
* previous pool lifetime.
|
|
26
|
+
*
|
|
27
|
+
* Exported for tests; the listener wiring is internal.
|
|
28
|
+
*/
|
|
29
|
+
export declare function invalidateEnsuredFTSForRepo(repoId: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Search using LadybugDB's built-in FTS (always fresh, reads from disk)
|
|
32
|
+
*
|
|
33
|
+
* Queries multiple node tables (File, Function, Class, Method) in parallel
|
|
34
|
+
* and merges results by filePath, summing scores for the same file.
|
|
35
|
+
*
|
|
36
|
+
* @param query - Search query string
|
|
37
|
+
* @param limit - Maximum results
|
|
38
|
+
* @param repoId - If provided, queries will be routed via the MCP connection pool
|
|
39
|
+
* @returns Ranked search results from FTS indexes
|
|
40
|
+
*/
|
|
41
|
+
export declare const searchFTSFromLbug: (query: string, limit?: number, repoId?: string) => Promise<BM25SearchResult[]>;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-Text Search via LadybugDB FTS
|
|
3
|
+
*
|
|
4
|
+
* Uses LadybugDB's built-in full-text search indexes for keyword-based search.
|
|
5
|
+
* Always reads from the database (no cached state to drift).
|
|
6
|
+
*
|
|
7
|
+
* FTS indexes are created lazily on first query (via `ensureFTSIndex`) — see
|
|
8
|
+
* `lbug-adapter.ts` for the rationale. This keeps `analyze` fast (the
|
|
9
|
+
* ~440 ms × 5 LadybugDB CREATE_FTS_INDEX cost dominates pipeline time on
|
|
10
|
+
* small repos / CI runners) at the cost of paying that overhead on the
|
|
11
|
+
* first `query`/`context` call in a session.
|
|
12
|
+
*/
|
|
13
|
+
import { queryFTS, ensureFTSIndex } from '../lbug/lbug-adapter.js';
|
|
14
|
+
/**
|
|
15
|
+
* FTS schema served by `searchFTSFromLbug`. Centralised so that both the
|
|
16
|
+
* CLI/pipeline path and the MCP pool path use identical (table, index,
|
|
17
|
+
* properties) tuples and the lazy-create logic stays in one place.
|
|
18
|
+
*/
|
|
19
|
+
const FTS_INDEXES = [
|
|
20
|
+
{ table: 'File', indexName: 'file_fts', properties: ['name', 'content'] },
|
|
21
|
+
{ table: 'Function', indexName: 'function_fts', properties: ['name', 'content'] },
|
|
22
|
+
{ table: 'Class', indexName: 'class_fts', properties: ['name', 'content'] },
|
|
23
|
+
{ table: 'Method', indexName: 'method_fts', properties: ['name', 'content'] },
|
|
24
|
+
{ table: 'Interface', indexName: 'interface_fts', properties: ['name', 'content'] },
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Per-process cache for the MCP pool path: tracks which `(repoId, table)`
|
|
28
|
+
* pairs have been ensured. The CLI/pipeline path gets its own cache inside
|
|
29
|
+
* `lbug-adapter.ts` keyed by table/index, scoped to the singleton connection.
|
|
30
|
+
*
|
|
31
|
+
* IMPORTANT: an entry is added ONLY when the index was confirmed to exist
|
|
32
|
+
* (CREATE_FTS_INDEX succeeded, or failed with `'already exists'`). Other
|
|
33
|
+
* failures (transient lock errors, missing extension, etc.) leave the key
|
|
34
|
+
* unset so the next query retries instead of silently caching the failure.
|
|
35
|
+
*
|
|
36
|
+
* Entries for a given repoId are invalidated when its pool is closed —
|
|
37
|
+
* see the `addPoolCloseListener` registration in `searchFTSFromLbug`.
|
|
38
|
+
*/
|
|
39
|
+
const ensuredPoolFTS = new Set();
|
|
40
|
+
/**
|
|
41
|
+
* Drop all ensured-FTS cache entries for a given repoId.
|
|
42
|
+
*
|
|
43
|
+
* Called from the pool-close listener so that a pool teardown / recreation
|
|
44
|
+
* forces the next `searchFTSFromLbug` call to re-issue `CREATE_FTS_INDEX`
|
|
45
|
+
* against the fresh connection rather than trust stale ensure-state from a
|
|
46
|
+
* previous pool lifetime.
|
|
47
|
+
*
|
|
48
|
+
* Exported for tests; the listener wiring is internal.
|
|
49
|
+
*/
|
|
50
|
+
export function invalidateEnsuredFTSForRepo(repoId) {
|
|
51
|
+
const prefix = `${repoId}:`;
|
|
52
|
+
for (const key of ensuredPoolFTS) {
|
|
53
|
+
if (key.startsWith(prefix))
|
|
54
|
+
ensuredPoolFTS.delete(key);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Tracks whether we've already wired the pool-close listener for this
|
|
59
|
+
* process. The pool adapter is dynamically imported, so registration
|
|
60
|
+
* happens lazily on the first MCP-pool-backed FTS query.
|
|
61
|
+
*/
|
|
62
|
+
let poolCloseListenerRegistered = false;
|
|
63
|
+
function registerPoolCloseListenerOnce(addPoolCloseListener) {
|
|
64
|
+
if (poolCloseListenerRegistered)
|
|
65
|
+
return;
|
|
66
|
+
poolCloseListenerRegistered = true;
|
|
67
|
+
addPoolCloseListener((repoId) => invalidateEnsuredFTSForRepo(repoId));
|
|
68
|
+
}
|
|
69
|
+
async function ensureFTSIndexViaExecutor(executor, repoId, table, indexName, properties) {
|
|
70
|
+
const key = `${repoId}:${table}:${indexName}`;
|
|
71
|
+
if (ensuredPoolFTS.has(key))
|
|
72
|
+
return;
|
|
73
|
+
const propList = properties.map((p) => `'${p}'`).join(', ');
|
|
74
|
+
try {
|
|
75
|
+
await executor(`CALL CREATE_FTS_INDEX('${table}', '${indexName}', [${propList}], stemmer := 'porter')`);
|
|
76
|
+
// Index was created successfully — safe to cache.
|
|
77
|
+
ensuredPoolFTS.add(key);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
// 'already exists' is the happy path (index persists on disk between
|
|
81
|
+
// process invocations) — cache it. Anything else is treated as a
|
|
82
|
+
// transient failure: surface a one-time warning and leave the key
|
|
83
|
+
// unset so the NEXT query retries rather than silently using a
|
|
84
|
+
// cached failure (which previously disabled BM25 for the whole
|
|
85
|
+
// process for that repo).
|
|
86
|
+
const msg = String(e?.message ?? '');
|
|
87
|
+
if (msg.includes('already exists')) {
|
|
88
|
+
ensuredPoolFTS.add(key);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.warn(`[codragraph] FTS index ensure failed for repo "${repoId}" table "${table}" ` +
|
|
92
|
+
`(index "${indexName}"): ${msg || e}. Will retry on next query.`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Execute a single FTS query via a custom executor (for MCP connection pool).
|
|
98
|
+
* Returns the same shape as core queryFTS (from LadybugDB adapter).
|
|
99
|
+
*/
|
|
100
|
+
async function queryFTSViaExecutor(executor, tableName, indexName, query, limit) {
|
|
101
|
+
// Escape single quotes and backslashes to prevent Cypher injection
|
|
102
|
+
const escapedQuery = query.replace(/\\/g, '\\\\').replace(/'/g, "''");
|
|
103
|
+
const cypher = `
|
|
104
|
+
CALL QUERY_FTS_INDEX('${tableName}', '${indexName}', '${escapedQuery}', conjunctive := false)
|
|
105
|
+
RETURN node, score
|
|
106
|
+
ORDER BY score DESC
|
|
107
|
+
LIMIT ${limit}
|
|
108
|
+
`;
|
|
109
|
+
try {
|
|
110
|
+
const rows = await executor(cypher);
|
|
111
|
+
return rows.map((row) => {
|
|
112
|
+
const node = row.node || row[0] || {};
|
|
113
|
+
const score = row.score ?? row[1] ?? 0;
|
|
114
|
+
return {
|
|
115
|
+
filePath: node.filePath || '',
|
|
116
|
+
score: typeof score === 'number' ? score : parseFloat(score) || 0,
|
|
117
|
+
nodeId: node.nodeId || node.id || '',
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Search using LadybugDB's built-in FTS (always fresh, reads from disk)
|
|
127
|
+
*
|
|
128
|
+
* Queries multiple node tables (File, Function, Class, Method) in parallel
|
|
129
|
+
* and merges results by filePath, summing scores for the same file.
|
|
130
|
+
*
|
|
131
|
+
* @param query - Search query string
|
|
132
|
+
* @param limit - Maximum results
|
|
133
|
+
* @param repoId - If provided, queries will be routed via the MCP connection pool
|
|
134
|
+
* @returns Ranked search results from FTS indexes
|
|
135
|
+
*/
|
|
136
|
+
export const searchFTSFromLbug = async (query, limit = 20, repoId) => {
|
|
137
|
+
let fileResults, functionResults, classResults, methodResults, interfaceResults;
|
|
138
|
+
if (repoId) {
|
|
139
|
+
// Use MCP connection pool via dynamic import
|
|
140
|
+
// IMPORTANT: FTS queries run sequentially to avoid connection contention.
|
|
141
|
+
// The MCP pool supports multiple connections, but FTS is best run serially.
|
|
142
|
+
const poolMod = await import('../lbug/pool-adapter.js');
|
|
143
|
+
const { executeQuery, addPoolCloseListener } = poolMod;
|
|
144
|
+
// Register the pool-close listener lazily on first use so a teardown of
|
|
145
|
+
// the pool entry (LRU eviction, idle timeout, explicit close) drops the
|
|
146
|
+
// matching `ensuredPoolFTS` entries. Without this, stale ensure-state
|
|
147
|
+
// can outlive the pool that produced it.
|
|
148
|
+
registerPoolCloseListenerOnce(addPoolCloseListener);
|
|
149
|
+
const executor = (cypher) => executeQuery(repoId, cypher);
|
|
150
|
+
// Lazy-create FTS indexes on first query for this repo (analyze no longer
|
|
151
|
+
// creates them up-front, so we ensure them here). Cached per-process.
|
|
152
|
+
for (const { table, indexName, properties } of FTS_INDEXES) {
|
|
153
|
+
await ensureFTSIndexViaExecutor(executor, repoId, table, indexName, properties);
|
|
154
|
+
}
|
|
155
|
+
fileResults = await queryFTSViaExecutor(executor, 'File', 'file_fts', query, limit);
|
|
156
|
+
functionResults = await queryFTSViaExecutor(executor, 'Function', 'function_fts', query, limit);
|
|
157
|
+
classResults = await queryFTSViaExecutor(executor, 'Class', 'class_fts', query, limit);
|
|
158
|
+
methodResults = await queryFTSViaExecutor(executor, 'Method', 'method_fts', query, limit);
|
|
159
|
+
interfaceResults = await queryFTSViaExecutor(executor, 'Interface', 'interface_fts', query, limit);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Use core lbug adapter (CLI / pipeline context) — also sequential for safety.
|
|
163
|
+
// Lazy-create FTS indexes on first query (analyze no longer does it).
|
|
164
|
+
for (const { table, indexName, properties } of FTS_INDEXES) {
|
|
165
|
+
await ensureFTSIndex(table, indexName, [...properties]).catch(() => { });
|
|
166
|
+
}
|
|
167
|
+
fileResults = await queryFTS('File', 'file_fts', query, limit, false).catch(() => []);
|
|
168
|
+
functionResults = await queryFTS('Function', 'function_fts', query, limit, false).catch(() => []);
|
|
169
|
+
classResults = await queryFTS('Class', 'class_fts', query, limit, false).catch(() => []);
|
|
170
|
+
methodResults = await queryFTS('Method', 'method_fts', query, limit, false).catch(() => []);
|
|
171
|
+
interfaceResults = await queryFTS('Interface', 'interface_fts', query, limit, false).catch(() => []);
|
|
172
|
+
}
|
|
173
|
+
// Collect all node scores per filePath to track which nodes actually matched
|
|
174
|
+
const fileNodeScores = new Map();
|
|
175
|
+
const addResults = (results) => {
|
|
176
|
+
for (const r of results) {
|
|
177
|
+
if (!fileNodeScores.has(r.filePath))
|
|
178
|
+
fileNodeScores.set(r.filePath, []);
|
|
179
|
+
fileNodeScores.get(r.filePath).push({ score: r.score, nodeId: r.nodeId });
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
addResults(fileResults);
|
|
183
|
+
addResults(functionResults);
|
|
184
|
+
addResults(classResults);
|
|
185
|
+
addResults(methodResults);
|
|
186
|
+
addResults(interfaceResults);
|
|
187
|
+
// Sum the top-3 highest-scoring nodes per file and collect their nodeIds.
|
|
188
|
+
// Summing all nodes naively inflates scores for files with many mediocre
|
|
189
|
+
// matches (e.g. test files) over files with a single highly-relevant symbol.
|
|
190
|
+
const merged = new Map();
|
|
191
|
+
for (const [filePath, entries] of fileNodeScores) {
|
|
192
|
+
const top3 = [...entries].sort((a, b) => b.score - a.score).slice(0, 3);
|
|
193
|
+
merged.set(filePath, {
|
|
194
|
+
filePath,
|
|
195
|
+
score: top3.reduce((acc, e) => acc + e.score, 0),
|
|
196
|
+
nodeIds: top3.map((e) => e.nodeId).filter((id) => id),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// Sort by score descending and add rank
|
|
200
|
+
const sorted = Array.from(merged.values())
|
|
201
|
+
.sort((a, b) => b.score - a.score)
|
|
202
|
+
.slice(0, limit);
|
|
203
|
+
return sorted.map((r, index) => ({
|
|
204
|
+
filePath: r.filePath,
|
|
205
|
+
score: r.score,
|
|
206
|
+
rank: index + 1,
|
|
207
|
+
nodeIds: r.nodeIds,
|
|
208
|
+
}));
|
|
209
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Search with Reciprocal Rank Fusion (RRF)
|
|
3
|
+
*
|
|
4
|
+
* Combines BM25 (keyword) and semantic (embedding) search results.
|
|
5
|
+
* Uses RRF to merge rankings without needing score normalization.
|
|
6
|
+
*
|
|
7
|
+
* This is the same approach used by Elasticsearch, Pinecone, and other
|
|
8
|
+
* production search systems.
|
|
9
|
+
*/
|
|
10
|
+
import { type BM25SearchResult } from './bm25-index.js';
|
|
11
|
+
import type { SemanticSearchResult } from '../embeddings/types.js';
|
|
12
|
+
export interface HybridSearchResult {
|
|
13
|
+
filePath: string;
|
|
14
|
+
score: number;
|
|
15
|
+
rank: number;
|
|
16
|
+
sources: ('bm25' | 'semantic')[];
|
|
17
|
+
nodeId?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
label?: string;
|
|
20
|
+
startLine?: number;
|
|
21
|
+
endLine?: number;
|
|
22
|
+
bm25Score?: number;
|
|
23
|
+
semanticScore?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Perform hybrid search combining BM25 and semantic results
|
|
27
|
+
*
|
|
28
|
+
* @param bm25Results - Results from BM25 keyword search
|
|
29
|
+
* @param semanticResults - Results from semantic/embedding search
|
|
30
|
+
* @param limit - Maximum results to return
|
|
31
|
+
* @returns Merged and re-ranked results
|
|
32
|
+
*/
|
|
33
|
+
export declare const mergeWithRRF: (bm25Results: BM25SearchResult[], semanticResults: SemanticSearchResult[], limit?: number) => HybridSearchResult[];
|
|
34
|
+
/**
|
|
35
|
+
* Check if hybrid search is available
|
|
36
|
+
* LadybugDB FTS is always available once the database is initialized.
|
|
37
|
+
* Semantic search is optional - hybrid works with just FTS if embeddings aren't ready.
|
|
38
|
+
*/
|
|
39
|
+
export declare const isHybridSearchReady: () => boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Format hybrid results for LLM consumption
|
|
42
|
+
*/
|
|
43
|
+
export declare const formatHybridResults: (results: HybridSearchResult[]) => string;
|
|
44
|
+
/**
|
|
45
|
+
* Execute BM25 + semantic search and merge with RRF.
|
|
46
|
+
* Uses LadybugDB FTS for always-fresh BM25 results (no cached data).
|
|
47
|
+
* The semanticSearch function is injected to keep this module environment-agnostic.
|
|
48
|
+
*/
|
|
49
|
+
export declare const hybridSearch: (query: string, limit: number, executeQuery: (cypher: string) => Promise<any[]>, semanticSearch: (executeQuery: (cypher: string) => Promise<any[]>, query: string, k?: number) => Promise<SemanticSearchResult[]>) => Promise<HybridSearchResult[]>;
|