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
|
@@ -98,8 +98,96 @@ export type ParsedImport =
|
|
|
98
98
|
readonly importedName: string;
|
|
99
99
|
readonly targetRaw: string;
|
|
100
100
|
/** Provider-specific imported symbol category when module and symbol
|
|
101
|
-
* namespaces have distinct resolution rules (for example PHP).
|
|
101
|
+
* namespaces have distinct resolution rules (for example PHP).
|
|
102
|
+
*
|
|
103
|
+
* **Not** the same fact as {@link ParsedImport.typeOnly} — see the note
|
|
104
|
+
* on `typeOnly` below, which is documented on this variant. */
|
|
102
105
|
readonly importedSymbolKind?: 'type' | 'function' | 'const';
|
|
106
|
+
/**
|
|
107
|
+
* Is this import ERASED before the module ever runs?
|
|
108
|
+
*
|
|
109
|
+
* TypeScript `import type { X } from './m'` and `import { type X }` are
|
|
110
|
+
* deleted by `tsc`: no `require`/`import` for `./m` survives in the
|
|
111
|
+
* emitted JavaScript, so the pair cannot force a module-INITIALIZATION
|
|
112
|
+
* order and cannot participate in an init cycle. That is the one thing
|
|
113
|
+
* `check --cycles` exists to find, so the fact has to survive from the
|
|
114
|
+
* syntax down to the emitted `IMPORTS` edge — see `ImportEdge.typeOnly`
|
|
115
|
+
* and `graph-bridge/imports-to-edges.ts`.
|
|
116
|
+
*
|
|
117
|
+
* **Distinct from `importedSymbolKind: 'type'`, which is NOT a substitute.**
|
|
118
|
+
* That field is a resolution-NAMESPACE category (PHP's `use function` /
|
|
119
|
+
* `use const` split), it exists only on this variant, and it says "the
|
|
120
|
+
* thing imported is a type". A symbol being a type says nothing about
|
|
121
|
+
* whether the import STATEMENT is erased, and PHP erases nothing at all.
|
|
122
|
+
* This field is about the statement's runtime existence, not the symbol's
|
|
123
|
+
* category.
|
|
124
|
+
*
|
|
125
|
+
* Set only by providers whose syntax marks it. Absent everywhere else,
|
|
126
|
+
* which reads as "not erased" — the fail-safe direction, since it only
|
|
127
|
+
* makes `check --cycles` over-report.
|
|
128
|
+
*
|
|
129
|
+
* That fail-safe matters more than it first looks, because an explicit
|
|
130
|
+
* `type` is a SUFFICIENT signal of erasure and not a necessary one. With
|
|
131
|
+
* neither `verbatimModuleSyntax` nor `importsNotUsedAsValues: preserve`
|
|
132
|
+
* set — this repo sets neither — `tsc` also elides a plain
|
|
133
|
+
* `import { SomeInterface }` whose bindings are every one of them used in
|
|
134
|
+
* type position. Those statements are erased at run time and carry no
|
|
135
|
+
* marker, so they stay tagged as initializing and `check --cycles` can
|
|
136
|
+
* still report a cycle that cannot exist. Closing that gap needs
|
|
137
|
+
* whole-program binding USE information, not import syntax, which is why
|
|
138
|
+
* this field stops at what the syntax states.
|
|
139
|
+
*/
|
|
140
|
+
readonly typeOnly?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Was this import written inside a function body — so that it runs only
|
|
143
|
+
* when something CALLS that function, never while the module itself is
|
|
144
|
+
* initializing?
|
|
145
|
+
*
|
|
146
|
+
* Python's `def f(): from x import Y` and a CommonJS
|
|
147
|
+
* `function f() { const { Y } = require('./x'); }` are the spellings.
|
|
148
|
+
* Both are syntactically ordinary imports — no `kind` tells them apart
|
|
149
|
+
* from a top-level one, and nothing about the target does either. Only
|
|
150
|
+
* their POSITION defers them.
|
|
151
|
+
*
|
|
152
|
+
* Not every language's imports are like that, and the rule is wrong for
|
|
153
|
+
* the ones that are not: Rust's `use` and C/C++'s `#include` are legal
|
|
154
|
+
* in a function body and are deferred by NOTHING, because neither is an
|
|
155
|
+
* executed statement. Those providers opt out — see
|
|
156
|
+
* `LanguageProvider.importsExecuteWhereWritten`, below.
|
|
157
|
+
*
|
|
158
|
+
* **Why this cannot be re-derived downstream — the whole reason the
|
|
159
|
+
* field exists.** The natural place to decide it looks like the graph
|
|
160
|
+
* bridge, by walking the scope the finalized edges hang off; that is
|
|
161
|
+
* exactly what `graph-bridge/imports-to-edges.ts` once attempted, and it
|
|
162
|
+
* is dead code by construction. `finalize-algorithm.ts:295` publishes
|
|
163
|
+
* every file's finalized edges as
|
|
164
|
+
* `linkedByScope.set(file.moduleScope, …)`, so the map the bridge
|
|
165
|
+
* receives is keyed by the file's **Module** scope and by nothing else:
|
|
166
|
+
* the walk starts at a `Module` every time and answers `false` for every
|
|
167
|
+
* import in the tree. Finalize cannot recover the position either —
|
|
168
|
+
* `FinalizeFile.parsedImports` is a flat per-file `ParsedImport[]` with
|
|
169
|
+
* no scope attached. The extractor is the last stage that still knows
|
|
170
|
+
* where the statement sat (`scope-extractor.ts`, Pass 3), so it marks the
|
|
171
|
+
* fact here and it rides the edge from there — see
|
|
172
|
+
* {@link ImportEdge.runsOnlyWhenCalled}.
|
|
173
|
+
*
|
|
174
|
+
* Consumed by `check --cycles`, which asks "can these modules be
|
|
175
|
+
* initialized in any order?". A deferred import carries no
|
|
176
|
+
* initialization order, and deferring one is the standard way to BREAK
|
|
177
|
+
* an init cycle, so counting it reports the fix as the bug.
|
|
178
|
+
*
|
|
179
|
+
* Set by the central extractor for every language, not by providers —
|
|
180
|
+
* except that a provider may declare that its imports do not execute
|
|
181
|
+
* where they are written (`LanguageProvider.importsExecuteWhereWritten:
|
|
182
|
+
* false`) and be skipped entirely. C, C++, Rust and COBOL do. A `#include`
|
|
183
|
+
* or a `use` inside a function body is not deferred: the header is
|
|
184
|
+
* spliced and the path alias is resolved before anything runs, so the
|
|
185
|
+
* pair really is a dependency and the cycle it can form is real.
|
|
186
|
+
*
|
|
187
|
+
* Absent reads as "runs at initialization" — the fail-safe direction,
|
|
188
|
+
* since it only makes `check --cycles` over-report.
|
|
189
|
+
*/
|
|
190
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
103
191
|
/**
|
|
104
192
|
* Set by providers when `targetRaw` already names the imported symbol
|
|
105
193
|
* rather than only its containing module. Consumers that compose
|
|
@@ -107,6 +195,40 @@ export type ParsedImport =
|
|
|
107
195
|
* duplicating `importedName`.
|
|
108
196
|
*/
|
|
109
197
|
readonly targetIncludesImportedName?: boolean;
|
|
198
|
+
/**
|
|
199
|
+
* Set by providers whose import syntax *also* republishes the name from
|
|
200
|
+
* the importing module, so a third file can import it from there.
|
|
201
|
+
*
|
|
202
|
+
* Python has no dedicated re-export form: a module-level
|
|
203
|
+
* `from pkg.impl import X` binds `X` locally **and** publishes it as
|
|
204
|
+
* `pkg.X`, which is the standard way a package `__init__.py` declares
|
|
205
|
+
* its public surface. Languages with an explicit form (TS `export … from`,
|
|
206
|
+
* Rust `pub use`) emit `kind: 'reexport'` instead and leave this unset.
|
|
207
|
+
*
|
|
208
|
+
* **The flag must track actual republication, not syntax.** Only a
|
|
209
|
+
* module-level statement publishes: the same `from m import X` inside a
|
|
210
|
+
* `def` or `class` body binds locally and puts nothing in the module
|
|
211
|
+
* namespace, so flagging it fabricates a re-export of a name no importer
|
|
212
|
+
* can reach. `if` / `try` / `for` / `with` do not suppress it — Python
|
|
213
|
+
* has no block scope. A provider that cannot tell these apart at
|
|
214
|
+
* interpret time must carry the fact down from its capture emitter,
|
|
215
|
+
* where the syntax node is still available.
|
|
216
|
+
*
|
|
217
|
+
* **Why not `kind: 'reexport'`.** Not because that form drops the local
|
|
218
|
+
* binding — `materializeBindings` creates a module-scope `BindingRef`
|
|
219
|
+
* for every linked edge, re-export included. It is that `reexport`
|
|
220
|
+
* changes what the binding *is*: `origin` flips to `'reexport'`, which
|
|
221
|
+
* carries different evidence weight and `ORIGIN_PRIORITY`, and it
|
|
222
|
+
* misreports the parse-time syntax Python actually wrote. A flag adds
|
|
223
|
+
* the export-surface fact without restating the import as something the
|
|
224
|
+
* source does not say.
|
|
225
|
+
*
|
|
226
|
+
* Consumed by `buildReexportClosures` (`finalize-algorithm.ts`), which
|
|
227
|
+
* also documents how ambiguous duplicates of one published name are
|
|
228
|
+
* handled — the precedence rules that hold for an explicit re-export do
|
|
229
|
+
* not carry over.
|
|
230
|
+
*/
|
|
231
|
+
readonly reexportsName?: boolean;
|
|
110
232
|
}
|
|
111
233
|
/**
|
|
112
234
|
* Per-name import with rename.
|
|
@@ -123,8 +245,18 @@ export type ParsedImport =
|
|
|
123
245
|
readonly targetRaw: string;
|
|
124
246
|
/** See the same field on the `named` variant. */
|
|
125
247
|
readonly importedSymbolKind?: 'type' | 'function' | 'const';
|
|
248
|
+
/** See the same field on the `named` variant — including why it is not
|
|
249
|
+
* interchangeable with `importedSymbolKind`. Reaches this variant from
|
|
250
|
+
* `import type D from './m'` and `import { type X as Y } from './m'`. */
|
|
251
|
+
readonly typeOnly?: boolean;
|
|
252
|
+
/** See the same field on the `named` variant. Reaches this variant from
|
|
253
|
+
* Python's `def f(): from x import Y as Z` and a CommonJS
|
|
254
|
+
* `function f() { const { Y: Z } = require('./x'); }`. */
|
|
255
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
126
256
|
/** See the same field on the `named` variant. */
|
|
127
257
|
readonly targetIncludesImportedName?: boolean;
|
|
258
|
+
/** See the same field on the `named` variant. */
|
|
259
|
+
readonly reexportsName?: boolean;
|
|
128
260
|
}
|
|
129
261
|
/**
|
|
130
262
|
* Qualified module handle, with or without rename. `importedName` is the
|
|
@@ -144,6 +276,12 @@ export type ParsedImport =
|
|
|
144
276
|
/** Module being aliased (e.g. `numpy` in `import numpy as np`). */
|
|
145
277
|
readonly importedName: string;
|
|
146
278
|
readonly targetRaw: string;
|
|
279
|
+
/** See the same field on the `named` variant. Reaches this variant from
|
|
280
|
+
* TypeScript `import type * as N from './m'`. */
|
|
281
|
+
readonly typeOnly?: boolean;
|
|
282
|
+
/** See the same field on the `named` variant. Reaches this variant from
|
|
283
|
+
* Python's `def f(): import numpy as np`. */
|
|
284
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
147
285
|
}
|
|
148
286
|
/**
|
|
149
287
|
* Syntactically-detectable parse-time re-export. Finalize may still produce
|
|
@@ -165,6 +303,19 @@ export type ParsedImport =
|
|
|
165
303
|
readonly targetRaw: string;
|
|
166
304
|
/** Set when the re-export renames the symbol (e.g. `export { X as Y } from './y'`). */
|
|
167
305
|
readonly alias?: string;
|
|
306
|
+
/** See the same field on the `named` variant. Reaches this variant from
|
|
307
|
+
* TypeScript `export type { X } from './y'` and `export { type X } from './y'`. */
|
|
308
|
+
readonly typeOnly?: boolean;
|
|
309
|
+
/** See the same field on the `named` variant. NO spelling reaches this
|
|
310
|
+
* variant today: the two providers that emit `reexport` are TypeScript
|
|
311
|
+
* / JavaScript, whose `export … from` is a module-top-level-only
|
|
312
|
+
* declaration, and Rust, whose `pub use` is a compile-time path alias
|
|
313
|
+
* that its provider exempts from the position rule outright
|
|
314
|
+
* (`LanguageProvider.importsExecuteWhereWritten`). Kept because the
|
|
315
|
+
* extractor sets the field with no `switch` on `kind`, so a re-export
|
|
316
|
+
* form that IS an executed statement would be tagged the moment one
|
|
317
|
+
* appears — not because anything sets it now. */
|
|
318
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
168
319
|
}
|
|
169
320
|
/**
|
|
170
321
|
* Wildcard import — brings every exported name from the target module into
|
|
@@ -176,10 +327,26 @@ export type ParsedImport =
|
|
|
176
327
|
* - Python `from foo import *` → `{ kind: 'wildcard', targetRaw: 'foo' }`
|
|
177
328
|
* - JS `export * from './foo'` → `{ kind: 'wildcard', targetRaw: './foo' }`
|
|
178
329
|
* - Rust `pub use foo::*` → `{ kind: 'wildcard', targetRaw: 'foo' }`
|
|
330
|
+
*
|
|
331
|
+
* No `typeOnly` here on purpose. The one syntax that would set it,
|
|
332
|
+
* TypeScript 5.0's `export type * from './m'`, is not parsed by the
|
|
333
|
+
* vendored tree-sitter-typescript grammar — it yields an `ERROR` node
|
|
334
|
+
* holding the bare `type` token, so the fact is not readable at the
|
|
335
|
+
* statement level (see `typescript/import-decomposer.ts`). Add the field
|
|
336
|
+
* with the grammar that can express it, not before.
|
|
179
337
|
*/
|
|
180
338
|
| {
|
|
181
339
|
readonly kind: 'wildcard';
|
|
182
340
|
readonly targetRaw: string;
|
|
341
|
+
/** See the same field on the `named` variant. Present here although
|
|
342
|
+
* `typeOnly` is not: erasure is a syntactic fact this spelling cannot
|
|
343
|
+
* express, but POSITION is not — Ruby's `def f; require './m'; end` is
|
|
344
|
+
* a wildcard (everything in the required file becomes visible) and IS
|
|
345
|
+
* deferred. Python cannot reach it: `from x import *` inside a `def` is
|
|
346
|
+
* a SyntaxError. Rust's fn-local `use foo::*` is legal but not
|
|
347
|
+
* deferred — `use` does not execute
|
|
348
|
+
* (`LanguageProvider.importsExecuteWhereWritten`). */
|
|
349
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
183
350
|
}
|
|
184
351
|
/**
|
|
185
352
|
* Runtime-computed target — the import path is not a static literal at
|
|
@@ -196,6 +363,9 @@ export type ParsedImport =
|
|
|
196
363
|
readonly localName: string;
|
|
197
364
|
/** Source text of the unresolved expression when available; `null` otherwise. */
|
|
198
365
|
readonly targetRaw: string | null;
|
|
366
|
+
/** See the same field on the `named` variant. Set by position like every
|
|
367
|
+
* other variant; this kind links no target, so nothing reads it here. */
|
|
368
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
199
369
|
}
|
|
200
370
|
/**
|
|
201
371
|
* Lazy / dynamic import whose target IS a static string literal at parse
|
|
@@ -217,6 +387,10 @@ export type ParsedImport =
|
|
|
217
387
|
| {
|
|
218
388
|
readonly kind: 'dynamic-resolved';
|
|
219
389
|
readonly targetRaw: string;
|
|
390
|
+
/** See the same field on the `named` variant. Redundant on this kind —
|
|
391
|
+
* `import()` is already deferred wherever it is written — but set
|
|
392
|
+
* uniformly, because position is decided without consulting `kind`. */
|
|
393
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
220
394
|
}
|
|
221
395
|
/**
|
|
222
396
|
* Bare-source / side-effect import that introduces no local name binding
|
|
@@ -232,6 +406,10 @@ export type ParsedImport =
|
|
|
232
406
|
| {
|
|
233
407
|
readonly kind: 'side-effect';
|
|
234
408
|
readonly targetRaw: string;
|
|
409
|
+
/** See the same field on the `named` variant. Reaches this variant from
|
|
410
|
+
* a bare CommonJS `function f() { require('./polyfill'); }` — the ESM
|
|
411
|
+
* spelling `import './polyfill'` cannot, being top-level only. */
|
|
412
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
235
413
|
};
|
|
236
414
|
/**
|
|
237
415
|
* Provider-interpreted type binding. The provider's `interpretTypeBinding`
|
|
@@ -242,8 +420,24 @@ export type ParsedImport =
|
|
|
242
420
|
export interface ParsedTypeBinding {
|
|
243
421
|
/** The name being bound (parameter name, `self`, assignment LHS, …). */
|
|
244
422
|
readonly boundName: string;
|
|
245
|
-
/** The
|
|
423
|
+
/** The type name AFTER this provider's normalization (`'User'`,
|
|
424
|
+
* `'models.User'`, …) — see `TypeRef.rawName`. */
|
|
246
425
|
readonly rawTypeName: string;
|
|
426
|
+
/**
|
|
427
|
+
* Optional override for `TypeRef.declaredSpelling`, for a grammar that does
|
|
428
|
+
* not keep the whole written type under `@type-binding.type`.
|
|
429
|
+
*
|
|
430
|
+
* The scope extractor derives the spelling from that capture by default,
|
|
431
|
+
* which is right for every language whose type node spans the annotation.
|
|
432
|
+
* C++ is the exception: `User* repos` parses with the `*` on the DECLARATOR,
|
|
433
|
+
* so the type capture is a bare `User` and the container-ness the index step
|
|
434
|
+
* needs is nowhere in the captures the extractor reads. A provider that can
|
|
435
|
+
* reconstruct it exactly sets it here.
|
|
436
|
+
*
|
|
437
|
+
* Leave undefined otherwise — the extractor's derivation is preferred to a
|
|
438
|
+
* per-language reimplementation of it.
|
|
439
|
+
*/
|
|
440
|
+
readonly declaredSpelling?: string;
|
|
247
441
|
readonly source: TypeRef['source'];
|
|
248
442
|
}
|
|
249
443
|
/**
|
|
@@ -292,6 +486,37 @@ export interface ImportEdge {
|
|
|
292
486
|
readonly kind: 'named' | 'alias' | 'namespace' | 'wildcard-expanded' | 'reexport' | 'dynamic-unresolved' | 'dynamic-resolved' | 'side-effect';
|
|
293
487
|
/** Re-export chain, for provenance (e.g., `['./y']` when re-exported via `./y`). */
|
|
294
488
|
readonly transitiveVia?: readonly string[];
|
|
489
|
+
/**
|
|
490
|
+
* The import is erased before the module runs — see `ParsedImport`'s
|
|
491
|
+
* `typeOnly` on the `named` variant for the full note, including why
|
|
492
|
+
* `importedSymbolKind: 'type'` is a different fact and not a substitute.
|
|
493
|
+
*
|
|
494
|
+
* Carried straight from the `ParsedImport` by `makeEdgeDrafts`. The edge is
|
|
495
|
+
* still emitted: a type-only import is a real source-level dependency that
|
|
496
|
+
* `impact` and `trace` must see, and editing the target still breaks the
|
|
497
|
+
* importer's typecheck. What the flag removes is the claim that the pair
|
|
498
|
+
* forces an INITIALIZATION order.
|
|
499
|
+
*/
|
|
500
|
+
readonly typeOnly?: boolean;
|
|
501
|
+
/**
|
|
502
|
+
* The import was written inside a function body, so it runs only when that
|
|
503
|
+
* function is called — never during module initialization. See
|
|
504
|
+
* `ParsedImport`'s `runsOnlyWhenCalled` on the `named` variant for the full
|
|
505
|
+
* note, including why the consumer cannot re-derive this from the scope tree
|
|
506
|
+
* and therefore has to be told (`finalize-algorithm.ts:295`).
|
|
507
|
+
*
|
|
508
|
+
* Carried straight from the `ParsedImport` by `makeEdgeDrafts`, for the same
|
|
509
|
+
* reason `typeOnly` is: the edge is where `graph-bridge/imports-to-edges.ts`
|
|
510
|
+
* can still see it. The edge is still emitted either way — a deferred import
|
|
511
|
+
* is a real dependency. What the flag removes is the claim that the pair
|
|
512
|
+
* forces an INITIALIZATION order.
|
|
513
|
+
*
|
|
514
|
+
* Distinct from `kind === 'dynamic-resolved'`, which records the OTHER way an
|
|
515
|
+
* import can be deferred (`import('./m')`). Neither implies the other: a
|
|
516
|
+
* top-level `import()` is deferred with this flag unset, and a function-local
|
|
517
|
+
* `from x import Y` is deferred with an ordinary `named` kind.
|
|
518
|
+
*/
|
|
519
|
+
readonly runsOnlyWhenCalled?: boolean;
|
|
295
520
|
/** Set to `'unresolved'` when the SCC fixpoint could not link this edge. */
|
|
296
521
|
readonly linkStatus?: 'unresolved';
|
|
297
522
|
}
|
|
@@ -308,6 +533,11 @@ export interface BindingRef {
|
|
|
308
533
|
readonly origin: 'local' | 'import' | 'namespace' | 'wildcard' | 'reexport';
|
|
309
534
|
/** Non-null for non-local origins; carries the `ImportEdge` that brought the name into this scope. */
|
|
310
535
|
readonly via?: ImportEdge;
|
|
536
|
+
/**
|
|
537
|
+
* Optional semantic visibility evidence supplied by a language hook.
|
|
538
|
+
* Shared resolution consumes this without inspecting language syntax.
|
|
539
|
+
*/
|
|
540
|
+
readonly visibility?: 'static-member-import';
|
|
311
541
|
}
|
|
312
542
|
/**
|
|
313
543
|
* A reference to a named type, anchored at its declaration site.
|
|
@@ -319,8 +549,36 @@ export interface BindingRef {
|
|
|
319
549
|
* re-exports, and nested modules. Generics deferred to V2 via `typeArgs`.
|
|
320
550
|
*/
|
|
321
551
|
export interface TypeRef {
|
|
322
|
-
/**
|
|
552
|
+
/**
|
|
553
|
+
* The type name AFTER the language's capture-time normalization — NOT
|
|
554
|
+
* necessarily what the source says. Every provider's `interpretTypeBinding`
|
|
555
|
+
* reduces the annotation before it gets here: TypeScript runs
|
|
556
|
+
* `stripGeneric` + `stripArraySuffix` to a FIXED POINT (`User[][]` → `User`),
|
|
557
|
+
* Go's `normalizeGoTypeName` drops `[]` and `map[K]`, C#/Python/Kotlin/Rust
|
|
558
|
+
* strip their single-arg collection wrappers. What survives is the name a
|
|
559
|
+
* class lookup can use (`'User'`, `'models.User'`, `'List'`).
|
|
560
|
+
*
|
|
561
|
+
* A consumer that needs the CONTAINER, not the element, must read
|
|
562
|
+
* `declaredSpelling` — see below.
|
|
563
|
+
*/
|
|
323
564
|
readonly rawName: string;
|
|
565
|
+
/**
|
|
566
|
+
* The annotation exactly as written, kept ONLY when `rawName` is not it.
|
|
567
|
+
*
|
|
568
|
+
* `rawName` alone cannot distinguish `repos: User[]` (a container the capture
|
|
569
|
+
* layer already reduced, so the position IS the element) from `grid: Grid`
|
|
570
|
+
* (an ordinary class the source happened to subscript). Both arrive as a bare
|
|
571
|
+
* class name that resolves. An index step reading only `rawName` therefore had
|
|
572
|
+
* no choice but to guess, and guessing "already reduced" typed `grid[0]` as
|
|
573
|
+
* `Grid` — a confidently WRONG owner for the next member.
|
|
574
|
+
*
|
|
575
|
+
* Absent when the provider's normalization was a no-op (nothing was lost, so
|
|
576
|
+
* `rawName` is already the written spelling), and absent for TypeRefs
|
|
577
|
+
* synthesized outside the capture path (a `this` receiver binding, a
|
|
578
|
+
* propagated return type). Consumers must treat absence as "no container
|
|
579
|
+
* evidence" and decline, never as "not a container".
|
|
580
|
+
*/
|
|
581
|
+
readonly declaredSpelling?: string;
|
|
324
582
|
/** Anchor for resolving `rawName` — the scope where the annotation/inference was written. */
|
|
325
583
|
readonly declaredAtScope: ScopeId;
|
|
326
584
|
readonly source: 'annotation' | 'parameter-annotation' | 'return-annotation' | 'self' | 'assignment-inferred' | 'constructor-inferred' | 'receiver-propagated';
|
|
@@ -349,6 +607,23 @@ export interface Scope {
|
|
|
349
607
|
readonly imports: readonly ImportEdge[];
|
|
350
608
|
/** Local type facts visible from this scope (parameter annotations, `self` binding, etc.). */
|
|
351
609
|
readonly typeBindings: ReadonlyMap<string, TypeRef>;
|
|
610
|
+
/** Lexically bound names that may have no definition or type fact of their
|
|
611
|
+
* own (for example, an untyped function parameter). Consumers use this only
|
|
612
|
+
* as a shadowing barrier; it never resolves a symbol by itself. */
|
|
613
|
+
readonly lexicalNames?: ReadonlySet<string>;
|
|
614
|
+
/** Receiver names this scope BINDS rather than inherits — `this`, `self`, … (#2701).
|
|
615
|
+
*
|
|
616
|
+
* A receiver walk (`findReceiverTypeBinding`) that reaches such a scope
|
|
617
|
+
* without finding the name in `typeBindings` stops here and reports the
|
|
618
|
+
* receiver unresolved, instead of continuing up and borrowing an enclosing
|
|
619
|
+
* scope's binding. In JavaScript/TypeScript an ordinary `function` binds its
|
|
620
|
+
* own `this` (ECMA-262 `[[ThisMode]]`) while an arrow inherits one, so
|
|
621
|
+
* `this.m()` inside a nested `function` must NOT reach the enclosing class.
|
|
622
|
+
*
|
|
623
|
+
* Left unset by every language whose closures capture the receiver
|
|
624
|
+
* lexically, which is nearly all of them — the walk is unchanged there.
|
|
625
|
+
* Populated from `LanguageProvider.scopeOwnsReceivers`. */
|
|
626
|
+
readonly ownsReceivers?: ReadonlySet<string>;
|
|
352
627
|
}
|
|
353
628
|
/**
|
|
354
629
|
* One piece of evidence for a `Resolution`. Multiple signals corroborate a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,4FAA4F;AAC5F,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,YAAY,GACZ,QAAQ,CAAC;AAIb,qFAAqF;AACrF,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAI7D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY;AACtB;;;;;;;GAOG;AACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,4FAA4F;AAC5F,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,YAAY,GACZ,QAAQ,CAAC;AAIb,qFAAqF;AACrF,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAI7D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY;AACtB;;;;;;;GAOG;AACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;mEAI+D;IAC/D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AACH;;;;;;GAMG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5D;;8EAE0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;+DAE2D;IAC3D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AACH;;;;;;;;;;GAUG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;sDACkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;kDAC8C;IAC9C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AACH;;;;;;;;;;GAUG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;wFACoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;sDAQkD;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AACH;;;;;;;;;;;;;;;;;GAiBG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;;2DAOuD;IACvD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AACH;;;;;;;;;GASG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;8EAC0E;IAC1E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AACH;;;;;;;;;;;;;;;;GAgBG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;4EAEwE;IACxE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AACH;;;;;;;;;;GAUG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;uEAEmE;IACnE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEN;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;uDACmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;AAMrC;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;CAC1C;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;iEAC6D;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAID;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,IAAI,EACT,OAAO,GACP,OAAO,GACP,WAAW,GACX,mBAAmB,GACnB,UAAU,GACV,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,CAAC;IAClB,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;CACpC;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5E,sGAAsG;IACtG,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;CAC9C;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EACX,YAAY,GACZ,sBAAsB,GACtB,mBAAmB,GACnB,MAAM,GACN,qBAAqB,GACrB,sBAAsB,GACtB,qBAAqB,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACxC;AAID;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAE9D,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAEhD;;kDAE8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAExC,8FAA8F;IAC9F,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpD;;uEAEmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE5C;;;;;;;;;;;gEAW4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAID;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EACT,OAAO,GACP,aAAa,GACb,QAAQ,GACR,cAAc,GACd,aAAa,GACb,YAAY,GACZ,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,2BAA2B,CAAC;IAChC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACjD,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACpC;AAID;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,IAAI,EACT,MAAM,GACN,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;IACZ,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC;CAChE;AAID;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7C,wDAAwD;IACxD,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5D,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;gFAE4E;IAC5E,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD"}
|
package/dist/cli/ai-context.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* AGENTS.md is the standard read by Cursor, Windsurf, OpenCode, Codex, Cline, CodeBuddy, Qoder, etc.
|
|
6
6
|
* CLAUDE.md is for Claude Code which only reads that file.
|
|
7
7
|
*/
|
|
8
|
-
import { type GeneratedSkillInfo } from './skill
|
|
8
|
+
import { type GeneratedSkillInfo } from './generated-skill.js';
|
|
9
9
|
interface RepoStats {
|
|
10
10
|
files?: number;
|
|
11
11
|
nodes?: number;
|
|
@@ -47,7 +47,8 @@ export interface GitNexusContentOptions {
|
|
|
47
47
|
skipSkills?: boolean;
|
|
48
48
|
/** Project-relative path to the runner `gitnexus analyze` drops next to the
|
|
49
49
|
* index (#1945). Referenced by docs so a single CLI-neutral command resolves
|
|
50
|
-
* the available runner (global `gitnexus` → `pnpm dlx` → `npx`) at
|
|
50
|
+
* the available runner (global `gitnexus` → `pnpm dlx` → `bunx` → `npx`) at
|
|
51
|
+
* call time. */
|
|
51
52
|
runnerPath?: string;
|
|
52
53
|
/** Default branch for the regression-compare example (#243). Configurable so
|
|
53
54
|
* projects on `develop`/`master`/etc. don't get `base_ref: "main"` rewritten
|
package/dist/cli/ai-context.js
CHANGED
|
@@ -82,7 +82,11 @@ export function generateGitNexusContent(projectName, stats, opts = {}) {
|
|
|
82
82
|
const { generatedSkills, groupNames, noStats, skipSkills, runnerPath = '.gitnexus/run.cjs', defaultBranch = 'main', hasPdg = false, } = opts;
|
|
83
83
|
const generatedRows = generatedSkills && generatedSkills.length > 0
|
|
84
84
|
? generatedSkills
|
|
85
|
-
.map((s) =>
|
|
85
|
+
.map((s) =>
|
|
86
|
+
// The per-cluster count is as volatile as the header parenthetical,
|
|
87
|
+
// so --no-stats drops it too (#2907) — otherwise the flag that
|
|
88
|
+
// promises "omit volatile symbol counts" left a churning one behind.
|
|
89
|
+
`| Work in the ${s.label} area${noStats ? '' : ` (${s.symbolCount} symbols)`} | \`.claude/skills/${s.name}/SKILL.md\` |`)
|
|
86
90
|
.join('\n')
|
|
87
91
|
: '';
|
|
88
92
|
// Standard skill rows reference files installed by installSkills(). When
|
|
@@ -98,7 +102,7 @@ export function generateGitNexusContent(projectName, stats, opts = {}) {
|
|
|
98
102
|
const tableBody = [standardSkillsRows, generatedRows].filter(Boolean).join('\n');
|
|
99
103
|
const skillsTable = tableBody
|
|
100
104
|
? `| Task | Read this skill file |
|
|
101
|
-
|
|
105
|
+
| --- | --- |
|
|
102
106
|
${tableBody}`
|
|
103
107
|
: '';
|
|
104
108
|
// Docs reference the project-local runner `gitnexus analyze` writes (#1945):
|
|
@@ -107,22 +111,40 @@ ${tableBody}`
|
|
|
107
111
|
// stay under the CLAUDE.md block token budget (#856); the cli skill carries the
|
|
108
112
|
// full bootstrap + npm-11 fallback (`node.target is null` npx install crash).
|
|
109
113
|
const runner = `node ${runnerPath}`;
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
// Bootstrap names every install-free one-shot rather than the one this machine
|
|
115
|
+
// resolves to: the block is committed, so a host-specific command would make
|
|
116
|
+
// two contributors on different package managers rewrite it at each other on
|
|
117
|
+
// every analyze (the per-machine churn of #1706). `bunx` is listed because a
|
|
118
|
+
// bun-only machine has no npm, npx or pnpm at all, and the npx-only note left
|
|
119
|
+
// it with a bootstrap command it could not run.
|
|
120
|
+
const bootstrapNote = `No \`${runnerPath}\` yet? Bootstrap with \`npx\`, \`bunx\`, or \`pnpm dlx\` — ` +
|
|
121
|
+
'e.g. `bunx gitnexus@latest analyze` (npm 11 npx crash; #1939).';
|
|
122
|
+
// This block is injected into every user's repo and its total size is capped
|
|
123
|
+
// by test (ai-context.test.ts, #856) — a new bullet or clause has to be paid
|
|
124
|
+
// for by trimming an existing one.
|
|
125
|
+
//
|
|
126
|
+
// The detect_changes bullet carries the degraded-result rule (#2915): a run
|
|
127
|
+
// that sets `partial` (a graph query failed) or `truncated` (the changed-symbol
|
|
128
|
+
// listing was capped) is not the pre-commit gate passing, and `partial` pairs
|
|
129
|
+
// routinely with changed_count:0 — the exact shape that printed "No changes
|
|
130
|
+
// detected." and exited 0 on a broken analysis. Same reasoning as the
|
|
131
|
+
// `risk: UNKNOWN` bullet below: the tool could not answer, so its zero is not
|
|
132
|
+
// an all-clear.
|
|
112
133
|
return `${GITNEXUS_START_MARKER}
|
|
113
134
|
# GitNexus — Code Intelligence
|
|
114
135
|
|
|
115
|
-
This project is indexed by GitNexus as **${projectName}**${noStats ? '' : ` (${stats.nodes || 0} symbols, ${stats.edges || 0} relationships, ${stats.processes || 0} execution flows)`}.
|
|
136
|
+
This project is indexed by GitNexus as **${projectName}**${noStats ? '' : ` (${stats.nodes || 0} symbols, ${stats.edges || 0} relationships, ${stats.processes || 0} execution flows)`}.
|
|
116
137
|
|
|
117
|
-
> Index stale? Run \`${runner} analyze\` from the project root — it auto-selects an available runner. ${bootstrapNote}
|
|
138
|
+
> Index stale? Run \`${runner} analyze --index-only\` from the project root — it auto-selects an available runner. ${bootstrapNote}
|
|
118
139
|
|
|
119
140
|
## Always Do
|
|
120
141
|
|
|
121
|
-
- **MUST run impact analysis before editing
|
|
122
|
-
? ` For unified PDG impact, add \`mode: "pdg"\` with optional \`line: <N>\` — it returns statement-level \`affectedStatements\` over CDG + REACHING_DEF and inter-procedural symbols in \`interproceduralByDepth\`/\`byDepth\`; no-layer/degraded PDG results are UNKNOWN-risk notes (\`--pdg\` layer)
|
|
142
|
+
- **MUST run impact analysis before editing.** Use \`impact({target: "symbolName", direction: "upstream"})\` (MCP) or \`${runner} impact "symbolName" --direction upstream --repo .\` (CLI fallback); report callers, processes, and risk. Never substitute grep for graph analysis.${hasPdg
|
|
143
|
+
? ` For unified PDG impact, add \`mode: "pdg"\` with optional \`line: <N>\` — it returns statement-level \`affectedStatements\` over CDG + REACHING_DEF and inter-procedural symbols in \`interproceduralByDepth\`/\`byDepth\`; no-layer/degraded PDG results are UNKNOWN-risk notes (\`--pdg\` layer). CLI equivalent: \`${runner} impact "symbolName" --direction upstream --mode pdg --line <N> --repo .\`.`
|
|
123
144
|
: ''}
|
|
124
|
-
- **MUST
|
|
145
|
+
- **MUST analyze graph changes before committing.** Use \`detect_changes({scope: "all"})\` (MCP) or \`${runner} detect-changes --scope all --repo .\` (CLI fallback). \`partial: true\` or \`truncated: true\` is not a clean check — a zero means unseen, not unaffected; re-run it. For regression review: \`detect_changes({scope: "compare", base_ref: ${JSON.stringify(markdownSafeBranch(defaultBranch))}})\` or \`${runner} detect-changes --scope compare --base-ref ${JSON.stringify(markdownSafeBranch(defaultBranch))} --repo .\`.
|
|
125
146
|
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
|
|
147
|
+
- **MUST treat \`risk: UNKNOWN\` as unresolved, not as low.** An empty caller set is not evidence the symbol is unused — it can also mean the callers are not resolvable by the index (plain-object property access, dynamic dispatch, cross-language calls). \`impact\` pairs \`UNKNOWN\` with a \`riskNote\` saying so. Confirm with a text search before treating the symbol as safe to change or delete; do not proceed on the strength of a zero.
|
|
126
148
|
- When exploring unfamiliar code, use \`query({search_query: "concept"})\` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
|
|
127
149
|
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use \`context({name: "symbolName"})\`.
|
|
128
150
|
- For security review, \`explain({target: "fileOrSymbol"})\` lists taint findings (source→sink flows; needs \`analyze --pdg\`).${hasPdg
|
|
@@ -131,15 +153,15 @@ This project is indexed by GitNexus as **${projectName}**${noStats ? '' : ` (${s
|
|
|
131
153
|
|
|
132
154
|
## Never Do
|
|
133
155
|
|
|
134
|
-
- NEVER edit a function, class, or method
|
|
135
|
-
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
|
|
156
|
+
- NEVER edit a function, class, or method before MCP/CLI impact analysis.
|
|
157
|
+
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis, and never read \`UNKNOWN\` as an all-clear — it means the walk could not answer, which is the one verdict that requires confirming by other means.
|
|
136
158
|
- NEVER rename symbols with find-and-replace — use \`rename\` which understands the call graph.
|
|
137
|
-
- NEVER commit
|
|
159
|
+
- NEVER commit before MCP/CLI graph change analysis.
|
|
138
160
|
|
|
139
161
|
## Resources
|
|
140
162
|
|
|
141
163
|
| Resource | Use for |
|
|
142
|
-
|
|
164
|
+
| --- | --- |
|
|
143
165
|
| \`gitnexus://repo/${projectName}/context\` | Codebase overview, check index freshness |
|
|
144
166
|
| \`gitnexus://repo/${projectName}/clusters\` | All functional areas |
|
|
145
167
|
| \`gitnexus://repo/${projectName}/processes\` | All execution flows |
|
|
@@ -171,16 +193,40 @@ async function fileExists(filePath) {
|
|
|
171
193
|
return false;
|
|
172
194
|
}
|
|
173
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Replace the block's volatile counts — the header parenthetical and the
|
|
198
|
+
* per-cluster symbol counts in the skills table — with fixed placeholders, so
|
|
199
|
+
* two renderings that differ only in those numbers compare equal.
|
|
200
|
+
*
|
|
201
|
+
* Placeholders rather than deletions: `--no-stats` REMOVES the parenthetical,
|
|
202
|
+
* which must still be written through. Deleting instead of substituting would
|
|
203
|
+
* make a with-counts block and a without-counts block compare equal, and the
|
|
204
|
+
* flag would silently stop taking effect on an already-injected file.
|
|
205
|
+
*/
|
|
206
|
+
function stripVolatileCounts(section) {
|
|
207
|
+
return section
|
|
208
|
+
.replace(/ \(\d+ symbols, \d+ relationships, \d+ execution flows\)/g, ' (<counts>)')
|
|
209
|
+
.replace(/ \(\d+ symbols\)/g, ' (<count>)');
|
|
210
|
+
}
|
|
174
211
|
/**
|
|
175
212
|
* Create or update GitNexus section in a file
|
|
176
213
|
* - If file doesn't exist: create with GitNexus content
|
|
177
214
|
* - If file exists without GitNexus section: append
|
|
178
|
-
* - If file exists with GitNexus section: replace that section
|
|
215
|
+
* - If file exists with GitNexus section: replace that section, UNLESS the only
|
|
216
|
+
* delta is the volatile counts (#2907). AGENTS.md and CLAUDE.md are the agent
|
|
217
|
+
* guides teams commit, and the counts move with any code change, so a
|
|
218
|
+
* count-only rewrite dirties a tracked file on every reindex for no reader
|
|
219
|
+
* benefit. Live counts stay available from `gitnexus status` and
|
|
220
|
+
* `gitnexus://repo/{name}/context`; the committed block keeps whichever
|
|
221
|
+
* numbers it was last materially updated with.
|
|
179
222
|
*/
|
|
180
223
|
async function upsertGitNexusSection(filePath, content, projectName, stats, noStats) {
|
|
181
224
|
const exists = await fileExists(filePath);
|
|
182
225
|
if (!exists) {
|
|
183
|
-
|
|
226
|
+
// Same `.trim() + '\n'` shape the update paths write. Creating without the
|
|
227
|
+
// trailing newline made the NEXT analyze dirty a freshly committed file
|
|
228
|
+
// even at unchanged counts, purely to append it (#2907).
|
|
229
|
+
await fs.writeFile(filePath, content.trim() + '\n', 'utf-8');
|
|
184
230
|
return 'created';
|
|
185
231
|
}
|
|
186
232
|
const existingContent = await fs.readFile(filePath, 'utf-8');
|
|
@@ -228,6 +274,11 @@ async function upsertGitNexusSection(filePath, content, projectName, stats, noSt
|
|
|
228
274
|
const statsPattern = /^(?:Indexed as|indexed by GitNexus as) \*\*[^*]+\*\*(?: \([^)]+\))?/m;
|
|
229
275
|
if (statsPattern.test(existingSection)) {
|
|
230
276
|
const updatedSection = existingSection.replace(statsPattern, statsLine);
|
|
277
|
+
// Count-only delta — leave the committed lean block alone (#2907). A
|
|
278
|
+
// project rename, or --no-stats dropping the parenthetical, still writes.
|
|
279
|
+
if (stripVolatileCounts(updatedSection) === stripVolatileCounts(existingSection)) {
|
|
280
|
+
return 'preserved';
|
|
281
|
+
}
|
|
231
282
|
const before = existingContent.substring(0, startIdx);
|
|
232
283
|
const after = existingContent.substring(endIdx + GITNEXUS_END_MARKER.length);
|
|
233
284
|
await fs.writeFile(filePath, (before + updatedSection + after).trim() + '\n', 'utf-8');
|
|
@@ -238,7 +289,11 @@ async function upsertGitNexusSection(filePath, content, projectName, stats, noSt
|
|
|
238
289
|
// don't mis-report this as 'updated' (which would imply a write).
|
|
239
290
|
return 'preserved';
|
|
240
291
|
}
|
|
241
|
-
// No keep marker — replace existing section with full verbose content
|
|
292
|
+
// No keep marker — replace existing section with full verbose content,
|
|
293
|
+
// unless the counts are the only thing that moved (#2907).
|
|
294
|
+
if (stripVolatileCounts(existingSection) === stripVolatileCounts(content)) {
|
|
295
|
+
return 'preserved';
|
|
296
|
+
}
|
|
242
297
|
const before = existingContent.substring(0, startIdx);
|
|
243
298
|
const after = existingContent.substring(endIdx + GITNEXUS_END_MARKER.length);
|
|
244
299
|
const newContent = before + content + after;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* documented precedence). Conflicting *aliases at the same level* (e.g. both
|
|
28
28
|
* `defaultBranch` and `branch`) are rejected.
|
|
29
29
|
*/
|
|
30
|
-
import type { AnalyzeOptions } from './analyze.js';
|
|
30
|
+
import type { AnalyzeOptions } from './analyze-options.js';
|
|
31
31
|
export declare const GITNEXUS_RC_FILENAME = ".gitnexusrc";
|
|
32
32
|
/** Final fallback when no branch is configured or detectable. */
|
|
33
33
|
export declare const DEFAULT_BRANCH_FALLBACK = "main";
|