@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.
Files changed (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +198 -0
  3. package/dist/call-graph/call-builder.d.ts +6 -0
  4. package/dist/call-graph/call-builder.d.ts.map +1 -0
  5. package/dist/call-graph/call-builder.js +69 -0
  6. package/dist/call-graph/call-builder.js.map +1 -0
  7. package/dist/call-graph/call-classifier.d.ts +12 -0
  8. package/dist/call-graph/call-classifier.d.ts.map +1 -0
  9. package/dist/call-graph/call-classifier.js +11 -0
  10. package/dist/call-graph/call-classifier.js.map +1 -0
  11. package/dist/call-graph/index.d.ts +4 -0
  12. package/dist/call-graph/index.d.ts.map +1 -0
  13. package/dist/call-graph/index.js +3 -0
  14. package/dist/call-graph/index.js.map +1 -0
  15. package/dist/cli/main.d.ts +3 -0
  16. package/dist/cli/main.d.ts.map +1 -0
  17. package/dist/cli/main.js +249 -0
  18. package/dist/cli/main.js.map +1 -0
  19. package/dist/clustering/community-detector.d.ts +9 -0
  20. package/dist/clustering/community-detector.d.ts.map +1 -0
  21. package/dist/clustering/community-detector.js +67 -0
  22. package/dist/clustering/community-detector.js.map +1 -0
  23. package/dist/clustering/index.d.ts +3 -0
  24. package/dist/clustering/index.d.ts.map +1 -0
  25. package/dist/clustering/index.js +2 -0
  26. package/dist/clustering/index.js.map +1 -0
  27. package/dist/flow-detection/entry-point-finder.d.ts +14 -0
  28. package/dist/flow-detection/entry-point-finder.d.ts.map +1 -0
  29. package/dist/flow-detection/entry-point-finder.js +86 -0
  30. package/dist/flow-detection/entry-point-finder.js.map +1 -0
  31. package/dist/flow-detection/index.d.ts +3 -0
  32. package/dist/flow-detection/index.d.ts.map +1 -0
  33. package/dist/flow-detection/index.js +2 -0
  34. package/dist/flow-detection/index.js.map +1 -0
  35. package/dist/graph/id-generator.d.ts +4 -0
  36. package/dist/graph/id-generator.d.ts.map +1 -0
  37. package/dist/graph/id-generator.js +7 -0
  38. package/dist/graph/id-generator.js.map +1 -0
  39. package/dist/graph/index.d.ts +4 -0
  40. package/dist/graph/index.d.ts.map +1 -0
  41. package/dist/graph/index.js +3 -0
  42. package/dist/graph/index.js.map +1 -0
  43. package/dist/graph/knowledge-graph.d.ts +21 -0
  44. package/dist/graph/knowledge-graph.d.ts.map +1 -0
  45. package/dist/graph/knowledge-graph.js +126 -0
  46. package/dist/graph/knowledge-graph.js.map +1 -0
  47. package/dist/http/app.d.ts +5 -0
  48. package/dist/http/app.d.ts.map +1 -0
  49. package/dist/http/app.js +359 -0
  50. package/dist/http/app.js.map +1 -0
  51. package/dist/http/index.d.ts +2 -0
  52. package/dist/http/index.d.ts.map +1 -0
  53. package/dist/http/index.js +2 -0
  54. package/dist/http/index.js.map +1 -0
  55. package/dist/index.d.ts +31 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +18 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/inheritance/heritage-builder.d.ts +9 -0
  60. package/dist/inheritance/heritage-builder.d.ts.map +1 -0
  61. package/dist/inheritance/heritage-builder.js +40 -0
  62. package/dist/inheritance/heritage-builder.js.map +1 -0
  63. package/dist/inheritance/index.d.ts +6 -0
  64. package/dist/inheritance/index.d.ts.map +1 -0
  65. package/dist/inheritance/index.js +4 -0
  66. package/dist/inheritance/index.js.map +1 -0
  67. package/dist/inheritance/mro-walker.d.ts +3 -0
  68. package/dist/inheritance/mro-walker.d.ts.map +1 -0
  69. package/dist/inheritance/mro-walker.js +80 -0
  70. package/dist/inheritance/mro-walker.js.map +1 -0
  71. package/dist/inheritance/override-detector.d.ts +4 -0
  72. package/dist/inheritance/override-detector.d.ts.map +1 -0
  73. package/dist/inheritance/override-detector.js +39 -0
  74. package/dist/inheritance/override-detector.js.map +1 -0
  75. package/dist/languages/index.d.ts +3 -0
  76. package/dist/languages/index.d.ts.map +1 -0
  77. package/dist/languages/index.js +2 -0
  78. package/dist/languages/index.js.map +1 -0
  79. package/dist/languages/modules/c.d.ts +3 -0
  80. package/dist/languages/modules/c.d.ts.map +1 -0
  81. package/dist/languages/modules/c.js +23 -0
  82. package/dist/languages/modules/c.js.map +1 -0
  83. package/dist/languages/modules/cpp.d.ts +3 -0
  84. package/dist/languages/modules/cpp.d.ts.map +1 -0
  85. package/dist/languages/modules/cpp.js +23 -0
  86. package/dist/languages/modules/cpp.js.map +1 -0
  87. package/dist/languages/modules/csharp.d.ts +3 -0
  88. package/dist/languages/modules/csharp.d.ts.map +1 -0
  89. package/dist/languages/modules/csharp.js +21 -0
  90. package/dist/languages/modules/csharp.js.map +1 -0
  91. package/dist/languages/modules/dart.d.ts +3 -0
  92. package/dist/languages/modules/dart.d.ts.map +1 -0
  93. package/dist/languages/modules/dart.js +30 -0
  94. package/dist/languages/modules/dart.js.map +1 -0
  95. package/dist/languages/modules/go.d.ts +3 -0
  96. package/dist/languages/modules/go.d.ts.map +1 -0
  97. package/dist/languages/modules/go.js +25 -0
  98. package/dist/languages/modules/go.js.map +1 -0
  99. package/dist/languages/modules/java.d.ts +3 -0
  100. package/dist/languages/modules/java.d.ts.map +1 -0
  101. package/dist/languages/modules/java.js +23 -0
  102. package/dist/languages/modules/java.js.map +1 -0
  103. package/dist/languages/modules/kotlin.d.ts +3 -0
  104. package/dist/languages/modules/kotlin.d.ts.map +1 -0
  105. package/dist/languages/modules/kotlin.js +22 -0
  106. package/dist/languages/modules/kotlin.js.map +1 -0
  107. package/dist/languages/modules/php.d.ts +3 -0
  108. package/dist/languages/modules/php.d.ts.map +1 -0
  109. package/dist/languages/modules/php.js +21 -0
  110. package/dist/languages/modules/php.js.map +1 -0
  111. package/dist/languages/modules/python.d.ts +3 -0
  112. package/dist/languages/modules/python.d.ts.map +1 -0
  113. package/dist/languages/modules/python.js +36 -0
  114. package/dist/languages/modules/python.js.map +1 -0
  115. package/dist/languages/modules/ruby.d.ts +3 -0
  116. package/dist/languages/modules/ruby.d.ts.map +1 -0
  117. package/dist/languages/modules/ruby.js +20 -0
  118. package/dist/languages/modules/ruby.js.map +1 -0
  119. package/dist/languages/modules/rust.d.ts +3 -0
  120. package/dist/languages/modules/rust.d.ts.map +1 -0
  121. package/dist/languages/modules/rust.js +23 -0
  122. package/dist/languages/modules/rust.js.map +1 -0
  123. package/dist/languages/modules/swift.d.ts +3 -0
  124. package/dist/languages/modules/swift.d.ts.map +1 -0
  125. package/dist/languages/modules/swift.js +21 -0
  126. package/dist/languages/modules/swift.js.map +1 -0
  127. package/dist/languages/modules/typescript.d.ts +4 -0
  128. package/dist/languages/modules/typescript.d.ts.map +1 -0
  129. package/dist/languages/modules/typescript.js +47 -0
  130. package/dist/languages/modules/typescript.js.map +1 -0
  131. package/dist/languages/registry.d.ts +5 -0
  132. package/dist/languages/registry.d.ts.map +1 -0
  133. package/dist/languages/registry.js +37 -0
  134. package/dist/languages/registry.js.map +1 -0
  135. package/dist/languages/types.d.ts +18 -0
  136. package/dist/languages/types.d.ts.map +1 -0
  137. package/dist/languages/types.js +2 -0
  138. package/dist/languages/types.js.map +1 -0
  139. package/dist/mcp-server/index.d.ts +2 -0
  140. package/dist/mcp-server/index.d.ts.map +1 -0
  141. package/dist/mcp-server/index.js +2 -0
  142. package/dist/mcp-server/index.js.map +1 -0
  143. package/dist/mcp-server/server.d.ts +5 -0
  144. package/dist/mcp-server/server.d.ts.map +1 -0
  145. package/dist/mcp-server/server.js +224 -0
  146. package/dist/mcp-server/server.js.map +1 -0
  147. package/dist/multi-repo/cross-repo-search.d.ts +3 -0
  148. package/dist/multi-repo/cross-repo-search.d.ts.map +1 -0
  149. package/dist/multi-repo/cross-repo-search.js +5 -0
  150. package/dist/multi-repo/cross-repo-search.js.map +1 -0
  151. package/dist/multi-repo/group-config.d.ts +10 -0
  152. package/dist/multi-repo/group-config.d.ts.map +1 -0
  153. package/dist/multi-repo/group-config.js +54 -0
  154. package/dist/multi-repo/group-config.js.map +1 -0
  155. package/dist/multi-repo/group-manager.d.ts +6 -0
  156. package/dist/multi-repo/group-manager.d.ts.map +1 -0
  157. package/dist/multi-repo/group-manager.js +42 -0
  158. package/dist/multi-repo/group-manager.js.map +1 -0
  159. package/dist/multi-repo/index.d.ts +5 -0
  160. package/dist/multi-repo/index.d.ts.map +1 -0
  161. package/dist/multi-repo/index.js +4 -0
  162. package/dist/multi-repo/index.js.map +1 -0
  163. package/dist/parsing/ast-cache.d.ts +13 -0
  164. package/dist/parsing/ast-cache.d.ts.map +1 -0
  165. package/dist/parsing/ast-cache.js +45 -0
  166. package/dist/parsing/ast-cache.js.map +1 -0
  167. package/dist/parsing/index.d.ts +5 -0
  168. package/dist/parsing/index.d.ts.map +1 -0
  169. package/dist/parsing/index.js +4 -0
  170. package/dist/parsing/index.js.map +1 -0
  171. package/dist/parsing/parser-manager.d.ts +7 -0
  172. package/dist/parsing/parser-manager.d.ts.map +1 -0
  173. package/dist/parsing/parser-manager.js +48 -0
  174. package/dist/parsing/parser-manager.js.map +1 -0
  175. package/dist/parsing/queries/c.d.ts +2 -0
  176. package/dist/parsing/queries/c.d.ts.map +1 -0
  177. package/dist/parsing/queries/c.js +32 -0
  178. package/dist/parsing/queries/c.js.map +1 -0
  179. package/dist/parsing/queries/cpp.d.ts +2 -0
  180. package/dist/parsing/queries/cpp.d.ts.map +1 -0
  181. package/dist/parsing/queries/cpp.js +45 -0
  182. package/dist/parsing/queries/cpp.js.map +1 -0
  183. package/dist/parsing/queries/csharp.d.ts +2 -0
  184. package/dist/parsing/queries/csharp.d.ts.map +1 -0
  185. package/dist/parsing/queries/csharp.js +55 -0
  186. package/dist/parsing/queries/csharp.js.map +1 -0
  187. package/dist/parsing/queries/go.d.ts +2 -0
  188. package/dist/parsing/queries/go.d.ts.map +1 -0
  189. package/dist/parsing/queries/go.js +46 -0
  190. package/dist/parsing/queries/go.js.map +1 -0
  191. package/dist/parsing/queries/index.d.ts +13 -0
  192. package/dist/parsing/queries/index.d.ts.map +1 -0
  193. package/dist/parsing/queries/index.js +13 -0
  194. package/dist/parsing/queries/index.js.map +1 -0
  195. package/dist/parsing/queries/java.d.ts +2 -0
  196. package/dist/parsing/queries/java.d.ts.map +1 -0
  197. package/dist/parsing/queries/java.js +46 -0
  198. package/dist/parsing/queries/java.js.map +1 -0
  199. package/dist/parsing/queries/kotlin.d.ts +2 -0
  200. package/dist/parsing/queries/kotlin.d.ts.map +1 -0
  201. package/dist/parsing/queries/kotlin.js +41 -0
  202. package/dist/parsing/queries/kotlin.js.map +1 -0
  203. package/dist/parsing/queries/php.d.ts +2 -0
  204. package/dist/parsing/queries/php.d.ts.map +1 -0
  205. package/dist/parsing/queries/php.js +60 -0
  206. package/dist/parsing/queries/php.js.map +1 -0
  207. package/dist/parsing/queries/python.d.ts +2 -0
  208. package/dist/parsing/queries/python.d.ts.map +1 -0
  209. package/dist/parsing/queries/python.js +47 -0
  210. package/dist/parsing/queries/python.js.map +1 -0
  211. package/dist/parsing/queries/ruby.d.ts +2 -0
  212. package/dist/parsing/queries/ruby.d.ts.map +1 -0
  213. package/dist/parsing/queries/ruby.js +36 -0
  214. package/dist/parsing/queries/ruby.js.map +1 -0
  215. package/dist/parsing/queries/rust.d.ts +2 -0
  216. package/dist/parsing/queries/rust.d.ts.map +1 -0
  217. package/dist/parsing/queries/rust.js +47 -0
  218. package/dist/parsing/queries/rust.js.map +1 -0
  219. package/dist/parsing/queries/swift.d.ts +2 -0
  220. package/dist/parsing/queries/swift.d.ts.map +1 -0
  221. package/dist/parsing/queries/swift.js +39 -0
  222. package/dist/parsing/queries/swift.js.map +1 -0
  223. package/dist/parsing/queries/typescript.d.ts +2 -0
  224. package/dist/parsing/queries/typescript.d.ts.map +1 -0
  225. package/dist/parsing/queries/typescript.js +84 -0
  226. package/dist/parsing/queries/typescript.js.map +1 -0
  227. package/dist/parsing/query-runner.d.ts +8 -0
  228. package/dist/parsing/query-runner.d.ts.map +1 -0
  229. package/dist/parsing/query-runner.js +16 -0
  230. package/dist/parsing/query-runner.js.map +1 -0
  231. package/dist/pipeline/dag-validator.d.ts +8 -0
  232. package/dist/pipeline/dag-validator.d.ts.map +1 -0
  233. package/dist/pipeline/dag-validator.js +88 -0
  234. package/dist/pipeline/dag-validator.js.map +1 -0
  235. package/dist/pipeline/index.d.ts +6 -0
  236. package/dist/pipeline/index.d.ts.map +1 -0
  237. package/dist/pipeline/index.js +4 -0
  238. package/dist/pipeline/index.js.map +1 -0
  239. package/dist/pipeline/orchestrator.d.ts +8 -0
  240. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  241. package/dist/pipeline/orchestrator.js +47 -0
  242. package/dist/pipeline/orchestrator.js.map +1 -0
  243. package/dist/pipeline/phases/cluster-phase.d.ts +3 -0
  244. package/dist/pipeline/phases/cluster-phase.d.ts.map +1 -0
  245. package/dist/pipeline/phases/cluster-phase.js +52 -0
  246. package/dist/pipeline/phases/cluster-phase.js.map +1 -0
  247. package/dist/pipeline/phases/flow-phase.d.ts +3 -0
  248. package/dist/pipeline/phases/flow-phase.d.ts.map +1 -0
  249. package/dist/pipeline/phases/flow-phase.js +92 -0
  250. package/dist/pipeline/phases/flow-phase.js.map +1 -0
  251. package/dist/pipeline/phases/index.d.ts +6 -0
  252. package/dist/pipeline/phases/index.d.ts.map +1 -0
  253. package/dist/pipeline/phases/index.js +6 -0
  254. package/dist/pipeline/phases/index.js.map +1 -0
  255. package/dist/pipeline/phases/parse-phase.d.ts +3 -0
  256. package/dist/pipeline/phases/parse-phase.d.ts.map +1 -0
  257. package/dist/pipeline/phases/parse-phase.js +288 -0
  258. package/dist/pipeline/phases/parse-phase.js.map +1 -0
  259. package/dist/pipeline/phases/resolve-phase.d.ts +3 -0
  260. package/dist/pipeline/phases/resolve-phase.d.ts.map +1 -0
  261. package/dist/pipeline/phases/resolve-phase.js +388 -0
  262. package/dist/pipeline/phases/resolve-phase.js.map +1 -0
  263. package/dist/pipeline/phases/scan-phase.d.ts +4 -0
  264. package/dist/pipeline/phases/scan-phase.d.ts.map +1 -0
  265. package/dist/pipeline/phases/scan-phase.js +97 -0
  266. package/dist/pipeline/phases/scan-phase.js.map +1 -0
  267. package/dist/pipeline/types.d.ts +19 -0
  268. package/dist/pipeline/types.d.ts.map +1 -0
  269. package/dist/pipeline/types.js +2 -0
  270. package/dist/pipeline/types.js.map +1 -0
  271. package/dist/resolver/binding-tracker.d.ts +15 -0
  272. package/dist/resolver/binding-tracker.d.ts.map +1 -0
  273. package/dist/resolver/binding-tracker.js +22 -0
  274. package/dist/resolver/binding-tracker.js.map +1 -0
  275. package/dist/resolver/import-resolver.d.ts +16 -0
  276. package/dist/resolver/import-resolver.d.ts.map +1 -0
  277. package/dist/resolver/import-resolver.js +43 -0
  278. package/dist/resolver/import-resolver.js.map +1 -0
  279. package/dist/resolver/index.d.ts +5 -0
  280. package/dist/resolver/index.d.ts.map +1 -0
  281. package/dist/resolver/index.js +3 -0
  282. package/dist/resolver/index.js.map +1 -0
  283. package/dist/resolver/strategies/namespace-alias.d.ts +3 -0
  284. package/dist/resolver/strategies/namespace-alias.d.ts.map +1 -0
  285. package/dist/resolver/strategies/namespace-alias.js +15 -0
  286. package/dist/resolver/strategies/namespace-alias.js.map +1 -0
  287. package/dist/resolver/strategies/package-lookup.d.ts +3 -0
  288. package/dist/resolver/strategies/package-lookup.d.ts.map +1 -0
  289. package/dist/resolver/strategies/package-lookup.js +10 -0
  290. package/dist/resolver/strategies/package-lookup.js.map +1 -0
  291. package/dist/resolver/strategies/relative-path.d.ts +3 -0
  292. package/dist/resolver/strategies/relative-path.d.ts.map +1 -0
  293. package/dist/resolver/strategies/relative-path.js +12 -0
  294. package/dist/resolver/strategies/relative-path.js.map +1 -0
  295. package/dist/resolver/strategies/types.d.ts +11 -0
  296. package/dist/resolver/strategies/types.d.ts.map +1 -0
  297. package/dist/resolver/strategies/types.js +2 -0
  298. package/dist/resolver/strategies/types.js.map +1 -0
  299. package/dist/resolver/strategies/wildcard-expand.d.ts +3 -0
  300. package/dist/resolver/strategies/wildcard-expand.d.ts.map +1 -0
  301. package/dist/resolver/strategies/wildcard-expand.js +8 -0
  302. package/dist/resolver/strategies/wildcard-expand.js.map +1 -0
  303. package/dist/scope-analysis/index.d.ts +3 -0
  304. package/dist/scope-analysis/index.d.ts.map +1 -0
  305. package/dist/scope-analysis/index.js +2 -0
  306. package/dist/scope-analysis/index.js.map +1 -0
  307. package/dist/scope-analysis/scope-builder.d.ts +16 -0
  308. package/dist/scope-analysis/scope-builder.d.ts.map +1 -0
  309. package/dist/scope-analysis/scope-builder.js +19 -0
  310. package/dist/scope-analysis/scope-builder.js.map +1 -0
  311. package/dist/search/embedder.d.ts +14 -0
  312. package/dist/search/embedder.d.ts.map +1 -0
  313. package/dist/search/embedder.js +45 -0
  314. package/dist/search/embedder.js.map +1 -0
  315. package/dist/search/index.d.ts +7 -0
  316. package/dist/search/index.d.ts.map +1 -0
  317. package/dist/search/index.js +4 -0
  318. package/dist/search/index.js.map +1 -0
  319. package/dist/search/text-search.d.ts +12 -0
  320. package/dist/search/text-search.d.ts.map +1 -0
  321. package/dist/search/text-search.js +72 -0
  322. package/dist/search/text-search.js.map +1 -0
  323. package/dist/search/vector-index.d.ts +18 -0
  324. package/dist/search/vector-index.d.ts.map +1 -0
  325. package/dist/search/vector-index.js +70 -0
  326. package/dist/search/vector-index.js.map +1 -0
  327. package/dist/shared/detection.d.ts +4 -0
  328. package/dist/shared/detection.d.ts.map +1 -0
  329. package/dist/shared/detection.js +38 -0
  330. package/dist/shared/detection.js.map +1 -0
  331. package/dist/shared/graph-types.d.ts +22 -0
  332. package/dist/shared/graph-types.d.ts.map +1 -0
  333. package/dist/shared/graph-types.js +2 -0
  334. package/dist/shared/graph-types.js.map +1 -0
  335. package/dist/shared/index.d.ts +5 -0
  336. package/dist/shared/index.d.ts.map +1 -0
  337. package/dist/shared/index.js +3 -0
  338. package/dist/shared/index.js.map +1 -0
  339. package/dist/shared/languages.d.ts +17 -0
  340. package/dist/shared/languages.d.ts.map +1 -0
  341. package/dist/shared/languages.js +18 -0
  342. package/dist/shared/languages.js.map +1 -0
  343. package/dist/shared/pipeline-types.d.ts +21 -0
  344. package/dist/shared/pipeline-types.d.ts.map +1 -0
  345. package/dist/shared/pipeline-types.js +2 -0
  346. package/dist/shared/pipeline-types.js.map +1 -0
  347. package/dist/storage/csv-writer.d.ts +9 -0
  348. package/dist/storage/csv-writer.d.ts.map +1 -0
  349. package/dist/storage/csv-writer.js +77 -0
  350. package/dist/storage/csv-writer.js.map +1 -0
  351. package/dist/storage/db-manager.d.ts +12 -0
  352. package/dist/storage/db-manager.d.ts.map +1 -0
  353. package/dist/storage/db-manager.js +50 -0
  354. package/dist/storage/db-manager.js.map +1 -0
  355. package/dist/storage/graph-loader.d.ts +7 -0
  356. package/dist/storage/graph-loader.d.ts.map +1 -0
  357. package/dist/storage/graph-loader.js +71 -0
  358. package/dist/storage/graph-loader.js.map +1 -0
  359. package/dist/storage/index.d.ts +10 -0
  360. package/dist/storage/index.d.ts.map +1 -0
  361. package/dist/storage/index.js +7 -0
  362. package/dist/storage/index.js.map +1 -0
  363. package/dist/storage/metadata.d.ts +15 -0
  364. package/dist/storage/metadata.d.ts.map +1 -0
  365. package/dist/storage/metadata.js +23 -0
  366. package/dist/storage/metadata.js.map +1 -0
  367. package/dist/storage/repo-registry.d.ts +15 -0
  368. package/dist/storage/repo-registry.d.ts.map +1 -0
  369. package/dist/storage/repo-registry.js +34 -0
  370. package/dist/storage/repo-registry.js.map +1 -0
  371. package/dist/storage/schema.d.ts +6 -0
  372. package/dist/storage/schema.d.ts.map +1 -0
  373. package/dist/storage/schema.js +54 -0
  374. package/dist/storage/schema.js.map +1 -0
  375. 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
+ ![Code Intelligence Platform](screenshots/explorer-overview.png)
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":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAS1D,MAAM,UAAU,cAAc,CAC5B,SAAqB,EACrB,KAAqB,EACrB,QAAwB;IAExB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAqB;QAC9B;YACE,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,IAAI;YAChB,OAAO,CAAC,EAAY;gBAClB,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC9C,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;YACtC,CAAC;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,GAAG;YACf,OAAO,CAAC,EAAY;gBAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC1B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC5D,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;YACtC,CAAC;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,GAAG;YACf,OAAO,CAAC,EAAY;gBAClB,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAChD,CAAC;SACF;KACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC;oBACtD,MAAM,EAAE,EAAE,CAAC,YAAY;oBACvB,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,IAAI,CAAC,UAAU;oBACvB,KAAK,EAAE,EAAE,CAAC,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAqB;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -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,4 @@
1
+ export { buildCallEdges } from './call-builder.js';
2
+ export { classifyCall } from './call-classifier.js';
3
+ export type { CallSite, CallKind } from './call-classifier.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { buildCallEdges } from './call-builder.js';
2
+ export { classifyCall } from './call-classifier.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
@@ -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"}