@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/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/storage/db-manager.ts","../../src/storage/schema.ts","../../src/storage/csv-writer.ts","../../src/storage/graph-loader.ts","../../src/storage/repo-registry.ts","../../src/storage/metadata.ts","../../src/storage/index.ts","../../src/search/vector-index.ts","../../src/multi-repo/group-registry.ts","../../src/search/embedder.ts","../../src/graph/knowledge-graph.ts","../../src/pipeline/dag-validator.ts","../../src/pipeline/orchestrator.ts","../../src/shared/detection.ts","../../src/graph/id-generator.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/search/text-search.ts","../../src/http/app.ts","../../src/multi-repo/group-sync.ts","../../src/multi-repo/graph-from-db.ts","../../src/multi-repo/group-query.ts","../../src/mcp-server/server.ts","../../src/cli/main.ts","../../src/cli/skill-writer.ts","../../src/cli/context-writer.ts"],"names":["fs","path","stream","os","relativePath","__dirname","embedNodes","saveGroup","__filename","fileURLToPath","getVectorDbPath","VectorIndex","codeIntelDir"],"mappings":"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","file":"main.js","sourcesContent":["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 fs from 'node:fs';\nimport path from 'node:path';\nimport type { CodeNode, CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { NODE_TABLE_MAP } from './schema.js';\n\nexport function writeNodeCSVs(graph: KnowledgeGraph, outputDir: string): Map<string, string> {\n fs.mkdirSync(outputDir, { recursive: true });\n const tableFiles = new Map<string, fs.WriteStream>();\n const tableFilePaths = new Map<string, string>();\n const header = 'id,name,file_path,start_line,end_line,exported,content,metadata\\n';\n\n for (const node of graph.allNodes()) {\n const table = NODE_TABLE_MAP[node.kind];\n if (!tableFiles.has(table)) {\n const filePath = path.join(outputDir, `${table}.csv`);\n const stream = fs.createWriteStream(filePath);\n stream.write(header);\n tableFiles.set(table, stream);\n tableFilePaths.set(table, filePath);\n }\n\n const stream = tableFiles.get(table)!;\n stream.write(csvRow([\n node.id,\n node.name,\n node.filePath,\n String(node.startLine ?? ''),\n String(node.endLine ?? ''),\n String(node.exported ?? false),\n (node.content ?? '').slice(0, 1000),\n node.metadata ? JSON.stringify(node.metadata) : '',\n ]) + '\\n');\n }\n\n for (const stream of tableFiles.values()) {\n stream.end();\n }\n\n return tableFilePaths;\n}\n\nexport interface EdgeCSVGroup {\n fromTable: string;\n toTable: string;\n filePath: string;\n}\n\nexport function writeEdgeCSV(graph: KnowledgeGraph, outputDir: string): EdgeCSVGroup[] {\n fs.mkdirSync(outputDir, { recursive: true });\n const groups = new Map<string, { stream: fs.WriteStream; filePath: string; from: string; to: string }>();\n const header = 'from_id,to_id,kind,weight,label\\n';\n\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 const key = `${fromTable}->${toTable}`;\n\n if (!groups.has(key)) {\n const filePath = path.join(outputDir, `edges_${fromTable}_${toTable}.csv`);\n const stream = fs.createWriteStream(filePath);\n stream.write(header);\n groups.set(key, { stream, filePath, from: fromTable, to: toTable });\n }\n\n const group = groups.get(key)!;\n group.stream.write(csvRow([\n edge.source,\n edge.target,\n edge.kind,\n String(edge.weight ?? 1.0),\n edge.label ?? '',\n ]) + '\\n');\n }\n\n const result: EdgeCSVGroup[] = [];\n for (const group of groups.values()) {\n group.stream.end();\n result.push({ fromTable: group.from, toTable: group.to, filePath: group.filePath });\n }\n\n return result;\n}\n\nfunction csvRow(fields: string[]): string {\n return fields.map((f) => {\n if (f.includes(',') || f.includes('\"') || f.includes('\\n')) {\n return '\"' + f.replace(/\"/g, '\"\"') + '\"';\n }\n return f;\n }).join(',');\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","export { DbManager } from './db-manager.js';\nexport { ALL_NODE_TABLES, NODE_TABLE_MAP, getCreateNodeTableDDL, getCreateEdgeTableDDL } from './schema.js';\nexport { writeNodeCSVs, writeEdgeCSV } from './csv-writer.js';\nexport type { EdgeCSVGroup } from './csv-writer.js';\nexport { loadGraphToDB } from './graph-loader.js';\nexport { loadRegistry, saveRegistry, upsertRepo, removeRepo } from './repo-registry.js';\nexport type { RepoEntry } from './repo-registry.js';\nexport { saveMetadata, loadMetadata, getDbPath, getVectorDbPath } from './metadata.js';\nexport type { IndexMetadata } from './metadata.js';\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","/**\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 { 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","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 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 { 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","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 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","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","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 * 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 * 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-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","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","#!/usr/bin/env node\n\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { join, dirname } from 'node:path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n// Resolve package.json relative to the built CLI file (dist/cli/main.js → ../../package.json)\nconst _pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8')) as { version: string };\n\nimport { Command } from 'commander';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { runPipeline } from '../pipeline/orchestrator.js';\nimport {\n scanPhase,\n structurePhase,\n parsePhase,\n resolvePhase,\n clusterPhase,\n flowPhase,\n} from '../pipeline/phases/index.js';\nimport { startHttpServer } from '../http/app.js';\nimport { startMcpStdio } from '../mcp-server/server.js';\nimport { textSearch } from '../search/text-search.js';\nimport type { PipelineContext } from '../pipeline/types.js';\nimport { saveMetadata, loadMetadata, getDbPath } from '../storage/metadata.js';\nimport { writeSkillFiles } from './skill-writer.js';\nimport { writeContextFiles } from './context-writer.js';\nimport { upsertRepo, loadRegistry, removeRepo } from '../storage/repo-registry.js';\nimport { DbManager, loadGraphToDB } from '../storage/index.js';\nimport {\n loadGroup,\n saveGroup,\n listGroups,\n deleteGroup,\n groupExists,\n addMember,\n removeMember,\n saveSyncResult,\n loadSyncResult,\n} from '../multi-repo/group-registry.js';\nimport { syncGroup } from '../multi-repo/group-sync.js';\nimport { queryGroup } from '../multi-repo/group-query.js';\n\nconst program = new Command();\n\nprogram\n .name('code-intel')\n .description('Code Intelligence Platform — Static Analysis + Knowledge Graph')\n .version(_pkg.version);\n\nasync function analyzeWorkspace(targetPath: string, options?: {\n silent?: boolean;\n force?: boolean;\n skills?: boolean;\n skipEmbeddings?: boolean;\n skipAgentsMd?: boolean;\n skipGit?: boolean;\n embeddings?: boolean;\n verbose?: boolean;\n}) {\n const workspaceRoot = path.resolve(targetPath);\n if (!options?.silent) console.log(`Analyzing: ${workspaceRoot}`);\n\n // --skip-git: skip the .git check (allow non-git folders)\n if (!options?.skipGit) {\n const gitDir = path.join(workspaceRoot, '.git');\n if (!fs.existsSync(gitDir)) {\n console.warn(` Warning: ${workspaceRoot} is not a Git repository. Use --skip-git to suppress this warning.`);\n }\n }\n\n const graph = createKnowledgeGraph();\n const context: PipelineContext = {\n workspaceRoot,\n graph,\n filePaths: [],\n verbose: options?.verbose,\n onProgress: options?.silent ? undefined : (phase, msg) => console.log(` [${phase}] ${msg}`),\n };\n\n const phases = [scanPhase, structurePhase, parsePhase, resolvePhase, clusterPhase, flowPhase];\n const result = await runPipeline(phases, context);\n\n // Save metadata\n const repoName = path.basename(workspaceRoot);\n saveMetadata(workspaceRoot, {\n indexedAt: new Date().toISOString(),\n stats: {\n nodes: graph.size.nodes,\n edges: graph.size.edges,\n files: context.filePaths.length,\n duration: result.totalDuration,\n },\n });\n\n upsertRepo({\n name: repoName,\n path: workspaceRoot,\n indexedAt: new Date().toISOString(),\n stats: {\n nodes: graph.size.nodes,\n edges: graph.size.edges,\n files: context.filePaths.length,\n },\n });\n\n // Persist graph to LadybugDB\n try {\n const dbPath = getDbPath(workspaceRoot);\n const db = new DbManager(dbPath);\n await db.init();\n const { nodeCount, edgeCount } = await loadGraphToDB(graph, db);\n db.close();\n if (!options?.silent) {\n console.log(` DB: ${nodeCount} nodes, ${edgeCount} edges persisted`);\n }\n } catch (err) {\n if (!options?.silent) {\n console.warn(` DB persist warning: ${err instanceof Error ? err.message : err}`);\n }\n }\n\n // Vector embeddings (opt-in or --embeddings, skip if --skip-embeddings)\n const doEmbeddings = options?.embeddings && !options?.skipEmbeddings;\n if (doEmbeddings) {\n if (!options?.silent) console.log(' Embeddings: building vector index…');\n try {\n const { embedNodes } = await import('../search/embedder.js');\n const { getVectorDbPath } = await import('../storage/index.js');\n const { VectorIndex } = await import('../search/vector-index.js');\n const vdbPath = getVectorDbPath(workspaceRoot);\n const vdb = new DbManager(vdbPath);\n await vdb.init();\n const idx = new VectorIndex(vdb);\n await idx.init();\n const nodes = await embedNodes(graph, {\n onProgress: (done, total) => {\n if (!options?.silent) process.stdout.write(`\\r [vector] ${done}/${total}`);\n },\n });\n if (!options?.silent) console.log('');\n await idx.buildIndex(nodes);\n if (!options?.silent) console.log(` Embeddings: ${nodes.length} vectors built`);\n vdb.close();\n } catch (err) {\n if (!options?.silent) {\n console.warn(` Embeddings warning: ${err instanceof Error ? err.message : err}`);\n }\n }\n } else if (!options?.skipEmbeddings && !options?.silent) {\n console.log(' Embeddings: skipped (use --embeddings to enable)');\n }\n\n // Generate .claude/skills/code-intel/ skill files (always, unless --skills was set to false)\n const doSkills = options?.skills !== false;\n let skillSummaries: { name: string; label: string; symbolCount: number; fileCount: number }[] = [];\n if (doSkills) {\n try {\n const { skills } = await writeSkillFiles(graph, workspaceRoot, repoName);\n skillSummaries = skills;\n if (!options?.silent && skills.length > 0) {\n console.log(` Skills: ${skills.length} generated → .claude/skills/code-intel/`);\n }\n } catch (err) {\n if (!options?.silent) {\n console.warn(` Skills warning: ${err instanceof Error ? err.message : err}`);\n }\n }\n }\n\n // Write AGENTS.md + CLAUDE.md context blocks\n if (!options?.skipAgentsMd) {\n try {\n writeContextFiles(workspaceRoot, repoName, {\n nodes: graph.size.nodes,\n edges: graph.size.edges,\n files: context.filePaths.length,\n duration: result.totalDuration,\n }, skillSummaries);\n if (!options?.silent) {\n console.log(` Context: AGENTS.md + CLAUDE.md updated`);\n }\n } catch (err) {\n if (!options?.silent) {\n console.warn(` Context warning: ${err instanceof Error ? err.message : err}`);\n }\n }\n }\n\n if (!options?.silent) {\n console.log(`\\nDone in ${result.totalDuration}ms`);\n console.log(` Nodes: ${graph.size.nodes}`);\n console.log(` Edges: ${graph.size.edges}`);\n console.log(` Files: ${context.filePaths.length}`);\n console.log(` Success: ${result.success}`);\n }\n\n return { graph, result, repoName, workspaceRoot };\n}\n\n// ─── 1. setup ────────────────────────────────────────────────────────────────\nprogram\n .command('setup')\n .description('Configure MCP server for your editors (one-time setup)')\n .action(() => {\n const configDir = process.env.HOME ? `${process.env.HOME}/.config/claude` : null;\n\n console.log('\\n📡 Code Intelligence MCP Setup\\n');\n console.log('Add the following to your editor MCP configuration:\\n');\n\n const mcpConfig = {\n mcpServers: {\n 'code-intel': {\n command: 'npx',\n args: ['@vohongtho.infotech/code-intel', 'mcp', '.'],\n },\n },\n };\n\n console.log('For Claude Desktop / Claude Code (~/.config/claude/claude_desktop_config.json):');\n console.log(JSON.stringify(mcpConfig, null, 2));\n\n if (configDir) {\n const configFile = `${configDir}/claude_desktop_config.json`;\n try {\n let existing: Record<string, unknown> = {};\n if (fs.existsSync(configFile)) {\n existing = JSON.parse(fs.readFileSync(configFile, 'utf-8')) as Record<string, unknown>;\n }\n const merged = {\n ...existing,\n mcpServers: {\n ...(existing.mcpServers as Record<string, unknown> ?? {}),\n ...mcpConfig.mcpServers,\n },\n };\n fs.mkdirSync(configDir, { recursive: true });\n fs.writeFileSync(configFile, JSON.stringify(merged, null, 2) + '\\n', 'utf-8');\n console.log(`\\n✅ Written to ${configFile}`);\n } catch (err) {\n console.warn(`\\n⚠ Could not auto-write config: ${err instanceof Error ? err.message : err}`);\n console.log('Please add the config above manually.');\n }\n }\n\n console.log('\\nFor VS Code (settings.json or .vscode/mcp.json), use the same mcpServers block.');\n console.log('\\nThen run `code-intel analyze` in your project to index it.\\n');\n });\n\n// ─── 2. analyze ──────────────────────────────────────────────────────────────\nprogram\n .command('analyze')\n .description('Index a repository (or update stale index)')\n .argument('[path]', 'Path to analyze', '.')\n .option('--force', 'Force full re-index even if already indexed')\n .option('--skills', 'Generate repo-specific skill files from detected communities')\n .option('--skip-embeddings', 'Skip embedding generation (faster)')\n .option('--skip-agents-md', 'Preserve custom AGENTS.md/CLAUDE.md code-intel section edits')\n .option('--skip-git', 'Index folders that are not Git repositories')\n .option('--embeddings', 'Enable embedding generation (slower, better search)')\n .option('--verbose', 'Log skipped files when parsers are unavailable')\n .addHelpText('after', `\nExamples:\n code-intel analyze Index current directory\n code-intel analyze ./my-project Index a specific path\n code-intel analyze --force Force full re-index\n code-intel analyze --skills Also generate .claude/skills/ files\n code-intel analyze --skip-embeddings Skip vector embeddings (faster)\n code-intel analyze --skip-agents-md Preserve custom AGENTS.md edits\n code-intel analyze --skip-git Allow non-Git folders\n code-intel analyze --embeddings Enable vector embeddings\n code-intel analyze --verbose Show skipped files`)\n .action(async (targetPath: string, opts: {\n force?: boolean;\n skills?: boolean;\n skipEmbeddings?: boolean;\n skipAgentsMd?: boolean;\n skipGit?: boolean;\n embeddings?: boolean;\n verbose?: boolean;\n }) => {\n await analyzeWorkspace(targetPath, {\n force: opts.force,\n skills: opts.skills,\n skipEmbeddings: opts.skipEmbeddings,\n skipAgentsMd: opts.skipAgentsMd,\n skipGit: opts.skipGit,\n embeddings: opts.embeddings,\n verbose: opts.verbose,\n });\n });\n\n// ─── 3. mcp ──────────────────────────────────────────────────────────────────\nprogram\n .command('mcp')\n .description('Start MCP server (stdio) — serves all indexed repos')\n .argument('[path]', 'Path to analyze', '.')\n .action(async (targetPath: string) => {\n const { graph, repoName } = await analyzeWorkspace(targetPath, { silent: true });\n await startMcpStdio(graph, repoName);\n });\n\n// ─── 4. serve ────────────────────────────────────────────────────────────────\nprogram\n .command('serve')\n .description('Start local HTTP server + web UI (http://localhost:4747)')\n .argument('[path]', 'Path to analyze', '.')\n .option('-p, --port <port>', 'Port number', '4747')\n .action(async (targetPath: string, options: { port: string }) => {\n const { graph, repoName, workspaceRoot } = await analyzeWorkspace(targetPath);\n startHttpServer(graph, repoName, parseInt(options.port, 10), workspaceRoot);\n });\n\n// ─── 5. list ─────────────────────────────────────────────────────────────────\nprogram\n .command('list')\n .description('List all indexed repositories')\n .action(() => {\n const repos = loadRegistry();\n if (repos.length === 0) {\n console.log('No indexed repositories. Run `code-intel analyze <path>` first.');\n return;\n }\n console.log(`\\nIndexed repositories (${repos.length}):\\n`);\n for (const r of repos) {\n console.log(` ${r.name.padEnd(25)} ${r.stats.nodes} nodes, ${r.stats.edges} edges, ${r.stats.files} files`);\n console.log(` Path: ${r.path}`);\n console.log(` Indexed: ${r.indexedAt}`);\n }\n });\n\n// ─── 6. status ───────────────────────────────────────────────────────────────\nprogram\n .command('status')\n .description('Show index status for current repo')\n .argument('[path]', 'Path to check', '.')\n .action((targetPath: string) => {\n const workspaceRoot = path.resolve(targetPath);\n const meta = loadMetadata(workspaceRoot);\n if (!meta) {\n console.log('Not indexed. Run `code-intel analyze` first.');\n return;\n }\n console.log(`\\nIndex status for ${workspaceRoot}:`);\n console.log(` Indexed at: ${meta.indexedAt}`);\n console.log(` Nodes: ${meta.stats.nodes}`);\n console.log(` Edges: ${meta.stats.edges}`);\n console.log(` Files: ${meta.stats.files}`);\n console.log(` Duration: ${meta.stats.duration}ms`);\n });\n\n// ─── 7. clean ────────────────────────────────────────────────────────────────\nprogram\n .command('clean')\n .description('Delete index for current repo (or all repos with --all --force)')\n .argument('[path]', 'Path to clean', '.')\n .option('--all', 'Clean all indexed repositories')\n .option('--force', 'Required with --all to confirm destructive operation')\n .action((targetPath: string, opts: { all?: boolean; force?: boolean }) => {\n if (opts.all) {\n if (!opts.force) {\n console.error('Error: --all requires --force to confirm. Run: code-intel clean --all --force');\n process.exit(1);\n }\n const repos = loadRegistry();\n if (repos.length === 0) {\n console.log('No indexed repositories to clean.');\n return;\n }\n for (const r of repos) {\n const codeIntelDir = path.join(r.path, '.code-intel');\n if (fs.existsSync(codeIntelDir)) {\n fs.rmSync(codeIntelDir, { recursive: true, force: true });\n console.log(` Removed ${codeIntelDir}`);\n }\n removeRepo(r.path);\n }\n console.log(`\\nCleaned ${repos.length} repositor${repos.length === 1 ? 'y' : 'ies'}.`);\n return;\n }\n\n const workspaceRoot = path.resolve(targetPath);\n const codeIntelDir = path.join(workspaceRoot, '.code-intel');\n if (fs.existsSync(codeIntelDir)) {\n fs.rmSync(codeIntelDir, { recursive: true, force: true });\n console.log(`Removed ${codeIntelDir}`);\n }\n removeRepo(workspaceRoot);\n console.log('Index cleaned.');\n });\n\n// ─── 8. search ───────────────────────────────────────────────────────────────\nprogram\n .command('search')\n .description('Search the knowledge graph')\n .argument('<query>', 'Search query')\n .option('-l, --limit <limit>', 'Max results', '20')\n .option('-p, --path <path>', 'Path to analyze', '.')\n .action(async (query: string, options: { limit: string; path: string }) => {\n const { graph } = await analyzeWorkspace(options.path, { silent: true });\n const results = textSearch(graph, query, parseInt(options.limit, 10));\n if (results.length === 0) {\n console.log('No results found.');\n return;\n }\n console.log(`Found ${results.length} results for \"${query}\":\\n`);\n for (const r of results) {\n console.log(` ${r.kind.padEnd(12)} ${r.name.padEnd(30)} ${r.filePath}`);\n }\n });\n\n// ─── 9. inspect ──────────────────────────────────────────────────────────────\nprogram\n .command('inspect')\n .description('Inspect a symbol: callers, callees, location')\n .argument('<symbol>', 'Symbol name')\n .option('-p, --path <path>', 'Path to analyze', '.')\n .action(async (symbol: string, options: { path: string }) => {\n const { graph } = await analyzeWorkspace(options.path, { silent: true });\n\n let found = false;\n for (const node of graph.allNodes()) {\n if (node.name === symbol) {\n found = true;\n console.log(`\\n${node.kind}: ${node.name}`);\n console.log(` File: ${node.filePath}:${node.startLine ?? '?'}`);\n console.log(` Exported: ${node.exported ?? 'unknown'}`);\n\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n const callers = incoming.filter((e) => e.kind === 'calls');\n const callees = outgoing.filter((e) => e.kind === 'calls');\n\n if (callers.length > 0) {\n console.log(` Callers (${callers.length}):`);\n for (const c of callers.slice(0, 10)) {\n const n = graph.getNode(c.source);\n console.log(` ← ${n?.name ?? c.source} (${n?.filePath})`);\n }\n }\n if (callees.length > 0) {\n console.log(` Callees (${callees.length}):`);\n for (const c of callees.slice(0, 10)) {\n const n = graph.getNode(c.target);\n console.log(` → ${n?.name ?? c.target} (${n?.filePath})`);\n }\n }\n break;\n }\n }\n\n if (!found) console.log(`Symbol \"${symbol}\" not found.`);\n });\n\n// ─── 10. impact ──────────────────────────────────────────────────────────────\nprogram\n .command('impact')\n .description('Show blast radius for a symbol')\n .argument('<symbol>', 'Symbol name')\n .option('-p, --path <path>', 'Path to analyze', '.')\n .option('-d, --depth <depth>', 'Max hops', '5')\n .action(async (symbol: string, options: { path: string; depth: string }) => {\n const { graph } = await analyzeWorkspace(options.path, { silent: true });\n const maxHops = parseInt(options.depth, 10);\n\n let targetNode = null;\n for (const node of graph.allNodes()) {\n if (node.name === symbol) { targetNode = node; break; }\n }\n if (!targetNode) { console.log(`Symbol \"${symbol}\" not found.`); return; }\n\n const affected = new Set<string>();\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 > maxHops) continue;\n visited.add(id);\n affected.add(id);\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 console.log(`\\nBlast radius for \"${symbol}\": ${affected.size} affected symbols\\n`);\n for (const id of affected) {\n const n = graph.getNode(id);\n if (n) console.log(` ${n.kind.padEnd(12)} ${n.name.padEnd(30)} ${n.filePath}`);\n }\n });\n\n// ─── 11. group ───────────────────────────────────────────────────────────────\nconst groupCmd = program\n .command('group')\n .description('Manage repository groups (multi-repo / monorepo service tracking)');\n\n// group create <name>\ngroupCmd\n .command('create <name>')\n .description('Create a repository group')\n .action((name: string) => {\n if (groupExists(name)) {\n console.error(`Error: Group \"${name}\" already exists.`);\n process.exit(1);\n }\n saveGroup({ name, createdAt: new Date().toISOString(), members: [] });\n console.log(`✅ Group \"${name}\" created.`);\n });\n\n// group add <group> <groupPath> <registryName>\ngroupCmd\n .command('add <group> <groupPath> <registryName>')\n .description('Add a repo to a group. <groupPath> is a hierarchy path (e.g. hr/hiring/backend); <registryName> is from `code-intel list`')\n .action((group: string, groupPath: string, registryName: string) => {\n // Validate the registry entry exists\n const registry = loadRegistry();\n const regEntry = registry.find((r) => r.name === registryName);\n if (!regEntry) {\n console.error(`Error: Registry entry \"${registryName}\" not found. Run \\`code-intel list\\` to see available repos.`);\n process.exit(1);\n }\n if (!groupExists(group)) {\n console.error(`Error: Group \"${group}\" does not exist. Create it first with \\`code-intel group create ${group}\\`.`);\n process.exit(1);\n }\n addMember(group, { groupPath, registryName });\n console.log(`✅ Added \"${registryName}\" to group \"${group}\" at path \"${groupPath}\".`);\n });\n\n// group remove <group> <groupPath>\ngroupCmd\n .command('remove <group> <groupPath>')\n .description('Remove a repo from a group by its hierarchy path')\n .action((group: string, groupPath: string) => {\n if (!groupExists(group)) {\n console.error(`Error: Group \"${group}\" does not exist.`);\n process.exit(1);\n }\n try {\n removeMember(group, groupPath);\n console.log(`✅ Removed member at path \"${groupPath}\" from group \"${group}\".`);\n } catch (err) {\n console.error(`Error: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n });\n\n// group list [name]\ngroupCmd\n .command('list [name]')\n .description('List all groups, or show one group\\'s config')\n .action((name?: string) => {\n if (name) {\n const group = loadGroup(name);\n if (!group) {\n console.error(`Error: Group \"${name}\" not found.`);\n process.exit(1);\n }\n console.log(`\\nGroup: ${group.name}`);\n console.log(`Created: ${group.createdAt}`);\n if (group.lastSync) console.log(`Last sync: ${group.lastSync}`);\n console.log(`\\nMembers (${group.members.length}):`);\n if (group.members.length === 0) {\n console.log(' (none — use `code-intel group add` to add repos)');\n } else {\n for (const m of group.members) {\n console.log(` ${m.groupPath.padEnd(35)} → ${m.registryName}`);\n }\n }\n } else {\n const groups = listGroups();\n if (groups.length === 0) {\n console.log('No groups found. Create one with `code-intel group create <name>`.');\n return;\n }\n console.log(`\\nRepository groups (${groups.length}):\\n`);\n for (const g of groups) {\n const sync = g.lastSync ? `synced ${g.lastSync}` : 'not synced';\n console.log(` ${g.name.padEnd(25)} ${g.members.length} member(s) [${sync}]`);\n }\n }\n });\n\n// group sync <name>\ngroupCmd\n .command('sync <name>')\n .description('Extract contracts and match across repos/services in a group')\n .action(async (name: string) => {\n const group = loadGroup(name);\n if (!group) {\n console.error(`Error: Group \"${name}\" not found.`);\n process.exit(1);\n }\n if (group.members.length === 0) {\n console.error(`Error: Group \"${name}\" has no members. Add repos with \\`code-intel group add\\`.`);\n process.exit(1);\n }\n\n console.log(`\\n🔄 Syncing group \"${name}\" (${group.members.length} member(s))…\\n`);\n const result = await syncGroup(group);\n\n // Persist sync result and update lastSync timestamp\n saveSyncResult(result);\n group.lastSync = result.syncedAt;\n saveGroup(group);\n\n console.log(`\\n✅ Sync complete:`);\n console.log(` Repos synced: ${result.memberCount}`);\n console.log(` Contracts: ${result.contracts.length}`);\n console.log(` Cross-links: ${result.links.length}`);\n\n if (result.links.length > 0) {\n console.log(`\\nTop cross-repo links:`);\n for (const link of result.links.slice(0, 10)) {\n const conf = (link.confidence * 100).toFixed(0).padStart(3);\n console.log(` ${conf}% ${link.providerRepo} ∷ ${link.providerContract.padEnd(30)} ↔ ${link.consumerRepo} ∷ ${link.consumerContract}`);\n }\n if (result.links.length > 10) {\n console.log(` … and ${result.links.length - 10} more. Run \\`code-intel group contracts ${name}\\` for full details.`);\n }\n }\n });\n\n// group contracts <name>\ngroupCmd\n .command('contracts <name>')\n .description('Inspect extracted contracts and cross-links from the last sync')\n .option('--kind <kind>', 'Filter by contract kind: export | route | schema | event')\n .option('--repo <repo>', 'Filter by registry name')\n .option('--min-confidence <pct>', 'Minimum link confidence 0-100 (default: 0)', '0')\n .action((name: string, opts: { kind?: string; repo?: string; minConfidence: string }) => {\n const result = loadSyncResult(name);\n if (!result) {\n console.error(`No sync data for group \"${name}\". Run \\`code-intel group sync ${name}\\` first.`);\n process.exit(1);\n }\n\n const minConf = parseInt(opts.minConfidence, 10) / 100;\n\n let contracts = result.contracts;\n if (opts.kind) contracts = contracts.filter((c) => c.kind === opts.kind);\n if (opts.repo) contracts = contracts.filter((c) => c.repoName === opts.repo);\n\n let links = result.links.filter((l) => l.confidence >= minConf);\n if (opts.repo) links = links.filter((l) => l.providerRepo === opts.repo || l.consumerRepo === opts.repo);\n\n console.log(`\\n📦 Group \"${name}\" — synced ${result.syncedAt}\\n`);\n\n console.log(`Contracts (${contracts.length}):`);\n for (const c of contracts) {\n const sig = c.signature ? ` ${c.signature.slice(0, 60)}` : '';\n console.log(` [${c.kind.padEnd(6)}] ${c.repoName.padEnd(20)} ${c.name.padEnd(35)}${sig}`);\n }\n\n console.log(`\\nCross-repo links (${links.length}):`);\n if (links.length === 0) {\n console.log(' (none)');\n } else {\n for (const link of links) {\n const conf = (link.confidence * 100).toFixed(0).padStart(3);\n console.log(` ${conf}% [${link.matchKind}] ${link.providerRepo} ∷ ${link.providerContract.padEnd(30)} ↔ ${link.consumerRepo} ∷ ${link.consumerContract}`);\n }\n }\n });\n\n// group query <name> <q>\ngroupCmd\n .command('query <name> <q>')\n .description('Search execution flows across all repos in a group')\n .option('-l, --limit <limit>', 'Max results per repo', '10')\n .action(async (name: string, q: string, opts: { limit: string }) => {\n const group = loadGroup(name);\n if (!group) {\n console.error(`Error: Group \"${name}\" not found.`);\n process.exit(1);\n }\n\n console.log(`\\n🔍 Querying group \"${name}\" for: \"${q}\"\\n`);\n const limit = parseInt(opts.limit, 10);\n const { perRepo, merged } = await queryGroup(group, q, limit);\n\n if (merged.length === 0) {\n console.log('No results found across any repo in this group.');\n return;\n }\n\n console.log(`Merged results (${merged.length} total, ranked by Reciprocal Rank Fusion):\\n`);\n for (const r of merged) {\n console.log(` ${r.kind.padEnd(12)} ${r.name.padEnd(30)} ${r.filePath}`);\n if (r.snippet) console.log(` ${r.snippet.slice(0, 100)}`);\n }\n\n console.log(`\\nPer-repo breakdown:`);\n for (const rr of perRepo) {\n console.log(` ${rr.repoName} (${rr.groupPath}): ${rr.results.length} result(s)`);\n }\n });\n\n// group status <name>\ngroupCmd\n .command('status <name>')\n .description('Check staleness of repos in a group')\n .action((name: string) => {\n const group = loadGroup(name);\n if (!group) {\n console.error(`Error: Group \"${name}\" not found.`);\n process.exit(1);\n }\n\n const registry = loadRegistry();\n const now = Date.now();\n\n console.log(`\\n📊 Group \"${name}\" status\\n`);\n if (group.lastSync) {\n const age = Math.round((now - new Date(group.lastSync).getTime()) / 60000);\n console.log(`Last sync: ${group.lastSync} (${age} min ago)`);\n } else {\n console.log('Last sync: never (run `code-intel group sync ' + name + '`)');\n }\n console.log(`\\nMembers (${group.members.length}):\\n`);\n\n for (const m of group.members) {\n const regEntry = registry.find((r) => r.name === m.registryName);\n if (!regEntry) {\n console.log(` ✗ ${m.groupPath.padEnd(35)} [${m.registryName}] — NOT IN REGISTRY`);\n continue;\n }\n\n const metaPath = path.join(regEntry.path, '.code-intel', 'meta.json');\n let indexedAt = regEntry.indexedAt;\n try {\n const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8')) as { indexedAt: string; stats: { nodes: number; edges: number; files: number } };\n indexedAt = meta.indexedAt;\n const ageMin = Math.round((now - new Date(indexedAt).getTime()) / 60000);\n const stale = ageMin > 1440 ? ' ⚠ STALE (>24h)' : '';\n console.log(` ✓ ${m.groupPath.padEnd(35)} [${m.registryName}] indexed ${indexedAt} (${ageMin} min ago)${stale}`);\n console.log(` ${regEntry.path}`);\n console.log(` ${meta.stats.nodes} nodes, ${meta.stats.edges} edges, ${meta.stats.files} files`);\n } catch {\n console.log(` ✗ ${m.groupPath.padEnd(35)} [${m.registryName}] — NOT INDEXED (run: code-intel analyze ${regEntry.path})`);\n }\n }\n });\n\nprogram.parse();\n","/**\n * Skill file writer — generates .claude/skills/code-intel/ SKILL.md files\n * from the knowledge graph clusters, giving AI assistants structured,\n * high-accuracy context for each functional area of the codebase.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport type { CodeNode, CodeEdge } from '../shared/index.js';\n\nexport interface SkillSummary {\n name: string;\n label: string;\n symbolCount: number;\n fileCount: number;\n}\n\ninterface AreaInfo {\n label: string;\n dir: string;\n nodes: CodeNode[];\n files: Map<string, CodeNode[]>; // relPath -> nodes\n entryPoints: CodeNode[]; // exported, not called by others\n hotNodes: { node: CodeNode; inDeg: number; outDeg: number }[]; // highest degree\n callEdgesInArea: number; // density signal\n flowIds: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport async function writeSkillFiles(\n graph: KnowledgeGraph,\n workspaceRoot: string,\n projectName: string,\n): Promise<{ skills: SkillSummary[]; outputDir: string }> {\n const outputDir = path.join(workspaceRoot, '.claude', 'skills', 'code-intel');\n\n const areas = buildAreaMap(graph, workspaceRoot);\n if (areas.length === 0) return { skills: [], outputDir };\n\n fs.rmSync(outputDir, { recursive: true, force: true });\n fs.mkdirSync(outputDir, { recursive: true });\n\n const skills: SkillSummary[] = [];\n const usedNames = new Set<string>();\n\n for (const area of areas) {\n const kebab = uniqueKebab(area.label, usedNames);\n usedNames.add(kebab);\n\n const content = renderSkill(area, projectName, kebab);\n const dir = path.join(outputDir, kebab);\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(path.join(dir, 'SKILL.md'), content, 'utf-8');\n\n skills.push({ name: kebab, label: area.label, symbolCount: area.nodes.length, fileCount: area.files.size });\n }\n\n return { skills, outputDir };\n}\n\n// ---------------------------------------------------------------------------\n// Build area map from cluster nodes\n// ---------------------------------------------------------------------------\n\nfunction buildAreaMap(graph: KnowledgeGraph, workspaceRoot: string): AreaInfo[] {\n // Index cluster labels\n const clusterLabel = new Map<string, string>();\n const clusterMembers = new Map<string, CodeNode[]>();\n\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') {\n clusterLabel.set(node.id, node.name);\n clusterMembers.set(node.id, []);\n }\n }\n\n // Assign members via belongs_to\n for (const edge of graph.findEdgesByKind('belongs_to')) {\n const bucket = clusterMembers.get(edge.target);\n const node = graph.getNode(edge.source);\n if (bucket && node) bucket.push(node);\n }\n\n // Precompute degree maps for hot-node detection\n const inDeg = new Map<string, number>();\n const outDeg = new Map<string, number>();\n const calledIds = new Set<string>();\n\n for (const edge of graph.findEdgesByKind('calls')) {\n calledIds.add(edge.target);\n inDeg.set(edge.target, (inDeg.get(edge.target) ?? 0) + 1);\n outDeg.set(edge.source, (outDeg.get(edge.source) ?? 0) + 1);\n }\n\n const areas: AreaInfo[] = [];\n\n for (const [clusterId, members] of clusterMembers) {\n if (members.length < 3) continue;\n\n const label = clusterLabel.get(clusterId) ?? 'unknown';\n const dir = members[0]?.filePath.split('/').slice(0, -1).join('/') ?? '';\n\n // Group by relative file path\n const files = new Map<string, CodeNode[]>();\n for (const n of members) {\n const rel = relPath(n.filePath, workspaceRoot);\n let list = files.get(rel);\n if (!list) { list = []; files.set(rel, list); }\n list.push(n);\n }\n\n // Entry points: exported, not called from outside, callable kinds\n const entryPoints = members\n .filter((n) => n.exported && !calledIds.has(n.id) && ['function', 'method', 'class'].includes(n.kind))\n .slice(0, 6);\n\n // Hot nodes: highest combined degree (most connected = most important)\n const memberIds = new Set(members.map((n) => n.id));\n const hotNodes = members\n .map((n) => ({ node: n, inDeg: inDeg.get(n.id) ?? 0, outDeg: outDeg.get(n.id) ?? 0 }))\n .sort((a, b) => (b.inDeg + b.outDeg) - (a.inDeg + a.outDeg))\n .slice(0, 12);\n\n // Internal call density\n let callEdgesInArea = 0;\n for (const edge of graph.findEdgesByKind('calls')) {\n if (memberIds.has(edge.source) && memberIds.has(edge.target)) callEdgesInArea++;\n }\n\n // Flows touching this area\n const flowIds: string[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind !== 'flow') continue;\n const steps = node.metadata?.steps as string[] | undefined;\n if (steps?.some((s) => memberIds.has(s))) flowIds.push(node.id);\n if (flowIds.length >= 8) break;\n }\n\n areas.push({ label, dir, nodes: members, files, entryPoints, hotNodes, callEdgesInArea, flowIds });\n }\n\n areas.sort((a, b) => b.nodes.length - a.nodes.length);\n return areas.slice(0, 20);\n}\n\n// ---------------------------------------------------------------------------\n// Render optimized SKILL.md\n// ---------------------------------------------------------------------------\n\nfunction renderSkill(area: AreaInfo, projectName: string, kebabName: string): string {\n const density = area.nodes.length > 0\n ? Math.round((area.callEdgesInArea / area.nodes.length) * 10) / 10\n : 0;\n\n const topEntryNames = area.entryPoints.slice(0, 3).map((n) => n.name);\n const topHotNames = area.hotNodes.slice(0, 3).map((h) => h.node.name);\n\n // Pick best symbol names for description triggers\n const triggerNames = topEntryNames.length > 0 ? topEntryNames : topHotNames;\n const triggerStr = triggerNames.map((n) => `\\`${n}\\``).join(', ');\n\n // Dominant directory for scoping hint\n const dirs = [...area.files.keys()].map((f) => f.split('/').slice(0, -1).join('/') || '.');\n const dirCounts = new Map<string, number>();\n for (const d of dirs) dirCounts.set(d, (dirCounts.get(d) ?? 0) + 1);\n const dominantDir = [...dirCounts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0] ?? area.dir;\n\n const lines: string[] = [];\n\n // --- Frontmatter ---\n const description = [\n `Covers the **${area.label}** subsystem of ${projectName}.`,\n `${area.nodes.length} symbols across ${area.files.size} files.`,\n triggerStr ? `Key symbols: ${triggerStr}.` : '',\n `Internal call density: ${density} calls/symbol.`,\n area.flowIds.length > 0 ? `Participates in ${area.flowIds.length} execution flow(s).` : '',\n ].filter(Boolean).join(' ');\n\n lines.push('---');\n lines.push(`name: ${kebabName}`);\n lines.push(`description: \"${description.replace(/\"/g, \"'\")}\"`);\n lines.push('---', '');\n\n // --- Title block ---\n lines.push(`# ${area.label}`);\n lines.push('');\n lines.push(`> **${area.nodes.length} symbols** | **${area.files.size} files** | path: \\`${dominantDir}/\\` | call density: ${density}/sym`);\n lines.push('');\n\n // --- When to Use (precise triggers for the AI) ---\n lines.push('## When to Use');\n lines.push('');\n lines.push('Load this skill when:');\n lines.push(`- The task involves code in \\`${dominantDir}/\\``);\n if (triggerStr) lines.push(`- The user mentions ${triggerStr} or asks how they work`);\n lines.push(`- Adding, modifying, or debugging ${area.label.toLowerCase()}-related functionality`);\n lines.push(`- Tracing call chains that pass through the ${area.label} layer`);\n lines.push('');\n\n // --- Key Files ---\n lines.push('## Key Files');\n lines.push('');\n lines.push('| File | Symbols | Notes |');\n lines.push('|------|---------|-------|');\n const sortedFiles = [...area.files.entries()].sort((a, b) => b[1].length - a[1].length);\n for (const [file, nodes] of sortedFiles.slice(0, 10)) {\n const exported = nodes.filter((n) => n.exported);\n const names = nodes.slice(0, 4).map((n) => `\\`${n.name}\\``).join(', ');\n const extra = nodes.length > 4 ? ` +(${nodes.length - 4})` : '';\n const note = exported.length > 0 ? `${exported.length} exported` : 'internal';\n lines.push(`| \\`${file}\\` | ${names}${extra} | ${note} |`);\n }\n lines.push('');\n\n // --- Entry Points ---\n if (area.entryPoints.length > 0) {\n lines.push('## Entry Points');\n lines.push('');\n lines.push('Start exploration here — exported symbols with no external callers:');\n lines.push('');\n for (const ep of area.entryPoints) {\n const loc = ep.startLine ? `:${ep.startLine}` : '';\n lines.push(`- **\\`${ep.name}\\`** \\`(${ep.kind})\\` → \\`${ep.filePath}${loc}\\``);\n }\n lines.push('');\n }\n\n // --- Hot Symbols (most connected = highest impact) ---\n lines.push('## Hot Symbols');\n lines.push('');\n lines.push('Sorted by call graph degree (changing these has the highest blast radius):');\n lines.push('');\n lines.push('| Symbol | Kind | In ← | → Out | File |');\n lines.push('|--------|------|-----:|------:|------|');\n for (const { node: n, inDeg: i, outDeg: o } of area.hotNodes) {\n lines.push(`| \\`${n.name}\\` | ${n.kind} | ${i} | ${o} | \\`${relFile(n.filePath)}\\` |`);\n }\n lines.push('');\n\n // --- Execution Flows ---\n if (area.flowIds.length > 0) {\n lines.push('## Execution Flows');\n lines.push('');\n lines.push(`**${area.flowIds.length}** execution path(s) pass through this area.`);\n lines.push('Run `code-intel inspect <symbol>` on a hot symbol to trace the full call chain.');\n lines.push('');\n }\n\n // --- Impact Guidance ---\n lines.push('## Impact Guidance');\n lines.push('');\n lines.push('Before modifying any symbol in this area:');\n lines.push(`1. **High-degree symbols** (In ← ≥ 3) — check all callers before changing signatures`);\n lines.push(`2. **Entry points** — changes propagate to external consumers`);\n lines.push(`3. Run \\`code-intel impact <symbol>\\` to get full blast radius`);\n lines.push('');\n\n // --- Quick Commands ---\n const firstHot = area.hotNodes[0]?.node.name ?? area.nodes[0]?.name ?? area.label;\n const firstEntry = area.entryPoints[0]?.name ?? firstHot;\n lines.push('## Quick Commands');\n lines.push('');\n lines.push('```bash');\n lines.push(`# Inspect most-connected symbol`);\n lines.push(`code-intel inspect ${firstHot}`);\n lines.push(`# Blast radius for entry point`);\n lines.push(`code-intel impact ${firstEntry}`);\n lines.push(`# Search this area`);\n lines.push(`code-intel search \"${area.label.toLowerCase()}\"`);\n lines.push('```');\n lines.push('');\n\n return lines.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Utility helpers\n// ---------------------------------------------------------------------------\n\nfunction uniqueKebab(label: string, used: Set<string>): string {\n let base = label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 50) || 'skill';\n let candidate = base;\n let n = 2;\n while (used.has(candidate)) { candidate = `${base}-${n++}`; }\n return candidate;\n}\n\nfunction relPath(filePath: string, workspaceRoot: string): string {\n const norm = filePath.replace(/\\\\/g, '/');\n const root = workspaceRoot.replace(/\\\\/g, '/').replace(/\\/?$/, '/');\n return norm.startsWith(root) ? norm.slice(root.length) : norm.replace(/^\\//, '');\n}\n\nfunction relFile(filePath: string): string {\n const parts = filePath.replace(/\\\\/g, '/').split('/');\n return parts.slice(-2).join('/');\n}\n","/**\n * Context file writer — upserts a <!-- code-intel:start/end --> block into\n * AGENTS.md and CLAUDE.md so AI assistants get accurate codebase stats,\n * CLI commands, and skill links immediately after analysis.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { SkillSummary } from './skill-writer.js';\n\nconst BLOCK_START = '<!-- code-intel:start -->';\nconst BLOCK_END = '<!-- code-intel:end -->';\n\nexport interface ContextStats {\n nodes: number;\n edges: number;\n files: number;\n duration: number;\n}\n\n/**\n * Write AGENTS.md and CLAUDE.md at the workspace root.\n * Replaces any existing code-intel block; preserves all other content.\n */\nexport function writeContextFiles(\n workspaceRoot: string,\n projectName: string,\n stats: ContextStats,\n skills: SkillSummary[],\n): void {\n const block = buildBlock(projectName, stats, skills);\n\n upsertFile(path.join(workspaceRoot, 'AGENTS.md'), block);\n upsertFile(path.join(workspaceRoot, 'CLAUDE.md'), block);\n}\n\n// ---------------------------------------------------------------------------\n// Block content\n// ---------------------------------------------------------------------------\n\nfunction buildBlock(projectName: string, stats: ContextStats, skills: SkillSummary[]): string {\n const skillRows = skills\n .map((s) => `| Work in \\`${s.label}\\` (${s.symbolCount} symbols) | \\`.claude/skills/code-intel/${s.name}/SKILL.md\\` |`)\n .join('\\n');\n\n const skillTable = `| Task | Skill file |\n|------|------------|\n| Understand architecture / \"How does X work?\" | Load \\`code-intel-exploring\\` skill |\n| Blast radius / \"What breaks if I change X?\" | Load \\`code-intel-impact\\` skill |\n| Debugging / \"Why is X failing?\" | Load \\`code-intel-debugging\\` skill |\n${skillRows ? skillRows + '\\n' : ''}`;\n\n return `${BLOCK_START}\n# Code Intelligence — ${projectName}\n\nIndexed: **${stats.nodes.toLocaleString()} nodes** | **${stats.edges.toLocaleString()} edges** | **${stats.files} files** | analyzed in ${(stats.duration / 1000).toFixed(1)}s\n\n> If the index is stale, re-run: \\`code-intel analyze\\`\n\n## Always Do\n\n- **Before editing any symbol**, run \\`code-intel impact <symbol>\\` and review blast radius.\n- **Before committing**, verify scope with \\`code-intel inspect <symbol>\\`.\n- Use \\`code-intel search \"<concept>\"\\` to find related symbols instead of grepping.\n- Warn the user if impact shows ≥ 5 direct callers (HIGH risk).\n\n## Never Do\n\n- NEVER rename symbols with find-and-replace — use \\`code-intel inspect\\` to find all usages first.\n- NEVER ignore impact warnings — always report blast radius to the user.\n\n## CLI Quick Reference\n\n\\`\\`\\`bash\ncode-intel analyze [path] # Build / refresh the knowledge graph\ncode-intel serve [path] # Start HTTP API + Web UI on :4747\ncode-intel search <query> # Text search across all symbols\ncode-intel inspect <symbol> # Callers, callees, imports, cluster\ncode-intel impact <symbol> # Blast radius (who breaks if this changes)\ncode-intel status [path] # Index freshness and stats\ncode-intel clean [path] # Remove index data\n\\`\\`\\`\n\n## Skills\n\n${skillTable}\n${BLOCK_END}`;\n}\n\n// ---------------------------------------------------------------------------\n// File upsert: create → replace block → append\n// ---------------------------------------------------------------------------\n\nfunction upsertFile(filePath: string, block: string): void {\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, block + '\\n', 'utf-8');\n return;\n }\n\n const existing = fs.readFileSync(filePath, 'utf-8');\n const startIdx = findLineMarker(existing, BLOCK_START);\n const endIdx = findLineMarker(existing, BLOCK_END, startIdx === -1 ? 0 : startIdx);\n\n if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {\n // Replace existing block\n const before = existing.slice(0, startIdx);\n const after = existing.slice(endIdx + BLOCK_END.length);\n fs.writeFileSync(filePath, (before + block + after).trimEnd() + '\\n', 'utf-8');\n return;\n }\n\n // Append block\n fs.writeFileSync(filePath, existing.trimEnd() + '\\n\\n' + block + '\\n', 'utf-8');\n}\n\n/**\n * Find a marker that stands alone on its own line (not embedded in prose).\n */\nfunction findLineMarker(content: string, marker: string, startFrom = 0): number {\n let idx = content.indexOf(marker, startFrom);\n while (idx !== -1) {\n const atStart = idx === 0 || content[idx - 1] === '\\n';\n const end = idx + marker.length;\n const atEnd = end === content.length || content[end] === '\\n' || content[end] === '\\r';\n if (atStart && atEnd) return idx;\n idx = content.indexOf(marker, idx + 1);\n }\n return -1;\n}\n"]}
|