gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +3 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +27 -8
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +222 -3
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +44 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +232 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +99 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +288 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +109 -24
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +17 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -41,11 +41,15 @@ async function findRepoForCwd(cwd) {
|
|
|
41
41
|
if (normalizedCwd === normalizedRepo) {
|
|
42
42
|
matched = true;
|
|
43
43
|
}
|
|
44
|
-
else
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
else {
|
|
45
|
+
const repoPrefix = normalizedRepo.endsWith(sep) ? normalizedRepo : normalizedRepo + sep;
|
|
46
|
+
const cwdPrefix = normalizedCwd.endsWith(sep) ? normalizedCwd : normalizedCwd + sep;
|
|
47
|
+
if (normalizedCwd.startsWith(repoPrefix)) {
|
|
48
|
+
matched = true;
|
|
49
|
+
}
|
|
50
|
+
else if (normalizedRepo.startsWith(cwdPrefix)) {
|
|
51
|
+
matched = true;
|
|
52
|
+
}
|
|
49
53
|
}
|
|
50
54
|
if (matched && normalizedRepo.length > bestLen) {
|
|
51
55
|
bestMatch = entry;
|
|
@@ -104,6 +108,7 @@ export async function augment(pattern, cwd) {
|
|
|
104
108
|
MATCH (n) WHERE n.filePath = '${escaped}'
|
|
105
109
|
AND n.name CONTAINS '${patternFirstWord}'
|
|
106
110
|
RETURN n.id AS id, n.name AS name, labels(n)[0] AS type, n.filePath AS filePath
|
|
111
|
+
ORDER BY id
|
|
107
112
|
LIMIT 3
|
|
108
113
|
`);
|
|
109
114
|
for (const sym of symbols) {
|
|
@@ -127,6 +132,7 @@ export async function augment(pattern, cwd) {
|
|
|
127
132
|
MATCH (n)
|
|
128
133
|
WHERE n.name CONTAINS '${patternFirstWord}'
|
|
129
134
|
RETURN n.id AS id, n.name AS name, labels(n)[0] AS type, n.filePath AS filePath
|
|
135
|
+
ORDER BY id
|
|
130
136
|
LIMIT 5
|
|
131
137
|
`).catch(() => []);
|
|
132
138
|
for (const sym of fallbackRows) {
|
|
@@ -149,99 +155,112 @@ export async function augment(pattern, cwd) {
|
|
|
149
155
|
if (uniqueSymbols.length === 0)
|
|
150
156
|
return '';
|
|
151
157
|
const idList = uniqueSymbols.map((s) => `'${escapeCypherString(s.nodeId)}'`).join(', ');
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
/* skip */
|
|
173
|
-
}
|
|
174
|
-
// Batch fetch callees
|
|
175
|
-
const calleesMap = new Map();
|
|
176
|
-
try {
|
|
158
|
+
// Callers/callees are windowed PER SYMBOL, not out of one shared budget.
|
|
159
|
+
// A single `n.id IN [...] ... ORDER BY targetId LIMIT 15` sorts by the very
|
|
160
|
+
// column the rows are grouped by, which turns the cap into a single-bucket
|
|
161
|
+
// prefix: the alphabetically-first target takes every row (the hottest
|
|
162
|
+
// symbol in this repo's own index has 2163 callers) and the other four
|
|
163
|
+
// render with no callers at all. Raising the cap does not bound that, and
|
|
164
|
+
// ordering caller-major only moves the bucket. A per-target window is not
|
|
165
|
+
// expressible in one statement either — LadybugDB does not preserve a
|
|
166
|
+
// per-branch ORDER BY through UNION ALL — so fan out one bounded query per
|
|
167
|
+
// symbol (#2787).
|
|
168
|
+
//
|
|
169
|
+
// `id STARTS WITH 'File:'` sorts container nodes last: node ids are
|
|
170
|
+
// `Label:path:name`, so a bare `ORDER BY id` puts `File:` ahead of
|
|
171
|
+
// `Function:`/`Method:` and the "Called by" line renders bare filenames
|
|
172
|
+
// instead of the calling symbols the hint exists to name.
|
|
173
|
+
const NEIGHBOUR_CAP = 3;
|
|
174
|
+
const neighbourNames = async (nodeId, incoming) => {
|
|
175
|
+
const edge = incoming
|
|
176
|
+
? `(other)-[:CodeRelation {type: 'CALLS'}]->(n)`
|
|
177
|
+
: `(n)-[:CodeRelation {type: 'CALLS'}]->(other)`;
|
|
177
178
|
const rows = await executeQuery(repoId, `
|
|
178
|
-
MATCH
|
|
179
|
-
WHERE n.id
|
|
180
|
-
RETURN
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
MATCH ${edge}
|
|
180
|
+
WHERE n.id = '${escapeCypherString(nodeId)}'
|
|
181
|
+
RETURN other.name AS name
|
|
182
|
+
ORDER BY other.id STARTS WITH 'File:', other.id
|
|
183
|
+
LIMIT ${NEIGHBOUR_CAP}
|
|
184
|
+
`).catch(() => []);
|
|
185
|
+
const names = [];
|
|
183
186
|
for (const r of rows) {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (!calleesMap.has(sid))
|
|
188
|
-
calleesMap.set(sid, []);
|
|
189
|
-
calleesMap.get(sid).push(name);
|
|
190
|
-
}
|
|
187
|
+
const name = r.name || r[0];
|
|
188
|
+
if (name)
|
|
189
|
+
names.push(name);
|
|
191
190
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
return names;
|
|
192
|
+
};
|
|
193
|
+
// Keyed by nodeId, like the process/cohesion enrichments below — positional
|
|
194
|
+
// arrays would put two lookup disciplines in one object literal and make
|
|
195
|
+
// "stays index-aligned with uniqueSymbols" an unenforced invariant.
|
|
196
|
+
const neighbourMap = async (incoming) => new Map(await Promise.all(uniqueSymbols.map(async (s) => [s.nodeId, await neighbourNames(s.nodeId, incoming)])));
|
|
196
197
|
// Batch fetch processes
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
const fetchProcesses = async () => {
|
|
199
|
+
const byNode = new Map();
|
|
200
|
+
try {
|
|
201
|
+
const rows = await executeQuery(repoId, `
|
|
200
202
|
MATCH (n)-[r:CodeRelation {type: 'STEP_IN_PROCESS'}]->(p:Process)
|
|
201
203
|
WHERE n.id IN [${idList}]
|
|
202
204
|
RETURN n.id AS nodeId, p.heuristicLabel AS label, r.step AS step, p.stepCount AS stepCount
|
|
203
205
|
`);
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
206
|
+
for (const r of rows) {
|
|
207
|
+
const nid = r.nodeId || r[0];
|
|
208
|
+
const label = r.label || r[1];
|
|
209
|
+
const step = r.step || r[2];
|
|
210
|
+
const stepCount = r.stepCount || r[3];
|
|
211
|
+
if (nid && label) {
|
|
212
|
+
if (!byNode.has(nid))
|
|
213
|
+
byNode.set(nid, []);
|
|
214
|
+
byNode.get(nid).push(`${label} (step ${step}/${stepCount})`);
|
|
215
|
+
}
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
218
|
+
catch {
|
|
219
|
+
/* skip */
|
|
220
|
+
}
|
|
221
|
+
return byNode;
|
|
222
|
+
};
|
|
219
223
|
// Batch fetch cohesion
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
224
|
+
const fetchCohesion = async () => {
|
|
225
|
+
const byNode = new Map();
|
|
226
|
+
try {
|
|
227
|
+
const rows = await executeQuery(repoId, `
|
|
223
228
|
MATCH (n)-[:CodeRelation {type: 'MEMBER_OF'}]->(c:Community)
|
|
224
229
|
WHERE n.id IN [${idList}]
|
|
225
230
|
RETURN n.id AS nodeId, c.cohesion AS cohesion
|
|
226
231
|
`);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
+
for (const r of rows) {
|
|
233
|
+
const nid = r.nodeId || r[0];
|
|
234
|
+
const coh = r.cohesion ?? r[1] ?? 0;
|
|
235
|
+
if (nid)
|
|
236
|
+
byNode.set(nid, coh);
|
|
237
|
+
}
|
|
232
238
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
239
|
+
catch {
|
|
240
|
+
/* skip */
|
|
241
|
+
}
|
|
242
|
+
return byNode;
|
|
243
|
+
};
|
|
244
|
+
// One wave, not three. `augment` runs from the Claude Code PreToolUse hook
|
|
245
|
+
// in a cold process against a <500ms budget, so nothing amortizes — and the
|
|
246
|
+
// process/cohesion queries depend only on `idList`, never on the neighbour
|
|
247
|
+
// results, so serializing them behind the fan-out bought nothing. Each query
|
|
248
|
+
// keeps its own try/catch, so one failing still degrades to an empty map
|
|
249
|
+
// instead of taking the others down.
|
|
250
|
+
const [callerMap, calleeMap, processesMap, cohesionMap] = await Promise.all([
|
|
251
|
+
neighbourMap(true),
|
|
252
|
+
neighbourMap(false),
|
|
253
|
+
fetchProcesses(),
|
|
254
|
+
fetchCohesion(),
|
|
255
|
+
]);
|
|
237
256
|
// Assemble enriched results
|
|
238
257
|
const enriched = [];
|
|
239
258
|
for (const sym of uniqueSymbols) {
|
|
240
259
|
enriched.push({
|
|
241
260
|
name: sym.name,
|
|
242
261
|
filePath: sym.filePath,
|
|
243
|
-
callers:
|
|
244
|
-
callees:
|
|
262
|
+
callers: callerMap.get(sym.nodeId) || [],
|
|
263
|
+
callees: calleeMap.get(sym.nodeId) || [],
|
|
245
264
|
processes: processesMap.get(sym.nodeId) || [],
|
|
246
265
|
cohesion: cohesionMap.get(sym.nodeId) || 0,
|
|
247
266
|
});
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single owner of `RepoMeta.embeddingCheckpoint` — how it is minted, and
|
|
3
|
+
* how a run decides what to do with one it finds.
|
|
4
|
+
*
|
|
5
|
+
* This module exists for the reason `embedding-count.ts` next door exists, and
|
|
6
|
+
* for a sharper one. A review of #2790 found that two hand-copied bodies of
|
|
7
|
+
* "measure the embedding count" had drifted inside a single change; the fix for
|
|
8
|
+
* that then created a SECOND pair of hand-copied publishers — of this record —
|
|
9
|
+
* and they had already drifted too: the CLI armed the attempt counter only
|
|
10
|
+
* after clearing its identity gate, the server derived it from the resumed
|
|
11
|
+
* marker alone. Worse, only one of the two READERS implemented `kind` at all,
|
|
12
|
+
* so a `'partial'` marker written by `gitnexus analyze` and resumed through
|
|
13
|
+
* `POST /api/embed` hit exactly the permanent wedge `kind` was introduced to
|
|
14
|
+
* remove. Prose promising two sites stay in step is not a mechanism. This is.
|
|
15
|
+
*
|
|
16
|
+
* Same tier as {@link ./embedding-count.ts} and {@link ./embedding-mode.ts}:
|
|
17
|
+
* type-only imports, no native dependencies, so `run-analyze.ts` can import it
|
|
18
|
+
* statically without dragging an embeddings module in (#2370) and `server/`
|
|
19
|
+
* can import it too.
|
|
20
|
+
*/
|
|
21
|
+
import type { RepoMeta } from '../storage/repo-manager.js';
|
|
22
|
+
export type EmbeddingCheckpoint = NonNullable<RepoMeta['embeddingCheckpoint']>;
|
|
23
|
+
export type EmbeddingCheckpointKind = NonNullable<EmbeddingCheckpoint['kind']>;
|
|
24
|
+
export interface EmbeddingRunIdentity {
|
|
25
|
+
model: string;
|
|
26
|
+
dimensions: number;
|
|
27
|
+
provider: string;
|
|
28
|
+
}
|
|
29
|
+
export interface EmbeddingCheckpointProgress {
|
|
30
|
+
nodesProcessed: number;
|
|
31
|
+
totalNodes: number;
|
|
32
|
+
chunksProcessed: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* How many consecutive resume attempts may fail to clear a `'partial'` pending
|
|
36
|
+
* set before it is abandoned.
|
|
37
|
+
*
|
|
38
|
+
* Not a fresh guess: it is this repo's existing per-operation retry budget —
|
|
39
|
+
* the HTTP embedder spends `HTTP_MAX_RETRIES + 1 === 3` per request and the WAL
|
|
40
|
+
* driver `CHECKPOINT_RETRY_ATTEMPTS === 3` per flush. Each attempt here is a
|
|
41
|
+
* whole analyze invocation with those budgets nested underneath, so 3 is
|
|
42
|
+
* already generous while still converging within a day of ordinary committing.
|
|
43
|
+
*/
|
|
44
|
+
export declare const EMBEDDING_RESUME_MAX_ATTEMPTS = 3;
|
|
45
|
+
/**
|
|
46
|
+
* The one home for the back-compat default. Markers written before #2790's
|
|
47
|
+
* follow-up carry no `kind`, and they must keep the stricter behavior — an
|
|
48
|
+
* implicit default scattered across read sites is precisely how the two
|
|
49
|
+
* readers came to disagree.
|
|
50
|
+
*/
|
|
51
|
+
export declare const checkpointKind: (checkpoint: EmbeddingCheckpoint) => EmbeddingCheckpointKind;
|
|
52
|
+
/** Pending-node count, tolerating the field's optionality. */
|
|
53
|
+
export declare const pendingNodeCount: (checkpoint: EmbeddingCheckpoint) => number;
|
|
54
|
+
/**
|
|
55
|
+
* The attempt-chain rule, which is the subtlest thing here and was the part
|
|
56
|
+
* that had already diverged.
|
|
57
|
+
*
|
|
58
|
+
* The counter advances only when this run resumed a `'partial'` marker AND at
|
|
59
|
+
* least one node it was handed failed AGAIN. A resume that cleared its set but
|
|
60
|
+
* lost *different* nodes is a FRESH partial, so the budget resets — otherwise a
|
|
61
|
+
* steadily-flaky endpoint would exhaust the budget on nodes that were never the
|
|
62
|
+
* problem. `undefined` rather than `0` when the streak breaks, so a clean
|
|
63
|
+
* marker serializes without the field.
|
|
64
|
+
*/
|
|
65
|
+
export declare const nextAttemptCount: (resumedFrom: EmbeddingCheckpoint | undefined, failedNodeIds: readonly string[]) => number | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Mint the marker written BEFORE a bounded write window opens.
|
|
68
|
+
*
|
|
69
|
+
* `'interrupted'`: if the process dies inside the window these nodes may hold a
|
|
70
|
+
* subset of their chunks, which is what forces resume to delete and regenerate
|
|
71
|
+
* them even when a persisted row carries the current content hash — and what
|
|
72
|
+
* makes an identity mismatch fail closed rather than mix vector spaces. No
|
|
73
|
+
* `attempts`: the retry bound belongs to `'partial'`, whose pending set
|
|
74
|
+
* provably holds zero rows and can therefore be abandoned safely.
|
|
75
|
+
*/
|
|
76
|
+
export declare const mintInterruptedCheckpoint: (identity: EmbeddingRunIdentity, progress: EmbeddingCheckpointProgress, pendingNodeIds: string[], at?: string) => EmbeddingCheckpoint;
|
|
77
|
+
/**
|
|
78
|
+
* Mint the marker written AFTER a run that completed while dropping nodes.
|
|
79
|
+
*
|
|
80
|
+
* `totalNodes` is reconstructed as complete + dropped, because `nodesProcessed`
|
|
81
|
+
* counts only the nodes that finished with a full row set. It feeds the resume
|
|
82
|
+
* log line and nothing else.
|
|
83
|
+
*/
|
|
84
|
+
export declare const mintPartialCheckpoint: (identity: EmbeddingRunIdentity, result: {
|
|
85
|
+
nodesProcessed: number;
|
|
86
|
+
chunksProcessed: number;
|
|
87
|
+
failedNodeIds: string[];
|
|
88
|
+
}, resumedFrom: EmbeddingCheckpoint | undefined, at?: string) => EmbeddingCheckpoint;
|
|
89
|
+
/**
|
|
90
|
+
* Mint the marker written when a run finished but its embedding count could not
|
|
91
|
+
* be verified.
|
|
92
|
+
*
|
|
93
|
+
* A third state, and it needs its own `kind` rather than borrowing `'partial'`:
|
|
94
|
+
* its pending set is EMPTY. Nothing was dropped and nothing needs re-embedding
|
|
95
|
+
* — the marker exists only to defeat the same-commit fast return so the next
|
|
96
|
+
* run re-derives a count, because clearing it while `stats.embeddings` still
|
|
97
|
+
* reads a stale zero is what arms a later `--force` to wipe live embeddings.
|
|
98
|
+
* Stamping it `'partial'` made `gitnexus status` tell the operator that N nodes
|
|
99
|
+
* had lost their embeddings, where N is zero.
|
|
100
|
+
*/
|
|
101
|
+
export declare const mintUnverifiedCountCheckpoint: (identity: EmbeddingRunIdentity, progress: EmbeddingCheckpointProgress, at?: string) => EmbeddingCheckpoint;
|
|
102
|
+
export type EmbeddingResumeDecision =
|
|
103
|
+
/** An explicit flag cleared it; nothing to resume. */
|
|
104
|
+
{
|
|
105
|
+
readonly action: 'discard';
|
|
106
|
+
readonly log: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Keep running, but abandon the pending set — either the retry budget is
|
|
110
|
+
* spent, or the marker was written by a different embedding identity whose
|
|
111
|
+
* nodes provably hold zero rows so nothing is at risk.
|
|
112
|
+
*/
|
|
113
|
+
| {
|
|
114
|
+
readonly action: 'abandon';
|
|
115
|
+
readonly log: string;
|
|
116
|
+
}
|
|
117
|
+
/** Resume: regenerate `pendingNodeIds` under the matching identity. */
|
|
118
|
+
| {
|
|
119
|
+
readonly action: 'resume';
|
|
120
|
+
readonly log: string;
|
|
121
|
+
readonly pendingNodeIds: ReadonlySet<string>;
|
|
122
|
+
readonly resumedFrom: EmbeddingCheckpoint;
|
|
123
|
+
}
|
|
124
|
+
/** Fail closed: a half-written window under a foreign identity. */
|
|
125
|
+
| {
|
|
126
|
+
readonly action: 'abort';
|
|
127
|
+
readonly error: string;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* The one implementation of "what should this run do with the checkpoint it
|
|
131
|
+
* found", shared by the CLI resume gate and `POST /api/embed`.
|
|
132
|
+
*
|
|
133
|
+
* Callers resolve the embedding identity lazily and pass it only when they need
|
|
134
|
+
* a verdict beyond the flag checks — resolving it is not free, and the flag
|
|
135
|
+
* paths short-circuit before it is needed. Pass `identity: undefined` to get
|
|
136
|
+
* just those; a decision that requires an identity returns `'resume'` only when
|
|
137
|
+
* one was supplied and matched.
|
|
138
|
+
*/
|
|
139
|
+
export declare const decideEmbeddingResume: (checkpoint: EmbeddingCheckpoint, identity: EmbeddingRunIdentity | undefined, options?: {
|
|
140
|
+
force?: boolean;
|
|
141
|
+
dropEmbeddings?: boolean;
|
|
142
|
+
maxAttempts?: number;
|
|
143
|
+
}) => EmbeddingResumeDecision;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single owner of `RepoMeta.embeddingCheckpoint` — how it is minted, and
|
|
3
|
+
* how a run decides what to do with one it finds.
|
|
4
|
+
*
|
|
5
|
+
* This module exists for the reason `embedding-count.ts` next door exists, and
|
|
6
|
+
* for a sharper one. A review of #2790 found that two hand-copied bodies of
|
|
7
|
+
* "measure the embedding count" had drifted inside a single change; the fix for
|
|
8
|
+
* that then created a SECOND pair of hand-copied publishers — of this record —
|
|
9
|
+
* and they had already drifted too: the CLI armed the attempt counter only
|
|
10
|
+
* after clearing its identity gate, the server derived it from the resumed
|
|
11
|
+
* marker alone. Worse, only one of the two READERS implemented `kind` at all,
|
|
12
|
+
* so a `'partial'` marker written by `gitnexus analyze` and resumed through
|
|
13
|
+
* `POST /api/embed` hit exactly the permanent wedge `kind` was introduced to
|
|
14
|
+
* remove. Prose promising two sites stay in step is not a mechanism. This is.
|
|
15
|
+
*
|
|
16
|
+
* Same tier as {@link ./embedding-count.ts} and {@link ./embedding-mode.ts}:
|
|
17
|
+
* type-only imports, no native dependencies, so `run-analyze.ts` can import it
|
|
18
|
+
* statically without dragging an embeddings module in (#2370) and `server/`
|
|
19
|
+
* can import it too.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* How many consecutive resume attempts may fail to clear a `'partial'` pending
|
|
23
|
+
* set before it is abandoned.
|
|
24
|
+
*
|
|
25
|
+
* Not a fresh guess: it is this repo's existing per-operation retry budget —
|
|
26
|
+
* the HTTP embedder spends `HTTP_MAX_RETRIES + 1 === 3` per request and the WAL
|
|
27
|
+
* driver `CHECKPOINT_RETRY_ATTEMPTS === 3` per flush. Each attempt here is a
|
|
28
|
+
* whole analyze invocation with those budgets nested underneath, so 3 is
|
|
29
|
+
* already generous while still converging within a day of ordinary committing.
|
|
30
|
+
*/
|
|
31
|
+
export const EMBEDDING_RESUME_MAX_ATTEMPTS = 3;
|
|
32
|
+
/**
|
|
33
|
+
* The one home for the back-compat default. Markers written before #2790's
|
|
34
|
+
* follow-up carry no `kind`, and they must keep the stricter behavior — an
|
|
35
|
+
* implicit default scattered across read sites is precisely how the two
|
|
36
|
+
* readers came to disagree.
|
|
37
|
+
*/
|
|
38
|
+
export const checkpointKind = (checkpoint) => checkpoint.kind ?? 'interrupted';
|
|
39
|
+
/** Pending-node count, tolerating the field's optionality. */
|
|
40
|
+
export const pendingNodeCount = (checkpoint) => checkpoint.pendingNodeIds?.length ?? 0;
|
|
41
|
+
/**
|
|
42
|
+
* The attempt-chain rule, which is the subtlest thing here and was the part
|
|
43
|
+
* that had already diverged.
|
|
44
|
+
*
|
|
45
|
+
* The counter advances only when this run resumed a `'partial'` marker AND at
|
|
46
|
+
* least one node it was handed failed AGAIN. A resume that cleared its set but
|
|
47
|
+
* lost *different* nodes is a FRESH partial, so the budget resets — otherwise a
|
|
48
|
+
* steadily-flaky endpoint would exhaust the budget on nodes that were never the
|
|
49
|
+
* problem. `undefined` rather than `0` when the streak breaks, so a clean
|
|
50
|
+
* marker serializes without the field.
|
|
51
|
+
*/
|
|
52
|
+
export const nextAttemptCount = (resumedFrom, failedNodeIds) => {
|
|
53
|
+
if (resumedFrom === undefined || checkpointKind(resumedFrom) !== 'partial')
|
|
54
|
+
return undefined;
|
|
55
|
+
const resumedPending = new Set(resumedFrom.pendingNodeIds ?? []);
|
|
56
|
+
const failedAgain = failedNodeIds.some((id) => resumedPending.has(id));
|
|
57
|
+
return failedAgain ? (resumedFrom.attempts ?? 0) + 1 : undefined;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Mint the marker written BEFORE a bounded write window opens.
|
|
61
|
+
*
|
|
62
|
+
* `'interrupted'`: if the process dies inside the window these nodes may hold a
|
|
63
|
+
* subset of their chunks, which is what forces resume to delete and regenerate
|
|
64
|
+
* them even when a persisted row carries the current content hash — and what
|
|
65
|
+
* makes an identity mismatch fail closed rather than mix vector spaces. No
|
|
66
|
+
* `attempts`: the retry bound belongs to `'partial'`, whose pending set
|
|
67
|
+
* provably holds zero rows and can therefore be abandoned safely.
|
|
68
|
+
*/
|
|
69
|
+
export const mintInterruptedCheckpoint = (identity, progress, pendingNodeIds, at = new Date().toISOString()) => ({
|
|
70
|
+
at,
|
|
71
|
+
...progress,
|
|
72
|
+
model: identity.model,
|
|
73
|
+
dimensions: identity.dimensions,
|
|
74
|
+
provider: identity.provider,
|
|
75
|
+
kind: 'interrupted',
|
|
76
|
+
pendingNodeIds,
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Mint the marker written AFTER a run that completed while dropping nodes.
|
|
80
|
+
*
|
|
81
|
+
* `totalNodes` is reconstructed as complete + dropped, because `nodesProcessed`
|
|
82
|
+
* counts only the nodes that finished with a full row set. It feeds the resume
|
|
83
|
+
* log line and nothing else.
|
|
84
|
+
*/
|
|
85
|
+
export const mintPartialCheckpoint = (identity, result, resumedFrom, at = new Date().toISOString()) => ({
|
|
86
|
+
at,
|
|
87
|
+
nodesProcessed: result.nodesProcessed,
|
|
88
|
+
totalNodes: result.nodesProcessed + result.failedNodeIds.length,
|
|
89
|
+
chunksProcessed: result.chunksProcessed,
|
|
90
|
+
model: identity.model,
|
|
91
|
+
dimensions: identity.dimensions,
|
|
92
|
+
provider: identity.provider,
|
|
93
|
+
kind: 'partial',
|
|
94
|
+
attempts: nextAttemptCount(resumedFrom, result.failedNodeIds),
|
|
95
|
+
pendingNodeIds: result.failedNodeIds,
|
|
96
|
+
});
|
|
97
|
+
/**
|
|
98
|
+
* Mint the marker written when a run finished but its embedding count could not
|
|
99
|
+
* be verified.
|
|
100
|
+
*
|
|
101
|
+
* A third state, and it needs its own `kind` rather than borrowing `'partial'`:
|
|
102
|
+
* its pending set is EMPTY. Nothing was dropped and nothing needs re-embedding
|
|
103
|
+
* — the marker exists only to defeat the same-commit fast return so the next
|
|
104
|
+
* run re-derives a count, because clearing it while `stats.embeddings` still
|
|
105
|
+
* reads a stale zero is what arms a later `--force` to wipe live embeddings.
|
|
106
|
+
* Stamping it `'partial'` made `gitnexus status` tell the operator that N nodes
|
|
107
|
+
* had lost their embeddings, where N is zero.
|
|
108
|
+
*/
|
|
109
|
+
export const mintUnverifiedCountCheckpoint = (identity, progress, at = new Date().toISOString()) => ({
|
|
110
|
+
at,
|
|
111
|
+
...progress,
|
|
112
|
+
model: identity.model,
|
|
113
|
+
dimensions: identity.dimensions,
|
|
114
|
+
provider: identity.provider,
|
|
115
|
+
kind: 'unverified-count',
|
|
116
|
+
pendingNodeIds: [],
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* The one implementation of "what should this run do with the checkpoint it
|
|
120
|
+
* found", shared by the CLI resume gate and `POST /api/embed`.
|
|
121
|
+
*
|
|
122
|
+
* Callers resolve the embedding identity lazily and pass it only when they need
|
|
123
|
+
* a verdict beyond the flag checks — resolving it is not free, and the flag
|
|
124
|
+
* paths short-circuit before it is needed. Pass `identity: undefined` to get
|
|
125
|
+
* just those; a decision that requires an identity returns `'resume'` only when
|
|
126
|
+
* one was supplied and matched.
|
|
127
|
+
*/
|
|
128
|
+
export const decideEmbeddingResume = (checkpoint, identity, options = {}) => {
|
|
129
|
+
const kind = checkpointKind(checkpoint);
|
|
130
|
+
const pending = pendingNodeCount(checkpoint);
|
|
131
|
+
const maxAttempts = options.maxAttempts ?? EMBEDDING_RESUME_MAX_ATTEMPTS;
|
|
132
|
+
if (options.dropEmbeddings) {
|
|
133
|
+
return { action: 'discard', log: 'Discarding the embedding checkpoint (--drop-embeddings).' };
|
|
134
|
+
}
|
|
135
|
+
if (options.force) {
|
|
136
|
+
return {
|
|
137
|
+
action: 'discard',
|
|
138
|
+
log: 'Discarding the embedding checkpoint (--force)' +
|
|
139
|
+
`${pending > 0 ? ` and its ${pending} pending node(s)` : ''}; this run rebuilds from ` +
|
|
140
|
+
'scratch. Pass --embeddings to regenerate them explicitly.',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Only the 'unverified-count' marker may skip the identity gate. Its pending
|
|
144
|
+
// set is empty BY DEFINITION and it exists purely to force a fresh count, so
|
|
145
|
+
// there is nothing a foreign embedding identity could corrupt.
|
|
146
|
+
//
|
|
147
|
+
// An empty pending set alone must NOT take this path. `onCheckpoint` mints an
|
|
148
|
+
// 'interrupted' marker with `pendingNodeIds: []` after every post-window
|
|
149
|
+
// save, and legacy markers may omit the field entirely — so keying on
|
|
150
|
+
// emptiness would silently clear an interrupted marker under a foreign
|
|
151
|
+
// provider instead of failing closed, which is exactly the vector-space
|
|
152
|
+
// mixing the 'interrupted' kind exists to prevent.
|
|
153
|
+
if (kind === 'unverified-count') {
|
|
154
|
+
return {
|
|
155
|
+
action: 'abandon',
|
|
156
|
+
log: 'Re-deriving the embedding count left unverified by the previous run.',
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (kind === 'partial' && (checkpoint.attempts ?? 0) >= maxAttempts) {
|
|
160
|
+
return {
|
|
161
|
+
action: 'abandon',
|
|
162
|
+
log: `Warning: ${pending} node(s) failed to embed on ${checkpoint.attempts} consecutive ` +
|
|
163
|
+
'resume attempts and are being abandoned (#2790). The index is registered without ' +
|
|
164
|
+
'them; `gitnexus status` stops reporting it as incomplete. Re-run ' +
|
|
165
|
+
'`gitnexus analyze --embeddings --force` once the embedding endpoint accepts them.',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (identity === undefined) {
|
|
169
|
+
return {
|
|
170
|
+
action: 'abort',
|
|
171
|
+
error: 'Cannot resume embedding checkpoint: no embedding identity was resolved.',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const providerDiffers = checkpoint.provider !== identity.provider;
|
|
175
|
+
const identityDiffers = providerDiffers ||
|
|
176
|
+
checkpoint.model !== identity.model ||
|
|
177
|
+
checkpoint.dimensions !== identity.dimensions;
|
|
178
|
+
if (identityDiffers && kind !== 'interrupted') {
|
|
179
|
+
// Those nodes hold zero rows, so there is no vector space to mix. Throwing
|
|
180
|
+
// here is what turned an exit-0 partial run into a permanent wedge: a hook
|
|
181
|
+
// or CI job without the endpoint's env vars resolves `provider: 'local'`,
|
|
182
|
+
// mismatches, and dies before any phase runs.
|
|
183
|
+
return {
|
|
184
|
+
action: 'abandon',
|
|
185
|
+
log: `Warning: dropping ${pending} pending node(s) from a ${kind} embedding checkpoint: it ` +
|
|
186
|
+
`was written by a different embedding configuration (${checkpoint.model} at ` +
|
|
187
|
+
`${checkpoint.dimensions} dimensions) than this run resolves (${identity.model} at ` +
|
|
188
|
+
`${identity.dimensions}). Those nodes hold no embedding rows, so nothing is lost that ` +
|
|
189
|
+
'a later `--embeddings` run cannot regenerate.',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (providerDiffers) {
|
|
193
|
+
return {
|
|
194
|
+
action: 'abort',
|
|
195
|
+
error: 'Cannot resume embedding checkpoint: the embedding provider configuration differs. ' +
|
|
196
|
+
'Restore the matching endpoint configuration or pass --drop-embeddings to rebuild without it.',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (identityDiffers) {
|
|
200
|
+
return {
|
|
201
|
+
action: 'abort',
|
|
202
|
+
error: `Cannot resume embedding checkpoint: it uses ${checkpoint.model} at ` +
|
|
203
|
+
`${checkpoint.dimensions} dimensions, but this run resolves ${identity.model} at ` +
|
|
204
|
+
`${identity.dimensions}. Restore the matching embedding configuration or pass ` +
|
|
205
|
+
'--drop-embeddings to rebuild without it.',
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Reached with an EMPTY pending set too — an 'interrupted' marker written by
|
|
209
|
+
// a post-window save names none. That still resumes rather than clearing:
|
|
210
|
+
// the marker's presence is what forces embedding generation on a run that
|
|
211
|
+
// would otherwise derive `shouldGenerateEmbeddings: false`, and it has now
|
|
212
|
+
// cleared the identity gate, so resuming is safe.
|
|
213
|
+
return {
|
|
214
|
+
action: 'resume',
|
|
215
|
+
log: `Previous analyze ended at an embedding checkpoint (${checkpoint.nodesProcessed}/` +
|
|
216
|
+
`${checkpoint.totalNodes} nodes); resuming from persisted hashes` +
|
|
217
|
+
`${pending > 0 ? ` and regenerating ${pending} pending node(s)` : ''}.`,
|
|
218
|
+
pendingNodeIds: new Set(checkpoint.pendingNodeIds ?? []),
|
|
219
|
+
resumedFrom: checkpoint,
|
|
220
|
+
};
|
|
221
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single implementation of "how many embedding rows are actually persisted".
|
|
3
|
+
*
|
|
4
|
+
* Lives in its own module — beside {@link ./embedding-mode.ts} and with the same
|
|
5
|
+
* no-native-imports property — because the CLI (`run-analyze.ts`) and the server
|
|
6
|
+
* (`server/api.ts`) both publish `RepoMeta.stats.embeddings`, and a review of
|
|
7
|
+
* #2790 found the two hand-copied bodies had already drifted inside a single
|
|
8
|
+
* change: one used `?? Number.NaN`, the other `?? 0`, under a comment asserting
|
|
9
|
+
* they measured the field "the same way". Two publishers of one field must not
|
|
10
|
+
* be able to disagree, so there is now one function and three call sites.
|
|
11
|
+
*
|
|
12
|
+
* Keeping it out of `core/embeddings/` is deliberate: `run-analyze.ts` may only
|
|
13
|
+
* reach embedding modules through `await import(...)` (#2370 — no embeddings
|
|
14
|
+
* module loads unless a run actually needs one), and this counter runs on the
|
|
15
|
+
* ordinary finalization path of every analyze.
|
|
16
|
+
*
|
|
17
|
+
* TRI-STATE, and the asymmetry is the whole point. `unknown` means COULD NOT
|
|
18
|
+
* ASK — the query throws for reasons that have nothing to do with how many rows
|
|
19
|
+
* were written (table missing, connection closed, DB busy or read-only, the
|
|
20
|
+
* VECTOR-extension DML lock #2623) — and a fabricated count is never returned in
|
|
21
|
+
* its place. A wrong-LOW value is the dangerous direction: `stats.embeddings` is
|
|
22
|
+
* the sole input to the next run's `existingEmbeddingCount` → `deriveEmbeddingMode`
|
|
23
|
+
* → `shouldLoadCache`, so a false `0` is exactly what makes a later `--force`
|
|
24
|
+
* wipe live embeddings without loading the cache.
|
|
25
|
+
*/
|
|
26
|
+
/** Callback shape both callers already satisfy with their `executeQuery`. */
|
|
27
|
+
export type EmbeddingCountQuery = (cypher: string) => Promise<Array<Record<string, unknown>> | undefined>;
|
|
28
|
+
export type PersistedEmbeddingCount = {
|
|
29
|
+
readonly kind: 'measured';
|
|
30
|
+
readonly count: number;
|
|
31
|
+
}
|
|
32
|
+
/** `reason` is operator-facing: each caller phrases its own warning around it. */
|
|
33
|
+
| {
|
|
34
|
+
readonly kind: 'unknown';
|
|
35
|
+
readonly reason: string;
|
|
36
|
+
};
|
|
37
|
+
export declare const EMBEDDING_COUNT_CYPHER = "MATCH (e:CodeEmbedding) RETURN count(e) AS cnt";
|
|
38
|
+
/**
|
|
39
|
+
* Count the persisted embedding rows, or report that the answer never arrived.
|
|
40
|
+
*
|
|
41
|
+
* A MISSING row or cell counts as unknown, NOT as zero: an empty table still
|
|
42
|
+
* answers with one row holding `0`, so no row / no cell means the query did not
|
|
43
|
+
* really answer. That distinction is what `?? Number.NaN` buys — with `?? 0`,
|
|
44
|
+
* `Number.isFinite(0)` is true and the unknown branch becomes unreachable for
|
|
45
|
+
* exactly the case it exists to catch.
|
|
46
|
+
*/
|
|
47
|
+
export declare const measurePersistedEmbeddingCount: (runQuery: EmbeddingCountQuery) => Promise<PersistedEmbeddingCount>;
|
|
48
|
+
/** `undefined` ≡ unknown, for the call sites that only need the optional number. */
|
|
49
|
+
export declare const persistedEmbeddingCountOrUndefined: (result: PersistedEmbeddingCount) => number | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Fold a measurement into the `RepoMeta.stats.embeddings` a run publishes.
|
|
52
|
+
*
|
|
53
|
+
* The measurement was already shared; this fold was not, and it is the half
|
|
54
|
+
* that decides what actually lands on disk — the CLI's finalization and the
|
|
55
|
+
* server's `withMeasuredEmbeddingCount` each carried their own copy of the same
|
|
56
|
+
* two lines. NEVER a fabricated `0`: `unknown` carries `priorCount` forward
|
|
57
|
+
* (see this file's header for the chain a false zero arms), and `undefined` in
|
|
58
|
+
* means `undefined` out, so a repo that never had a count keeps the field
|
|
59
|
+
* absent rather than gaining an invented one.
|
|
60
|
+
*/
|
|
61
|
+
export declare const resolvePersistedEmbeddingCount: (measured: PersistedEmbeddingCount, priorCount: number | undefined) => number | undefined;
|