gitnexus 1.6.11-rc.8 → 1.6.11
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 +95 -26
- package/dist/_shared/graph/types.d.ts +81 -2
- package/dist/_shared/graph/types.d.ts.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.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +2 -1
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +1 -0
- package/dist/_shared/languages.js.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 +4 -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.js +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts +3 -0
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +4 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +10 -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/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/types.d.ts +15 -0
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +4 -0
- package/dist/cli/ai-context.js +90 -14
- package/dist/cli/analyze-config.js +14 -0
- package/dist/cli/analyze-options.d.ts +14 -0
- package/dist/cli/analyze-watch.d.ts +20 -0
- package/dist/cli/analyze-watch.js +434 -0
- package/dist/cli/analyze.js +27 -9
- package/dist/cli/auto-sync.d.ts +1 -0
- package/dist/cli/auto-sync.js +107 -0
- package/dist/cli/command-banner.d.ts +15 -0
- package/dist/cli/command-banner.js +42 -0
- package/dist/cli/detect-changes-format.js +21 -0
- package/dist/cli/doctor.d.ts +7 -0
- package/dist/cli/doctor.js +14 -0
- package/dist/cli/group.js +7 -1
- package/dist/cli/help-i18n.js +4 -0
- package/dist/cli/i18n/en.d.ts +18 -3
- package/dist/cli/i18n/en.js +18 -3
- package/dist/cli/i18n/resources.d.ts +33 -3
- package/dist/cli/i18n/zh-CN.d.ts +15 -0
- package/dist/cli/i18n/zh-CN.js +18 -3
- package/dist/cli/index.js +34 -7
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.js +44 -0
- package/dist/cli/optional-grammars.d.ts +3 -2
- package/dist/cli/optional-grammars.js +19 -3
- package/dist/cli/setup.js +41 -15
- package/dist/cli/update-notice.d.ts +34 -0
- package/dist/cli/update-notice.js +91 -0
- package/dist/cli/update.d.ts +21 -0
- package/dist/cli/update.js +93 -0
- package/dist/cli/watch.d.ts +1 -20
- package/dist/cli/watch.js +5 -371
- package/dist/core/analysis-feature-registry.d.ts +2 -0
- package/dist/core/analysis-feature-registry.js +15 -0
- package/dist/core/analyzer-identity.js +21 -3
- package/dist/core/auto-sync/analysis-worker-launch.d.ts +30 -0
- package/dist/core/auto-sync/analysis-worker-launch.js +166 -0
- package/dist/core/auto-sync/config.d.ts +33 -0
- package/dist/core/auto-sync/config.js +320 -0
- package/dist/core/auto-sync/index.d.ts +6 -0
- package/dist/core/auto-sync/index.js +6 -0
- package/dist/core/auto-sync/path-security.d.ts +9 -0
- package/dist/core/auto-sync/path-security.js +251 -0
- package/dist/core/auto-sync/repo.d.ts +1 -0
- package/dist/core/auto-sync/repo.js +6 -0
- package/dist/core/auto-sync/runner.d.ts +44 -0
- package/dist/core/auto-sync/runner.js +428 -0
- package/dist/core/auto-sync/starter.d.ts +50 -0
- package/dist/core/auto-sync/starter.js +497 -0
- package/dist/core/auto-sync/state.d.ts +37 -0
- package/dist/core/auto-sync/state.js +119 -0
- package/dist/core/group/config-parser.js +8 -1
- package/dist/core/group/cross-impact.d.ts +3 -0
- package/dist/core/group/cross-impact.js +36 -4
- package/dist/core/group/extractors/http-patterns/java.js +22 -8
- package/dist/core/group/extractors/http-patterns/kotlin.js +86 -31
- package/dist/core/group/extractors/http-patterns/node.js +145 -8
- package/dist/core/group/extractors/http-patterns/python.js +11 -7
- package/dist/core/group/extractors/http-route-extractor.js +63 -17
- package/dist/core/group/extractors/java-workspace-extractor.js +244 -31
- package/dist/core/group/group-lock.js +5 -6
- package/dist/core/group/normalization.d.ts +38 -1
- package/dist/core/group/normalization.js +59 -3
- package/dist/core/group/service.d.ts +11 -0
- package/dist/core/group/service.js +13 -1
- package/dist/core/group/storage.js +2 -2
- package/dist/core/group/sync.d.ts +24 -1
- package/dist/core/group/sync.js +46 -8
- package/dist/core/group/types.d.ts +13 -0
- package/dist/core/incremental/derived-writeback.d.ts +36 -0
- package/dist/core/incremental/derived-writeback.js +68 -0
- package/dist/core/incremental/spring-config-drift.d.ts +12 -0
- package/dist/core/incremental/spring-config-drift.js +46 -0
- package/dist/core/incremental/subgraph-extract.d.ts +7 -4
- package/dist/core/incremental/subgraph-extract.js +30 -5
- package/dist/core/ingestion/asyncapi/document.d.ts +226 -0
- package/dist/core/ingestion/asyncapi/document.js +758 -0
- package/dist/core/ingestion/asyncapi/protocol.d.ts +79 -0
- package/dist/core/ingestion/asyncapi/protocol.js +203 -0
- package/dist/core/ingestion/call-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/zig.js +4 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.d.ts +100 -0
- package/dist/core/ingestion/call-extractors/zig-static-gating.js +319 -0
- package/dist/core/ingestion/call-processor.js +3 -1
- package/dist/core/ingestion/class-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/zig.js +32 -0
- package/dist/core/ingestion/class-extractors/generic.js +4 -1
- package/dist/core/ingestion/class-types.d.ts +6 -2
- package/dist/core/ingestion/destination-key.d.ts +59 -0
- package/dist/core/ingestion/destination-key.js +61 -0
- package/dist/core/ingestion/entry-point-scoring.d.ts +6 -2
- package/dist/core/ingestion/entry-point-scoring.js +8 -44
- package/dist/core/ingestion/export-detection.d.ts +37 -0
- package/dist/core/ingestion/export-detection.js +60 -0
- package/dist/core/ingestion/field-extractors/configs/zig.d.ts +8 -0
- package/dist/core/ingestion/field-extractors/configs/zig.js +49 -0
- package/dist/core/ingestion/field-extractors/generic.d.ts +1 -1
- package/dist/core/ingestion/field-extractors/generic.js +12 -1
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.d.ts +26 -0
- package/dist/core/ingestion/frameworks/spring/actuator-runtime.js +843 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +9 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +8 -1
- package/dist/core/ingestion/frameworks/spring/argument-facts.d.ts +80 -0
- package/dist/core/ingestion/frameworks/spring/argument-facts.js +85 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +1 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +2 -1
- package/dist/core/ingestion/frameworks/spring/destinations.d.ts +539 -0
- package/dist/core/ingestion/frameworks/spring/destinations.js +840 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.d.ts +22 -0
- package/dist/core/ingestion/frameworks/spring/dynamic-lookups.js +124 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.d.ts +78 -0
- package/dist/core/ingestion/frameworks/spring/message-producers.js +90 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +29 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.d.ts +7 -0
- package/dist/core/ingestion/frameworks/spring/vendor-prefixes.js +22 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.d.ts +13 -0
- package/dist/core/ingestion/import-resolvers/configs/zig.js +26 -0
- package/dist/core/ingestion/import-resolvers/zig.d.ts +34 -0
- package/dist/core/ingestion/import-resolvers/zig.js +193 -0
- package/dist/core/ingestion/language-config.d.ts +177 -0
- package/dist/core/ingestion/language-config.js +719 -0
- package/dist/core/ingestion/language-provider.d.ts +178 -1
- package/dist/core/ingestion/language-provider.js +22 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.d.ts +62 -0
- package/dist/core/ingestion/languages/csharp/razor-view-components.js +954 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.d.ts +3 -0
- package/dist/core/ingestion/languages/csharp/resolution-config.js +6 -1
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +1 -1
- package/dist/core/ingestion/languages/java/analysis-features.js +14 -6
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +8 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +34 -0
- package/dist/core/ingestion/languages/java/captures.js +22 -1
- package/dist/core/ingestion/languages/java/lombok-synthesizer.d.ts +42 -0
- package/dist/core/ingestion/languages/java/lombok-synthesizer.js +439 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-actuator.js +62 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +17 -1
- package/dist/core/ingestion/languages/java/spring-di.js +44 -2
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/java/spring-dynamic-lookup.js +62 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-message-producers.js +83 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +11 -1
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +13 -3
- package/dist/core/ingestion/languages/java.js +18 -8
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.d.ts +99 -0
- package/dist/core/ingestion/languages/jvm/accessor-synthesis.js +173 -0
- package/dist/core/ingestion/languages/jvm/beanspec.d.ts +17 -0
- package/dist/core/ingestion/languages/jvm/beanspec.js +42 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +50 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +24 -1
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.d.ts +26 -0
- package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.js +417 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/spring-actuator.js +172 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.d.ts +18 -0
- package/dist/core/ingestion/languages/kotlin/spring-config-bindings.js +411 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +51 -1
- package/dist/core/ingestion/languages/kotlin/spring-di.js +86 -6
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.d.ts +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.js +77 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.d.ts +17 -0
- package/dist/core/ingestion/languages/kotlin/spring-message-producers.js +119 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +16 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +77 -2
- package/dist/core/ingestion/languages/kotlin.js +24 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/rust/query.js +8 -8
- package/dist/core/ingestion/languages/zig/captures.d.ts +260 -0
- package/dist/core/ingestion/languages/zig/captures.js +2070 -0
- package/dist/core/ingestion/languages/zig/index.d.ts +4 -0
- package/dist/core/ingestion/languages/zig/index.js +4 -0
- package/dist/core/ingestion/languages/zig/interpret.d.ts +36 -0
- package/dist/core/ingestion/languages/zig/interpret.js +176 -0
- package/dist/core/ingestion/languages/zig/query.d.ts +3 -0
- package/dist/core/ingestion/languages/zig/query.js +426 -0
- package/dist/core/ingestion/languages/zig/range-binding.d.ts +37 -0
- package/dist/core/ingestion/languages/zig/range-binding.js +373 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.d.ts +12 -0
- package/dist/core/ingestion/languages/zig/scope-resolver.js +58 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.d.ts +25 -0
- package/dist/core/ingestion/languages/zig/simple-hooks.js +143 -0
- package/dist/core/ingestion/languages/zig.d.ts +32 -0
- package/dist/core/ingestion/languages/zig.js +130 -0
- package/dist/core/ingestion/method-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/zig.js +120 -0
- package/dist/core/ingestion/method-extractors/generic.js +16 -4
- package/dist/core/ingestion/method-types.d.ts +10 -4
- package/dist/core/ingestion/model/field-registry.d.ts +3 -3
- package/dist/core/ingestion/model/field-registry.js +11 -7
- package/dist/core/ingestion/model/method-registry.d.ts +3 -3
- package/dist/core/ingestion/model/method-registry.js +13 -8
- package/dist/core/ingestion/model/registration-table.js +3 -0
- package/dist/core/ingestion/model/type-registry.js +8 -4
- package/dist/core/ingestion/pipeline-phases/di.js +47 -14
- package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
- package/dist/core/ingestion/pipeline-phases/index.js +1 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +7 -1
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +79 -91
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +2 -1
- package/dist/core/ingestion/pipeline-phases/processes.js +39 -4
- package/dist/core/ingestion/pipeline-phases/routes.js +27 -18
- package/dist/core/ingestion/pipeline-phases/runner.d.ts +4 -1
- package/dist/core/ingestion/pipeline-phases/runner.js +34 -14
- package/dist/core/ingestion/pipeline-phases/scan.js +82 -1
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +8 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.d.ts +123 -0
- package/dist/core/ingestion/pipeline-phases/spring-destinations.js +688 -0
- package/dist/core/ingestion/pipeline.d.ts +30 -1
- package/dist/core/ingestion/pipeline.js +52 -14
- package/dist/core/ingestion/resolve-references.js +5 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +16 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +10 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +27 -1
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +161 -13
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.d.ts +12 -18
- package/dist/core/ingestion/route-extractors/kotlin-const-resolver.js +214 -33
- package/dist/core/ingestion/route-extractors/kotlin-spring.d.ts +13 -0
- package/dist/core/ingestion/route-extractors/kotlin-spring.js +259 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.d.ts +6 -0
- package/dist/core/ingestion/route-extractors/python-decorator-handler.js +16 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +30 -1
- package/dist/core/ingestion/route-extractors/spring-shared.js +77 -9
- package/dist/core/ingestion/route-extractors/spring.js +9 -5
- package/dist/core/ingestion/scope-extractor.js +8 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +62 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +2 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +28 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +11 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +23 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +24 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +11 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +26 -6
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +11 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +29 -3
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +8 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +35 -9
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +1 -4
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +277 -9
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +2 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +7 -3
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +43 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +71 -10
- package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -0
- package/dist/core/ingestion/tree-sitter-queries.js +161 -0
- package/dist/core/ingestion/type-extractors/zig.d.ts +2 -0
- package/dist/core/ingestion/type-extractors/zig.js +17 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +40 -1
- package/dist/core/ingestion/utils/ast-helpers.js +124 -6
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +9 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +75 -14
- package/dist/core/ingestion/utils/test-file-path.d.ts +28 -0
- package/dist/core/ingestion/utils/test-file-path.js +87 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/zig.js +71 -0
- package/dist/core/ingestion/workers/parse-worker.js +85 -14
- package/dist/core/install-context.d.ts +4 -0
- package/dist/core/install-context.js +152 -0
- package/dist/core/lbug/csv-generator.d.ts +10 -1
- package/dist/core/lbug/csv-generator.js +92 -22
- package/dist/core/lbug/graph-emit-sink.d.ts +3 -2
- package/dist/core/lbug/graph-emit-sink.js +4 -2
- package/dist/core/lbug/lbug-adapter.d.ts +100 -5
- package/dist/core/lbug/lbug-adapter.js +236 -24
- package/dist/core/lbug/schema.d.ts +6 -5
- package/dist/core/lbug/schema.js +84 -22
- package/dist/core/net/url-guard.d.ts +6 -0
- package/dist/core/net/url-guard.js +147 -0
- package/dist/core/package-version.d.ts +5 -0
- package/dist/core/package-version.js +10 -0
- package/dist/core/run-analyze.d.ts +21 -4
- package/dist/core/run-analyze.js +426 -117
- package/dist/core/search/fts-indexes.d.ts +19 -1
- package/dist/core/search/fts-indexes.js +28 -1
- package/dist/core/tree-sitter/parser-loader.js +16 -0
- package/dist/core/update-cache.d.ts +39 -0
- package/dist/core/update-cache.js +141 -0
- package/dist/core/update-check.d.ts +31 -0
- package/dist/core/update-check.js +274 -0
- package/dist/mcp/local/local-backend.d.ts +27 -13
- package/dist/mcp/local/local-backend.js +148 -60
- package/dist/mcp/repository-policy.d.ts +5 -1
- package/dist/mcp/repository-policy.js +48 -4
- package/dist/mcp/resources.js +10 -1
- package/dist/mcp/server.js +8 -9
- package/dist/mcp/tools.js +32 -22
- package/dist/server/analyze-launch.d.ts +2 -0
- package/dist/server/analyze-launch.js +2 -0
- package/dist/server/analyze-worker-protocol.d.ts +6 -1
- package/dist/server/analyze-worker.d.ts +1 -0
- package/dist/server/analyze-worker.js +38 -20
- package/dist/server/api.d.ts +5 -1
- package/dist/server/api.js +105 -88
- package/dist/server/git-clone.d.ts +40 -16
- package/dist/server/git-clone.js +253 -199
- package/dist/server/grep-params.d.ts +18 -0
- package/dist/server/grep-params.js +83 -0
- package/dist/server/grep-scan.d.ts +23 -0
- package/dist/server/grep-scan.js +107 -0
- package/dist/server/grep-worker.d.ts +1 -0
- package/dist/server/grep-worker.js +12 -0
- package/dist/server/mcp-http.d.ts +8 -0
- package/dist/server/mcp-http.js +16 -1
- package/dist/server/update-controller.d.ts +29 -0
- package/dist/server/update-controller.js +82 -0
- package/dist/storage/file-lock.d.ts +15 -0
- package/dist/storage/file-lock.js +155 -0
- package/dist/storage/fs-atomic.d.ts +24 -0
- package/dist/storage/fs-atomic.js +86 -2
- package/dist/storage/global-dir.d.ts +2 -0
- package/dist/storage/global-dir.js +6 -0
- package/dist/storage/parse-cache.d.ts +45 -7
- package/dist/storage/parse-cache.js +189 -42
- package/dist/storage/parsedfile-store.d.ts +41 -60
- package/dist/storage/parsedfile-store.js +247 -171
- package/dist/storage/repo-manager.d.ts +10 -4
- package/dist/storage/repo-manager.js +35 -25
- package/dist/storage/repo-meta.d.ts +34 -0
- package/dist/storage/v8-sidecar.d.ts +48 -0
- package/dist/storage/v8-sidecar.js +347 -0
- package/dist/types/pipeline.d.ts +14 -0
- package/dist/utils/process-identity.d.ts +2 -0
- package/dist/utils/process-identity.js +35 -0
- package/package.json +10 -4
- package/scripts/assert-web-assets.mjs +35 -0
- package/scripts/build-web.js +72 -0
- package/scripts/build.js +31 -28
- package/scripts/cross-platform-tests.ts +5 -0
- package/skills/gitnexus-cli.md +5 -1
- package/web/assets/ProcessFlowModal-DAeX2BHW.js +24 -0
- package/web/assets/{abnfDiagram-QNN2D4NM-Cq2djWWe.js → abnfDiagram-PAR5IXJI-J3OdeHLl.js} +1 -1
- package/web/assets/{agent-BWAXPjC5.js → agent-BMRqXorA.js} +6 -4
- package/web/assets/architecture-7GRP2DOG-M7G3SWCO-G3sWyX6M.js +1 -0
- package/web/assets/architectureDiagram-2PNWDENW-ysKcRlGT.js +36 -0
- package/web/assets/blockDiagram-PUWGUBOA-oLXTa1lY.js +129 -0
- package/web/assets/c4Diagram-3NLNHZP5-D3iu4eC0.js +38 -0
- package/web/assets/{chunk-2SREHG4O-Dip42xOq.js → chunk-2NMSUPJH-B24w-wng.js} +1 -1
- package/web/assets/{chunk-VJFVEZTB-CX66F2ep.js → chunk-32MCUW2P-ByUyt0Sa.js} +3 -3
- package/web/assets/{chunk-4RFN2BYJ-DHHWuC-n.js → chunk-3NPNU5GP-DocZ07Sg.js} +1 -1
- package/web/assets/{chunk-XNMVGMAZ-Cg_LnPtj.js → chunk-3SMGFRGC-CAu4JRLv.js} +1 -1
- package/web/assets/{chunk-W44A43WB-BN8EQc_u.js → chunk-4CAJECRU-DRYMwG9z.js} +1 -1
- package/web/assets/chunk-4OADUZ5Q-CxrSvOwZ.js +10 -0
- package/web/assets/{chunk-DMV4VAQV-Bn6WXDSX.js → chunk-5IQCK5RY-CCMhl4so.js} +2 -2
- package/web/assets/{chunk-RRFMTAIC-CMN0wcYA.js → chunk-5MVFYWFU-Db9KvrYO.js} +1 -1
- package/web/assets/chunk-CLS4B6BI-Uvx5QNsu.js +168 -0
- package/web/assets/chunk-DZP67EKU-B3Mt380j.js +70 -0
- package/web/assets/{chunk-6L755F7B-CMhLBxi2.js → chunk-EICP7K5X-CqwE9hui.js} +1 -1
- package/web/assets/{chunk-BI6VK774-D0oaWk8V.js → chunk-GDY2UAB4-CtQQR0a8.js} +1 -1
- package/web/assets/chunk-H7VHZCWX-CE1nAmt6.js +1 -0
- package/web/assets/chunk-IJBDOHL6-BUKtY6oF.js +1 -0
- package/web/assets/{chunk-OIYT25JQ-CQ6KOZGX.js → chunk-JFFVMJIA-0fJenqia.js} +1 -1
- package/web/assets/{chunk-HNC4WDU7-DoU3KnA7.js → chunk-JZGDI5JK-BeTMSSkJ.js} +1 -1
- package/web/assets/{chunk-EQFTRU2I-1ix7TzW9.js → chunk-KD6SPIPN-Qp1Pflah.js} +1 -1
- package/web/assets/chunk-NF366YI6-CpSpya3n.js +231 -0
- package/web/assets/chunk-NUDPKBEF-CU1-BQIW.js +34 -0
- package/web/assets/{chunk-SATU7PGQ-B1zhgOvc.js → chunk-OJINMHTS-zOCQe4eI.js} +1 -1
- package/web/assets/{chunk-E5QJAATJ-dh-5CtIV.js → chunk-Q6NGPIAH-yyBomb63.js} +1 -1
- package/web/assets/chunk-QJSWEUOL-D_rf9gPD.js +128 -0
- package/web/assets/chunk-R7JDMUKV-CRoqKpD6.js +1 -0
- package/web/assets/{chunk-VE5CLXGZ-C1vB7wpY.js → chunk-RCXAM2GK-CUqrWQDV.js} +1 -1
- package/web/assets/{chunk-66DQ2XMT-CM0xjFAN.js → chunk-RT4MAWR3-zXy9-Lvt.js} +1 -1
- package/web/assets/{chunk-TZUXEDM2-B7p9AcTw.js → chunk-SFMINX4W-J2UrvMpD.js} +1 -1
- package/web/assets/{chunk-LORZLZWG-B57uGw2N.js → chunk-SLDQ463B-CHY6e_bQ.js} +2 -2
- package/web/assets/{chunk-FWYVLQTC-BgDItRzJ.js → chunk-TCEHX7R3-CXPDEVbm.js} +1 -1
- package/web/assets/{chunk-224SPVON-B8gxtXpy.js → chunk-VQC2EELJ-Dc8fIy4R.js} +1 -1
- package/web/assets/chunk-VRZKL3EH-DB3KixTQ.js +1 -0
- package/web/assets/{chunk-A7VWPJGB-B4O3oQdQ.js → chunk-VTHDQ7BV-b7FsPQZO.js} +1 -1
- package/web/assets/chunk-VY2OSTJR-Dkgc3Brg.js +2 -0
- package/web/assets/chunk-WUBWJARI-7FwILJ3k.js +2 -0
- package/web/assets/{chunk-D6VWDJW2-BxcBdZ9c.js → chunk-YBMQ5JGJ-BSnyWZmd.js} +1 -1
- package/web/assets/chunk-YDMLL4PJ-IHhMngTz.js +2 -0
- package/web/assets/chunk-Z6V44ARX-BjCEsF0Q.js +62 -0
- package/web/assets/chunk-ZJJ7VQJP-Dz089b-K.js +321 -0
- package/web/assets/chunk-ZNLK7HRR-B0iFpmW4.js +1 -0
- package/web/assets/chunk-ZQN7UHIL-Cy7KAjQt.js +1 -0
- package/web/assets/{chunk-L5GCOVLC-CE2w8Nm_.js → chunk-ZS6VBONO-DBjJO0w9.js} +2 -2
- package/web/assets/{chunk-NV3KIAZN-5yvcpMiu.js → chunk-ZUNWM646-DNRJyNPe.js} +1 -1
- package/web/assets/classDiagram-FGAMPOII-C5Ibyode.js +1 -0
- package/web/assets/classDiagram-v2-AI5RJEK4-C5Ibyode.js +1 -0
- package/web/assets/{cose-bilkent-RZA4XIPR-BHpK4Crp.js → cose-bilkent-Q72C2OJ3-DMeFXnK8.js} +1 -1
- package/web/assets/cynefin-OW5HDTMX-6OCTWOGG-vlqakYcO.js +1 -0
- package/web/assets/{cynefinDiagram-TR7LZUCG-C3Iar9lZ.js → cynefinDiagram-2OOWUY4M-BY6DZkTt.js} +1 -1
- package/web/assets/dagre-MPVFI544-DWO70fy_.js +4 -0
- package/web/assets/diagram-AE4NWXFW-f7JRVRUL.js +24 -0
- package/web/assets/{diagram-L7DVE3PN-GIRyVUtt.js → diagram-BUJID5UG-BXZv1rCS.js} +2 -2
- package/web/assets/{diagram-JCD7PQ7C-DC5-9FRr.js → diagram-C44CZ5NI-CRNfvjCq.js} +1 -1
- package/web/assets/diagram-EYOLEXXS-DZOjKQVE.js +30 -0
- package/web/assets/diagram-P7B6PWOJ-D3SQmw3_.js +3 -0
- package/web/assets/{ebnfDiagram-DRHRQJWO-D8_CI4ZF.js → ebnfDiagram-FTPZ3PV6-jKWpIDN2.js} +1 -1
- package/web/assets/erDiagram-H3ERR26V-BqJntEuJ.js +99 -0
- package/web/assets/eventmodeling-NTZA5JFV-WKSWQHFS-Bq4FqtBL.js +1 -0
- package/web/assets/flowDiagram-YHGXBVSY-Dnlk2bEu.js +1 -0
- package/web/assets/ganttDiagram-RWFTB7ED-Bl6Y1K5T.js +292 -0
- package/web/assets/gitGraph-4MIJSDKK-JH2HKYUO-B3yc4GkH.js +1 -0
- package/web/assets/gitGraphDiagram-MAR6GKOP-CkNvsrdw.js +106 -0
- package/web/assets/{index-CJDpyH-n.css → index-C2_aej58.css} +1 -1
- package/web/assets/{index-DDRie6_8.js → index-Dj3vQOHK.js} +51 -51
- package/web/assets/info-A6RAGUB7-3TX3OFWW-BM3N5_Dv.js +1 -0
- package/web/assets/infoDiagram-LV547AFH-COkFutAf.js +2 -0
- package/web/assets/{ishikawaDiagram-4JDSWWDM-DmqWtjkl.js → ishikawaDiagram-PUJQGNDS-Bb8FylSR.js} +2 -2
- package/web/assets/{journeyDiagram-QUS3FAKT-XAzVzrQW.js → journeyDiagram-EW5QJT4W-BzoHUBhM.js} +4 -4
- package/web/assets/{kanban-definition-D4L7SQKK-YurRnmYn.js → kanban-definition-JSQERAZB-Uy2Pi0yQ.js} +4 -4
- package/web/assets/katex-CZ4GXH2S-C0Fcou7U.js +257 -0
- package/web/assets/{mindmap-definition-66QP5TD6-ChrWWnil.js → mindmap-definition-VBJCLQLM-B-CnOnt_.js} +3 -3
- package/web/assets/packet-AYTQ26CC-MKII6P3Y-Bd52ZE3V.js +1 -0
- package/web/assets/{pegDiagram-YKIO5C6U-QGeQLEq2.js → pegDiagram-7WILOQTJ-D9sneKXg.js} +1 -1
- package/web/assets/pie-WAS4IAKB-6B4OPMJ5-DW5Xy69Z.js +1 -0
- package/web/assets/pieDiagram-EFA7CBSB-Dx2NQofL.js +39 -0
- package/web/assets/{quadrantDiagram-VO5QLCXA-B7098wSc.js → quadrantDiagram-WARVYA7P-DPKL9_0A.js} +3 -3
- package/web/assets/radar-RG4KPBEZ-UPTR3XUL-CkzibT2h.js +1 -0
- package/web/assets/railroad-74A4TZTK-MEFUPFMS-D9zF-mDN.js +1 -0
- package/web/assets/railroad-abnf-HS5TGJTU-R5YG2S5D-ruacjUbX.js +1 -0
- package/web/assets/railroad-ebnf-LZEXJU2U-G5QEX2L6-S1zc5OiO.js +1 -0
- package/web/assets/railroad-peg-WCYAUIDC-H5I2ZRY2-Cbcr0XzY.js +1 -0
- package/web/assets/{railroadDiagram-M77LTMSB-AXu4vxk_.js → railroadDiagram-5NIQVNLQ-DsweTo14.js} +1 -1
- package/web/assets/{requirementDiagram-RASO5HTO-B-l8InpK.js → requirementDiagram-SXREGOKZ-CXwdNSVR.js} +4 -4
- package/web/assets/{sankeyDiagram-F32LOJ6L-Kd7zjJgX.js → sankeyDiagram-VV74M2VP-CA6jtP9P.js} +3 -3
- package/web/assets/{sequenceDiagram-URATNSBD-BlcdY9DS.js → sequenceDiagram-52ZFIFDL-k_5rEbzm.js} +15 -15
- package/web/assets/src-Df5C1Nz4.js +1 -0
- package/web/assets/stateDiagram-3QAKPIVI-BejHTf31.js +1 -0
- package/web/assets/stateDiagram-v2-HN2P4RDZ-BrfoRuOc.js +1 -0
- package/web/assets/swimlanes-QLVP42QD-CQSVO5D6.js +1 -0
- package/web/assets/swimlanesDiagram-JKPDBFCN-DrWB9kcD.js +8 -0
- package/web/assets/{timeline-definition-WJXWRH4I-DUfp1R3E.js → timeline-definition-GS45XAXW-C0Ks8rPP.js} +4 -4
- package/web/assets/treeView-Q6P3EWNA-ZRJGANNQ-DmKOCo6L.js +1 -0
- package/web/assets/treemap-WGGIJYW6-K64VN5AS-DO3xY92U.js +1 -0
- package/web/assets/{vennDiagram-K3VCMQLI-Bj-FN-XS.js → vennDiagram-QIQU2ZRJ-rgPiS837.js} +3 -3
- package/web/assets/wardley-WFR3VGLG-D67OWCCH-DiDPBNft.js +1 -0
- package/web/assets/wardleyDiagram-U6YNM66N-DRVr7SPi.js +78 -0
- package/web/assets/{xychartDiagram-5VRUVLCW-CK_rbSWE.js → xychartDiagram-XJAZEDNM-COtlZzYb.js} +3 -3
- package/web/index.html +19 -17
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +0 -24
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +0 -1
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +0 -36
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +0 -132
- package/web/assets/c4Diagram-X2LASM7V-CnhoT4aV.js +0 -10
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +0 -127
- package/web/assets/chunk-5VCL7Z4A-CQ-2dYWj.js +0 -1
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +0 -1
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +0 -2
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +0 -32
- package/web/assets/chunk-KRXBNO2N-C-UNuKKf.js +0 -1
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +0 -321
- package/web/assets/chunk-LIEV3EAG-pyKGssV3.js +0 -1
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +0 -62
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +0 -10
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +0 -156
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +0 -70
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +0 -231
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +0 -2
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +0 -1
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +0 -1
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +0 -1
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +0 -1
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +0 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +0 -1
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +0 -4
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +0 -30
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +0 -3
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +0 -24
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +0 -85
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +0 -1
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +0 -1
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +0 -292
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +0 -1
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +0 -106
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +0 -1
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +0 -2
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +0 -257
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +0 -1
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +0 -1
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +0 -39
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +0 -1
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +0 -1
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +0 -1
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +0 -1
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +0 -1
- package/web/assets/src-C5sx_gMp.js +0 -1
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +0 -1
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +0 -1
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +0 -2
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +0 -8
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +0 -1
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +0 -1
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +0 -1
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +0 -78
- /package/web/assets/{sizeCapture-5GORAGP4-BEqQzsxs.js → sizeCapture-FGA5AGYP-BEqQzsxs.js} +0 -0
package/dist/core/group/sync.js
CHANGED
|
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { Buffer } from 'node:buffer';
|
|
4
4
|
import { initLbug, executeParameterized, pinRepo, getMaxResidentRepos, } from '../lbug/pool-adapter.js';
|
|
5
|
-
import { readRegistry, readRegistryStrict, } from '../../storage/repo-manager.js';
|
|
5
|
+
import { findRegistryEntryByName, canonicalizePath, registryPathEquals, readRegistry, readRegistryStrict, RegistryAmbiguousTargetError, } from '../../storage/repo-manager.js';
|
|
6
6
|
import { HttpRouteExtractor } from './extractors/http-route-extractor.js';
|
|
7
7
|
import { GraphqlExtractor } from './extractors/graphql-extractor.js';
|
|
8
8
|
import { GrpcExtractor } from './extractors/grpc-extractor.js';
|
|
@@ -13,6 +13,7 @@ import { ManifestExtractor } from './extractors/manifest-extractor.js';
|
|
|
13
13
|
import { discoverWorkspaceLinks } from './extractors/workspace-extractor.js';
|
|
14
14
|
import { buildProviderIndex, runExactMatch, runWildcardMatch } from './matching.js';
|
|
15
15
|
import { detectServiceBoundaries, assignService } from './service-boundary-detector.js';
|
|
16
|
+
import { applyDegradedFlag } from './normalization.js';
|
|
16
17
|
import { getContractRegistryPath, readContractRegistry, writeContractRegistry } from './storage.js';
|
|
17
18
|
import { markBridgeProvenanceUnknown, refreshPreservedBridgeMeta, writeBridgeUnlocked, } from './bridge-db.js';
|
|
18
19
|
import { withGroupSyncLock } from './group-lock.js';
|
|
@@ -28,9 +29,16 @@ export function stableRepoPoolId(entry, allEntries) {
|
|
|
28
29
|
}
|
|
29
30
|
return base;
|
|
30
31
|
}
|
|
32
|
+
/** Operator copy for group sync — unique `--name`, not a path in yaml. */
|
|
33
|
+
export function formatGroupSyncAmbiguousError(err) {
|
|
34
|
+
const listing = err.matches.map((m) => ` - ${m.path}`).join('\n');
|
|
35
|
+
return (`Multiple registered repos are named "${err.target}":\n${listing}\n` +
|
|
36
|
+
`Give each clone a unique registry name with \`gitnexus analyze --name\`, then re-sync. ` +
|
|
37
|
+
`Do not put a filesystem path in group.yaml.`);
|
|
38
|
+
}
|
|
31
39
|
function defaultResolveHandle(allEntries) {
|
|
32
40
|
return async (registryName, groupPath) => {
|
|
33
|
-
const e = allEntries
|
|
41
|
+
const e = findRegistryEntryByName(allEntries, registryName);
|
|
34
42
|
if (!e)
|
|
35
43
|
return null;
|
|
36
44
|
const poolId = stableRepoPoolId(e, allEntries);
|
|
@@ -120,6 +128,8 @@ export function partitionManifestWindows(links, knownRepos, maxResident) {
|
|
|
120
128
|
}
|
|
121
129
|
export async function syncGroup(config, opts) {
|
|
122
130
|
const missingRepos = [];
|
|
131
|
+
const failedRepos = [];
|
|
132
|
+
const warnings = [];
|
|
123
133
|
// Repos that ARE registered but that we could not extract from — the index
|
|
124
134
|
// would not open, or an extractor threw partway and the repo's staged
|
|
125
135
|
// contracts were dropped. Kept separate from `missingRepos` because the two
|
|
@@ -136,6 +146,9 @@ export async function syncGroup(config, opts) {
|
|
|
136
146
|
// windowed manifest resolution below (re-init + lease per window). Keyed by
|
|
137
147
|
// group path because manifest links reference repos by group path.
|
|
138
148
|
const repoHandles = new Map();
|
|
149
|
+
// Keep resolved disk paths even when extraction fails and removes the
|
|
150
|
+
// corresponding handle; workspace discovery does not need a readable index.
|
|
151
|
+
const resolvedRepoPaths = new Map();
|
|
139
152
|
// Every eviction lease this sync holds. Window loops release their own leases
|
|
140
153
|
// (bounding residency); this set is the defensive outer-finally sweep —
|
|
141
154
|
// release disposers are idempotent, so double-release is a safe no-op.
|
|
@@ -153,6 +166,11 @@ export async function syncGroup(config, opts) {
|
|
|
153
166
|
registryEntries = await readRegistryStrict();
|
|
154
167
|
const entries = registryEntries;
|
|
155
168
|
const resolve = opts?.resolveRepoHandle ?? defaultResolveHandle(entries);
|
|
169
|
+
if (!opts?.resolveRepoHandle) {
|
|
170
|
+
for (const regName of Object.values(config.repos)) {
|
|
171
|
+
findRegistryEntryByName(entries, regName);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
156
174
|
const httpEx = new HttpRouteExtractor();
|
|
157
175
|
const graphqlEx = new GraphqlExtractor();
|
|
158
176
|
const grpcEx = new GrpcExtractor();
|
|
@@ -165,6 +183,7 @@ export async function syncGroup(config, opts) {
|
|
|
165
183
|
missingRepos.push(groupPath);
|
|
166
184
|
continue;
|
|
167
185
|
}
|
|
186
|
+
resolvedRepoPaths.set(groupPath, handle.repoPath);
|
|
168
187
|
const poolId = handle.id;
|
|
169
188
|
const lbugPath = path.join(handle.storagePath, 'lbug');
|
|
170
189
|
// Staged per repo, not appended straight to `autoContracts`. Extractors
|
|
@@ -183,7 +202,7 @@ export async function syncGroup(config, opts) {
|
|
|
183
202
|
// resolution no longer reuses these executors — it re-inits + leases
|
|
184
203
|
// each repo per window (see windowed resolution below, issue #2189).
|
|
185
204
|
// Record the pool identity so windowed resolution can re-init.
|
|
186
|
-
repoHandles.set(groupPath, { poolId, lbugPath });
|
|
205
|
+
repoHandles.set(groupPath, { poolId, lbugPath, repoPath: handle.repoPath });
|
|
187
206
|
const executor = (query, params) => executeParameterized(poolId, query, params ?? {});
|
|
188
207
|
const boundaries = await detectServiceBoundaries(handle.repoPath);
|
|
189
208
|
if (config.detect.http) {
|
|
@@ -256,7 +275,8 @@ export async function syncGroup(config, opts) {
|
|
|
256
275
|
};
|
|
257
276
|
}
|
|
258
277
|
catch {
|
|
259
|
-
const
|
|
278
|
+
const resolvedHandlePath = canonicalizePath(handle.repoPath);
|
|
279
|
+
const e = entries.find((en) => registryPathEquals(canonicalizePath(en.path), resolvedHandlePath));
|
|
260
280
|
repoSnapshots[groupPath] = {
|
|
261
281
|
indexedAt: e?.indexedAt || '',
|
|
262
282
|
lastCommit: e?.lastCommit || '',
|
|
@@ -279,6 +299,8 @@ export async function syncGroup(config, opts) {
|
|
|
279
299
|
autoContracts.push(contract);
|
|
280
300
|
}
|
|
281
301
|
catch (err) {
|
|
302
|
+
if (err instanceof RegistryAmbiguousTargetError)
|
|
303
|
+
throw err;
|
|
282
304
|
// This spans initLbug plus all contract extraction for the repo. The
|
|
283
305
|
// error used to be discarded entirely, so the only trace of (say) a
|
|
284
306
|
// storage-version mismatch was an empty contracts.json and a later
|
|
@@ -290,6 +312,10 @@ export async function syncGroup(config, opts) {
|
|
|
290
312
|
// stack before logging it defeats the point.
|
|
291
313
|
logger.warn({ err, repo: regName, groupPath, lbugPath }, "⚠️ Could not read this repo's index; its contracts are omitted from this sync.");
|
|
292
314
|
unreadableRepos.push(groupPath);
|
|
315
|
+
failedRepos.push({
|
|
316
|
+
repo: groupPath,
|
|
317
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
318
|
+
});
|
|
293
319
|
// Forget the handle recorded above (present only if the failure came
|
|
294
320
|
// after initLbug). Deferred manifest resolution derives its known-repo
|
|
295
321
|
// set from this map, so leaving the entry here re-opens a repo this
|
|
@@ -309,7 +335,14 @@ export async function syncGroup(config, opts) {
|
|
|
309
335
|
if (!registryEntries)
|
|
310
336
|
registryEntries = await readRegistry();
|
|
311
337
|
for (const [groupPath, regName] of Object.entries(config.repos)) {
|
|
312
|
-
const
|
|
338
|
+
const resolvedPath = resolvedRepoPaths.get(groupPath);
|
|
339
|
+
if (resolvedPath) {
|
|
340
|
+
repoPaths.set(groupPath, resolvedPath);
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
if (opts?.resolveRepoHandle)
|
|
344
|
+
continue;
|
|
345
|
+
const e = findRegistryEntryByName(registryEntries, regName);
|
|
313
346
|
if (e)
|
|
314
347
|
repoPaths.set(groupPath, e.path);
|
|
315
348
|
}
|
|
@@ -433,7 +466,7 @@ export async function syncGroup(config, opts) {
|
|
|
433
466
|
// manifest-declared link can also emit a matchType:'exact' CrossLink with the
|
|
434
467
|
// same endpoints. Prefer the manifest version — it reflects operator intent
|
|
435
468
|
// and carries matchType:'manifest' which downstream consumers may rely on.
|
|
436
|
-
const crossLinks = dedupeCrossLinks([...manifestCrossLinks, ...matched, ...wildcard.matched]);
|
|
469
|
+
const crossLinks = dedupeCrossLinks([...manifestCrossLinks, ...matched, ...wildcard.matched]).map(applyDegradedFlag);
|
|
437
470
|
const allContracts = autoContracts;
|
|
438
471
|
const registry = {
|
|
439
472
|
version: 1,
|
|
@@ -645,10 +678,12 @@ export async function syncGroup(config, opts) {
|
|
|
645
678
|
'a lower bound rather than as complete.'
|
|
646
679
|
: 'Its metadata could NOT be marked provenance-unknown, so those answers may still ' +
|
|
647
680
|
'report as complete despite describing an older sync.';
|
|
648
|
-
|
|
681
|
+
const writeBridgeWarn = '⚠️ writeBridge failed; contracts.json is intact and is the canonical copy, ' +
|
|
649
682
|
'but bridge.lbug was not replaced: cross-repo queries may still answer from ' +
|
|
650
683
|
`the previous sync's contracts. ${provenanceNote} ` +
|
|
651
|
-
'Re-run `gitnexus group sync` to retry.'
|
|
684
|
+
'Re-run `gitnexus group sync` to retry.';
|
|
685
|
+
logger.warn({ err: msg, groupDir, bridgeProvenanceWithdrawn: withdrawn }, writeBridgeWarn);
|
|
686
|
+
warnings.push(writeBridgeWarn);
|
|
652
687
|
}
|
|
653
688
|
}
|
|
654
689
|
});
|
|
@@ -660,6 +695,9 @@ export async function syncGroup(config, opts) {
|
|
|
660
695
|
unmatched: wildcard.remaining,
|
|
661
696
|
missingRepos,
|
|
662
697
|
unreadableRepos,
|
|
698
|
+
failedRepos,
|
|
699
|
+
warnings,
|
|
700
|
+
degradedLinks: crossLinks.filter((l) => l.degraded === true).length,
|
|
663
701
|
repoSnapshots,
|
|
664
702
|
registryOutcome,
|
|
665
703
|
};
|
|
@@ -80,6 +80,19 @@ export interface CrossLink {
|
|
|
80
80
|
contractId: string;
|
|
81
81
|
matchType: MatchType;
|
|
82
82
|
confidence: number;
|
|
83
|
+
/**
|
|
84
|
+
* `true` when the PROVIDER endpoint (`to`) has no resolved graph symbol —
|
|
85
|
+
* empty `symbolUid` / `symbolRef` at sync time (e.g. the handler failed to
|
|
86
|
+
* resolve and `symbolName` degraded to the file name). The contract boundary
|
|
87
|
+
* is still proven, but the link cannot anchor a cross-impact fan-out: an
|
|
88
|
+
* empty provider uid never matches a Phase-1 symbol id, and a downstream
|
|
89
|
+
* fan-out into it has no neighbor symbol to resolve. Derived once at the
|
|
90
|
+
* sync persistence boundary (`isUnresolvedEndpoint` in normalization.ts) and
|
|
91
|
+
* re-derived by `dedupeCrossLinks` when a merge backfills the uid. Absent on
|
|
92
|
+
* fully-anchored links. Distinct from manifest `manifest::…` synthetic UIDs,
|
|
93
|
+
* which have their own `fanout_status: 'not_attempted'` channel downstream.
|
|
94
|
+
*/
|
|
95
|
+
degraded?: boolean;
|
|
83
96
|
}
|
|
84
97
|
export interface RepoSnapshot {
|
|
85
98
|
indexedAt: string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { KnowledgeGraph } from '../graph/types.js';
|
|
2
|
+
import type { FileHashDiff } from '../../storage/file-hash.js';
|
|
3
|
+
/** The FTS-backed members of `tables`. */
|
|
4
|
+
export declare const ftsTablesAmong: (tables: Iterable<string>) => Set<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Whether a surgical incremental write may reuse the persisted derived layer.
|
|
7
|
+
*
|
|
8
|
+
* Deletions disqualify it: the persisted Community/Process rows and their
|
|
9
|
+
* MEMBER_OF / STEP_IN_PROCESS edges can reference nodes that no longer exist
|
|
10
|
+
* after this run, and nothing short of re-deriving can tell which.
|
|
11
|
+
*
|
|
12
|
+
* Added or content-changed files also disqualify it: they can introduce,
|
|
13
|
+
* rename, or retarget symbols and CALLS edges that Leiden and flow extraction
|
|
14
|
+
* consume. File-deletion-only was too weak a proof that the derived graph is
|
|
15
|
+
* still valid.
|
|
16
|
+
*/
|
|
17
|
+
export declare const shouldPreservePersistedDerivedGraph: (diff: Pick<FileHashDiff, "deleted" | "added" | "changed">) => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* FTS-backed node tables that the fresh graph will WRITE rows into for
|
|
20
|
+
* `fileSet` — the inserting half of the DML.
|
|
21
|
+
*
|
|
22
|
+
* Callers must union this with a DB probe for the deleting half
|
|
23
|
+
* (`nodeTablesWithRowsForFiles`): a table whose last row in these files was
|
|
24
|
+
* just removed by the edit has nothing here, but still holds a stale row that
|
|
25
|
+
* the writeback must delete, and deleting it means taking its index down too.
|
|
26
|
+
*/
|
|
27
|
+
export declare const incrementalFtsTablesFromGraph: (graph: KnowledgeGraph, fileSet: ReadonlySet<string>) => Set<string>;
|
|
28
|
+
/**
|
|
29
|
+
* The node tables an incremental DETACH DELETE should target, given the FTS
|
|
30
|
+
* tables this run is rebuilding.
|
|
31
|
+
*
|
|
32
|
+
* Every non-FTS table (Folder, CodeElement, …) deletes as before. An FTS-backed
|
|
33
|
+
* table only deletes when its index is being rebuilt anyway, because deleting
|
|
34
|
+
* from it otherwise would mean DML against a live FTS index (#2589).
|
|
35
|
+
*/
|
|
36
|
+
export declare const nodeTablesForIncrementalDelete: (allNodeTables: readonly string[], rebuildingFtsTables: ReadonlySet<string>) => string[];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental derived-layer writeback helpers (#3016).
|
|
3
|
+
*
|
|
4
|
+
* The derived layers — Leiden communities, execution flows, and the FTS
|
|
5
|
+
* indexes — are graph-wide, so every analyze run rebuilt all three in full no
|
|
6
|
+
* matter how small the diff. A surgical incremental write can instead:
|
|
7
|
+
* - drop and rebuild only the FTS indexes whose tables hold rows in the
|
|
8
|
+
* write set (LadybugDB still cannot DML a table with a live FTS index —
|
|
9
|
+
* #2589 — so a table being written must still lose its index first);
|
|
10
|
+
* - leave the untouched tables' rows alone, so their indexes stay live;
|
|
11
|
+
* - reuse persisted Community/Process rows only when the file-hash diff is
|
|
12
|
+
* empty (no added, changed, or deleted files). Any content change can
|
|
13
|
+
* add, rename, or retarget symbols that Leiden and flow extraction
|
|
14
|
+
* consume — a no-deletion edit is not a validity proof.
|
|
15
|
+
*/
|
|
16
|
+
import { FTS_INDEXES } from '../search/fts-schema.js';
|
|
17
|
+
const FTS_TABLE_NAMES = new Set(FTS_INDEXES.map((i) => i.table));
|
|
18
|
+
/** The FTS-backed members of `tables`. */
|
|
19
|
+
export const ftsTablesAmong = (tables) => {
|
|
20
|
+
const out = new Set();
|
|
21
|
+
for (const table of tables) {
|
|
22
|
+
if (FTS_TABLE_NAMES.has(table))
|
|
23
|
+
out.add(table);
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Whether a surgical incremental write may reuse the persisted derived layer.
|
|
29
|
+
*
|
|
30
|
+
* Deletions disqualify it: the persisted Community/Process rows and their
|
|
31
|
+
* MEMBER_OF / STEP_IN_PROCESS edges can reference nodes that no longer exist
|
|
32
|
+
* after this run, and nothing short of re-deriving can tell which.
|
|
33
|
+
*
|
|
34
|
+
* Added or content-changed files also disqualify it: they can introduce,
|
|
35
|
+
* rename, or retarget symbols and CALLS edges that Leiden and flow extraction
|
|
36
|
+
* consume. File-deletion-only was too weak a proof that the derived graph is
|
|
37
|
+
* still valid.
|
|
38
|
+
*/
|
|
39
|
+
export const shouldPreservePersistedDerivedGraph = (diff) => diff.deleted.length === 0 && diff.added.length === 0 && diff.changed.length === 0;
|
|
40
|
+
/**
|
|
41
|
+
* FTS-backed node tables that the fresh graph will WRITE rows into for
|
|
42
|
+
* `fileSet` — the inserting half of the DML.
|
|
43
|
+
*
|
|
44
|
+
* Callers must union this with a DB probe for the deleting half
|
|
45
|
+
* (`nodeTablesWithRowsForFiles`): a table whose last row in these files was
|
|
46
|
+
* just removed by the edit has nothing here, but still holds a stale row that
|
|
47
|
+
* the writeback must delete, and deleting it means taking its index down too.
|
|
48
|
+
*/
|
|
49
|
+
export const incrementalFtsTablesFromGraph = (graph, fileSet) => {
|
|
50
|
+
const touched = new Set();
|
|
51
|
+
graph.forEachNode((n) => {
|
|
52
|
+
const filePath = n.properties?.filePath;
|
|
53
|
+
if (!filePath || !fileSet.has(filePath))
|
|
54
|
+
return;
|
|
55
|
+
if (FTS_TABLE_NAMES.has(n.label))
|
|
56
|
+
touched.add(n.label);
|
|
57
|
+
});
|
|
58
|
+
return touched;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The node tables an incremental DETACH DELETE should target, given the FTS
|
|
62
|
+
* tables this run is rebuilding.
|
|
63
|
+
*
|
|
64
|
+
* Every non-FTS table (Folder, CodeElement, …) deletes as before. An FTS-backed
|
|
65
|
+
* table only deletes when its index is being rebuilt anyway, because deleting
|
|
66
|
+
* from it otherwise would mean DML against a live FTS index (#2589).
|
|
67
|
+
*/
|
|
68
|
+
export const nodeTablesForIncrementalDelete = (allNodeTables, rebuildingFtsTables) => allNodeTables.filter((tableName) => !FTS_TABLE_NAMES.has(tableName) || rebuildingFtsTables.has(tableName));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { KnowledgeGraph } from '../graph/types.js';
|
|
2
|
+
export interface PersistedSpringConfigConsumerRow {
|
|
3
|
+
readonly id?: unknown;
|
|
4
|
+
readonly description?: unknown;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Find unchanged Spring consumer files whose unresolved markers changed.
|
|
8
|
+
*
|
|
9
|
+
* A removed config key also removes the old USES edge from the fresh graph, so
|
|
10
|
+
* ordinary new-graph boundary expansion cannot discover the consumer file.
|
|
11
|
+
*/
|
|
12
|
+
export declare function collectSpringConfigConsumerDriftFiles(graph: KnowledgeGraph, persistedRows: readonly PersistedSpringConfigConsumerRow[]): Set<string>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SPRING_CONFIG_UNRESOLVED_PREFIX } from '../ingestion/frameworks/spring/config-bindings.js';
|
|
2
|
+
const CONSUMER_LABELS = new Set(['Property', 'Class', 'Record']);
|
|
3
|
+
function unresolvedKeys(description) {
|
|
4
|
+
if (typeof description !== 'string')
|
|
5
|
+
return [];
|
|
6
|
+
return description
|
|
7
|
+
.split(';')
|
|
8
|
+
.map((part) => part.trim())
|
|
9
|
+
.filter((part) => part.startsWith(SPRING_CONFIG_UNRESOLVED_PREFIX))
|
|
10
|
+
.map((part) => part.slice(SPRING_CONFIG_UNRESOLVED_PREFIX.length))
|
|
11
|
+
.sort();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Find unchanged Spring consumer files whose unresolved markers changed.
|
|
15
|
+
*
|
|
16
|
+
* A removed config key also removes the old USES edge from the fresh graph, so
|
|
17
|
+
* ordinary new-graph boundary expansion cannot discover the consumer file.
|
|
18
|
+
*/
|
|
19
|
+
export function collectSpringConfigConsumerDriftFiles(graph, persistedRows) {
|
|
20
|
+
const persistedById = new Map();
|
|
21
|
+
for (const row of persistedRows) {
|
|
22
|
+
if (typeof row.id !== 'string')
|
|
23
|
+
continue;
|
|
24
|
+
persistedById.set(row.id, unresolvedKeys(row.description));
|
|
25
|
+
}
|
|
26
|
+
const driftFiles = new Set();
|
|
27
|
+
graph.forEachNode((node) => {
|
|
28
|
+
if (!CONSUMER_LABELS.has(node.label))
|
|
29
|
+
return;
|
|
30
|
+
const filePath = node.properties.filePath;
|
|
31
|
+
if (typeof filePath !== 'string')
|
|
32
|
+
return;
|
|
33
|
+
const description = node.properties.description;
|
|
34
|
+
const persisted = persistedById.get(node.id);
|
|
35
|
+
if (persisted === undefined &&
|
|
36
|
+
(typeof description !== 'string' || !description.includes(SPRING_CONFIG_UNRESOLVED_PREFIX))) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const current = unresolvedKeys(description);
|
|
40
|
+
const prior = persisted ?? [];
|
|
41
|
+
if (current.length !== prior.length || current.some((key, index) => key !== prior[index])) {
|
|
42
|
+
driftFiles.add(filePath);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return driftFiles;
|
|
46
|
+
}
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* replaced, produce a smaller KnowledgeGraph that contains:
|
|
7
7
|
*
|
|
8
8
|
* - Every node whose `properties.filePath` is in `toWriteSet`.
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* - Graph-wide Community/Process nodes unless `includeDerivedGraphWide`
|
|
10
|
+
* is false (#3016 incremental preserve). Spring metadata placeholders
|
|
11
|
+
* and `Destination` nodes are always included — their owning phase
|
|
12
|
+
* delete-alls them unconditionally before the writeback.
|
|
12
13
|
* - Every relationship where AT LEAST ONE endpoint is in the writable
|
|
13
14
|
* set above. Relationships entirely between unchanged-file nodes
|
|
14
15
|
* are skipped — their rows are still in the DB and re-inserting
|
|
@@ -48,7 +49,9 @@
|
|
|
48
49
|
* IMPORTS from the pre-pipeline DB) covers that case instead.
|
|
49
50
|
*/
|
|
50
51
|
import type { KnowledgeGraph } from '../graph/types.js';
|
|
51
|
-
export declare const extractChangedSubgraph: (fullGraph: KnowledgeGraph, toWriteSet: ReadonlySet<string
|
|
52
|
+
export declare const extractChangedSubgraph: (fullGraph: KnowledgeGraph, toWriteSet: ReadonlySet<string>, options?: {
|
|
53
|
+
includeDerivedGraphWide?: boolean;
|
|
54
|
+
}) => KnowledgeGraph;
|
|
52
55
|
/**
|
|
53
56
|
* Public — derive the EFFECTIVE write-set: `toWriteSet` expanded by one
|
|
54
57
|
* hop along every file-owned edge in the new graph that crosses the
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* replaced, produce a smaller KnowledgeGraph that contains:
|
|
7
7
|
*
|
|
8
8
|
* - Every node whose `properties.filePath` is in `toWriteSet`.
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* - Graph-wide Community/Process nodes unless `includeDerivedGraphWide`
|
|
10
|
+
* is false (#3016 incremental preserve). Spring metadata placeholders
|
|
11
|
+
* and `Destination` nodes are always included — their owning phase
|
|
12
|
+
* delete-alls them unconditionally before the writeback.
|
|
12
13
|
* - Every relationship where AT LEAST ONE endpoint is in the writable
|
|
13
14
|
* set above. Relationships entirely between unchanged-file nodes
|
|
14
15
|
* are skipped — their rows are still in the DB and re-inserting
|
|
@@ -50,8 +51,30 @@
|
|
|
50
51
|
import { createKnowledgeGraph } from '../graph/graph.js';
|
|
51
52
|
import { isSpringAutoConfigurationDeclaration, isSpringAutoConfigurationSyntheticClass, } from '../ingestion/frameworks/spring/auto-configuration.js';
|
|
52
53
|
import { isSpringAopEvidenceNode } from '../ingestion/frameworks/spring/aop.js';
|
|
54
|
+
/**
|
|
55
|
+
* `Destination` is graph-wide for the same reason as the Spring AOP evidence
|
|
56
|
+
* nodes: the layer is recomputed in full on every run and deleted in full
|
|
57
|
+
* before the writeback (`deleteAllDestinations`), so it must be re-included in
|
|
58
|
+
* full or it is simply lost.
|
|
59
|
+
*
|
|
60
|
+
* The endpoint-writability rule cannot carry it. A RESOLVED destination stores
|
|
61
|
+
* no `filePath` at all — deliberately, so an incremental delete keyed on
|
|
62
|
+
* `filePath IN [...]` cannot cut a node shared across files — and the include
|
|
63
|
+
* test below starts from exactly that property. The result was a defect in both
|
|
64
|
+
* directions: a newly added file publishing to a new topic reported
|
|
65
|
+
* `added=1, exit 0` and silently put neither the destination nor the
|
|
66
|
+
* publisher's edge into the graph, so after the first index every new topic was
|
|
67
|
+
* invisible until a full rebuild; and a destination whose last referrer stopped
|
|
68
|
+
* referring to it survived forever as an edgeless orphan still carrying
|
|
69
|
+
* `address`, the cross-repository join key.
|
|
70
|
+
*
|
|
71
|
+
* Unresolved destinations DO carry a file path and would ride the ordinary
|
|
72
|
+
* rule, but they are included here too: the delete-all removes them as well, so
|
|
73
|
+
* anything not re-included would be dropped rather than merely stale.
|
|
74
|
+
*/
|
|
53
75
|
const isGraphWideNode = (node) => node.label === 'Community' ||
|
|
54
76
|
node.label === 'Process' ||
|
|
77
|
+
node.label === 'Destination' ||
|
|
55
78
|
isSpringAopEvidenceNode(node) ||
|
|
56
79
|
isSpringAutoConfigurationSyntheticClass(node);
|
|
57
80
|
/**
|
|
@@ -108,12 +131,14 @@ const indexNodeFilePaths = (fullGraph) => {
|
|
|
108
131
|
});
|
|
109
132
|
return idx;
|
|
110
133
|
};
|
|
111
|
-
export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
|
|
134
|
+
export const extractChangedSubgraph = (fullGraph, toWriteSet, options) => {
|
|
112
135
|
const sub = createKnowledgeGraph();
|
|
113
136
|
const writableNodeIds = new Set();
|
|
137
|
+
const includeDerivedGraphWide = options?.includeDerivedGraphWide !== false;
|
|
114
138
|
fullGraph.forEachNode((n) => {
|
|
115
139
|
const filePath = n.properties?.filePath;
|
|
116
|
-
const
|
|
140
|
+
const derivedWide = includeDerivedGraphWide || (n.label !== 'Community' && n.label !== 'Process');
|
|
141
|
+
const include = (filePath && toWriteSet.has(filePath)) || (isGraphWideNode(n) && derivedWide);
|
|
117
142
|
if (include) {
|
|
118
143
|
sub.addNode(n);
|
|
119
144
|
writableNodeIds.add(n.id);
|