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
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { BindingAccumulator, enrichExportedTypeMap, } from '../binding-accumulator.js';
|
|
18
18
|
import { mergeChunkResults, dispatchChunkParse } from '../parsing-processor.js';
|
|
19
19
|
import { fileContentHash, computeChunkHash, loadParseCacheChunk, persistParseCacheChunk, PARSE_CACHE_VERSION, } from '../../../storage/parse-cache.js';
|
|
20
|
-
import { clearParsedFileStore, persistParsedFileChunk, getDurableParsedFileDir, loadDurableParsedFileIndex, restoreDurableParsedFileShard, } from '../../../storage/parsedfile-store.js';
|
|
20
|
+
import { clearParsedFileStore, persistParsedFileChunk, loadParsedFilesForPaths, getDurableParsedFileDir, loadDurableParsedFileIndex, prepareDurableParsedFileChunk, restoreDurableParsedFileShard, } from '../../../storage/parsedfile-store.js';
|
|
21
21
|
import { DEFAULT_PDG_MAX_FUNCTION_LINES } from '../cfg/collect.js';
|
|
22
22
|
import { processRoutesFromExtracted, resolveRouteHandlerSymbols, buildExportedTypeMapFromGraph, } from '../call-processor.js';
|
|
23
23
|
import { createSemanticModel } from '../model/index.js';
|
|
@@ -26,12 +26,16 @@ import { readFileContents } from '../filesystem-walker.js';
|
|
|
26
26
|
import { isLanguageAvailable, isGrammarRuntimeSkipped, createParserForLanguage, } from '../../tree-sitter/parser-loader.js';
|
|
27
27
|
import { parseSourceSafe } from '../../tree-sitter/safe-parse.js';
|
|
28
28
|
import { getProvider, providers } from '../languages/index.js';
|
|
29
|
+
import { SCOPE_RESOLVERS } from '../scope-resolution/pipeline/registry.js';
|
|
30
|
+
import { DATA_ROUTE_TABLE_SOURCE } from '../route-extractors/data-route-table.js';
|
|
29
31
|
import { createWorkerPool, workerPoolDisabledByEnv, resolveAutoPoolSize, WorkerPoolInitializationError, WorkerPoolDisabledError, } from '../workers/worker-pool.js';
|
|
30
32
|
import { normalizeExtractedRoutePath } from '../route-extractors/route-path.js';
|
|
31
33
|
import { resolveOperands, } from '../route-extractors/python-const-resolver.js';
|
|
32
34
|
import { resolveInheritedSpringRoutes, } from '../route-extractors/spring-shared.js';
|
|
33
35
|
import fs from 'node:fs';
|
|
36
|
+
import { effectiveRamBytes, memoryAutopilotDisabled } from '../utils/effective-ram.js';
|
|
34
37
|
import path from 'node:path';
|
|
38
|
+
import v8 from 'node:v8';
|
|
35
39
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
36
40
|
import { isDev } from '../utils/env.js';
|
|
37
41
|
import { isVerboseIngestionEnabled } from '../utils/verbose.js';
|
|
@@ -39,6 +43,74 @@ import { endTimer, isDeferredResolutionProfileEnabled, logDeferredProfile, start
|
|
|
39
43
|
import { isDebugHeapEnabled, logHeapProbe } from '../utils/heap-probe.js';
|
|
40
44
|
import { logger } from '../../logger.js';
|
|
41
45
|
// ── Constants ──────────────────────────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Heap-scale guardrail constants (#2649). Measured on a Linux-kernel analyze:
|
|
48
|
+
* ~75 graph nodes per PARSEABLE file (~5M nodes / ~65k parseable files;
|
|
49
|
+
* validated against heap probes at chunks 25/50/75 of 113 — the first
|
|
50
|
+
* calibration divided by total scanned files and under-projected by ~30%),
|
|
51
|
+
* main-thread heap per node. C-heavy corpus; other language mixes vary — these
|
|
52
|
+
* feed a WARNING and an emergency abort, never a hard admission gate, so
|
|
53
|
+
* estimate error only shifts when the operator hears about the problem, not
|
|
54
|
+
* whether analyze runs.
|
|
55
|
+
*
|
|
56
|
+
* RECALIBRATED for streamed structural emit (#2680), which is on by default for
|
|
57
|
+
* full rebuilds and holds relationships out of the JS heap. The original 2250
|
|
58
|
+
* was measured against the object-based graph; an A/B at 400k nodes / 1.08M
|
|
59
|
+
* edges put streaming at 1.40x smaller (819 MB -> 584 MB), so the corpus-
|
|
60
|
+
* calibrated figure is divided by that ratio: 2250 / 1.40 ~= 1600. Scaling the
|
|
61
|
+
* measured constant rather than substituting a synthetic one keeps #2649's
|
|
62
|
+
* kernel calibration intact and changes only the one thing that actually moved.
|
|
63
|
+
*
|
|
64
|
+
* If streaming is disabled (GITNEXUS_STREAM_GRAPH_EMIT=0, or any non-force run)
|
|
65
|
+
* this UNDER-projects by ~40%, so the preflight warning may stay quiet on a repo
|
|
66
|
+
* that then struggles. That is the safe direction to be wrong in: the abort
|
|
67
|
+
* below reads LIVE heap use, not this projection, so it still catches the real
|
|
68
|
+
* condition — only the early warning is affected.
|
|
69
|
+
*/
|
|
70
|
+
const PROJECTED_NODES_PER_FILE = 75;
|
|
71
|
+
const PROJECTED_HEAP_BYTES_PER_NODE = 1600;
|
|
72
|
+
/** Warn at scan end when the projection crosses this share of the heap limit. */
|
|
73
|
+
const PREFLIGHT_WARN_FRACTION = 0.85;
|
|
74
|
+
/**
|
|
75
|
+
* Abort the chunk loop when live heap use crosses this share of the limit.
|
|
76
|
+
* Above ~0.95 V8 enters the ineffective-mark-compact death spiral (2s+ GC
|
|
77
|
+
* pauses that also falsely idle-timeout healthy workers, #2649); 0.92 leaves
|
|
78
|
+
* one chunk's worth of headroom to fail with an actionable message instead.
|
|
79
|
+
* `GITNEXUS_MEMORY=off` declines the abort (proceed-at-own-risk).
|
|
80
|
+
*/
|
|
81
|
+
const HEAP_ABORT_FRACTION = 0.92;
|
|
82
|
+
/** Projected main-thread heap need for the parse phase (#2649). */
|
|
83
|
+
export function projectParseHeapNeedBytes(parseableFileCount) {
|
|
84
|
+
return parseableFileCount * PROJECTED_NODES_PER_FILE * PROJECTED_HEAP_BYTES_PER_NODE;
|
|
85
|
+
}
|
|
86
|
+
/** True when the mid-loop heap guard should abort the parse (#2649). */
|
|
87
|
+
export function shouldAbortForHeapPressure(heapUsedBytes, heapLimitBytes) {
|
|
88
|
+
if (memoryAutopilotDisabled())
|
|
89
|
+
return false;
|
|
90
|
+
return heapUsedBytes > heapLimitBytes * HEAP_ABORT_FRACTION;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The ONE action a user should take when this repository doesn't fit the
|
|
94
|
+
* current heap (#2649). Users hitting memory limits are already frustrated —
|
|
95
|
+
* a menu of env knobs at that moment is noise. Branch on whether the machine
|
|
96
|
+
* itself has more memory to give: if this process's limit sits well below
|
|
97
|
+
* what the RAM-aware auto-sizer would grant (an inherited NODE_OPTIONS pin or
|
|
98
|
+
* explicit flag), the fix is to drop the pin — gitnexus sizes itself.
|
|
99
|
+
* Otherwise the machine is the ceiling and only scope or hardware helps.
|
|
100
|
+
* Escape hatches (GITNEXUS_MEMORY etc.) stay in the README env table.
|
|
101
|
+
*/
|
|
102
|
+
export function heapPressureRemedy(heapLimitBytes) {
|
|
103
|
+
// Effective RAM honors a real cgroup limit — raw os.totalmem() told users
|
|
104
|
+
// inside an 8GB-limited container on a 64GB host that "this machine has
|
|
105
|
+
// more memory available", an advice loop with no exit (#2649 review).
|
|
106
|
+
const autoCapBytes = effectiveRamBytes() * 0.75;
|
|
107
|
+
if (heapLimitBytes < autoCapBytes * 0.9) {
|
|
108
|
+
return (`This machine has more memory available: re-run without the --max-old-space-size ` +
|
|
109
|
+
`pin (NODE_OPTIONS or node flag) — gitnexus sizes its heap to the machine automatically.`);
|
|
110
|
+
}
|
|
111
|
+
return (`This machine is at its memory ceiling: exclude generated or vendored directories ` +
|
|
112
|
+
`via .gitnexusignore, or analyze on a machine with more memory.`);
|
|
113
|
+
}
|
|
42
114
|
/** Max bytes of source content to load per parse chunk.
|
|
43
115
|
*
|
|
44
116
|
* Memory bound for the worker pool dispatch + a granularity knob for
|
|
@@ -278,7 +350,8 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
278
350
|
const skippedByLang = new Map();
|
|
279
351
|
for (const f of scannedFiles) {
|
|
280
352
|
const lang = getLanguageFromFilename(f.path);
|
|
281
|
-
|
|
353
|
+
const provider = lang === null ? undefined : getProvider(lang);
|
|
354
|
+
if (lang && provider?.parseStrategy !== 'standalone' && !isLanguageAvailable(lang)) {
|
|
282
355
|
skippedByLang.set(lang, (skippedByLang.get(lang) || 0) + 1);
|
|
283
356
|
}
|
|
284
357
|
}
|
|
@@ -364,6 +437,19 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
364
437
|
const dispatchSubBatchMaxBytes = Number.isFinite(subBatchEnv) && subBatchEnv > 0
|
|
365
438
|
? subBatchEnv
|
|
366
439
|
: Math.max(MIN_SUB_BATCH_BYTES, Math.ceil(chunkByteBudget / (effectivePoolSize * TARGET_JOBS_PER_WORKER)));
|
|
440
|
+
// Heap-scale guardrails (#2649), measured on a Linux-kernel analyze
|
|
441
|
+
// (94,773 files): ~55 graph nodes per parseable file and ~2.2KB of
|
|
442
|
+
// main-thread heap per node, linear across 113 chunks (see
|
|
443
|
+
// docs/plans/2026-07-23-gitnexus-plan-large-repo-analyze-oom.md §2).
|
|
444
|
+
// Estimates, not contracts — used only to warn early (preflight) and to
|
|
445
|
+
// convert a certain multi-minute GC death spiral into an immediate
|
|
446
|
+
// actionable error (mid-loop guard).
|
|
447
|
+
const projectedHeapNeedBytes = projectParseHeapNeedBytes(parseableScanned.length);
|
|
448
|
+
const heapLimitBytes = v8.getHeapStatistics().heap_size_limit;
|
|
449
|
+
if (projectedHeapNeedBytes > heapLimitBytes * PREFLIGHT_WARN_FRACTION) {
|
|
450
|
+
logger.warn(`Large repository: analyzing ${parseableScanned.length} files needs roughly ${Math.round(projectedHeapNeedBytes / 1024 / 1024 / 1024)}GB of memory, ` +
|
|
451
|
+
`but Node is limited to ${Math.round(heapLimitBytes / 1024 / 1024 / 1024)}GB — analyze may stop early. ${heapPressureRemedy(heapLimitBytes)}`);
|
|
452
|
+
}
|
|
367
453
|
const chunks = [];
|
|
368
454
|
let currentChunk = [];
|
|
369
455
|
let currentBytes = 0;
|
|
@@ -675,6 +761,16 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
675
761
|
if (heapProbeEveryN > 0 && chunkIdx > 0 && chunkIdx % heapProbeEveryN === 0) {
|
|
676
762
|
logHeapProbe(`parse-chunk-${chunkIdx}`, `nodes=${graph.nodeCount} parsedFiles=${allParsedFiles.length}`);
|
|
677
763
|
}
|
|
764
|
+
// #2649 mid-loop heap guard: fail actionably BEFORE V8 enters the
|
|
765
|
+
// ineffective-mark-compact death spiral (which also falsely times out
|
|
766
|
+
// healthy workers). The pool is torn down by this function's finally.
|
|
767
|
+
const heapUsedNow = process.memoryUsage().heapUsed;
|
|
768
|
+
const heapLimitNow = v8.getHeapStatistics().heap_size_limit;
|
|
769
|
+
if (shouldAbortForHeapPressure(heapUsedNow, heapLimitNow)) {
|
|
770
|
+
throw new Error(`Analyze stopped before running out of memory: ${Math.round(heapUsedNow / 1024 / 1024)}MB of the ` +
|
|
771
|
+
`${Math.round(heapLimitNow / 1024 / 1024)}MB Node heap in use at parse chunk ${chunkIdx + 1}/${numChunks} (#2649). ` +
|
|
772
|
+
heapPressureRemedy(heapLimitNow));
|
|
773
|
+
}
|
|
678
774
|
const chunkPaths = chunks[chunkIdx];
|
|
679
775
|
// Start wall-clock for the per-chunk throughput log emitted at end
|
|
680
776
|
// of this iteration. The gate is computed once above; here we just
|
|
@@ -777,6 +873,17 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
777
873
|
// Cache miss: dispatch to workers, capture the raw results, store
|
|
778
874
|
// them under the chunk hash for the next run.
|
|
779
875
|
chunkCacheMisses++;
|
|
876
|
+
if (durableParsedFileDir !== undefined && chunkHash !== null) {
|
|
877
|
+
try {
|
|
878
|
+
await prepareDurableParsedFileChunk(durableParsedFileDir, chunkHash);
|
|
879
|
+
}
|
|
880
|
+
catch (err) {
|
|
881
|
+
// The durable store is an optimization — degrade like the restore
|
|
882
|
+
// path does instead of failing the analyze. Workers recreate the
|
|
883
|
+
// directory on write, so at worst the old generation lingers.
|
|
884
|
+
logger.warn({ err, chunkHash: chunkHash.slice(0, 8) }, 'parsedfile-cache: could not reset durable chunk generation; continuing');
|
|
885
|
+
}
|
|
886
|
+
}
|
|
780
887
|
const progressForChunk = (current, _total, filePath) => {
|
|
781
888
|
const globalCurrent = filesParsedSoFar + current;
|
|
782
889
|
// Parse phase covers 20-70 (M2). Deferred extraction handles 70-95.
|
|
@@ -1151,9 +1258,57 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
1151
1258
|
}
|
|
1152
1259
|
}
|
|
1153
1260
|
logHeapProbe('parse-impl-return', `exportedTypeMap=${exportedTypeMap.size} parsedFiles=${allParsedFiles.length} nodes=${graph.nodeCount}`);
|
|
1261
|
+
const routeFilePaths = new Set(allPaths);
|
|
1262
|
+
const dataRouteFilePaths = new Set(allDecoratorRoutes
|
|
1263
|
+
.filter((route) => route.source === DATA_ROUTE_TABLE_SOURCE)
|
|
1264
|
+
.map((route) => route.filePath));
|
|
1265
|
+
const routeResolutionConfigs = new Map();
|
|
1266
|
+
for (const filePath of dataRouteFilePaths) {
|
|
1267
|
+
const language = getLanguageFromFilename(filePath);
|
|
1268
|
+
if (language === null || routeResolutionConfigs.has(language))
|
|
1269
|
+
continue;
|
|
1270
|
+
const resolver = SCOPE_RESOLVERS.get(language);
|
|
1271
|
+
routeResolutionConfigs.set(language, resolver?.loadResolutionConfig === undefined
|
|
1272
|
+
? undefined
|
|
1273
|
+
: await resolver.loadResolutionConfig(repoPath));
|
|
1274
|
+
}
|
|
1275
|
+
let routeResolutionFiles = allParsedFiles;
|
|
1276
|
+
const resolveRouteImportTarget = (parsedImport, fromFile) => {
|
|
1277
|
+
const language = getLanguageFromFilename(fromFile);
|
|
1278
|
+
if (language === null)
|
|
1279
|
+
return null;
|
|
1280
|
+
const target = SCOPE_RESOLVERS.get(language)?.resolveImportTarget(parsedImport.targetRaw ?? '', fromFile, routeFilePaths, routeResolutionConfigs.get(language), { parsedFiles: routeResolutionFiles, parsedImport });
|
|
1281
|
+
if (typeof target === 'string')
|
|
1282
|
+
return target;
|
|
1283
|
+
return target?.length === 1 ? target[0] : null;
|
|
1284
|
+
};
|
|
1285
|
+
if (parsedFileStorePath !== undefined && dataRouteFilePaths.size > 0) {
|
|
1286
|
+
const byPath = await loadParsedFilesForPaths(parsedFileStorePath, dataRouteFilePaths);
|
|
1287
|
+
for (const parsed of allParsedFiles) {
|
|
1288
|
+
if (dataRouteFilePaths.has(parsed.filePath))
|
|
1289
|
+
byPath.set(parsed.filePath, parsed);
|
|
1290
|
+
}
|
|
1291
|
+
routeResolutionFiles = [...byPath.values()];
|
|
1292
|
+
const directTargets = new Set();
|
|
1293
|
+
for (const parsed of routeResolutionFiles) {
|
|
1294
|
+
for (const parsedImport of parsed.parsedImports) {
|
|
1295
|
+
const target = resolveRouteImportTarget(parsedImport, parsed.filePath);
|
|
1296
|
+
if (target !== null)
|
|
1297
|
+
directTargets.add(target);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
const importedFiles = await loadParsedFilesForPaths(parsedFileStorePath, directTargets);
|
|
1301
|
+
for (const parsed of importedFiles.values())
|
|
1302
|
+
byPath.set(parsed.filePath, parsed);
|
|
1303
|
+
routeResolutionFiles = [...byPath.values()];
|
|
1304
|
+
}
|
|
1154
1305
|
// Part 2 (#2138): resolve each route's handler to a real symbol UID now that
|
|
1155
1306
|
// the model is fully populated and decorator-route prefixes are finalized.
|
|
1156
|
-
const routeHandlerSymbols = resolveRouteHandlerSymbols(model, allExtractedRoutes, allDecoratorRoutes
|
|
1307
|
+
const routeHandlerSymbols = resolveRouteHandlerSymbols(model, allExtractedRoutes, allDecoratorRoutes, {
|
|
1308
|
+
files: routeResolutionFiles,
|
|
1309
|
+
resolveImportTarget: resolveRouteImportTarget,
|
|
1310
|
+
isExportedSymbol: (nodeId) => graph.getNode(nodeId)?.properties.isExported === true,
|
|
1311
|
+
});
|
|
1157
1312
|
return {
|
|
1158
1313
|
exportedTypeMap,
|
|
1159
1314
|
allFetchCalls,
|
|
@@ -21,6 +21,11 @@ export const parsePhase = {
|
|
|
21
21
|
name: 'parse',
|
|
22
22
|
deps: ['structure', 'markdown', 'cobol'],
|
|
23
23
|
async execute(ctx, deps) {
|
|
24
|
+
// Begin streamed structural emit (#2680), if enabled. Deliberately here and
|
|
25
|
+
// not at graph construction: the pre-parse phases are not all write-only —
|
|
26
|
+
// `mapCobolToGraph` scans CALLS edges and removes the unresolved ones — and
|
|
27
|
+
// nothing before parse produces bulk edge volume anyway.
|
|
28
|
+
ctx.graphEmit?.beginStreaming();
|
|
24
29
|
const { scannedFiles, allPaths, allPathSet, totalFiles } = getPhaseOutput(deps, 'structure');
|
|
25
30
|
const result = await runChunkedParseAndResolve(ctx.graph, scannedFiles, allPaths, totalFiles, ctx.repoPath, ctx.pipelineStart, ctx.onProgress, ctx.options);
|
|
26
31
|
return {
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Detects execution flows (processes) and creates Process nodes +
|
|
5
5
|
* STEP_IN_PROCESS edges. Also links Route/Tool nodes to processes.
|
|
6
6
|
*
|
|
7
|
-
* @deps communities, routes, tools, pruneLocalSymbols
|
|
8
|
-
* @reads graph (all nodes and relationships), communityResult, routeRegistry,
|
|
7
|
+
* @deps communities, routes, tools, pruneLocalSymbols, structure, parse
|
|
8
|
+
* @reads graph (all nodes and relationships), communityResult, routeRegistry,
|
|
9
|
+
* toolDefs, parse's allFetchCalls + allORMQueries (R3-6 sink sites)
|
|
9
10
|
* @writes graph (Process nodes, STEP_IN_PROCESS edges, ENTRY_POINT_OF edges)
|
|
10
11
|
*/
|
|
11
12
|
import type { PipelinePhase } from './types.js';
|
|
@@ -13,4 +14,12 @@ import { type ProcessDetectionResult } from '../process-processor.js';
|
|
|
13
14
|
export interface ProcessesOutput {
|
|
14
15
|
processResult: ProcessDetectionResult;
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Compute the dynamic max-processes budget from the symbol count.
|
|
19
|
+
*
|
|
20
|
+
* Scales proportionally (symbolCount / 10) with a floor of 20.
|
|
21
|
+
* Prior to #2198 this was capped at 300 via `Math.min(300, …)`,
|
|
22
|
+
* silently truncating process detection on large repositories.
|
|
23
|
+
*/
|
|
24
|
+
export declare function computeDynamicMaxProcesses(symbolCount: number): number;
|
|
16
25
|
export declare const processesPhase: PipelinePhase<ProcessesOutput>;
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Detects execution flows (processes) and creates Process nodes +
|
|
5
5
|
* STEP_IN_PROCESS edges. Also links Route/Tool nodes to processes.
|
|
6
6
|
*
|
|
7
|
-
* @deps communities, routes, tools, pruneLocalSymbols
|
|
8
|
-
* @reads graph (all nodes and relationships), communityResult, routeRegistry,
|
|
7
|
+
* @deps communities, routes, tools, pruneLocalSymbols, structure, parse
|
|
8
|
+
* @reads graph (all nodes and relationships), communityResult, routeRegistry,
|
|
9
|
+
* toolDefs, parse's allFetchCalls + allORMQueries (R3-6 sink sites)
|
|
9
10
|
* @writes graph (Process nodes, STEP_IN_PROCESS edges, ENTRY_POINT_OF edges)
|
|
10
11
|
*/
|
|
11
12
|
import { getPhaseOutput } from './types.js';
|
|
@@ -14,13 +15,31 @@ import { generateId } from '../../../lib/utils.js';
|
|
|
14
15
|
import { routeNodeKey } from '../route-extractors/route-path.js';
|
|
15
16
|
import { isDev } from '../utils/env.js';
|
|
16
17
|
import { logger } from '../../logger.js';
|
|
18
|
+
/**
|
|
19
|
+
* Compute the dynamic max-processes budget from the symbol count.
|
|
20
|
+
*
|
|
21
|
+
* Scales proportionally (symbolCount / 10) with a floor of 20.
|
|
22
|
+
* Prior to #2198 this was capped at 300 via `Math.min(300, …)`,
|
|
23
|
+
* silently truncating process detection on large repositories.
|
|
24
|
+
*/
|
|
25
|
+
export function computeDynamicMaxProcesses(symbolCount) {
|
|
26
|
+
return Math.max(20, Math.round(symbolCount / 10));
|
|
27
|
+
}
|
|
17
28
|
export const processesPhase = {
|
|
18
29
|
name: 'processes',
|
|
19
|
-
// `structure` supplies `totalFiles` (progress counter)
|
|
20
|
-
//
|
|
30
|
+
// `structure` supplies `totalFiles` (progress counter), which is why this
|
|
31
|
+
// phase historically avoided depending on `parse` at all — that dependency
|
|
32
|
+
// was spurious for a progress number.
|
|
33
|
+
//
|
|
34
|
+
// It is no longer spurious. R3-6 reads `allFetchCalls` / `allORMQueries` from
|
|
35
|
+
// the parse output to learn WHERE the program reaches outward, which is what
|
|
36
|
+
// lets a trace end at a sink instead of only at a leaf. That is a real data
|
|
37
|
+
// dependency, so it is declared rather than reached for implicitly — and the
|
|
38
|
+
// read below still fails open, so a pipeline without that output detects no
|
|
39
|
+
// sinks rather than failing the phase. `pruneLocalSymbols` is declared
|
|
21
40
|
// explicitly so process extraction always reads the trimmed graph even if a
|
|
22
41
|
// future option drops the intervening `mro`/`communities` phases.
|
|
23
|
-
deps: ['communities', 'routes', 'tools', 'pruneLocalSymbols', 'structure'],
|
|
42
|
+
deps: ['communities', 'routes', 'tools', 'pruneLocalSymbols', 'structure', 'parse'],
|
|
24
43
|
async execute(ctx, deps) {
|
|
25
44
|
const { totalFiles } = getPhaseOutput(deps, 'structure');
|
|
26
45
|
const { communityResult } = getPhaseOutput(deps, 'communities');
|
|
@@ -37,7 +56,33 @@ export const processesPhase = {
|
|
|
37
56
|
if (n.label !== 'File')
|
|
38
57
|
symbolCount++;
|
|
39
58
|
});
|
|
40
|
-
const dynamicMaxProcesses =
|
|
59
|
+
const dynamicMaxProcesses = computeDynamicMaxProcesses(symbolCount);
|
|
60
|
+
// R3-6: where the program reaches outward. Already collected by the parse
|
|
61
|
+
// phase for FILE-level FETCHES/QUERIES edges; reused here at function
|
|
62
|
+
// granularity so a trace can end somewhere meaningful instead of only at a
|
|
63
|
+
// leaf. Absent (or an older parse output) simply yields no sinks and the
|
|
64
|
+
// previous behaviour.
|
|
65
|
+
//
|
|
66
|
+
// Typed as `ParseOutput` rather than a locally re-declared structural shape,
|
|
67
|
+
// the way every other parse consumer does it (cross-file.ts, orm.ts,
|
|
68
|
+
// routes.ts, tools.ts). `getPhaseOutput` is a raw `as T` cast, so a local
|
|
69
|
+
// shape does not check anything — it only severs the compile-time link, and
|
|
70
|
+
// renaming `allFetchCalls` on `ParseOutput` would then still compile here and
|
|
71
|
+
// silently detect zero sinks. The runtime `.filter` below is the actual
|
|
72
|
+
// guard, and it stays.
|
|
73
|
+
let parseOutput;
|
|
74
|
+
try {
|
|
75
|
+
parseOutput = getPhaseOutput(deps, 'parse');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Fail open: no sinks, previous behaviour. A missing parse output is a
|
|
79
|
+
// pipeline-composition question, not a reason to lose every process.
|
|
80
|
+
parseOutput = undefined;
|
|
81
|
+
}
|
|
82
|
+
const outwardActionSites = [
|
|
83
|
+
...(parseOutput?.allFetchCalls ?? []),
|
|
84
|
+
...(parseOutput?.allORMQueries ?? []),
|
|
85
|
+
].filter((s) => typeof s?.filePath === 'string' && typeof s?.lineNumber === 'number');
|
|
41
86
|
const processResult = await processProcesses(ctx.graph, communityResult.memberships, (message, progress) => {
|
|
42
87
|
const processProgress = 99 + progress * 0.01;
|
|
43
88
|
ctx.onProgress({
|
|
@@ -46,10 +91,60 @@ export const processesPhase = {
|
|
|
46
91
|
message,
|
|
47
92
|
stats: { filesProcessed: totalFiles, totalFiles, nodesCreated: ctx.graph.nodeCount },
|
|
48
93
|
});
|
|
49
|
-
}, { maxProcesses: dynamicMaxProcesses, minSteps: 3 });
|
|
94
|
+
}, { maxProcesses: dynamicMaxProcesses, minSteps: 3 }, outwardActionSites);
|
|
50
95
|
if (isDev) {
|
|
51
96
|
logger.info(`🔄 Process detection: ${processResult.stats.totalProcesses} processes found (${processResult.stats.crossCommunityCount} cross-community)`);
|
|
52
97
|
}
|
|
98
|
+
// Not gated on `isDev`: this is the one line that tells a reader the process
|
|
99
|
+
// list is a SAMPLE. "823 flows" presented without it reads as the complete
|
|
100
|
+
// set, which is the confident-empty failure in its other direction — a
|
|
101
|
+
// confident-COMPLETE one.
|
|
102
|
+
//
|
|
103
|
+
// But it is only a `warn` when a ceiling removed WHOLE FLOWS from the
|
|
104
|
+
// report. That split is the one `ProcessTruncationStats` already documents —
|
|
105
|
+
// "unexplored entry points mean whole flows are missing, while a
|
|
106
|
+
// depth-capped trace means a flow is present but shorter than it really is"
|
|
107
|
+
// — and it is what keeps the line worth reading. Warning on every counter
|
|
108
|
+
// meant warning on every run: this phase overrides only `maxProcesses`, so
|
|
109
|
+
// at the shipped defaults (`maxBranching: 4`, `maxTraceDepth: 10`,
|
|
110
|
+
// per-entry trace budget 12) `calleesDropped` fires for any function with
|
|
111
|
+
// five callees, `tracesDepthCapped` for any chain deeper than ten, and
|
|
112
|
+
// `walksCutByBudget` for any entry point with twelve paths under it. All
|
|
113
|
+
// three are true of every non-trivial repository — and none of them removes
|
|
114
|
+
// an entry point or a completed flow from the list, they only bound how far
|
|
115
|
+
// an already-represented region was walked. A warning that always fires is a
|
|
116
|
+
// warning nobody reads, so those three go to `debug`.
|
|
117
|
+
//
|
|
118
|
+
// `entryPointCandidatesDropped` IS in the loud set even though it fires on
|
|
119
|
+
// any repository with more than 200 candidates, because it is the only
|
|
120
|
+
// ceiling that grows with the repository: `entryPointsUnexplored` and
|
|
121
|
+
// `processesDropped` can only fire while `maxProcesses` (symbols / 10) is
|
|
122
|
+
// small enough to bind, so gating on those two alone would go quiet on
|
|
123
|
+
// exactly the large repositories where 200 of several thousand entry points
|
|
124
|
+
// is the thinnest sample. The message leads with that ratio so the line
|
|
125
|
+
// carries a fact rather than an alarm.
|
|
126
|
+
//
|
|
127
|
+
// `stats.truncation` on the RESULT is untouched and still reports all six
|
|
128
|
+
// counters; this only decides which of them are loud.
|
|
129
|
+
const { truncation } = processResult.stats;
|
|
130
|
+
const entryPointCandidates = processResult.stats.entryPointsFound + truncation.entryPointCandidatesDropped;
|
|
131
|
+
const flowsMissing = truncation.entryPointCandidatesDropped > 0 ||
|
|
132
|
+
truncation.entryPointsUnexplored > 0 ||
|
|
133
|
+
truncation.processesDropped > 0;
|
|
134
|
+
const shape = `${truncation.entryPointCandidatesDropped} of ${entryPointCandidates} candidate entry point(s) never ranked in, ` +
|
|
135
|
+
`${truncation.entryPointsUnexplored} ranked entry point(s) never traced, ` +
|
|
136
|
+
`${truncation.processesDropped} deduplicated flow(s) dropped at maxProcesses, ` +
|
|
137
|
+
`${truncation.tracesDepthCapped} trace(s) cut at maxTraceDepth, ` +
|
|
138
|
+
`${truncation.calleesDropped} callee(s) skipped at maxBranching, ` +
|
|
139
|
+
`${truncation.walksCutByBudget} walk(s) cut by the per-entry trace budget.`;
|
|
140
|
+
if (flowsMissing) {
|
|
141
|
+
logger.warn({ truncation }, `[processes] ${processResult.stats.totalProcesses} flows reported, but whole flows are MISSING: ` +
|
|
142
|
+
`${shape} An absent flow does NOT mean the code path does not exist.`);
|
|
143
|
+
}
|
|
144
|
+
else if (truncation.truncated) {
|
|
145
|
+
logger.debug({ truncation }, `[processes] ${processResult.stats.totalProcesses} flows reported; every flow found is present, ` +
|
|
146
|
+
`but some are shorter than the code path they describe: ${shape}`);
|
|
147
|
+
}
|
|
53
148
|
processResult.processes.forEach((proc) => {
|
|
54
149
|
ctx.graph.addNode({
|
|
55
150
|
id: proc.id,
|
|
@@ -18,6 +18,8 @@ import { phpFileToRouteURL } from '../route-extractors/php.js';
|
|
|
18
18
|
import { extractResponseShapes, extractPHPResponseShapes, } from '../route-extractors/response-shapes.js';
|
|
19
19
|
import { extractMiddlewareChain, extractNextjsMiddlewareConfig, compileMatcher, compiledMatcherMatchesRoute, } from '../route-extractors/middleware.js';
|
|
20
20
|
import { processNextjsFetchRoutes } from '../call-processor.js';
|
|
21
|
+
import { reconcileDispatchGuardRoutes } from '../route-extractors/dispatch-guard.js';
|
|
22
|
+
import { DATA_ROUTE_TABLE_SOURCE } from '../route-extractors/data-route-table.js';
|
|
21
23
|
import { normalizeExtractedRoutePath, normalizeRouteMethod, routeNodeKey, } from '../route-extractors/route-path.js';
|
|
22
24
|
import { generateId } from '../../../lib/utils.js';
|
|
23
25
|
import { readFileContents } from '../filesystem-walker.js';
|
|
@@ -27,6 +29,24 @@ const EXPO_NAV_PATTERNS = [
|
|
|
27
29
|
/router\.(push|replace|navigate)\(\s*['"`]([^'"`]+)['"`]/g,
|
|
28
30
|
/<Link\s+[^>]*href=\s*['"`]([^'"`]+)['"`]/g,
|
|
29
31
|
];
|
|
32
|
+
function handlerSymbolContent(content, handlerNode) {
|
|
33
|
+
if (handlerNode === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
const startLine = handlerNode.properties.startLine;
|
|
36
|
+
const endLine = handlerNode.properties.endLine;
|
|
37
|
+
if (typeof startLine !== 'number' ||
|
|
38
|
+
typeof endLine !== 'number' ||
|
|
39
|
+
!Number.isInteger(startLine) ||
|
|
40
|
+
!Number.isInteger(endLine) ||
|
|
41
|
+
startLine < 0 ||
|
|
42
|
+
endLine < startLine) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return content
|
|
46
|
+
.split(/\r?\n/)
|
|
47
|
+
.slice(startLine, endLine + 1)
|
|
48
|
+
.join('\n');
|
|
49
|
+
}
|
|
30
50
|
const TEMPLATE_URL_PATTERNS = [
|
|
31
51
|
/\b(?:action|href)\s*=\s*["']([^"']+)["']/gi,
|
|
32
52
|
/\burl\s*:\s*["']([^"']+)["'](?!\s*\+)/g,
|
|
@@ -181,30 +201,56 @@ export const routesPhase = {
|
|
|
181
201
|
namedRouteRegistry.set(route.routeName, routeUrl);
|
|
182
202
|
}
|
|
183
203
|
}
|
|
184
|
-
|
|
204
|
+
// A dispatch-guard route observed WITHOUT a verb is dropped when the same
|
|
205
|
+
// URL is claimed WITH one anywhere in the repo — the split route-table
|
|
206
|
+
// idiom, which no single file can reconcile. Framework routes are untouched;
|
|
207
|
+
// their verb-less form is a declaration, not a weaker observation.
|
|
208
|
+
for (const dr of reconcileDispatchGuardRoutes(allDecoratorRoutes)) {
|
|
185
209
|
const url = normalizeExtractedRoutePath(dr.routePath, dr.prefix ?? null);
|
|
210
|
+
const method = normalizeRouteMethod(dr.httpMethod);
|
|
211
|
+
const routeKey = routeNodeKey(method, url);
|
|
212
|
+
// A data-table entry is only a provider route once its static handler has
|
|
213
|
+
// been proven. Other route sources retain their historical fallback.
|
|
214
|
+
if (dr.source === DATA_ROUTE_TABLE_SOURCE && !routeHandlerSymbols.has(routeKey))
|
|
215
|
+
continue;
|
|
186
216
|
addRoute(url, {
|
|
187
217
|
filePath: dr.filePath,
|
|
188
|
-
|
|
189
|
-
|
|
218
|
+
// A route extracted from a file's own AST is usually a decorator; a
|
|
219
|
+
// dispatch guard is the same transport with different provenance, and
|
|
220
|
+
// says so (`ExtractedDecoratorRoute.source`).
|
|
221
|
+
source: dr.source ?? `decorator-${dr.decoratorName}`,
|
|
222
|
+
method,
|
|
190
223
|
});
|
|
191
224
|
}
|
|
192
225
|
let handlerContents;
|
|
193
226
|
if (routeRegistry.size > 0) {
|
|
194
|
-
const
|
|
227
|
+
const handlerPathFor = (routeKey, entry) => {
|
|
228
|
+
if (entry.source !== DATA_ROUTE_TABLE_SOURCE)
|
|
229
|
+
return entry.filePath;
|
|
230
|
+
const handlerSymbolId = routeHandlerSymbols.get(routeKey);
|
|
231
|
+
const resolvedPath = handlerSymbolId
|
|
232
|
+
? ctx.graph.getNode(handlerSymbolId)?.properties.filePath
|
|
233
|
+
: undefined;
|
|
234
|
+
return typeof resolvedPath === 'string' ? resolvedPath : entry.filePath;
|
|
235
|
+
};
|
|
236
|
+
const handlerPaths = [...routeRegistry].map(([key, entry]) => handlerPathFor(key, entry));
|
|
195
237
|
handlerContents = await readFileContents(ctx.repoPath, handlerPaths);
|
|
196
238
|
for (const [routeKey, entry] of routeRegistry) {
|
|
197
|
-
const {
|
|
239
|
+
const { source: routeSource, method: routeMethod, url } = entry;
|
|
240
|
+
const handlerPath = handlerPathFor(routeKey, entry);
|
|
198
241
|
const content = handlerContents.get(handlerPath);
|
|
199
|
-
const
|
|
242
|
+
const handlerSymbolId = routeHandlerSymbols.get(routeKey);
|
|
243
|
+
const analysisContent = entry.source === DATA_ROUTE_TABLE_SOURCE && content
|
|
244
|
+
? handlerSymbolContent(content, handlerSymbolId ? ctx.graph.getNode(handlerSymbolId) : undefined)
|
|
245
|
+
: content;
|
|
246
|
+
const { responseKeys, errorKeys } = analysisContent
|
|
200
247
|
? handlerPath.endsWith('.php')
|
|
201
|
-
? extractPHPResponseShapes(
|
|
202
|
-
: extractResponseShapes(
|
|
248
|
+
? extractPHPResponseShapes(analysisContent)
|
|
249
|
+
: extractResponseShapes(analysisContent)
|
|
203
250
|
: { responseKeys: undefined, errorKeys: undefined };
|
|
204
|
-
const mwResult =
|
|
251
|
+
const mwResult = analysisContent ? extractMiddlewareChain(analysisContent) : undefined;
|
|
205
252
|
const middleware = mwResult?.chain;
|
|
206
253
|
const routeNodeId = generateId('Route', routeKey);
|
|
207
|
-
const handlerSymbolId = routeHandlerSymbols.get(routeKey);
|
|
208
254
|
ctx.graph.addNode({
|
|
209
255
|
id: routeNodeId,
|
|
210
256
|
label: 'Route',
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase: springAop
|
|
3
|
+
*
|
|
4
|
+
* Materializes statically visible Spring proxy/advice behavior after every
|
|
5
|
+
* language resolver has attached normalized metadata to the shared graph.
|
|
6
|
+
* The post-MRO export in this file propagates declarative behavior through
|
|
7
|
+
* METHOD_OVERRIDES/METHOD_IMPLEMENTS without changing @annotation semantics.
|
|
8
|
+
*
|
|
9
|
+
* @deps scopeResolution
|
|
10
|
+
* @reads Class/Method nodes, HAS_METHOD edges, shared Spring AOP metadata
|
|
11
|
+
* @writes synthetic CodeElement nodes, DEFINES/DECLARES/ADVISED_BY edges
|
|
12
|
+
*/
|
|
13
|
+
import type { PipelinePhase } from './types.js';
|
|
14
|
+
export declare const DEFAULT_SPRING_AOP_MAX_CANDIDATE_INSPECTIONS_PER_ADVICE = 100000;
|
|
15
|
+
export declare const DEFAULT_SPRING_AOP_MAX_CANDIDATE_INSPECTIONS = 2000000;
|
|
16
|
+
export declare const DEFAULT_SPRING_AOP_MAX_ADVISED_EDGES_PER_ADVICE = 25000;
|
|
17
|
+
export declare const DEFAULT_SPRING_AOP_MAX_ADVISED_EDGES = 100000;
|
|
18
|
+
export interface SpringAopOutput {
|
|
19
|
+
readonly advisedByEdges: number;
|
|
20
|
+
readonly evidenceNodes: number;
|
|
21
|
+
readonly unresolvedPointcuts: number;
|
|
22
|
+
readonly candidateInspections: number;
|
|
23
|
+
readonly truncatedAdvices: number;
|
|
24
|
+
}
|
|
25
|
+
export interface SpringAopInheritanceOutput {
|
|
26
|
+
readonly inheritedBehaviorEdges: number;
|
|
27
|
+
}
|
|
28
|
+
export declare const springAopPhase: PipelinePhase<SpringAopOutput>;
|
|
29
|
+
/**
|
|
30
|
+
* Propagate behavior evidence across the inheritance decisions materialized by
|
|
31
|
+
* MRO. This is deliberately separate from pointcut matching: `@annotation`
|
|
32
|
+
* continues to mean an annotation declared directly on the callable.
|
|
33
|
+
*/
|
|
34
|
+
export declare const springAopInheritancePhase: PipelinePhase<SpringAopInheritanceOutput>;
|