@vohongtho.infotech/code-intel 0.1.2 → 0.1.4
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/dist/cli/main.js +3401 -237
- package/dist/cli/main.js.map +1 -1
- package/dist/index.d.ts +386 -31
- package/dist/index.js +3940 -17
- package/dist/index.js.map +1 -1
- package/package.json +15 -12
- package/dist/call-graph/call-builder.d.ts +0 -6
- package/dist/call-graph/call-builder.d.ts.map +0 -1
- package/dist/call-graph/call-builder.js +0 -69
- package/dist/call-graph/call-builder.js.map +0 -1
- package/dist/call-graph/call-classifier.d.ts +0 -12
- package/dist/call-graph/call-classifier.d.ts.map +0 -1
- package/dist/call-graph/call-classifier.js +0 -11
- package/dist/call-graph/call-classifier.js.map +0 -1
- package/dist/call-graph/index.d.ts +0 -4
- package/dist/call-graph/index.d.ts.map +0 -1
- package/dist/call-graph/index.js +0 -3
- package/dist/call-graph/index.js.map +0 -1
- package/dist/cli/context-writer.d.ts +0 -18
- package/dist/cli/context-writer.d.ts.map +0 -1
- package/dist/cli/context-writer.js +0 -104
- package/dist/cli/context-writer.js.map +0 -1
- package/dist/cli/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/skill-writer.d.ts +0 -17
- package/dist/cli/skill-writer.d.ts.map +0 -1
- package/dist/cli/skill-writer.js +0 -249
- package/dist/cli/skill-writer.js.map +0 -1
- package/dist/clustering/community-detector.d.ts +0 -9
- package/dist/clustering/community-detector.d.ts.map +0 -1
- package/dist/clustering/community-detector.js +0 -67
- package/dist/clustering/community-detector.js.map +0 -1
- package/dist/clustering/index.d.ts +0 -3
- package/dist/clustering/index.d.ts.map +0 -1
- package/dist/clustering/index.js +0 -2
- package/dist/clustering/index.js.map +0 -1
- package/dist/flow-detection/entry-point-finder.d.ts +0 -14
- package/dist/flow-detection/entry-point-finder.d.ts.map +0 -1
- package/dist/flow-detection/entry-point-finder.js +0 -86
- package/dist/flow-detection/entry-point-finder.js.map +0 -1
- package/dist/flow-detection/index.d.ts +0 -3
- package/dist/flow-detection/index.d.ts.map +0 -1
- package/dist/flow-detection/index.js +0 -2
- package/dist/flow-detection/index.js.map +0 -1
- package/dist/graph/id-generator.d.ts +0 -4
- package/dist/graph/id-generator.d.ts.map +0 -1
- package/dist/graph/id-generator.js +0 -7
- package/dist/graph/id-generator.js.map +0 -1
- package/dist/graph/index.d.ts +0 -4
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js +0 -3
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/knowledge-graph.d.ts +0 -21
- package/dist/graph/knowledge-graph.d.ts.map +0 -1
- package/dist/graph/knowledge-graph.js +0 -126
- package/dist/graph/knowledge-graph.js.map +0 -1
- package/dist/http/app.d.ts +0 -5
- package/dist/http/app.d.ts.map +0 -1
- package/dist/http/app.js +0 -359
- package/dist/http/app.js.map +0 -1
- package/dist/http/index.d.ts +0 -2
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -2
- package/dist/http/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/inheritance/heritage-builder.d.ts +0 -9
- package/dist/inheritance/heritage-builder.d.ts.map +0 -1
- package/dist/inheritance/heritage-builder.js +0 -40
- package/dist/inheritance/heritage-builder.js.map +0 -1
- package/dist/inheritance/index.d.ts +0 -6
- package/dist/inheritance/index.d.ts.map +0 -1
- package/dist/inheritance/index.js +0 -4
- package/dist/inheritance/index.js.map +0 -1
- package/dist/inheritance/mro-walker.d.ts +0 -3
- package/dist/inheritance/mro-walker.d.ts.map +0 -1
- package/dist/inheritance/mro-walker.js +0 -80
- package/dist/inheritance/mro-walker.js.map +0 -1
- package/dist/inheritance/override-detector.d.ts +0 -4
- package/dist/inheritance/override-detector.d.ts.map +0 -1
- package/dist/inheritance/override-detector.js +0 -39
- package/dist/inheritance/override-detector.js.map +0 -1
- package/dist/languages/index.d.ts +0 -3
- package/dist/languages/index.d.ts.map +0 -1
- package/dist/languages/index.js +0 -2
- package/dist/languages/index.js.map +0 -1
- package/dist/languages/modules/c.d.ts +0 -3
- package/dist/languages/modules/c.d.ts.map +0 -1
- package/dist/languages/modules/c.js +0 -23
- package/dist/languages/modules/c.js.map +0 -1
- package/dist/languages/modules/cpp.d.ts +0 -3
- package/dist/languages/modules/cpp.d.ts.map +0 -1
- package/dist/languages/modules/cpp.js +0 -23
- package/dist/languages/modules/cpp.js.map +0 -1
- package/dist/languages/modules/csharp.d.ts +0 -3
- package/dist/languages/modules/csharp.d.ts.map +0 -1
- package/dist/languages/modules/csharp.js +0 -21
- package/dist/languages/modules/csharp.js.map +0 -1
- package/dist/languages/modules/dart.d.ts +0 -3
- package/dist/languages/modules/dart.d.ts.map +0 -1
- package/dist/languages/modules/dart.js +0 -30
- package/dist/languages/modules/dart.js.map +0 -1
- package/dist/languages/modules/go.d.ts +0 -3
- package/dist/languages/modules/go.d.ts.map +0 -1
- package/dist/languages/modules/go.js +0 -25
- package/dist/languages/modules/go.js.map +0 -1
- package/dist/languages/modules/java.d.ts +0 -3
- package/dist/languages/modules/java.d.ts.map +0 -1
- package/dist/languages/modules/java.js +0 -23
- package/dist/languages/modules/java.js.map +0 -1
- package/dist/languages/modules/kotlin.d.ts +0 -3
- package/dist/languages/modules/kotlin.d.ts.map +0 -1
- package/dist/languages/modules/kotlin.js +0 -22
- package/dist/languages/modules/kotlin.js.map +0 -1
- package/dist/languages/modules/php.d.ts +0 -3
- package/dist/languages/modules/php.d.ts.map +0 -1
- package/dist/languages/modules/php.js +0 -21
- package/dist/languages/modules/php.js.map +0 -1
- package/dist/languages/modules/python.d.ts +0 -3
- package/dist/languages/modules/python.d.ts.map +0 -1
- package/dist/languages/modules/python.js +0 -36
- package/dist/languages/modules/python.js.map +0 -1
- package/dist/languages/modules/ruby.d.ts +0 -3
- package/dist/languages/modules/ruby.d.ts.map +0 -1
- package/dist/languages/modules/ruby.js +0 -20
- package/dist/languages/modules/ruby.js.map +0 -1
- package/dist/languages/modules/rust.d.ts +0 -3
- package/dist/languages/modules/rust.d.ts.map +0 -1
- package/dist/languages/modules/rust.js +0 -23
- package/dist/languages/modules/rust.js.map +0 -1
- package/dist/languages/modules/swift.d.ts +0 -3
- package/dist/languages/modules/swift.d.ts.map +0 -1
- package/dist/languages/modules/swift.js +0 -21
- package/dist/languages/modules/swift.js.map +0 -1
- package/dist/languages/modules/typescript.d.ts +0 -4
- package/dist/languages/modules/typescript.d.ts.map +0 -1
- package/dist/languages/modules/typescript.js +0 -47
- package/dist/languages/modules/typescript.js.map +0 -1
- package/dist/languages/registry.d.ts +0 -5
- package/dist/languages/registry.d.ts.map +0 -1
- package/dist/languages/registry.js +0 -37
- package/dist/languages/registry.js.map +0 -1
- package/dist/languages/types.d.ts +0 -18
- package/dist/languages/types.d.ts.map +0 -1
- package/dist/languages/types.js +0 -2
- package/dist/languages/types.js.map +0 -1
- package/dist/mcp-server/index.d.ts +0 -2
- package/dist/mcp-server/index.d.ts.map +0 -1
- package/dist/mcp-server/index.js +0 -2
- package/dist/mcp-server/index.js.map +0 -1
- package/dist/mcp-server/server.d.ts +0 -5
- package/dist/mcp-server/server.d.ts.map +0 -1
- package/dist/mcp-server/server.js +0 -224
- package/dist/mcp-server/server.js.map +0 -1
- package/dist/multi-repo/cross-repo-search.d.ts +0 -3
- package/dist/multi-repo/cross-repo-search.d.ts.map +0 -1
- package/dist/multi-repo/cross-repo-search.js +0 -5
- package/dist/multi-repo/cross-repo-search.js.map +0 -1
- package/dist/multi-repo/group-config.d.ts +0 -10
- package/dist/multi-repo/group-config.d.ts.map +0 -1
- package/dist/multi-repo/group-config.js +0 -54
- package/dist/multi-repo/group-config.js.map +0 -1
- package/dist/multi-repo/group-manager.d.ts +0 -6
- package/dist/multi-repo/group-manager.d.ts.map +0 -1
- package/dist/multi-repo/group-manager.js +0 -42
- package/dist/multi-repo/group-manager.js.map +0 -1
- package/dist/multi-repo/index.d.ts +0 -5
- package/dist/multi-repo/index.d.ts.map +0 -1
- package/dist/multi-repo/index.js +0 -4
- package/dist/multi-repo/index.js.map +0 -1
- package/dist/parsing/ast-cache.d.ts +0 -13
- package/dist/parsing/ast-cache.d.ts.map +0 -1
- package/dist/parsing/ast-cache.js +0 -45
- package/dist/parsing/ast-cache.js.map +0 -1
- package/dist/parsing/index.d.ts +0 -5
- package/dist/parsing/index.d.ts.map +0 -1
- package/dist/parsing/index.js +0 -4
- package/dist/parsing/index.js.map +0 -1
- package/dist/parsing/parser-manager.d.ts +0 -7
- package/dist/parsing/parser-manager.d.ts.map +0 -1
- package/dist/parsing/parser-manager.js +0 -48
- package/dist/parsing/parser-manager.js.map +0 -1
- package/dist/parsing/queries/c.d.ts +0 -2
- package/dist/parsing/queries/c.d.ts.map +0 -1
- package/dist/parsing/queries/c.js +0 -32
- package/dist/parsing/queries/c.js.map +0 -1
- package/dist/parsing/queries/cpp.d.ts +0 -2
- package/dist/parsing/queries/cpp.d.ts.map +0 -1
- package/dist/parsing/queries/cpp.js +0 -45
- package/dist/parsing/queries/cpp.js.map +0 -1
- package/dist/parsing/queries/csharp.d.ts +0 -2
- package/dist/parsing/queries/csharp.d.ts.map +0 -1
- package/dist/parsing/queries/csharp.js +0 -55
- package/dist/parsing/queries/csharp.js.map +0 -1
- package/dist/parsing/queries/go.d.ts +0 -2
- package/dist/parsing/queries/go.d.ts.map +0 -1
- package/dist/parsing/queries/go.js +0 -46
- package/dist/parsing/queries/go.js.map +0 -1
- package/dist/parsing/queries/index.d.ts +0 -13
- package/dist/parsing/queries/index.d.ts.map +0 -1
- package/dist/parsing/queries/index.js +0 -13
- package/dist/parsing/queries/index.js.map +0 -1
- package/dist/parsing/queries/java.d.ts +0 -2
- package/dist/parsing/queries/java.d.ts.map +0 -1
- package/dist/parsing/queries/java.js +0 -46
- package/dist/parsing/queries/java.js.map +0 -1
- package/dist/parsing/queries/kotlin.d.ts +0 -2
- package/dist/parsing/queries/kotlin.d.ts.map +0 -1
- package/dist/parsing/queries/kotlin.js +0 -41
- package/dist/parsing/queries/kotlin.js.map +0 -1
- package/dist/parsing/queries/php.d.ts +0 -2
- package/dist/parsing/queries/php.d.ts.map +0 -1
- package/dist/parsing/queries/php.js +0 -60
- package/dist/parsing/queries/php.js.map +0 -1
- package/dist/parsing/queries/python.d.ts +0 -2
- package/dist/parsing/queries/python.d.ts.map +0 -1
- package/dist/parsing/queries/python.js +0 -47
- package/dist/parsing/queries/python.js.map +0 -1
- package/dist/parsing/queries/ruby.d.ts +0 -2
- package/dist/parsing/queries/ruby.d.ts.map +0 -1
- package/dist/parsing/queries/ruby.js +0 -36
- package/dist/parsing/queries/ruby.js.map +0 -1
- package/dist/parsing/queries/rust.d.ts +0 -2
- package/dist/parsing/queries/rust.d.ts.map +0 -1
- package/dist/parsing/queries/rust.js +0 -47
- package/dist/parsing/queries/rust.js.map +0 -1
- package/dist/parsing/queries/swift.d.ts +0 -2
- package/dist/parsing/queries/swift.d.ts.map +0 -1
- package/dist/parsing/queries/swift.js +0 -39
- package/dist/parsing/queries/swift.js.map +0 -1
- package/dist/parsing/queries/typescript.d.ts +0 -2
- package/dist/parsing/queries/typescript.d.ts.map +0 -1
- package/dist/parsing/queries/typescript.js +0 -84
- package/dist/parsing/queries/typescript.js.map +0 -1
- package/dist/parsing/query-runner.d.ts +0 -8
- package/dist/parsing/query-runner.d.ts.map +0 -1
- package/dist/parsing/query-runner.js +0 -16
- package/dist/parsing/query-runner.js.map +0 -1
- package/dist/pipeline/dag-validator.d.ts +0 -8
- package/dist/pipeline/dag-validator.d.ts.map +0 -1
- package/dist/pipeline/dag-validator.js +0 -88
- package/dist/pipeline/dag-validator.js.map +0 -1
- package/dist/pipeline/index.d.ts +0 -6
- package/dist/pipeline/index.d.ts.map +0 -1
- package/dist/pipeline/index.js +0 -4
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/orchestrator.d.ts +0 -8
- package/dist/pipeline/orchestrator.d.ts.map +0 -1
- package/dist/pipeline/orchestrator.js +0 -47
- package/dist/pipeline/orchestrator.js.map +0 -1
- package/dist/pipeline/phases/cluster-phase.d.ts +0 -3
- package/dist/pipeline/phases/cluster-phase.d.ts.map +0 -1
- package/dist/pipeline/phases/cluster-phase.js +0 -52
- package/dist/pipeline/phases/cluster-phase.js.map +0 -1
- package/dist/pipeline/phases/flow-phase.d.ts +0 -3
- package/dist/pipeline/phases/flow-phase.d.ts.map +0 -1
- package/dist/pipeline/phases/flow-phase.js +0 -92
- package/dist/pipeline/phases/flow-phase.js.map +0 -1
- package/dist/pipeline/phases/index.d.ts +0 -6
- package/dist/pipeline/phases/index.d.ts.map +0 -1
- package/dist/pipeline/phases/index.js +0 -6
- package/dist/pipeline/phases/index.js.map +0 -1
- package/dist/pipeline/phases/parse-phase.d.ts +0 -3
- package/dist/pipeline/phases/parse-phase.d.ts.map +0 -1
- package/dist/pipeline/phases/parse-phase.js +0 -288
- package/dist/pipeline/phases/parse-phase.js.map +0 -1
- package/dist/pipeline/phases/resolve-phase.d.ts +0 -3
- package/dist/pipeline/phases/resolve-phase.d.ts.map +0 -1
- package/dist/pipeline/phases/resolve-phase.js +0 -388
- package/dist/pipeline/phases/resolve-phase.js.map +0 -1
- package/dist/pipeline/phases/scan-phase.d.ts +0 -4
- package/dist/pipeline/phases/scan-phase.d.ts.map +0 -1
- package/dist/pipeline/phases/scan-phase.js +0 -119
- package/dist/pipeline/phases/scan-phase.js.map +0 -1
- package/dist/pipeline/types.d.ts +0 -19
- package/dist/pipeline/types.d.ts.map +0 -1
- package/dist/pipeline/types.js +0 -2
- package/dist/pipeline/types.js.map +0 -1
- package/dist/resolver/binding-tracker.d.ts +0 -15
- package/dist/resolver/binding-tracker.d.ts.map +0 -1
- package/dist/resolver/binding-tracker.js +0 -22
- package/dist/resolver/binding-tracker.js.map +0 -1
- package/dist/resolver/import-resolver.d.ts +0 -16
- package/dist/resolver/import-resolver.d.ts.map +0 -1
- package/dist/resolver/import-resolver.js +0 -43
- package/dist/resolver/import-resolver.js.map +0 -1
- package/dist/resolver/index.d.ts +0 -5
- package/dist/resolver/index.d.ts.map +0 -1
- package/dist/resolver/index.js +0 -3
- package/dist/resolver/index.js.map +0 -1
- package/dist/resolver/strategies/namespace-alias.d.ts +0 -3
- package/dist/resolver/strategies/namespace-alias.d.ts.map +0 -1
- package/dist/resolver/strategies/namespace-alias.js +0 -15
- package/dist/resolver/strategies/namespace-alias.js.map +0 -1
- package/dist/resolver/strategies/package-lookup.d.ts +0 -3
- package/dist/resolver/strategies/package-lookup.d.ts.map +0 -1
- package/dist/resolver/strategies/package-lookup.js +0 -10
- package/dist/resolver/strategies/package-lookup.js.map +0 -1
- package/dist/resolver/strategies/relative-path.d.ts +0 -3
- package/dist/resolver/strategies/relative-path.d.ts.map +0 -1
- package/dist/resolver/strategies/relative-path.js +0 -12
- package/dist/resolver/strategies/relative-path.js.map +0 -1
- package/dist/resolver/strategies/types.d.ts +0 -11
- package/dist/resolver/strategies/types.d.ts.map +0 -1
- package/dist/resolver/strategies/types.js +0 -2
- package/dist/resolver/strategies/types.js.map +0 -1
- package/dist/resolver/strategies/wildcard-expand.d.ts +0 -3
- package/dist/resolver/strategies/wildcard-expand.d.ts.map +0 -1
- package/dist/resolver/strategies/wildcard-expand.js +0 -8
- package/dist/resolver/strategies/wildcard-expand.js.map +0 -1
- package/dist/scope-analysis/index.d.ts +0 -3
- package/dist/scope-analysis/index.d.ts.map +0 -1
- package/dist/scope-analysis/index.js +0 -2
- package/dist/scope-analysis/index.js.map +0 -1
- package/dist/scope-analysis/scope-builder.d.ts +0 -16
- package/dist/scope-analysis/scope-builder.d.ts.map +0 -1
- package/dist/scope-analysis/scope-builder.js +0 -19
- package/dist/scope-analysis/scope-builder.js.map +0 -1
- package/dist/search/embedder.d.ts +0 -14
- package/dist/search/embedder.d.ts.map +0 -1
- package/dist/search/embedder.js +0 -45
- package/dist/search/embedder.js.map +0 -1
- package/dist/search/index.d.ts +0 -7
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js +0 -4
- package/dist/search/index.js.map +0 -1
- package/dist/search/text-search.d.ts +0 -12
- package/dist/search/text-search.d.ts.map +0 -1
- package/dist/search/text-search.js +0 -72
- package/dist/search/text-search.js.map +0 -1
- package/dist/search/vector-index.d.ts +0 -18
- package/dist/search/vector-index.d.ts.map +0 -1
- package/dist/search/vector-index.js +0 -70
- package/dist/search/vector-index.js.map +0 -1
- package/dist/shared/detection.d.ts +0 -4
- package/dist/shared/detection.d.ts.map +0 -1
- package/dist/shared/detection.js +0 -38
- package/dist/shared/detection.js.map +0 -1
- package/dist/shared/graph-types.d.ts +0 -22
- package/dist/shared/graph-types.d.ts.map +0 -1
- package/dist/shared/graph-types.js +0 -2
- package/dist/shared/graph-types.js.map +0 -1
- package/dist/shared/index.d.ts +0 -5
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/index.js +0 -3
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/languages.d.ts +0 -17
- package/dist/shared/languages.d.ts.map +0 -1
- package/dist/shared/languages.js +0 -18
- package/dist/shared/languages.js.map +0 -1
- package/dist/shared/pipeline-types.d.ts +0 -21
- package/dist/shared/pipeline-types.d.ts.map +0 -1
- package/dist/shared/pipeline-types.js +0 -2
- package/dist/shared/pipeline-types.js.map +0 -1
- package/dist/storage/csv-writer.d.ts +0 -9
- package/dist/storage/csv-writer.d.ts.map +0 -1
- package/dist/storage/csv-writer.js +0 -77
- package/dist/storage/csv-writer.js.map +0 -1
- package/dist/storage/db-manager.d.ts +0 -12
- package/dist/storage/db-manager.d.ts.map +0 -1
- package/dist/storage/db-manager.js +0 -50
- package/dist/storage/db-manager.js.map +0 -1
- package/dist/storage/graph-loader.d.ts +0 -7
- package/dist/storage/graph-loader.d.ts.map +0 -1
- package/dist/storage/graph-loader.js +0 -71
- package/dist/storage/graph-loader.js.map +0 -1
- package/dist/storage/index.d.ts +0 -10
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -7
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/metadata.d.ts +0 -15
- package/dist/storage/metadata.d.ts.map +0 -1
- package/dist/storage/metadata.js +0 -23
- package/dist/storage/metadata.js.map +0 -1
- package/dist/storage/repo-registry.d.ts +0 -15
- package/dist/storage/repo-registry.d.ts.map +0 -1
- package/dist/storage/repo-registry.js +0 -34
- package/dist/storage/repo-registry.js.map +0 -1
- package/dist/storage/schema.d.ts +0 -6
- package/dist/storage/schema.d.ts.map +0 -1
- package/dist/storage/schema.js +0 -54
- package/dist/storage/schema.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGzG,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG3I,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/search/embedder.ts","../src/multi-repo/group-registry.ts","../src/graph/knowledge-graph.ts","../src/graph/id-generator.ts","../src/parsing/parser-manager.ts","../src/parsing/query-runner.ts","../src/parsing/ast-cache.ts","../src/shared/detection.ts","../src/parsing/queries/typescript.ts","../src/languages/modules/typescript.ts","../src/parsing/queries/python.ts","../src/languages/modules/python.ts","../src/parsing/queries/java.ts","../src/languages/modules/java.ts","../src/parsing/queries/go.ts","../src/languages/modules/go.ts","../src/parsing/queries/c.ts","../src/languages/modules/c.ts","../src/parsing/queries/cpp.ts","../src/languages/modules/cpp.ts","../src/parsing/queries/csharp.ts","../src/languages/modules/csharp.ts","../src/parsing/queries/rust.ts","../src/languages/modules/rust.ts","../src/parsing/queries/php.ts","../src/languages/modules/php.ts","../src/parsing/queries/kotlin.ts","../src/languages/modules/kotlin.ts","../src/parsing/queries/ruby.ts","../src/languages/modules/ruby.ts","../src/parsing/queries/swift.ts","../src/languages/modules/swift.ts","../src/languages/modules/dart.ts","../src/languages/registry.ts","../src/resolver/binding-tracker.ts","../src/resolver/import-resolver.ts","../src/call-graph/call-builder.ts","../src/call-graph/call-classifier.ts","../src/inheritance/heritage-builder.ts","../src/inheritance/mro-walker.ts","../src/inheritance/override-detector.ts","../src/pipeline/dag-validator.ts","../src/pipeline/orchestrator.ts","../src/pipeline/phases/scan-phase.ts","../src/pipeline/phases/parse-phase.ts","../src/pipeline/phases/resolve-phase.ts","../src/pipeline/phases/cluster-phase.ts","../src/pipeline/phases/flow-phase.ts","../src/scope-analysis/scope-builder.ts","../src/clustering/community-detector.ts","../src/flow-detection/entry-point-finder.ts","../src/search/text-search.ts","../src/search/index.ts","../src/search/vector-index.ts","../src/mcp-server/server.ts","../src/storage/db-manager.ts","../src/storage/schema.ts","../src/storage/graph-loader.ts","../src/storage/repo-registry.ts","../src/storage/metadata.ts","../src/http/app.ts","../src/multi-repo/graph-from-db.ts","../src/multi-repo/group-sync.ts","../src/multi-repo/group-query.ts","../src/multi-repo/index.ts","../src/multi-repo/cross-repo-search.ts"],"names":["path","fs","os","TSLanguage","result","relativePath","__dirname","embedNodes","saveGroup"],"mappings":"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","file":"index.js","sourcesContent":["import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EmbeddedNode {\n id: string;\n name: string;\n kind: string;\n filePath: string;\n text: string;\n embedding: number[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet pipelineInstance: ((text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>) | null = null;\n\nasync function getEmbedder() {\n if (!pipelineInstance) {\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipelineInstance = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as typeof pipelineInstance;\n }\n return pipelineInstance!;\n}\n\nexport async function embedNodes(\n graph: KnowledgeGraph,\n opts: { batchSize?: number; onProgress?: (done: number, total: number) => void } = {},\n): Promise<EmbeddedNode[]> {\n const { batchSize = 32, onProgress } = opts;\n\n // Collect candidates — skip cluster/directory/flow to save time\n const candidates: { id: string; name: string; kind: string; filePath: string; text: string }[] = [];\n for (const node of graph.allNodes()) {\n if (['cluster', 'directory', 'flow'].includes(node.kind)) continue;\n const text = buildText(node);\n candidates.push({ id: node.id, name: node.name, kind: node.kind, filePath: node.filePath, text });\n }\n\n const embedder = await getEmbedder();\n const results: EmbeddedNode[] = [];\n\n for (let i = 0; i < candidates.length; i += batchSize) {\n const batch = candidates.slice(i, i + batchSize);\n const texts = batch.map((c) => c.text);\n\n for (let j = 0; j < texts.length; j++) {\n const out = await embedder(texts[j], { pooling: 'mean', normalize: true });\n results.push({ ...batch[j], embedding: Array.from(out.data) });\n }\n\n onProgress?.(Math.min(i + batchSize, candidates.length), candidates.length);\n }\n\n return results;\n}\n\nfunction buildText(node: { name: string; kind: string; filePath: string; content?: string | null; metadata?: Record<string, unknown> | null }): string {\n const parts: string[] = [`${node.kind} ${node.name}`];\n const sig = node.metadata?.signature as string | undefined;\n if (sig) parts.push(sig);\n if (node.content) parts.push(node.content.slice(0, 256));\n parts.push(node.filePath);\n return parts.join(' ').slice(0, 512);\n}\n","/**\n * Persistent store for repo groups.\n * Each group is saved as ~/.code-intel/groups/<name>.json\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { RepoGroup, GroupMember } from './types.js';\n\nconst GROUPS_DIR = path.join(os.homedir(), '.code-intel', 'groups');\n\nfunction groupFile(name: string): string {\n return path.join(GROUPS_DIR, `${name}.json`);\n}\n\nexport function loadGroup(name: string): RepoGroup | null {\n try {\n return JSON.parse(fs.readFileSync(groupFile(name), 'utf-8')) as RepoGroup;\n } catch {\n return null;\n }\n}\n\nexport function saveGroup(group: RepoGroup): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(groupFile(group.name), JSON.stringify(group, null, 2) + '\\n');\n}\n\nexport function listGroups(): RepoGroup[] {\n const groups: RepoGroup[] = [];\n try {\n for (const file of fs.readdirSync(GROUPS_DIR)) {\n if (!file.endsWith('.json') || file.endsWith('.sync.json')) continue;\n try {\n const g = JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, file), 'utf-8'),\n ) as RepoGroup;\n groups.push(g);\n } catch { /* skip malformed */ }\n }\n } catch { /* dir doesn't exist yet */ }\n return groups;\n}\n\nexport function deleteGroup(name: string): void {\n try { fs.unlinkSync(groupFile(name)); } catch { /* ignore */ }\n // also remove sync artifact\n try { fs.unlinkSync(path.join(GROUPS_DIR, `${name}.sync.json`)); } catch { /* ignore */ }\n}\n\nexport function groupExists(name: string): boolean {\n return fs.existsSync(groupFile(name));\n}\n\n/** Add or update a member (by groupPath). Returns the updated group. */\nexport function addMember(groupName: string, member: GroupMember): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n // replace if same groupPath already exists\n const idx = group.members.findIndex((m) => m.groupPath === member.groupPath);\n if (idx >= 0) {\n group.members[idx] = member;\n } else {\n group.members.push(member);\n }\n saveGroup(group);\n return group;\n}\n\n/** Remove a member by groupPath. Returns the updated group. */\nexport function removeMember(groupName: string, groupPath: string): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n const before = group.members.length;\n group.members = group.members.filter((m) => m.groupPath !== groupPath);\n if (group.members.length === before) {\n throw new Error(`No member at path \"${groupPath}\" in group \"${groupName}\".`);\n }\n saveGroup(group);\n return group;\n}\n\n// ─── Sync result persistence ──────────────────────────────────────────────────\n\nimport type { GroupSyncResult } from './types.js';\n\nexport function saveSyncResult(result: GroupSyncResult): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(\n path.join(GROUPS_DIR, `${result.groupName}.sync.json`),\n JSON.stringify(result, null, 2) + '\\n',\n );\n}\n\nexport function loadSyncResult(groupName: string): GroupSyncResult | null {\n try {\n return JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, `${groupName}.sync.json`), 'utf-8'),\n ) as GroupSyncResult;\n } catch {\n return null;\n }\n}\n","import type { CodeNode, CodeEdge, EdgeKind } from '../shared/index.js';\n\nexport interface KnowledgeGraph {\n addNode(node: CodeNode): void;\n addEdge(edge: CodeEdge): void;\n getNode(id: string): CodeNode | undefined;\n getEdge(id: string): CodeEdge | undefined;\n findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge>;\n findEdgesFrom(sourceId: string): Iterable<CodeEdge>;\n findEdgesTo(targetId: string): Iterable<CodeEdge>;\n removeNodeCascade(id: string): void;\n removeEdge(id: string): void;\n allNodes(): Iterable<CodeNode>;\n allEdges(): Iterable<CodeEdge>;\n readonly size: { nodes: number; edges: number };\n clear(): void;\n}\n\nexport function createKnowledgeGraph(): KnowledgeGraph {\n const nodes = new Map<string, CodeNode>();\n const edges = new Map<string, CodeEdge>();\n const edgesByKind = new Map<EdgeKind, Set<string>>();\n const edgesFromNode = new Map<string, Set<string>>();\n const edgesToNode = new Map<string, Set<string>>();\n\n function indexEdge(edge: CodeEdge): void {\n let kindSet = edgesByKind.get(edge.kind);\n if (!kindSet) {\n kindSet = new Set();\n edgesByKind.set(edge.kind, kindSet);\n }\n kindSet.add(edge.id);\n\n let fromSet = edgesFromNode.get(edge.source);\n if (!fromSet) {\n fromSet = new Set();\n edgesFromNode.set(edge.source, fromSet);\n }\n fromSet.add(edge.id);\n\n let toSet = edgesToNode.get(edge.target);\n if (!toSet) {\n toSet = new Set();\n edgesToNode.set(edge.target, toSet);\n }\n toSet.add(edge.id);\n }\n\n function unindexEdge(edge: CodeEdge): void {\n edgesByKind.get(edge.kind)?.delete(edge.id);\n edgesFromNode.get(edge.source)?.delete(edge.id);\n edgesToNode.get(edge.target)?.delete(edge.id);\n }\n\n return {\n addNode(node: CodeNode): void {\n nodes.set(node.id, node);\n },\n\n addEdge(edge: CodeEdge): void {\n edges.set(edge.id, edge);\n indexEdge(edge);\n },\n\n getNode(id: string): CodeNode | undefined {\n return nodes.get(id);\n },\n\n getEdge(id: string): CodeEdge | undefined {\n return edges.get(id);\n },\n\n *findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge> {\n const ids = edgesByKind.get(kind);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesFrom(sourceId: string): Iterable<CodeEdge> {\n const ids = edgesFromNode.get(sourceId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesTo(targetId: string): Iterable<CodeEdge> {\n const ids = edgesToNode.get(targetId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n removeNodeCascade(id: string): void {\n const fromEdges = edgesFromNode.get(id);\n if (fromEdges) {\n for (const edgeId of [...fromEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n const toEdges = edgesToNode.get(id);\n if (toEdges) {\n for (const edgeId of [...toEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n edgesFromNode.delete(id);\n edgesToNode.delete(id);\n nodes.delete(id);\n },\n\n removeEdge(id: string): void {\n const edge = edges.get(id);\n if (edge) {\n unindexEdge(edge);\n edges.delete(id);\n }\n },\n\n *allNodes(): Iterable<CodeNode> {\n yield* nodes.values();\n },\n\n *allEdges(): Iterable<CodeEdge> {\n yield* edges.values();\n },\n\n get size() {\n return { nodes: nodes.size, edges: edges.size };\n },\n\n clear(): void {\n nodes.clear();\n edges.clear();\n edgesByKind.clear();\n edgesFromNode.clear();\n edgesToNode.clear();\n },\n };\n}\n","import { NodeKind } from '../shared/index.js';\n\nexport function generateNodeId(kind: NodeKind, filePath: string, qualifiedName: string): string {\n return `${kind}:${filePath}:${qualifiedName}`;\n}\n\nexport function generateEdgeId(source: string, target: string, kind: string): string {\n return `${kind}:${source}->${target}`;\n}\n","import { Language } from '../shared/index.js';\nimport { Parser, Language as TSLanguage, Tree } from 'web-tree-sitter';\n\nlet initialized = false;\nconst parserCache = new Map<Language, Parser>();\nconst languageCache = new Map<Language, TSLanguage>();\n\nconst GRAMMAR_WASM_MAP: Partial<Record<Language, string>> = {\n // WASM grammar files to be downloaded/provided per language\n // For now, the parser manager provides a placeholder\n};\n\nexport async function initParser(): Promise<void> {\n if (initialized) return;\n await Parser.init();\n initialized = true;\n}\n\nexport async function getParser(lang: Language): Promise<Parser> {\n await initParser();\n let parser = parserCache.get(lang);\n if (parser) return parser;\n\n parser = new Parser();\n parserCache.set(lang, parser);\n return parser;\n}\n\nexport async function getLanguage(lang: Language): Promise<TSLanguage | null> {\n const cached = languageCache.get(lang);\n if (cached) return cached;\n\n const wasmPath = GRAMMAR_WASM_MAP[lang];\n if (!wasmPath) return null;\n\n try {\n const language = await TSLanguage.load(wasmPath);\n languageCache.set(lang, language);\n return language;\n } catch {\n return null;\n }\n}\n\nexport async function parseSource(\n lang: Language,\n source: string,\n): Promise<Tree | null> {\n const parser = await getParser(lang);\n const language = await getLanguage(lang);\n if (!language) return null;\n parser.setLanguage(language);\n return parser.parse(source);\n}\n","import { Node, Tree, Language, Query } from 'web-tree-sitter';\n\nexport interface QueryCapture {\n name: string;\n node: Node;\n text: string;\n}\n\nexport function runQuery(\n tree: Tree,\n language: Language,\n querySource: string,\n): QueryCapture[] {\n const query = new Query(language, querySource);\n const matches = query.matches(tree.rootNode);\n const captures: QueryCapture[] = [];\n\n for (const match of matches) {\n for (const capture of match.captures) {\n captures.push({\n name: capture.name,\n node: capture.node,\n text: capture.node.text,\n });\n }\n }\n\n return captures;\n}\n","import { Tree } from 'web-tree-sitter';\n\nconst DEFAULT_MAX = 500;\n\nexport class AstCache {\n private cache = new Map<string, { tree: Tree; accessedAt: number }>();\n private maxEntries: number;\n\n constructor(maxEntries = DEFAULT_MAX) {\n this.maxEntries = maxEntries;\n }\n\n get(filePath: string): Tree | undefined {\n const entry = this.cache.get(filePath);\n if (entry) {\n entry.accessedAt = Date.now();\n return entry.tree;\n }\n return undefined;\n }\n\n set(filePath: string, tree: Tree): void {\n if (this.cache.size >= this.maxEntries) {\n this.evictLRU();\n }\n this.cache.set(filePath, { tree, accessedAt: Date.now() });\n }\n\n has(filePath: string): boolean {\n return this.cache.has(filePath);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n\n private evictLRU(): void {\n let oldest: string | null = null;\n let oldestTime = Infinity;\n for (const [key, entry] of this.cache) {\n if (entry.accessedAt < oldestTime) {\n oldest = key;\n oldestTime = entry.accessedAt;\n }\n }\n if (oldest) {\n this.cache.delete(oldest);\n }\n }\n}\n","import { Language } from './languages.js';\n\nconst EXTENSION_MAP: Record<string, Language> = {\n '.ts': Language.TypeScript,\n '.tsx': Language.TypeScript,\n '.mts': Language.TypeScript,\n '.cts': Language.TypeScript,\n '.js': Language.JavaScript,\n '.jsx': Language.JavaScript,\n '.mjs': Language.JavaScript,\n '.cjs': Language.JavaScript,\n '.py': Language.Python,\n '.pyi': Language.Python,\n '.java': Language.Java,\n '.go': Language.Go,\n '.c': Language.C,\n '.h': Language.C,\n '.cpp': Language.Cpp,\n '.cxx': Language.Cpp,\n '.cc': Language.Cpp,\n '.hpp': Language.Cpp,\n '.hxx': Language.Cpp,\n '.cs': Language.CSharp,\n '.rs': Language.Rust,\n '.php': Language.PHP,\n '.kt': Language.Kotlin,\n '.kts': Language.Kotlin,\n '.rb': Language.Ruby,\n '.swift': Language.Swift,\n '.dart': Language.Dart,\n};\n\nexport function detectLanguage(filePath: string): Language | null {\n const ext = filePath.slice(filePath.lastIndexOf('.'));\n return EXTENSION_MAP[ext] ?? null;\n}\n\nexport function getSupportedExtensions(): string[] {\n return Object.keys(EXTENSION_MAP);\n}\n","export const typescriptQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Abstract class\n(abstract_class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Type alias\n(type_alias_declaration\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Enum\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Arrow function in variable\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.func.name\n value: (arrow_function))) @def.func\n\n;; Const/let/var variable (non-function)\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.var.name\n value: (_) @def.var.value)) @def.var\n\n;; Method definition\n(method_definition\n name: (property_identifier) @def.method.name) @def.method\n\n;; Public field definition\n(public_field_definition\n name: (property_identifier) @def.property.name) @def.property\n\n;; Import statement\n(import_statement\n source: (string) @imp.source) @imp\n\n;; Import specifier\n(import_specifier\n name: (identifier) @imp.name)\n\n;; Namespace import\n(namespace_import (identifier) @imp.namespace)\n\n;; Export statement\n(export_statement) @export\n\n;; Call expression — function call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Call expression — member call\n(call_expression\n function: (member_expression\n object: (_) @call.receiver\n property: (property_identifier) @call.method)) @call.member\n\n;; New expression\n(new_expression\n constructor: (identifier) @call.constructor) @call.new\n\n;; Class heritage — extends\n(class_heritage\n (extends_clause\n value: (identifier) @inherit.extends))\n\n;; Class heritage — implements\n(class_heritage\n (implements_clause\n (type_reference (type_identifier) @inherit.implements)))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nfunction resolveRelative(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const fromDir = path.dirname(fromFile);\n const cleaned = rawPath.replace(/['\"]/g, '');\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.js'];\n const resolved = workspace.resolve(fromDir, cleaned);\n if (resolved) return resolved;\n for (const ext of extensions) {\n const r = workspace.resolve(fromDir, cleaned + ext);\n if (r) return r;\n }\n return null;\n}\n\nexport const typescriptModule: LanguageModule = {\n lang: Language.TypeScript,\n fileExtensions: ['.ts', '.tsx', '.mts', '.cts'],\n queries: typescriptQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('.')) {\n return resolveRelative(rawPath, fromFile, workspace);\n }\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n return parent.type === 'export_statement' || node.type === 'export_statement';\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n\nexport const javascriptModule: LanguageModule = {\n ...typescriptModule,\n lang: Language.JavaScript,\n fileExtensions: ['.js', '.jsx', '.mjs', '.cjs'],\n};\n","export const pythonQueries = `\n;; Class definition\n(class_definition\n name: (identifier) @def.class.name) @def.class\n\n;; Function definition\n(function_definition\n name: (identifier) @def.func.name) @def.func\n\n;; Decorated definition\n(decorated_definition\n (function_definition\n name: (identifier) @def.func.name)) @def.func.decorated\n\n;; Import from\n(import_from_statement\n module_name: (dotted_name) @imp.source) @imp\n\n;; Import\n(import_statement\n name: (dotted_name) @imp.module) @imp.direct\n\n;; Import alias\n(aliased_import\n name: (dotted_name) @imp.alias.original\n alias: (identifier) @imp.alias.name)\n\n;; Call expression\n(call\n function: (identifier) @call.name) @call\n\n;; Attribute call\n(call\n function: (attribute\n object: (_) @call.receiver\n attribute: (identifier) @call.method)) @call.member\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Class base classes\n(class_definition\n superclasses: (argument_list\n (identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { pythonQueries } from '../../parsing/queries/python.js';\nimport path from 'node:path';\n\nexport const pythonModule: LanguageModule = {\n lang: Language.Python,\n fileExtensions: ['.py', '.pyi'],\n queries: pythonQueries,\n importStyle: 'namespace',\n inheritanceStrategy: 'c3',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('.');\n const fromDir = path.dirname(fromFile);\n\n // Try as relative path\n const relPath = parts.join('/');\n for (const suffix of ['/__init__.py', '.py']) {\n const r = workspace.resolve(fromDir, relPath + suffix);\n if (r) return r;\n }\n\n // Try as package from root\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n // Python: names starting with _ are private by convention\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const javaQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Field declaration\n(field_declaration\n declarator: (variable_declarator\n name: (identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (scoped_identifier) @imp.source) @imp\n\n;; Call\n(method_invocation\n name: (identifier) @call.name) @call\n\n;; Object creation\n(object_creation_expression\n type: (type_identifier) @call.constructor) @call.new\n\n;; Extends\n(superclass (type_identifier) @inherit.extends)\n\n;; Implements\n(super_interfaces\n (type_list (type_identifier) @inherit.implements))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { javaQueries } from '../../parsing/queries/java.js';\n\nexport const javaModule: LanguageModule = {\n lang: Language.Java,\n fileExtensions: ['.java'],\n queries: javaQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.java';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n const text = node.text;\n return text.includes('public');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const goQueries = `\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (field_identifier) @def.method.name) @def.method\n\n;; Type declaration — struct\n(type_declaration\n (type_spec\n name: (type_identifier) @def.struct.name\n type: (struct_type))) @def.struct\n\n;; Type declaration — interface\n(type_declaration\n (type_spec\n name: (type_identifier) @def.interface.name\n type: (interface_type))) @def.interface\n\n;; Import spec\n(import_spec\n path: (interpreted_string_literal) @imp.source) @imp\n\n;; Call expression\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Selector call\n(call_expression\n function: (selector_expression\n operand: (_) @call.receiver\n field: (field_identifier) @call.method)) @call.member\n\n;; Const declaration\n(const_declaration\n (const_spec\n name: (identifier) @def.constant.name)) @def.constant\n\n;; Var declaration\n(var_declaration\n (var_spec\n name: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { goQueries } from '../../parsing/queries/go.js';\n\nexport const goModule: LanguageModule = {\n lang: Language.Go,\n fileExtensions: ['.go'],\n queries: goQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return false;\n const first = name.text[0];\n return first === first.toUpperCase() && first !== first.toLowerCase();\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cQueries = `\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum specifier\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Typedef\n(type_definition\n declarator: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Global variable\n(declaration\n declarator: (init_declarator\n declarator: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cQueries } from '../../parsing/queries/c.js';\nimport path from 'node:path';\n\nexport const cModule: LanguageModule = {\n lang: Language.C,\n fileExtensions: ['.c', '.h'],\n queries: cQueries,\n importStyle: 'include',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // C: all non-static symbols are visible\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cppQueries = `\n;; Class specifier\n(class_specifier\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Namespace definition\n(namespace_definition\n name: (identifier) @def.namespace.name) @def.namespace\n\n;; Template declaration\n(template_declaration\n (class_specifier\n name: (type_identifier) @def.class.name)) @def.class.template\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Member call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Base class clause\n(base_class_clause\n (type_identifier) @inherit.extends)\n\n;; Enum\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cppQueries } from '../../parsing/queries/cpp.js';\nimport path from 'node:path';\n\nexport const cppModule: LanguageModule = {\n lang: Language.Cpp,\n fileExtensions: ['.cpp', '.cxx', '.cc', '.hpp', '.hxx'],\n queries: cppQueries,\n importStyle: 'include',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true;\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const csharpQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Struct declaration\n(struct_declaration\n name: (identifier) @def.struct.name) @def.struct\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Property declaration\n(property_declaration\n name: (identifier) @def.property.name) @def.property\n\n;; Namespace declaration\n(namespace_declaration\n name: (_) @def.namespace.name) @def.namespace\n\n;; Using directive\n(using_directive\n (qualified_name) @imp.source) @imp\n\n;; Invocation\n(invocation_expression\n function: (identifier) @call.name) @call\n\n;; Member invocation\n(invocation_expression\n function: (member_access_expression\n name: (identifier) @call.method)) @call.member\n\n;; Object creation\n(object_creation_expression\n type: (identifier) @call.constructor) @call.new\n\n;; Base list (extends/implements)\n(base_list\n (identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { csharpQueries } from '../../parsing/queries/csharp.js';\n\nexport const csharpModule: LanguageModule = {\n lang: Language.CSharp,\n fileExtensions: ['.cs'],\n queries: csharpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rustQueries = `\n;; Function item\n(function_item\n name: (identifier) @def.func.name) @def.func\n\n;; Struct item\n(struct_item\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum item\n(enum_item\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Trait item\n(trait_item\n name: (type_identifier) @def.trait.name) @def.trait\n\n;; Impl item\n(impl_item\n type: (type_identifier) @def.class.name) @def.impl\n\n;; Type alias\n(type_item\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Use declaration\n(use_declaration\n argument: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Method call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Const item\n(const_item\n name: (identifier) @def.constant.name) @def.constant\n\n;; Static item\n(static_item\n name: (identifier) @def.var.name) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rustQueries } from '../../parsing/queries/rust.js';\n\nexport const rustModule: LanguageModule = {\n lang: Language.Rust,\n fileExtensions: ['.rs'],\n queries: rustQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('::');\n const filePath = parts.join('/') + '.rs';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return node.text.startsWith('pub ') || node.text.startsWith('pub(');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const phpQueries = `\n;; Class declaration\n(class_declaration\n name: (name) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (name) @def.interface.name) @def.interface\n\n;; Trait declaration\n(trait_declaration\n name: (name) @def.trait.name) @def.trait\n\n;; Function definition\n(function_definition\n name: (name) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (name) @def.method.name) @def.method\n\n;; Property declaration\n(property_declaration\n (property_element\n (variable_name) @def.property.name)) @def.property\n\n;; Namespace definition\n(namespace_definition\n name: (namespace_name) @def.namespace.name) @def.namespace\n\n;; Use declaration (import)\n(namespace_use_declaration\n (namespace_use_clause\n (qualified_name) @imp.source)) @imp\n\n;; Include/require\n(include_expression\n (_) @imp.source) @imp.include\n\n;; Function call\n(function_call_expression\n function: (name) @call.name) @call\n\n;; Method call\n(member_call_expression\n name: (name) @call.method) @call.member\n\n;; Object creation\n(object_creation_expression\n (name) @call.constructor) @call.new\n\n;; Class base clause\n(base_clause\n (name) @inherit.extends)\n\n;; Class interface clause\n(class_interface_clause\n (name) @inherit.implements)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { phpQueries } from '../../parsing/queries/php.js';\n\nexport const phpModule: LanguageModule = {\n lang: Language.PHP,\n fileExtensions: ['.php'],\n queries: phpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"\\\\]/g, '/').replace(/^\\//, '');\n return workspace.findByPackage(cleaned + '.php');\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || !node.text.includes('private');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const kotlinQueries = `\n;; Class declaration\n(class_declaration\n (type_identifier) @def.class.name) @def.class\n\n;; Object declaration\n(object_declaration\n (type_identifier) @def.class.name) @def.class.object\n\n;; Interface declaration \n(class_declaration\n (type_identifier) @def.interface.name) @def.interface\n\n;; Function declaration\n(function_declaration\n (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (variable_declaration\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_header\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Navigation call\n(call_expression\n (navigation_expression\n (simple_identifier) @call.method)) @call.member\n\n;; Delegation specifier (extends/implements)\n(delegation_specifier\n (user_type\n (type_identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { kotlinQueries } from '../../parsing/queries/kotlin.js';\n\nexport const kotlinModule: LanguageModule = {\n lang: Language.Kotlin,\n fileExtensions: ['.kt', '.kts'],\n queries: kotlinQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.kt';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rubyQueries = `\n;; Class\n(class\n name: (constant) @def.class.name) @def.class\n\n;; Module\n(module\n name: (constant) @def.module.name) @def.module\n\n;; Method\n(method\n name: (identifier) @def.method.name) @def.method\n\n;; Singleton method\n(singleton_method\n name: (identifier) @def.method.name) @def.method.static\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Require\n(call\n method: (identifier) @_method\n arguments: (argument_list (string) @imp.source)\n (#match? @_method \"^require\"))\n\n;; Call\n(call\n method: (identifier) @call.name) @call\n\n;; Superclass\n(superclass\n (constant) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rubyQueries } from '../../parsing/queries/ruby.js';\n\nexport const rubyModule: LanguageModule = {\n lang: Language.Ruby,\n fileExtensions: ['.rb'],\n queries: rubyQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'mixin-aware',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned + '.rb') ?? workspace.findByPackage(cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // Ruby: methods are public by default\n },\n\n extractType(_node: Node): string | null {\n return null; // Ruby: dynamic typing\n },\n};\n","export const swiftQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct declaration\n(struct_declaration\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Protocol declaration\n(protocol_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (pattern\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Inheritance\n(inheritance_specifier\n (type_identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { swiftQueries } from '../../parsing/queries/swift.js';\n\nexport const swiftModule: LanguageModule = {\n lang: Language.Swift,\n fileExtensions: ['.swift'],\n queries: swiftQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('fileprivate');\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nexport const dartModule: LanguageModule = {\n lang: Language.Dart,\n fileExtensions: ['.dart'],\n queries: typescriptQueries, // Dart grammar fallback\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('package:')) {\n const pkg = cleaned.replace('package:', '');\n return workspace.findByPackage(pkg);\n }\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","import { Language } from '../shared/index.js';\nimport type { LanguageModule } from './types.js';\nimport { typescriptModule, javascriptModule } from './modules/typescript.js';\nimport { pythonModule } from './modules/python.js';\nimport { javaModule } from './modules/java.js';\nimport { goModule } from './modules/go.js';\nimport { cModule } from './modules/c.js';\nimport { cppModule } from './modules/cpp.js';\nimport { csharpModule } from './modules/csharp.js';\nimport { rustModule } from './modules/rust.js';\nimport { phpModule } from './modules/php.js';\nimport { kotlinModule } from './modules/kotlin.js';\nimport { rubyModule } from './modules/ruby.js';\nimport { swiftModule } from './modules/swift.js';\nimport { dartModule } from './modules/dart.js';\n\nconst MODULES: Record<Language, LanguageModule> = {\n [Language.TypeScript]: typescriptModule,\n [Language.JavaScript]: javascriptModule,\n [Language.Python]: pythonModule,\n [Language.Java]: javaModule,\n [Language.Go]: goModule,\n [Language.C]: cModule,\n [Language.Cpp]: cppModule,\n [Language.CSharp]: csharpModule,\n [Language.Rust]: rustModule,\n [Language.PHP]: phpModule,\n [Language.Kotlin]: kotlinModule,\n [Language.Ruby]: rubyModule,\n [Language.Swift]: swiftModule,\n [Language.Dart]: dartModule,\n};\n\nexport function getLanguageModule(lang: Language): LanguageModule {\n return MODULES[lang];\n}\n\nexport function getAllLanguageModules(): LanguageModule[] {\n return Object.values(MODULES);\n}\n","export interface ImportBinding {\n localName: string;\n sourcePath: string;\n exportedName: string;\n isDefault: boolean;\n isNamespace: boolean;\n}\n\nexport class BindingTracker {\n private bindings = new Map<string, Map<string, ImportBinding>>();\n\n addBinding(filePath: string, binding: ImportBinding): void {\n let fileBindings = this.bindings.get(filePath);\n if (!fileBindings) {\n fileBindings = new Map();\n this.bindings.set(filePath, fileBindings);\n }\n fileBindings.set(binding.localName, binding);\n }\n\n getBinding(filePath: string, localName: string): ImportBinding | undefined {\n return this.bindings.get(filePath)?.get(localName);\n }\n\n getFileBindings(filePath: string): ImportBinding[] {\n const fileBindings = this.bindings.get(filePath);\n return fileBindings ? [...fileBindings.values()] : [];\n }\n\n clear(): void {\n this.bindings.clear();\n }\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { LanguageModule, FileSet } from '../languages/types.js';\nimport { BindingTracker } from './binding-tracker.js';\nimport type { ImportBinding } from './binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ImportInfo {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n isNamespace: boolean;\n namespaceName?: string;\n}\n\nexport interface ImportResolutionResult {\n edges: CodeEdge[];\n bindings: BindingTracker;\n}\n\nexport function resolveImports(\n filePath: string,\n fileNodeId: string,\n imports: ImportInfo[],\n langModule: LanguageModule,\n workspace: FileSet,\n): ImportResolutionResult {\n const bindings = new BindingTracker();\n const edges: CodeEdge[] = [];\n const maxReExportHops = 5;\n\n for (const imp of imports) {\n let resolvedPath = langModule.resolveImport(imp.rawPath, filePath, workspace);\n\n // Re-export chain walking\n let hops = 0;\n const visited = new Set<string>();\n while (resolvedPath && hops < maxReExportHops && !visited.has(resolvedPath)) {\n visited.add(resolvedPath);\n hops++;\n // For now, just accept the first resolution\n break;\n }\n\n if (!resolvedPath) continue;\n\n const targetNodeId = `file:${resolvedPath}:${resolvedPath}`;\n const edge: CodeEdge = {\n id: generateEdgeId(fileNodeId, targetNodeId, 'imports'),\n source: fileNodeId,\n target: targetNodeId,\n kind: 'imports',\n weight: 0.95,\n label: imp.rawPath,\n };\n edges.push(edge);\n\n for (const localName of imp.localNames) {\n const binding: ImportBinding = {\n localName,\n sourcePath: resolvedPath,\n exportedName: localName,\n isDefault: imp.isDefault,\n isNamespace: imp.isNamespace,\n };\n bindings.addBinding(filePath, binding);\n }\n }\n\n return { edges, bindings };\n}\n","import type { CodeEdge, CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport type { BindingTracker } from '../resolver/binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\nimport type { CallSite } from './call-classifier.js';\n\ninterface ResolutionTier {\n name: string;\n confidence: number;\n resolve(callSite: CallSite): string | null;\n}\n\nexport function buildCallEdges(\n callSites: CallSite[],\n graph: KnowledgeGraph,\n bindings: BindingTracker,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const symbolIndex = buildSymbolIndex(graph);\n\n const tiers: ResolutionTier[] = [\n {\n name: 'same-file',\n confidence: 0.95,\n resolve(cs: CallSite) {\n const key = `${cs.callerFilePath}:${cs.name}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'imported',\n confidence: 0.9,\n resolve(cs: CallSite) {\n const binding = bindings.getBinding(cs.callerFilePath, cs.name);\n if (!binding) return null;\n const key = `${binding.sourcePath}:${binding.exportedName}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'global',\n confidence: 0.5,\n resolve(cs: CallSite) {\n return globalSymbolIndex.get(cs.name) ?? null;\n },\n },\n ];\n\n const globalSymbolIndex = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor'].includes(node.kind)) {\n if (!globalSymbolIndex.has(node.name)) {\n globalSymbolIndex.set(node.name, node.id);\n }\n }\n }\n\n for (const cs of callSites) {\n for (const tier of tiers) {\n const targetId = tier.resolve(cs);\n if (targetId && targetId !== cs.callerNodeId) {\n edges.push({\n id: generateEdgeId(cs.callerNodeId, targetId, 'calls'),\n source: cs.callerNodeId,\n target: targetId,\n kind: 'calls',\n weight: tier.confidence,\n label: cs.name,\n });\n break;\n }\n }\n }\n\n return edges;\n}\n\nfunction buildSymbolIndex(graph: KnowledgeGraph): Map<string, string> {\n const index = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor', 'variable'].includes(node.kind)) {\n const key = `${node.filePath}:${node.name}`;\n index.set(key, node.id);\n }\n }\n return index;\n}\n","export type CallKind = 'free' | 'member' | 'constructor';\n\nexport interface CallSite {\n callerNodeId: string;\n callerFilePath: string;\n name: string;\n receiverText?: string;\n kind: CallKind;\n line: number;\n argCount: number;\n}\n\nexport function classifyCall(\n name: string,\n hasReceiver: boolean,\n isNew: boolean,\n): CallKind {\n if (isNew) return 'constructor';\n if (hasReceiver) return 'member';\n if (name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase()) {\n return 'constructor';\n }\n return 'free';\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface HeritageInfo {\n classNodeId: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\nexport function buildHeritageEdges(\n heritages: HeritageInfo[],\n graph: KnowledgeGraph,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const classIndex = new Map<string, string>();\n\n for (const node of graph.allNodes()) {\n if (['class', 'interface', 'struct', 'trait'].includes(node.kind)) {\n classIndex.set(node.name, node.id);\n }\n }\n\n for (const h of heritages) {\n for (const name of h.extendsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'extends'),\n source: h.classNodeId,\n target: targetId,\n kind: 'extends',\n weight: 1.0,\n label: `extends ${name}`,\n });\n }\n }\n\n for (const name of h.implementsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'implements'),\n source: h.classNodeId,\n target: targetId,\n kind: 'implements',\n weight: 1.0,\n label: `implements ${name}`,\n });\n }\n }\n }\n\n return edges;\n}\n","export type MroStrategy = 'depth-first' | 'c3' | 'mixin-aware' | 'none';\n\nexport function computeMRO(\n classId: string,\n parentMap: Map<string, string[]>,\n strategy: MroStrategy,\n): string[] {\n switch (strategy) {\n case 'depth-first':\n return depthFirstMRO(classId, parentMap);\n case 'c3':\n return c3Linearize(classId, parentMap);\n case 'mixin-aware':\n return mixinAwareMRO(classId, parentMap);\n case 'none':\n return [classId];\n }\n}\n\nfunction depthFirstMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n const stack = [classId];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (visited.has(current)) continue;\n visited.add(current);\n result.push(current);\n const parents = parentMap.get(current) ?? [];\n for (let i = parents.length - 1; i >= 0; i--) {\n stack.push(parents[i]);\n }\n }\n\n return result;\n}\n\nfunction c3Linearize(classId: string, parentMap: Map<string, string[]>): string[] {\n const cache = new Map<string, string[]>();\n const inProgress = new Set<string>();\n\n function linearize(cls: string): string[] {\n if (cache.has(cls)) return cache.get(cls)!;\n if (inProgress.has(cls)) return [cls]; // cycle detected\n\n inProgress.add(cls);\n const parents = parentMap.get(cls) ?? [];\n\n if (parents.length === 0) {\n const result = [cls];\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n const parentLinearizations = parents.map((p) => linearize(p));\n const sequences = [...parentLinearizations, parents];\n const result = [cls];\n\n while (sequences.some((s) => s.length > 0)) {\n let found = false;\n for (const seq of sequences) {\n if (seq.length === 0) continue;\n const head = seq[0];\n const inTail = sequences.some((s) => s.indexOf(head) > 0);\n if (!inTail) {\n result.push(head);\n for (const s of sequences) {\n const idx = s.indexOf(head);\n if (idx >= 0) s.splice(idx, 1);\n }\n found = true;\n break;\n }\n }\n if (!found) break; // inconsistent hierarchy\n }\n\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n return linearize(classId);\n}\n\nfunction mixinAwareMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n // Simplified: prepend → direct → included\n return depthFirstMRO(classId, parentMap);\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport function detectOverrides(graph: KnowledgeGraph): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const methodsByOwner = new Map<string, Map<string, string>>();\n\n // Build owner → methods map\n for (const edge of graph.findEdgesByKind('has_member')) {\n const member = graph.getNode(edge.target);\n if (member && member.kind === 'method') {\n let methods = methodsByOwner.get(edge.source);\n if (!methods) {\n methods = new Map();\n methodsByOwner.set(edge.source, methods);\n }\n methods.set(member.name, member.id);\n }\n }\n\n // Check extends edges\n for (const extendsEdge of graph.findEdgesByKind('extends')) {\n const childMethods = methodsByOwner.get(extendsEdge.source);\n const parentMethods = methodsByOwner.get(extendsEdge.target);\n if (!childMethods || !parentMethods) continue;\n\n for (const [methodName, childMethodId] of childMethods) {\n const parentMethodId = parentMethods.get(methodName);\n if (parentMethodId) {\n edges.push({\n id: generateEdgeId(childMethodId, parentMethodId, 'overrides'),\n source: childMethodId,\n target: parentMethodId,\n kind: 'overrides',\n weight: 1.0,\n label: `overrides ${methodName}`,\n });\n }\n }\n }\n\n return edges;\n}\n","import type { Phase } from './types.js';\n\nexport interface ValidationError {\n type: 'duplicate' | 'missing-dep' | 'cycle';\n message: string;\n}\n\nexport function validateDAG(phases: Phase[]): ValidationError[] {\n const errors: ValidationError[] = [];\n const names = new Set<string>();\n\n // Check duplicates\n for (const phase of phases) {\n if (names.has(phase.name)) {\n errors.push({ type: 'duplicate', message: `Duplicate phase name: ${phase.name}` });\n }\n names.add(phase.name);\n }\n\n // Check missing deps\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n if (!names.has(dep)) {\n errors.push({\n type: 'missing-dep',\n message: `Phase \"${phase.name}\" depends on missing phase \"${dep}\"`,\n });\n }\n }\n }\n\n // Check cycles using DFS\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n\n function dfs(name: string, path: string[]): boolean {\n if (visiting.has(name)) {\n const cycleStart = path.indexOf(name);\n const cycle = path.slice(cycleStart).concat(name);\n errors.push({ type: 'cycle', message: `Cycle detected: ${cycle.join(' → ')}` });\n return true;\n }\n if (visited.has(name)) return false;\n\n visiting.add(name);\n path.push(name);\n\n const phase = phaseMap.get(name);\n if (phase) {\n for (const dep of phase.dependencies) {\n if (dfs(dep, path)) return true;\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n path.pop();\n return false;\n }\n\n for (const phase of phases) {\n if (!visited.has(phase.name)) {\n dfs(phase.name, []);\n }\n }\n\n return errors;\n}\n\nexport function topologicalSort(phases: Phase[]): Phase[] {\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n const inDegree = new Map<string, number>();\n const adjList = new Map<string, string[]>();\n\n for (const phase of phases) {\n inDegree.set(phase.name, 0);\n adjList.set(phase.name, []);\n }\n\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n adjList.get(dep)?.push(phase.name);\n inDegree.set(phase.name, (inDegree.get(phase.name) ?? 0) + 1);\n }\n }\n\n const queue: string[] = [];\n for (const [name, degree] of inDegree) {\n if (degree === 0) queue.push(name);\n }\n\n const sorted: Phase[] = [];\n while (queue.length > 0) {\n const current = queue.shift()!;\n sorted.push(phaseMap.get(current)!);\n for (const neighbor of adjList.get(current) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n return sorted;\n}\n","import type { Phase, PhaseResult, PipelineContext } from './types.js';\nimport { validateDAG, topologicalSort } from './dag-validator.js';\n\nexport interface PipelineRunResult {\n success: boolean;\n results: Map<string, PhaseResult>;\n totalDuration: number;\n}\n\nexport async function runPipeline(\n phases: Phase[],\n context: PipelineContext,\n): Promise<PipelineRunResult> {\n const errors = validateDAG(phases);\n if (errors.length > 0) {\n throw new Error(`Pipeline validation failed:\\n${errors.map((e) => e.message).join('\\n')}`);\n }\n\n const sorted = topologicalSort(phases);\n const results = new Map<string, PhaseResult>();\n const startTime = Date.now();\n let success = true;\n\n for (const phase of sorted) {\n context.onProgress?.(phase.name, 'running');\n const phaseStart = Date.now();\n\n try {\n const depResults = new Map<string, PhaseResult>();\n for (const dep of phase.dependencies) {\n const depResult = results.get(dep);\n if (depResult) depResults.set(dep, depResult);\n }\n\n const result = await phase.execute(context, depResults);\n results.set(phase.name, result);\n context.onProgress?.(phase.name, result.status);\n\n if (result.status === 'failed') {\n success = false;\n break;\n }\n } catch (err) {\n const result: PhaseResult = {\n status: 'failed',\n duration: Date.now() - phaseStart,\n message: err instanceof Error ? err.message : String(err),\n };\n results.set(phase.name, result);\n context.onProgress?.(phase.name, 'failed');\n success = false;\n break;\n }\n }\n\n return {\n success,\n results,\n totalDuration: Date.now() - startTime,\n };\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, getSupportedExtensions } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId } from '../../graph/id-generator.js';\n\nconst IGNORED_DIRS = new Set([\n 'node_modules', '.git', '.svn', '.hg', 'dist', 'dist-tests', 'build', 'out',\n '__pycache__', '.tox', '.pytest_cache', '.mypy_cache',\n 'vendor', 'target', '.code-intel', 'coverage', '.next',\n '.turbo', '.cache', 'tmp', 'temp', '.parcel-cache',\n]);\n\n/**\n * Load extra ignore patterns from .codeintelignore in the workspace root.\n * Format: one glob/dir name per line, # for comments.\n */\nfunction loadIgnorePatterns(workspaceRoot: string): Set<string> {\n try {\n const raw = fs.readFileSync(path.join(workspaceRoot, '.codeintelignore'), 'utf-8');\n const extras = new Set<string>();\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) extras.add(trimmed);\n }\n return extras;\n } catch {\n return new Set();\n }\n}\n\nconst IGNORED_EXTENSIONS = new Set(['.d.ts', '.js.map', '.d.ts.map']);\n\nexport const scanPhase: Phase = {\n name: 'scan',\n dependencies: [],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const extensions = new Set(getSupportedExtensions());\n const filePaths: string[] = [];\n const extraIgnore = loadIgnorePatterns(context.workspaceRoot);\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith('.') && entry.isDirectory()) continue;\n if (IGNORED_DIRS.has(entry.name) && entry.isDirectory()) continue;\n if (extraIgnore.has(entry.name) && entry.isDirectory()) continue;\n\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n const fullName = entry.name;\n // Skip declaration files and maps\n if (fullName.endsWith('.d.ts') || fullName.endsWith('.js.map') || fullName.endsWith('.d.ts.map')) continue;\n if (extensions.has(ext)) {\n filePaths.push(fullPath);\n }\n }\n }\n }\n\n walk(context.workspaceRoot);\n context.filePaths.push(...filePaths);\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${filePaths.length} source files`,\n };\n },\n};\n\nexport const structurePhase: Phase = {\n name: 'structure',\n dependencies: ['scan'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const dirs = new Set<string>();\n\n for (const filePath of context.filePaths) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const lang = detectLanguage(filePath);\n\n context.graph.addNode({\n id: generateNodeId('file', relativePath, relativePath),\n kind: 'file',\n name: path.basename(filePath),\n filePath: relativePath,\n metadata: lang ? { language: lang } : undefined,\n });\n\n // Collect directories\n let dir = path.dirname(relativePath);\n while (dir && dir !== '.' && dir !== '') {\n if (dirs.has(dir)) break;\n dirs.add(dir);\n dir = path.dirname(dir);\n }\n }\n\n for (const dir of dirs) {\n context.graph.addNode({\n id: generateNodeId('directory', dir, dir),\n kind: 'directory',\n name: path.basename(dir),\n filePath: dir,\n });\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${context.filePaths.length} file nodes, ${dirs.size} directory nodes`,\n };\n },\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, Language } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\nimport type { CodeNode, CodeEdge } from '../../shared/index.js';\n\nexport const parsePhase: Phase = {\n name: 'parse',\n dependencies: ['structure'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n let symbolCount = 0;\n\n for (const filePath of context.filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) {\n if (context.verbose) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n console.log(` [parse] skipped (no parser): ${relativePath}`);\n }\n continue;\n }\n\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n // Store content on file node for search\n const fileNode = context.graph.getNode(fileNodeId);\n if (fileNode) {\n fileNode.content = source.slice(0, 2000);\n }\n\n const nodes: CodeNode[] = [];\n const edges: CodeEdge[] = [];\n const seen = new Set<string>();\n\n const lines = source.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip comments\n if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('*') || trimmed.startsWith('/*')) continue;\n\n const extracted = extractSymbol(trimmed, lang, i + 1, relativePath);\n if (!extracted) continue;\n if (seen.has(extracted.name + ':' + extracted.kind)) continue;\n seen.add(extracted.name + ':' + extracted.kind);\n\n const nodeId = generateNodeId(extracted.kind, relativePath, extracted.name);\n nodes.push({\n id: nodeId,\n kind: extracted.kind,\n name: extracted.name,\n filePath: relativePath,\n startLine: i + 1,\n exported: extracted.exported,\n content: extractBlock(lines, i, 20),\n });\n edges.push({\n id: generateEdgeId(fileNodeId, nodeId, 'contains'),\n source: fileNodeId,\n target: nodeId,\n kind: 'contains',\n weight: 1.0,\n });\n\n // has_member edge for methods inside classes\n if (extracted.ownerName) {\n const ownerId = generateNodeId('class', relativePath, extracted.ownerName);\n if (context.graph.getNode(ownerId) || nodes.some((n) => n.id === ownerId)) {\n edges.push({\n id: generateEdgeId(ownerId, nodeId, 'has_member'),\n source: ownerId,\n target: nodeId,\n kind: 'has_member',\n weight: 1.0,\n });\n }\n }\n\n symbolCount++;\n }\n\n for (const n of nodes) context.graph.addNode(n);\n for (const e of edges) context.graph.addEdge(e);\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Extracted ${symbolCount} symbols`,\n };\n },\n};\n\ninterface ExtractedSymbol {\n kind: CodeNode['kind'];\n name: string;\n exported: boolean;\n ownerName?: string;\n}\n\nfunction extractSymbol(\n line: string,\n lang: Language,\n _lineNum: number,\n _filePath: string,\n): ExtractedSymbol | null {\n // --- TypeScript/JavaScript ---\n if (lang === Language.TypeScript || lang === Language.JavaScript) {\n const func = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:async\\s+)?function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('export') };\n\n const arrowFunc = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?\\(/);\n if (arrowFunc) return { kind: 'function', name: arrowFunc[1], exported: line.includes('export') };\n\n const arrowFunc2 = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?(?:\\([^)]*\\)|[a-zA-Z_]\\w*)\\s*=>/);\n if (arrowFunc2) return { kind: 'function', name: arrowFunc2[1], exported: line.includes('export') };\n\n const cls = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('export') };\n\n const iface = line.match(/^(?:export\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('export') };\n\n const enumM = line.match(/^(?:export\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('export') };\n\n const typeAlias = line.match(/^(?:export\\s+)?type\\s+(\\w+)\\s*[=<]/);\n if (typeAlias) return { kind: 'type_alias', name: typeAlias[1], exported: line.includes('export') };\n\n const constVar = line.match(/^(?:export\\s+)?const\\s+(\\w+)\\s*(?::\\s*\\w[^=]*)?\\s*=/);\n if (constVar && /^[A-Z_]+$/.test(constVar[1])) {\n return { kind: 'constant', name: constVar[1], exported: line.includes('export') };\n }\n\n const method = line.match(/^(?:(?:public|private|protected|static|async|readonly)\\s+)*(\\w+)\\s*\\(/);\n if (method && !['if', 'for', 'while', 'switch', 'catch', 'return', 'constructor'].includes(method[1])) {\n if (method[1] === 'constructor') {\n return { kind: 'constructor', name: 'constructor', exported: false };\n }\n }\n }\n\n // --- Python ---\n if (lang === Language.Python) {\n const func = line.match(/^(?:async\\s+)?def\\s+(\\w+)/);\n if (func) return { kind: func[1].startsWith('__') ? 'method' : 'function', name: func[1], exported: !func[1].startsWith('_') };\n\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n }\n\n // --- Java ---\n if (lang === Language.Java) {\n const cls = line.match(/(?:public|private|protected)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected)\\s+(?:static\\s+)?(?:[\\w<>\\[\\]]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n }\n\n // --- Go ---\n if (lang === Language.Go) {\n const func = line.match(/^func\\s+(\\w+)\\s*\\(/);\n if (func) return { kind: 'function', name: func[1], exported: func[1][0] === func[1][0].toUpperCase() };\n\n const method = line.match(/^func\\s+\\([^)]+\\)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: method[1][0] === method[1][0].toUpperCase() };\n\n const structM = line.match(/^type\\s+(\\w+)\\s+struct\\b/);\n if (structM) return { kind: 'struct', name: structM[1], exported: structM[1][0] === structM[1][0].toUpperCase() };\n\n const ifaceM = line.match(/^type\\s+(\\w+)\\s+interface\\b/);\n if (ifaceM) return { kind: 'interface', name: ifaceM[1], exported: ifaceM[1][0] === ifaceM[1][0].toUpperCase() };\n }\n\n // --- Rust ---\n if (lang === Language.Rust) {\n const func = line.match(/^(?:pub\\s+)?(?:async\\s+)?fn\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.startsWith('pub') };\n\n const structM = line.match(/^(?:pub\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.startsWith('pub') };\n\n const enumM = line.match(/^(?:pub\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.startsWith('pub') };\n\n const traitM = line.match(/^(?:pub\\s+)?trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: line.startsWith('pub') };\n\n const implM = line.match(/^impl(?:<[^>]*>)?\\s+(\\w+)/);\n if (implM) return { kind: 'class', name: implM[1], exported: false };\n }\n\n // --- C/C++ ---\n if (lang === Language.C || lang === Language.Cpp) {\n const cls = line.match(/^(?:class|struct)\\s+(\\w+)/);\n if (cls) return { kind: lang === Language.Cpp ? 'class' : 'struct', name: cls[1], exported: true };\n\n const nsM = line.match(/^namespace\\s+(\\w+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n\n const func = line.match(/^(?:[\\w:*&<>\\[\\]]+\\s+)+(\\w+)\\s*\\([^;]*$/);\n if (func && !['if', 'for', 'while', 'switch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: true };\n }\n }\n\n // --- C# ---\n if (lang === Language.CSharp) {\n const cls = line.match(/(?:public|internal|private)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:partial\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected|internal)\\s+(?:static\\s+)?(?:async\\s+)?(?:[\\w<>\\[\\]?]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n\n const nsM = line.match(/namespace\\s+([\\w.]+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n }\n\n // --- PHP ---\n if (lang === Language.PHP) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const func = line.match(/(?:public|private|protected|static\\s+)*function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('public') || !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: true };\n\n const traitM = line.match(/trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: true };\n }\n\n // --- Kotlin ---\n if (lang === Language.Kotlin) {\n const cls = line.match(/(?:data\\s+|sealed\\s+|abstract\\s+|open\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:suspend\\s+)?fun\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n\n const obj = line.match(/object\\s+(\\w+)/);\n if (obj) return { kind: 'class', name: obj[1], exported: !line.includes('private') };\n }\n\n // --- Ruby ---\n if (lang === Language.Ruby) {\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const modM = line.match(/^module\\s+(\\w+)/);\n if (modM) return { kind: 'module', name: modM[1], exported: true };\n\n const method = line.match(/^(?:def\\s+(?:self\\.)?(\\w+))/);\n if (method) return { kind: 'method', name: method[1], exported: true };\n }\n\n // --- Swift ---\n if (lang === Language.Swift) {\n const cls = line.match(/(?:public\\s+|open\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: !line.includes('private') };\n\n const proto = line.match(/(?:public\\s+)?protocol\\s+(\\w+)/);\n if (proto) return { kind: 'interface', name: proto[1], exported: !line.includes('private') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:public\\s+|private\\s+|internal\\s+)?(?:static\\s+)?func\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n }\n\n // --- Dart ---\n if (lang === Language.Dart) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n\n const func = line.match(/^(?:\\w+\\s+)?(\\w+)\\s*\\(/);\n if (func && !['if', 'for', 'while', 'switch', 'catch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: !func[1].startsWith('_') };\n }\n }\n\n return null;\n}\n\nfunction extractBlock(lines: string[], startIdx: number, maxLines: number): string {\n const end = Math.min(startIdx + maxLines, lines.length);\n return lines.slice(startIdx, end).join('\\n');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\nimport type { CodeEdge } from '../../shared/index.js';\nimport { getLanguageModule } from '../../languages/registry.js';\n\ninterface ParsedImport {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n line: number;\n}\n\ninterface ParsedCall {\n name: string;\n receiverText?: string;\n isNew: boolean;\n line: number;\n}\n\ninterface ParsedHeritage {\n className: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\nexport const resolvePhase: Phase = {\n name: 'resolve',\n dependencies: ['parse'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph, workspaceRoot, filePaths } = context;\n\n let importEdges = 0;\n let callEdges = 0;\n let heritageEdges = 0;\n\n // Build file index for import resolution\n const fileIndex = new Map<string, string>();\n for (const fp of filePaths) {\n const rel = path.relative(workspaceRoot, fp);\n fileIndex.set(rel, fp);\n // Index without extension\n const noExt = rel.replace(/\\.\\w+$/, '');\n if (!fileIndex.has(noExt)) fileIndex.set(noExt, fp);\n // Index basename\n const base = path.basename(rel, path.extname(rel));\n if (!fileIndex.has(base)) fileIndex.set(base, fp);\n }\n\n // Build symbol index: name → nodeId\n const symbolIndex = new Map<string, string>();\n const fileSymbolIndex = new Map<string, Map<string, string>>();\n for (const node of graph.allNodes()) {\n if (['function', 'class', 'interface', 'method', 'enum', 'type_alias', 'variable', 'constant', 'struct', 'trait'].includes(node.kind)) {\n symbolIndex.set(node.name, node.id);\n let fileMap = fileSymbolIndex.get(node.filePath);\n if (!fileMap) {\n fileMap = new Map();\n fileSymbolIndex.set(node.filePath, fileMap);\n }\n fileMap.set(node.name, node.id);\n }\n }\n\n // Process each file for imports, calls, heritage\n for (const filePath of filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) continue;\n\n const relativePath = path.relative(workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n const lines = source.split('\\n');\n const imports = extractImports(lines, lang === 'python');\n const calls = extractCalls(lines);\n const heritages = extractHeritage(lines);\n\n // Resolve imports → IMPORTS edges\n for (const imp of imports) {\n const cleaned = imp.rawPath.replace(/['\"]/g, '');\n let resolvedRelPath: string | null = null;\n\n if (cleaned.startsWith('.')) {\n // Relative import — strip .js/.jsx since TS imports use .js but files are .ts\n const cleanedNoJs = cleaned.replace(/\\.(js|jsx)$/, '');\n const fromDir = path.dirname(relativePath);\n for (const ext of ['', '.ts', '.tsx', '.js', '.jsx', '.py', '.java', '.go', '/index.ts', '/index.js']) {\n const candidate = path.join(fromDir, cleanedNoJs + ext);\n const normalized = path.normalize(candidate);\n if (fileIndex.has(normalized)) {\n // Use the absolute path from the index to derive the canonical relative path\n const absPath = fileIndex.get(normalized)!;\n resolvedRelPath = path.relative(workspaceRoot, absPath);\n break;\n }\n }\n } else {\n // Package import — try to find in file index\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go']) {\n if (fileIndex.has(cleaned + ext)) {\n resolvedRelPath = cleaned + ext;\n break;\n }\n }\n // Try path-based\n const asPath = cleaned.replace(/\\./g, '/');\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go', '/index.ts', '/__init__.py']) {\n if (fileIndex.has(asPath + ext)) {\n resolvedRelPath = asPath + ext;\n break;\n }\n }\n }\n\n if (resolvedRelPath) {\n const targetFileId = generateNodeId('file', resolvedRelPath, resolvedRelPath);\n if (graph.getNode(targetFileId)) {\n const edgeId = generateEdgeId(fileNodeId, targetFileId, 'imports');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: fileNodeId,\n target: targetFileId,\n kind: 'imports',\n weight: 0.95,\n label: cleaned,\n });\n importEdges++;\n }\n }\n }\n }\n\n // Resolve calls → CALLS edges\n const localSymbols = fileSymbolIndex.get(relativePath);\n for (const call of calls) {\n // Tier 1: same file\n let targetId = localSymbols?.get(call.name);\n let confidence = 0.95;\n\n if (!targetId) {\n // Tier 2: global\n targetId = symbolIndex.get(call.name);\n confidence = 0.5;\n }\n\n if (targetId) {\n // Find the caller (enclosing function)\n const callerNodeId = findEnclosingFunction(graph, relativePath, call.line);\n const sourceId = callerNodeId ?? fileNodeId;\n\n if (sourceId !== targetId) {\n const edgeId = generateEdgeId(sourceId, targetId, 'calls');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: sourceId,\n target: targetId,\n kind: 'calls',\n weight: confidence,\n label: call.name,\n });\n callEdges++;\n }\n }\n }\n }\n\n // Heritage → EXTENDS/IMPLEMENTS edges\n for (const h of heritages) {\n const classNodeId = localSymbols?.get(h.className) ?? symbolIndex.get(h.className);\n if (!classNodeId) continue;\n\n for (const ext of h.extendsNames) {\n const targetId = symbolIndex.get(ext);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'extends');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: classNodeId,\n target: targetId,\n kind: 'extends',\n weight: 1.0,\n label: `extends ${ext}`,\n });\n heritageEdges++;\n }\n }\n }\n\n for (const impl of h.implementsNames) {\n const targetId = symbolIndex.get(impl);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'implements');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: classNodeId,\n target: targetId,\n kind: 'implements',\n weight: 1.0,\n label: `implements ${impl}`,\n });\n heritageEdges++;\n }\n }\n }\n }\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Resolved ${importEdges} imports, ${callEdges} calls, ${heritageEdges} heritage edges. Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`,\n };\n },\n};\n\nfunction extractImports(lines: string[], isPython: boolean): ParsedImport[] {\n const imports: ParsedImport[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // TypeScript/JavaScript: import ... from '...'\n const tsImport = line.match(/import\\s+.*?from\\s+['\"]([^'\"]+)['\"]/);\n if (tsImport) {\n const names: string[] = [];\n const namedMatch = line.match(/\\{([^}]+)\\}/);\n if (namedMatch) {\n names.push(...namedMatch[1].split(',').map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim()).filter(Boolean));\n }\n const defaultMatch = line.match(/import\\s+(\\w+)/);\n if (defaultMatch && defaultMatch[1] !== 'type') {\n names.push(defaultMatch[1]);\n }\n imports.push({\n rawPath: tsImport[1],\n localNames: names,\n isDefault: !namedMatch,\n line: i + 1,\n });\n continue;\n }\n\n // Python: from X import Y / import X\n if (isPython) {\n const fromImport = line.match(/from\\s+([\\w.]+)\\s+import\\s+(.+)/);\n if (fromImport) {\n const names = fromImport[2].split(',').map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim()).filter(Boolean);\n imports.push({ rawPath: fromImport[1], localNames: names, isDefault: false, line: i + 1 });\n continue;\n }\n const directImport = line.match(/^import\\s+([\\w.]+)(?:\\s+as\\s+(\\w+))?/);\n if (directImport) {\n imports.push({\n rawPath: directImport[1],\n localNames: [directImport[2] ?? directImport[1].split('.').pop()!],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n }\n\n // Java/Kotlin: import com.example.Foo\n const javaImport = line.match(/^import\\s+(?:static\\s+)?([\\w.]+)/);\n if (javaImport && !line.includes('from')) {\n const parts = javaImport[1].split('.');\n imports.push({\n rawPath: javaImport[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // Go: import \"path\"\n const goImport = line.match(/^\\s*\"([^\"]+)\"/);\n if (goImport && (i > 0 && lines[i - 1]?.includes('import') || line.match(/^import\\s+\"/))) {\n const parts = goImport[1].split('/');\n imports.push({\n rawPath: goImport[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // C/C++: #include\n const includeMatch = line.match(/#include\\s+[<\"]([^>\"]+)[>\"]/);\n if (includeMatch) {\n imports.push({\n rawPath: includeMatch[1],\n localNames: [],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // Rust: use crate::... / use super::...\n const rustUse = line.match(/^use\\s+([\\w:]+)/);\n if (rustUse) {\n const parts = rustUse[1].split('::');\n imports.push({\n rawPath: rustUse[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // C#: using\n const usingMatch = line.match(/^using\\s+([\\w.]+)/);\n if (usingMatch) {\n const parts = usingMatch[1].split('.');\n imports.push({\n rawPath: usingMatch[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n }\n\n // Ruby: require\n const requireMatch = line.match(/require\\s+['\"]([^'\"]+)['\"]/);\n if (requireMatch) {\n imports.push({\n rawPath: requireMatch[1],\n localNames: [],\n isDefault: false,\n line: i + 1,\n });\n }\n }\n\n return imports;\n}\n\nfunction extractCalls(lines: string[]): ParsedCall[] {\n const calls: ParsedCall[] = [];\n const callRegex = /(?:new\\s+)?(\\w+)\\s*\\(/g;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Skip declarations\n if (/^\\s*(export\\s+)?(async\\s+)?function\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?(abstract\\s+)?class\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?interface\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?enum\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?type\\s+\\w+\\s*=/.test(line)) continue;\n if (/^\\s*import\\s/.test(line)) continue;\n if (/^\\s*\\/\\//.test(line)) continue;\n\n let match;\n callRegex.lastIndex = 0;\n while ((match = callRegex.exec(line)) !== null) {\n const name = match[1];\n // Skip language keywords\n if (['if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'typeof', 'instanceof', 'delete', 'void', 'new', 'import', 'export', 'from', 'const', 'let', 'var', 'function', 'class', 'interface', 'type', 'enum', 'extends', 'implements'].includes(name)) continue;\n const isNew = line.substring(Math.max(0, match.index - 4), match.index).includes('new');\n calls.push({ name, isNew, line: i + 1 });\n }\n\n // Member calls: receiver.method(\n const memberCallRegex = /(\\w+)\\.(\\w+)\\s*\\(/g;\n memberCallRegex.lastIndex = 0;\n while ((match = memberCallRegex.exec(line)) !== null) {\n calls.push({\n name: match[2],\n receiverText: match[1],\n isNew: false,\n line: i + 1,\n });\n }\n }\n\n return calls;\n}\n\nfunction extractHeritage(lines: string[]): ParsedHeritage[] {\n const heritages: ParsedHeritage[] = [];\n\n for (const line of lines) {\n // class Foo extends Bar implements Baz, Qux\n const classMatch = line.match(/class\\s+(\\w+)(?:\\s+extends\\s+(\\w+))?(?:\\s+implements\\s+([\\w,\\s]+))?/);\n if (classMatch) {\n const extendsNames = classMatch[2] ? [classMatch[2]] : [];\n const implementsNames = classMatch[3] ? classMatch[3].split(',').map((n) => n.trim()).filter(Boolean) : [];\n heritages.push({ className: classMatch[1], extendsNames, implementsNames });\n continue;\n }\n\n // Python: class Foo(Bar, Baz):\n const pyClassMatch = line.match(/class\\s+(\\w+)\\(([^)]+)\\)/);\n if (pyClassMatch) {\n const bases = pyClassMatch[2].split(',').map((n) => n.trim()).filter(Boolean);\n heritages.push({ className: pyClassMatch[1], extendsNames: bases, implementsNames: [] });\n }\n }\n\n return heritages;\n}\n\nfunction findEnclosingFunction(\n graph: import('../../graph/knowledge-graph.js').KnowledgeGraph,\n filePath: string,\n line: number,\n): string | null {\n let best: { id: string; startLine: number } | null = null;\n\n for (const node of graph.allNodes()) {\n if (node.filePath !== filePath) continue;\n if (!['function', 'method'].includes(node.kind)) continue;\n if (!node.startLine) continue;\n if (node.startLine <= line) {\n if (!best || node.startLine > best.startLine) {\n best = { id: node.id, startLine: node.startLine };\n }\n }\n }\n\n return best?.id ?? null;\n}\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const clusterPhase: Phase = {\n name: 'cluster',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct', 'trait', 'enum']);\n const nodesByDir = new Map<string, { id: string; name: string }[]>();\n\n for (const node of graph.allNodes()) {\n if (!relevantKinds.has(node.kind)) continue;\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = nodesByDir.get(dir);\n if (!group) {\n group = [];\n nodesByDir.set(dir, group);\n }\n group.push({ id: node.id, name: node.name });\n }\n\n let clusterCount = 0;\n for (const [dir, members] of nodesByDir) {\n if (members.length < 2) continue;\n\n const clusterId = generateNodeId('cluster', dir, `cluster-${clusterCount}`);\n const label = dir.split('/').filter(Boolean).pop() ?? `cluster-${clusterCount}`;\n\n graph.addNode({\n id: clusterId,\n kind: 'cluster',\n name: label,\n filePath: dir,\n metadata: { memberCount: members.length },\n });\n\n for (const member of members) {\n graph.addEdge({\n id: generateEdgeId(member.id, clusterId, 'belongs_to'),\n source: member.id,\n target: clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n clusterCount++;\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${clusterCount} clusters`,\n };\n },\n};\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const flowPhase: Phase = {\n name: 'flow',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n // Find entry points: exported functions with no incoming call edges\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: { id: string; name: string; score: number; filePath: string }[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n let score = 0;\n const hasCallers = calledNodes.has(node.id);\n const outCalls = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n\n if (!hasCallers && outCalls.length > 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen|bootstrap)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec') || node.filePath.includes('__test')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller') || node.filePath.includes('handler')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({ id: node.id, name: node.name, score, filePath: node.filePath });\n }\n }\n\n entryPoints.sort((a, b) => b.score - a.score);\n\n // Trace flows from top entry points (max 20)\n const maxFlows = 75;\n const maxDepth = 10;\n const maxBranching = 4;\n let flowCount = 0;\n\n for (const ep of entryPoints.slice(0, 20)) {\n if (flowCount >= maxFlows) break;\n\n // BFS trace\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: ep.id, path: [ep.id] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flowCount < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n // Record flow\n const flowId = generateNodeId('flow', ep.filePath, `flow-${flowCount}`);\n graph.addNode({\n id: flowId,\n kind: 'flow',\n name: `${ep.name} flow ${flowCount}`,\n filePath: ep.filePath,\n metadata: { steps: path, entryPoint: ep.name },\n });\n\n // Add step_of edges\n for (let i = 0; i < path.length; i++) {\n graph.addEdge({\n id: generateEdgeId(path[i], flowId, `step_of_${i}`),\n source: path[i],\n target: flowId,\n kind: 'step_of',\n weight: 1.0,\n label: `step ${i + 1}`,\n });\n }\n\n flowCount++;\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${entryPoints.length} entry points, traced ${flowCount} flows`,\n };\n },\n};\n","export interface Scope {\n name: string;\n kind: 'module' | 'function' | 'block' | 'class';\n parent: Scope | null;\n bindings: Map<string, ScopeBinding>;\n children: Scope[];\n}\n\nexport interface ScopeBinding {\n name: string;\n nodeId: string;\n kind: 'variable' | 'function' | 'class' | 'parameter' | 'import';\n}\n\nexport function createScope(\n name: string,\n kind: Scope['kind'],\n parent: Scope | null = null,\n): Scope {\n const scope: Scope = { name, kind, parent, bindings: new Map(), children: [] };\n parent?.children.push(scope);\n return scope;\n}\n\nexport function resolveBinding(name: string, scope: Scope): ScopeBinding | null {\n let current: Scope | null = scope;\n while (current !== null) {\n const binding = current.bindings.get(name);\n if (binding) return binding;\n current = current.parent;\n }\n return null;\n}\n\nexport function addBinding(scope: Scope, binding: ScopeBinding): void {\n scope.bindings.set(binding.name, binding);\n}\n","import type { CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateNodeId, generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ClusterResult {\n clusterId: string;\n label: string;\n memberIds: string[];\n}\n\nexport function detectCommunities(graph: KnowledgeGraph): ClusterResult[] {\n // Build adjacency for relevant node kinds\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct']);\n const nodes: CodeNode[] = [];\n\n for (const node of graph.allNodes()) {\n if (relevantKinds.has(node.kind)) {\n nodes.push(node);\n }\n }\n\n if (nodes.length < 10) return [];\n\n // Group by file directory as simple heuristic clustering\n const dirGroups = new Map<string, CodeNode[]>();\n for (const node of nodes) {\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = dirGroups.get(dir);\n if (!group) {\n group = [];\n dirGroups.set(dir, group);\n }\n group.push(node);\n }\n\n const clusters: ClusterResult[] = [];\n let idx = 0;\n\n for (const [dir, members] of dirGroups) {\n if (members.length < 2) continue;\n const clusterId = generateNodeId('cluster', dir, `cluster-${idx}`);\n const label = generateLabel(dir, members);\n\n clusters.push({\n clusterId,\n label,\n memberIds: members.map((m) => m.id),\n });\n idx++;\n }\n\n return clusters;\n}\n\nfunction generateLabel(dir: string, members: CodeNode[]): string {\n const parts = dir.split('/').filter(Boolean);\n if (parts.length > 0) {\n return parts[parts.length - 1];\n }\n return `cluster-${members[0]?.name ?? 'unknown'}`;\n}\n\nexport function addClustersToGraph(graph: KnowledgeGraph, clusters: ClusterResult[]): void {\n for (const cluster of clusters) {\n graph.addNode({\n id: cluster.clusterId,\n kind: 'cluster',\n name: cluster.label,\n filePath: '',\n metadata: { memberCount: cluster.memberIds.length },\n });\n\n for (const memberId of cluster.memberIds) {\n graph.addEdge({\n id: generateEdgeId(memberId, cluster.clusterId, 'belongs_to'),\n source: memberId,\n target: cluster.clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n }\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EntryPoint {\n nodeId: string;\n name: string;\n score: number;\n filePath: string;\n}\n\nexport function findEntryPoints(graph: KnowledgeGraph): EntryPoint[] {\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: EntryPoint[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n const outEdges = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n const inDegree = calledNodes.has(node.id) ? 1 : 0;\n\n let score = 0;\n if (outEdges.length > 0 && inDegree === 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({\n nodeId: node.id,\n name: node.name,\n score,\n filePath: node.filePath,\n });\n }\n }\n\n return entryPoints.sort((a, b) => b.score - a.score);\n}\n\nexport interface FlowTrace {\n entryPointId: string;\n steps: string[];\n}\n\nexport function traceFlow(\n entryId: string,\n graph: KnowledgeGraph,\n maxDepth = 10,\n maxBranching = 4,\n): FlowTrace[] {\n const flows: FlowTrace[] = [];\n const maxFlows = 75;\n\n function bfs(): void {\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: entryId, path: [entryId] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flows.length < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n flows.push({ entryPointId: entryId, steps: [...path] });\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n bfs();\n return deduplicateFlows(flows);\n}\n\nfunction deduplicateFlows(flows: FlowTrace[]): FlowTrace[] {\n const result: FlowTrace[] = [];\n\n for (const flow of flows) {\n const edges = new Set<string>();\n for (let i = 0; i < flow.steps.length - 1; i++) {\n edges.add(`${flow.steps[i]}->${flow.steps[i + 1]}`);\n }\n\n const isDuplicate = result.some((existing) => {\n const existingEdges = new Set<string>();\n for (let i = 0; i < existing.steps.length - 1; i++) {\n existingEdges.add(`${existing.steps[i]}->${existing.steps[i + 1]}`);\n }\n let overlap = 0;\n for (const e of edges) {\n if (existingEdges.has(e)) overlap++;\n }\n return overlap / Math.max(edges.size, 1) > 0.7;\n });\n\n if (!isDuplicate) result.push(flow);\n }\n\n return result;\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface SearchResult {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number;\n snippet?: string;\n}\n\nexport function textSearch(\n graph: KnowledgeGraph,\n query: string,\n limit = 20,\n): SearchResult[] {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n const results: SearchResult[] = [];\n\n // Deprioritize test/dist paths\n const isTestPath = (fp: string) =>\n fp.includes('test') || fp.includes('spec') || fp.includes('__test');\n const isDistPath = (fp: string) =>\n fp.includes('/dist') || fp.includes('\\\\dist') || fp.includes('.d.ts');\n\n for (const node of graph.allNodes()) {\n if (['directory', 'cluster', 'flow'].includes(node.kind)) continue;\n\n let score = 0;\n const nameLC = node.name.toLowerCase();\n const pathLC = node.filePath.toLowerCase();\n\n for (const term of terms) {\n if (nameLC === term) score += 10;\n else if (nameLC.startsWith(term)) score += 7;\n else if (nameLC.includes(term)) score += 5;\n if (pathLC.includes(term)) score += 2;\n if (node.content?.toLowerCase().includes(term)) score += 3;\n }\n\n // Boost source files over compiled/test files\n if (score > 0) {\n if (isDistPath(node.filePath)) score -= 8;\n if (isTestPath(node.filePath)) score -= 4;\n // Boost by kind relevance\n if (['function', 'class', 'interface', 'method'].includes(node.kind)) score += 1;\n }\n\n if (score > 0) {\n results.push({\n nodeId: node.id,\n name: node.name,\n kind: node.kind,\n filePath: node.filePath,\n score,\n snippet: node.content?.slice(0, 200),\n });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, limit);\n}\n\nexport function reciprocalRankFusion(\n ...rankings: SearchResult[][]\n): SearchResult[] {\n const K = 60;\n const scoreMap = new Map<string, { result: SearchResult; rrfScore: number }>();\n\n for (const ranking of rankings) {\n for (let rank = 0; rank < ranking.length; rank++) {\n const result = ranking[rank];\n const existing = scoreMap.get(result.nodeId);\n const rrfContribution = 1 / (K + rank + 1);\n\n if (existing) {\n existing.rrfScore += rrfContribution;\n } else {\n scoreMap.set(result.nodeId, {\n result,\n rrfScore: rrfContribution,\n });\n }\n }\n }\n\n return [...scoreMap.values()]\n .sort((a, b) => b.rrfScore - a.rrfScore)\n .map((entry) => ({ ...entry.result, score: entry.rrfScore }));\n}\n","export { textSearch, reciprocalRankFusion } from './text-search.js';\nexport type { SearchResult } from './text-search.js';\nexport { embedNodes } from './embedder.js';\nexport type { EmbeddedNode } from './embedder.js';\nexport { VectorIndex } from './vector-index.js';\nexport type { VectorHit } from './vector-index.js';\n\n","import { DbManager } from '../storage/db-manager.js';\nimport type { EmbeddedNode } from './embedder.js';\n\nconst EMBED_TABLE = 'embed_nodes';\nconst EMBED_DIM = 384; // all-MiniLM-L6-v2 output dimension\nconst INDEX_NAME = 'embed_vec_idx';\n\nexport class VectorIndex {\n private db: DbManager;\n\n constructor(db: DbManager) {\n this.db = db;\n }\n\n async init(): Promise<void> {\n // Install + load VECTOR extension\n await this.db.execute('INSTALL VECTOR');\n await this.db.execute('LOAD EXTENSION VECTOR');\n\n // Create node table for embeddings\n await this.db.execute(`\n CREATE NODE TABLE IF NOT EXISTS ${EMBED_TABLE} (\n id STRING,\n name STRING,\n kind STRING,\n file_path STRING,\n text STRING,\n embedding FLOAT[${EMBED_DIM}],\n PRIMARY KEY (id)\n )\n `);\n }\n\n async buildIndex(nodes: EmbeddedNode[]): Promise<void> {\n // Drop existing data\n await this.db.execute(`MATCH (n:${EMBED_TABLE}) DETACH DELETE n`).catch(() => {});\n\n // Insert embeddings\n for (const node of nodes) {\n const vecLiteral = `[${node.embedding.join(',')}]`;\n await this.db.execute(\n `CREATE (:${EMBED_TABLE} {\n id: '${esc(node.id)}',\n name: '${esc(node.name)}',\n kind: '${esc(node.kind)}',\n file_path: '${esc(node.filePath)}',\n text: '${esc(node.text)}',\n embedding: ${vecLiteral}\n })`,\n );\n }\n\n // Drop and recreate vector index (signature: tableName, indexName, propertyName)\n await this.db.execute(`CALL DROP_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}')`).catch(() => {});\n await this.db.execute(`CALL CREATE_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', 'embedding')`);\n // Do NOT close the DB - keep connection open for searches\n }\n\n async search(queryEmbedding: number[], topK = 10): Promise<VectorHit[]> {\n const vecLiteral = `[${queryEmbedding.join(',')}]`;\n const rows = await this.db.query(\n `CALL QUERY_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', ${vecLiteral}, ${topK}) RETURN node.id, node.name, node.kind, node.file_path, distance`,\n );\n return rows.map((r) => ({\n nodeId: String(r['node.id']),\n name: String(r['node.name']),\n kind: String(r['node.kind']),\n filePath: String(r['node.file_path']),\n score: 1 - Number(r['distance']), // cosine distance → similarity\n }));\n }\n\n async isBuilt(): Promise<boolean> {\n try {\n const rows = await this.db.query(`MATCH (n:${EMBED_TABLE}) RETURN count(n) AS cnt`);\n return Number(rows[0]?.cnt ?? 0) > 0;\n } catch {\n return false;\n }\n }\n}\n\nexport interface VectorHit {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number; // 0..1 where 1 = most similar\n}\n\nfunction esc(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport fs from 'node:fs';\n\nexport function createMcpServer(graph: KnowledgeGraph, repoName: string): Server {\n const server = new Server(\n { name: 'code-intel', version: '0.1.0' },\n { capabilities: { tools: {}, resources: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: 'repos',\n description: 'List indexed repositories',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'search',\n description: 'Hybrid search across the codebase knowledge graph',\n inputSchema: {\n type: 'object' as const,\n properties: {\n query: { type: 'string', description: 'Search query' },\n limit: { type: 'number', description: 'Max results (default 20)' },\n },\n required: ['query'],\n },\n },\n {\n name: 'inspect',\n description: '360° view of a symbol: definition, callers, callees, heritage, references',\n inputSchema: {\n type: 'object' as const,\n properties: {\n symbol_name: { type: 'string', description: 'Symbol name to inspect' },\n },\n required: ['symbol_name'],\n },\n },\n {\n name: 'blast_radius',\n description: 'Impact analysis: what depends on / is affected by this symbol',\n inputSchema: {\n type: 'object' as const,\n properties: {\n target: { type: 'string', description: 'Target symbol name' },\n direction: { type: 'string', enum: ['callers', 'callees', 'both'], description: 'Direction to trace' },\n max_hops: { type: 'number', description: 'Max hops (default 5)' },\n },\n required: ['target'],\n },\n },\n {\n name: 'routes',\n description: 'List route handler mappings in the codebase',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'raw_query',\n description: 'Execute a graph query (simplified Cypher-like)',\n inputSchema: {\n type: 'object' as const,\n properties: {\n cypher: { type: 'string', description: 'Query string (name=\\'X\\' or :kind patterns)' },\n },\n required: ['cypher'],\n },\n },\n ],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n const a = (args ?? {}) as Record<string, unknown>;\n\n switch (name) {\n case 'repos': {\n return { content: [{ type: 'text', text: JSON.stringify([{ name: repoName, nodes: graph.size.nodes, edges: graph.size.edges }], null, 2) }] };\n }\n\n case 'search': {\n const query = a.query as string;\n const limit = (a.limit as number) ?? 20;\n const results = textSearch(graph, query, limit);\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n\n case 'inspect': {\n const symbolName = a.symbol_name as string;\n const node = findNodeByName(graph, symbolName);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${symbolName}\" not found` }] };\n\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n node: { id: node.id, kind: node.kind, name: node.name, filePath: node.filePath, startLine: node.startLine, endLine: node.endLine, exported: node.exported },\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({ id: e.source, name: graph.getNode(e.source)?.name })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({ id: e.target, name: graph.getNode(e.target)?.name })),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => graph.getNode(e.target)?.name),\n implements: outgoing.filter((e) => e.kind === 'implements').map((e) => graph.getNode(e.target)?.name),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({ name: graph.getNode(e.target)?.name, kind: graph.getNode(e.target)?.kind })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => graph.getNode(e.target)?.name)[0],\n content: node.content?.slice(0, 500),\n }, null, 2),\n }],\n };\n }\n\n case 'blast_radius': {\n const target = a.target as string;\n const direction = (a.direction as string) ?? 'both';\n const maxHops = (a.max_hops as number) ?? 5;\n const node = findNodeByName(graph, target);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${target}\" not found` }] };\n\n const affected = new Set<string>();\n const queue: { id: string; depth: number }[] = [{ id: node.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > maxHops) continue;\n visited.add(id);\n affected.add(id);\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n if (direction === 'callees' || direction === 'both') {\n for (const edge of graph.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n\n const affectedDetails = [...affected].map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n return { content: [{ type: 'text', text: JSON.stringify({ target: node.name, affectedCount: affected.size, affected: affectedDetails }, null, 2) }] };\n }\n\n case 'routes': {\n const routes: { name: string; filePath: string }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'route' || (node.kind === 'function' && /route|handler|controller/i.test(node.filePath))) {\n routes.push({ name: node.name, filePath: node.filePath });\n }\n }\n return { content: [{ type: 'text', text: JSON.stringify(routes, null, 2) }] };\n }\n\n case 'raw_query': {\n const q = a.cypher as string;\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === nameMatch[1]) results.push(node);\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kindMatch[1]) results.push(node);\n if (results.length >= 50) break;\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n return { content: [{ type: 'text', text: 'Query not recognized' }] };\n }\n\n default:\n return { content: [{ type: 'text', text: `Unknown tool: ${name}` }] };\n }\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n { uri: `codeintel://repo/${repoName}/overview`, name: `${repoName} Overview`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/clusters`, name: `${repoName} Clusters`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/flows`, name: `${repoName} Flows`, mimeType: 'application/json' },\n ],\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n if (uri.endsWith('/overview')) {\n const kindCounts: Record<string, number> = {};\n for (const node of graph.allNodes()) {\n kindCounts[node.kind] = (kindCounts[node.kind] ?? 0) + 1;\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify({ repo: repoName, stats: graph.size, nodeCounts: kindCounts }) }] };\n }\n\n if (uri.endsWith('/clusters')) {\n const clusters = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') clusters.push({ id: node.id, name: node.name, memberCount: node.metadata?.memberCount });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(clusters) }] };\n }\n\n if (uri.endsWith('/flows')) {\n const flows = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') flows.push({ id: node.id, name: node.name, steps: node.metadata?.steps, entryPoint: node.metadata?.entryPoint });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(flows) }] };\n }\n\n throw new Error(`Unknown resource: ${uri}`);\n });\n\n return server;\n}\n\nexport async function startMcpStdio(graph: KnowledgeGraph, repoName: string): Promise<void> {\n const server = createMcpServer(graph, repoName);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nfunction findNodeByName(graph: KnowledgeGraph, name: string) {\n for (const node of graph.allNodes()) {\n if (node.name === name) return node;\n }\n return undefined;\n}\n","import { Database, Connection } from '@ladybugdb/core';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nexport class DbManager {\n private db: InstanceType<typeof Database> | null = null;\n private conn: InstanceType<typeof Connection> | null = null;\n private dbPath: string;\n\n constructor(dbPath: string) {\n this.dbPath = dbPath;\n }\n\n async init(): Promise<void> {\n fs.mkdirSync(path.dirname(this.dbPath), { recursive: true });\n this.db = new Database(this.dbPath);\n await this.db.init();\n this.conn = new Connection(this.db);\n await this.conn.init();\n }\n\n async query(cypher: string): Promise<Record<string, unknown>[]> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n const rows = await qr.getAll();\n qr.close();\n return rows as Record<string, unknown>[];\n }\n\n async execute(cypher: string): Promise<void> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n qr.close();\n }\n\n close(): void {\n try {\n this.conn?.close();\n } catch { /* ignore */ }\n try {\n this.db?.close();\n } catch { /* ignore */ }\n this.conn = null;\n this.db = null;\n }\n\n get isOpen(): boolean {\n return this.conn !== null;\n }\n}\n","import type { NodeKind } from '../shared/index.js';\n\nexport const NODE_TABLE_MAP: Record<NodeKind, string> = {\n file: 'file_nodes',\n directory: 'dir_nodes',\n function: 'func_nodes',\n class: 'class_nodes',\n interface: 'iface_nodes',\n method: 'method_nodes',\n constructor: 'ctor_nodes',\n variable: 'var_nodes',\n property: 'prop_nodes',\n struct: 'struct_nodes',\n enum: 'enum_nodes',\n trait: 'trait_nodes',\n namespace: 'ns_nodes',\n module: 'mod_nodes',\n type_alias: 'type_nodes',\n constant: 'const_nodes',\n route: 'route_nodes',\n cluster: 'cluster_nodes',\n flow: 'flow_nodes',\n};\n\nexport const ALL_NODE_TABLES = [...new Set(Object.values(NODE_TABLE_MAP))];\n\nexport function getCreateNodeTableDDL(tableName: string): string {\n return `CREATE NODE TABLE IF NOT EXISTS ${tableName} (\n id STRING,\n name STRING,\n file_path STRING,\n start_line INT64,\n end_line INT64,\n exported BOOLEAN,\n content STRING,\n metadata STRING,\n PRIMARY KEY (id)\n)`;\n}\n\nexport function getCreateEdgeTableDDL(): string[] {\n const ddls: string[] = [];\n const uniqueTables = ALL_NODE_TABLES;\n\n // Create edge table connecting all node table pairs\n const fromToPairs: string[] = [];\n for (const from of uniqueTables) {\n for (const to of uniqueTables) {\n fromToPairs.push(`FROM ${from} TO ${to}`);\n }\n }\n\n ddls.push(`CREATE REL TABLE IF NOT EXISTS code_edges (\n ${fromToPairs.join(',\\n ')},\n kind STRING,\n weight DOUBLE,\n label STRING\n)`);\n\n return ddls;\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from './db-manager.js';\nimport { ALL_NODE_TABLES, getCreateNodeTableDDL, getCreateEdgeTableDDL, NODE_TABLE_MAP } from './schema.js';\nimport type { CodeNode } from '../shared/index.js';\n\nexport async function loadGraphToDB(\n graph: KnowledgeGraph,\n dbManager: DbManager,\n): Promise<{ nodeCount: number; edgeCount: number }> {\n // Create all node tables\n for (const table of ALL_NODE_TABLES) {\n await dbManager.execute(getCreateNodeTableDDL(table));\n }\n\n // Create edge table\n const edgeDDLs = getCreateEdgeTableDDL();\n for (const ddl of edgeDDLs) {\n try {\n await dbManager.execute(ddl);\n } catch {\n // Edge table with all pairs might fail, use simpler approach\n }\n }\n\n // Insert nodes via Cypher\n let nodeCount = 0;\n for (const node of graph.allNodes()) {\n const table = NODE_TABLE_MAP[node.kind];\n const props = buildNodeProps(node);\n try {\n await dbManager.execute(`CREATE (:${table} ${props})`);\n nodeCount++;\n } catch {\n // Skip duplicate or invalid nodes\n }\n }\n\n // Insert edges via Cypher\n let edgeCount = 0;\n for (const edge of graph.allEdges()) {\n const sourceNode = graph.getNode(edge.source);\n const targetNode = graph.getNode(edge.target);\n if (!sourceNode || !targetNode) continue;\n\n const fromTable = NODE_TABLE_MAP[sourceNode.kind];\n const toTable = NODE_TABLE_MAP[targetNode.kind];\n\n try {\n await dbManager.execute(\n `MATCH (a:${fromTable} {id: '${escCypher(edge.source)}'}), (b:${toTable} {id: '${escCypher(edge.target)}'}) ` +\n `CREATE (a)-[:code_edges {kind: '${edge.kind}', weight: ${edge.weight ?? 1.0}, label: '${escCypher(edge.label ?? '')}'}]->(b)`,\n );\n edgeCount++;\n } catch {\n // Skip invalid edges\n }\n }\n\n return { nodeCount, edgeCount };\n}\n\nfunction buildNodeProps(node: CodeNode): string {\n const parts: string[] = [\n `id: '${escCypher(node.id)}'`,\n `name: '${escCypher(node.name)}'`,\n `file_path: '${escCypher(node.filePath)}'`,\n ];\n if (node.startLine !== undefined) parts.push(`start_line: ${node.startLine}`);\n if (node.endLine !== undefined) parts.push(`end_line: ${node.endLine}`);\n if (node.exported !== undefined) parts.push(`exported: ${node.exported}`);\n if (node.content) parts.push(`content: '${escCypher(node.content.slice(0, 500))}'`);\n if (node.metadata) parts.push(`metadata: '${escCypher(JSON.stringify(node.metadata))}'`);\n return `{${parts.join(', ')}}`;\n}\n\nfunction escCypher(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nexport interface RepoEntry {\n name: string;\n path: string;\n indexedAt: string;\n stats: { nodes: number; edges: number; files: number };\n}\n\nconst GLOBAL_DIR = path.join(os.homedir(), '.code-intel');\nconst REPOS_FILE = path.join(GLOBAL_DIR, 'repos.json');\n\nexport function loadRegistry(): RepoEntry[] {\n try {\n const data = fs.readFileSync(REPOS_FILE, 'utf-8');\n return JSON.parse(data);\n } catch {\n return [];\n }\n}\n\nexport function saveRegistry(entries: RepoEntry[]): void {\n fs.mkdirSync(GLOBAL_DIR, { recursive: true });\n fs.writeFileSync(REPOS_FILE, JSON.stringify(entries, null, 2));\n}\n\nexport function upsertRepo(entry: RepoEntry): void {\n const entries = loadRegistry();\n const idx = entries.findIndex((e) => e.path === entry.path);\n if (idx >= 0) {\n entries[idx] = entry;\n } else {\n entries.push(entry);\n }\n saveRegistry(entries);\n}\n\nexport function removeRepo(repoPath: string): void {\n const entries = loadRegistry().filter((e) => e.path !== repoPath);\n saveRegistry(entries);\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface IndexMetadata {\n indexedAt: string;\n commitHash?: string;\n stats: {\n nodes: number;\n edges: number;\n files: number;\n duration: number;\n };\n}\n\nexport function saveMetadata(repoDir: string, metadata: IndexMetadata): void {\n const metaDir = path.join(repoDir, '.code-intel');\n fs.mkdirSync(metaDir, { recursive: true });\n fs.writeFileSync(path.join(metaDir, 'meta.json'), JSON.stringify(metadata, null, 2));\n}\n\nexport function loadMetadata(repoDir: string): IndexMetadata | null {\n try {\n const data = fs.readFileSync(path.join(repoDir, '.code-intel', 'meta.json'), 'utf-8');\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\nexport function getDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'graph.db');\n}\n\nexport function getVectorDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'vector.db');\n}\n","import express from 'express';\nimport cors from 'cors';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport { findEntryPoints, traceFlow } from '../flow-detection/entry-point-finder.js';\nimport { DbManager, getDbPath, getVectorDbPath } from '../storage/index.js';\nimport { VectorIndex } from '../search/vector-index.js';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { listGroups, loadGroup, loadSyncResult, saveSyncResult } from '../multi-repo/group-registry.js';\nimport { syncGroup } from '../multi-repo/group-sync.js';\nimport { queryGroup } from '../multi-repo/group-query.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from '../multi-repo/graph-from-db.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n// Resolve web dist: <core>/dist/http -> ../../web/dist\nconst WEB_DIST = path.resolve(__dirname, '..', '..', '..', 'web', 'dist');\n\nexport function createApp(graph: KnowledgeGraph, repoName: string, workspaceRoot?: string): express.Application {\n const app = express();\n\n app.use(cors({ origin: true }));\n app.use(express.json({ limit: '10mb' }));\n\n // Lazy-init vector index state\n let vectorIndex: VectorIndex | null = null;\n let vectorIndexBuilding = false;\n let vectorIndexReady = false;\n\n async function ensureVectorIndex(): Promise<VectorIndex | null> {\n if (vectorIndexReady && vectorIndex) return vectorIndex;\n if (!workspaceRoot || vectorIndexBuilding) return null;\n vectorIndexBuilding = true;\n try {\n const { embedNodes } = await import('../search/embedder.js');\n const dbPath = getVectorDbPath(workspaceRoot);\n const db = new DbManager(dbPath);\n await db.init();\n const idx = new VectorIndex(db);\n await idx.init();\n const alreadyBuilt = await idx.isBuilt();\n if (!alreadyBuilt) {\n console.log(' [vector] Building embeddings…');\n const nodes = await embedNodes(graph, {\n onProgress: (done, total) => {\n if (done % 50 === 0 || done === total) process.stdout.write(`\\r [vector] ${done}/${total}`);\n },\n });\n console.log('');\n await idx.buildIndex(nodes);\n console.log(` [vector] Index built: ${nodes.length} embeddings`);\n } else {\n console.log(' [vector] Index already exists, skipping rebuild.');\n }\n vectorIndex = idx;\n vectorIndexReady = true;\n return idx;\n } catch (err) {\n console.warn(' [vector] Index build failed:', err instanceof Error ? err.message : err);\n return null;\n } finally {\n vectorIndexBuilding = false;\n }\n }\n\n // Kick off in background when workspace is available\n if (workspaceRoot) {\n setImmediate(() => ensureVectorIndex().catch(() => {}));\n }\n\n // Health check\n app.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', nodes: graph.size.nodes, edges: graph.size.edges });\n });\n\n // List repos\n app.get('/api/repos', (_req, res) => {\n res.json([{ name: repoName, nodes: graph.size.nodes, edges: graph.size.edges }]);\n });\n\n // Download full graph\n app.get('/api/graph/:repo', (_req, res) => {\n const nodes = [...graph.allNodes()];\n const edges = [...graph.allEdges()];\n res.json({ nodes, edges });\n });\n\n // Hybrid search (BM25-like text)\n app.post('/api/search', (req, res) => {\n const { query, limit } = req.body;\n const results = textSearch(graph, query, limit ?? 20);\n res.json({ results });\n });\n\n // Vector search (semantic)\n app.post('/api/vector-search', async (req, res) => {\n const { query, limit = 10 } = req.body;\n if (!query) { res.status(400).json({ error: 'Missing query' }); return; }\n\n const idx = await ensureVectorIndex();\n if (!idx) {\n // Fall back to text search\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false });\n return;\n }\n\n try {\n // Embed the query using @huggingface/transformers\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const embedder = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as (text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>;\n const out = await embedder(query, { pooling: 'mean', normalize: true });\n const queryEmbedding = Array.from(out.data);\n const hits = await idx.search(queryEmbedding, limit);\n // Map to SearchResult shape\n const results = hits.map((h) => ({\n nodeId: h.nodeId,\n name: h.name,\n kind: h.kind,\n filePath: h.filePath,\n score: h.score,\n }));\n res.json({ results, source: 'vector', vectorReady: true });\n } catch (err) {\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false, error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Vector index status\n app.get('/api/vector-status', (_req, res) => {\n res.json({ ready: vectorIndexReady, building: vectorIndexBuilding });\n });\n\n // Read file\n app.post('/api/files/read', (req, res) => {\n const { file_path } = req.body;\n try {\n const content = fs.readFileSync(file_path, 'utf-8');\n res.json({ content });\n } catch {\n res.status(404).json({ error: 'File not found' });\n }\n });\n\n // Grep (regex search in files)\n app.post('/api/grep', (req, res) => {\n const { pattern, file_paths } = req.body;\n const results: { file: string; line: number; text: string }[] = [];\n\n try {\n const regex = new RegExp(pattern, 'gi');\n const paths: string[] = file_paths ?? [];\n\n // If no paths, search from graph nodes\n if (paths.length === 0) {\n for (const node of graph.allNodes()) {\n if (node.kind === 'file' && node.content) {\n const lines = node.content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i])) {\n results.push({ file: node.filePath, line: i + 1, text: lines[i].trim() });\n }\n regex.lastIndex = 0;\n }\n }\n }\n }\n\n res.json({ results: results.slice(0, 100) });\n } catch {\n res.status(400).json({ error: 'Invalid regex pattern' });\n }\n });\n\n // Cypher query — routed to LadybugDB if available, else falls back to in-memory\n app.post('/api/cypher', async (req, res) => {\n const { query: q } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query' }); return; }\n\n // Try LadybugDB first\n if (workspaceRoot) {\n try {\n const dbPath = getDbPath(workspaceRoot);\n const dbm = new DbManager(dbPath);\n await dbm.init();\n const rows = await dbm.query(q);\n dbm.close();\n res.json({ results: rows });\n return;\n } catch (err) {\n // Fall through to in-memory fallback\n }\n }\n\n // In-memory fallback\n try {\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const name = nameMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === name) {\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n results.push({ node, incoming: incoming.length, outgoing: outgoing.length });\n }\n }\n res.json({ results });\n return;\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const kind = kindMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kind) results.push(node);\n if (results.length >= 50) break;\n }\n res.json({ results });\n return;\n }\n res.json({ results: [], message: 'Query not recognized.' });\n } catch {\n res.status(400).json({ error: 'Invalid query' });\n }\n });\n\n // Get node detail (inspect)\n app.get('/api/nodes/:id', (req, res) => {\n const nodeId = decodeURIComponent(req.params.id);\n const node = graph.getNode(nodeId);\n if (!node) {\n res.status(404).json({ error: 'Node not found' });\n return;\n }\n\n const incoming = [...graph.findEdgesTo(nodeId)];\n const outgoing = [...graph.findEdgesFrom(nodeId)];\n\n res.json({\n node,\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.source,\n name: graph.getNode(e.source)?.name,\n weight: e.weight,\n })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n weight: e.weight,\n })),\n imports: outgoing.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n importedBy: incoming.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.source,\n name: graph.getNode(e.source)?.name,\n })),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n implementsEdges: outgoing.filter((e) => e.kind === 'implements').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n kind: graph.getNode(e.target)?.kind,\n })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => graph.getNode(e.target)?.name)[0],\n });\n });\n\n // Blast radius\n app.post('/api/blast-radius', (req, res) => {\n const { target, direction = 'both', max_hops = 5 } = req.body;\n\n // Find the node\n let targetNode = null;\n for (const node of graph.allNodes()) {\n if (node.name === target || node.id === target) {\n targetNode = node;\n break;\n }\n }\n\n if (!targetNode) {\n res.status(404).json({ error: `Symbol \"${target}\" not found` });\n return;\n }\n\n const affected = new Map<string, { name: string; kind: string; depth: number }>();\n const queue: { id: string; depth: number }[] = [{ id: targetNode.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > max_hops) continue;\n visited.add(id);\n\n const node = graph.getNode(id);\n if (node) {\n affected.set(id, { name: node.name, kind: node.kind, depth });\n }\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') {\n queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n }\n\n if (direction === 'callees' || direction === 'both') {\n for (const edge of graph.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') {\n queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n }\n\n res.json({\n target: targetNode.name,\n affectedCount: [...affected.values()].filter((a) => a.depth > 0).length,\n affected: [...affected.entries()]\n .map(([id, info]) => ({ id, ...info }))\n .filter((a) => a.depth > 0),\n });\n });\n\n // Flows\n app.get('/api/flows', (_req, res) => {\n const flows: { id: string; name: string; steps: unknown }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') {\n flows.push({\n id: node.id,\n name: node.name,\n steps: node.metadata?.steps,\n });\n }\n }\n res.json({ flows });\n });\n\n // Clusters\n app.get('/api/clusters', (_req, res) => {\n const clusters: { id: string; name: string; memberCount: number }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') {\n clusters.push({\n id: node.id,\n name: node.name,\n memberCount: (node.metadata?.memberCount as number) ?? 0,\n });\n }\n }\n res.json({ clusters });\n });\n\n // ── Group routes ──────────────────────────────────────────────────────────────\n app.get('/api/groups', (_req, res) => {\n const groups = listGroups();\n res.json(groups.map((g) => ({\n name: g.name,\n memberCount: g.members.length,\n lastSync: g.lastSync ?? null,\n createdAt: g.createdAt,\n })));\n });\n\n app.get('/api/groups/:name', (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n res.json(group);\n });\n\n app.get('/api/groups/:name/contracts', (req, res) => {\n const result = loadSyncResult(req.params.name);\n if (!result) { res.status(404).json({ error: 'No sync result. Run sync first.' }); return; }\n res.json(result);\n });\n\n app.post('/api/groups/:name/sync', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n try {\n const result = await syncGroup(group);\n saveSyncResult(result);\n // Update lastSync on group\n group.lastSync = result.syncedAt;\n const { saveGroup } = await import('../multi-repo/group-registry.js');\n saveGroup(group);\n res.json(result);\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.post('/api/groups/:name/search', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const { q, limit = 20 } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query q' }); return; }\n try {\n const { perRepo, merged } = await queryGroup(group, q, limit);\n res.json({ perRepo, merged });\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.get('/api/groups/:name/graph', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const registry = loadRegistry();\n const mergedGraph = createKnowledgeGraph();\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(mergedGraph, db);\n db.close();\n } catch { db.close(); }\n }\n res.json({ nodes: [...mergedGraph.allNodes()], edges: [...mergedGraph.allEdges()] });\n });\n\n // Serve web UI static files\n if (fs.existsSync(WEB_DIST)) {\n app.use(express.static(WEB_DIST));\n app.get('/{*path}', (_req, res) => {\n res.sendFile(path.join(WEB_DIST, 'index.html'));\n });\n }\n\n return app;\n}\n\nexport function startHttpServer(\n graph: KnowledgeGraph,\n repoName: string,\n port = 4747,\n workspaceRoot?: string,\n): void {\n const app = createApp(graph, repoName, workspaceRoot);\n app.listen(port, () => {\n console.log(`Code Intelligence server running at http://localhost:${port}`);\n console.log(` Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`);\n });\n}\n","/**\n * graph-from-db.ts\n * Loads a KnowledgeGraph from a persisted LadybugDB graph.db.\n * Used by group-sync to read each repo's index without re-analyzing.\n */\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { ALL_NODE_TABLES, NODE_TABLE_MAP } from '../storage/schema.js';\nimport type { CodeNode, CodeEdge, NodeKind, EdgeKind } from '../shared/index.js';\n\n// Reverse map: tableName → NodeKind\nconst TABLE_TO_KIND: Record<string, NodeKind> = Object.fromEntries(\n Object.entries(NODE_TABLE_MAP).map(([kind, table]) => [table, kind as NodeKind]),\n);\n\nfunction parseRow(row: Record<string, unknown>, kind: NodeKind): CodeNode {\n return {\n id: String(row['id'] ?? ''),\n kind,\n name: String(row['name'] ?? ''),\n filePath: String(row['file_path'] ?? ''),\n startLine: row['start_line'] != null ? Number(row['start_line']) : undefined,\n endLine: row['end_line'] != null ? Number(row['end_line']) : undefined,\n exported: row['exported'] != null ? Boolean(row['exported']) : undefined,\n content: row['content'] ? String(row['content']) : undefined,\n metadata: row['metadata'] ? (() => {\n try { return JSON.parse(String(row['metadata'])) as Record<string, unknown>; } catch { return undefined; }\n })() : undefined,\n };\n}\n\nexport async function loadGraphFromDB(\n graph: KnowledgeGraph,\n db: DbManager,\n): Promise<void> {\n // Load all node tables\n for (const table of ALL_NODE_TABLES) {\n const kind = TABLE_TO_KIND[table];\n if (!kind) continue;\n let rows: Record<string, unknown>[] = [];\n try {\n rows = await db.query(`MATCH (n:${table}) RETURN n.id, n.name, n.file_path, n.start_line, n.end_line, n.exported, n.content, n.metadata`);\n } catch {\n // table may not exist in older DBs\n continue;\n }\n for (const row of rows) {\n // kuzu returns column names as aliases\n const node = parseRow({\n id: row['n.id'],\n name: row['n.name'],\n file_path: row['n.file_path'],\n start_line: row['n.start_line'],\n end_line: row['n.end_line'],\n exported: row['n.exported'],\n content: row['n.content'],\n metadata: row['n.metadata'],\n }, kind);\n if (node.id && node.name) graph.addNode(node);\n }\n }\n\n // Load edges\n try {\n const edgeRows = await db.query(\n `MATCH (a)-[e:code_edges]->(b) RETURN a.id, b.id, e.kind, e.weight, e.label`,\n );\n for (const row of edgeRows) {\n const sourceId = String(row['a.id'] ?? '');\n const targetId = String(row['b.id'] ?? '');\n const kind = String(row['e.kind'] ?? '') as EdgeKind;\n if (!sourceId || !targetId || !kind) continue;\n const edge: CodeEdge = {\n id: `${sourceId}::${kind}::${targetId}`,\n source: sourceId,\n target: targetId,\n kind,\n weight: row['e.weight'] != null ? Number(row['e.weight']) : undefined,\n label: row['e.label'] ? String(row['e.label']) : undefined,\n };\n graph.addEdge(edge);\n }\n } catch {\n // edges table may not exist in older DBs\n }\n}\n","/**\n * group-sync.ts\n * Loads each member repo's knowledge graph from its .code-intel/graph.db,\n * extracts contracts (exports, routes, events, schemas), and matches them\n * across repos to produce ContractLinks.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup, Contract, ContractLink, GroupSyncResult } from './types.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph, type KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\n\n// ─── Extract contracts from a single repo's graph ────────────────────────────\n\nfunction extractContracts(\n graph: KnowledgeGraph,\n repoName: string,\n repoPath: string,\n): Contract[] {\n const contracts: Contract[] = [];\n\n for (const node of graph.allNodes()) {\n // exported symbols → 'export' contracts\n if (\n node.exported === true &&\n ['function', 'class', 'interface', 'method', 'type_alias', 'constant', 'enum', 'struct', 'trait'].includes(node.kind)\n ) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'export',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // route nodes → 'route' contracts\n if (node.kind === 'route') {\n contracts.push({\n repoName,\n repoPath,\n kind: 'route',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // interfaces / type aliases with \"event\" or \"schema\" in name → schema/event contracts\n if (['interface', 'type_alias'].includes(node.kind)) {\n const nameLower = node.name.toLowerCase();\n if (nameLower.includes('event') || nameLower.includes('message')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'event',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n } else if (nameLower.includes('schema') || nameLower.includes('dto') || nameLower.includes('request') || nameLower.includes('response')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'schema',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n }\n }\n }\n\n return contracts;\n}\n\n// ─── Match contracts across repos ────────────────────────────────────────────\n\nfunction matchContracts(allContracts: Contract[]): ContractLink[] {\n const links: ContractLink[] = [];\n\n // Group contracts by repo\n const byRepo = new Map<string, Contract[]>();\n for (const c of allContracts) {\n const arr = byRepo.get(c.repoName) ?? [];\n arr.push(c);\n byRepo.set(c.repoName, arr);\n }\n\n const repoNames = [...byRepo.keys()];\n\n for (let i = 0; i < repoNames.length; i++) {\n for (let j = 0; j < repoNames.length; j++) {\n if (i === j) continue;\n const providerContracts = byRepo.get(repoNames[i])!;\n const consumerContracts = byRepo.get(repoNames[j])!;\n\n // Build a name map for the consumer\n const consumerByName = new Map<string, Contract>();\n for (const c of consumerContracts) consumerByName.set(c.name, c);\n\n for (const provider of providerContracts) {\n const consumer = consumerByName.get(provider.name);\n if (consumer) {\n // same-kind matches are more confident\n const sameKind = provider.kind === consumer.kind;\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: consumer.repoName,\n consumerContract: consumer.name,\n matchKind: provider.kind === 'route' ? 'route-match' : 'name-match',\n confidence: sameKind ? 0.9 : 0.6,\n });\n } else {\n // partial-name match (camelCase contained)\n const providerLC = provider.name.toLowerCase();\n for (const c of consumerContracts) {\n if (c.name.toLowerCase().includes(providerLC) || providerLC.includes(c.name.toLowerCase())) {\n if (c.name.length >= 4 && provider.name.length >= 4) {\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: c.repoName,\n consumerContract: c.name,\n matchKind: 'name-match',\n confidence: 0.4,\n });\n }\n }\n }\n }\n }\n }\n }\n\n // Deduplicate: keep highest-confidence for a given (pRepo, pContract, cRepo) triple\n const seen = new Map<string, ContractLink>();\n for (const link of links) {\n const key = `${link.providerRepo}:${link.providerContract}:${link.consumerRepo}:${link.consumerContract}`;\n const existing = seen.get(key);\n if (!existing || link.confidence > existing.confidence) {\n seen.set(key, link);\n }\n }\n\n return [...seen.values()].sort((a, b) => b.confidence - a.confidence);\n}\n\n// ─── Main sync function ───────────────────────────────────────────────────────\n\nexport async function syncGroup(group: RepoGroup): Promise<GroupSyncResult> {\n const registry = loadRegistry();\n const allContracts: Contract[] = [];\n\n for (const member of group.members) {\n // Resolve the actual repo path from the registry\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) {\n console.warn(` ⚠ Registry entry \"${member.registryName}\" not found — skipping ${member.groupPath}`);\n continue;\n }\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) {\n console.warn(` ⚠ No index at ${dbPath} — run \\`code-intel analyze ${regEntry.path}\\` first`);\n continue;\n }\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch (err) {\n db.close();\n console.warn(` ⚠ Could not load graph for \"${member.registryName}\": ${err instanceof Error ? err.message : err}`);\n continue;\n }\n\n const contracts = extractContracts(graph, member.registryName, regEntry.path);\n console.log(` ✓ ${member.registryName} (${member.groupPath}): ${contracts.length} contracts`);\n allContracts.push(...contracts);\n }\n\n const links = matchContracts(allContracts);\n\n return {\n groupName: group.name,\n syncedAt: new Date().toISOString(),\n memberCount: group.members.length,\n contracts: allContracts,\n links,\n };\n}\n","/**\n * group-query.ts\n * Search execution flows across all repos in a group.\n * Loads each repo's graph, runs text search, and merges via RRF.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup } from './types.js';\nimport type { SearchResult } from '../search/text-search.js';\nimport { textSearch, reciprocalRankFusion } from '../search/text-search.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\n\nexport interface GroupQueryResult {\n repoName: string;\n repoPath: string;\n groupPath: string;\n results: SearchResult[];\n}\n\nexport async function queryGroup(\n group: RepoGroup,\n query: string,\n limit = 20,\n): Promise<{ perRepo: GroupQueryResult[]; merged: SearchResult[] }> {\n const registry = loadRegistry();\n const perRepo: GroupQueryResult[] = [];\n const allRankings: SearchResult[][] = [];\n\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch {\n db.close();\n continue;\n }\n\n const results = textSearch(graph, query, limit);\n // Tag each result with repo info via snippet prefix\n const taggedResults: SearchResult[] = results.map((r) => ({\n ...r,\n snippet: `[${member.registryName}] ${r.snippet ?? ''}`.trim(),\n }));\n\n perRepo.push({\n repoName: member.registryName,\n repoPath: regEntry.path,\n groupPath: member.groupPath,\n results: taggedResults,\n });\n allRankings.push(taggedResults);\n }\n\n const merged = reciprocalRankFusion(...allRankings).slice(0, limit);\n return { perRepo, merged };\n}\n","export type { RepoGroup, GroupMember, Contract, ContractLink, ContractKind, GroupSyncResult, LinkKind } from './types.js';\nexport { loadGroup, saveGroup, listGroups, deleteGroup, groupExists, addMember, removeMember, saveSyncResult, loadSyncResult } from './group-registry.js';\nexport { syncGroup } from './group-sync.js';\nexport { queryGroup } from './group-query.js';\nexport type { GroupQueryResult } from './group-query.js';\nexport { loadGraphFromDB } from './graph-from-db.js';\n\n// Legacy export kept for backwards compatibility\nexport { mergeSearchResults } from './cross-repo-search.js';\n","import type { SearchResult } from '../search/text-search.js';\nimport { reciprocalRankFusion } from '../search/text-search.js';\n\nexport function mergeSearchResults(...perRepoResults: SearchResult[][]): SearchResult[] {\n return reciprocalRankFusion(...perRepoResults);\n}\n"]}
|