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
|
@@ -10,8 +10,131 @@
|
|
|
10
10
|
* single function. The `reason` defaults to
|
|
11
11
|
* `'scope-resolution: import'`; provider may override if downstream
|
|
12
12
|
* filters on reason.
|
|
13
|
+
*
|
|
14
|
+
* ## Non-initializing imports carry a distinct `reason`
|
|
15
|
+
*
|
|
16
|
+
* A pair reached ONLY by imports that cannot run at module-initialization time
|
|
17
|
+
* still gets an edge — it is a real dependency, and impact/trace must see it —
|
|
18
|
+
* but it cannot participate in the kind of cycle `check --cycles` exists to
|
|
19
|
+
* find. There are two such kinds, and they are NOT the same fact:
|
|
20
|
+
*
|
|
21
|
+
* - **deferred** — the import exists at runtime, just later. `import('./m')`
|
|
22
|
+
* and a function-local `import` both really load the module; what they do
|
|
23
|
+
* not do is load it while the importing module is still initializing.
|
|
24
|
+
* Deferring is in fact the standard idiom for BREAKING an init cycle, and
|
|
25
|
+
* this repository uses it that way on purpose in both spellings:
|
|
26
|
+
* `core/group/service.ts` does `await import('./cross-impact.js')`, and
|
|
27
|
+
* `eval/workflow_bench/proposer_sandbox.py` puts a plain `import` inside a
|
|
28
|
+
* function under the comment "Kept lazy to avoid a module cycle".
|
|
29
|
+
* - **type-only** — the import does not exist at runtime AT ALL. `tsc` deletes
|
|
30
|
+
* `import type { X } from './m'`; the emitted JavaScript contains no
|
|
31
|
+
* reference to `./m`. Nothing was made later; the dependency is compile-time
|
|
32
|
+
* only. Eight of the ten false cycles this repository reports are this.
|
|
33
|
+
*
|
|
34
|
+
* Reporting either as an init cycle flags the fix as the bug. They get separate
|
|
35
|
+
* suffixes rather than one shared "not really an import" tag because the two
|
|
36
|
+
* answers to "does this edge exist when the program runs?" are opposite, and a
|
|
37
|
+
* reader of the graph — or the next filter written against `reason` — needs to
|
|
38
|
+
* be able to tell them apart.
|
|
39
|
+
*
|
|
40
|
+
* Three signals, because no one of them covers the others. All three ride the
|
|
41
|
+
* EDGE — this function reads properties and never walks the scope tree for
|
|
42
|
+
* them, for the reason spelled out under "Why nothing here is derived from the
|
|
43
|
+
* scope tree" below:
|
|
44
|
+
*
|
|
45
|
+
* - `ImportEdge.kind === 'dynamic-resolved'` — TS/JS `import()`.
|
|
46
|
+
* - `ImportEdge.runsOnlyWhenCalled` — the import sits inside a function body
|
|
47
|
+
* AND this language's imports execute where they are written: Python's
|
|
48
|
+
* `def f(): from x import Y`, Ruby's `def f; require 'x'; end`, a CommonJS
|
|
49
|
+
* `require()` in a body. Nothing marks those as dynamic, because
|
|
50
|
+
* syntactically they are ordinary imports; what defers them is WHERE they
|
|
51
|
+
* sit, so `scope-extractor.ts` decides it in Pass 3 and it is carried down
|
|
52
|
+
* — `ParsedImport` → `finalize-algorithm.ts` → the edge. A language whose
|
|
53
|
+
* imports do not execute never gets the tag no matter where one sits (Rust
|
|
54
|
+
* `use`, C/C++ `#include`; see
|
|
55
|
+
* `LanguageProvider.importsExecuteWhereWritten`).
|
|
56
|
+
* - `ImportEdge.typeOnly` — TypeScript `import type` / `import { type X }`.
|
|
57
|
+
* Neither of the other two sees it: the kind is the ordinary `named` /
|
|
58
|
+
* `alias`, and the statement sits at module top level like any other. Only
|
|
59
|
+
* the `type` keyword says it, so it is carried from the syntax down —
|
|
60
|
+
* `typescript/import-decomposer.ts` → `interpret.ts` → `finalize-algorithm.ts`.
|
|
61
|
+
*
|
|
62
|
+
* ## Why nothing here is derived from the scope tree
|
|
63
|
+
*
|
|
64
|
+
* `scopeTree` is used for exactly one thing: turning the map's key into the
|
|
65
|
+
* source `filePath`. It is NOT a place to ask where an import was written.
|
|
66
|
+
* `finalize-algorithm.ts:295` publishes every file's finalized edges as
|
|
67
|
+
* `linkedByScope.set(file.moduleScope, …)`, so the `imports` map this function
|
|
68
|
+
* receives holds one bucket per FILE, keyed by that file's `Module` scope —
|
|
69
|
+
* never by the scope an import was actually written in. A walk from such a key
|
|
70
|
+
* looking for an enclosing `Function` starts at a `Module` and answers `false`
|
|
71
|
+
* every time, for every import in the tree.
|
|
72
|
+
*
|
|
73
|
+
* That walk was here, and it never fired once. It looked correct in unit tests
|
|
74
|
+
* only because they hand-built `new Map([['fn', …]])`, a shape the pipeline
|
|
75
|
+
* cannot produce. Position now arrives as `runsOnlyWhenCalled`, decided where
|
|
76
|
+
* the position is still known.
|
|
77
|
+
*
|
|
78
|
+
* Tagging the reason is enough for the check query, which already filters
|
|
79
|
+
* non-runtime edges that way (`markdown-link`, Swift implicit module
|
|
80
|
+
* visibility) — no change to the persisted RELATION schema, no new property on
|
|
81
|
+
* the emitted `CodeRelation`. (`typeOnly` and `runsOnlyWhenCalled` are fields
|
|
82
|
+
* on the in-memory `ImportEdge`, which is never persisted; they end here.)
|
|
83
|
+
*
|
|
84
|
+
* ponytail: reason-string tagging rather than a typed relation property,
|
|
85
|
+
* because the one consumer already filters on `reason` and a property would
|
|
86
|
+
* touch the relation schema. If a second consumer ever needs to branch on this,
|
|
87
|
+
* promote it to a real field then.
|
|
88
|
+
*
|
|
89
|
+
* ## Precedence: the strongest runtime presence in a pair wins
|
|
90
|
+
*
|
|
91
|
+
* Emission dedupes by `(sourceFile, targetFile)`, so one edge has to speak for
|
|
92
|
+
* every import that reaches the pair. Rank them by how much of the dependency
|
|
93
|
+
* survives to run time — initializing > deferred > erased — and let the
|
|
94
|
+
* strongest win: the ranks ascend as presence weakens, so the pair keeps the
|
|
95
|
+
* LOWEST rank it sees ({@link PRESENCE_INITIALIZES} is 0). Inverting that
|
|
96
|
+
* comparison is the one mutation here that hides a real cycle rather than
|
|
97
|
+
* inventing a false one, which is why the suite pins it directly.
|
|
98
|
+
*
|
|
99
|
+
* - Any initializing import wins outright. One top-level `import { f }` beside
|
|
100
|
+
* an `await import()` and a dozen `import type`s is a real init dependency;
|
|
101
|
+
* reporting the pair as deferred or erased would HIDE a true cycle.
|
|
102
|
+
* - Deferred beats type-only. A pair with a function-local import plus some
|
|
103
|
+
* `import type`s does load the target at run time, so `(deferred)` is the
|
|
104
|
+
* honest label; `(type-only)` would claim the module never loads.
|
|
105
|
+
* - The two deferred signals rank the same. `import()` and a function-local
|
|
106
|
+
* import are the same claim about the emitted program — it loads, later —
|
|
107
|
+
* so a pair reached only by them is `(deferred)` either way.
|
|
108
|
+
*
|
|
109
|
+
* That also settles the mixed statement `import { type X, Y } from './m'`
|
|
110
|
+
* without the decomposer aggregating anything: `X` is erased, `Y` is not, and
|
|
111
|
+
* `Y` carries the pair. A statement is type-only exactly when every specifier
|
|
112
|
+
* it decomposes to is.
|
|
113
|
+
*
|
|
114
|
+
* Pairs are collected before anything is emitted so the ranking sees every
|
|
115
|
+
* contributing edge rather than whichever one arrived first. Insertion order
|
|
116
|
+
* into the map is first-seen order, so emission order is byte-identical to the
|
|
117
|
+
* single-pass form this replaced.
|
|
13
118
|
*/
|
|
14
119
|
import type { ImportEdge, ScopeId } from '../../../../_shared/index.js';
|
|
15
120
|
import type { KnowledgeGraph } from '../../../graph/types.js';
|
|
16
121
|
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
122
|
+
/**
|
|
123
|
+
* Reason suffix for a pair reachable only through imports that run later —
|
|
124
|
+
* `import()` and function-local imports.
|
|
125
|
+
*
|
|
126
|
+
* `check --cycles` matches this EXACTLY, so a provider that overrides the base
|
|
127
|
+
* reason keeps its deferred edges filterable — the suffix travels with it.
|
|
128
|
+
*/
|
|
129
|
+
export declare const DEFERRED_IMPORT_REASON_SUFFIX = " (deferred)";
|
|
130
|
+
/**
|
|
131
|
+
* Reason suffix for a pair reachable only through imports the compiler erases —
|
|
132
|
+
* TypeScript `import type` / `import { type X }`.
|
|
133
|
+
*
|
|
134
|
+
* A second suffix rather than a reuse of {@link DEFERRED_IMPORT_REASON_SUFFIX}:
|
|
135
|
+
* both are excluded from the cycle query, but "runs later" and "never runs" are
|
|
136
|
+
* opposite answers about the emitted program, and the reason string is the only
|
|
137
|
+
* place the graph records which one this pair is.
|
|
138
|
+
*/
|
|
139
|
+
export declare const TYPE_ONLY_IMPORT_REASON_SUFFIX = " (type-only)";
|
|
17
140
|
export declare function emitImportEdges(graph: KnowledgeGraph, imports: ReadonlyMap<ScopeId, readonly ImportEdge[]>, scopeTree: ScopeResolutionIndexes['scopeTree'], reason?: string): number;
|
|
@@ -10,12 +10,156 @@
|
|
|
10
10
|
* single function. The `reason` defaults to
|
|
11
11
|
* `'scope-resolution: import'`; provider may override if downstream
|
|
12
12
|
* filters on reason.
|
|
13
|
+
*
|
|
14
|
+
* ## Non-initializing imports carry a distinct `reason`
|
|
15
|
+
*
|
|
16
|
+
* A pair reached ONLY by imports that cannot run at module-initialization time
|
|
17
|
+
* still gets an edge — it is a real dependency, and impact/trace must see it —
|
|
18
|
+
* but it cannot participate in the kind of cycle `check --cycles` exists to
|
|
19
|
+
* find. There are two such kinds, and they are NOT the same fact:
|
|
20
|
+
*
|
|
21
|
+
* - **deferred** — the import exists at runtime, just later. `import('./m')`
|
|
22
|
+
* and a function-local `import` both really load the module; what they do
|
|
23
|
+
* not do is load it while the importing module is still initializing.
|
|
24
|
+
* Deferring is in fact the standard idiom for BREAKING an init cycle, and
|
|
25
|
+
* this repository uses it that way on purpose in both spellings:
|
|
26
|
+
* `core/group/service.ts` does `await import('./cross-impact.js')`, and
|
|
27
|
+
* `eval/workflow_bench/proposer_sandbox.py` puts a plain `import` inside a
|
|
28
|
+
* function under the comment "Kept lazy to avoid a module cycle".
|
|
29
|
+
* - **type-only** — the import does not exist at runtime AT ALL. `tsc` deletes
|
|
30
|
+
* `import type { X } from './m'`; the emitted JavaScript contains no
|
|
31
|
+
* reference to `./m`. Nothing was made later; the dependency is compile-time
|
|
32
|
+
* only. Eight of the ten false cycles this repository reports are this.
|
|
33
|
+
*
|
|
34
|
+
* Reporting either as an init cycle flags the fix as the bug. They get separate
|
|
35
|
+
* suffixes rather than one shared "not really an import" tag because the two
|
|
36
|
+
* answers to "does this edge exist when the program runs?" are opposite, and a
|
|
37
|
+
* reader of the graph — or the next filter written against `reason` — needs to
|
|
38
|
+
* be able to tell them apart.
|
|
39
|
+
*
|
|
40
|
+
* Three signals, because no one of them covers the others. All three ride the
|
|
41
|
+
* EDGE — this function reads properties and never walks the scope tree for
|
|
42
|
+
* them, for the reason spelled out under "Why nothing here is derived from the
|
|
43
|
+
* scope tree" below:
|
|
44
|
+
*
|
|
45
|
+
* - `ImportEdge.kind === 'dynamic-resolved'` — TS/JS `import()`.
|
|
46
|
+
* - `ImportEdge.runsOnlyWhenCalled` — the import sits inside a function body
|
|
47
|
+
* AND this language's imports execute where they are written: Python's
|
|
48
|
+
* `def f(): from x import Y`, Ruby's `def f; require 'x'; end`, a CommonJS
|
|
49
|
+
* `require()` in a body. Nothing marks those as dynamic, because
|
|
50
|
+
* syntactically they are ordinary imports; what defers them is WHERE they
|
|
51
|
+
* sit, so `scope-extractor.ts` decides it in Pass 3 and it is carried down
|
|
52
|
+
* — `ParsedImport` → `finalize-algorithm.ts` → the edge. A language whose
|
|
53
|
+
* imports do not execute never gets the tag no matter where one sits (Rust
|
|
54
|
+
* `use`, C/C++ `#include`; see
|
|
55
|
+
* `LanguageProvider.importsExecuteWhereWritten`).
|
|
56
|
+
* - `ImportEdge.typeOnly` — TypeScript `import type` / `import { type X }`.
|
|
57
|
+
* Neither of the other two sees it: the kind is the ordinary `named` /
|
|
58
|
+
* `alias`, and the statement sits at module top level like any other. Only
|
|
59
|
+
* the `type` keyword says it, so it is carried from the syntax down —
|
|
60
|
+
* `typescript/import-decomposer.ts` → `interpret.ts` → `finalize-algorithm.ts`.
|
|
61
|
+
*
|
|
62
|
+
* ## Why nothing here is derived from the scope tree
|
|
63
|
+
*
|
|
64
|
+
* `scopeTree` is used for exactly one thing: turning the map's key into the
|
|
65
|
+
* source `filePath`. It is NOT a place to ask where an import was written.
|
|
66
|
+
* `finalize-algorithm.ts:295` publishes every file's finalized edges as
|
|
67
|
+
* `linkedByScope.set(file.moduleScope, …)`, so the `imports` map this function
|
|
68
|
+
* receives holds one bucket per FILE, keyed by that file's `Module` scope —
|
|
69
|
+
* never by the scope an import was actually written in. A walk from such a key
|
|
70
|
+
* looking for an enclosing `Function` starts at a `Module` and answers `false`
|
|
71
|
+
* every time, for every import in the tree.
|
|
72
|
+
*
|
|
73
|
+
* That walk was here, and it never fired once. It looked correct in unit tests
|
|
74
|
+
* only because they hand-built `new Map([['fn', …]])`, a shape the pipeline
|
|
75
|
+
* cannot produce. Position now arrives as `runsOnlyWhenCalled`, decided where
|
|
76
|
+
* the position is still known.
|
|
77
|
+
*
|
|
78
|
+
* Tagging the reason is enough for the check query, which already filters
|
|
79
|
+
* non-runtime edges that way (`markdown-link`, Swift implicit module
|
|
80
|
+
* visibility) — no change to the persisted RELATION schema, no new property on
|
|
81
|
+
* the emitted `CodeRelation`. (`typeOnly` and `runsOnlyWhenCalled` are fields
|
|
82
|
+
* on the in-memory `ImportEdge`, which is never persisted; they end here.)
|
|
83
|
+
*
|
|
84
|
+
* ponytail: reason-string tagging rather than a typed relation property,
|
|
85
|
+
* because the one consumer already filters on `reason` and a property would
|
|
86
|
+
* touch the relation schema. If a second consumer ever needs to branch on this,
|
|
87
|
+
* promote it to a real field then.
|
|
88
|
+
*
|
|
89
|
+
* ## Precedence: the strongest runtime presence in a pair wins
|
|
90
|
+
*
|
|
91
|
+
* Emission dedupes by `(sourceFile, targetFile)`, so one edge has to speak for
|
|
92
|
+
* every import that reaches the pair. Rank them by how much of the dependency
|
|
93
|
+
* survives to run time — initializing > deferred > erased — and let the
|
|
94
|
+
* strongest win: the ranks ascend as presence weakens, so the pair keeps the
|
|
95
|
+
* LOWEST rank it sees ({@link PRESENCE_INITIALIZES} is 0). Inverting that
|
|
96
|
+
* comparison is the one mutation here that hides a real cycle rather than
|
|
97
|
+
* inventing a false one, which is why the suite pins it directly.
|
|
98
|
+
*
|
|
99
|
+
* - Any initializing import wins outright. One top-level `import { f }` beside
|
|
100
|
+
* an `await import()` and a dozen `import type`s is a real init dependency;
|
|
101
|
+
* reporting the pair as deferred or erased would HIDE a true cycle.
|
|
102
|
+
* - Deferred beats type-only. A pair with a function-local import plus some
|
|
103
|
+
* `import type`s does load the target at run time, so `(deferred)` is the
|
|
104
|
+
* honest label; `(type-only)` would claim the module never loads.
|
|
105
|
+
* - The two deferred signals rank the same. `import()` and a function-local
|
|
106
|
+
* import are the same claim about the emitted program — it loads, later —
|
|
107
|
+
* so a pair reached only by them is `(deferred)` either way.
|
|
108
|
+
*
|
|
109
|
+
* That also settles the mixed statement `import { type X, Y } from './m'`
|
|
110
|
+
* without the decomposer aggregating anything: `X` is erased, `Y` is not, and
|
|
111
|
+
* `Y` carries the pair. A statement is type-only exactly when every specifier
|
|
112
|
+
* it decomposes to is.
|
|
113
|
+
*
|
|
114
|
+
* Pairs are collected before anything is emitted so the ranking sees every
|
|
115
|
+
* contributing edge rather than whichever one arrived first. Insertion order
|
|
116
|
+
* into the map is first-seen order, so emission order is byte-identical to the
|
|
117
|
+
* single-pass form this replaced.
|
|
13
118
|
*/
|
|
14
119
|
import { generateId } from '../../../../lib/utils.js';
|
|
120
|
+
/**
|
|
121
|
+
* Reason suffix for a pair reachable only through imports that run later —
|
|
122
|
+
* `import()` and function-local imports.
|
|
123
|
+
*
|
|
124
|
+
* `check --cycles` matches this EXACTLY, so a provider that overrides the base
|
|
125
|
+
* reason keeps its deferred edges filterable — the suffix travels with it.
|
|
126
|
+
*/
|
|
127
|
+
export const DEFERRED_IMPORT_REASON_SUFFIX = ' (deferred)';
|
|
128
|
+
/**
|
|
129
|
+
* Reason suffix for a pair reachable only through imports the compiler erases —
|
|
130
|
+
* TypeScript `import type` / `import { type X }`.
|
|
131
|
+
*
|
|
132
|
+
* A second suffix rather than a reuse of {@link DEFERRED_IMPORT_REASON_SUFFIX}:
|
|
133
|
+
* both are excluded from the cycle query, but "runs later" and "never runs" are
|
|
134
|
+
* opposite answers about the emitted program, and the reason string is the only
|
|
135
|
+
* place the graph records which one this pair is.
|
|
136
|
+
*/
|
|
137
|
+
export const TYPE_ONLY_IMPORT_REASON_SUFFIX = ' (type-only)';
|
|
138
|
+
/**
|
|
139
|
+
* How much of an import survives to run time. Lower is stronger; a pair takes
|
|
140
|
+
* the minimum over every edge that reaches it. See the precedence section in
|
|
141
|
+
* the module header for why the order is this one.
|
|
142
|
+
*/
|
|
143
|
+
const PRESENCE_INITIALIZES = 0;
|
|
144
|
+
const PRESENCE_DEFERRED = 1;
|
|
145
|
+
const PRESENCE_ERASED = 2;
|
|
146
|
+
/**
|
|
147
|
+
* Suffix per presence rank; the empty string is a real init dependency.
|
|
148
|
+
*
|
|
149
|
+
* Indexed rather than branched so the rank order lives in exactly one place —
|
|
150
|
+
* the constants above — instead of being restated by the order of an if-chain.
|
|
151
|
+
*/
|
|
152
|
+
const REASON_SUFFIX_BY_PRESENCE = {
|
|
153
|
+
[PRESENCE_INITIALIZES]: '',
|
|
154
|
+
[PRESENCE_DEFERRED]: DEFERRED_IMPORT_REASON_SUFFIX,
|
|
155
|
+
[PRESENCE_ERASED]: TYPE_ONLY_IMPORT_REASON_SUFFIX,
|
|
156
|
+
};
|
|
15
157
|
export function emitImportEdges(graph, imports, scopeTree, reason = 'scope-resolution: import') {
|
|
16
|
-
|
|
17
|
-
|
|
158
|
+
/** dedupKey -> the pair, plus the strongest runtime presence reaching it. */
|
|
159
|
+
const pairs = new Map();
|
|
18
160
|
for (const [scopeId, edges] of imports) {
|
|
161
|
+
// The key's only job here is naming the source file — see the module
|
|
162
|
+
// header on why it says nothing about where an import was written.
|
|
19
163
|
const scope = scopeTree.getScope(scopeId);
|
|
20
164
|
if (scope === undefined)
|
|
21
165
|
continue;
|
|
@@ -25,22 +169,32 @@ export function emitImportEdges(graph, imports, scopeTree, reason = 'scope-resol
|
|
|
25
169
|
continue;
|
|
26
170
|
if (edge.targetFile === sourceFile)
|
|
27
171
|
continue;
|
|
172
|
+
// Erasure is checked first: an `import type` inside a function is still
|
|
173
|
+
// erased, not merely deferred, and the two are not mutually exclusive.
|
|
174
|
+
const presence = edge.typeOnly === true
|
|
175
|
+
? PRESENCE_ERASED
|
|
176
|
+
: edge.runsOnlyWhenCalled === true || edge.kind === 'dynamic-resolved'
|
|
177
|
+
? PRESENCE_DEFERRED
|
|
178
|
+
: PRESENCE_INITIALIZES;
|
|
28
179
|
const dedupKey = `${sourceFile}->${edge.targetFile}`;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
sourceId,
|
|
37
|
-
targetId,
|
|
38
|
-
type: 'IMPORTS',
|
|
39
|
-
confidence: 1.0,
|
|
40
|
-
reason,
|
|
41
|
-
});
|
|
42
|
-
emitted++;
|
|
180
|
+
const existing = pairs.get(dedupKey);
|
|
181
|
+
if (existing === undefined) {
|
|
182
|
+
pairs.set(dedupKey, { sourceFile, targetFile: edge.targetFile, presence });
|
|
183
|
+
}
|
|
184
|
+
else if (presence < existing.presence) {
|
|
185
|
+
existing.presence = presence;
|
|
186
|
+
}
|
|
43
187
|
}
|
|
44
188
|
}
|
|
45
|
-
|
|
189
|
+
for (const [dedupKey, pair] of pairs) {
|
|
190
|
+
graph.addRelationship({
|
|
191
|
+
id: generateId('IMPORTS', dedupKey),
|
|
192
|
+
sourceId: generateId('File', pair.sourceFile),
|
|
193
|
+
targetId: generateId('File', pair.targetFile),
|
|
194
|
+
type: 'IMPORTS',
|
|
195
|
+
confidence: 1.0,
|
|
196
|
+
reason: reason + REASON_SUFFIX_BY_PRESENCE[pair.presence],
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return pairs.size;
|
|
46
200
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build a `(filePath, name) → graphNodeId` lookup over the graph's
|
|
3
|
-
*
|
|
3
|
+
* {@link LINKABLE_LABELS} definition nodes. Two keys per node:
|
|
4
4
|
*
|
|
5
5
|
* - simple name (`User` / `save`) — legacy fallback
|
|
6
6
|
* - qualified name when derivable from the node id (`User.save`)
|
|
@@ -33,5 +33,60 @@ export type GraphNodeLookup = ReadonlyMap<string, string>;
|
|
|
33
33
|
export declare function qualifiedKey(filePath: string, label: NodeLabel, qualifiedName: string): string;
|
|
34
34
|
/** Simple-name key (legacy fallback keyspace — no `<q>` prefix). */
|
|
35
35
|
export declare function simpleKey(filePath: string, name: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Position key: `(filePath, label, 0-based startLine, simple name)` (#2699).
|
|
38
|
+
*
|
|
39
|
+
* The strongest evidence there is, and the only one that needs no name
|
|
40
|
+
* qualification at all — a definition and its graph node are the same
|
|
41
|
+
* construct, so they share a source position. That makes it correct for
|
|
42
|
+
* exactly the cases a name-based key cannot express: a function-local
|
|
43
|
+
* declaration shadowing a file-level one, a local inside an ANONYMOUS
|
|
44
|
+
* function (no name to qualify with), and two same-named declarations in
|
|
45
|
+
* sibling blocks. ECMAScript gives each of those its own environment record;
|
|
46
|
+
* position is what distinguishes them without having to model the chain.
|
|
47
|
+
*
|
|
48
|
+
* Registered only for callable labels, and only when the (line, name) pair is
|
|
49
|
+
* unique in the file — a genuine tie (overloads declared on one line) stores
|
|
50
|
+
* the `AMBIGUOUS_POSITION` tombstone so the caller falls through to the
|
|
51
|
+
* name-based keys rather than picking by source order.
|
|
52
|
+
*/
|
|
53
|
+
export declare function positionKey(filePath: string, label: NodeLabel, startLine: number, name: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Key recording that a FUNCTION-LOCAL callable with this simple name exists in the
|
|
56
|
+
* file (#2699 follow-up).
|
|
57
|
+
*
|
|
58
|
+
* `resolveDefGraphId`'s last resort is a label-agnostic, first-write-wins
|
|
59
|
+
* `simpleKey(filePath, simpleName)`. That is safe while at most one callable in a file
|
|
60
|
+
* carries a given simple name — but #2699 deliberately creates function-locals that
|
|
61
|
+
* share a name with a file-level callable, and the local's graph node is keyed by
|
|
62
|
+
* position (`run.pick@1:2`) while the scope def is not. When the position join misses —
|
|
63
|
+
* the two id phases anchor on different nodes, so a multiline `const pick =` puts the
|
|
64
|
+
* declaration and its initializer on different lines — the simple-name fallback aliases
|
|
65
|
+
* the local onto whichever same-named callable was registered FIRST and mints a
|
|
66
|
+
* fabricated edge. That is the exact failure class #2693 already shipped once.
|
|
67
|
+
*
|
|
68
|
+
* This lets the resolver fail CLOSED for precisely that case and only that case: if a
|
|
69
|
+
* local of this name exists, a position miss is a genuine ambiguity rather than a lookup
|
|
70
|
+
* gap, so emitting no edge is correct. Files with no such local are untouched, which
|
|
71
|
+
* keeps legitimate anchor differences (e.g. a Vue SFC `lineOffset`) resolving through the
|
|
72
|
+
* name keys exactly as before.
|
|
73
|
+
*/
|
|
74
|
+
export declare function localNameKey(filePath: string, label: NodeLabel, name: string): string;
|
|
75
|
+
/** Tombstone for a position claimed by two nodes — see `positionKey`. */
|
|
76
|
+
export declare const AMBIGUOUS_POSITION = "";
|
|
36
77
|
export declare function buildGraphNodeLookup(graph: KnowledgeGraph): GraphNodeLookup;
|
|
78
|
+
/**
|
|
79
|
+
* Every label {@link buildGraphNodeLookup} registers — and therefore the ONLY
|
|
80
|
+
* labels `resolveDefGraphId` can ever return an id for. Both endpoints of every
|
|
81
|
+
* scope-resolution edge come from that lookup (the one exception is the File
|
|
82
|
+
* fallback in `resolveCallerGraphId`), so this set defines the whole FROM/TO
|
|
83
|
+
* surface those edges can produce.
|
|
84
|
+
*
|
|
85
|
+
* That makes it load-bearing for the LadybugDB relation DDL: a label added here
|
|
86
|
+
* without the matching `FROM x TO y` pairs in `RELATION_SCHEMA` crashes
|
|
87
|
+
* `analyze` at `assertDeclaredPair` on whichever codebase first emits the pair
|
|
88
|
+
* (#2792). `test/unit/schema-pair-coverage.test.ts` derives the required pairs
|
|
89
|
+
* from this set and fails in CI instead.
|
|
90
|
+
*/
|
|
91
|
+
export declare const LINKABLE_LABELS: ReadonlySet<NodeLabel>;
|
|
37
92
|
export declare function isLinkableLabel(label: NodeLabel): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build a `(filePath, name) → graphNodeId` lookup over the graph's
|
|
3
|
-
*
|
|
3
|
+
* {@link LINKABLE_LABELS} definition nodes. Two keys per node:
|
|
4
4
|
*
|
|
5
5
|
* - simple name (`User` / `save`) — legacy fallback
|
|
6
6
|
* - qualified name when derivable from the node id (`User.save`)
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
* `SymbolDefinition.nodeId` values into the legacy graph-node ID
|
|
18
18
|
* format that downstream consumers (queries, edges, MCP) expect.
|
|
19
19
|
*/
|
|
20
|
-
import { isOverloadableCallable } from '../../utils/callable-labels.js';
|
|
20
|
+
import { isOverloadableCallable, isPositionQualifiedLocalLabel, } from '../../utils/callable-labels.js';
|
|
21
21
|
import { templateConstraintsIdTag } from '../../utils/template-arguments.js';
|
|
22
22
|
import { parameterShapeIdTag } from '../../utils/method-props.js';
|
|
23
23
|
/**
|
|
24
|
-
* Parse a qualified name out of a
|
|
24
|
+
* Parse a qualified name out of a linkable graph-node id.
|
|
25
25
|
*
|
|
26
26
|
* Node id format: `${label}:${filePath}:${qualifiedName}${arityTag}`,
|
|
27
27
|
* where `arityTag` is `#<n>` (or empty). Strips the known-length
|
|
@@ -59,6 +59,51 @@ export function qualifiedKey(filePath, label, qualifiedName) {
|
|
|
59
59
|
export function simpleKey(filePath, name) {
|
|
60
60
|
return `${filePath}::${name}`;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Position key: `(filePath, label, 0-based startLine, simple name)` (#2699).
|
|
64
|
+
*
|
|
65
|
+
* The strongest evidence there is, and the only one that needs no name
|
|
66
|
+
* qualification at all — a definition and its graph node are the same
|
|
67
|
+
* construct, so they share a source position. That makes it correct for
|
|
68
|
+
* exactly the cases a name-based key cannot express: a function-local
|
|
69
|
+
* declaration shadowing a file-level one, a local inside an ANONYMOUS
|
|
70
|
+
* function (no name to qualify with), and two same-named declarations in
|
|
71
|
+
* sibling blocks. ECMAScript gives each of those its own environment record;
|
|
72
|
+
* position is what distinguishes them without having to model the chain.
|
|
73
|
+
*
|
|
74
|
+
* Registered only for callable labels, and only when the (line, name) pair is
|
|
75
|
+
* unique in the file — a genuine tie (overloads declared on one line) stores
|
|
76
|
+
* the `AMBIGUOUS_POSITION` tombstone so the caller falls through to the
|
|
77
|
+
* name-based keys rather than picking by source order.
|
|
78
|
+
*/
|
|
79
|
+
export function positionKey(filePath, label, startLine, name) {
|
|
80
|
+
return `<p>:${filePath}::${label}::${startLine}::${name}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Key recording that a FUNCTION-LOCAL callable with this simple name exists in the
|
|
84
|
+
* file (#2699 follow-up).
|
|
85
|
+
*
|
|
86
|
+
* `resolveDefGraphId`'s last resort is a label-agnostic, first-write-wins
|
|
87
|
+
* `simpleKey(filePath, simpleName)`. That is safe while at most one callable in a file
|
|
88
|
+
* carries a given simple name — but #2699 deliberately creates function-locals that
|
|
89
|
+
* share a name with a file-level callable, and the local's graph node is keyed by
|
|
90
|
+
* position (`run.pick@1:2`) while the scope def is not. When the position join misses —
|
|
91
|
+
* the two id phases anchor on different nodes, so a multiline `const pick =` puts the
|
|
92
|
+
* declaration and its initializer on different lines — the simple-name fallback aliases
|
|
93
|
+
* the local onto whichever same-named callable was registered FIRST and mints a
|
|
94
|
+
* fabricated edge. That is the exact failure class #2693 already shipped once.
|
|
95
|
+
*
|
|
96
|
+
* This lets the resolver fail CLOSED for precisely that case and only that case: if a
|
|
97
|
+
* local of this name exists, a position miss is a genuine ambiguity rather than a lookup
|
|
98
|
+
* gap, so emitting no edge is correct. Files with no such local are untouched, which
|
|
99
|
+
* keeps legitimate anchor differences (e.g. a Vue SFC `lineOffset`) resolving through the
|
|
100
|
+
* name keys exactly as before.
|
|
101
|
+
*/
|
|
102
|
+
export function localNameKey(filePath, label, name) {
|
|
103
|
+
return `<l>:${filePath}::${label}::${name}`;
|
|
104
|
+
}
|
|
105
|
+
/** Tombstone for a position claimed by two nodes — see `positionKey`. */
|
|
106
|
+
export const AMBIGUOUS_POSITION = '';
|
|
62
107
|
export function buildGraphNodeLookup(graph) {
|
|
63
108
|
const lookup = new Map();
|
|
64
109
|
for (const node of graph.iterNodes()) {
|
|
@@ -67,6 +112,20 @@ export function buildGraphNodeLookup(graph) {
|
|
|
67
112
|
continue;
|
|
68
113
|
if (!isLinkableLabel(node.label))
|
|
69
114
|
continue;
|
|
115
|
+
// Position key (#2699) — see `positionKey`. Second write on a key marks it
|
|
116
|
+
// ambiguous rather than letting source order decide.
|
|
117
|
+
const startLine = props.startLine;
|
|
118
|
+
if (startLine !== undefined && isPositionQualifiedLocalLabel(node.label)) {
|
|
119
|
+
const posK = positionKey(props.filePath, node.label, startLine, props.name);
|
|
120
|
+
lookup.set(posK, lookup.has(posK) ? AMBIGUOUS_POSITION : node.id);
|
|
121
|
+
// A local-identity node carries `@<row>:<col>` on its last name segment. Record
|
|
122
|
+
// that a local of this simple name exists, so the resolver can fail closed on a
|
|
123
|
+
// position miss instead of aliasing through the simple-name fallback.
|
|
124
|
+
const qualForLocal = parseQualifiedFromId(node.id, node.label, props.filePath);
|
|
125
|
+
if (qualForLocal !== undefined && /@\d+:\d+$/.test(qualForLocal)) {
|
|
126
|
+
lookup.set(localNameKey(props.filePath, node.label, props.name), node.id);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
70
129
|
// Primary key: fully-qualified name + label, in a separate
|
|
71
130
|
// keyspace from simple names. Class nodes carry `qualifiedName`
|
|
72
131
|
// in their properties (set by the parsing processor).
|
|
@@ -140,7 +199,7 @@ export function buildGraphNodeLookup(graph) {
|
|
|
140
199
|
lookup.set(tKey, node.id);
|
|
141
200
|
}
|
|
142
201
|
}
|
|
143
|
-
// Fallback key: simple name.
|
|
202
|
+
// Fallback key: simple name. Source-order first-wins within a file — used when
|
|
144
203
|
// the caller doesn't know the qualifier (unqualified free-call
|
|
145
204
|
// fallback, cross-file resolution where MethodRegistry already
|
|
146
205
|
// disambiguated the owner).
|
|
@@ -150,33 +209,72 @@ export function buildGraphNodeLookup(graph) {
|
|
|
150
209
|
}
|
|
151
210
|
return lookup;
|
|
152
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Every label {@link buildGraphNodeLookup} registers — and therefore the ONLY
|
|
214
|
+
* labels `resolveDefGraphId` can ever return an id for. Both endpoints of every
|
|
215
|
+
* scope-resolution edge come from that lookup (the one exception is the File
|
|
216
|
+
* fallback in `resolveCallerGraphId`), so this set defines the whole FROM/TO
|
|
217
|
+
* surface those edges can produce.
|
|
218
|
+
*
|
|
219
|
+
* That makes it load-bearing for the LadybugDB relation DDL: a label added here
|
|
220
|
+
* without the matching `FROM x TO y` pairs in `RELATION_SCHEMA` crashes
|
|
221
|
+
* `analyze` at `assertDeclaredPair` on whichever codebase first emits the pair
|
|
222
|
+
* (#2792). `test/unit/schema-pair-coverage.test.ts` derives the required pairs
|
|
223
|
+
* from this set and fails in CI instead.
|
|
224
|
+
*/
|
|
225
|
+
export const LINKABLE_LABELS = new Set([
|
|
226
|
+
'Function',
|
|
227
|
+
'Method',
|
|
228
|
+
'Constructor',
|
|
229
|
+
// Program-like module declarations are provider-gated callable-value
|
|
230
|
+
// targets and need the same def→graph bridge.
|
|
231
|
+
'Module',
|
|
232
|
+
'Class',
|
|
233
|
+
'Interface',
|
|
234
|
+
'Struct',
|
|
235
|
+
'Enum',
|
|
236
|
+
// Record participates in the same def→graph bridge as other class-like
|
|
237
|
+
// declarations. Without this entry, its qualified/template lookup branches
|
|
238
|
+
// are unreachable and label-agnostic fallback can alias it to a same-named
|
|
239
|
+
// Constructor or Method (#2801).
|
|
240
|
+
'Record',
|
|
241
|
+
// Trait nodes are linkable so MRO builders can bridge PHP/Rust trait
|
|
242
|
+
// defs between scope-resolution DefIds and the graph's node ids.
|
|
243
|
+
// IMPLEMENTS edges from classes to traits are otherwise invisible to
|
|
244
|
+
// the scope-resolution MRO pass.
|
|
245
|
+
'Trait',
|
|
246
|
+
// TypeAlias is linkable for the same reason Trait is (R2-2). The alias
|
|
247
|
+
// resolves fine — `CLASS_KINDS` has always listed it, and the ClassRegistry
|
|
248
|
+
// returns the def — but without an entry here `resolveDefGraphId` cannot
|
|
249
|
+
// bridge that def to its graph node, so the edge is dropped after a
|
|
250
|
+
// SUCCESSFUL lookup. That is why an exported contract type owned its members
|
|
251
|
+
// and still reported `incoming: {}`: the failure was one table away from
|
|
252
|
+
// everything that appeared to be responsible.
|
|
253
|
+
//
|
|
254
|
+
// Covers every language that spells an alias this way — TypeScript, Kotlin,
|
|
255
|
+
// Dart and Rust all emit `@declaration.type_alias`. The remaining
|
|
256
|
+
// `CLASS_KINDS` entries (Typedef, Record, Union, Delegate, Annotation,
|
|
257
|
+
// Template) plausibly have the same gap, but nothing exercises them today
|
|
258
|
+
// and adding labels no test covers is how this list drifts out of sync with
|
|
259
|
+
// what it claims.
|
|
260
|
+
'TypeAlias',
|
|
261
|
+
// Variable / Property are linkable too — receiver-bound write/read
|
|
262
|
+
// ACCESSES edges target field nodes (e.g. `user.name = "x"` →
|
|
263
|
+
// ACCESSES edge to User's `name` Variable/Property node).
|
|
264
|
+
'Variable',
|
|
265
|
+
'Property',
|
|
266
|
+
// Const is linkable so the value-receiver-owner bridge in
|
|
267
|
+
// `receiver-bound-calls.ts` Case 5 can translate the scope-resolution
|
|
268
|
+
// `Variable` def for `export const fooService = {...}` to the canonical
|
|
269
|
+
// `Const:filePath:name` graph node id, against which object-literal
|
|
270
|
+
// method symbols register their `ownerId` (PR #1718 / issue #1358).
|
|
271
|
+
'Const',
|
|
272
|
+
// Macro nodes are linkable so a macro invocation (`log!(…)`) resolved
|
|
273
|
+
// via `MacroRegistry` can bridge its scope-resolution `Macro` def to
|
|
274
|
+
// the legacy `@definition.macro` graph node and emit the `USES` edge
|
|
275
|
+
// (Rust #1934 F72; also covers C/C++ `#define` macro defs).
|
|
276
|
+
'Macro',
|
|
277
|
+
]);
|
|
153
278
|
export function isLinkableLabel(label) {
|
|
154
|
-
return (label
|
|
155
|
-
label === 'Method' ||
|
|
156
|
-
label === 'Constructor' ||
|
|
157
|
-
label === 'Class' ||
|
|
158
|
-
label === 'Interface' ||
|
|
159
|
-
label === 'Struct' ||
|
|
160
|
-
label === 'Enum' ||
|
|
161
|
-
// Trait nodes are linkable so MRO builders can bridge PHP/Rust trait
|
|
162
|
-
// defs between scope-resolution DefIds and the graph's node ids.
|
|
163
|
-
// IMPLEMENTS edges from classes to traits are otherwise invisible to
|
|
164
|
-
// the scope-resolution MRO pass.
|
|
165
|
-
label === 'Trait' ||
|
|
166
|
-
// Variable / Property are linkable too — receiver-bound write/read
|
|
167
|
-
// ACCESSES edges target field nodes (e.g. `user.name = "x"` →
|
|
168
|
-
// ACCESSES edge to User's `name` Variable/Property node).
|
|
169
|
-
label === 'Variable' ||
|
|
170
|
-
label === 'Property' ||
|
|
171
|
-
// Const is linkable so the value-receiver-owner bridge in
|
|
172
|
-
// `receiver-bound-calls.ts` Case 5 can translate the scope-resolution
|
|
173
|
-
// `Variable` def for `export const fooService = {...}` to the canonical
|
|
174
|
-
// `Const:filePath:name` graph node id, against which object-literal
|
|
175
|
-
// method symbols register their `ownerId` (PR #1718 / issue #1358).
|
|
176
|
-
label === 'Const' ||
|
|
177
|
-
// Macro nodes are linkable so a macro invocation (`log!(…)`) resolved
|
|
178
|
-
// via `MacroRegistry` can bridge its scope-resolution `Macro` def to
|
|
179
|
-
// the legacy `@definition.macro` graph node and emit the `USES` edge
|
|
180
|
-
// (Rust #1934 F72; also covers C/C++ `#define` macro defs).
|
|
181
|
-
label === 'Macro');
|
|
279
|
+
return LINKABLE_LABELS.has(label);
|
|
182
280
|
}
|
|
@@ -30,13 +30,42 @@ import type { CalleeIdSink } from '../graph-bridge/callee-id-sink.js';
|
|
|
30
30
|
* `${filePath}:${startLine}:${startCol}`.
|
|
31
31
|
*/
|
|
32
32
|
type ReferenceSiteSkipSet = ReadonlySet<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Value labels whose defs MAY be function-local. A reference to one of these is
|
|
35
|
+
* dropped only when the def is positively identified as living inside a function
|
|
36
|
+
* body — see `functionLocalValueDefIds`. Everything else, including a class
|
|
37
|
+
* member in a language that keeps no values at module scope, is emitted.
|
|
38
|
+
*/
|
|
33
39
|
export declare function emitReferencesViaLookup(graph: KnowledgeGraph, scopes: ScopeResolutionIndexes, referenceIndex: {
|
|
34
40
|
readonly bySourceScope: ReadonlyMap<ScopeId, readonly Reference[]>;
|
|
35
41
|
}, nodeLookup: GraphNodeLookup, skipSites?: ReferenceSiteSkipSet,
|
|
36
42
|
/** Resolved-callee-id capture sink (#2227 U2). Threaded in only under
|
|
37
43
|
* `--pdg`; `undefined` ⇒ zero overhead, byte-identity (R4). Captured at the
|
|
38
44
|
* CALLS emit below BEFORE this loop's `seen` dedup (KTD6/R8). */
|
|
39
|
-
calleeIdSink?: CalleeIdSink
|
|
45
|
+
calleeIdSink?: CalleeIdSink,
|
|
46
|
+
/**
|
|
47
|
+
* Def ids of value symbols bound inside a FUNCTION body. When supplied, a
|
|
48
|
+
* read/write whose target is a `Const`/`Variable`/`Static` in this set emits
|
|
49
|
+
* no edge.
|
|
50
|
+
*
|
|
51
|
+
* Bare-identifier reads (A2) made module-scope constants answerable, but the
|
|
52
|
+
* same capture also matches a read of a BLOCK-LOCAL `const`. An edge to one
|
|
53
|
+
* of those keeps alive precisely the inert local symbols `pruneLocalSymbols`
|
|
54
|
+
* exists to drop — turning a pruned node into a retained node plus an edge,
|
|
55
|
+
* in every function of every indexed repo. "Who uses this constant?" is a
|
|
56
|
+
* question about a module's surface; a local's uses are the three lines
|
|
57
|
+
* around it.
|
|
58
|
+
*
|
|
59
|
+
* A BLOCKLIST, not an allowlist, and the direction is the point. Asking
|
|
60
|
+
* "is this def module-level?" silently excludes class members — Java/C#
|
|
61
|
+
* fields, Python class attributes — which are neither module-level nor local.
|
|
62
|
+
* Asking "is this def function-local?" excludes only what it can positively
|
|
63
|
+
* identify, so an unrecognised or uninspected def is emitted. A stray inert
|
|
64
|
+
* local is recoverable; a deleted edge class reads as "nothing uses this".
|
|
65
|
+
*
|
|
66
|
+
* Optional so callers that never capture bare identifiers are unchanged.
|
|
67
|
+
*/
|
|
68
|
+
functionLocalValueDefIds?: ReadonlySet<string>): {
|
|
40
69
|
emitted: number;
|
|
41
70
|
skipped: number;
|
|
42
71
|
};
|