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
|
@@ -26,6 +26,7 @@ import type { ExtractedContract, RepoHandle } from '../types.js';
|
|
|
26
26
|
export declare const HANDLES_ROUTE_QUERY = "\nMATCH (handlerFile:File)-[r:CodeRelation {type: 'HANDLES_ROUTE'}]->(route:Route)\nRETURN handlerFile.id AS fileId, handlerFile.filePath AS filePath,\n route.name AS routePath, route.id AS routeId,\n route.method AS routeMethod,\n route.handlerSymbolId AS handlerSymbolId,\n route.responseKeys AS responseKeys,\n r.reason AS routeSource";
|
|
27
27
|
export declare const RESOLVE_BY_NAME_QUERY = "\nMATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']\n AND n.name = $name AND n.filePath <> ''\nRETURN n.id AS uid, n.name AS name, n.filePath AS filePath\nLIMIT 2";
|
|
28
28
|
export declare const RESOLVE_IN_MODULE_QUERY = "\nMATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']\n AND n.name = $name AND (n.filePath STARTS WITH $fileDot OR n.filePath STARTS WITH $fileSlash)\nRETURN n.id AS uid, n.name AS name, n.filePath AS filePath\nLIMIT 2";
|
|
29
|
+
export declare const RESOLVE_IN_EXACT_MODULE_QUERY = "\nMATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']\n AND n.name = $name AND n.filePath IN $filePaths\nRETURN n.id AS uid, n.name AS name, n.filePath AS filePath\nLIMIT 2";
|
|
29
30
|
/**
|
|
30
31
|
* Canonicalize a provider-side HTTP path for contract-id generation:
|
|
31
32
|
* - strip query string
|
|
@@ -4,7 +4,9 @@ import Parser from 'tree-sitter';
|
|
|
4
4
|
import { createIgnoreFilter } from '../../../config/ignore-service.js';
|
|
5
5
|
import { readSafe } from './fs-utils.js';
|
|
6
6
|
import { parseSourceSafe } from '../../tree-sitter/safe-parse.js';
|
|
7
|
+
import { toZeroBasedLine } from '../../ingestion/utils/line-base.js';
|
|
7
8
|
import { logger } from '../../logger.js';
|
|
9
|
+
import { DATA_ROUTE_TABLE_SOURCE } from '../../ingestion/route-extractors/data-route-table.js';
|
|
8
10
|
import { getPluginForFile, HTTP_SCAN_GLOB, } from './http-patterns/index.js';
|
|
9
11
|
/**
|
|
10
12
|
* Language-agnostic orchestrator for HTTP route (provider + consumer)
|
|
@@ -89,6 +91,10 @@ RETURN sym.id AS uid, sym.name AS name, sym.filePath AS filePath,
|
|
|
89
91
|
// degenerate edge-less node NOR inflates the uniqueness count and masks the real
|
|
90
92
|
// handler. `LIMIT 2` bounds materialization: distinguishing unique (1) from
|
|
91
93
|
// ambiguous (>=2) never needs more than two rows (the count guard stays exact).
|
|
94
|
+
//
|
|
95
|
+
// determinism: probe — uniqueness discriminator, not a window. `toResolvedSymbol`
|
|
96
|
+
// reads row 0 only when `rows.length === 1`; a 2-row result is discarded whole,
|
|
97
|
+
// so WHICH two rows came back can never reach a caller.
|
|
92
98
|
export const RESOLVE_BY_NAME_QUERY = `
|
|
93
99
|
MATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']
|
|
94
100
|
AND n.name = $name AND n.filePath <> ''
|
|
@@ -96,21 +102,33 @@ RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
|
96
102
|
LIMIT 2`;
|
|
97
103
|
// Resolve an IMPORTED handler by pinning it to the import's target module: the
|
|
98
104
|
// declared export `$name` whose file is the module the handler was imported from
|
|
99
|
-
// (`$
|
|
105
|
+
// (`$filePaths` contains exact source-file and directory-index candidates). This is
|
|
100
106
|
// the precise rung — it survives aliases and local same-name collisions that a
|
|
101
107
|
// repo-wide name lookup cannot, and only resolves on a unique match within that
|
|
102
108
|
// module. `LIMIT 2` keeps the uniqueness count exact (see RESOLVE_BY_NAME_QUERY).
|
|
109
|
+
//
|
|
110
|
+
// determinism: probe — uniqueness discriminator, not a window. Same consumer as
|
|
111
|
+
// RESOLVE_BY_NAME_QUERY: `toResolvedSymbol` reads row 0 only when exactly one row
|
|
112
|
+
// came back, and discards a 2-row result whole.
|
|
103
113
|
export const RESOLVE_IN_MODULE_QUERY = `
|
|
104
114
|
MATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']
|
|
105
115
|
AND n.name = $name AND (n.filePath STARTS WITH $fileDot OR n.filePath STARTS WITH $fileSlash)
|
|
106
116
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
107
117
|
LIMIT 2`;
|
|
118
|
+
// determinism: probe — uniqueness discriminator, not a window. The consumer
|
|
119
|
+
// accepts exactly one row and rejects a 2-row result whole, so row identity
|
|
120
|
+
// cannot affect the resolution decision.
|
|
121
|
+
export const RESOLVE_IN_EXACT_MODULE_QUERY = `
|
|
122
|
+
MATCH (n) WHERE labels(n) IN ['Function','Method','CodeElement']
|
|
123
|
+
AND n.name = $name AND n.filePath IN $filePaths
|
|
124
|
+
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
125
|
+
LIMIT 2`;
|
|
108
126
|
// Source-file extensions an import specifier may resolve to (stripped before
|
|
109
127
|
// building the module file-prefix so `./h/users` and `./h/users.ts` agree).
|
|
110
128
|
const SOURCE_EXT_RE = /\.(?:m|c)?[jt]sx?$/;
|
|
111
129
|
/**
|
|
112
130
|
* Resolve an import specifier to a repo-relative FILE BASE (path without
|
|
113
|
-
* extension) so
|
|
131
|
+
* extension) so exact target-file candidates can be constructed.
|
|
114
132
|
* Handles two relative-import dialects and returns null for bare/absolute
|
|
115
133
|
* imports (which fall back to a repo-wide name lookup):
|
|
116
134
|
* - path-style (JS/TS): `./handlers/users`, `../x` → joined against the
|
|
@@ -137,6 +155,23 @@ function resolveModuleBase(fromFile, module) {
|
|
|
137
155
|
}
|
|
138
156
|
return null; // bare / absolute import — repo-wide fallback
|
|
139
157
|
}
|
|
158
|
+
const MODULE_SOURCE_EXTENSIONS = [
|
|
159
|
+
'.ts',
|
|
160
|
+
'.tsx',
|
|
161
|
+
'.mts',
|
|
162
|
+
'.cts',
|
|
163
|
+
'.js',
|
|
164
|
+
'.jsx',
|
|
165
|
+
'.mjs',
|
|
166
|
+
'.cjs',
|
|
167
|
+
'.py',
|
|
168
|
+
];
|
|
169
|
+
function moduleFileCandidates(base) {
|
|
170
|
+
return [
|
|
171
|
+
...MODULE_SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),
|
|
172
|
+
...MODULE_SOURCE_EXTENSIONS.map((extension) => extension === '.py' ? `${base}/__init__.py` : `${base}/index${extension}`),
|
|
173
|
+
];
|
|
174
|
+
}
|
|
140
175
|
/**
|
|
141
176
|
* The innermost Function/Method whose `[startLine, endLine]` span contains
|
|
142
177
|
* `line` — i.e. the symbol the HTTP call lives inside. For a consumer this is
|
|
@@ -147,13 +182,17 @@ function resolveModuleBase(fromFile, module) {
|
|
|
147
182
|
*/
|
|
148
183
|
function resolveContainingSymbol(rows, line) {
|
|
149
184
|
const norm = (x) => String(x ?? '');
|
|
150
|
-
// Detection lines are 1-based; symbol spans are stored
|
|
151
|
-
// languages indexed today (parse-worker records
|
|
152
|
-
// base-correct probe is `line
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
185
|
+
// Detection lines are 1-based (`HttpDetection.line`); symbol spans are stored
|
|
186
|
+
// 0-based for the languages indexed today (parse-worker records
|
|
187
|
+
// `startPosition.row`). So the base-correct probe is `toZeroBasedLine(line)` —
|
|
188
|
+
// the same named 1-based→graph-space conversion the ingestion emitters use
|
|
189
|
+
// (#2377), rather than a bare literal. Pick the INNERMOST (smallest-span)
|
|
190
|
+
// symbol whose span contains the probe. Only if nothing contains the 0-based
|
|
191
|
+
// probe do we retry with the raw `line` — a defensive fallback for any future
|
|
192
|
+
// language that stores 1-based spans. Probing 0-based first (rather than
|
|
193
|
+
// OR-ing both) avoids the +1 slack mis-picking a one-line sibling that sits on
|
|
194
|
+
// `line`. The helper's `Math.max(0, …)` clamp is inert here: every plugin sets
|
|
195
|
+
// `line` from `startPosition.row + 1`, so it is always >= 1.
|
|
157
196
|
const pick = (probe) => {
|
|
158
197
|
let best = null;
|
|
159
198
|
let bestSpan = Number.POSITIVE_INFINITY;
|
|
@@ -179,7 +218,7 @@ function resolveContainingSymbol(rows, line) {
|
|
|
179
218
|
}
|
|
180
219
|
return best && best.uid ? best : null;
|
|
181
220
|
};
|
|
182
|
-
return pick(line
|
|
221
|
+
return pick(toZeroBasedLine(line)) ?? pick(line);
|
|
183
222
|
}
|
|
184
223
|
/** A Function/Method in the file matching `name` exactly (for named handlers). */
|
|
185
224
|
function resolveSymbolByName(rows, name) {
|
|
@@ -196,6 +235,13 @@ function resolveSymbolByName(rows, name) {
|
|
|
196
235
|
}
|
|
197
236
|
return null;
|
|
198
237
|
}
|
|
238
|
+
function resolveFileSymbolByNameUnique(rows, name) {
|
|
239
|
+
const matches = rows
|
|
240
|
+
.map((row) => resolveSymbolByName([row], name))
|
|
241
|
+
.filter((match) => match !== null);
|
|
242
|
+
const byUid = new Map(matches.map((match) => [match.uid, match]));
|
|
243
|
+
return byUid.size === 1 ? (byUid.values().next().value ?? null) : null;
|
|
244
|
+
}
|
|
199
245
|
// ─── Path normalization (shared between provider / consumer paths) ──
|
|
200
246
|
/**
|
|
201
247
|
* Canonicalize a provider-side HTTP path for contract-id generation:
|
|
@@ -438,28 +484,25 @@ export class HttpRouteExtractor {
|
|
|
438
484
|
globalNameCache.set(name, result);
|
|
439
485
|
return result;
|
|
440
486
|
};
|
|
441
|
-
// Resolve a handler imported from a
|
|
442
|
-
// symbol
|
|
443
|
-
//
|
|
444
|
-
// name lookup. Cached by (target-file-prefix, declared name).
|
|
487
|
+
// Resolve a handler imported from a relative module to the unique declared
|
|
488
|
+
// symbol inside its target file. The caller decides whether a miss may use
|
|
489
|
+
// the historical unique repository-wide fallback.
|
|
445
490
|
const importedSymbolCache = new Map();
|
|
446
|
-
const resolveImportedSymbol = async (fromFile, imp) => {
|
|
491
|
+
const resolveImportedSymbol = async (fromFile, imp, strict = false) => {
|
|
447
492
|
if (!dbExecutor)
|
|
448
493
|
return null;
|
|
449
494
|
const base = resolveModuleBase(fromFile, imp.module);
|
|
450
495
|
if (base === null)
|
|
451
|
-
return null;
|
|
452
|
-
const cacheKey = JSON.stringify([base, imp.name]);
|
|
496
|
+
return null;
|
|
497
|
+
const cacheKey = JSON.stringify([base, imp.name, strict]);
|
|
453
498
|
const cached = importedSymbolCache.get(cacheKey);
|
|
454
499
|
if (cached !== undefined)
|
|
455
500
|
return cached;
|
|
456
501
|
let rows = [];
|
|
457
502
|
try {
|
|
458
|
-
rows = await dbExecutor(RESOLVE_IN_MODULE_QUERY,
|
|
459
|
-
name: imp.name,
|
|
460
|
-
fileDot: `${base}.`,
|
|
461
|
-
fileSlash: `${base}/`,
|
|
462
|
-
});
|
|
503
|
+
rows = await dbExecutor(strict ? RESOLVE_IN_EXACT_MODULE_QUERY : RESOLVE_IN_MODULE_QUERY, strict
|
|
504
|
+
? { name: imp.name, filePaths: moduleFileCandidates(base) }
|
|
505
|
+
: { name: imp.name, fileDot: `${base}.`, fileSlash: `${base}/` });
|
|
463
506
|
}
|
|
464
507
|
catch {
|
|
465
508
|
rows = [];
|
|
@@ -471,6 +514,8 @@ export class HttpRouteExtractor {
|
|
|
471
514
|
const resolveDetectionSymbol = async (filePath, d) => {
|
|
472
515
|
if (!dbExecutor)
|
|
473
516
|
return null;
|
|
517
|
+
if (d.role === 'provider' && d.unresolvedHandler)
|
|
518
|
+
return null;
|
|
474
519
|
const syms = await loadFileSymbols(filePath);
|
|
475
520
|
// Name resolution does NOT need a detection line — a named provider
|
|
476
521
|
// handler (Spring/Go/etc. method name) resolves by name even when the
|
|
@@ -484,17 +529,20 @@ export class HttpRouteExtractor {
|
|
|
484
529
|
// its (declared) name would be wrong; on a miss go straight to a unique
|
|
485
530
|
// repo-wide match on the declared name, never file-scoped.
|
|
486
531
|
if (d.handlerImport) {
|
|
487
|
-
const byImport = await resolveImportedSymbol(filePath, d.handlerImport);
|
|
532
|
+
const byImport = await resolveImportedSymbol(filePath, d.handlerImport, d.strictHandlerResolution);
|
|
488
533
|
if (byImport)
|
|
489
534
|
return byImport;
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
return null;
|
|
535
|
+
if (d.strictHandlerResolution)
|
|
536
|
+
return null;
|
|
537
|
+
return resolveSymbolByNameUnique(d.handlerImport.name);
|
|
494
538
|
}
|
|
495
|
-
const byName =
|
|
539
|
+
const byName = d.strictHandlerResolution
|
|
540
|
+
? resolveFileSymbolByNameUnique(syms, d.name)
|
|
541
|
+
: resolveSymbolByName(syms, d.name);
|
|
496
542
|
if (byName)
|
|
497
543
|
return byName;
|
|
544
|
+
if (d.strictHandlerResolution)
|
|
545
|
+
return null;
|
|
498
546
|
const byGlobal = await resolveSymbolByNameUnique(d.name);
|
|
499
547
|
if (byGlobal)
|
|
500
548
|
return byGlobal;
|
|
@@ -707,7 +755,7 @@ export class HttpRouteExtractor {
|
|
|
707
755
|
}
|
|
708
756
|
// ─── Source-scan providers ─────────────────────────────────────────
|
|
709
757
|
async extractProvidersSourceScan(files, getDetections, resolveSymbol) {
|
|
710
|
-
const
|
|
758
|
+
const candidates = [];
|
|
711
759
|
for (const rel of files) {
|
|
712
760
|
const detections = await getDetections(rel);
|
|
713
761
|
const filePath = normalizeRepoRelPath(rel);
|
|
@@ -719,26 +767,52 @@ export class HttpRouteExtractor {
|
|
|
719
767
|
// arrow that encloses the registration line) so the contract carries a
|
|
720
768
|
// real symbolUid; fall back to the file + detection name otherwise.
|
|
721
769
|
const resolved = await resolveSymbol(filePath, d);
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
770
|
+
candidates.push({ detection: d, filePath, pathNorm, resolved });
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
const dataCandidatesByIdentity = new Map();
|
|
774
|
+
for (const candidate of candidates) {
|
|
775
|
+
if (candidate.detection.framework !== DATA_ROUTE_TABLE_SOURCE)
|
|
776
|
+
continue;
|
|
777
|
+
const identity = contractIdFor(candidate.detection.method, candidate.pathNorm);
|
|
778
|
+
const grouped = dataCandidatesByIdentity.get(identity) ?? [];
|
|
779
|
+
grouped.push(candidate);
|
|
780
|
+
dataCandidatesByIdentity.set(identity, grouped);
|
|
781
|
+
}
|
|
782
|
+
const ambiguousDataIdentities = new Set();
|
|
783
|
+
for (const [identity, grouped] of dataCandidatesByIdentity) {
|
|
784
|
+
if (grouped.length < 2)
|
|
785
|
+
continue;
|
|
786
|
+
const resolvedIds = new Set(grouped.flatMap((candidate) => candidate.resolved === null ? [] : [candidate.resolved.uid]));
|
|
787
|
+
if (grouped.some((candidate) => candidate.resolved === null) || resolvedIds.size !== 1) {
|
|
788
|
+
ambiguousDataIdentities.add(identity);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
const out = [];
|
|
792
|
+
for (const { detection: d, filePath, pathNorm, resolved } of candidates) {
|
|
793
|
+
const contractId = contractIdFor(d.method, pathNorm);
|
|
794
|
+
if (d.framework === DATA_ROUTE_TABLE_SOURCE && ambiguousDataIdentities.has(contractId)) {
|
|
795
|
+
continue;
|
|
741
796
|
}
|
|
797
|
+
out.push({
|
|
798
|
+
contractId,
|
|
799
|
+
type: 'http',
|
|
800
|
+
role: 'provider',
|
|
801
|
+
symbolUid: resolved?.uid ?? '',
|
|
802
|
+
symbolRef: {
|
|
803
|
+
filePath: resolved?.filePath || filePath,
|
|
804
|
+
name: resolved?.name ?? d.name ?? 'handler',
|
|
805
|
+
},
|
|
806
|
+
symbolName: resolved?.name ?? d.name ?? 'handler',
|
|
807
|
+
confidence: d.confidence,
|
|
808
|
+
meta: {
|
|
809
|
+
method: d.method,
|
|
810
|
+
path: pathNorm,
|
|
811
|
+
pathSegments: pathNorm.split('/').filter(Boolean),
|
|
812
|
+
extractionStrategy: resolved ? 'source_scan_resolved' : 'source_scan',
|
|
813
|
+
framework: d.framework,
|
|
814
|
+
},
|
|
815
|
+
});
|
|
742
816
|
}
|
|
743
817
|
return this.dedupeContracts(out);
|
|
744
818
|
}
|
|
@@ -397,19 +397,37 @@ export class IncludeExtractor {
|
|
|
397
397
|
const rows = await db(`MATCH (f:File)
|
|
398
398
|
WHERE f.filePath =~ '.*\\\\.(h|hpp|hxx|hh|cuh)$'
|
|
399
399
|
RETURN f.filePath AS filePath, f.id AS fileId`);
|
|
400
|
-
// gitnexus analyze stores absolute paths in the File.filePath column.
|
|
401
400
|
// Provider contract IDs MUST be repo-relative — otherwise the consumer
|
|
402
401
|
// emits `include::map/base/view.h` and the provider emits
|
|
403
402
|
// `include::/abs/path/to/repo/map/base/view.h`, which never match
|
|
404
403
|
// through runExactMatch and the cross-link silently disappears.
|
|
405
404
|
// (PR #1156 follow-up review: graph provider absolute-path bug.)
|
|
405
|
+
//
|
|
406
|
+
// Current `gitnexus analyze` does NOT store absolute paths here, contrary
|
|
407
|
+
// to what this comment used to claim: File.filePath is built from the
|
|
408
|
+
// walker's repo-relative, forward-slash paths (filesystem-walker.ts →
|
|
409
|
+
// processStructure), and a full self-index at 89bbdcf5 had 0 of 239,070
|
|
410
|
+
// nodes with an absolute or backslash-bearing filePath (#2667). The
|
|
411
|
+
// relativisation below therefore stays as a guard against rows this
|
|
412
|
+
// process did not write — an index built by an older version, or one
|
|
413
|
+
// carried over from another machine — not as a description of what
|
|
414
|
+
// analyze currently emits.
|
|
406
415
|
const normalizedRepoPath = path.resolve(repoPath);
|
|
407
416
|
const out = [];
|
|
408
417
|
for (const r of rows) {
|
|
409
418
|
if (typeof r.filePath !== 'string' || !r.filePath)
|
|
410
419
|
continue;
|
|
411
420
|
const absolute = r.filePath;
|
|
412
|
-
|
|
421
|
+
// Only relativise a row that is actually absolute. Current analyze writes
|
|
422
|
+
// repo-relative paths (above), and `path.relative(repoRoot, 'src/a.h')`
|
|
423
|
+
// resolves the second argument against the PROCESS CWD — so from any cwd
|
|
424
|
+
// other than the repo root every relative row came back `..`-prefixed and
|
|
425
|
+
// was dropped by the guard below, silently emptying this strategy (#2667
|
|
426
|
+
// review). Absolute rows still go through `path.relative` so the
|
|
427
|
+
// containment check keeps rejecting foreign and escaping paths.
|
|
428
|
+
const rel = path.isAbsolute(absolute)
|
|
429
|
+
? path.relative(normalizedRepoPath, absolute)
|
|
430
|
+
: absolute;
|
|
413
431
|
// Skip rows that resolve outside the repo (e.g., system headers
|
|
414
432
|
// somehow indexed, or stale absolute paths from a different machine).
|
|
415
433
|
// path.relative returns a `..`-prefixed path or an absolute path
|
|
@@ -4,7 +4,7 @@ export interface ManifestExtractResult {
|
|
|
4
4
|
contracts: StoredContract[];
|
|
5
5
|
crossLinks: CrossLink[];
|
|
6
6
|
}
|
|
7
|
-
export declare const CUSTOM_CONTRACT_RESOLVE_QUERY = "MATCH (n)\n WHERE labels(n) IN ['Function','Method','Class','Interface','Struct','Enum','Trait','Constructor','TypeAlias','Impl','Macro','Union','Typedef','Property','Record','Delegate','Annotation','Template','Const','Static','CodeElement']\n AND n.name = $symbolName\n RETURN n.id AS uid, n.name AS name, n.filePath AS filePath\n ORDER BY n.filePath ASC\n LIMIT 1";
|
|
7
|
+
export declare const CUSTOM_CONTRACT_RESOLVE_QUERY = "MATCH (n)\n WHERE labels(n) IN ['Function','Method','Class','Interface','Struct','Enum','Trait','Constructor','TypeAlias','Impl','Macro','Union','Typedef','Property','Record','Delegate','Annotation','Template','Const','Static','CodeElement']\n AND n.name = $symbolName\n RETURN n.id AS uid, n.name AS name, n.filePath AS filePath\n ORDER BY n.filePath ASC, n.id ASC\n LIMIT 1";
|
|
8
8
|
/**
|
|
9
9
|
* Stable synthetic symbolUid for a manifest-declared contract whose target
|
|
10
10
|
* symbol could not be resolved against the per-repo graph (resolveSymbol
|
|
@@ -15,7 +15,7 @@ export const CUSTOM_CONTRACT_RESOLVE_QUERY = `MATCH (n)
|
|
|
15
15
|
WHERE labels(n) IN ['Function','Method','Class','Interface','Struct','Enum','Trait','Constructor','TypeAlias','Impl','Macro','Union','Typedef','Property','Record','Delegate','Annotation','Template','Const','Static','CodeElement']
|
|
16
16
|
AND n.name = $symbolName
|
|
17
17
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
18
|
-
ORDER BY n.filePath ASC
|
|
18
|
+
ORDER BY n.filePath ASC, n.id ASC
|
|
19
19
|
LIMIT 1`;
|
|
20
20
|
/**
|
|
21
21
|
* Canonicalize an HTTP path for matching against Route.name in the graph.
|
|
@@ -199,7 +199,7 @@ export class ManifestExtractor {
|
|
|
199
199
|
rows = await executor(`MATCH (handler)-[r:CodeRelation {type: 'HANDLES_ROUTE'}]->(route:Route)
|
|
200
200
|
WHERE route.name = $normalized
|
|
201
201
|
RETURN handler.id AS uid, handler.name AS name, handler.filePath AS filePath
|
|
202
|
-
ORDER BY handler.filePath ASC
|
|
202
|
+
ORDER BY handler.filePath ASC, handler.id ASC
|
|
203
203
|
LIMIT 1`, { normalized });
|
|
204
204
|
}
|
|
205
205
|
else if (link.type === 'topic') {
|
|
@@ -210,7 +210,7 @@ export class ManifestExtractor {
|
|
|
210
210
|
// share the topic name.
|
|
211
211
|
rows = await executor(`MATCH (n) WHERE labels(n) IN ['Function','Method','Class','Interface'] AND n.name = $contract
|
|
212
212
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
213
|
-
ORDER BY n.filePath ASC
|
|
213
|
+
ORDER BY n.filePath ASC, n.id ASC
|
|
214
214
|
LIMIT 1`, { contract: link.contract });
|
|
215
215
|
}
|
|
216
216
|
else if (link.type === 'grpc' || link.type === 'thrift') {
|
|
@@ -231,13 +231,13 @@ export class ManifestExtractor {
|
|
|
231
231
|
if (methodName) {
|
|
232
232
|
rows = await executor(`MATCH (n) WHERE labels(n) IN ['Function','Method'] AND n.name = $methodName
|
|
233
233
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
234
|
-
ORDER BY n.filePath ASC
|
|
234
|
+
ORDER BY n.filePath ASC, n.id ASC
|
|
235
235
|
LIMIT 1`, { methodName });
|
|
236
236
|
}
|
|
237
237
|
else if (serviceName) {
|
|
238
238
|
rows = await executor(`MATCH (n) WHERE labels(n) IN ['Class','Interface'] AND n.name = $serviceName
|
|
239
239
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
240
|
-
ORDER BY n.filePath ASC
|
|
240
|
+
ORDER BY n.filePath ASC, n.id ASC
|
|
241
241
|
LIMIT 1`, { serviceName });
|
|
242
242
|
}
|
|
243
243
|
else {
|
|
@@ -253,13 +253,13 @@ export class ManifestExtractor {
|
|
|
253
253
|
// NODE_TABLES — so a `Package` entry only ever matched nothing.)
|
|
254
254
|
rows = await executor(`MATCH (n) WHERE labels(n) IN ['Module'] AND n.name = $contract
|
|
255
255
|
RETURN n.id AS uid, n.name AS name, n.filePath AS filePath
|
|
256
|
-
ORDER BY n.filePath ASC
|
|
256
|
+
ORDER BY n.filePath ASC, n.id ASC
|
|
257
257
|
LIMIT 1`, { contract: link.contract });
|
|
258
258
|
}
|
|
259
259
|
else if (link.type === 'include') {
|
|
260
260
|
rows = await executor(`MATCH (f:File) WHERE f.filePath = $contract
|
|
261
261
|
RETURN f.id AS uid, f.name AS name, f.filePath AS filePath
|
|
262
|
-
ORDER BY f.filePath ASC
|
|
262
|
+
ORDER BY f.filePath ASC, f.id ASC
|
|
263
263
|
LIMIT 1`, { contract: link.contract });
|
|
264
264
|
}
|
|
265
265
|
else if (link.type === 'custom') {
|
|
@@ -9,7 +9,10 @@ import { loadMeta } from '../../storage/repo-manager.js';
|
|
|
9
9
|
import { GroupNotFoundError, loadGroupConfig } from './config-parser.js';
|
|
10
10
|
import { fileMatchesServicePrefix, normalizeServicePrefix, repoInSubgroup, } from './group-path-utils.js';
|
|
11
11
|
import { getDefaultGitnexusDir, getGroupDir, listGroups, readContractRegistry } from './storage.js';
|
|
12
|
-
|
|
12
|
+
// `./sync.js` is imported LAZILY in `groupSync` — see the comment at its call
|
|
13
|
+
// site. It statically pulls the six contract extractors and, through them, the
|
|
14
|
+
// native tree-sitter binding; a static import here puts all of that on MCP
|
|
15
|
+
// server startup, which never syncs.
|
|
13
16
|
import { logger } from '../logger.js';
|
|
14
17
|
function isStoredContract(raw) {
|
|
15
18
|
if (!raw || typeof raw !== 'object')
|
|
@@ -166,6 +169,12 @@ export class GroupService {
|
|
|
166
169
|
return { error: `Group "${name}" not found. Run group_list to see configured groups.` };
|
|
167
170
|
throw err;
|
|
168
171
|
}
|
|
172
|
+
// Lazy: `sync.js` reaches the six contract extractors and the native
|
|
173
|
+
// tree-sitter binding. `groupSync` is the ONLY consumer — the other seven
|
|
174
|
+
// group tools never need it — so deferring it here keeps that closure off
|
|
175
|
+
// MCP server startup entirely and off every non-sync group call. The CLI
|
|
176
|
+
// already does exactly this at `cli/group.ts`'s sync command.
|
|
177
|
+
const { syncGroup } = await import('./sync.js');
|
|
169
178
|
const result = await syncGroup(config, {
|
|
170
179
|
groupDir,
|
|
171
180
|
exactOnly: Boolean(params.exactOnly),
|
|
@@ -2,16 +2,7 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as fsp from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import * as os from 'node:os';
|
|
5
|
-
import {
|
|
6
|
-
import { retryRename } from '../../storage/fs-atomic.js';
|
|
7
|
-
/**
|
|
8
|
-
* Build an unpredictable suffix for atomic-write tmp files. Replaces the
|
|
9
|
-
* previous `Date.now()` pattern which CodeQL flagged as
|
|
10
|
-
* js/insecure-temporary-file: a guessable suffix in a writable directory
|
|
11
|
-
* lets a co-located attacker pre-create or symlink the tmp path before the
|
|
12
|
-
* write lands.
|
|
13
|
-
*/
|
|
14
|
-
const tmpSuffix = () => randomBytes(8).toString('hex');
|
|
5
|
+
import { writeFileAtomic } from '../../storage/fs-atomic.js';
|
|
15
6
|
const CONTRACTS_FILE = 'contracts.json';
|
|
16
7
|
export function getDefaultGitnexusDir() {
|
|
17
8
|
return process.env.GITNEXUS_HOME || path.join(os.homedir(), '.gitnexus');
|
|
@@ -30,29 +21,7 @@ export function getGroupDir(gitnexusDir, groupName) {
|
|
|
30
21
|
return path.join(gitnexusDir, 'groups', groupName);
|
|
31
22
|
}
|
|
32
23
|
export async function writeContractRegistry(groupDir, registry) {
|
|
33
|
-
|
|
34
|
-
const tmpPath = `${targetPath}.tmp.${tmpSuffix()}`;
|
|
35
|
-
// O_EXCL via `'wx'` flag + explicit `0o600` mode — closes both halves
|
|
36
|
-
// of the CodeQL js/insecure-temporary-file finding: `'wx'` rejects a
|
|
37
|
-
// pre-planted symlink at the path, and `0o600` (user-only) prevents
|
|
38
|
-
// the file from being created group/world readable while it briefly
|
|
39
|
-
// contains contract data en route to the rename. The query's
|
|
40
|
-
// `isSecureMode` predicate inspects ONLY the mode argument, not the
|
|
41
|
-
// flags, so the explicit mode is what credits the fix.
|
|
42
|
-
const handle = await fsp.open(tmpPath, 'wx', 0o600);
|
|
43
|
-
try {
|
|
44
|
-
await handle.writeFile(JSON.stringify(registry, null, 2), 'utf-8');
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
await handle.close();
|
|
48
|
-
}
|
|
49
|
-
// retryRename absorbs the documented Windows EPERM/EBUSY/EACCES race that
|
|
50
|
-
// fires when AV scanners or another concurrent rename briefly hold the
|
|
51
|
-
// destination handle between rename calls. Same helper bridge-db.ts uses
|
|
52
|
-
// (lines 304, 583, 587, 595, 605, 677) for the bridge.lbug atomic swap —
|
|
53
|
-
// single source of truth for the Windows-rename pattern across the group
|
|
54
|
-
// package.
|
|
55
|
-
await retryRename(tmpPath, targetPath);
|
|
24
|
+
await writeFileAtomic(path.join(groupDir, CONTRACTS_FILE), JSON.stringify(registry, null, 2));
|
|
56
25
|
}
|
|
57
26
|
export async function readContractRegistry(groupDir) {
|
|
58
27
|
const filePath = path.join(groupDir, CONTRACTS_FILE);
|
|
@@ -120,6 +120,18 @@ export interface GroupImpactResult {
|
|
|
120
120
|
cross_repo_hits: number;
|
|
121
121
|
};
|
|
122
122
|
risk: string;
|
|
123
|
+
/**
|
|
124
|
+
* `'lower-bound'` when the fan-out was cut short, so `risk` is a FLOOR, not a
|
|
125
|
+
* verdict. Same vocabulary as single-repo `impact`'s `epistemic` field.
|
|
126
|
+
*
|
|
127
|
+
* `mergeRisk` is monotone increasing in the number of traversed crossings, so
|
|
128
|
+
* dropping a crossing can only move the reported risk DOWN — a fully
|
|
129
|
+
* truncated fan-out returns bare `localRisk`, making a symbol whose blast
|
|
130
|
+
* radius crosses a repo boundary indistinguishable from one with no
|
|
131
|
+
* cross-repo consumers. Absent this marker a truncated run emits a
|
|
132
|
+
* confident-looking `risk` byte-identical to a complete one.
|
|
133
|
+
*/
|
|
134
|
+
riskEpistemic?: 'lower-bound';
|
|
123
135
|
/**
|
|
124
136
|
* Milliseconds budget applied to the **Phase 1 local impact** leg (`safeLocalImpact`).
|
|
125
137
|
* If the walk hits this wall first, expect `truncationReason: 'timeout'` and a partial `local` payload.
|
|
@@ -160,6 +172,12 @@ export interface CrossRepoImpact {
|
|
|
160
172
|
};
|
|
161
173
|
by_depth: Record<string, unknown[]>;
|
|
162
174
|
affected_processes: string[];
|
|
175
|
+
/**
|
|
176
|
+
* Present when the bridge proves a repository boundary but the far endpoint
|
|
177
|
+
* has no graph symbol, so local fan-out cannot be attempted. Omitted for
|
|
178
|
+
* completed fan-out to preserve the existing serialized result shape.
|
|
179
|
+
*/
|
|
180
|
+
fanout_status?: 'not_attempted';
|
|
163
181
|
}
|
|
164
182
|
export interface OutOfScopeLink {
|
|
165
183
|
from: string;
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* replaced, produce a smaller KnowledgeGraph that contains:
|
|
7
7
|
*
|
|
8
8
|
* - Every node whose `properties.filePath` is in `toWriteSet`.
|
|
9
|
-
* - Every graph-wide node (Community, Process
|
|
10
|
-
*
|
|
9
|
+
* - Every graph-wide node (Community, Process, and Spring metadata
|
|
10
|
+
* placeholders) — these are regenerated each run and must be fully
|
|
11
11
|
* rewritten.
|
|
12
12
|
* - Every relationship where AT LEAST ONE endpoint is in the writable
|
|
13
13
|
* set above. Relationships entirely between unchanged-file nodes
|
|
@@ -51,10 +51,13 @@ import type { KnowledgeGraph } from '../graph/types.js';
|
|
|
51
51
|
export declare const extractChangedSubgraph: (fullGraph: KnowledgeGraph, toWriteSet: ReadonlySet<string>) => KnowledgeGraph;
|
|
52
52
|
/**
|
|
53
53
|
* Public — derive the EFFECTIVE write-set: `toWriteSet` expanded by one
|
|
54
|
-
* hop along every edge in the new graph that crosses the
|
|
55
|
-
* boundary (one endpoint in a writable file, the other in an
|
|
56
|
-
* file).
|
|
57
|
-
*
|
|
54
|
+
* hop along every file-owned edge in the new graph that crosses the
|
|
55
|
+
* writable boundary (one endpoint in a writable file, the other in an
|
|
56
|
+
* unchanged file). Graph-wide relationships are excluded: their owner
|
|
57
|
+
* phase delete-alls and re-extracts them independently, so following them
|
|
58
|
+
* here would turn high-fan-out metadata into a near-full-repository write.
|
|
59
|
+
* For ordinary edges, the unchanged-side file is pulled in so its stale
|
|
60
|
+
* rows are deleted + rewritten in lockstep with the changed side.
|
|
58
61
|
*
|
|
59
62
|
* Single pass over the edge list. Does NOT mutate `toWriteSet`. The
|
|
60
63
|
* orchestrator MUST feed the returned set to both `deleteNodesForFiles`
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* replaced, produce a smaller KnowledgeGraph that contains:
|
|
7
7
|
*
|
|
8
8
|
* - Every node whose `properties.filePath` is in `toWriteSet`.
|
|
9
|
-
* - Every graph-wide node (Community, Process
|
|
10
|
-
*
|
|
9
|
+
* - Every graph-wide node (Community, Process, and Spring metadata
|
|
10
|
+
* placeholders) — these are regenerated each run and must be fully
|
|
11
11
|
* rewritten.
|
|
12
12
|
* - Every relationship where AT LEAST ONE endpoint is in the writable
|
|
13
13
|
* set above. Relationships entirely between unchanged-file nodes
|
|
@@ -48,7 +48,12 @@
|
|
|
48
48
|
* IMPORTS from the pre-pipeline DB) covers that case instead.
|
|
49
49
|
*/
|
|
50
50
|
import { createKnowledgeGraph } from '../graph/graph.js';
|
|
51
|
-
|
|
51
|
+
import { isSpringAutoConfigurationDeclaration, isSpringAutoConfigurationSyntheticClass, } from '../ingestion/frameworks/spring/auto-configuration.js';
|
|
52
|
+
import { isSpringAopEvidenceNode } from '../ingestion/frameworks/spring/aop.js';
|
|
53
|
+
const isGraphWideNode = (node) => node.label === 'Community' ||
|
|
54
|
+
node.label === 'Process' ||
|
|
55
|
+
isSpringAopEvidenceNode(node) ||
|
|
56
|
+
isSpringAutoConfigurationSyntheticClass(node);
|
|
52
57
|
/**
|
|
53
58
|
* Relationship types whose VALIDITY is a whole-program property, not a
|
|
54
59
|
* function of their endpoints' files (#2084 M4 U6). `TAINT_PATH` (cross-
|
|
@@ -76,7 +81,20 @@ const isGraphWide = (label) => label === 'Community' || label === 'Process';
|
|
|
76
81
|
// analyze, and the `incrementalInProgress` dirty flag (saved before any
|
|
77
82
|
// delete) forces a full rebuild on the next run. Temporary absence is
|
|
78
83
|
// possible; duplicates are not.
|
|
79
|
-
|
|
84
|
+
//
|
|
85
|
+
// Spring auto-configuration DECLARES edges (#2415) are also recomputed from
|
|
86
|
+
// repository-wide metadata. A third-file class addition/removal can retarget
|
|
87
|
+
// an unchanged declaration, so they need the same global re-extract contract.
|
|
88
|
+
// DECLARES itself is generic, however: only the two Spring-owned reasons are
|
|
89
|
+
// graph-wide, leaving future metadata systems under their own lifecycle.
|
|
90
|
+
const isGraphWideRelationship = (relationship) => relationship.type === 'TAINT_PATH' ||
|
|
91
|
+
relationship.type === 'CALL_SUMMARY' ||
|
|
92
|
+
relationship.type === 'INJECTS' ||
|
|
93
|
+
// Spring pointcut matching (#2416) is repository-wide. A third-file change
|
|
94
|
+
// can alter annotation-name visibility or the set matched by a wildcard,
|
|
95
|
+
// even when neither endpoint file changed.
|
|
96
|
+
relationship.type === 'ADVISED_BY' ||
|
|
97
|
+
isSpringAutoConfigurationDeclaration(relationship);
|
|
80
98
|
/**
|
|
81
99
|
* Build a Map<nodeId, filePath> for every File-bound node in the graph.
|
|
82
100
|
* Graph-wide nodes (Community/Process) have no filePath and are filtered.
|
|
@@ -95,7 +113,7 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
|
|
|
95
113
|
const writableNodeIds = new Set();
|
|
96
114
|
fullGraph.forEachNode((n) => {
|
|
97
115
|
const filePath = n.properties?.filePath;
|
|
98
|
-
const include = (filePath && toWriteSet.has(filePath)) ||
|
|
116
|
+
const include = (filePath && toWriteSet.has(filePath)) || isGraphWideNode(n);
|
|
99
117
|
if (include) {
|
|
100
118
|
sub.addNode(n);
|
|
101
119
|
writableNodeIds.add(n.id);
|
|
@@ -104,7 +122,7 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
|
|
|
104
122
|
fullGraph.forEachRelationship((r) => {
|
|
105
123
|
if (writableNodeIds.has(r.sourceId) ||
|
|
106
124
|
writableNodeIds.has(r.targetId) ||
|
|
107
|
-
|
|
125
|
+
isGraphWideRelationship(r)) {
|
|
108
126
|
sub.addRelationship(r);
|
|
109
127
|
}
|
|
110
128
|
});
|
|
@@ -112,10 +130,13 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
|
|
|
112
130
|
};
|
|
113
131
|
/**
|
|
114
132
|
* Public — derive the EFFECTIVE write-set: `toWriteSet` expanded by one
|
|
115
|
-
* hop along every edge in the new graph that crosses the
|
|
116
|
-
* boundary (one endpoint in a writable file, the other in an
|
|
117
|
-
* file).
|
|
118
|
-
*
|
|
133
|
+
* hop along every file-owned edge in the new graph that crosses the
|
|
134
|
+
* writable boundary (one endpoint in a writable file, the other in an
|
|
135
|
+
* unchanged file). Graph-wide relationships are excluded: their owner
|
|
136
|
+
* phase delete-alls and re-extracts them independently, so following them
|
|
137
|
+
* here would turn high-fan-out metadata into a near-full-repository write.
|
|
138
|
+
* For ordinary edges, the unchanged-side file is pulled in so its stale
|
|
139
|
+
* rows are deleted + rewritten in lockstep with the changed side.
|
|
119
140
|
*
|
|
120
141
|
* Single pass over the edge list. Does NOT mutate `toWriteSet`. The
|
|
121
142
|
* orchestrator MUST feed the returned set to both `deleteNodesForFiles`
|
|
@@ -126,6 +147,8 @@ export const computeEffectiveWriteSet = (fullGraph, toWriteSet) => {
|
|
|
126
147
|
const nodeFilePaths = indexNodeFilePaths(fullGraph);
|
|
127
148
|
const expanded = new Set(toWriteSet);
|
|
128
149
|
fullGraph.forEachRelationship((r) => {
|
|
150
|
+
if (isGraphWideRelationship(r))
|
|
151
|
+
return;
|
|
129
152
|
const sourcePath = nodeFilePaths.get(r.sourceId);
|
|
130
153
|
const targetPath = nodeFilePaths.get(r.targetId);
|
|
131
154
|
if (!sourcePath || !targetPath)
|