@vohongtho.infotech/code-intel 0.1.0
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/LICENSE +21 -0
- package/README.md +198 -0
- package/dist/call-graph/call-builder.d.ts +6 -0
- package/dist/call-graph/call-builder.d.ts.map +1 -0
- package/dist/call-graph/call-builder.js +69 -0
- package/dist/call-graph/call-builder.js.map +1 -0
- package/dist/call-graph/call-classifier.d.ts +12 -0
- package/dist/call-graph/call-classifier.d.ts.map +1 -0
- package/dist/call-graph/call-classifier.js +11 -0
- package/dist/call-graph/call-classifier.js.map +1 -0
- package/dist/call-graph/index.d.ts +4 -0
- package/dist/call-graph/index.d.ts.map +1 -0
- package/dist/call-graph/index.js +3 -0
- package/dist/call-graph/index.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +249 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/clustering/community-detector.d.ts +9 -0
- package/dist/clustering/community-detector.d.ts.map +1 -0
- package/dist/clustering/community-detector.js +67 -0
- package/dist/clustering/community-detector.js.map +1 -0
- package/dist/clustering/index.d.ts +3 -0
- package/dist/clustering/index.d.ts.map +1 -0
- package/dist/clustering/index.js +2 -0
- package/dist/clustering/index.js.map +1 -0
- package/dist/flow-detection/entry-point-finder.d.ts +14 -0
- package/dist/flow-detection/entry-point-finder.d.ts.map +1 -0
- package/dist/flow-detection/entry-point-finder.js +86 -0
- package/dist/flow-detection/entry-point-finder.js.map +1 -0
- package/dist/flow-detection/index.d.ts +3 -0
- package/dist/flow-detection/index.d.ts.map +1 -0
- package/dist/flow-detection/index.js +2 -0
- package/dist/flow-detection/index.js.map +1 -0
- package/dist/graph/id-generator.d.ts +4 -0
- package/dist/graph/id-generator.d.ts.map +1 -0
- package/dist/graph/id-generator.js +7 -0
- package/dist/graph/id-generator.js.map +1 -0
- package/dist/graph/index.d.ts +4 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +3 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/knowledge-graph.d.ts +21 -0
- package/dist/graph/knowledge-graph.d.ts.map +1 -0
- package/dist/graph/knowledge-graph.js +126 -0
- package/dist/graph/knowledge-graph.js.map +1 -0
- package/dist/http/app.d.ts +5 -0
- package/dist/http/app.d.ts.map +1 -0
- package/dist/http/app.js +359 -0
- package/dist/http/app.js.map +1 -0
- package/dist/http/index.d.ts +2 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +2 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/inheritance/heritage-builder.d.ts +9 -0
- package/dist/inheritance/heritage-builder.d.ts.map +1 -0
- package/dist/inheritance/heritage-builder.js +40 -0
- package/dist/inheritance/heritage-builder.js.map +1 -0
- package/dist/inheritance/index.d.ts +6 -0
- package/dist/inheritance/index.d.ts.map +1 -0
- package/dist/inheritance/index.js +4 -0
- package/dist/inheritance/index.js.map +1 -0
- package/dist/inheritance/mro-walker.d.ts +3 -0
- package/dist/inheritance/mro-walker.d.ts.map +1 -0
- package/dist/inheritance/mro-walker.js +80 -0
- package/dist/inheritance/mro-walker.js.map +1 -0
- package/dist/inheritance/override-detector.d.ts +4 -0
- package/dist/inheritance/override-detector.d.ts.map +1 -0
- package/dist/inheritance/override-detector.js +39 -0
- package/dist/inheritance/override-detector.js.map +1 -0
- package/dist/languages/index.d.ts +3 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +2 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/modules/c.d.ts +3 -0
- package/dist/languages/modules/c.d.ts.map +1 -0
- package/dist/languages/modules/c.js +23 -0
- package/dist/languages/modules/c.js.map +1 -0
- package/dist/languages/modules/cpp.d.ts +3 -0
- package/dist/languages/modules/cpp.d.ts.map +1 -0
- package/dist/languages/modules/cpp.js +23 -0
- package/dist/languages/modules/cpp.js.map +1 -0
- package/dist/languages/modules/csharp.d.ts +3 -0
- package/dist/languages/modules/csharp.d.ts.map +1 -0
- package/dist/languages/modules/csharp.js +21 -0
- package/dist/languages/modules/csharp.js.map +1 -0
- package/dist/languages/modules/dart.d.ts +3 -0
- package/dist/languages/modules/dart.d.ts.map +1 -0
- package/dist/languages/modules/dart.js +30 -0
- package/dist/languages/modules/dart.js.map +1 -0
- package/dist/languages/modules/go.d.ts +3 -0
- package/dist/languages/modules/go.d.ts.map +1 -0
- package/dist/languages/modules/go.js +25 -0
- package/dist/languages/modules/go.js.map +1 -0
- package/dist/languages/modules/java.d.ts +3 -0
- package/dist/languages/modules/java.d.ts.map +1 -0
- package/dist/languages/modules/java.js +23 -0
- package/dist/languages/modules/java.js.map +1 -0
- package/dist/languages/modules/kotlin.d.ts +3 -0
- package/dist/languages/modules/kotlin.d.ts.map +1 -0
- package/dist/languages/modules/kotlin.js +22 -0
- package/dist/languages/modules/kotlin.js.map +1 -0
- package/dist/languages/modules/php.d.ts +3 -0
- package/dist/languages/modules/php.d.ts.map +1 -0
- package/dist/languages/modules/php.js +21 -0
- package/dist/languages/modules/php.js.map +1 -0
- package/dist/languages/modules/python.d.ts +3 -0
- package/dist/languages/modules/python.d.ts.map +1 -0
- package/dist/languages/modules/python.js +36 -0
- package/dist/languages/modules/python.js.map +1 -0
- package/dist/languages/modules/ruby.d.ts +3 -0
- package/dist/languages/modules/ruby.d.ts.map +1 -0
- package/dist/languages/modules/ruby.js +20 -0
- package/dist/languages/modules/ruby.js.map +1 -0
- package/dist/languages/modules/rust.d.ts +3 -0
- package/dist/languages/modules/rust.d.ts.map +1 -0
- package/dist/languages/modules/rust.js +23 -0
- package/dist/languages/modules/rust.js.map +1 -0
- package/dist/languages/modules/swift.d.ts +3 -0
- package/dist/languages/modules/swift.d.ts.map +1 -0
- package/dist/languages/modules/swift.js +21 -0
- package/dist/languages/modules/swift.js.map +1 -0
- package/dist/languages/modules/typescript.d.ts +4 -0
- package/dist/languages/modules/typescript.d.ts.map +1 -0
- package/dist/languages/modules/typescript.js +47 -0
- package/dist/languages/modules/typescript.js.map +1 -0
- package/dist/languages/registry.d.ts +5 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +37 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +18 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +2 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/mcp-server/index.d.ts +2 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +2 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +224 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/multi-repo/cross-repo-search.d.ts +3 -0
- package/dist/multi-repo/cross-repo-search.d.ts.map +1 -0
- package/dist/multi-repo/cross-repo-search.js +5 -0
- package/dist/multi-repo/cross-repo-search.js.map +1 -0
- package/dist/multi-repo/group-config.d.ts +10 -0
- package/dist/multi-repo/group-config.d.ts.map +1 -0
- package/dist/multi-repo/group-config.js +54 -0
- package/dist/multi-repo/group-config.js.map +1 -0
- package/dist/multi-repo/group-manager.d.ts +6 -0
- package/dist/multi-repo/group-manager.d.ts.map +1 -0
- package/dist/multi-repo/group-manager.js +42 -0
- package/dist/multi-repo/group-manager.js.map +1 -0
- package/dist/multi-repo/index.d.ts +5 -0
- package/dist/multi-repo/index.d.ts.map +1 -0
- package/dist/multi-repo/index.js +4 -0
- package/dist/multi-repo/index.js.map +1 -0
- package/dist/parsing/ast-cache.d.ts +13 -0
- package/dist/parsing/ast-cache.d.ts.map +1 -0
- package/dist/parsing/ast-cache.js +45 -0
- package/dist/parsing/ast-cache.js.map +1 -0
- package/dist/parsing/index.d.ts +5 -0
- package/dist/parsing/index.d.ts.map +1 -0
- package/dist/parsing/index.js +4 -0
- package/dist/parsing/index.js.map +1 -0
- package/dist/parsing/parser-manager.d.ts +7 -0
- package/dist/parsing/parser-manager.d.ts.map +1 -0
- package/dist/parsing/parser-manager.js +48 -0
- package/dist/parsing/parser-manager.js.map +1 -0
- package/dist/parsing/queries/c.d.ts +2 -0
- package/dist/parsing/queries/c.d.ts.map +1 -0
- package/dist/parsing/queries/c.js +32 -0
- package/dist/parsing/queries/c.js.map +1 -0
- package/dist/parsing/queries/cpp.d.ts +2 -0
- package/dist/parsing/queries/cpp.d.ts.map +1 -0
- package/dist/parsing/queries/cpp.js +45 -0
- package/dist/parsing/queries/cpp.js.map +1 -0
- package/dist/parsing/queries/csharp.d.ts +2 -0
- package/dist/parsing/queries/csharp.d.ts.map +1 -0
- package/dist/parsing/queries/csharp.js +55 -0
- package/dist/parsing/queries/csharp.js.map +1 -0
- package/dist/parsing/queries/go.d.ts +2 -0
- package/dist/parsing/queries/go.d.ts.map +1 -0
- package/dist/parsing/queries/go.js +46 -0
- package/dist/parsing/queries/go.js.map +1 -0
- package/dist/parsing/queries/index.d.ts +13 -0
- package/dist/parsing/queries/index.d.ts.map +1 -0
- package/dist/parsing/queries/index.js +13 -0
- package/dist/parsing/queries/index.js.map +1 -0
- package/dist/parsing/queries/java.d.ts +2 -0
- package/dist/parsing/queries/java.d.ts.map +1 -0
- package/dist/parsing/queries/java.js +46 -0
- package/dist/parsing/queries/java.js.map +1 -0
- package/dist/parsing/queries/kotlin.d.ts +2 -0
- package/dist/parsing/queries/kotlin.d.ts.map +1 -0
- package/dist/parsing/queries/kotlin.js +41 -0
- package/dist/parsing/queries/kotlin.js.map +1 -0
- package/dist/parsing/queries/php.d.ts +2 -0
- package/dist/parsing/queries/php.d.ts.map +1 -0
- package/dist/parsing/queries/php.js +60 -0
- package/dist/parsing/queries/php.js.map +1 -0
- package/dist/parsing/queries/python.d.ts +2 -0
- package/dist/parsing/queries/python.d.ts.map +1 -0
- package/dist/parsing/queries/python.js +47 -0
- package/dist/parsing/queries/python.js.map +1 -0
- package/dist/parsing/queries/ruby.d.ts +2 -0
- package/dist/parsing/queries/ruby.d.ts.map +1 -0
- package/dist/parsing/queries/ruby.js +36 -0
- package/dist/parsing/queries/ruby.js.map +1 -0
- package/dist/parsing/queries/rust.d.ts +2 -0
- package/dist/parsing/queries/rust.d.ts.map +1 -0
- package/dist/parsing/queries/rust.js +47 -0
- package/dist/parsing/queries/rust.js.map +1 -0
- package/dist/parsing/queries/swift.d.ts +2 -0
- package/dist/parsing/queries/swift.d.ts.map +1 -0
- package/dist/parsing/queries/swift.js +39 -0
- package/dist/parsing/queries/swift.js.map +1 -0
- package/dist/parsing/queries/typescript.d.ts +2 -0
- package/dist/parsing/queries/typescript.d.ts.map +1 -0
- package/dist/parsing/queries/typescript.js +84 -0
- package/dist/parsing/queries/typescript.js.map +1 -0
- package/dist/parsing/query-runner.d.ts +8 -0
- package/dist/parsing/query-runner.d.ts.map +1 -0
- package/dist/parsing/query-runner.js +16 -0
- package/dist/parsing/query-runner.js.map +1 -0
- package/dist/pipeline/dag-validator.d.ts +8 -0
- package/dist/pipeline/dag-validator.d.ts.map +1 -0
- package/dist/pipeline/dag-validator.js +88 -0
- package/dist/pipeline/dag-validator.js.map +1 -0
- package/dist/pipeline/index.d.ts +6 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +4 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +8 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +47 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/phases/cluster-phase.d.ts +3 -0
- package/dist/pipeline/phases/cluster-phase.d.ts.map +1 -0
- package/dist/pipeline/phases/cluster-phase.js +52 -0
- package/dist/pipeline/phases/cluster-phase.js.map +1 -0
- package/dist/pipeline/phases/flow-phase.d.ts +3 -0
- package/dist/pipeline/phases/flow-phase.d.ts.map +1 -0
- package/dist/pipeline/phases/flow-phase.js +92 -0
- package/dist/pipeline/phases/flow-phase.js.map +1 -0
- package/dist/pipeline/phases/index.d.ts +6 -0
- package/dist/pipeline/phases/index.d.ts.map +1 -0
- package/dist/pipeline/phases/index.js +6 -0
- package/dist/pipeline/phases/index.js.map +1 -0
- package/dist/pipeline/phases/parse-phase.d.ts +3 -0
- package/dist/pipeline/phases/parse-phase.d.ts.map +1 -0
- package/dist/pipeline/phases/parse-phase.js +288 -0
- package/dist/pipeline/phases/parse-phase.js.map +1 -0
- package/dist/pipeline/phases/resolve-phase.d.ts +3 -0
- package/dist/pipeline/phases/resolve-phase.d.ts.map +1 -0
- package/dist/pipeline/phases/resolve-phase.js +388 -0
- package/dist/pipeline/phases/resolve-phase.js.map +1 -0
- package/dist/pipeline/phases/scan-phase.d.ts +4 -0
- package/dist/pipeline/phases/scan-phase.d.ts.map +1 -0
- package/dist/pipeline/phases/scan-phase.js +97 -0
- package/dist/pipeline/phases/scan-phase.js.map +1 -0
- package/dist/pipeline/types.d.ts +19 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/resolver/binding-tracker.d.ts +15 -0
- package/dist/resolver/binding-tracker.d.ts.map +1 -0
- package/dist/resolver/binding-tracker.js +22 -0
- package/dist/resolver/binding-tracker.js.map +1 -0
- package/dist/resolver/import-resolver.d.ts +16 -0
- package/dist/resolver/import-resolver.d.ts.map +1 -0
- package/dist/resolver/import-resolver.js +43 -0
- package/dist/resolver/import-resolver.js.map +1 -0
- package/dist/resolver/index.d.ts +5 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +3 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/strategies/namespace-alias.d.ts +3 -0
- package/dist/resolver/strategies/namespace-alias.d.ts.map +1 -0
- package/dist/resolver/strategies/namespace-alias.js +15 -0
- package/dist/resolver/strategies/namespace-alias.js.map +1 -0
- package/dist/resolver/strategies/package-lookup.d.ts +3 -0
- package/dist/resolver/strategies/package-lookup.d.ts.map +1 -0
- package/dist/resolver/strategies/package-lookup.js +10 -0
- package/dist/resolver/strategies/package-lookup.js.map +1 -0
- package/dist/resolver/strategies/relative-path.d.ts +3 -0
- package/dist/resolver/strategies/relative-path.d.ts.map +1 -0
- package/dist/resolver/strategies/relative-path.js +12 -0
- package/dist/resolver/strategies/relative-path.js.map +1 -0
- package/dist/resolver/strategies/types.d.ts +11 -0
- package/dist/resolver/strategies/types.d.ts.map +1 -0
- package/dist/resolver/strategies/types.js +2 -0
- package/dist/resolver/strategies/types.js.map +1 -0
- package/dist/resolver/strategies/wildcard-expand.d.ts +3 -0
- package/dist/resolver/strategies/wildcard-expand.d.ts.map +1 -0
- package/dist/resolver/strategies/wildcard-expand.js +8 -0
- package/dist/resolver/strategies/wildcard-expand.js.map +1 -0
- package/dist/scope-analysis/index.d.ts +3 -0
- package/dist/scope-analysis/index.d.ts.map +1 -0
- package/dist/scope-analysis/index.js +2 -0
- package/dist/scope-analysis/index.js.map +1 -0
- package/dist/scope-analysis/scope-builder.d.ts +16 -0
- package/dist/scope-analysis/scope-builder.d.ts.map +1 -0
- package/dist/scope-analysis/scope-builder.js +19 -0
- package/dist/scope-analysis/scope-builder.js.map +1 -0
- package/dist/search/embedder.d.ts +14 -0
- package/dist/search/embedder.d.ts.map +1 -0
- package/dist/search/embedder.js +45 -0
- package/dist/search/embedder.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +4 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/text-search.d.ts +12 -0
- package/dist/search/text-search.d.ts.map +1 -0
- package/dist/search/text-search.js +72 -0
- package/dist/search/text-search.js.map +1 -0
- package/dist/search/vector-index.d.ts +18 -0
- package/dist/search/vector-index.d.ts.map +1 -0
- package/dist/search/vector-index.js +70 -0
- package/dist/search/vector-index.js.map +1 -0
- package/dist/shared/detection.d.ts +4 -0
- package/dist/shared/detection.d.ts.map +1 -0
- package/dist/shared/detection.js +38 -0
- package/dist/shared/detection.js.map +1 -0
- package/dist/shared/graph-types.d.ts +22 -0
- package/dist/shared/graph-types.d.ts.map +1 -0
- package/dist/shared/graph-types.js +2 -0
- package/dist/shared/graph-types.js.map +1 -0
- package/dist/shared/index.d.ts +5 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/languages.d.ts +17 -0
- package/dist/shared/languages.d.ts.map +1 -0
- package/dist/shared/languages.js +18 -0
- package/dist/shared/languages.js.map +1 -0
- package/dist/shared/pipeline-types.d.ts +21 -0
- package/dist/shared/pipeline-types.d.ts.map +1 -0
- package/dist/shared/pipeline-types.js +2 -0
- package/dist/shared/pipeline-types.js.map +1 -0
- package/dist/storage/csv-writer.d.ts +9 -0
- package/dist/storage/csv-writer.d.ts.map +1 -0
- package/dist/storage/csv-writer.js +77 -0
- package/dist/storage/csv-writer.js.map +1 -0
- package/dist/storage/db-manager.d.ts +12 -0
- package/dist/storage/db-manager.d.ts.map +1 -0
- package/dist/storage/db-manager.js +50 -0
- package/dist/storage/db-manager.js.map +1 -0
- package/dist/storage/graph-loader.d.ts +7 -0
- package/dist/storage/graph-loader.d.ts.map +1 -0
- package/dist/storage/graph-loader.js +71 -0
- package/dist/storage/graph-loader.js.map +1 -0
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/metadata.d.ts +15 -0
- package/dist/storage/metadata.d.ts.map +1 -0
- package/dist/storage/metadata.js +23 -0
- package/dist/storage/metadata.js.map +1 -0
- package/dist/storage/repo-registry.d.ts +15 -0
- package/dist/storage/repo-registry.d.ts.map +1 -0
- package/dist/storage/repo-registry.js +34 -0
- package/dist/storage/repo-registry.js.map +1 -0
- package/dist/storage/schema.d.ts +6 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +54 -0
- package/dist/storage/schema.js.map +1 -0
- package/package.json +63 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Code Intelligence Platform Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Code Intelligence Platform
|
|
2
|
+
|
|
3
|
+
A static code analysis platform that builds a **Knowledge Graph** from your source code and makes it explorable through a Web UI, HTTP API, CLI, and MCP server.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## ✨ Features
|
|
10
|
+
|
|
11
|
+
- **Knowledge Graph** — parses 14+ languages into nodes (functions, classes, files, etc.) and edges (calls, imports, extends, etc.)
|
|
12
|
+
- **Force-directed Graph Explorer** — interactive Sigma.js visualization with color-coded node types, hover highlighting, and filters
|
|
13
|
+
- **Semantic Vector Search** — embeddings via `all-MiniLM-L6-v2` stored in LadybugDB vector index for natural-language code search
|
|
14
|
+
- **BM25 Text Search** — keyword-based search with reciprocal rank fusion
|
|
15
|
+
- **Code AI Chat** — grounded assistant that cites source files in every answer
|
|
16
|
+
- **LadybugDB Persistence** — graph and vector index stored as embedded graph database
|
|
17
|
+
- **HTTP API** — REST endpoints for graph, search, inspect, blast radius, flows
|
|
18
|
+
- **MCP Server** — Model Context Protocol integration for LLM tooling
|
|
19
|
+
- **CLI** — analyze, serve, search, inspect, impact commands
|
|
20
|
+
- **Multi-language** — TypeScript, JavaScript, Python, Java, Go, C, C++, C#, Rust, PHP, Kotlin, Ruby, Swift, Dart
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🚀 Quick Start
|
|
25
|
+
|
|
26
|
+
### Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install
|
|
30
|
+
npm run build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Analyze & Serve
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Analyze current directory and start the server
|
|
37
|
+
node code-intel/core/dist/cli/main.js serve
|
|
38
|
+
|
|
39
|
+
# Or specify a path and port
|
|
40
|
+
node code-intel/core/dist/cli/main.js serve ./my-project --port 4747
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then open **http://localhost:4747** in your browser — the Web UI auto-connects and loads the graph.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🖥️ Web UI
|
|
48
|
+
|
|
49
|
+
| Panel | Description |
|
|
50
|
+
|-------|-------------|
|
|
51
|
+
| **Explorer** | Graph composition stats, search results, overview counters |
|
|
52
|
+
| **Filters** | Toggle node/edge types, set focus depth |
|
|
53
|
+
| **Files** | Recursive file tree with search filter and file icons |
|
|
54
|
+
| **Graph Canvas** | Force-directed graph, click nodes to inspect, hover to highlight neighbors |
|
|
55
|
+
| **Code AI** | Chat with grounded answers citing source file locations |
|
|
56
|
+
|
|
57
|
+
### Search Modes
|
|
58
|
+
|
|
59
|
+
- **Keyword** (default) — BM25-like text search across node names and content
|
|
60
|
+
- **⚡ vec** — Semantic vector search using embeddings (auto-built in background after server starts)
|
|
61
|
+
|
|
62
|
+
Toggle between modes using the `vec` button in the header search bar.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 📦 Architecture
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
code-intel-platform/
|
|
70
|
+
├── code-intel/
|
|
71
|
+
│ ├── shared/ # Shared types: CodeNode, CodeEdge, NodeKind, EdgeKind, Language
|
|
72
|
+
│ ├── core/ # Backend: pipeline, parser, HTTP API, MCP, CLI, storage
|
|
73
|
+
│ │ └── src/
|
|
74
|
+
│ │ ├── pipeline/ # 6-phase DAG: scan→structure→parse→resolve→cluster→flow
|
|
75
|
+
│ │ ├── languages/ # 14 language modules (tree-sitter queries)
|
|
76
|
+
│ │ ├── graph/ # In-memory knowledge graph with O(1) lookup
|
|
77
|
+
│ │ ├── search/ # BM25 text search + vector embeddings
|
|
78
|
+
│ │ ├── storage/ # LadybugDB persistence, repo registry
|
|
79
|
+
│ │ ├── http/ # Express REST API + static web UI serving
|
|
80
|
+
│ │ ├── mcp-server/ # MCP stdio transport
|
|
81
|
+
│ │ └── cli/ # Commander CLI
|
|
82
|
+
│ └── web/ # React + Sigma.js frontend
|
|
83
|
+
│ └── src/
|
|
84
|
+
│ ├── components/ # GraphView, NodeDetail, SidebarChat, SidebarFiles, Filters
|
|
85
|
+
│ ├── ai/ # Agent with intent parsing + tool calls
|
|
86
|
+
│ ├── api/ # ApiClient (search, vector-search, inspect, blast-radius)
|
|
87
|
+
│ ├── graph/ # Colors palette, layout utilities
|
|
88
|
+
│ └── state/ # React context + reducer
|
|
89
|
+
└── .code-intel/ # Generated: graph.db, vector.db, meta.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Pipeline Phases
|
|
93
|
+
|
|
94
|
+
| Phase | Description |
|
|
95
|
+
|-------|-------------|
|
|
96
|
+
| `scan` | Walk filesystem, collect source files, ignore `node_modules`, `dist`, etc. |
|
|
97
|
+
| `structure` | Create file and directory nodes in the graph |
|
|
98
|
+
| `parse` | Parse files with web-tree-sitter, extract symbols (functions, classes, etc.) |
|
|
99
|
+
| `resolve` | Resolve imports → edges, build call graph, detect heritage (extends/implements) |
|
|
100
|
+
| `cluster` | Directory-based community detection, add cluster nodes |
|
|
101
|
+
| `flow` | Detect entry points, trace execution flows |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 🛠️ CLI Commands
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
code-intel analyze [path] # Analyze and persist graph
|
|
109
|
+
code-intel serve [path] -p 4747 # Analyze + start HTTP server
|
|
110
|
+
code-intel mcp [path] # Start MCP server (stdio)
|
|
111
|
+
code-intel search <query> [path] # Text search
|
|
112
|
+
code-intel inspect <symbol> # Inspect a symbol
|
|
113
|
+
code-intel impact <symbol> # Blast radius analysis
|
|
114
|
+
code-intel list # List indexed repos
|
|
115
|
+
code-intel status [path] # Show index status
|
|
116
|
+
code-intel clean [path] # Remove index data
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 🌐 HTTP API
|
|
122
|
+
|
|
123
|
+
| Method | Endpoint | Description |
|
|
124
|
+
|--------|----------|-------------|
|
|
125
|
+
| `GET` | `/api/health` | Server status + graph size |
|
|
126
|
+
| `GET` | `/api/repos` | List indexed repos |
|
|
127
|
+
| `GET` | `/api/graph/:repo` | Full graph (nodes + edges) |
|
|
128
|
+
| `POST` | `/api/search` | BM25 text search |
|
|
129
|
+
| `POST` | `/api/vector-search` | Semantic vector search |
|
|
130
|
+
| `GET` | `/api/vector-status` | Vector index ready/building status |
|
|
131
|
+
| `GET` | `/api/nodes/:id` | Node detail (callers, callees, imports, etc.) |
|
|
132
|
+
| `POST` | `/api/blast-radius` | Impact analysis |
|
|
133
|
+
| `POST` | `/api/cypher` | Cypher query (routed to LadybugDB) |
|
|
134
|
+
| `POST` | `/api/grep` | Regex search in file content |
|
|
135
|
+
| `GET` | `/api/flows` | List detected flows |
|
|
136
|
+
| `GET` | `/api/clusters` | List clusters |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 🤖 MCP Server Tools
|
|
141
|
+
|
|
142
|
+
| Tool | Description |
|
|
143
|
+
|------|-------------|
|
|
144
|
+
| `list_repos` | List indexed repositories |
|
|
145
|
+
| `search_code` | Search for symbols by name |
|
|
146
|
+
| `inspect_node` | Get detailed info about a symbol |
|
|
147
|
+
| `blast_radius` | Impact analysis for a symbol |
|
|
148
|
+
| `trace_routes` | Trace execution paths from entry points |
|
|
149
|
+
| `raw_query` | Execute Cypher queries |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 🔬 Node Type Color Palette
|
|
154
|
+
|
|
155
|
+
| Type | Color | Hex |
|
|
156
|
+
|------|-------|-----|
|
|
157
|
+
| Function | 🩵 Cyan | `#22D3EE` |
|
|
158
|
+
| File | 🟠 Orange | `#FB923C` |
|
|
159
|
+
| Class | 🟢 Green | `#4ADE80` |
|
|
160
|
+
| Interface | 🟣 Purple | `#A78BFA` |
|
|
161
|
+
| Enum | 🔷 Indigo | `#6366F1` |
|
|
162
|
+
| Constant | 🟡 Yellow | `#FACC15` |
|
|
163
|
+
| Type Alias | 🔴 Pink | `#FB7185` |
|
|
164
|
+
| Flow | 🩵 Teal | `#14B8A6` |
|
|
165
|
+
| Method | 💙 Sky Blue | `#38BDF8` |
|
|
166
|
+
| Module | 🪻 Fuchsia | `#E879F9` |
|
|
167
|
+
| Route | 🔴 Red | `#F87171` |
|
|
168
|
+
| Cluster | ⬜ Slate | `#64748B` |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 🧪 Testing
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npm run test
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
46 tests across unit + integration suites covering:
|
|
179
|
+
- Knowledge graph operations
|
|
180
|
+
- Language detection
|
|
181
|
+
- Call classifier
|
|
182
|
+
- MRO computation
|
|
183
|
+
- Scope analysis
|
|
184
|
+
- Text search
|
|
185
|
+
- Pipeline integration (parse → resolve)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 📋 Requirements
|
|
190
|
+
|
|
191
|
+
- **Node.js** 22+
|
|
192
|
+
- **npm** 10+
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 📄 License
|
|
197
|
+
|
|
198
|
+
MIT © 2024
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CodeEdge } from '../shared/index.js';
|
|
2
|
+
import type { KnowledgeGraph } from '../graph/knowledge-graph.js';
|
|
3
|
+
import type { BindingTracker } from '../resolver/binding-tracker.js';
|
|
4
|
+
import type { CallSite } from './call-classifier.js';
|
|
5
|
+
export declare function buildCallEdges(callSites: CallSite[], graph: KnowledgeGraph, bindings: BindingTracker): CodeEdge[];
|
|
6
|
+
//# sourceMappingURL=call-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-builder.d.ts","sourceRoot":"","sources":["../../src/call-graph/call-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,GACvB,QAAQ,EAAE,CA2DZ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { generateEdgeId } from '../graph/id-generator.js';
|
|
2
|
+
export function buildCallEdges(callSites, graph, bindings) {
|
|
3
|
+
const edges = [];
|
|
4
|
+
const symbolIndex = buildSymbolIndex(graph);
|
|
5
|
+
const tiers = [
|
|
6
|
+
{
|
|
7
|
+
name: 'same-file',
|
|
8
|
+
confidence: 0.95,
|
|
9
|
+
resolve(cs) {
|
|
10
|
+
const key = `${cs.callerFilePath}:${cs.name}`;
|
|
11
|
+
return symbolIndex.get(key) ?? null;
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'imported',
|
|
16
|
+
confidence: 0.9,
|
|
17
|
+
resolve(cs) {
|
|
18
|
+
const binding = bindings.getBinding(cs.callerFilePath, cs.name);
|
|
19
|
+
if (!binding)
|
|
20
|
+
return null;
|
|
21
|
+
const key = `${binding.sourcePath}:${binding.exportedName}`;
|
|
22
|
+
return symbolIndex.get(key) ?? null;
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'global',
|
|
27
|
+
confidence: 0.5,
|
|
28
|
+
resolve(cs) {
|
|
29
|
+
return globalSymbolIndex.get(cs.name) ?? null;
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
const globalSymbolIndex = new Map();
|
|
34
|
+
for (const node of graph.allNodes()) {
|
|
35
|
+
if (['function', 'method', 'class', 'constructor'].includes(node.kind)) {
|
|
36
|
+
if (!globalSymbolIndex.has(node.name)) {
|
|
37
|
+
globalSymbolIndex.set(node.name, node.id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const cs of callSites) {
|
|
42
|
+
for (const tier of tiers) {
|
|
43
|
+
const targetId = tier.resolve(cs);
|
|
44
|
+
if (targetId && targetId !== cs.callerNodeId) {
|
|
45
|
+
edges.push({
|
|
46
|
+
id: generateEdgeId(cs.callerNodeId, targetId, 'calls'),
|
|
47
|
+
source: cs.callerNodeId,
|
|
48
|
+
target: targetId,
|
|
49
|
+
kind: 'calls',
|
|
50
|
+
weight: tier.confidence,
|
|
51
|
+
label: cs.name,
|
|
52
|
+
});
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return edges;
|
|
58
|
+
}
|
|
59
|
+
function buildSymbolIndex(graph) {
|
|
60
|
+
const index = new Map();
|
|
61
|
+
for (const node of graph.allNodes()) {
|
|
62
|
+
if (['function', 'method', 'class', 'constructor', 'variable'].includes(node.kind)) {
|
|
63
|
+
const key = `${node.filePath}:${node.name}`;
|
|
64
|
+
index.set(key, node.id);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return index;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=call-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-builder.js","sourceRoot":"","sources":["../../src/call-graph/call-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type CallKind = 'free' | 'member' | 'constructor';
|
|
2
|
+
export interface CallSite {
|
|
3
|
+
callerNodeId: string;
|
|
4
|
+
callerFilePath: string;
|
|
5
|
+
name: string;
|
|
6
|
+
receiverText?: string;
|
|
7
|
+
kind: CallKind;
|
|
8
|
+
line: number;
|
|
9
|
+
argCount: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function classifyCall(name: string, hasReceiver: boolean, isNew: boolean): CallKind;
|
|
12
|
+
//# sourceMappingURL=call-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-classifier.d.ts","sourceRoot":"","sources":["../../src/call-graph/call-classifier.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,KAAK,EAAE,OAAO,GACb,QAAQ,CAOV"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function classifyCall(name, hasReceiver, isNew) {
|
|
2
|
+
if (isNew)
|
|
3
|
+
return 'constructor';
|
|
4
|
+
if (hasReceiver)
|
|
5
|
+
return 'member';
|
|
6
|
+
if (name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase()) {
|
|
7
|
+
return 'constructor';
|
|
8
|
+
}
|
|
9
|
+
return 'free';
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=call-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-classifier.js","sourceRoot":"","sources":["../../src/call-graph/call-classifier.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,WAAoB,EACpB,KAAc;IAEd,IAAI,KAAK;QAAE,OAAO,aAAa,CAAC;IAChC,IAAI,WAAW;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3E,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/call-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/call-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import { createKnowledgeGraph } from '../graph/knowledge-graph.js';
|
|
6
|
+
import { runPipeline } from '../pipeline/orchestrator.js';
|
|
7
|
+
import { scanPhase, structurePhase, parsePhase, resolvePhase, clusterPhase, flowPhase, } from '../pipeline/phases/index.js';
|
|
8
|
+
import { startHttpServer } from '../http/app.js';
|
|
9
|
+
import { startMcpStdio } from '../mcp-server/server.js';
|
|
10
|
+
import { textSearch } from '../search/text-search.js';
|
|
11
|
+
import { saveMetadata, loadMetadata, getDbPath } from '../storage/metadata.js';
|
|
12
|
+
import { upsertRepo, loadRegistry, removeRepo } from '../storage/repo-registry.js';
|
|
13
|
+
import { DbManager, loadGraphToDB } from '../storage/index.js';
|
|
14
|
+
const program = new Command();
|
|
15
|
+
program
|
|
16
|
+
.name('code-intel')
|
|
17
|
+
.description('Code Intelligence Platform — Static Analysis + Knowledge Graph')
|
|
18
|
+
.version('0.1.0');
|
|
19
|
+
async function analyzeWorkspace(targetPath, options) {
|
|
20
|
+
const workspaceRoot = path.resolve(targetPath);
|
|
21
|
+
if (!options?.silent)
|
|
22
|
+
console.log(`Analyzing: ${workspaceRoot}`);
|
|
23
|
+
const graph = createKnowledgeGraph();
|
|
24
|
+
const context = {
|
|
25
|
+
workspaceRoot,
|
|
26
|
+
graph,
|
|
27
|
+
filePaths: [],
|
|
28
|
+
onProgress: options?.silent ? undefined : (phase, msg) => console.log(` [${phase}] ${msg}`),
|
|
29
|
+
};
|
|
30
|
+
const phases = [scanPhase, structurePhase, parsePhase, resolvePhase, clusterPhase, flowPhase];
|
|
31
|
+
const result = await runPipeline(phases, context);
|
|
32
|
+
// Save metadata
|
|
33
|
+
const repoName = path.basename(workspaceRoot);
|
|
34
|
+
saveMetadata(workspaceRoot, {
|
|
35
|
+
indexedAt: new Date().toISOString(),
|
|
36
|
+
stats: {
|
|
37
|
+
nodes: graph.size.nodes,
|
|
38
|
+
edges: graph.size.edges,
|
|
39
|
+
files: context.filePaths.length,
|
|
40
|
+
duration: result.totalDuration,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
upsertRepo({
|
|
44
|
+
name: repoName,
|
|
45
|
+
path: workspaceRoot,
|
|
46
|
+
indexedAt: new Date().toISOString(),
|
|
47
|
+
stats: {
|
|
48
|
+
nodes: graph.size.nodes,
|
|
49
|
+
edges: graph.size.edges,
|
|
50
|
+
files: context.filePaths.length,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
// Persist graph to LadybugDB
|
|
54
|
+
try {
|
|
55
|
+
const dbPath = getDbPath(workspaceRoot);
|
|
56
|
+
const db = new DbManager(dbPath);
|
|
57
|
+
await db.init();
|
|
58
|
+
const { nodeCount, edgeCount } = await loadGraphToDB(graph, db);
|
|
59
|
+
db.close();
|
|
60
|
+
if (!options?.silent) {
|
|
61
|
+
console.log(` DB: ${nodeCount} nodes, ${edgeCount} edges persisted`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (!options?.silent) {
|
|
66
|
+
console.warn(` DB persist warning: ${err instanceof Error ? err.message : err}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!options?.silent) {
|
|
70
|
+
console.log(`\nDone in ${result.totalDuration}ms`);
|
|
71
|
+
console.log(` Nodes: ${graph.size.nodes}`);
|
|
72
|
+
console.log(` Edges: ${graph.size.edges}`);
|
|
73
|
+
console.log(` Files: ${context.filePaths.length}`);
|
|
74
|
+
console.log(` Success: ${result.success}`);
|
|
75
|
+
}
|
|
76
|
+
return { graph, result, repoName, workspaceRoot };
|
|
77
|
+
}
|
|
78
|
+
program
|
|
79
|
+
.command('analyze')
|
|
80
|
+
.description('Analyze a codebase and build the knowledge graph')
|
|
81
|
+
.argument('[path]', 'Path to analyze', '.')
|
|
82
|
+
.action(async (targetPath) => {
|
|
83
|
+
await analyzeWorkspace(targetPath);
|
|
84
|
+
});
|
|
85
|
+
program
|
|
86
|
+
.command('serve')
|
|
87
|
+
.description('Start the HTTP API server')
|
|
88
|
+
.option('-p, --port <port>', 'Port number', '4747')
|
|
89
|
+
.argument('[path]', 'Path to analyze', '.')
|
|
90
|
+
.action(async (targetPath, options) => {
|
|
91
|
+
const { graph, repoName, workspaceRoot } = await analyzeWorkspace(targetPath);
|
|
92
|
+
startHttpServer(graph, repoName, parseInt(options.port, 10), workspaceRoot);
|
|
93
|
+
});
|
|
94
|
+
program
|
|
95
|
+
.command('mcp')
|
|
96
|
+
.description('Start MCP server (stdio transport)')
|
|
97
|
+
.argument('[path]', 'Path to analyze', '.')
|
|
98
|
+
.action(async (targetPath) => {
|
|
99
|
+
const { graph, repoName } = await analyzeWorkspace(targetPath, { silent: true });
|
|
100
|
+
await startMcpStdio(graph, repoName);
|
|
101
|
+
});
|
|
102
|
+
program
|
|
103
|
+
.command('search')
|
|
104
|
+
.description('Search the knowledge graph')
|
|
105
|
+
.argument('<query>', 'Search query')
|
|
106
|
+
.option('-l, --limit <limit>', 'Max results', '20')
|
|
107
|
+
.option('-p, --path <path>', 'Path to analyze', '.')
|
|
108
|
+
.action(async (query, options) => {
|
|
109
|
+
const { graph } = await analyzeWorkspace(options.path, { silent: true });
|
|
110
|
+
const results = textSearch(graph, query, parseInt(options.limit, 10));
|
|
111
|
+
if (results.length === 0) {
|
|
112
|
+
console.log('No results found.');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
console.log(`Found ${results.length} results for "${query}":\n`);
|
|
116
|
+
for (const r of results) {
|
|
117
|
+
console.log(` ${r.kind.padEnd(12)} ${r.name.padEnd(30)} ${r.filePath}`);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
program
|
|
121
|
+
.command('inspect')
|
|
122
|
+
.description('Inspect a symbol')
|
|
123
|
+
.argument('<symbol>', 'Symbol name')
|
|
124
|
+
.option('-p, --path <path>', 'Path to analyze', '.')
|
|
125
|
+
.action(async (symbol, options) => {
|
|
126
|
+
const { graph } = await analyzeWorkspace(options.path, { silent: true });
|
|
127
|
+
let found = false;
|
|
128
|
+
for (const node of graph.allNodes()) {
|
|
129
|
+
if (node.name === symbol) {
|
|
130
|
+
found = true;
|
|
131
|
+
console.log(`\n${node.kind}: ${node.name}`);
|
|
132
|
+
console.log(` File: ${node.filePath}:${node.startLine ?? '?'}`);
|
|
133
|
+
console.log(` Exported: ${node.exported ?? 'unknown'}`);
|
|
134
|
+
const incoming = [...graph.findEdgesTo(node.id)];
|
|
135
|
+
const outgoing = [...graph.findEdgesFrom(node.id)];
|
|
136
|
+
const callers = incoming.filter((e) => e.kind === 'calls');
|
|
137
|
+
const callees = outgoing.filter((e) => e.kind === 'calls');
|
|
138
|
+
if (callers.length > 0) {
|
|
139
|
+
console.log(` Callers (${callers.length}):`);
|
|
140
|
+
for (const c of callers.slice(0, 10)) {
|
|
141
|
+
const n = graph.getNode(c.source);
|
|
142
|
+
console.log(` ← ${n?.name ?? c.source} (${n?.filePath})`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (callees.length > 0) {
|
|
146
|
+
console.log(` Callees (${callees.length}):`);
|
|
147
|
+
for (const c of callees.slice(0, 10)) {
|
|
148
|
+
const n = graph.getNode(c.target);
|
|
149
|
+
console.log(` → ${n?.name ?? c.target} (${n?.filePath})`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!found)
|
|
156
|
+
console.log(`Symbol "${symbol}" not found.`);
|
|
157
|
+
});
|
|
158
|
+
program
|
|
159
|
+
.command('impact')
|
|
160
|
+
.description('Show blast radius for a symbol')
|
|
161
|
+
.argument('<symbol>', 'Symbol name')
|
|
162
|
+
.option('-p, --path <path>', 'Path to analyze', '.')
|
|
163
|
+
.option('-d, --depth <depth>', 'Max hops', '5')
|
|
164
|
+
.action(async (symbol, options) => {
|
|
165
|
+
const { graph } = await analyzeWorkspace(options.path, { silent: true });
|
|
166
|
+
const maxHops = parseInt(options.depth, 10);
|
|
167
|
+
let targetNode = null;
|
|
168
|
+
for (const node of graph.allNodes()) {
|
|
169
|
+
if (node.name === symbol) {
|
|
170
|
+
targetNode = node;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (!targetNode) {
|
|
175
|
+
console.log(`Symbol "${symbol}" not found.`);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const affected = new Set();
|
|
179
|
+
const queue = [{ id: targetNode.id, depth: 0 }];
|
|
180
|
+
const visited = new Set();
|
|
181
|
+
while (queue.length > 0) {
|
|
182
|
+
const { id, depth } = queue.shift();
|
|
183
|
+
if (visited.has(id) || depth > maxHops)
|
|
184
|
+
continue;
|
|
185
|
+
visited.add(id);
|
|
186
|
+
affected.add(id);
|
|
187
|
+
for (const edge of graph.findEdgesTo(id)) {
|
|
188
|
+
if (edge.kind === 'calls' || edge.kind === 'imports') {
|
|
189
|
+
queue.push({ id: edge.source, depth: depth + 1 });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
console.log(`\nBlast radius for "${symbol}": ${affected.size} affected symbols\n`);
|
|
194
|
+
for (const id of affected) {
|
|
195
|
+
const n = graph.getNode(id);
|
|
196
|
+
if (n)
|
|
197
|
+
console.log(` ${n.kind.padEnd(12)} ${n.name.padEnd(30)} ${n.filePath}`);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
program
|
|
201
|
+
.command('list')
|
|
202
|
+
.description('List indexed repositories')
|
|
203
|
+
.action(() => {
|
|
204
|
+
const repos = loadRegistry();
|
|
205
|
+
if (repos.length === 0) {
|
|
206
|
+
console.log('No indexed repositories. Run `code-intel analyze <path>` first.');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log(`\nIndexed repositories (${repos.length}):\n`);
|
|
210
|
+
for (const r of repos) {
|
|
211
|
+
console.log(` ${r.name.padEnd(25)} ${r.stats.nodes} nodes, ${r.stats.edges} edges, ${r.stats.files} files`);
|
|
212
|
+
console.log(` Path: ${r.path}`);
|
|
213
|
+
console.log(` Indexed: ${r.indexedAt}`);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
program
|
|
217
|
+
.command('status')
|
|
218
|
+
.description('Show index status for current directory')
|
|
219
|
+
.argument('[path]', 'Path to check', '.')
|
|
220
|
+
.action((targetPath) => {
|
|
221
|
+
const workspaceRoot = path.resolve(targetPath);
|
|
222
|
+
const meta = loadMetadata(workspaceRoot);
|
|
223
|
+
if (!meta) {
|
|
224
|
+
console.log('Not indexed. Run `code-intel analyze` first.');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
console.log(`\nIndex status for ${workspaceRoot}:`);
|
|
228
|
+
console.log(` Indexed at: ${meta.indexedAt}`);
|
|
229
|
+
console.log(` Nodes: ${meta.stats.nodes}`);
|
|
230
|
+
console.log(` Edges: ${meta.stats.edges}`);
|
|
231
|
+
console.log(` Files: ${meta.stats.files}`);
|
|
232
|
+
console.log(` Duration: ${meta.stats.duration}ms`);
|
|
233
|
+
});
|
|
234
|
+
program
|
|
235
|
+
.command('clean')
|
|
236
|
+
.description('Remove index data')
|
|
237
|
+
.argument('[path]', 'Path to clean', '.')
|
|
238
|
+
.action((targetPath) => {
|
|
239
|
+
const workspaceRoot = path.resolve(targetPath);
|
|
240
|
+
const codeIntelDir = path.join(workspaceRoot, '.code-intel');
|
|
241
|
+
if (fs.existsSync(codeIntelDir)) {
|
|
242
|
+
fs.rmSync(codeIntelDir, { recursive: true, force: true });
|
|
243
|
+
console.log(`Removed ${codeIntelDir}`);
|
|
244
|
+
}
|
|
245
|
+
removeRepo(workspaceRoot);
|
|
246
|
+
console.log('Index cleaned.');
|
|
247
|
+
});
|
|
248
|
+
program.parse();
|
|
249
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { KnowledgeGraph } from '../graph/knowledge-graph.js';
|
|
2
|
+
export interface ClusterResult {
|
|
3
|
+
clusterId: string;
|
|
4
|
+
label: string;
|
|
5
|
+
memberIds: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function detectCommunities(graph: KnowledgeGraph): ClusterResult[];
|
|
8
|
+
export declare function addClustersToGraph(graph: KnowledgeGraph, clusters: ClusterResult[]): void;
|
|
9
|
+
//# sourceMappingURL=community-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community-detector.d.ts","sourceRoot":"","sources":["../../src/clustering/community-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,EAAE,CA0CxE;AAUD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAoBzF"}
|