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,433 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase: springConfig
|
|
3
|
+
*
|
|
4
|
+
* Adds key-only nodes for statically readable Spring
|
|
5
|
+
* `application*.properties` / `application*.yml` / `application*.yaml` files.
|
|
6
|
+
* Language-specific ScopeResolver hooks attach consumers later. Configuration
|
|
7
|
+
* values are deliberately never copied into the graph because they may contain
|
|
8
|
+
* credentials and key identity is sufficient for impact analysis.
|
|
9
|
+
*
|
|
10
|
+
* @deps structure
|
|
11
|
+
* @reads Spring application configuration files
|
|
12
|
+
* @writes Property nodes and DEFINES edges
|
|
13
|
+
*/
|
|
14
|
+
import fs from 'node:fs/promises';
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
import { createRequire } from 'node:module';
|
|
17
|
+
import { SPRING_CONFIG_DESCRIPTION } from '../frameworks/spring/config-bindings.js';
|
|
18
|
+
import { generateId } from '../../../lib/utils.js';
|
|
19
|
+
import { getPhaseOutput } from './types.js';
|
|
20
|
+
const require = createRequire(import.meta.url);
|
|
21
|
+
const yaml = require('js-yaml');
|
|
22
|
+
// js-yaml 5 dropped DEFAULT_SCHEMA; CORE plus these tags is what it used to be, so
|
|
23
|
+
// explicitly tagged values keep parsing instead of throwing (an unknown tag aborts
|
|
24
|
+
// the whole file). None of them can execute code.
|
|
25
|
+
const SPRING_YAML_SCHEMA = yaml.CORE_SCHEMA.withTags(yaml.mergeTag, yaml.timestampTag, yaml.binaryTag, yaml.omapTag, yaml.pairsTag, yaml.setTag);
|
|
26
|
+
const MAX_CONFIG_FILE_BYTES = 2 * 1024 * 1024;
|
|
27
|
+
const MAX_YAML_TRAVERSAL_DEPTH = 128;
|
|
28
|
+
const MAX_YAML_TRAVERSAL_NODES = 100_000;
|
|
29
|
+
/** Match only Spring Boot's conventional application config file names. */
|
|
30
|
+
export function classifySpringConfigFile(filePath) {
|
|
31
|
+
const base = path.posix.basename(filePath.replaceAll('\\', '/'));
|
|
32
|
+
const match = /^application(?:-([^.]+))?\.(properties|ya?ml)$/i.exec(base);
|
|
33
|
+
if (match === null)
|
|
34
|
+
return null;
|
|
35
|
+
return {
|
|
36
|
+
filePath,
|
|
37
|
+
...(match[1] ? { profile: match[1] } : {}),
|
|
38
|
+
format: match[2].toLowerCase() === 'properties' ? 'properties' : 'yaml',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function unescapePropertyKey(raw) {
|
|
42
|
+
return raw
|
|
43
|
+
.replace(/\\u([0-9a-fA-F]{4})/g, (_match, hex) => String.fromCharCode(Number.parseInt(hex, 16)))
|
|
44
|
+
.replace(/\\([:=#!\\ ])/g, '$1');
|
|
45
|
+
}
|
|
46
|
+
function logicalPropertiesLines(content) {
|
|
47
|
+
const physical = content.split(/\r?\n/);
|
|
48
|
+
const logical = [];
|
|
49
|
+
let current = '';
|
|
50
|
+
let startLine = 1;
|
|
51
|
+
for (let index = 0; index < physical.length; index++) {
|
|
52
|
+
const line = physical[index];
|
|
53
|
+
if (current.length === 0)
|
|
54
|
+
startLine = index + 1;
|
|
55
|
+
current += current.length === 0 ? line : line.trimStart();
|
|
56
|
+
let trailingBackslashes = 0;
|
|
57
|
+
for (let cursor = current.length - 1; cursor >= 0 && current[cursor] === '\\'; cursor--) {
|
|
58
|
+
trailingBackslashes++;
|
|
59
|
+
}
|
|
60
|
+
if (trailingBackslashes % 2 === 1) {
|
|
61
|
+
current = current.slice(0, -1);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
logical.push({ text: current, line: startLine });
|
|
65
|
+
current = '';
|
|
66
|
+
}
|
|
67
|
+
if (current.length > 0)
|
|
68
|
+
logical.push({ text: current, line: startLine });
|
|
69
|
+
return logical;
|
|
70
|
+
}
|
|
71
|
+
/** Parse `.properties` keys without retaining their values. */
|
|
72
|
+
export function parseSpringProperties(content, filePath, profile) {
|
|
73
|
+
const keys = [];
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
for (const logical of logicalPropertiesLines(content)) {
|
|
76
|
+
const trimmed = logical.text.trimStart();
|
|
77
|
+
if (trimmed.length === 0 || trimmed.startsWith('#') || trimmed.startsWith('!'))
|
|
78
|
+
continue;
|
|
79
|
+
let separator = -1;
|
|
80
|
+
let escaped = false;
|
|
81
|
+
for (let index = 0; index < trimmed.length; index++) {
|
|
82
|
+
const char = trimmed[index];
|
|
83
|
+
if (!escaped && (char === '=' || char === ':' || /\s/.test(char))) {
|
|
84
|
+
separator = index;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
escaped = !escaped && char === '\\';
|
|
88
|
+
if (char !== '\\')
|
|
89
|
+
escaped = false;
|
|
90
|
+
}
|
|
91
|
+
const rawKey = (separator === -1 ? trimmed : trimmed.slice(0, separator)).trim();
|
|
92
|
+
const key = unescapePropertyKey(rawKey);
|
|
93
|
+
if (key.length === 0 || seen.has(key))
|
|
94
|
+
continue;
|
|
95
|
+
seen.add(key);
|
|
96
|
+
keys.push({
|
|
97
|
+
key,
|
|
98
|
+
filePath,
|
|
99
|
+
line: logical.line,
|
|
100
|
+
...(profile ? { profile } : {}),
|
|
101
|
+
format: 'properties',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return keys;
|
|
105
|
+
}
|
|
106
|
+
function consumeYamlTraversalBudget(state, depth) {
|
|
107
|
+
if (depth > MAX_YAML_TRAVERSAL_DEPTH) {
|
|
108
|
+
throw new Error(`Spring YAML traversal depth exceeds ${MAX_YAML_TRAVERSAL_DEPTH}`);
|
|
109
|
+
}
|
|
110
|
+
state.remainingNodes--;
|
|
111
|
+
if (state.remainingNodes < 0) {
|
|
112
|
+
throw new Error(`Spring YAML traversal exceeds ${MAX_YAML_TRAVERSAL_NODES} nodes`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function isObjectValue(value) {
|
|
116
|
+
return value !== null && typeof value === 'object';
|
|
117
|
+
}
|
|
118
|
+
// Aliases are resolved to their anchor event by name while the tree is built,
|
|
119
|
+
// so following one here is a single pointer hop.
|
|
120
|
+
function resolveYamlAliasEvent(event) {
|
|
121
|
+
return event?.aliasOf ?? event;
|
|
122
|
+
}
|
|
123
|
+
function yamlMappingPairs(event) {
|
|
124
|
+
const pairs = [];
|
|
125
|
+
for (let index = 0; index + 1 < event.children.length; index += 2) {
|
|
126
|
+
const keyEvent = event.children[index];
|
|
127
|
+
const valueEvent = event.children[index + 1];
|
|
128
|
+
if (keyEvent.kind !== 'scalar')
|
|
129
|
+
continue;
|
|
130
|
+
pairs.push({ key: String(keyEvent.result), keyEvent, valueEvent });
|
|
131
|
+
}
|
|
132
|
+
return pairs;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* First match in a pre-order walk of `event`, following sequences and `<<` merge
|
|
136
|
+
* chains. Iterative: children are pushed in reverse so the explicit stack pops
|
|
137
|
+
* them in declaration order, which is what makes "first match" mean the same
|
|
138
|
+
* thing it did when this recursed.
|
|
139
|
+
*/
|
|
140
|
+
function findYamlMappingLocation(event, key, traversal) {
|
|
141
|
+
const visited = new Set();
|
|
142
|
+
const stack = [{ event, depth: 0 }];
|
|
143
|
+
while (stack.length > 0) {
|
|
144
|
+
const step = stack.pop();
|
|
145
|
+
if (step === undefined)
|
|
146
|
+
break;
|
|
147
|
+
consumeYamlTraversalBudget(traversal, step.depth);
|
|
148
|
+
const resolved = resolveYamlAliasEvent(step.event);
|
|
149
|
+
if (resolved === undefined || visited.has(resolved))
|
|
150
|
+
continue;
|
|
151
|
+
visited.add(resolved);
|
|
152
|
+
if (resolved.kind === 'sequence') {
|
|
153
|
+
for (let index = resolved.children.length - 1; index >= 0; index--) {
|
|
154
|
+
stack.push({ event: resolved.children[index], depth: step.depth + 1 });
|
|
155
|
+
}
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (resolved.kind !== 'mapping')
|
|
159
|
+
continue;
|
|
160
|
+
const pairs = yamlMappingPairs(resolved);
|
|
161
|
+
const direct = pairs.find((pair) => pair.key === key);
|
|
162
|
+
if (direct !== undefined) {
|
|
163
|
+
return { valueEvent: direct.valueEvent, line: direct.keyEvent.startLine };
|
|
164
|
+
}
|
|
165
|
+
const merges = pairs.filter((pair) => pair.key === '<<');
|
|
166
|
+
for (let index = merges.length - 1; index >= 0; index--) {
|
|
167
|
+
stack.push({ event: merges[index].valueEvent, depth: step.depth + 1 });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Flatten a document to `dotted.key -> line`, iteratively. Children are pushed in
|
|
174
|
+
* reverse so the stack pops them in declaration order, keeping `out` in the same
|
|
175
|
+
* insertion order β and the traversal budget consumed in the same sequence β as
|
|
176
|
+
* the recursive walk this replaced.
|
|
177
|
+
*/
|
|
178
|
+
function flattenYamlValue(value, event, prefix, out, traversal) {
|
|
179
|
+
const stack = [
|
|
180
|
+
{ kind: 'visit', value, event, prefix, sourceLine: event?.startLine ?? 1, depth: 0 },
|
|
181
|
+
];
|
|
182
|
+
while (stack.length > 0) {
|
|
183
|
+
const step = stack.pop();
|
|
184
|
+
if (step === undefined)
|
|
185
|
+
break;
|
|
186
|
+
if (step.kind === 'leave') {
|
|
187
|
+
traversal.activeObjects.delete(step.object);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const { value: current, prefix: currentPrefix, sourceLine, depth } = step;
|
|
191
|
+
consumeYamlTraversalBudget(traversal, depth);
|
|
192
|
+
const resolvedEvent = resolveYamlAliasEvent(step.event);
|
|
193
|
+
const trackedObject = isObjectValue(current) ? current : undefined;
|
|
194
|
+
if (trackedObject !== undefined) {
|
|
195
|
+
if (traversal.activeObjects.has(trackedObject))
|
|
196
|
+
continue;
|
|
197
|
+
traversal.activeObjects.add(trackedObject);
|
|
198
|
+
stack.push({ kind: 'leave', object: trackedObject });
|
|
199
|
+
}
|
|
200
|
+
if (Array.isArray(current)) {
|
|
201
|
+
if (current.length === 0 && currentPrefix.length > 0 && !out.has(currentPrefix)) {
|
|
202
|
+
out.set(currentPrefix, sourceLine);
|
|
203
|
+
}
|
|
204
|
+
for (let index = current.length - 1; index >= 0; index--) {
|
|
205
|
+
stack.push({
|
|
206
|
+
kind: 'visit',
|
|
207
|
+
value: current[index],
|
|
208
|
+
event: resolvedEvent?.children[index],
|
|
209
|
+
prefix: `${currentPrefix}[${index}]`,
|
|
210
|
+
sourceLine,
|
|
211
|
+
depth: depth + 1,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (current !== null &&
|
|
217
|
+
typeof current === 'object' &&
|
|
218
|
+
(resolvedEvent?.kind === 'mapping' || resolvedEvent === undefined)) {
|
|
219
|
+
// js-yaml 5 builds `!!set` as a native Set, whose members are not own
|
|
220
|
+
// properties; v4 built a plain `{member: null}` object. Enumerate them so a
|
|
221
|
+
// tagged set still contributes one key per member instead of a bare leaf.
|
|
222
|
+
const entries = current instanceof Set
|
|
223
|
+
? [...current].map((member) => [String(member), null])
|
|
224
|
+
: Object.entries(current);
|
|
225
|
+
if (entries.length === 0 && currentPrefix.length > 0 && !out.has(currentPrefix)) {
|
|
226
|
+
out.set(currentPrefix, sourceLine);
|
|
227
|
+
}
|
|
228
|
+
for (let index = entries.length - 1; index >= 0; index--) {
|
|
229
|
+
const [key, nested] = entries[index];
|
|
230
|
+
const location = findYamlMappingLocation(resolvedEvent, key, traversal);
|
|
231
|
+
stack.push({
|
|
232
|
+
kind: 'visit',
|
|
233
|
+
value: nested,
|
|
234
|
+
event: location?.valueEvent,
|
|
235
|
+
prefix: currentPrefix.length === 0 ? key : `${currentPrefix}.${key}`,
|
|
236
|
+
sourceLine: location?.line ?? sourceLine,
|
|
237
|
+
depth: depth + 1,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (currentPrefix.length > 0 && !out.has(currentPrefix))
|
|
243
|
+
out.set(currentPrefix, sourceLine);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// js-yaml 5 reports node positions as source offsets; map them to 1-based lines.
|
|
247
|
+
function makeLineResolver(source) {
|
|
248
|
+
const lineStarts = [0];
|
|
249
|
+
for (let index = 0; index < source.length; index++) {
|
|
250
|
+
if (source[index] === '\n')
|
|
251
|
+
lineStarts.push(index + 1);
|
|
252
|
+
}
|
|
253
|
+
return (offset) => {
|
|
254
|
+
let low = 0;
|
|
255
|
+
let high = lineStarts.length - 1;
|
|
256
|
+
let line = 0;
|
|
257
|
+
while (low <= high) {
|
|
258
|
+
const mid = (low + high) >> 1;
|
|
259
|
+
if (lineStarts[mid] <= offset) {
|
|
260
|
+
line = mid;
|
|
261
|
+
low = mid + 1;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
high = mid - 1;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return line + 1;
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Rebuild the parse tree from js-yaml 5's event stream (v4's `listener` option
|
|
272
|
+
* was removed). Returns each document's root event, with aliases already
|
|
273
|
+
* resolved to their anchor event so merged/aliased keys keep the line where
|
|
274
|
+
* they were declared.
|
|
275
|
+
*
|
|
276
|
+
* One node per event, so this pass is bounded by MAX_CONFIG_FILE_BYTES alone β
|
|
277
|
+
* MAX_YAML_TRAVERSAL_NODES governs the later walk, which can revisit a shared
|
|
278
|
+
* anchor many times and so needs a budget this linear pass does not.
|
|
279
|
+
*/
|
|
280
|
+
function buildYamlEventTree(events, source) {
|
|
281
|
+
const lineOf = makeLineResolver(source);
|
|
282
|
+
const anchors = new Map();
|
|
283
|
+
const stack = [];
|
|
284
|
+
const documentRoots = [];
|
|
285
|
+
const anchorName = (start, end) => start >= 0 && end > start ? source.slice(start, end) : null;
|
|
286
|
+
const attach = (node) => {
|
|
287
|
+
stack[stack.length - 1]?.children.push(node);
|
|
288
|
+
};
|
|
289
|
+
const register = (name, node) => {
|
|
290
|
+
if (name !== null)
|
|
291
|
+
anchors.set(name, node);
|
|
292
|
+
};
|
|
293
|
+
for (const event of events) {
|
|
294
|
+
switch (event.type) {
|
|
295
|
+
case yaml.EVENT_DOCUMENT:
|
|
296
|
+
// Anchors are document-scoped. constructFromEvents already rejects a
|
|
297
|
+
// cross-document alias before we get here, so this only keeps the two
|
|
298
|
+
// layers from disagreeing.
|
|
299
|
+
anchors.clear();
|
|
300
|
+
stack.push({
|
|
301
|
+
startLine: 1,
|
|
302
|
+
kind: null,
|
|
303
|
+
result: undefined,
|
|
304
|
+
aliasOf: undefined,
|
|
305
|
+
children: [],
|
|
306
|
+
});
|
|
307
|
+
break;
|
|
308
|
+
case yaml.EVENT_MAPPING:
|
|
309
|
+
case yaml.EVENT_SEQUENCE: {
|
|
310
|
+
const node = {
|
|
311
|
+
startLine: lineOf(event.start),
|
|
312
|
+
kind: event.type === yaml.EVENT_MAPPING ? 'mapping' : 'sequence',
|
|
313
|
+
result: undefined,
|
|
314
|
+
aliasOf: undefined,
|
|
315
|
+
children: [],
|
|
316
|
+
};
|
|
317
|
+
register(anchorName(event.anchorStart, event.anchorEnd), node);
|
|
318
|
+
attach(node);
|
|
319
|
+
stack.push(node);
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
case yaml.EVENT_SCALAR: {
|
|
323
|
+
const node = {
|
|
324
|
+
startLine: lineOf(event.valueStart),
|
|
325
|
+
kind: 'scalar',
|
|
326
|
+
result: yaml.getScalarValue(source, event),
|
|
327
|
+
aliasOf: undefined,
|
|
328
|
+
children: [],
|
|
329
|
+
};
|
|
330
|
+
register(anchorName(event.anchorStart, event.anchorEnd), node);
|
|
331
|
+
attach(node);
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
case yaml.EVENT_ALIAS: {
|
|
335
|
+
const target = anchors.get(anchorName(event.anchorStart, event.anchorEnd) ?? '');
|
|
336
|
+
attach({ startLine: 1, kind: 'alias', result: undefined, aliasOf: target, children: [] });
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
case yaml.EVENT_POP: {
|
|
340
|
+
const done = stack.pop();
|
|
341
|
+
// Documents are the only top-level containers, so a pop that empties the
|
|
342
|
+
// stack closes a document; its single child is the document's root value.
|
|
343
|
+
if (done !== undefined && stack.length === 0)
|
|
344
|
+
documentRoots.push(done.children[0]);
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return documentRoots;
|
|
350
|
+
}
|
|
351
|
+
/** Parse and flatten YAML leaves without retaining their values. */
|
|
352
|
+
export function parseSpringYaml(content, filePath, profile) {
|
|
353
|
+
const flattened = new Map();
|
|
354
|
+
const traversal = {
|
|
355
|
+
remainingNodes: MAX_YAML_TRAVERSAL_NODES,
|
|
356
|
+
activeObjects: new Set(),
|
|
357
|
+
};
|
|
358
|
+
const events = yaml.parseEvents(content, { maxDepth: MAX_YAML_TRAVERSAL_DEPTH });
|
|
359
|
+
const documents = yaml.constructFromEvents(events, {
|
|
360
|
+
source: content,
|
|
361
|
+
schema: SPRING_YAML_SCHEMA,
|
|
362
|
+
json: true,
|
|
363
|
+
});
|
|
364
|
+
const documentEvents = buildYamlEventTree(events, content);
|
|
365
|
+
documents.forEach((document, index) => flattenYamlValue(document, documentEvents[index], '', flattened, traversal));
|
|
366
|
+
return [...flattened.entries()]
|
|
367
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
368
|
+
.map(([key, line]) => ({
|
|
369
|
+
key,
|
|
370
|
+
filePath,
|
|
371
|
+
line,
|
|
372
|
+
...(profile ? { profile } : {}),
|
|
373
|
+
format: 'yaml',
|
|
374
|
+
}));
|
|
375
|
+
}
|
|
376
|
+
function configKeyNodeId(entry) {
|
|
377
|
+
return generateId('Property', `spring-config:${entry.filePath}:${entry.key}`);
|
|
378
|
+
}
|
|
379
|
+
async function readConfigKeys(repoPath, scannedFiles) {
|
|
380
|
+
const keys = [];
|
|
381
|
+
for (const scanned of scannedFiles) {
|
|
382
|
+
const classified = classifySpringConfigFile(scanned.path);
|
|
383
|
+
if (classified === null || scanned.size > MAX_CONFIG_FILE_BYTES)
|
|
384
|
+
continue;
|
|
385
|
+
try {
|
|
386
|
+
const content = await fs.readFile(path.join(repoPath, scanned.path), 'utf8');
|
|
387
|
+
keys.push(...(classified.format === 'properties'
|
|
388
|
+
? parseSpringProperties(content, classified.filePath, classified.profile)
|
|
389
|
+
: parseSpringYaml(content, classified.filePath, classified.profile)));
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
// Malformed configuration is not a reason to fail the entire code index.
|
|
393
|
+
// Fail closed: no keys and therefore no misleading bindings for this file.
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return keys;
|
|
397
|
+
}
|
|
398
|
+
export const springConfigPhase = {
|
|
399
|
+
name: 'springConfig',
|
|
400
|
+
deps: ['structure'],
|
|
401
|
+
async execute(ctx, deps) {
|
|
402
|
+
const { scannedFiles } = getPhaseOutput(deps, 'structure');
|
|
403
|
+
const configKeys = await readConfigKeys(ctx.repoPath, scannedFiles);
|
|
404
|
+
for (const entry of configKeys) {
|
|
405
|
+
const nodeId = configKeyNodeId(entry);
|
|
406
|
+
ctx.graph.addNode({
|
|
407
|
+
id: nodeId,
|
|
408
|
+
label: 'Property',
|
|
409
|
+
properties: {
|
|
410
|
+
name: entry.key,
|
|
411
|
+
filePath: entry.filePath,
|
|
412
|
+
startLine: entry.line,
|
|
413
|
+
endLine: entry.line,
|
|
414
|
+
description: entry.profile
|
|
415
|
+
? `${SPRING_CONFIG_DESCRIPTION} (profile: ${entry.profile})`
|
|
416
|
+
: SPRING_CONFIG_DESCRIPTION,
|
|
417
|
+
},
|
|
418
|
+
});
|
|
419
|
+
const fileId = generateId('File', entry.filePath);
|
|
420
|
+
if (ctx.graph.getNode(fileId) !== undefined) {
|
|
421
|
+
ctx.graph.addRelationship({
|
|
422
|
+
id: generateId('DEFINES', `${fileId}->${nodeId}`),
|
|
423
|
+
sourceId: fileId,
|
|
424
|
+
targetId: nodeId,
|
|
425
|
+
type: 'DEFINES',
|
|
426
|
+
confidence: 1,
|
|
427
|
+
reason: 'spring-config:key',
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return { configKeys: configKeys.length };
|
|
432
|
+
},
|
|
433
|
+
};
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* - Compile-time exhaustiveness (adding a phase = type error until wired)
|
|
14
14
|
* - Each phase is independently testable with mocked inputs
|
|
15
15
|
*/
|
|
16
|
+
import type { GraphEmitControl } from '../../lbug/graph-emit-sink.js';
|
|
16
17
|
import type { KnowledgeGraph } from '../../graph/types.js';
|
|
17
18
|
import type { PipelineProgress } from '../../../_shared/index.js';
|
|
18
19
|
import type { PipelineOptions } from '../pipeline.js';
|
|
@@ -28,6 +29,12 @@ export interface PipelineContext {
|
|
|
28
29
|
readonly options?: PipelineOptions;
|
|
29
30
|
/** Pipeline start timestamp (for elapsed-time logging). */
|
|
30
31
|
readonly pipelineStart: number;
|
|
32
|
+
/**
|
|
33
|
+
* Streamed structural emit (#2680), present only when `streamGraphEmit` is on.
|
|
34
|
+
* `parse` calls `beginStreaming()` at its start; `pruneLocalSymbols` consults
|
|
35
|
+
* `hasStreamedSemanticEdge()`. Absent β everything stays in the graph.
|
|
36
|
+
*/
|
|
37
|
+
readonly graphEmit?: GraphEmitControl;
|
|
31
38
|
}
|
|
32
39
|
/** Wraps a phase's output with timing metadata. */
|
|
33
40
|
export interface PhaseResult<T> {
|
|
@@ -25,6 +25,14 @@ export interface PipelineOptions {
|
|
|
25
25
|
* to retain those nodes under `skipGraphPhases`.
|
|
26
26
|
*/
|
|
27
27
|
skipGraphPhases?: boolean;
|
|
28
|
+
/** Per-advice Spring AOP candidate inspection cap. `0` disables this cap. */
|
|
29
|
+
springAopMaxCandidateInspectionsPerAdvice?: number;
|
|
30
|
+
/** Aggregate Spring AOP candidate inspection cap for one analysis. `0` disables this cap. */
|
|
31
|
+
springAopMaxCandidateInspections?: number;
|
|
32
|
+
/** Per-advice Spring AOP `ADVISED_BY` edge cap. `0` disables this cap. */
|
|
33
|
+
springAopMaxAdvisedEdgesPerAdvice?: number;
|
|
34
|
+
/** Aggregate Spring AOP advice-edge cap for one analysis. `0` disables this cap. */
|
|
35
|
+
springAopMaxAdvisedEdges?: number;
|
|
28
36
|
/**
|
|
29
37
|
* Build the control-flow-graph / PDG substrate (#2081 M1, opt-in via `--pdg`).
|
|
30
38
|
* Off by default: workers skip all CFG work and emit no `cfgSideChannel`, and
|
|
@@ -113,6 +121,22 @@ export interface PipelineOptions {
|
|
|
113
121
|
* whole-graph emit.
|
|
114
122
|
*/
|
|
115
123
|
streamPdgEmit?: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Streamed structural graph emit (#2680). When true, relationships that no
|
|
126
|
+
* mid-pipeline phase reads back (CALLS, IMPORTS, ACCESSES, CONTAINS, ...) are
|
|
127
|
+
* streamed to CSV-on-disk from the parse boundary onward instead of being
|
|
128
|
+
* retained in the in-memory graph β measured ~2.9x reduction of graph heap.
|
|
129
|
+
*
|
|
130
|
+
* NOT free: the `communities`, `processes`, `taintSummaries` and
|
|
131
|
+
* `callSummaries` phases all consume the whole CALLS graph and are disabled
|
|
132
|
+
* under this flag. The caller (`run-analyze`) gates it to full rebuilds.
|
|
133
|
+
* Requires `graphEmitCsvDir`.
|
|
134
|
+
*/
|
|
135
|
+
streamGraphEmit?: boolean;
|
|
136
|
+
/** Directory for the streamed structural CSVs. Required when
|
|
137
|
+
* `streamGraphEmit` is on; supplied by the caller, which owns storage-path
|
|
138
|
+
* resolution (and its native-safe relocation). */
|
|
139
|
+
graphEmitCsvDir?: string;
|
|
116
140
|
/** Streamed PDG-emit write buffer (rows) when `streamPdgEmit` is on (#2202).
|
|
117
141
|
* `undefined` β `DEFAULT_PDG_EMIT_CHUNK_ROWS`. Memory-only; does not affect
|
|
118
142
|
* emitted bytes. */
|
|
@@ -201,9 +225,9 @@ export interface PipelineOptions {
|
|
|
201
225
|
*
|
|
202
226
|
* Phase dependency graph:
|
|
203
227
|
*
|
|
204
|
-
* scan β structure β [markdown, cobol] β parse β [routes, tools, orm]
|
|
205
|
-
* β crossFile β scopeResolution β pruneLocalSymbols
|
|
206
|
-
* β mro β di β communities β processes
|
|
228
|
+
* scan β structure β [springConfig, markdown, cobol] β parse β [routes, tools, orm]
|
|
229
|
+
* β crossFile β scopeResolution β [springAutoConfiguration, springAop] β pruneLocalSymbols
|
|
230
|
+
* β mro β springAopInheritance β di β communities β processes
|
|
207
231
|
*
|
|
208
232
|
* To add a new phase: create a file in pipeline-phases/, export the phase
|
|
209
233
|
* object, and `.register()` it at the appropriate position below. Opt-in
|
|
@@ -15,16 +15,17 @@
|
|
|
15
15
|
* See ARCHITECTURE.md for the full phase dependency diagram.
|
|
16
16
|
*/
|
|
17
17
|
import { createKnowledgeGraph } from '../graph/graph.js';
|
|
18
|
-
import {
|
|
18
|
+
import { GraphEmitSink } from '../lbug/graph-emit-sink.js';
|
|
19
|
+
import { runPipeline, getPhaseOutput, scanPhase, structurePhase, markdownPhase, cobolPhase, parsePhase, routesPhase, toolsPhase, ormPhase, crossFilePhase, scopeResolutionPhase, springConfigPhase, springAutoConfigurationPhase, springAopPhase, springAopInheritancePhase, pruneLocalSymbolsPhase, taintSummariesPhase, callSummariesPhase, mroPhase, diPhase, communitiesPhase, processesPhase, PhaseRegistry, } from './pipeline-phases/index.js';
|
|
19
20
|
// ββ Phase registry βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
20
21
|
/**
|
|
21
22
|
* All pipeline phases with their dependency relationships.
|
|
22
23
|
*
|
|
23
24
|
* Phase dependency graph:
|
|
24
25
|
*
|
|
25
|
-
* scan β structure β [markdown, cobol] β parse β [routes, tools, orm]
|
|
26
|
-
* β crossFile β scopeResolution β pruneLocalSymbols
|
|
27
|
-
* β mro β di β communities β processes
|
|
26
|
+
* scan β structure β [springConfig, markdown, cobol] β parse β [routes, tools, orm]
|
|
27
|
+
* β crossFile β scopeResolution β [springAutoConfiguration, springAop] β pruneLocalSymbols
|
|
28
|
+
* β mro β springAopInheritance β di β communities β processes
|
|
28
29
|
*
|
|
29
30
|
* To add a new phase: create a file in pipeline-phases/, export the phase
|
|
30
31
|
* object, and `.register()` it at the appropriate position below. Opt-in
|
|
@@ -40,6 +41,7 @@ export function buildPhaseList(options) {
|
|
|
40
41
|
return (new PhaseRegistry()
|
|
41
42
|
.register(scanPhase)
|
|
42
43
|
.register(structurePhase)
|
|
44
|
+
.register(springConfigPhase)
|
|
43
45
|
.register(markdownPhase)
|
|
44
46
|
.register(cobolPhase)
|
|
45
47
|
.register(parsePhase)
|
|
@@ -48,6 +50,8 @@ export function buildPhaseList(options) {
|
|
|
48
50
|
.register(ormPhase)
|
|
49
51
|
.register(crossFilePhase)
|
|
50
52
|
.register(scopeResolutionPhase)
|
|
53
|
+
.register(springAutoConfigurationPhase)
|
|
54
|
+
.register(springAopPhase)
|
|
51
55
|
.register(pruneLocalSymbolsPhase)
|
|
52
56
|
// M4 (#2084): interprocedural taint fixpoint β the first real opt-in
|
|
53
57
|
// pdg-gated phase. Off β absent β byte-identical graph. No always-on
|
|
@@ -55,6 +59,7 @@ export function buildPhaseList(options) {
|
|
|
55
59
|
.register(taintSummariesPhase, { enabledWhen: (o) => o.pdg === true })
|
|
56
60
|
.register(callSummariesPhase, { enabledWhen: (o) => o.pdg === true })
|
|
57
61
|
.register(mroPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
62
|
+
.register(springAopInheritancePhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
58
63
|
.register(diPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
59
64
|
.register(communitiesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
60
65
|
.register(processesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
@@ -66,23 +71,59 @@ export function buildPhaseList(options) {
|
|
|
66
71
|
export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
67
72
|
const graph = createKnowledgeGraph();
|
|
68
73
|
const pipelineStart = Date.now();
|
|
74
|
+
// Streamed structural emit (#2680). The sink is a write-routing faΓ§ade over
|
|
75
|
+
// `graph`; it streams nothing until `beginStreaming()` fires at the parse
|
|
76
|
+
// boundary.
|
|
77
|
+
//
|
|
78
|
+
// A missing `graphEmitCsvDir` is a caller bug, not a reason to quietly skip
|
|
79
|
+
// streaming: this is on by default, so a programmatic host that builds its own
|
|
80
|
+
// `PipelineOptions` (eval-server, the MCP daemon, a test) would otherwise ask
|
|
81
|
+
// for streaming, silently not get it, and still see a successful run. Fail
|
|
82
|
+
// loudly instead β the whole point of the surrounding work is that a degraded
|
|
83
|
+
// outcome must never look like a clean one.
|
|
84
|
+
let graphEmitSink;
|
|
85
|
+
if (options?.streamGraphEmit === true) {
|
|
86
|
+
if (options.graphEmitCsvDir === undefined) {
|
|
87
|
+
throw new Error('streamGraphEmit was requested but graphEmitCsvDir is missing. The caller owns ' +
|
|
88
|
+
'storage-path resolution (see resolveNativeSafeStorageDir in run-analyze.ts); ' +
|
|
89
|
+
'pass the directory, or leave streamGraphEmit unset to run without streaming.');
|
|
90
|
+
}
|
|
91
|
+
graphEmitSink = new GraphEmitSink(graph, options.graphEmitCsvDir);
|
|
92
|
+
}
|
|
69
93
|
const phases = buildPhaseList(options);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
94
|
+
let graphEmitManifest;
|
|
95
|
+
let results;
|
|
96
|
+
try {
|
|
97
|
+
results = await runPipeline(phases, {
|
|
98
|
+
repoPath,
|
|
99
|
+
graph: graphEmitSink ?? graph,
|
|
100
|
+
onProgress,
|
|
101
|
+
options,
|
|
102
|
+
pipelineStart,
|
|
103
|
+
graphEmit: graphEmitSink,
|
|
104
|
+
});
|
|
105
|
+
graphEmitManifest = graphEmitSink?.finalize();
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
// Release per-pair fds when the pipeline threw before finalize ran.
|
|
109
|
+
graphEmitSink?.close();
|
|
110
|
+
}
|
|
77
111
|
// Extract final results for the PipelineResult contract
|
|
78
112
|
const { totalFiles, usedWorkerPool } = getPhaseOutput(results, 'parse');
|
|
79
113
|
let communityResult;
|
|
80
114
|
let processResult;
|
|
81
115
|
const scopeResolutionOutput = getPhaseOutput(results, 'scopeResolution');
|
|
82
116
|
const resolutionOutcomes = scopeResolutionOutput.resolutionOutcomes;
|
|
117
|
+
const undecidedSatisfaction = scopeResolutionOutput.undecidedSatisfaction;
|
|
83
118
|
// Streamed PDG-emit manifest (#2202): present only when streaming was on.
|
|
84
119
|
const pdgEmitManifest = scopeResolutionOutput.pdgEmitManifest;
|
|
85
|
-
|
|
120
|
+
const propertyInference = scopeResolutionOutput.propertyInference;
|
|
121
|
+
// Presence check, not `!skipGraphPhases`: phases can now be filtered out by
|
|
122
|
+
// any `enabledWhen` predicate (streamGraphEmit disables communities/processes
|
|
123
|
+
// too), and `getPhaseOutput` THROWS on a phase that was never resolved. Keying
|
|
124
|
+
// off the options flag alone made every filtered-out combination crash here
|
|
125
|
+
// rather than return undefined results.
|
|
126
|
+
if (results.has('communities') && results.has('processes')) {
|
|
86
127
|
communityResult = getPhaseOutput(results, 'communities').communityResult;
|
|
87
128
|
processResult = getPhaseOutput(results, 'processes').processResult;
|
|
88
129
|
}
|
|
@@ -99,13 +140,22 @@ export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
|
99
140
|
},
|
|
100
141
|
});
|
|
101
142
|
return {
|
|
143
|
+
// The RAW graph, deliberately β NOT `graphEmitSink`. Phases above received
|
|
144
|
+
// the sink so their reads are complete, but `loadGraphToLbug` feeds this to
|
|
145
|
+
// `streamAllCSVsToDisk`, and the sink's complete iterator would then emit
|
|
146
|
+
// every streamed edge a SECOND time on top of the per-pair CSVs the sink
|
|
147
|
+
// already wrote and the manifest already COPYs. Returning the sink here
|
|
148
|
+
// silently doubles every streamed relationship in the persisted graph.
|
|
102
149
|
graph,
|
|
103
150
|
repoPath,
|
|
104
151
|
totalFileCount: totalFiles,
|
|
152
|
+
graphEmitManifest,
|
|
105
153
|
communityResult,
|
|
106
154
|
processResult,
|
|
107
155
|
resolutionOutcomes,
|
|
156
|
+
undecidedSatisfaction,
|
|
108
157
|
usedWorkerPool,
|
|
109
158
|
pdgEmitManifest,
|
|
159
|
+
propertyInference,
|
|
110
160
|
};
|
|
111
161
|
};
|