gitnexus 1.6.10-rc.99 → 1.6.10
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 +177 -18
- package/dist/_shared/graph/types.d.ts +21 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -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 +16 -0
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +19 -7
- 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/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
- 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 +278 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +3 -2
- package/dist/cli/ai-context.js +71 -16
- 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 +21 -113
- package/dist/cli/analyze.js +172 -29
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.js +32 -5
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.js +2 -1
- 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 +229 -21
- package/dist/cli/help-i18n.js +1 -2
- package/dist/cli/i18n/en.d.ts +11 -9
- package/dist/cli/i18n/en.js +13 -9
- package/dist/cli/i18n/resources.d.ts +15 -11
- package/dist/cli/i18n/zh-CN.d.ts +4 -2
- package/dist/cli/i18n/zh-CN.js +11 -9
- package/dist/cli/index.js +8 -4
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.js +4 -3
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +74 -17
- package/dist/cli/wiki.js +53 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +54 -13
- package/dist/core/analyzer-identity.d.ts +80 -0
- package/dist/core/analyzer-identity.js +364 -26
- package/dist/core/augmentation/engine.js +86 -71
- 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/embedding-pipeline.d.ts +8 -0
- package/dist/core/embeddings/embedding-pipeline.js +253 -14
- package/dist/core/embeddings/http-client.d.ts +5 -0
- package/dist/core/embeddings/http-client.js +142 -27
- 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.d.ts +204 -1
- package/dist/core/group/bridge-db.js +401 -28
- package/dist/core/group/completeness.d.ts +130 -0
- package/dist/core/group/completeness.js +83 -0
- package/dist/core/group/config-parser.js +0 -5
- package/dist/core/group/cross-impact.d.ts +46 -1
- package/dist/core/group/cross-impact.js +220 -19
- package/dist/core/group/cross-trace.d.ts +32 -11
- package/dist/core/group/cross-trace.js +114 -20
- package/dist/core/group/extractors/http-patterns/java.js +278 -22
- package/dist/core/group/extractors/http-patterns/node.js +332 -216
- 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/extractors/python-workspace-extractor.js +5 -2
- package/dist/core/group/group-lock.d.ts +31 -0
- package/dist/core/group/group-lock.js +166 -0
- package/dist/core/group/service.js +297 -16
- package/dist/core/group/storage.d.ts +3 -0
- package/dist/core/group/storage.js +7 -39
- package/dist/core/group/sync.d.ts +49 -3
- package/dist/core/group/sync.js +0 -0
- package/dist/core/group/types.d.ts +183 -8
- package/dist/core/group/types.js +28 -1
- 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 +77 -2
- package/dist/core/index-freshness.js +109 -2
- 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/cluster-enricher.js +8 -4
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +81 -82
- package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
- package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
- package/dist/core/ingestion/di-extractors/spring.js +8 -1
- 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/filesystem-walker.js +30 -14
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
- 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-catalog.js +1 -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/di-metadata.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
- 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 +429 -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 +65 -19
- 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 +29 -1
- package/dist/core/ingestion/language-config.js +110 -35
- package/dist/core/ingestion/language-provider.d.ts +209 -7
- package/dist/core/ingestion/language-provider.js +37 -0
- package/dist/core/ingestion/languages/c/captures.js +7 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/scope-resolver.js +20 -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/scope-resolver.js +27 -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 +14 -2
- 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 +48 -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 +19 -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 +598 -16
- 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 +6 -1
- package/dist/core/ingestion/languages/go/captures.js +108 -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 +4 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/java/captures.js +77 -32
- 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/query.js +15 -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 +10 -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-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
- package/dist/core/ingestion/languages/java/spring-di.js +41 -9
- 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 +94 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +262 -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 +211 -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-siblings.js +77 -9
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
- 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/query.js +28 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
- 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-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 +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
- 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/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +319 -51
- package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
- package/dist/core/ingestion/languages/php/import-target.js +192 -62
- package/dist/core/ingestion/languages/php/query.js +31 -0
- 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.js +29 -0
- 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 -7
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
- package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
- package/dist/core/ingestion/languages/python.js +13 -0
- package/dist/core/ingestion/languages/ruby/captures.js +158 -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 +39 -1
- 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 +39 -6
- 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 +87 -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 +267 -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/convex-endpoint-metadata.d.ts +7 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -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/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +303 -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 +292 -0
- package/dist/core/ingestion/languages/typescript.js +93 -2
- 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/pipeline-phases/di.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/di.js +136 -21
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
- package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
- 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/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +26 -2
- package/dist/core/ingestion/pipeline.js +60 -11
- 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 +66 -6
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
- package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +876 -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/java-const-resolver.d.ts +114 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
- package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
- package/dist/core/ingestion/route-extractors/nest.js +523 -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 +214 -29
- 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 +309 -15
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
- 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 +58 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
- 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 +39 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
- 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 +3 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
- 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 +5 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
- 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 +29 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
- 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 +905 -22
- 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/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +678 -4
- package/dist/core/ingestion/type-env.js +11 -7
- 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 +297 -15
- package/dist/core/ingestion/utils/ast-helpers.js +578 -46
- 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 +59 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
- 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 +80 -0
- package/dist/core/ingestion/workers/callable-id.js +125 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +493 -54
- package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
- package/dist/core/ingestion/workers/worker-pool.js +91 -3
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +72 -17
- package/dist/core/lbug/extension-load-error.js +13 -2
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +31 -6
- 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 +290 -11
- package/dist/core/lbug/lbug-adapter.js +652 -69
- package/dist/core/lbug/native-check.d.ts +21 -0
- package/dist/core/lbug/native-check.js +248 -32
- 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 +9 -0
- package/dist/core/lbug/pool-adapter.js +164 -14
- 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 +163 -4
- package/dist/core/lbug/schema.js +404 -159
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/run-analyze.d.ts +147 -0
- package/dist/core/run-analyze.js +1215 -179
- 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 +150 -9
- package/dist/core/search/fts-indexes.js +241 -23
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +29 -3
- package/dist/core/wiki/llm-client.js +47 -12
- 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/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +2 -1
- package/dist/mcp/local/bean-metadata.js +22 -1
- package/dist/mcp/local/convex-metadata.d.ts +8 -0
- package/dist/mcp/local/convex-metadata.js +45 -0
- package/dist/mcp/local/local-backend.d.ts +174 -11
- package/dist/mcp/local/local-backend.js +1678 -331
- 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/repository-policy.d.ts +1 -0
- package/dist/mcp/repository-policy.js +5 -0
- package/dist/mcp/resources.js +26 -4
- package/dist/mcp/server.js +23 -13
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +76 -23
- package/dist/server/analyze-job.d.ts +37 -2
- package/dist/server/analyze-job.js +13 -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 +1 -1
- package/dist/server/analyze-worker-core.js +10 -1
- 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/api.d.ts +2 -11
- package/dist/server/api.js +164 -163
- 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/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/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 +131 -0
- package/dist/storage/git.js +236 -2
- package/dist/storage/index-lock.d.ts +102 -0
- package/dist/storage/index-lock.js +660 -0
- package/dist/storage/parse-cache.js +588 -6
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -441
- package/dist/storage/repo-manager.js +312 -221
- 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 +11 -2
- package/scripts/cross-platform-shard.ts +153 -0
- package/scripts/cross-platform-tests.ts +122 -0
- package/scripts/run-cross-platform.ts +16 -5
- 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-plan/README.md +11 -6
- package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +12 -6
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/SKILL.md +4 -1
- package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-Dr4l5EOp.js +662 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
- package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
- 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-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
- 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-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
- package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
- 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-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
- 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-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
- 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/error-D9MtuG9s.js +1 -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-D7mTFcvQ.js → index-2zdvEdzg.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-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
- package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
- package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
- package/web/assets/node.browser-U-KyT5AW.js +1 -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/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
- 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-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
- package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
- package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
- 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-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
- 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 +16 -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/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
- package/web/assets/agent-Ds-lkZjX.js +0 -626
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.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-CA7OhIEf.js +0 -124
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.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-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-BZeP-55u.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-LRIF4GLE-n59lhprL.js +0 -1
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.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-ByqTVLvh.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.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-T368on4D.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/node-Ct_zna8U.js +0 -8
- 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-Bv4LpAbr.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/sdk-CzHHH8tD.js +0 -37
- package/web/assets/src-Cv1eWg0o.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
- 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-BD1iK1SX.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rank a name→count map highest-first and cap it.
|
|
3
|
+
*
|
|
4
|
+
* `compareCodeUnits`, not `localeCompare` (#2787). The tiebreak feeds the
|
|
5
|
+
* `.slice()` below, so locale-sensitive collation would decide WHICH entries
|
|
6
|
+
* survive the cap, not merely how they are listed — and ICU order varies by
|
|
7
|
+
* platform and ICU build, so two runs over one repo could persist different
|
|
8
|
+
* sets. Key-based lookup is unaffected either way.
|
|
9
|
+
*
|
|
10
|
+
* `omitted` is the number of distinct names past the cap, so the caller can
|
|
11
|
+
* report truncation rather than silently losing entries.
|
|
12
|
+
*/
|
|
13
|
+
export declare function rankAndCap(counts: ReadonlyMap<string, number>, cap: number): {
|
|
14
|
+
kept: [string, number][];
|
|
15
|
+
omitted: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Read one count out of a persisted map, prototype-safely.
|
|
19
|
+
*
|
|
20
|
+
* The map is revived from JSON, so a bare `counts[name]` returns a Function for
|
|
21
|
+
* `constructor` / `toString` / `valueOf` — all ordinary member and type names in
|
|
22
|
+
* a code graph — and a Function compares as neither absent nor a number, which
|
|
23
|
+
* is how one of these once interpolated a function into user-facing text.
|
|
24
|
+
*
|
|
25
|
+
* Returns `undefined` when the name was never recorded, and only ever a finite
|
|
26
|
+
* positive number otherwise.
|
|
27
|
+
*/
|
|
28
|
+
export declare function lookupCount(counts: Readonly<Record<string, number>> | undefined, name: string): number | undefined;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared shape for the name→count maps this directory persists into `RepoMeta`
|
|
3
|
+
* (`UnresolvedReceiverSummary`, `UndecidedSatisfactionSummary`).
|
|
4
|
+
*
|
|
5
|
+
* Both are samples of an analysis-time fact, both are capped, and both are read
|
|
6
|
+
* back by `impact` to hedge an answer. The ranking and the lookup therefore
|
|
7
|
+
* have to behave identically across them — two hand-copied comparators that
|
|
8
|
+
* must stay in step is exactly the drift these summaries cannot tolerate, and a
|
|
9
|
+
* lookup that is prototype-safe in one artifact and not the other is a
|
|
10
|
+
* user-facing bug waiting on whichever map is read first.
|
|
11
|
+
*/
|
|
12
|
+
import { compareCodeUnits } from '../../../lib/utils.js';
|
|
13
|
+
/**
|
|
14
|
+
* Rank a name→count map highest-first and cap it.
|
|
15
|
+
*
|
|
16
|
+
* `compareCodeUnits`, not `localeCompare` (#2787). The tiebreak feeds the
|
|
17
|
+
* `.slice()` below, so locale-sensitive collation would decide WHICH entries
|
|
18
|
+
* survive the cap, not merely how they are listed — and ICU order varies by
|
|
19
|
+
* platform and ICU build, so two runs over one repo could persist different
|
|
20
|
+
* sets. Key-based lookup is unaffected either way.
|
|
21
|
+
*
|
|
22
|
+
* `omitted` is the number of distinct names past the cap, so the caller can
|
|
23
|
+
* report truncation rather than silently losing entries.
|
|
24
|
+
*/
|
|
25
|
+
export function rankAndCap(counts, cap) {
|
|
26
|
+
const ranked = [...counts.entries()].sort(([aName, aCount], [bName, bCount]) => bCount - aCount || compareCodeUnits(aName, bName));
|
|
27
|
+
const kept = ranked.slice(0, cap);
|
|
28
|
+
return { kept, omitted: ranked.length - kept.length };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Read one count out of a persisted map, prototype-safely.
|
|
32
|
+
*
|
|
33
|
+
* The map is revived from JSON, so a bare `counts[name]` returns a Function for
|
|
34
|
+
* `constructor` / `toString` / `valueOf` — all ordinary member and type names in
|
|
35
|
+
* a code graph — and a Function compares as neither absent nor a number, which
|
|
36
|
+
* is how one of these once interpolated a function into user-facing text.
|
|
37
|
+
*
|
|
38
|
+
* Returns `undefined` when the name was never recorded, and only ever a finite
|
|
39
|
+
* positive number otherwise.
|
|
40
|
+
*/
|
|
41
|
+
export function lookupCount(counts, name) {
|
|
42
|
+
if (counts === undefined || name.length === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (!Object.hasOwn(counts, name))
|
|
45
|
+
return undefined;
|
|
46
|
+
const count = counts[name];
|
|
47
|
+
if (typeof count !== 'number' || !Number.isFinite(count) || count <= 0)
|
|
48
|
+
return undefined;
|
|
49
|
+
return count;
|
|
50
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summarize interfaces whose structural-satisfaction check could not be
|
|
3
|
+
* COMPLETED, for persistence in `RepoMeta` (#2873).
|
|
4
|
+
*
|
|
5
|
+
* The distinction this exists to preserve: an interface with no implementors in
|
|
6
|
+
* the graph and an interface whose implementors could not be decided are
|
|
7
|
+
* byte-identical at query time — both are zero edges. Only the first is an
|
|
8
|
+
* answer. Without this record, `impact()` on a method reachable solely through
|
|
9
|
+
* the second reports zero callers and calls that result `exact`.
|
|
10
|
+
*
|
|
11
|
+
* It rides in `RepoMeta`, not the graph, for the same reason
|
|
12
|
+
* `UnresolvedReceiverSummary` does: the fact is about the ANALYSIS rather than
|
|
13
|
+
* about the code, so it belongs beside the analysis, and a relationship
|
|
14
|
+
* property would move `SCHEMA_FINGERPRINT` and force a full re-analyze. It also
|
|
15
|
+
* keeps the marker invisible to every IMPLEMENTS consumer — MRO,
|
|
16
|
+
* METHOD_IMPLEMENTS derivation, dispatch fan-out, clustering, DI — none of
|
|
17
|
+
* which should see a question as an edge.
|
|
18
|
+
*/
|
|
19
|
+
import type { UndecidedSatisfaction } from './contract/scope-resolver.js';
|
|
20
|
+
/** Twin of `MAX_UNRESOLVED_RECEIVER_MEMBERS`, same rationale. Truncation is
|
|
21
|
+
* reported, never silent — see `totalInterfaces` / `omittedCandidates`. */
|
|
22
|
+
export declare const MAX_UNDECIDED_INTERFACES = 500;
|
|
23
|
+
export interface UndecidedSatisfactionSummary {
|
|
24
|
+
/**
|
|
25
|
+
* Interface name → how many candidate types went unjudged for it. Capped at
|
|
26
|
+
* {@link MAX_UNDECIDED_INTERFACES} entries, highest count first.
|
|
27
|
+
*
|
|
28
|
+
* Keyed by NAME rather than by node id because the query side matches against
|
|
29
|
+
* the interface names a boundary walk already has in hand, and because a node
|
|
30
|
+
* id is only meaningful against the exact index that minted it.
|
|
31
|
+
*/
|
|
32
|
+
readonly counts: Readonly<Record<string, number>>;
|
|
33
|
+
/** Distinct interfaces that could not be fully decided, including any beyond
|
|
34
|
+
* the cap. Always the true total, so a consumer can tell `counts` is a
|
|
35
|
+
* sample rather than the whole. */
|
|
36
|
+
readonly totalInterfaces: number;
|
|
37
|
+
/** Total unjudged (interface, candidate) pairs, including beyond the cap. */
|
|
38
|
+
readonly totalCandidates: number;
|
|
39
|
+
/**
|
|
40
|
+
* Candidate type name → how many interfaces went unjudged FOR that type.
|
|
41
|
+
*
|
|
42
|
+
* The other side of the same fact, and the side the reported symptom needs:
|
|
43
|
+
* `impact` on an implementation method never reaches the interface node —
|
|
44
|
+
* the heritage edge that would take it there is exactly what went missing —
|
|
45
|
+
* so an interface-keyed record alone leaves that query confidently wrong.
|
|
46
|
+
* Capped like `counts`, highest first.
|
|
47
|
+
*/
|
|
48
|
+
readonly candidateCounts: Readonly<Record<string, number>>;
|
|
49
|
+
/** Distinct candidate types beyond the cap. Absent when none were dropped. */
|
|
50
|
+
readonly omittedCandidates?: number;
|
|
51
|
+
}
|
|
52
|
+
/** Returns `undefined` when nothing was undecided: absence means "this run
|
|
53
|
+
* decided everything it looked at", which must stay distinguishable from a
|
|
54
|
+
* zeroed record at read time. */
|
|
55
|
+
export declare function summarizeUndecidedSatisfaction(undecided: readonly UndecidedSatisfaction[]): UndecidedSatisfactionSummary | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { rankAndCap } from './summary-maps.js';
|
|
2
|
+
/** Twin of `MAX_UNRESOLVED_RECEIVER_MEMBERS`, same rationale. Truncation is
|
|
3
|
+
* reported, never silent — see `totalInterfaces` / `omittedCandidates`. */
|
|
4
|
+
export const MAX_UNDECIDED_INTERFACES = 500;
|
|
5
|
+
/** Returns `undefined` when nothing was undecided: absence means "this run
|
|
6
|
+
* decided everything it looked at", which must stay distinguishable from a
|
|
7
|
+
* zeroed record at read time. */
|
|
8
|
+
export function summarizeUndecidedSatisfaction(undecided) {
|
|
9
|
+
if (undecided.length === 0)
|
|
10
|
+
return undefined;
|
|
11
|
+
const byName = new Map();
|
|
12
|
+
const byCandidate = new Map();
|
|
13
|
+
let totalCandidates = 0;
|
|
14
|
+
for (const entry of undecided) {
|
|
15
|
+
totalCandidates += entry.undecidedCandidates;
|
|
16
|
+
byName.set(entry.interfaceName, (byName.get(entry.interfaceName) ?? 0) + entry.undecidedCandidates);
|
|
17
|
+
for (const candidate of entry.candidateNames) {
|
|
18
|
+
byCandidate.set(candidate, (byCandidate.get(candidate) ?? 0) + 1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Highest count first, name as tiebreak. The tiebreak is load-bearing, not
|
|
22
|
+
// cosmetic: past the cap it decides WHICH entries survive, and a
|
|
23
|
+
// locale-sensitive comparison would make the persisted file depend on the
|
|
24
|
+
// machine that wrote it.
|
|
25
|
+
const ranked = rankAndCap(byName, MAX_UNDECIDED_INTERFACES);
|
|
26
|
+
const candidates = rankAndCap(byCandidate, MAX_UNDECIDED_INTERFACES);
|
|
27
|
+
return {
|
|
28
|
+
counts: Object.fromEntries(ranked.kept),
|
|
29
|
+
// `totalInterfaces` minus the kept keys IS the omitted count, so only the
|
|
30
|
+
// total is persisted — unlike the sibling summary, which has no total to
|
|
31
|
+
// derive it from and therefore carries the omission explicitly.
|
|
32
|
+
totalInterfaces: ranked.kept.length + ranked.omitted,
|
|
33
|
+
totalCandidates,
|
|
34
|
+
candidateCounts: Object.fromEntries(candidates.kept),
|
|
35
|
+
...(candidates.omitted > 0 ? { omittedCandidates: candidates.omitted } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate `receiver-unresolved` resolution outcomes into the small,
|
|
3
|
+
* index-persisted summary that `impact()` / `context()` read to decide whether
|
|
4
|
+
* their result is exact or a lower bound (#2744, the second half of #2708).
|
|
5
|
+
*
|
|
6
|
+
* **Why keyed by member name.** A dropped site's callee is unknown — that is
|
|
7
|
+
* what "unresolved" means — so the drop cannot be attributed to any target
|
|
8
|
+
* symbol. The one thing still known is the member NAME being invoked:
|
|
9
|
+
* `Service(db).do_work()` tells us a call to something called `do_work` was
|
|
10
|
+
* lost even though the receiver's type was not established. That is exactly
|
|
11
|
+
* the granularity the epistemic signal needs: a query about `do_work` can
|
|
12
|
+
* report its caller count as a lower bound, while a query about an unrelated
|
|
13
|
+
* symbol stays exact.
|
|
14
|
+
*/
|
|
15
|
+
import type { ResolutionOutcome } from './resolution-outcome.js';
|
|
16
|
+
/** Cap on distinct member names persisted. Well above what a real repo
|
|
17
|
+
* produces (the whole point of the signal is that drops are the exception),
|
|
18
|
+
* but bounded so a pathological repo cannot grow the metadata file without
|
|
19
|
+
* limit. Truncation is reported, never silent — see `truncated`. */
|
|
20
|
+
export declare const MAX_UNRESOLVED_RECEIVER_MEMBERS = 500;
|
|
21
|
+
export interface UnresolvedReceiverSummary {
|
|
22
|
+
/** Member name → number of call sites dropped with an untyped receiver.
|
|
23
|
+
* Capped at `MAX_UNRESOLVED_RECEIVER_MEMBERS` entries, highest count first. */
|
|
24
|
+
readonly counts: Readonly<Record<string, number>>;
|
|
25
|
+
/** Total dropped sites, including any beyond the cap. Always the true total,
|
|
26
|
+
* so a consumer can tell that `counts` is a sample rather than the whole. */
|
|
27
|
+
readonly totalSites: number;
|
|
28
|
+
/** Distinct member names beyond the cap, omitted from `counts`. Absent when
|
|
29
|
+
* nothing was dropped from the map. */
|
|
30
|
+
readonly omittedNames?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Call sites dropped whose receiver was rooted OUTSIDE the indexed program,
|
|
33
|
+
* by member name — `System.out.println`, `fetch(...)`, `os.environ.*`.
|
|
34
|
+
*
|
|
35
|
+
* Kept SEPARATE rather than filtered away. These do not make a count a lower
|
|
36
|
+
* bound (there is no in-graph node an edge could have reached), but erasing
|
|
37
|
+
* them at summary time would leave the persisted artifact unable to
|
|
38
|
+
* distinguish "clean index" from "76 drops we judged external" — with no
|
|
39
|
+
* audit path and no way back without a re-index. That is the same collapse
|
|
40
|
+
* `EpistemicCauses` exists to undo, and the judgement being recorded here is a
|
|
41
|
+
* heuristic, so it must stay reversible.
|
|
42
|
+
*/
|
|
43
|
+
readonly externalCounts?: Readonly<Record<string, number>>;
|
|
44
|
+
/** Total external-rooted call sites, including any beyond the cap. */
|
|
45
|
+
readonly externalSites?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Distinct member names beyond the cap, omitted from `externalCounts`. Absent
|
|
48
|
+
* when nothing was dropped from that map.
|
|
49
|
+
*
|
|
50
|
+
* The exact twin of `omittedNames`, and it exists for the same reason. Past
|
|
51
|
+
* the cap `lookupExternalCallCount` returns `undefined` for a truncated name,
|
|
52
|
+
* which is indistinguishable from "this member had no external drops" — so a
|
|
53
|
+
* symbol with real boundary evidence reads as having none. One map carrying a
|
|
54
|
+
* truncation marker and the other silently losing entries also made the
|
|
55
|
+
* persisted artifact self-contradictory: `externalSites` would exceed the sum
|
|
56
|
+
* of `externalCounts` with nothing to explain the difference.
|
|
57
|
+
*/
|
|
58
|
+
readonly externalOmittedNames?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build the summary, or `undefined` when nothing was dropped — an index with
|
|
62
|
+
* no unresolved receivers stores no key at all, so `epistemic` keeps its
|
|
63
|
+
* existing "exact unless proven otherwise" behaviour for every repo that
|
|
64
|
+
* resolves cleanly.
|
|
65
|
+
*/
|
|
66
|
+
export declare function summarizeUnresolvedReceivers(outcomes: readonly ResolutionOutcome[]): UnresolvedReceiverSummary | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Look up the dropped-CALL count for a member name.
|
|
69
|
+
*
|
|
70
|
+
* THE one place that reads `UnresolvedReceiverSummary.counts`. The map is
|
|
71
|
+
* revived from JSON, so it carries `Object.prototype`: a bare
|
|
72
|
+
* `counts[symName]` returns a FUNCTION for `constructor`, `toString`,
|
|
73
|
+
* `valueOf`, `hasOwnProperty` and friends, and a `<= 0` guard does not catch it
|
|
74
|
+
* because `Number(fn)` is `NaN` and `NaN <= 0` is false. `constructor` is an
|
|
75
|
+
* ordinary member name in a code graph, so that was reachable in normal use and
|
|
76
|
+
* interpolated a function into user-facing text.
|
|
77
|
+
*
|
|
78
|
+
* Returns `undefined` when the name was never recorded, and only ever returns a
|
|
79
|
+
* finite positive number otherwise.
|
|
80
|
+
*/
|
|
81
|
+
export declare function lookupUnresolvedCallCount(summary: UnresolvedReceiverSummary | undefined, symName: string): number | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Look up the EXTERNAL-rooted dropped-call count for a member name.
|
|
84
|
+
*
|
|
85
|
+
* Companion to `lookupUnresolvedCallCount`, and prototype-safe for the same
|
|
86
|
+
* reason: the map is revived from JSON, so `constructor` / `toString` and
|
|
87
|
+
* friends would otherwise return a function.
|
|
88
|
+
*/
|
|
89
|
+
export declare function lookupExternalCallCount(summary: UnresolvedReceiverSummary | undefined, symName: string): number | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Report which FILES lost the most call sites to an untyped receiver (#2837).
|
|
92
|
+
*
|
|
93
|
+
* `summarizeUnresolvedReceivers` persists the same drops keyed by member NAME,
|
|
94
|
+
* capped at 500 distinct names, and discards `filePath` — deliberately, because
|
|
95
|
+
* its consumer (`impact()`'s exact-vs-lower-bound verdict) asks "is this
|
|
96
|
+
* symbol's caller count trustworthy", a question about names.
|
|
97
|
+
*
|
|
98
|
+
* That leaves "why does THIS file resolve nothing while its sibling resolves
|
|
99
|
+
* everything" unanswerable from any artifact, which is exactly what #2837 asked
|
|
100
|
+
* for and could not run: comparing the drop records of two files with identical
|
|
101
|
+
* declared shapes separates "receiver never typed" from "typed but no edge
|
|
102
|
+
* emitted", and narrows a per-file split in one run instead of a bisect.
|
|
103
|
+
*
|
|
104
|
+
* A log line rather than a persisted field because nothing queries it — a
|
|
105
|
+
* persisted `byFile` map would be an unread field carrying its own cap and
|
|
106
|
+
* truncation semantics. When a consumer appears, `UnresolvedReceiverSummary` is
|
|
107
|
+
* already a `RepoMeta` field and can carry it with no schema change.
|
|
108
|
+
*/
|
|
109
|
+
export declare function logUnresolvedReceiverFiles(outcomes: readonly ResolutionOutcome[]): void;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate `receiver-unresolved` resolution outcomes into the small,
|
|
3
|
+
* index-persisted summary that `impact()` / `context()` read to decide whether
|
|
4
|
+
* their result is exact or a lower bound (#2744, the second half of #2708).
|
|
5
|
+
*
|
|
6
|
+
* **Why keyed by member name.** A dropped site's callee is unknown — that is
|
|
7
|
+
* what "unresolved" means — so the drop cannot be attributed to any target
|
|
8
|
+
* symbol. The one thing still known is the member NAME being invoked:
|
|
9
|
+
* `Service(db).do_work()` tells us a call to something called `do_work` was
|
|
10
|
+
* lost even though the receiver's type was not established. That is exactly
|
|
11
|
+
* the granularity the epistemic signal needs: a query about `do_work` can
|
|
12
|
+
* report its caller count as a lower bound, while a query about an unrelated
|
|
13
|
+
* symbol stays exact.
|
|
14
|
+
*/
|
|
15
|
+
import { createLogger } from '../../logger.js';
|
|
16
|
+
import { rankAndCap, lookupCount } from './summary-maps.js';
|
|
17
|
+
/** Cap on distinct member names persisted. Well above what a real repo
|
|
18
|
+
* produces (the whole point of the signal is that drops are the exception),
|
|
19
|
+
* but bounded so a pathological repo cannot grow the metadata file without
|
|
20
|
+
* limit. Truncation is reported, never silent — see `truncated`. */
|
|
21
|
+
export const MAX_UNRESOLVED_RECEIVER_MEMBERS = 500;
|
|
22
|
+
/**
|
|
23
|
+
* Rank a name→count map and cap it at {@link MAX_UNRESOLVED_RECEIVER_MEMBERS}.
|
|
24
|
+
*
|
|
25
|
+
* Highest count first, name as a tiebreak so the persisted map is stable across
|
|
26
|
+
* runs — an unstable ordering would churn the metadata file (and its diff) on
|
|
27
|
+
* every analyze for no behavioural reason. ONE comparator, shared by the
|
|
28
|
+
* in-program and external maps: two hand-copied comparators that must stay
|
|
29
|
+
* identical or the artifact churns on one map and not the other is exactly the
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* A `receiver-unresolved` drop at a CALL site.
|
|
33
|
+
*
|
|
34
|
+
* ONE predicate, shared by the persisted summary and the per-file diagnostic —
|
|
35
|
+
* the same contract `rankAndCap` states for its comparator. If the two ever
|
|
36
|
+
* disagreed, the diagnostic would rank a different population than the artifact
|
|
37
|
+
* it exists to explain.
|
|
38
|
+
*
|
|
39
|
+
* Call sites only: Case 0's recorder gates on the receiver's punctuation, not on
|
|
40
|
+
* what the reference IS, so property reads (`d.source.kind`) and writes
|
|
41
|
+
* (`x.argtypes = [...]`) arrive alongside lost method calls — measured at 25 of
|
|
42
|
+
* 124 drops on the fixture corpus. Counting them made the consumer's "N call
|
|
43
|
+
* sites invoking X were dropped" literally false. A missing `siteKind` counts as
|
|
44
|
+
* a call: the only emitter always sets it, and erring toward `lower-bound` is
|
|
45
|
+
* the safe direction for an epistemic signal.
|
|
46
|
+
*
|
|
47
|
+
* Receiver ORIGIN is deliberately NOT decided here — the summary routes external
|
|
48
|
+
* drops into their own bucket while the diagnostic excludes them, and collapsing
|
|
49
|
+
* that choice into this predicate would take it away from both callers.
|
|
50
|
+
*/
|
|
51
|
+
function isUnresolvedReceiverCall(outcome) {
|
|
52
|
+
return (outcome.kind === 'suppressed' &&
|
|
53
|
+
outcome.reason === 'receiver-unresolved' &&
|
|
54
|
+
(outcome.siteKind === undefined || outcome.siteKind === 'call'));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Build the summary, or `undefined` when nothing was dropped — an index with
|
|
58
|
+
* no unresolved receivers stores no key at all, so `epistemic` keeps its
|
|
59
|
+
* existing "exact unless proven otherwise" behaviour for every repo that
|
|
60
|
+
* resolves cleanly.
|
|
61
|
+
*/
|
|
62
|
+
export function summarizeUnresolvedReceivers(outcomes) {
|
|
63
|
+
const counts = new Map();
|
|
64
|
+
const externalCounts = new Map();
|
|
65
|
+
let totalSites = 0;
|
|
66
|
+
let externalSites = 0;
|
|
67
|
+
for (const outcome of outcomes) {
|
|
68
|
+
// CALL sites only — see `isUnresolvedReceiverCall`, which the per-file
|
|
69
|
+
// diagnostic shares so the two can never rank different populations.
|
|
70
|
+
if (!isUnresolvedReceiverCall(outcome))
|
|
71
|
+
continue;
|
|
72
|
+
if (outcome.name.length === 0)
|
|
73
|
+
continue;
|
|
74
|
+
// Routed, not discarded. External-rooted drops (`console.log(...)`,
|
|
75
|
+
// `fetch(...)`) reach code this index does not contain, so there is no node
|
|
76
|
+
// an edge could have pointed at and nothing was lost — they must not hedge.
|
|
77
|
+
// But they stay in the artifact under their own key so the split is
|
|
78
|
+
// auditable and reversible.
|
|
79
|
+
//
|
|
80
|
+
// `external` is a POSITIVE determination made by `classifyReceiverOrigin`
|
|
81
|
+
// from a language built-in match, never a fallthrough: a receiver the
|
|
82
|
+
// classifier could not place lands in `unknown`, which counts here WITH
|
|
83
|
+
// `in-program`, because assuming a completeness we cannot demonstrate is
|
|
84
|
+
// the unsafe direction.
|
|
85
|
+
if (outcome.receiverOrigin === 'external') {
|
|
86
|
+
externalSites++;
|
|
87
|
+
externalCounts.set(outcome.name, (externalCounts.get(outcome.name) ?? 0) + 1);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
totalSites++;
|
|
91
|
+
counts.set(outcome.name, (counts.get(outcome.name) ?? 0) + 1);
|
|
92
|
+
}
|
|
93
|
+
// An index whose only drops were external-rooted still reports the split, so
|
|
94
|
+
// "nothing was lost" is distinguishable from "nothing was measured".
|
|
95
|
+
if (totalSites === 0 && externalSites === 0)
|
|
96
|
+
return undefined;
|
|
97
|
+
const { kept, omitted: omittedNames } = rankAndCap(counts, MAX_UNRESOLVED_RECEIVER_MEMBERS);
|
|
98
|
+
const { kept: externalKept, omitted: externalOmittedNames } = rankAndCap(externalCounts, MAX_UNRESOLVED_RECEIVER_MEMBERS);
|
|
99
|
+
return {
|
|
100
|
+
counts: Object.fromEntries(kept),
|
|
101
|
+
totalSites,
|
|
102
|
+
...(omittedNames > 0 ? { omittedNames } : {}),
|
|
103
|
+
...(externalSites > 0
|
|
104
|
+
? {
|
|
105
|
+
externalCounts: Object.fromEntries(externalKept),
|
|
106
|
+
externalSites,
|
|
107
|
+
...(externalOmittedNames > 0 ? { externalOmittedNames } : {}),
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Look up the dropped-CALL count for a member name.
|
|
114
|
+
*
|
|
115
|
+
* THE one place that reads `UnresolvedReceiverSummary.counts`. The map is
|
|
116
|
+
* revived from JSON, so it carries `Object.prototype`: a bare
|
|
117
|
+
* `counts[symName]` returns a FUNCTION for `constructor`, `toString`,
|
|
118
|
+
* `valueOf`, `hasOwnProperty` and friends, and a `<= 0` guard does not catch it
|
|
119
|
+
* because `Number(fn)` is `NaN` and `NaN <= 0` is false. `constructor` is an
|
|
120
|
+
* ordinary member name in a code graph, so that was reachable in normal use and
|
|
121
|
+
* interpolated a function into user-facing text.
|
|
122
|
+
*
|
|
123
|
+
* Returns `undefined` when the name was never recorded, and only ever returns a
|
|
124
|
+
* finite positive number otherwise.
|
|
125
|
+
*/
|
|
126
|
+
export function lookupUnresolvedCallCount(summary, symName) {
|
|
127
|
+
return lookupCount(summary?.counts, symName);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Look up the EXTERNAL-rooted dropped-call count for a member name.
|
|
131
|
+
*
|
|
132
|
+
* Companion to `lookupUnresolvedCallCount`, and prototype-safe for the same
|
|
133
|
+
* reason: the map is revived from JSON, so `constructor` / `toString` and
|
|
134
|
+
* friends would otherwise return a function.
|
|
135
|
+
*/
|
|
136
|
+
export function lookupExternalCallCount(summary, symName) {
|
|
137
|
+
return lookupCount(summary?.externalCounts, symName);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Opt-in, following the repo's established diagnostic pattern
|
|
141
|
+
* (`createLogger(name, { debugEnvVar })`). Every repository in every language
|
|
142
|
+
* drops SOME receivers, so emitting this at `info` unconditionally would add a
|
|
143
|
+
* line to every analyze anyone ever runs — the noise ADV-6 flagged. #2837's
|
|
144
|
+
* reporter turns it on deliberately:
|
|
145
|
+
*
|
|
146
|
+
* GITNEXUS_DEBUG_RECEIVER_DROPS=1 gitnexus analyze
|
|
147
|
+
*/
|
|
148
|
+
// Built on first use, not at import. `createLogger` is eager where the `logger`
|
|
149
|
+
// singleton is a lazy Proxy — it resolves `pino-pretty`, constructs a SonicBoom
|
|
150
|
+
// destination and registers a `beforeExit` hook. This module is imported by
|
|
151
|
+
// `mcp/local/local-backend.ts` for its lookup helpers, so an eager call would
|
|
152
|
+
// put that on MCP server startup for a diagnostic that is off by default.
|
|
153
|
+
let receiverDropLog;
|
|
154
|
+
const dropLog = () => (receiverDropLog ??= createLogger('receiver-drops', {
|
|
155
|
+
debugEnvVar: 'GITNEXUS_DEBUG_RECEIVER_DROPS',
|
|
156
|
+
}));
|
|
157
|
+
/** Files named in the per-file receiver-drop line. Bounded: this is a signpost
|
|
158
|
+
* pointing at where to look, not an inventory. */
|
|
159
|
+
const UNRESOLVED_RECEIVER_FILE_SAMPLE = 10;
|
|
160
|
+
/**
|
|
161
|
+
* Report which FILES lost the most call sites to an untyped receiver (#2837).
|
|
162
|
+
*
|
|
163
|
+
* `summarizeUnresolvedReceivers` persists the same drops keyed by member NAME,
|
|
164
|
+
* capped at 500 distinct names, and discards `filePath` — deliberately, because
|
|
165
|
+
* its consumer (`impact()`'s exact-vs-lower-bound verdict) asks "is this
|
|
166
|
+
* symbol's caller count trustworthy", a question about names.
|
|
167
|
+
*
|
|
168
|
+
* That leaves "why does THIS file resolve nothing while its sibling resolves
|
|
169
|
+
* everything" unanswerable from any artifact, which is exactly what #2837 asked
|
|
170
|
+
* for and could not run: comparing the drop records of two files with identical
|
|
171
|
+
* declared shapes separates "receiver never typed" from "typed but no edge
|
|
172
|
+
* emitted", and narrows a per-file split in one run instead of a bisect.
|
|
173
|
+
*
|
|
174
|
+
* A log line rather than a persisted field because nothing queries it — a
|
|
175
|
+
* persisted `byFile` map would be an unread field carrying its own cap and
|
|
176
|
+
* truncation semantics. When a consumer appears, `UnresolvedReceiverSummary` is
|
|
177
|
+
* already a `RepoMeta` field and can carry it with no schema change.
|
|
178
|
+
*/
|
|
179
|
+
export function logUnresolvedReceiverFiles(outcomes) {
|
|
180
|
+
// Nothing below is observable unless the diagnostic is switched on, so skip
|
|
181
|
+
// the whole tally rather than building it and discarding it at the emit.
|
|
182
|
+
if (!dropLog().isLevelEnabled('debug'))
|
|
183
|
+
return;
|
|
184
|
+
const byFile = new Map();
|
|
185
|
+
let totalSites = 0;
|
|
186
|
+
for (const outcome of outcomes) {
|
|
187
|
+
// External-rooted drops (`fmt.Println`) reach code this index does not
|
|
188
|
+
// contain, so no node existed for an edge to point at and nothing was lost.
|
|
189
|
+
// Counting them here led the ranking with files that call `fmt` the most.
|
|
190
|
+
if (!isUnresolvedReceiverCall(outcome) || outcome.receiverOrigin === 'external')
|
|
191
|
+
continue;
|
|
192
|
+
totalSites += 1;
|
|
193
|
+
byFile.set(outcome.filePath, (byFile.get(outcome.filePath) ?? 0) + 1);
|
|
194
|
+
}
|
|
195
|
+
if (totalSites === 0)
|
|
196
|
+
return;
|
|
197
|
+
const { kept } = rankAndCap(byFile, UNRESOLVED_RECEIVER_FILE_SAMPLE);
|
|
198
|
+
dropLog().debug({
|
|
199
|
+
totalSites,
|
|
200
|
+
filesAffected: byFile.size,
|
|
201
|
+
topFiles: kept.map(([filePath, sites]) => ({ filePath, sites })),
|
|
202
|
+
}, 'receiver-unresolved call sites by file (top offenders; a file far above its ' +
|
|
203
|
+
'siblings usually means its receivers were never typed, not that it has more calls)');
|
|
204
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DefinitionIdPosition {
|
|
2
|
+
readonly line: number;
|
|
3
|
+
readonly column: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Extract coordinates from `def:<filePath>#<line>:<column>:<type>:<name>`.
|
|
7
|
+
*
|
|
8
|
+
* File paths are embedded verbatim and may themselves contain fragments such
|
|
9
|
+
* as `#12:34:`, while names may themselves contain `#` (TypeScript private
|
|
10
|
+
* members). Anchor on the known file path so neither side can be mistaken for
|
|
11
|
+
* the declaration separator.
|
|
12
|
+
*/
|
|
13
|
+
export declare function definitionIdPosition(nodeId: string | undefined, filePath: string): DefinitionIdPosition | undefined;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract coordinates from `def:<filePath>#<line>:<column>:<type>:<name>`.
|
|
3
|
+
*
|
|
4
|
+
* File paths are embedded verbatim and may themselves contain fragments such
|
|
5
|
+
* as `#12:34:`, while names may themselves contain `#` (TypeScript private
|
|
6
|
+
* members). Anchor on the known file path so neither side can be mistaken for
|
|
7
|
+
* the declaration separator.
|
|
8
|
+
*/
|
|
9
|
+
export function definitionIdPosition(nodeId, filePath) {
|
|
10
|
+
if (nodeId === undefined)
|
|
11
|
+
return undefined;
|
|
12
|
+
const prefix = `def:${filePath}#`;
|
|
13
|
+
if (!nodeId.startsWith(prefix))
|
|
14
|
+
return undefined;
|
|
15
|
+
const match = /^(\d+):(\d+):/.exec(nodeId.slice(prefix.length));
|
|
16
|
+
if (match === null)
|
|
17
|
+
return undefined;
|
|
18
|
+
return { line: Number(match[1]), column: Number(match[2]) };
|
|
19
|
+
}
|