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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The DI resolver contract — the types a per-language/per-framework resolver
|
|
3
|
+
* implements and the shared `di` pipeline phase consumes.
|
|
4
|
+
*
|
|
5
|
+
* A leaf module by design: it imports nothing from this directory, so the
|
|
6
|
+
* barrel (`./index.ts`, which aggregates the resolver *implementations*) and
|
|
7
|
+
* each implementation (`./spring.ts`) can both depend on the contract without
|
|
8
|
+
* depending on each other. The barrel re-exports the two MATCH types, because
|
|
9
|
+
* consumers of the registry read them off its results; `DiResolver` is not
|
|
10
|
+
* re-exported, since only implementations need it and they import it from here
|
|
11
|
+
* directly.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors the `import-resolvers/types.ts` split of contract from registry.
|
|
14
|
+
*/
|
|
15
|
+
import type { GraphNode } from '../../../_shared/index.js';
|
|
16
|
+
/** A successful injection-site match, produced by a per-language resolver. */
|
|
17
|
+
export interface DiInjectionMatch {
|
|
18
|
+
/** The requested dependency type name. */
|
|
19
|
+
targetTypeName: string;
|
|
20
|
+
/** A collection receives every matching provider; a single site may need
|
|
21
|
+
* framework-specific named/preferred-provider disambiguation. */
|
|
22
|
+
cardinality: 'single' | 'collection';
|
|
23
|
+
/** Statically known provider name requested at the injection site. The
|
|
24
|
+
* resolver owns the human-readable explanation of that selection. */
|
|
25
|
+
namedSelection?: {
|
|
26
|
+
name: string;
|
|
27
|
+
reason: string;
|
|
28
|
+
/** Name-first frameworks may fall back to type only for implicit/default
|
|
29
|
+
* names. Explicit names remain strict. */
|
|
30
|
+
fallbackToType?: boolean;
|
|
31
|
+
};
|
|
32
|
+
/** Most injection edges originate at the owning Class. Factory-method
|
|
33
|
+
* parameters preserve the Method as the semantic source. */
|
|
34
|
+
edgeSource?: 'owner-class' | 'site';
|
|
35
|
+
/** Human-readable edge reason. Framework specifics (names, idioms,
|
|
36
|
+
* collection wrapper, gating annotation) live in this payload so the
|
|
37
|
+
* shared `di` phase stays framework-neutral. */
|
|
38
|
+
reason: string;
|
|
39
|
+
}
|
|
40
|
+
/** Provider metadata used by the shared resolver without naming a framework. */
|
|
41
|
+
export interface DiProviderMatch {
|
|
42
|
+
/** Provider names and aliases that can satisfy a named injection. */
|
|
43
|
+
names: readonly string[];
|
|
44
|
+
/** Optional type directly provided by a declaration node, such as a
|
|
45
|
+
* framework factory method whose node is not itself a Class. */
|
|
46
|
+
providedTypeName?: string;
|
|
47
|
+
/** Graph node that declares this provider. The shared phase excludes a
|
|
48
|
+
* provider from injection into its own declaration site without knowing the
|
|
49
|
+
* framework-specific declaration model. */
|
|
50
|
+
declaredByNodeId?: string;
|
|
51
|
+
/** Present when the framework marks this as its preferred candidate. The
|
|
52
|
+
* value is appended to the emitted edge reason when it disambiguates. */
|
|
53
|
+
preferenceReason?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Per-language DI behavior. Matchers receive whole nodes so the shared phase
|
|
56
|
+
* remains ignorant of language/framework-specific property shapes. */
|
|
57
|
+
export interface DiResolver {
|
|
58
|
+
matchInjectionSites(node: GraphNode): readonly DiInjectionMatch[];
|
|
59
|
+
matchProvider(node: GraphNode): DiProviderMatch | null;
|
|
60
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The DI resolver contract — the types a per-language/per-framework resolver
|
|
3
|
+
* implements and the shared `di` pipeline phase consumes.
|
|
4
|
+
*
|
|
5
|
+
* A leaf module by design: it imports nothing from this directory, so the
|
|
6
|
+
* barrel (`./index.ts`, which aggregates the resolver *implementations*) and
|
|
7
|
+
* each implementation (`./spring.ts`) can both depend on the contract without
|
|
8
|
+
* depending on each other. The barrel re-exports the two MATCH types, because
|
|
9
|
+
* consumers of the registry read them off its results; `DiResolver` is not
|
|
10
|
+
* re-exported, since only implementations need it and they import it from here
|
|
11
|
+
* directly.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors the `import-resolvers/types.ts` split of contract from registry.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
@@ -224,6 +224,10 @@ function mapKindToType(kind) {
|
|
|
224
224
|
case 'type-reference':
|
|
225
225
|
case 'import-use':
|
|
226
226
|
case 'macro':
|
|
227
|
+
// value-ref: function registered as an object-literal property value —
|
|
228
|
+
// a reference, not an invocation; CALLS are synthesized separately by
|
|
229
|
+
// the property-dispatch pass (#2437).
|
|
230
|
+
case 'value-ref':
|
|
227
231
|
return 'USES';
|
|
228
232
|
}
|
|
229
233
|
}
|
|
@@ -4,6 +4,7 @@ import fs from 'fs/promises';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { glob } from 'glob';
|
|
6
6
|
import { createIgnoreFilter } from '../../config/ignore-service.js';
|
|
7
|
+
import { mapConcurrent } from '../../lib/utils.js';
|
|
7
8
|
import { logger } from '../logger.js';
|
|
8
9
|
const READ_CONCURRENCY = 32;
|
|
9
10
|
const ANALYZE_PROGRESS_ACTIVE_ENV = 'GITNEXUS_ANALYZE_PROGRESS_ACTIVE';
|
|
@@ -60,6 +61,10 @@ export const walkRepositoryPaths = async (repoPath, onProgress) => {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
}
|
|
64
|
+
// Filesystem/glob traversal order is not stable across filesystems or repeated
|
|
65
|
+
// scans. Canonicalize once at the scan boundary so every downstream phase sees
|
|
66
|
+
// the same repository order.
|
|
67
|
+
entries.sort((left, right) => (left.path < right.path ? -1 : left.path > right.path ? 1 : 0));
|
|
63
68
|
if (skippedLarge > 0) {
|
|
64
69
|
const isDefault = maxFileSizeBytes === DEFAULT_MAX_FILE_SIZE_BYTES;
|
|
65
70
|
const isOverrideUnset = !process.env.GITNEXUS_MAX_FILE_SIZE;
|
|
@@ -96,18 +101,17 @@ export const walkRepositoryPaths = async (repoPath, onProgress) => {
|
|
|
96
101
|
*/
|
|
97
102
|
export const readFileContents = async (repoPath, relativePaths) => {
|
|
98
103
|
const contents = new Map();
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
104
|
+
const results = await mapConcurrent(relativePaths, async (relativePath) => {
|
|
105
|
+
const fullPath = path.join(repoPath, relativePath);
|
|
106
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
107
|
+
return { path: relativePath, content };
|
|
108
|
+
}, { concurrency: READ_CONCURRENCY });
|
|
109
|
+
// An unreadable file yields `undefined` (mapConcurrent's per-item degrade) and
|
|
110
|
+
// is skipped, exactly as the previous allSettled/`status === 'fulfilled'` shape
|
|
111
|
+
// did — no `onError`, so the skip stays silent per this function's contract.
|
|
112
|
+
for (const result of results) {
|
|
113
|
+
if (result)
|
|
114
|
+
contents.set(result.path, result.content);
|
|
111
115
|
}
|
|
112
116
|
return contents;
|
|
113
117
|
};
|
|
@@ -148,6 +148,7 @@ function collectReferenceSites(parsedFiles) {
|
|
|
148
148
|
function withDefaultHooks(partial) {
|
|
149
149
|
return {
|
|
150
150
|
resolveImportTarget: partial.resolveImportTarget ?? (() => null),
|
|
151
|
+
isNamespaceImport: partial.isNamespaceImport,
|
|
151
152
|
expandsWildcardTo: partial.expandsWildcardTo ?? (() => []),
|
|
152
153
|
mergeBindings: partial.mergeBindings ??
|
|
153
154
|
((existing, incoming) => [...existing, ...incoming]),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AnalysisFeatureDescriptor } from '../../../analysis-features.js';
|
|
2
|
+
/** Durable completeness contract for Java/Kotlin Spring Bean evidence. */
|
|
3
|
+
export declare const SPRING_BEAN_INVENTORY_FEATURE: AnalysisFeatureDescriptor;
|
|
4
|
+
/** Durable completeness contract for conditional and auto-configuration evidence. */
|
|
5
|
+
export declare const SPRING_CONDITIONALS_FEATURE: AnalysisFeatureDescriptor;
|
|
6
|
+
/** Durable completeness contract for Spring proxy/advice evidence (#2416). */
|
|
7
|
+
export declare const SPRING_AOP_FEATURE: AnalysisFeatureDescriptor;
|
|
8
|
+
/** Durable completeness contract for scheduled, event, messaging, and job entry points (#2417). */
|
|
9
|
+
export declare const SPRING_NON_HTTP_HANDLERS_FEATURE: AnalysisFeatureDescriptor;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isSpringBeanCandidateSourceFile } from './bean-catalog.js';
|
|
2
|
+
/** Durable completeness contract for Java/Kotlin Spring Bean evidence. */
|
|
3
|
+
export const SPRING_BEAN_INVENTORY_FEATURE = {
|
|
4
|
+
id: 'spring.bean-inventory',
|
|
5
|
+
version: 2,
|
|
6
|
+
appliesTo: (filePaths) => filePaths.some(isSpringBeanCandidateSourceFile),
|
|
7
|
+
};
|
|
8
|
+
function isSpringConditionOrAutoConfigurationFile(filePath) {
|
|
9
|
+
const normalized = `/${filePath.replaceAll('\\', '/')}`.toLowerCase();
|
|
10
|
+
return (normalized.endsWith('.java') ||
|
|
11
|
+
normalized.endsWith('.kt') ||
|
|
12
|
+
normalized.endsWith('.kts') ||
|
|
13
|
+
normalized.endsWith('/meta-inf/spring.factories') ||
|
|
14
|
+
normalized.endsWith('/meta-inf/spring/org.springframework.boot.autoconfigure.autoconfiguration.imports'));
|
|
15
|
+
}
|
|
16
|
+
/** Durable completeness contract for conditional and auto-configuration evidence. */
|
|
17
|
+
export const SPRING_CONDITIONALS_FEATURE = {
|
|
18
|
+
id: 'spring.conditionals-auto-configuration',
|
|
19
|
+
version: 1,
|
|
20
|
+
appliesTo: (filePaths) => filePaths.some(isSpringConditionOrAutoConfigurationFile),
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Candidate-language approximation, not a claim that the file contains AOP.
|
|
24
|
+
* Kotlin scripts are included because `.kts` is a supported Kotlin input.
|
|
25
|
+
*/
|
|
26
|
+
function isJvmSourceFile(filePath) {
|
|
27
|
+
const normalized = filePath.replaceAll('\\', '/').toLowerCase();
|
|
28
|
+
return normalized.endsWith('.java') || normalized.endsWith('.kt') || normalized.endsWith('.kts');
|
|
29
|
+
}
|
|
30
|
+
/** Durable completeness contract for Spring proxy/advice evidence (#2416). */
|
|
31
|
+
export const SPRING_AOP_FEATURE = {
|
|
32
|
+
id: 'spring.aop-advice',
|
|
33
|
+
version: 1,
|
|
34
|
+
appliesTo: (filePaths) => filePaths.some(isJvmSourceFile),
|
|
35
|
+
};
|
|
36
|
+
/** Durable completeness contract for scheduled, event, messaging, and job entry points (#2417). */
|
|
37
|
+
export const SPRING_NON_HTTP_HANDLERS_FEATURE = {
|
|
38
|
+
id: 'spring.non-http-handlers',
|
|
39
|
+
version: 1,
|
|
40
|
+
appliesTo: (filePaths) => filePaths.some(isJvmSourceFile),
|
|
41
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SpringAnnotationArgument {
|
|
2
|
+
readonly name?: string;
|
|
3
|
+
readonly value: string;
|
|
4
|
+
}
|
|
5
|
+
/** Parse Java/Kotlin annotation arguments without evaluating constants. */
|
|
6
|
+
export declare function parseSpringAnnotationArguments(annotationText: string): readonly SpringAnnotationArgument[] | null;
|
|
7
|
+
export declare function parseStaticStringLiteral(value: string): string | null;
|
|
8
|
+
/** Parse one string literal or a Java/Kotlin annotation string array. */
|
|
9
|
+
export declare function parseStaticStringValues(value: string): readonly string[] | null;
|
|
10
|
+
/** Parse `Foo.class` or `Foo::class`; an Object/Any default returns an empty string. */
|
|
11
|
+
export declare function parseStaticClassLiteral(value: string): string | null;
|
|
12
|
+
/** Normalize a declared bean type to the graph's simple/qualified raw type key. */
|
|
13
|
+
export declare function normalizeSpringBeanType(rawType: string): string | null;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
function splitTopLevel(value, separator) {
|
|
2
|
+
const parts = [];
|
|
3
|
+
const stack = [];
|
|
4
|
+
let quote = null;
|
|
5
|
+
let escaped = false;
|
|
6
|
+
let start = 0;
|
|
7
|
+
// Angle brackets are deliberate: Java/Kotlin generic expressions may contain
|
|
8
|
+
// commas that are not annotation-argument separators. Ambiguous comparison
|
|
9
|
+
// expressions remain unsupported and fail closed instead of being mis-split.
|
|
10
|
+
const closing = new Map([
|
|
11
|
+
['(', ')'],
|
|
12
|
+
['[', ']'],
|
|
13
|
+
['{', '}'],
|
|
14
|
+
['<', '>'],
|
|
15
|
+
]);
|
|
16
|
+
for (let index = 0; index < value.length; index++) {
|
|
17
|
+
const char = value[index];
|
|
18
|
+
if (quote === '"""') {
|
|
19
|
+
if (value.startsWith('"""', index)) {
|
|
20
|
+
quote = null;
|
|
21
|
+
index += 2;
|
|
22
|
+
}
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (quote !== null) {
|
|
26
|
+
if (escaped)
|
|
27
|
+
escaped = false;
|
|
28
|
+
else if (char === '\\')
|
|
29
|
+
escaped = true;
|
|
30
|
+
else if (char === quote)
|
|
31
|
+
quote = null;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (value.startsWith('"""', index)) {
|
|
35
|
+
quote = '"""';
|
|
36
|
+
index += 2;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (char === '"' || char === "'") {
|
|
40
|
+
quote = char;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const closingChar = closing.get(char);
|
|
44
|
+
if (closingChar !== undefined) {
|
|
45
|
+
stack.push(closingChar);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (stack[stack.length - 1] === char) {
|
|
49
|
+
stack.pop();
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (char === separator && stack.length === 0) {
|
|
53
|
+
parts.push(value.slice(start, index).trim());
|
|
54
|
+
start = index + 1;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (quote !== null || stack.length > 0)
|
|
58
|
+
return null;
|
|
59
|
+
parts.push(value.slice(start).trim());
|
|
60
|
+
return parts;
|
|
61
|
+
}
|
|
62
|
+
function topLevelAssignment(argument) {
|
|
63
|
+
const stack = [];
|
|
64
|
+
let quote = null;
|
|
65
|
+
let escaped = false;
|
|
66
|
+
// Keep the same deliberate generic-delimiter policy as splitTopLevel.
|
|
67
|
+
const closing = new Map([
|
|
68
|
+
['(', ')'],
|
|
69
|
+
['[', ']'],
|
|
70
|
+
['{', '}'],
|
|
71
|
+
['<', '>'],
|
|
72
|
+
]);
|
|
73
|
+
for (let index = 0; index < argument.length; index++) {
|
|
74
|
+
const char = argument[index];
|
|
75
|
+
if (quote === '"""') {
|
|
76
|
+
if (argument.startsWith('"""', index)) {
|
|
77
|
+
quote = null;
|
|
78
|
+
index += 2;
|
|
79
|
+
}
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (quote !== null) {
|
|
83
|
+
if (escaped)
|
|
84
|
+
escaped = false;
|
|
85
|
+
else if (char === '\\')
|
|
86
|
+
escaped = true;
|
|
87
|
+
else if (char === quote)
|
|
88
|
+
quote = null;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (argument.startsWith('"""', index)) {
|
|
92
|
+
quote = '"""';
|
|
93
|
+
index += 2;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (char === '"' || char === "'") {
|
|
97
|
+
quote = char;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const closingChar = closing.get(char);
|
|
101
|
+
if (closingChar !== undefined) {
|
|
102
|
+
stack.push(closingChar);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (stack[stack.length - 1] === char) {
|
|
106
|
+
stack.pop();
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (char === '=' && stack.length === 0)
|
|
110
|
+
return index;
|
|
111
|
+
}
|
|
112
|
+
return -1;
|
|
113
|
+
}
|
|
114
|
+
/** Parse Java/Kotlin annotation arguments without evaluating constants. */
|
|
115
|
+
export function parseSpringAnnotationArguments(annotationText) {
|
|
116
|
+
const open = annotationText.indexOf('(');
|
|
117
|
+
if (open === -1)
|
|
118
|
+
return [];
|
|
119
|
+
const close = annotationText.lastIndexOf(')');
|
|
120
|
+
if (close < open || annotationText.slice(close + 1).trim().length > 0)
|
|
121
|
+
return null;
|
|
122
|
+
const body = annotationText.slice(open + 1, close).trim();
|
|
123
|
+
if (body.length === 0)
|
|
124
|
+
return [];
|
|
125
|
+
const rawArguments = splitTopLevel(body, ',');
|
|
126
|
+
if (rawArguments === null || rawArguments.some((argument) => argument.length === 0))
|
|
127
|
+
return null;
|
|
128
|
+
const parsed = [];
|
|
129
|
+
for (const raw of rawArguments) {
|
|
130
|
+
const assignment = topLevelAssignment(raw);
|
|
131
|
+
if (assignment === -1) {
|
|
132
|
+
parsed.push({ value: raw });
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const name = raw.slice(0, assignment).trim();
|
|
136
|
+
const value = raw.slice(assignment + 1).trim();
|
|
137
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) || value.length === 0)
|
|
138
|
+
return null;
|
|
139
|
+
parsed.push({ name, value });
|
|
140
|
+
}
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
export function parseStaticStringLiteral(value) {
|
|
144
|
+
const trimmed = value.trim();
|
|
145
|
+
if (trimmed.startsWith('"""')) {
|
|
146
|
+
if (trimmed.length < 6 || !trimmed.endsWith('"""'))
|
|
147
|
+
return null;
|
|
148
|
+
const raw = trimmed.slice(3, -3);
|
|
149
|
+
if (raw.includes('"""') || /\$(?:\{|[A-Za-z_])/.test(raw))
|
|
150
|
+
return null;
|
|
151
|
+
return raw;
|
|
152
|
+
}
|
|
153
|
+
const match = /^"((?:\\.|[^"\\])*)"$/s.exec(trimmed);
|
|
154
|
+
if (match === null)
|
|
155
|
+
return null;
|
|
156
|
+
if (/(^|[^\\])\$(?:\{|[A-Za-z_])/.test(match[1]))
|
|
157
|
+
return null;
|
|
158
|
+
try {
|
|
159
|
+
return JSON.parse(`"${match[1]}"`);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** Parse one string literal or a Java/Kotlin annotation string array. */
|
|
166
|
+
export function parseStaticStringValues(value) {
|
|
167
|
+
const trimmed = value.trim();
|
|
168
|
+
const pair = (trimmed.startsWith('{') && trimmed.endsWith('}')) ||
|
|
169
|
+
(trimmed.startsWith('[') && trimmed.endsWith(']'));
|
|
170
|
+
const body = pair ? trimmed.slice(1, -1).trim() : trimmed;
|
|
171
|
+
if (body.length === 0)
|
|
172
|
+
return [];
|
|
173
|
+
const parts = pair ? splitTopLevel(body, ',') : [body];
|
|
174
|
+
if (parts === null)
|
|
175
|
+
return null;
|
|
176
|
+
const strings = [];
|
|
177
|
+
for (const part of parts) {
|
|
178
|
+
const parsed = parseStaticStringLiteral(part);
|
|
179
|
+
if (parsed === null)
|
|
180
|
+
return null;
|
|
181
|
+
strings.push(parsed);
|
|
182
|
+
}
|
|
183
|
+
return strings;
|
|
184
|
+
}
|
|
185
|
+
/** Parse `Foo.class` or `Foo::class`; an Object/Any default returns an empty string. */
|
|
186
|
+
export function parseStaticClassLiteral(value) {
|
|
187
|
+
const compact = value.replace(/\s+/g, '');
|
|
188
|
+
const match = /^([A-Za-z_$][A-Za-z0-9_$.]*)(?:\.class|::class)$/.exec(compact);
|
|
189
|
+
if (match === null)
|
|
190
|
+
return null;
|
|
191
|
+
const typeName = match[1];
|
|
192
|
+
if (typeName === 'Object' ||
|
|
193
|
+
typeName === 'java.lang.Object' ||
|
|
194
|
+
typeName === 'Any' ||
|
|
195
|
+
typeName === 'kotlin.Any') {
|
|
196
|
+
return '';
|
|
197
|
+
}
|
|
198
|
+
return typeName;
|
|
199
|
+
}
|
|
200
|
+
/** Normalize a declared bean type to the graph's simple/qualified raw type key. */
|
|
201
|
+
export function normalizeSpringBeanType(rawType) {
|
|
202
|
+
// Projection keywords are tokens only when separated from the following
|
|
203
|
+
// type. Strip them before whitespace compaction so valid lowercase type
|
|
204
|
+
// aliases such as `outputStream` and `inside.Type` remain intact.
|
|
205
|
+
let normalized = rawType
|
|
206
|
+
.replace(/^(?:out|in)\s+/, '')
|
|
207
|
+
.replace(/([<,])\s*(?:out|in)\s+/g, '$1')
|
|
208
|
+
.replace(/\s+/g, '')
|
|
209
|
+
.replace(/^kotlin\.collections\.Mutable(List|Set|Collection|Map)(?=<|$)/, 'kotlin.collections.$1')
|
|
210
|
+
.replace(/^Mutable(List|Set|Collection|Map)(?=<|$)/, '$1')
|
|
211
|
+
.replace(/\?$/, '');
|
|
212
|
+
const generic = normalized.indexOf('<');
|
|
213
|
+
if (generic !== -1) {
|
|
214
|
+
if (!normalized.endsWith('>'))
|
|
215
|
+
return null;
|
|
216
|
+
normalized = normalized.slice(0, generic);
|
|
217
|
+
}
|
|
218
|
+
if (normalized === 'void' ||
|
|
219
|
+
normalized === 'Void' ||
|
|
220
|
+
normalized === 'Unit' ||
|
|
221
|
+
normalized === 'kotlin.Unit') {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
return /^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/.test(normalized)
|
|
225
|
+
? normalized
|
|
226
|
+
: null;
|
|
227
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GraphNode } from '../../../../_shared/index.js';
|
|
2
|
+
import type { SpringAopStaticPointcut } from './aop.js';
|
|
3
|
+
export interface SpringAopOwnedMethod {
|
|
4
|
+
readonly method: GraphNode;
|
|
5
|
+
readonly owner: GraphNode;
|
|
6
|
+
}
|
|
7
|
+
export interface SpringAopCandidateIndex {
|
|
8
|
+
readonly totalCandidates: number;
|
|
9
|
+
candidatesFor(pointcut: SpringAopStaticPointcut): readonly SpringAopOwnedMethod[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build immutable candidate lists once per pipeline run. The pointcut matcher
|
|
13
|
+
* remains the final authority; this index only returns safe supersets.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createSpringAopCandidateIndex(candidates: readonly SpringAopOwnedMethod[], methodAnnotations: ReadonlyMap<string, ReadonlySet<string>>): SpringAopCandidateIndex;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
function ownerPatternLiteralPrefix(pattern) {
|
|
2
|
+
const wildcardIndex = pattern.indexOf('*');
|
|
3
|
+
const descendantIndex = pattern.indexOf('..');
|
|
4
|
+
const firstDynamicIndex = [wildcardIndex, descendantIndex]
|
|
5
|
+
.filter((index) => index >= 0)
|
|
6
|
+
.reduce((first, index) => Math.min(first, index), pattern.length);
|
|
7
|
+
return pattern.slice(0, firstDynamicIndex);
|
|
8
|
+
}
|
|
9
|
+
function lowerBoundByQualifiedName(buckets, prefix) {
|
|
10
|
+
let low = 0;
|
|
11
|
+
let high = buckets.length;
|
|
12
|
+
while (low < high) {
|
|
13
|
+
const middle = low + Math.floor((high - low) / 2);
|
|
14
|
+
if ((buckets[middle]?.qualifiedName ?? '') < prefix)
|
|
15
|
+
low = middle + 1;
|
|
16
|
+
else
|
|
17
|
+
high = middle;
|
|
18
|
+
}
|
|
19
|
+
return low;
|
|
20
|
+
}
|
|
21
|
+
function compareStrings(left, right) {
|
|
22
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build immutable candidate lists once per pipeline run. The pointcut matcher
|
|
26
|
+
* remains the final authority; this index only returns safe supersets.
|
|
27
|
+
*/
|
|
28
|
+
export function createSpringAopCandidateIndex(candidates, methodAnnotations) {
|
|
29
|
+
const allCandidates = [...candidates];
|
|
30
|
+
const candidatesByAnnotation = new Map();
|
|
31
|
+
const candidatesByExactOwner = new Map();
|
|
32
|
+
const ownerBucketsById = new Map();
|
|
33
|
+
for (const candidate of allCandidates) {
|
|
34
|
+
for (const annotation of methodAnnotations.get(candidate.method.id) ?? []) {
|
|
35
|
+
const annotated = candidatesByAnnotation.get(annotation) ?? [];
|
|
36
|
+
annotated.push(candidate);
|
|
37
|
+
candidatesByAnnotation.set(annotation, annotated);
|
|
38
|
+
}
|
|
39
|
+
const qualifiedName = candidate.owner.properties.qualifiedName;
|
|
40
|
+
if (typeof qualifiedName !== 'string' || qualifiedName.length === 0)
|
|
41
|
+
continue;
|
|
42
|
+
const exactOwnerCandidates = candidatesByExactOwner.get(qualifiedName) ?? [];
|
|
43
|
+
exactOwnerCandidates.push(candidate);
|
|
44
|
+
candidatesByExactOwner.set(qualifiedName, exactOwnerCandidates);
|
|
45
|
+
let bucket = ownerBucketsById.get(candidate.owner.id);
|
|
46
|
+
if (bucket === undefined) {
|
|
47
|
+
bucket = { id: candidate.owner.id, qualifiedName, candidates: [] };
|
|
48
|
+
ownerBucketsById.set(candidate.owner.id, bucket);
|
|
49
|
+
}
|
|
50
|
+
bucket.candidates.push(candidate);
|
|
51
|
+
}
|
|
52
|
+
const ownerBuckets = [...ownerBucketsById.values()].sort((left, right) => compareStrings(left.qualifiedName, right.qualifiedName) || compareStrings(left.id, right.id));
|
|
53
|
+
const candidatesByOwnerPattern = new Map();
|
|
54
|
+
return {
|
|
55
|
+
totalCandidates: allCandidates.length,
|
|
56
|
+
candidatesFor(pointcut) {
|
|
57
|
+
if (pointcut.kind === 'annotation') {
|
|
58
|
+
return candidatesByAnnotation.get(pointcut.annotation) ?? [];
|
|
59
|
+
}
|
|
60
|
+
if (!pointcut.ownerPattern.includes('*') && !pointcut.ownerPattern.includes('..')) {
|
|
61
|
+
return candidatesByExactOwner.get(pointcut.ownerPattern) ?? [];
|
|
62
|
+
}
|
|
63
|
+
// Unqualified wildcard patterns (for example `*Service` or `Order*`)
|
|
64
|
+
// match the owner simple name. The qualified-name prefix index cannot
|
|
65
|
+
// safely narrow those, so preserve the full candidate superset.
|
|
66
|
+
if (!pointcut.ownerPattern.includes('.'))
|
|
67
|
+
return allCandidates;
|
|
68
|
+
const prefix = ownerPatternLiteralPrefix(pointcut.ownerPattern);
|
|
69
|
+
if (prefix.length === 0)
|
|
70
|
+
return allCandidates;
|
|
71
|
+
const cached = candidatesByOwnerPattern.get(pointcut.ownerPattern);
|
|
72
|
+
if (cached !== undefined)
|
|
73
|
+
return cached;
|
|
74
|
+
const selected = [];
|
|
75
|
+
for (let index = lowerBoundByQualifiedName(ownerBuckets, prefix); index < ownerBuckets.length; index += 1) {
|
|
76
|
+
const bucket = ownerBuckets[index];
|
|
77
|
+
if (bucket === undefined || !bucket.qualifiedName.startsWith(prefix))
|
|
78
|
+
break;
|
|
79
|
+
selected.push(...bucket.candidates);
|
|
80
|
+
}
|
|
81
|
+
candidatesByOwnerPattern.set(pointcut.ownerPattern, selected);
|
|
82
|
+
return selected;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { GraphNode, ParsedFile, Range, ScopeId } from '../../../../_shared/index.js';
|
|
2
|
+
import type { KnowledgeGraph } from '../../../graph/types.js';
|
|
3
|
+
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
4
|
+
import type { GraphNodeLookup } from '../../scope-resolution/graph-bridge/node-lookup.js';
|
|
5
|
+
export declare const SPRING_AOP_REASON_PREFIX = "spring-aop:v1:";
|
|
6
|
+
export declare const SPRING_AOP_EVIDENCE_DESCRIPTION_PREFIX = "Spring AOP: ";
|
|
7
|
+
export declare const SPRING_AOP_EVIDENCE_ID_PREFIX = "CodeElement:spring-aop:";
|
|
8
|
+
export type SpringAopBehavior = 'transactional' | 'caching' | 'cacheable' | 'cache-evict' | 'cache-put' | 'authorization';
|
|
9
|
+
export type SpringAopAdviceKind = 'around' | 'before' | 'after' | 'after-returning' | 'after-throwing' | 'pointcut';
|
|
10
|
+
export interface SpringAopAnnotationFact {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly text: string;
|
|
13
|
+
readonly line: number;
|
|
14
|
+
/** Kotlin use-site targets do not describe a callable annotation here. */
|
|
15
|
+
readonly useSiteTarget?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SpringAopOwnerFact<Annotation extends SpringAopAnnotationFact = SpringAopAnnotationFact> {
|
|
18
|
+
readonly ownerScopeId: ScopeId;
|
|
19
|
+
readonly ownerKind: 'class' | 'callable';
|
|
20
|
+
readonly ownerFilePath?: string;
|
|
21
|
+
/** Exact syntax range used only as a fail-closed bridge for collapsed language scopes. */
|
|
22
|
+
readonly ownerRange?: Range;
|
|
23
|
+
/** The language models this owner/member as static, but it belongs to a singleton instance. */
|
|
24
|
+
readonly singletonInstance?: true;
|
|
25
|
+
readonly annotations: readonly Annotation[];
|
|
26
|
+
}
|
|
27
|
+
export interface SpringAopMetadataAdapter<Annotation extends SpringAopAnnotationFact> {
|
|
28
|
+
getFacts(filePath: string): readonly SpringAopOwnerFact<Annotation>[];
|
|
29
|
+
isPackageVisibilityIncomplete(filePath: string): boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface SpringAopBehaviorReason {
|
|
32
|
+
readonly kind: 'behavior';
|
|
33
|
+
readonly annotation: string;
|
|
34
|
+
readonly behavior: SpringAopBehavior;
|
|
35
|
+
readonly declaredOn: 'class' | 'method';
|
|
36
|
+
readonly activation: 'unknown';
|
|
37
|
+
readonly proxy: 'possible';
|
|
38
|
+
}
|
|
39
|
+
export interface SpringAopAdviceReason {
|
|
40
|
+
readonly kind: 'advice';
|
|
41
|
+
readonly annotation: string;
|
|
42
|
+
readonly advice: Exclude<SpringAopAdviceKind, 'pointcut'>;
|
|
43
|
+
readonly pointcut: string;
|
|
44
|
+
readonly match: 'static';
|
|
45
|
+
readonly activation: 'unknown';
|
|
46
|
+
readonly proxy: 'possible';
|
|
47
|
+
}
|
|
48
|
+
export interface SpringAopPointcutReason {
|
|
49
|
+
readonly kind: 'pointcut';
|
|
50
|
+
readonly annotation: string;
|
|
51
|
+
readonly pointcut: string | null;
|
|
52
|
+
readonly match: 'static' | 'unresolved';
|
|
53
|
+
readonly resolution: 'resolved' | 'unknown';
|
|
54
|
+
}
|
|
55
|
+
export interface SpringAopAspectReason {
|
|
56
|
+
readonly kind: 'aspect';
|
|
57
|
+
readonly annotation: string;
|
|
58
|
+
readonly activation: 'unknown';
|
|
59
|
+
readonly registration: 'unknown';
|
|
60
|
+
}
|
|
61
|
+
export type SpringAopReason = SpringAopBehaviorReason | SpringAopAdviceReason | SpringAopPointcutReason | SpringAopAspectReason;
|
|
62
|
+
export interface SpringAopAspectRecord {
|
|
63
|
+
readonly ownerId: string;
|
|
64
|
+
readonly annotation: string;
|
|
65
|
+
readonly line: number;
|
|
66
|
+
}
|
|
67
|
+
export interface SpringAopBehaviorRecord {
|
|
68
|
+
readonly ownerId: string;
|
|
69
|
+
readonly ownerKind: 'class' | 'callable';
|
|
70
|
+
readonly annotation: string;
|
|
71
|
+
readonly behavior: SpringAopBehavior;
|
|
72
|
+
readonly line: number;
|
|
73
|
+
}
|
|
74
|
+
export interface SpringAopAdviceRecord {
|
|
75
|
+
readonly ownerId: string;
|
|
76
|
+
readonly annotation: string;
|
|
77
|
+
readonly advice: SpringAopAdviceKind;
|
|
78
|
+
readonly pointcut: string | null;
|
|
79
|
+
readonly line: number;
|
|
80
|
+
}
|
|
81
|
+
export interface SpringAopGraphMetadata {
|
|
82
|
+
readonly candidateFilePaths: ReadonlySet<string>;
|
|
83
|
+
readonly aspectClassIds: ReadonlySet<string>;
|
|
84
|
+
readonly singletonInstanceClassIds: ReadonlySet<string>;
|
|
85
|
+
readonly aspects: readonly SpringAopAspectRecord[];
|
|
86
|
+
readonly behaviors: readonly SpringAopBehaviorRecord[];
|
|
87
|
+
readonly advices: readonly SpringAopAdviceRecord[];
|
|
88
|
+
}
|
|
89
|
+
export declare function getSpringAopGraphMetadata(graph: KnowledgeGraph): SpringAopGraphMetadata;
|
|
90
|
+
export declare function hasSpringAopRelevantAnnotation(annotations: readonly Pick<SpringAopAnnotationFact, 'name'>[]): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Resolve syntax facts after imports and package visibility are complete.
|
|
93
|
+
* Language adapters own AST shape only; this shared layer owns framework FQNs.
|
|
94
|
+
*/
|
|
95
|
+
export declare function createSpringAopMetadataAttacher<Annotation extends SpringAopAnnotationFact>(adapter: SpringAopMetadataAdapter<Annotation>): (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, indexes: ScopeResolutionIndexes) => void;
|
|
96
|
+
export declare function encodeSpringAopReason(reason: SpringAopReason): string;
|
|
97
|
+
/** Decode only the current, validated reason contract; malformed/foreign rows fail closed. */
|
|
98
|
+
export declare function decodeSpringAopReason(value: unknown): SpringAopReason | undefined;
|
|
99
|
+
export declare function isSpringAopEvidenceNode(node: GraphNode): boolean;
|
|
100
|
+
export interface SpringAopExecutionPointcut {
|
|
101
|
+
readonly kind: 'execution';
|
|
102
|
+
readonly ownerPattern: string;
|
|
103
|
+
readonly methodPattern: string;
|
|
104
|
+
readonly visibility?: 'public';
|
|
105
|
+
readonly parameterCount?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface SpringAopWithinPointcut {
|
|
108
|
+
readonly kind: 'within';
|
|
109
|
+
readonly ownerPattern: string;
|
|
110
|
+
}
|
|
111
|
+
export interface SpringAopAnnotationPointcut {
|
|
112
|
+
readonly kind: 'annotation';
|
|
113
|
+
readonly annotation: string;
|
|
114
|
+
}
|
|
115
|
+
export type SpringAopStaticPointcut = SpringAopExecutionPointcut | SpringAopWithinPointcut | SpringAopAnnotationPointcut;
|
|
116
|
+
/** Parse the deliberately narrow, fully static pointcut subset supported in v1. */
|
|
117
|
+
export declare function parseSpringAopPointcut(expression: string): SpringAopStaticPointcut | null;
|
|
118
|
+
export declare function springAopPointcutMatches(pointcut: SpringAopStaticPointcut, owner: GraphNode, method: GraphNode, methodAnnotations?: ReadonlySet<string>): boolean;
|