gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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 +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +3 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +27 -8
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +222 -3
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +44 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +232 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +99 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +288 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +109 -24
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +17 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* LLM-based enrichment for community clusters.
|
|
5
5
|
* Generates semantic names, keywords, and descriptions using an LLM.
|
|
6
6
|
*/
|
|
7
|
+
import { chunk } from '../../lib/utils.js';
|
|
7
8
|
import { logger } from '../logger.js';
|
|
8
9
|
// ============================================================================
|
|
9
10
|
// PROMPT TEMPLATE
|
|
@@ -104,10 +105,13 @@ export const enrichClustersBatch = async (communities, memberMap, llmClient, bat
|
|
|
104
105
|
const enrichments = new Map();
|
|
105
106
|
let tokensUsed = 0;
|
|
106
107
|
// Process in batches
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
let reported = 0;
|
|
109
|
+
for (const batch of chunk(communities, batchSize)) {
|
|
110
|
+
// Report progress. `reported` after each whole batch equals the old
|
|
111
|
+
// `Math.min(i + batchSize, communities.length)` — the last batch is short
|
|
112
|
+
// exactly when that clamp used to bite.
|
|
113
|
+
reported += batch.length;
|
|
114
|
+
onProgress?.(reported, communities.length);
|
|
111
115
|
const batchPrompt = batch
|
|
112
116
|
.map((community, idx) => {
|
|
113
117
|
const members = memberMap.get(community.id) || [];
|
|
@@ -363,7 +363,7 @@ function parseDataItemClauses(rest) {
|
|
|
363
363
|
result.pic = picMatch[1];
|
|
364
364
|
}
|
|
365
365
|
// USAGE [IS] <usage-type> — including non-standard COMP-6, COMP-X etc.
|
|
366
|
-
const usageMatch = text.match(/\bUSAGE\s+(?:IS\s+)?(COMP(?:UTATIONAL)?(?:-[0-9X])?|BINARY|PACKED-DECIMAL|DISPLAY|INDEX|POINTER|NATIONAL)\b/i);
|
|
366
|
+
const usageMatch = text.match(/\bUSAGE\s+(?:IS\s+)?(PROCEDURE-POINTER|FUNCTION-POINTER|COMP(?:UTATIONAL)?(?:-[0-9X])?|BINARY|PACKED-DECIMAL|DISPLAY|INDEX|POINTER|NATIONAL)\b/i);
|
|
367
367
|
if (usageMatch) {
|
|
368
368
|
result.usage = usageMatch[1].toUpperCase();
|
|
369
369
|
}
|
|
@@ -16,9 +16,12 @@ type CommunityEngine = 'graphology' | 'icebug';
|
|
|
16
16
|
export type CommunityDetectionEngine = CommunityEngine | 'auto';
|
|
17
17
|
export interface CommunityDetectionOptions {
|
|
18
18
|
/**
|
|
19
|
-
* Graphology
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* Graphology is the supported default. `icebug`/`auto` are **experimental**:
|
|
20
|
+
* they route through the optional `@ladybugmem/icebug` native Leiden (#2337)
|
|
21
|
+
* and fall back to Graphology if it is not installed, cannot load, or
|
|
22
|
+
* predates the thread/seed controls determinism requires. The two engines
|
|
23
|
+
* partition differently, so switching changes community IDs — and with them
|
|
24
|
+
* any generated context keyed on those IDs. No stability guarantee.
|
|
22
25
|
*/
|
|
23
26
|
engine?: CommunityDetectionEngine;
|
|
24
27
|
icebug?: {
|
|
@@ -86,4 +89,19 @@ export declare const processCommunities: (knowledgeGraph: KnowledgeGraph, onProg
|
|
|
86
89
|
export declare const buildCommunityProjection: (knowledgeGraph: KnowledgeGraph) => CommunityProjection;
|
|
87
90
|
export declare const buildCommunityCsr: (projection: CommunityProjection) => CommunityCsr;
|
|
88
91
|
export declare const buildGraphologyGraph: (projection: CommunityProjection) => GraphInstance;
|
|
92
|
+
/**
|
|
93
|
+
* Runs Leiden in a worker so a native crash cannot take the analyze process
|
|
94
|
+
* with it. Written against @ladybugmem/icebug's published surface (lib/index.js
|
|
95
|
+
* + index.d.ts): `GraphR(n, directed, outIndices, outIndptr)` pins the CSR
|
|
96
|
+
* buffers zero-copy, and `Leiden(graph, iterations, randomize, gamma)` — note
|
|
97
|
+
* `randomize` precedes `gamma` — returns `{membership, count}` from
|
|
98
|
+
* `getPartition()`.
|
|
99
|
+
*
|
|
100
|
+
* The thread/seed controls are required, not optional: community IDs feed
|
|
101
|
+
* generated context, so a build without them would give non-reproducible
|
|
102
|
+
* output. They exist at icebug-nodejs HEAD but are missing from the published
|
|
103
|
+
* 12.8.0 tarball, so today this guard is what trips and sends us back to
|
|
104
|
+
* Graphology.
|
|
105
|
+
*/
|
|
106
|
+
export declare const buildIcebugWorkerSource: (moduleSpecifier: string) => string;
|
|
89
107
|
export {};
|
|
@@ -39,6 +39,12 @@ function createSeededRng(seed) {
|
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
const COMMUNITY_ENGINE_ENV = 'GITNEXUS_COMMUNITY_ENGINE';
|
|
42
|
+
/**
|
|
43
|
+
* Not a declared dependency: the prebuilds need system Arrow 24, libomp and
|
|
44
|
+
* glibc >= 2.38, so it stays an opt-in `npm i @ladybugmem/icebug` alongside
|
|
45
|
+
* GitNexus rather than 30MB every install pays for.
|
|
46
|
+
*/
|
|
47
|
+
const ICEBUG_MODULE = '@ladybugmem/icebug';
|
|
42
48
|
const DEFAULT_COMMUNITY_ENGINE = 'graphology';
|
|
43
49
|
const LEIDEN_TIMEOUT_MS = 60_000;
|
|
44
50
|
const ICEBUG_TIMEOUT_MS = 60_000;
|
|
@@ -147,18 +153,21 @@ export const buildCommunityProjection = (knowledgeGraph) => {
|
|
|
147
153
|
const isLarge = symbolCount > 10_000;
|
|
148
154
|
const connectedNodes = new Set();
|
|
149
155
|
const nodeDegree = new Map();
|
|
150
|
-
|
|
151
|
-
|
|
156
|
+
// Field-wise scan (#2680): this walks every edge and reads only these four,
|
|
157
|
+
// so taking objects would allocate one per edge for nothing.
|
|
158
|
+
knowledgeGraph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
|
|
159
|
+
if (!isClusteringRelationship(type) || sourceId === targetId)
|
|
152
160
|
return;
|
|
153
|
-
if (isLarge &&
|
|
161
|
+
if (isLarge && confidence < MIN_CONFIDENCE_LARGE)
|
|
154
162
|
return;
|
|
155
|
-
connectedNodes.add(
|
|
156
|
-
connectedNodes.add(
|
|
157
|
-
nodeDegree.set(
|
|
158
|
-
nodeDegree.set(
|
|
163
|
+
connectedNodes.add(sourceId);
|
|
164
|
+
connectedNodes.add(targetId);
|
|
165
|
+
nodeDegree.set(sourceId, (nodeDegree.get(sourceId) || 0) + 1);
|
|
166
|
+
nodeDegree.set(targetId, (nodeDegree.get(targetId) || 0) + 1);
|
|
159
167
|
});
|
|
160
168
|
const nodes = [];
|
|
161
169
|
const nodeIndexById = new Map();
|
|
170
|
+
const eligibleNodes = [];
|
|
162
171
|
knowledgeGraph.forEachNode((node) => {
|
|
163
172
|
if (!isCommunitySymbol(node) || !connectedNodes.has(node.id))
|
|
164
173
|
return;
|
|
@@ -166,6 +175,10 @@ export const buildCommunityProjection = (knowledgeGraph) => {
|
|
|
166
175
|
// get absorbed into their single neighbor's community, but cost iteration time.
|
|
167
176
|
if (isLarge && (nodeDegree.get(node.id) || 0) < 2)
|
|
168
177
|
return;
|
|
178
|
+
eligibleNodes.push(node);
|
|
179
|
+
});
|
|
180
|
+
eligibleNodes.sort((left, right) => (left.id < right.id ? -1 : left.id > right.id ? 1 : 0));
|
|
181
|
+
for (const node of eligibleNodes) {
|
|
169
182
|
nodeIndexById.set(node.id, nodes.length);
|
|
170
183
|
nodes.push({
|
|
171
184
|
id: node.id,
|
|
@@ -173,16 +186,16 @@ export const buildCommunityProjection = (knowledgeGraph) => {
|
|
|
173
186
|
filePath: node.properties.filePath,
|
|
174
187
|
type: node.label,
|
|
175
188
|
});
|
|
176
|
-
}
|
|
189
|
+
}
|
|
177
190
|
const seenEdges = new Set();
|
|
178
191
|
const edges = [];
|
|
179
|
-
knowledgeGraph.
|
|
180
|
-
if (!isClusteringRelationship(
|
|
192
|
+
knowledgeGraph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
|
|
193
|
+
if (!isClusteringRelationship(type) || sourceId === targetId)
|
|
181
194
|
return;
|
|
182
|
-
if (isLarge &&
|
|
195
|
+
if (isLarge && confidence < MIN_CONFIDENCE_LARGE)
|
|
183
196
|
return;
|
|
184
|
-
const sourceIndex = nodeIndexById.get(
|
|
185
|
-
const targetIndex = nodeIndexById.get(
|
|
197
|
+
const sourceIndex = nodeIndexById.get(sourceId);
|
|
198
|
+
const targetIndex = nodeIndexById.get(targetId);
|
|
186
199
|
if (sourceIndex === undefined || targetIndex === undefined || sourceIndex === targetIndex)
|
|
187
200
|
return;
|
|
188
201
|
const [a, b] = sourceIndex < targetIndex ? [sourceIndex, targetIndex] : [targetIndex, sourceIndex];
|
|
@@ -192,6 +205,7 @@ export const buildCommunityProjection = (knowledgeGraph) => {
|
|
|
192
205
|
seenEdges.add(edgeKey);
|
|
193
206
|
edges.push([a, b]);
|
|
194
207
|
});
|
|
208
|
+
edges.sort(([leftA, leftB], [rightA, rightB]) => leftA - rightA || leftB - rightB);
|
|
195
209
|
return { nodes, edges, symbolCount, isLarge };
|
|
196
210
|
};
|
|
197
211
|
export const buildCommunityCsr = (projection) => {
|
|
@@ -238,6 +252,11 @@ const runCommunityEngine = async (graph, projection, engineRequested, options, o
|
|
|
238
252
|
if (engineRequested === 'graphology') {
|
|
239
253
|
return runGraphologyLeiden(graph, projection.isLarge, engineRequested);
|
|
240
254
|
}
|
|
255
|
+
// Announced on request, not just on fallback: a run that succeeds is the case
|
|
256
|
+
// where the user most needs to know the partition came from the experimental
|
|
257
|
+
// engine, since community IDs feed generated context.
|
|
258
|
+
onProgress?.(`Experimental ${engineRequested} community engine requested — unsupported, and its ` +
|
|
259
|
+
'communities will not match the Graphology default.', 32);
|
|
241
260
|
try {
|
|
242
261
|
return await runIcebugLeiden(projection, engineRequested, options);
|
|
243
262
|
}
|
|
@@ -286,8 +305,7 @@ const runIcebugLeiden = async (projection, engineRequested, options) => {
|
|
|
286
305
|
if (!Number.isFinite(nativeResult.modularity)) {
|
|
287
306
|
throw new Error('optional icebug modularity was not finite');
|
|
288
307
|
}
|
|
289
|
-
if (partition.length !== projection.nodes.length ||
|
|
290
|
-
partition.some((community) => !Number.isSafeInteger(community))) {
|
|
308
|
+
if (partition.length !== projection.nodes.length || !isIntegerPartition(partition)) {
|
|
291
309
|
throw new Error(`optional icebug partition was malformed for ${projection.nodes.length} projected nodes`);
|
|
292
310
|
}
|
|
293
311
|
const communities = normalizePartition(projection, partition);
|
|
@@ -299,6 +317,13 @@ const runIcebugLeiden = async (projection, engineRequested, options) => {
|
|
|
299
317
|
engineRequested,
|
|
300
318
|
};
|
|
301
319
|
};
|
|
320
|
+
const isIntegerPartition = (partition) => {
|
|
321
|
+
for (let index = 0; index < partition.length; index++) {
|
|
322
|
+
if (!Number.isSafeInteger(partition[index]))
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
return true;
|
|
326
|
+
};
|
|
302
327
|
const runIcebugWorker = (nodeCount, csr, options) => {
|
|
303
328
|
const threads = options.icebug?.threads ?? 1;
|
|
304
329
|
if (!Number.isSafeInteger(threads) || threads !== 1) {
|
|
@@ -324,13 +349,20 @@ const runIcebugWorker = (nodeCount, csr, options) => {
|
|
|
324
349
|
let settled = false;
|
|
325
350
|
const timeout = setTimeout(() => {
|
|
326
351
|
settled = true;
|
|
327
|
-
|
|
352
|
+
// Deliberately NOT terminate(): every millisecond of this worker's life is
|
|
353
|
+
// spent inside an N-API call (dlopen, GraphR, Leiden, run), and killing a
|
|
354
|
+
// thread mid-N-API aborts the whole process — Napi::Error → std::terminate
|
|
355
|
+
// → SIGABRT (#2432, see worker-pool.ts `shutdownDrainMs`). A timeout must
|
|
356
|
+
// degrade to the Graphology fallback, not take analyze down with it.
|
|
357
|
+
// unref() so a wedged native run cannot hold the process open either.
|
|
358
|
+
worker.unref();
|
|
328
359
|
reject(new Error(`optional icebug community engine timed out after ${ICEBUG_TIMEOUT_MS}ms`));
|
|
329
360
|
}, ICEBUG_TIMEOUT_MS);
|
|
361
|
+
// No terminate() on the settled paths either: the worker script ends after
|
|
362
|
+
// its single postMessage, so the thread exits on its own.
|
|
330
363
|
worker.once('message', (message) => {
|
|
331
364
|
settled = true;
|
|
332
365
|
clearTimeout(timeout);
|
|
333
|
-
void worker.terminate();
|
|
334
366
|
if (message.ok === true) {
|
|
335
367
|
resolve(message);
|
|
336
368
|
}
|
|
@@ -341,7 +373,6 @@ const runIcebugWorker = (nodeCount, csr, options) => {
|
|
|
341
373
|
worker.once('error', (error) => {
|
|
342
374
|
settled = true;
|
|
343
375
|
clearTimeout(timeout);
|
|
344
|
-
void worker.terminate();
|
|
345
376
|
reject(error);
|
|
346
377
|
});
|
|
347
378
|
worker.once('exit', (code) => {
|
|
@@ -356,85 +387,59 @@ const runIcebugWorker = (nodeCount, csr, options) => {
|
|
|
356
387
|
});
|
|
357
388
|
});
|
|
358
389
|
};
|
|
359
|
-
|
|
390
|
+
/**
|
|
391
|
+
* Runs Leiden in a worker so a native crash cannot take the analyze process
|
|
392
|
+
* with it. Written against @ladybugmem/icebug's published surface (lib/index.js
|
|
393
|
+
* + index.d.ts): `GraphR(n, directed, outIndices, outIndptr)` pins the CSR
|
|
394
|
+
* buffers zero-copy, and `Leiden(graph, iterations, randomize, gamma)` — note
|
|
395
|
+
* `randomize` precedes `gamma` — returns `{membership, count}` from
|
|
396
|
+
* `getPartition()`.
|
|
397
|
+
*
|
|
398
|
+
* The thread/seed controls are required, not optional: community IDs feed
|
|
399
|
+
* generated context, so a build without them would give non-reproducible
|
|
400
|
+
* output. They exist at icebug-nodejs HEAD but are missing from the published
|
|
401
|
+
* 12.8.0 tarball, so today this guard is what trips and sends us back to
|
|
402
|
+
* Graphology.
|
|
403
|
+
*/
|
|
404
|
+
export const buildIcebugWorkerSource = (moduleSpecifier) => `
|
|
360
405
|
const { parentPort, workerData } = require('node:worker_threads');
|
|
361
406
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
value !== null &&
|
|
365
|
-
'length' in value &&
|
|
366
|
-
typeof value.length === 'number';
|
|
367
|
-
|
|
368
|
-
const readPartition = (runner) => {
|
|
369
|
-
const candidates = [
|
|
370
|
-
typeof runner.getPartition === 'function' ? runner.getPartition() : runner.partition,
|
|
371
|
-
typeof runner.getCommunities === 'function' ? runner.getCommunities() : undefined,
|
|
372
|
-
typeof runner.getMembership === 'function' ? runner.getMembership() : undefined,
|
|
373
|
-
typeof runner.getMemberships === 'function' ? runner.getMemberships() : undefined,
|
|
374
|
-
];
|
|
375
|
-
|
|
376
|
-
for (const candidate of candidates) {
|
|
377
|
-
if (isNumericArrayLike(candidate)) {
|
|
378
|
-
return Array.from(candidate, Number);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
throw new Error('optional icebug ParallelLeidenView did not expose a partition array');
|
|
383
|
-
};
|
|
384
|
-
|
|
385
|
-
const readModularity = (runner) => {
|
|
386
|
-
if (typeof runner.getModularity === 'function') return runner.getModularity();
|
|
387
|
-
if (typeof runner.modularity === 'function') return runner.modularity();
|
|
388
|
-
if (typeof runner.modularity === 'number') return runner.modularity;
|
|
389
|
-
return 0;
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
(async () => {
|
|
393
|
-
const imported = await import('icebug');
|
|
394
|
-
const icebug = imported.default ?? imported;
|
|
395
|
-
const fromCSR = icebug.Graph?.fromCSR;
|
|
396
|
-
const ParallelLeidenView = icebug.community?.ParallelLeidenView;
|
|
397
|
-
if (!fromCSR || !ParallelLeidenView) {
|
|
398
|
-
throw new Error('optional icebug module does not expose Graph.fromCSR/ParallelLeidenView');
|
|
399
|
-
}
|
|
407
|
+
try {
|
|
408
|
+
const icebug = require(${JSON.stringify(moduleSpecifier)});
|
|
400
409
|
|
|
401
410
|
if (typeof icebug.setNumberOfThreads !== 'function' || typeof icebug.setSeed !== 'function') {
|
|
402
|
-
throw new Error(
|
|
411
|
+
throw new Error(
|
|
412
|
+
'optional icebug build predates the deterministic thread/seed controls (icebug-nodejs#6)',
|
|
413
|
+
);
|
|
403
414
|
}
|
|
415
|
+
|
|
404
416
|
icebug.setNumberOfThreads(workerData.threads);
|
|
405
417
|
icebug.setSeed(workerData.seed, false);
|
|
406
418
|
|
|
407
|
-
const
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
workerData.randomize,
|
|
421
|
-
);
|
|
422
|
-
}
|
|
419
|
+
const graph = new icebug.GraphR(
|
|
420
|
+
workerData.nodeCount,
|
|
421
|
+
false,
|
|
422
|
+
workerData.indices,
|
|
423
|
+
workerData.indptr,
|
|
424
|
+
);
|
|
425
|
+
const leiden = new icebug.Leiden(
|
|
426
|
+
graph,
|
|
427
|
+
workerData.iterations,
|
|
428
|
+
workerData.randomize,
|
|
429
|
+
workerData.gamma,
|
|
430
|
+
);
|
|
431
|
+
leiden.run();
|
|
423
432
|
|
|
424
|
-
if (typeof runner.run !== 'function') {
|
|
425
|
-
throw new Error('optional icebug ParallelLeidenView does not expose run()');
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
runner.run();
|
|
429
433
|
parentPort.postMessage({
|
|
430
434
|
ok: true,
|
|
431
|
-
partition:
|
|
432
|
-
modularity:
|
|
435
|
+
partition: leiden.getPartition().membership,
|
|
436
|
+
modularity: leiden.modularity(),
|
|
433
437
|
});
|
|
434
|
-
}
|
|
438
|
+
} catch (error) {
|
|
435
439
|
parentPort.postMessage({ ok: false, error: error instanceof Error ? error.message : String(error) });
|
|
436
|
-
}
|
|
440
|
+
}
|
|
437
441
|
`;
|
|
442
|
+
const ICEBUG_WORKER_SOURCE = buildIcebugWorkerSource(ICEBUG_MODULE);
|
|
438
443
|
const normalizePartition = (projection, partition) => {
|
|
439
444
|
const remap = new Map();
|
|
440
445
|
const communities = {};
|
|
@@ -1,47 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Per-language DI
|
|
3
|
-
*
|
|
4
|
-
* dependency-injection fan-out candidate.
|
|
2
|
+
* Per-language DI resolver registry — the lookup the generic `di` pipeline
|
|
3
|
+
* phase uses to discover injection sites and provider metadata on graph nodes.
|
|
5
4
|
*
|
|
6
5
|
* Mirrors `scope-resolution/pipeline/registry.ts` (`SCOPE_RESOLVERS`): a
|
|
7
|
-
* single-valued `ReadonlyMap<SupportedLanguages,
|
|
6
|
+
* single-valued `ReadonlyMap<SupportedLanguages, DiResolver>` consumed by
|
|
8
7
|
* a framework-neutral phase, so no language or framework names leak into
|
|
9
|
-
* shared pipeline code. Adding a framework
|
|
10
|
-
*
|
|
8
|
+
* shared pipeline code. Adding a framework means implementing a `DiResolver`
|
|
9
|
+
* in `di-extractors/<framework>.ts` and registering it here.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* single-valued per language, matching the `SCOPE_RESOLVERS` shape; widen the
|
|
17
|
-
* value type to arrays only when a second same-language framework actually
|
|
18
|
-
* lands (a one-line type change then).
|
|
11
|
+
* The registry is single-valued per language, matching the `SCOPE_RESOLVERS`
|
|
12
|
+
* shape; widen the value type to arrays only when a second same-language
|
|
13
|
+
* framework actually lands. Java and Kotlin share Spring's attached metadata
|
|
14
|
+
* contract while retaining language-specific syntax capture.
|
|
19
15
|
*/
|
|
20
16
|
import { SupportedLanguages } from '../../../_shared/index.js';
|
|
21
|
-
import type {
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* A per-language field-injection matcher: given a `Property` node, return the
|
|
33
|
-
* parsed DI match or `null` when the field is not container-injected. The
|
|
34
|
-
* matcher receives the whole node (not pre-plucked fields) so the shared
|
|
35
|
-
* phase stays ignorant of which properties matter.
|
|
36
|
-
*/
|
|
37
|
-
export type DiFieldMatcher = (node: GraphNode) => DiFieldMatch | null;
|
|
17
|
+
import type { DiResolver } from './types.js';
|
|
18
|
+
/** The resolver contract lives in the leaf `./types.js` so an implementation
|
|
19
|
+
* can depend on it without depending on this registry (which imports every
|
|
20
|
+
* implementation). The two match shapes are re-exported here because consumers
|
|
21
|
+
* of the registry read them off its results — `pipeline-phases/di.ts` and the
|
|
22
|
+
* Spring metadata modules import them from this module alongside
|
|
23
|
+
* `DI_RESOLVERS`. `DiResolver` itself is NOT re-exported: only implementations
|
|
24
|
+
* need it, and they import it from `./types.js` directly. */
|
|
25
|
+
export type { DiInjectionMatch, DiProviderMatch } from './types.js';
|
|
38
26
|
/**
|
|
39
27
|
* Type guard narrowing an arbitrary graph `language` string to
|
|
40
|
-
* `SupportedLanguages`, so `
|
|
28
|
+
* `SupportedLanguages`, so `DI_RESOLVERS.get()` needs no cast.
|
|
41
29
|
*/
|
|
42
30
|
export declare function isSupportedLanguage(value: string): value is SupportedLanguages;
|
|
43
|
-
/** Map of `SupportedLanguages` → `
|
|
44
|
-
*
|
|
31
|
+
/** Map of `SupportedLanguages` → `DiResolver`. The `di` phase routes each
|
|
32
|
+
* graph node here by `node.properties.language`; no entry ⇒ the node is
|
|
45
33
|
* skipped. This is the single source of truth for which languages (and,
|
|
46
34
|
* transitively, frameworks) produce INJECTS edges. */
|
|
47
|
-
export declare const
|
|
35
|
+
export declare const DI_RESOLVERS: ReadonlyMap<SupportedLanguages, DiResolver>;
|
|
@@ -1,35 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Per-language DI
|
|
3
|
-
*
|
|
4
|
-
* dependency-injection fan-out candidate.
|
|
2
|
+
* Per-language DI resolver registry — the lookup the generic `di` pipeline
|
|
3
|
+
* phase uses to discover injection sites and provider metadata on graph nodes.
|
|
5
4
|
*
|
|
6
5
|
* Mirrors `scope-resolution/pipeline/registry.ts` (`SCOPE_RESOLVERS`): a
|
|
7
|
-
* single-valued `ReadonlyMap<SupportedLanguages,
|
|
6
|
+
* single-valued `ReadonlyMap<SupportedLanguages, DiResolver>` consumed by
|
|
8
7
|
* a framework-neutral phase, so no language or framework names leak into
|
|
9
|
-
* shared pipeline code. Adding a framework
|
|
10
|
-
*
|
|
8
|
+
* shared pipeline code. Adding a framework means implementing a `DiResolver`
|
|
9
|
+
* in `di-extractors/<framework>.ts` and registering it here.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* single-valued per language, matching the `SCOPE_RESOLVERS` shape; widen the
|
|
17
|
-
* value type to arrays only when a second same-language framework actually
|
|
18
|
-
* lands (a one-line type change then).
|
|
11
|
+
* The registry is single-valued per language, matching the `SCOPE_RESOLVERS`
|
|
12
|
+
* shape; widen the value type to arrays only when a second same-language
|
|
13
|
+
* framework actually lands. Java and Kotlin share Spring's attached metadata
|
|
14
|
+
* contract while retaining language-specific syntax capture.
|
|
19
15
|
*/
|
|
20
16
|
import { SupportedLanguages } from '../../../_shared/index.js';
|
|
21
|
-
import {
|
|
17
|
+
import { springDiResolver } from './spring.js';
|
|
22
18
|
/** All `SupportedLanguages` string values, for narrowing raw graph strings. */
|
|
23
19
|
const SUPPORTED_LANGUAGE_VALUES = new Set(Object.values(SupportedLanguages));
|
|
24
20
|
/**
|
|
25
21
|
* Type guard narrowing an arbitrary graph `language` string to
|
|
26
|
-
* `SupportedLanguages`, so `
|
|
22
|
+
* `SupportedLanguages`, so `DI_RESOLVERS.get()` needs no cast.
|
|
27
23
|
*/
|
|
28
24
|
export function isSupportedLanguage(value) {
|
|
29
25
|
return SUPPORTED_LANGUAGE_VALUES.has(value);
|
|
30
26
|
}
|
|
31
|
-
/** Map of `SupportedLanguages` → `
|
|
32
|
-
*
|
|
27
|
+
/** Map of `SupportedLanguages` → `DiResolver`. The `di` phase routes each
|
|
28
|
+
* graph node here by `node.properties.language`; no entry ⇒ the node is
|
|
33
29
|
* skipped. This is the single source of truth for which languages (and,
|
|
34
30
|
* transitively, frameworks) produce INJECTS edges. */
|
|
35
|
-
export const
|
|
31
|
+
export const DI_RESOLVERS = new Map([
|
|
32
|
+
[SupportedLanguages.Java, springDiResolver],
|
|
33
|
+
[SupportedLanguages.Kotlin, springDiResolver],
|
|
34
|
+
]);
|
|
@@ -51,11 +51,22 @@
|
|
|
51
51
|
* between `<` and the element) are NOT stripped and fail closed —
|
|
52
52
|
* acceptable.
|
|
53
53
|
*
|
|
54
|
-
* Registered
|
|
55
|
-
*
|
|
56
|
-
* `node.properties.language`.
|
|
54
|
+
* Registered for Java and Kotlin in `./index.ts` (`DI_RESOLVERS`); language
|
|
55
|
+
* routing is the registry's job, so the matcher itself never reads
|
|
56
|
+
* `node.properties.language`. Kotlin's AST-backed class metadata is the
|
|
57
|
+
* primary path because Kotlin Property extraction intentionally exposes less
|
|
58
|
+
* annotation/type syntax than Java's legacy field contract.
|
|
57
59
|
*/
|
|
58
|
-
import type {
|
|
60
|
+
import type { GraphNode } from '../../../_shared/index.js';
|
|
61
|
+
import type { DiResolver } from './types.js';
|
|
62
|
+
/** Ephemeral Class-node property populated by Java's post-resolution Spring
|
|
63
|
+
* metadata hook. It is consumed in the same pipeline run before persistence. */
|
|
64
|
+
export declare const SPRING_DI_INJECTION_SITES_PROPERTY = "springDiInjectionSites";
|
|
65
|
+
/** Ephemeral Class-node property carrying Spring bean names / @Primary. */
|
|
66
|
+
export declare const SPRING_DI_PROVIDER_PROPERTY = "springDiProvider";
|
|
67
|
+
/** Marker placed on Property nodes whose richer AST-backed field fact was
|
|
68
|
+
* attached to the owning Class, suppressing the legacy collection fallback. */
|
|
69
|
+
export declare const SPRING_DI_CAPTURED_FIELD_PROPERTY = "springDiCapturedField";
|
|
59
70
|
/**
|
|
60
71
|
* Parse a Spring DI collection field's raw declared type (verbatim source
|
|
61
72
|
* text, generics preserved) and return the injected bean type name.
|
|
@@ -73,10 +84,21 @@ export declare function parseSpringCollectionType(rawDeclaredType: string): {
|
|
|
73
84
|
collectionType: string;
|
|
74
85
|
elementTypeName: string;
|
|
75
86
|
} | null;
|
|
87
|
+
/** Parse either a supported collect-all type or a standard single bean type. */
|
|
88
|
+
export declare function parseSpringInjectionType(rawDeclaredType: string): {
|
|
89
|
+
targetTypeName: string;
|
|
90
|
+
cardinality: 'single' | 'collection';
|
|
91
|
+
displayType: string;
|
|
92
|
+
} | null;
|
|
76
93
|
/**
|
|
77
94
|
* Match a `Property` node against Spring's collection-injection shape.
|
|
78
95
|
*
|
|
79
96
|
* Returns the parsed match (with a Spring-specific human-readable `reason`
|
|
80
97
|
* payload) or `null` when the field is not container-injected.
|
|
81
98
|
*/
|
|
82
|
-
export declare const springDiFieldMatcher:
|
|
99
|
+
export declare const springDiFieldMatcher: (node: GraphNode) => {
|
|
100
|
+
elementTypeName: string;
|
|
101
|
+
reason: string;
|
|
102
|
+
} | null;
|
|
103
|
+
/** JVM/Spring resolver registered behind the framework-neutral DI seam. */
|
|
104
|
+
export declare const springDiResolver: DiResolver;
|
|
@@ -51,9 +51,11 @@
|
|
|
51
51
|
* between `<` and the element) are NOT stripped and fail closed —
|
|
52
52
|
* acceptable.
|
|
53
53
|
*
|
|
54
|
-
* Registered
|
|
55
|
-
*
|
|
56
|
-
* `node.properties.language`.
|
|
54
|
+
* Registered for Java and Kotlin in `./index.ts` (`DI_RESOLVERS`); language
|
|
55
|
+
* routing is the registry's job, so the matcher itself never reads
|
|
56
|
+
* `node.properties.language`. Kotlin's AST-backed class metadata is the
|
|
57
|
+
* primary path because Kotlin Property extraction intentionally exposes less
|
|
58
|
+
* annotation/type syntax than Java's legacy field contract.
|
|
57
59
|
*/
|
|
58
60
|
import { isDev } from '../utils/env.js';
|
|
59
61
|
import { logger } from '../../logger.js';
|
|
@@ -76,6 +78,14 @@ const WILDCARD_SUPER_PREFIX = '? super ';
|
|
|
76
78
|
* parser accepts. Everything else (wildcards, arrays, comments, stray
|
|
77
79
|
* punctuation) fails closed. */
|
|
78
80
|
const JAVA_TYPE_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/;
|
|
81
|
+
/** Ephemeral Class-node property populated by Java's post-resolution Spring
|
|
82
|
+
* metadata hook. It is consumed in the same pipeline run before persistence. */
|
|
83
|
+
export const SPRING_DI_INJECTION_SITES_PROPERTY = 'springDiInjectionSites';
|
|
84
|
+
/** Ephemeral Class-node property carrying Spring bean names / @Primary. */
|
|
85
|
+
export const SPRING_DI_PROVIDER_PROPERTY = 'springDiProvider';
|
|
86
|
+
/** Marker placed on Property nodes whose richer AST-backed field fact was
|
|
87
|
+
* attached to the owning Class, suppressing the legacy collection fallback. */
|
|
88
|
+
export const SPRING_DI_CAPTURED_FIELD_PROPERTY = 'springDiCapturedField';
|
|
79
89
|
/**
|
|
80
90
|
* Split a generic-argument list on TOP-LEVEL commas only, tracking `<`/`>`
|
|
81
91
|
* bracket depth so nested generics (e.g. the `Pair<A,B>` key in
|
|
@@ -179,6 +189,21 @@ export function parseSpringCollectionType(rawDeclaredType) {
|
|
|
179
189
|
return null;
|
|
180
190
|
return { collectionType: wrapper, elementTypeName };
|
|
181
191
|
}
|
|
192
|
+
/** Parse either a supported collect-all type or a standard single bean type. */
|
|
193
|
+
export function parseSpringInjectionType(rawDeclaredType) {
|
|
194
|
+
const collection = parseSpringCollectionType(rawDeclaredType);
|
|
195
|
+
if (collection !== null) {
|
|
196
|
+
return {
|
|
197
|
+
targetTypeName: collection.elementTypeName,
|
|
198
|
+
cardinality: 'collection',
|
|
199
|
+
displayType: `${collection.collectionType}<${collection.elementTypeName}>`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const normalized = rawDeclaredType.replace(/\s+/g, '').trim();
|
|
203
|
+
if (!JAVA_TYPE_NAME_PATTERN.test(normalized))
|
|
204
|
+
return null;
|
|
205
|
+
return { targetTypeName: normalized, cardinality: 'single', displayType: normalized };
|
|
206
|
+
}
|
|
182
207
|
/**
|
|
183
208
|
* Match a `Property` node against Spring's collection-injection shape.
|
|
184
209
|
*
|
|
@@ -218,3 +243,62 @@ export const springDiFieldMatcher = (node) => {
|
|
|
218
243
|
reason: `Spring DI: ${matchedAnnotation} ${parsed.collectionType}<${parsed.elementTypeName}>`,
|
|
219
244
|
};
|
|
220
245
|
};
|
|
246
|
+
function isInjectionMatch(value) {
|
|
247
|
+
if (value === null || typeof value !== 'object')
|
|
248
|
+
return false;
|
|
249
|
+
const match = value;
|
|
250
|
+
const namedSelection = match.namedSelection;
|
|
251
|
+
return (typeof match.targetTypeName === 'string' &&
|
|
252
|
+
(match.cardinality === 'single' || match.cardinality === 'collection') &&
|
|
253
|
+
typeof match.reason === 'string' &&
|
|
254
|
+
(match.edgeSource === undefined ||
|
|
255
|
+
match.edgeSource === 'owner-class' ||
|
|
256
|
+
match.edgeSource === 'site') &&
|
|
257
|
+
(namedSelection === undefined ||
|
|
258
|
+
(typeof namedSelection === 'object' &&
|
|
259
|
+
namedSelection !== null &&
|
|
260
|
+
typeof namedSelection.name === 'string' &&
|
|
261
|
+
typeof namedSelection.reason === 'string' &&
|
|
262
|
+
(namedSelection.fallbackToType === undefined ||
|
|
263
|
+
typeof namedSelection.fallbackToType === 'boolean'))));
|
|
264
|
+
}
|
|
265
|
+
function isProviderMatch(value) {
|
|
266
|
+
if (value === null || typeof value !== 'object')
|
|
267
|
+
return false;
|
|
268
|
+
const provider = value;
|
|
269
|
+
return (Array.isArray(provider.names) &&
|
|
270
|
+
provider.names.every((name) => typeof name === 'string') &&
|
|
271
|
+
(provider.providedTypeName === undefined || typeof provider.providedTypeName === 'string') &&
|
|
272
|
+
(provider.declaredByNodeId === undefined || typeof provider.declaredByNodeId === 'string') &&
|
|
273
|
+
(provider.preferenceReason === undefined || typeof provider.preferenceReason === 'string'));
|
|
274
|
+
}
|
|
275
|
+
/** JVM/Spring resolver registered behind the framework-neutral DI seam. */
|
|
276
|
+
export const springDiResolver = {
|
|
277
|
+
matchInjectionSites(node) {
|
|
278
|
+
const matches = [];
|
|
279
|
+
// Preserve the existing Property-node collection contract for hand-built
|
|
280
|
+
// graphs and for compatibility with pre-#2414 extraction fixtures.
|
|
281
|
+
if (node.label === 'Property' && node.properties[SPRING_DI_CAPTURED_FIELD_PROPERTY] !== true) {
|
|
282
|
+
const field = springDiFieldMatcher(node);
|
|
283
|
+
if (field !== null) {
|
|
284
|
+
matches.push({
|
|
285
|
+
targetTypeName: field.elementTypeName,
|
|
286
|
+
cardinality: 'collection',
|
|
287
|
+
reason: field.reason,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const attached = node.properties[SPRING_DI_INJECTION_SITES_PROPERTY];
|
|
292
|
+
if (Array.isArray(attached)) {
|
|
293
|
+
for (const candidate of attached) {
|
|
294
|
+
if (isInjectionMatch(candidate))
|
|
295
|
+
matches.push(candidate);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return matches;
|
|
299
|
+
},
|
|
300
|
+
matchProvider(node) {
|
|
301
|
+
const attached = node.properties[SPRING_DI_PROVIDER_PROPERTY];
|
|
302
|
+
return isProviderMatch(attached) ? attached : null;
|
|
303
|
+
},
|
|
304
|
+
};
|