agentic-qe 2.5.9 → 2.6.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 (336) hide show
  1. package/.claude/agents/qe-code-intelligence.md +359 -0
  2. package/CHANGELOG.md +136 -0
  3. package/README.md +4 -3
  4. package/dist/agents/BaseAgent.d.ts +167 -0
  5. package/dist/agents/BaseAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseAgent.js +414 -0
  7. package/dist/agents/BaseAgent.js.map +1 -1
  8. package/dist/agents/CodeIntelligenceAgent.d.ts +133 -0
  9. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -0
  10. package/dist/agents/CodeIntelligenceAgent.js +473 -0
  11. package/dist/agents/CodeIntelligenceAgent.js.map +1 -0
  12. package/dist/agents/FlakyTestHunterAgent.d.ts +15 -0
  13. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  14. package/dist/agents/FlakyTestHunterAgent.js +93 -0
  15. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  16. package/dist/agents/SecurityScannerAgent.d.ts +19 -0
  17. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  18. package/dist/agents/SecurityScannerAgent.js +137 -0
  19. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  20. package/dist/agents/context/ContextCache.d.ts +105 -0
  21. package/dist/agents/context/ContextCache.d.ts.map +1 -0
  22. package/dist/agents/context/ContextCache.js +235 -0
  23. package/dist/agents/context/ContextCache.js.map +1 -0
  24. package/dist/agents/context/ContextFormatter.d.ts +92 -0
  25. package/dist/agents/context/ContextFormatter.d.ts.map +1 -0
  26. package/dist/agents/context/ContextFormatter.js +338 -0
  27. package/dist/agents/context/ContextFormatter.js.map +1 -0
  28. package/dist/agents/context/GraphExpander.d.ts +87 -0
  29. package/dist/agents/context/GraphExpander.d.ts.map +1 -0
  30. package/dist/agents/context/GraphExpander.js +215 -0
  31. package/dist/agents/context/GraphExpander.js.map +1 -0
  32. package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts +160 -0
  33. package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts.map +1 -0
  34. package/dist/agents/context/KnowledgeGraphContextBuilder.js +300 -0
  35. package/dist/agents/context/KnowledgeGraphContextBuilder.js.map +1 -0
  36. package/dist/agents/context/index.d.ts +15 -0
  37. package/dist/agents/context/index.d.ts.map +1 -0
  38. package/dist/agents/context/index.js +18 -0
  39. package/dist/agents/context/index.js.map +1 -0
  40. package/dist/agents/index.d.ts +1 -0
  41. package/dist/agents/index.d.ts.map +1 -1
  42. package/dist/agents/index.js +67 -3
  43. package/dist/agents/index.js.map +1 -1
  44. package/dist/cli/commands/knowledge-graph.d.ts +112 -0
  45. package/dist/cli/commands/knowledge-graph.d.ts.map +1 -0
  46. package/dist/cli/commands/knowledge-graph.js +466 -0
  47. package/dist/cli/commands/knowledge-graph.js.map +1 -0
  48. package/dist/cli/commands/ruvector/index.d.ts +13 -0
  49. package/dist/cli/commands/ruvector/index.d.ts.map +1 -0
  50. package/dist/cli/commands/ruvector/index.js +308 -0
  51. package/dist/cli/commands/ruvector/index.js.map +1 -0
  52. package/dist/cli/formatters/KGOutputFormatter.d.ts +50 -0
  53. package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -0
  54. package/dist/cli/formatters/KGOutputFormatter.js +237 -0
  55. package/dist/cli/formatters/KGOutputFormatter.js.map +1 -0
  56. package/dist/cli/index-working.js +138 -0
  57. package/dist/cli/index-working.js.map +1 -1
  58. package/dist/cli/index.js +5 -0
  59. package/dist/cli/index.js.map +1 -1
  60. package/dist/cli/init/claude-config.d.ts +13 -1
  61. package/dist/cli/init/claude-config.d.ts.map +1 -1
  62. package/dist/cli/init/claude-config.js +70 -8
  63. package/dist/cli/init/claude-config.js.map +1 -1
  64. package/dist/cli/init/code-intelligence-init.d.ts +52 -0
  65. package/dist/cli/init/code-intelligence-init.d.ts.map +1 -0
  66. package/dist/cli/init/code-intelligence-init.js +250 -0
  67. package/dist/cli/init/code-intelligence-init.js.map +1 -0
  68. package/dist/cli/init/index.d.ts +2 -2
  69. package/dist/cli/init/index.d.ts.map +1 -1
  70. package/dist/cli/init/index.js +21 -1
  71. package/dist/cli/init/index.js.map +1 -1
  72. package/dist/code-intelligence/chunking/ASTChunker.d.ts +64 -0
  73. package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -0
  74. package/dist/code-intelligence/chunking/ASTChunker.js +344 -0
  75. package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -0
  76. package/dist/code-intelligence/chunking/ChunkSplitter.d.ts +48 -0
  77. package/dist/code-intelligence/chunking/ChunkSplitter.d.ts.map +1 -0
  78. package/dist/code-intelligence/chunking/ChunkSplitter.js +278 -0
  79. package/dist/code-intelligence/chunking/ChunkSplitter.js.map +1 -0
  80. package/dist/code-intelligence/chunking/index.d.ts +8 -0
  81. package/dist/code-intelligence/chunking/index.d.ts.map +1 -0
  82. package/dist/code-intelligence/chunking/index.js +13 -0
  83. package/dist/code-intelligence/chunking/index.js.map +1 -0
  84. package/dist/code-intelligence/chunking/types.d.ts +52 -0
  85. package/dist/code-intelligence/chunking/types.d.ts.map +1 -0
  86. package/dist/code-intelligence/chunking/types.js +6 -0
  87. package/dist/code-intelligence/chunking/types.js.map +1 -0
  88. package/dist/code-intelligence/config/database-schema.d.ts +245 -0
  89. package/dist/code-intelligence/config/database-schema.d.ts.map +1 -0
  90. package/dist/code-intelligence/config/database-schema.js +110 -0
  91. package/dist/code-intelligence/config/database-schema.js.map +1 -0
  92. package/dist/code-intelligence/config/environment.d.ts +53 -0
  93. package/dist/code-intelligence/config/environment.d.ts.map +1 -0
  94. package/dist/code-intelligence/config/environment.js +86 -0
  95. package/dist/code-intelligence/config/environment.js.map +1 -0
  96. package/dist/code-intelligence/config/index.d.ts +10 -0
  97. package/dist/code-intelligence/config/index.d.ts.map +1 -0
  98. package/dist/code-intelligence/config/index.js +36 -0
  99. package/dist/code-intelligence/config/index.js.map +1 -0
  100. package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts +81 -0
  101. package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts.map +1 -0
  102. package/dist/code-intelligence/embeddings/EmbeddingCache.js +168 -0
  103. package/dist/code-intelligence/embeddings/EmbeddingCache.js.map +1 -0
  104. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +82 -0
  105. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -0
  106. package/dist/code-intelligence/embeddings/NomicEmbedder.js +233 -0
  107. package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -0
  108. package/dist/code-intelligence/embeddings/OllamaClient.d.ts +42 -0
  109. package/dist/code-intelligence/embeddings/OllamaClient.d.ts.map +1 -0
  110. package/dist/code-intelligence/embeddings/OllamaClient.js +142 -0
  111. package/dist/code-intelligence/embeddings/OllamaClient.js.map +1 -0
  112. package/dist/code-intelligence/embeddings/index.d.ts +33 -0
  113. package/dist/code-intelligence/embeddings/index.d.ts.map +1 -0
  114. package/dist/code-intelligence/embeddings/index.js +39 -0
  115. package/dist/code-intelligence/embeddings/index.js.map +1 -0
  116. package/dist/code-intelligence/embeddings/types.d.ts +84 -0
  117. package/dist/code-intelligence/embeddings/types.d.ts.map +1 -0
  118. package/dist/code-intelligence/embeddings/types.js +19 -0
  119. package/dist/code-intelligence/embeddings/types.js.map +1 -0
  120. package/dist/code-intelligence/graph/GraphBuilder.d.ts +126 -0
  121. package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -0
  122. package/dist/code-intelligence/graph/GraphBuilder.js +416 -0
  123. package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -0
  124. package/dist/code-intelligence/graph/ImportParser.d.ts +72 -0
  125. package/dist/code-intelligence/graph/ImportParser.d.ts.map +1 -0
  126. package/dist/code-intelligence/graph/ImportParser.js +422 -0
  127. package/dist/code-intelligence/graph/ImportParser.js.map +1 -0
  128. package/dist/code-intelligence/graph/RelationshipExtractor.d.ts +74 -0
  129. package/dist/code-intelligence/graph/RelationshipExtractor.d.ts.map +1 -0
  130. package/dist/code-intelligence/graph/RelationshipExtractor.js +310 -0
  131. package/dist/code-intelligence/graph/RelationshipExtractor.js.map +1 -0
  132. package/dist/code-intelligence/graph/TestMapper.d.ts +99 -0
  133. package/dist/code-intelligence/graph/TestMapper.d.ts.map +1 -0
  134. package/dist/code-intelligence/graph/TestMapper.js +335 -0
  135. package/dist/code-intelligence/graph/TestMapper.js.map +1 -0
  136. package/dist/code-intelligence/graph/index.d.ts +14 -0
  137. package/dist/code-intelligence/graph/index.d.ts.map +1 -0
  138. package/dist/code-intelligence/graph/index.js +19 -0
  139. package/dist/code-intelligence/graph/index.js.map +1 -0
  140. package/dist/code-intelligence/graph/types.d.ts +141 -0
  141. package/dist/code-intelligence/graph/types.d.ts.map +1 -0
  142. package/dist/code-intelligence/graph/types.js +18 -0
  143. package/dist/code-intelligence/graph/types.js.map +1 -0
  144. package/dist/code-intelligence/indexing/FileWatcher.d.ts +90 -0
  145. package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -0
  146. package/dist/code-intelligence/indexing/FileWatcher.js +304 -0
  147. package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -0
  148. package/dist/code-intelligence/indexing/GitChangeDetector.d.ts +76 -0
  149. package/dist/code-intelligence/indexing/GitChangeDetector.d.ts.map +1 -0
  150. package/dist/code-intelligence/indexing/GitChangeDetector.js +347 -0
  151. package/dist/code-intelligence/indexing/GitChangeDetector.js.map +1 -0
  152. package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts +108 -0
  153. package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts.map +1 -0
  154. package/dist/code-intelligence/indexing/IncrementalIndexer.js +269 -0
  155. package/dist/code-intelligence/indexing/IncrementalIndexer.js.map +1 -0
  156. package/dist/code-intelligence/indexing/index.d.ts +11 -0
  157. package/dist/code-intelligence/indexing/index.d.ts.map +1 -0
  158. package/dist/code-intelligence/indexing/index.js +18 -0
  159. package/dist/code-intelligence/indexing/index.js.map +1 -0
  160. package/dist/code-intelligence/indexing/types.d.ts +133 -0
  161. package/dist/code-intelligence/indexing/types.d.ts.map +1 -0
  162. package/dist/code-intelligence/indexing/types.js +27 -0
  163. package/dist/code-intelligence/indexing/types.js.map +1 -0
  164. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +150 -0
  165. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -0
  166. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +806 -0
  167. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -0
  168. package/dist/code-intelligence/orchestrator/index.d.ts +8 -0
  169. package/dist/code-intelligence/orchestrator/index.d.ts.map +1 -0
  170. package/dist/code-intelligence/orchestrator/index.js +24 -0
  171. package/dist/code-intelligence/orchestrator/index.js.map +1 -0
  172. package/dist/code-intelligence/orchestrator/types.d.ts +164 -0
  173. package/dist/code-intelligence/orchestrator/types.d.ts.map +1 -0
  174. package/dist/code-intelligence/orchestrator/types.js +18 -0
  175. package/dist/code-intelligence/orchestrator/types.js.map +1 -0
  176. package/dist/code-intelligence/parser/LanguageRegistry.d.ts +13 -0
  177. package/dist/code-intelligence/parser/LanguageRegistry.d.ts.map +1 -0
  178. package/dist/code-intelligence/parser/LanguageRegistry.js +150 -0
  179. package/dist/code-intelligence/parser/LanguageRegistry.js.map +1 -0
  180. package/dist/code-intelligence/parser/TreeSitterParser.d.ts +98 -0
  181. package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +1 -0
  182. package/dist/code-intelligence/parser/TreeSitterParser.js +530 -0
  183. package/dist/code-intelligence/parser/TreeSitterParser.js.map +1 -0
  184. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +36 -0
  185. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -0
  186. package/dist/code-intelligence/parser/extractors/BaseExtractor.js +31 -0
  187. package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -0
  188. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +21 -0
  189. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -0
  190. package/dist/code-intelligence/parser/extractors/GoExtractor.js +249 -0
  191. package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -0
  192. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +21 -0
  193. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -0
  194. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +217 -0
  195. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -0
  196. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +20 -0
  197. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -0
  198. package/dist/code-intelligence/parser/extractors/PythonExtractor.js +237 -0
  199. package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -0
  200. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +21 -0
  201. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -0
  202. package/dist/code-intelligence/parser/extractors/RustExtractor.js +234 -0
  203. package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -0
  204. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +23 -0
  205. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -0
  206. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +247 -0
  207. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -0
  208. package/dist/code-intelligence/parser/extractors/index.d.ts +7 -0
  209. package/dist/code-intelligence/parser/extractors/index.d.ts.map +1 -0
  210. package/dist/code-intelligence/parser/extractors/index.js +16 -0
  211. package/dist/code-intelligence/parser/extractors/index.js.map +1 -0
  212. package/dist/code-intelligence/parser/index.d.ts +8 -0
  213. package/dist/code-intelligence/parser/index.d.ts.map +1 -0
  214. package/dist/code-intelligence/parser/index.js +12 -0
  215. package/dist/code-intelligence/parser/index.js.map +1 -0
  216. package/dist/code-intelligence/parser/types.d.ts +60 -0
  217. package/dist/code-intelligence/parser/types.d.ts.map +1 -0
  218. package/dist/code-intelligence/parser/types.js +6 -0
  219. package/dist/code-intelligence/parser/types.js.map +1 -0
  220. package/dist/code-intelligence/rag/ContextBuilder.d.ts +82 -0
  221. package/dist/code-intelligence/rag/ContextBuilder.d.ts.map +1 -0
  222. package/dist/code-intelligence/rag/ContextBuilder.js +242 -0
  223. package/dist/code-intelligence/rag/ContextBuilder.js.map +1 -0
  224. package/dist/code-intelligence/rag/GraphExpander.d.ts +95 -0
  225. package/dist/code-intelligence/rag/GraphExpander.d.ts.map +1 -0
  226. package/dist/code-intelligence/rag/GraphExpander.js +250 -0
  227. package/dist/code-intelligence/rag/GraphExpander.js.map +1 -0
  228. package/dist/code-intelligence/rag/index.d.ts +9 -0
  229. package/dist/code-intelligence/rag/index.d.ts.map +1 -0
  230. package/dist/code-intelligence/rag/index.js +25 -0
  231. package/dist/code-intelligence/rag/index.js.map +1 -0
  232. package/dist/code-intelligence/rag/types.d.ts +121 -0
  233. package/dist/code-intelligence/rag/types.d.ts.map +1 -0
  234. package/dist/code-intelligence/rag/types.js +50 -0
  235. package/dist/code-intelligence/rag/types.js.map +1 -0
  236. package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts +62 -0
  237. package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts.map +1 -0
  238. package/dist/code-intelligence/retrieval/SemanticRetriever.js +174 -0
  239. package/dist/code-intelligence/retrieval/SemanticRetriever.js.map +1 -0
  240. package/dist/code-intelligence/retrieval/index.d.ts +9 -0
  241. package/dist/code-intelligence/retrieval/index.d.ts.map +1 -0
  242. package/dist/code-intelligence/retrieval/index.js +16 -0
  243. package/dist/code-intelligence/retrieval/index.js.map +1 -0
  244. package/dist/code-intelligence/retrieval/types.d.ts +118 -0
  245. package/dist/code-intelligence/retrieval/types.d.ts.map +1 -0
  246. package/dist/code-intelligence/retrieval/types.js +46 -0
  247. package/dist/code-intelligence/retrieval/types.js.map +1 -0
  248. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts +167 -0
  249. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts.map +1 -0
  250. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js +365 -0
  251. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js.map +1 -0
  252. package/dist/code-intelligence/router/index.d.ts +7 -0
  253. package/dist/code-intelligence/router/index.d.ts.map +1 -0
  254. package/dist/code-intelligence/router/index.js +14 -0
  255. package/dist/code-intelligence/router/index.js.map +1 -0
  256. package/dist/code-intelligence/search/BM25Search.d.ts +74 -0
  257. package/dist/code-intelligence/search/BM25Search.d.ts.map +1 -0
  258. package/dist/code-intelligence/search/BM25Search.js +233 -0
  259. package/dist/code-intelligence/search/BM25Search.js.map +1 -0
  260. package/dist/code-intelligence/search/HybridSearchEngine.d.ts +94 -0
  261. package/dist/code-intelligence/search/HybridSearchEngine.d.ts.map +1 -0
  262. package/dist/code-intelligence/search/HybridSearchEngine.js +168 -0
  263. package/dist/code-intelligence/search/HybridSearchEngine.js.map +1 -0
  264. package/dist/code-intelligence/search/RRFFusion.d.ts +46 -0
  265. package/dist/code-intelligence/search/RRFFusion.d.ts.map +1 -0
  266. package/dist/code-intelligence/search/RRFFusion.js +223 -0
  267. package/dist/code-intelligence/search/RRFFusion.js.map +1 -0
  268. package/dist/code-intelligence/search/VectorSearch.d.ts +157 -0
  269. package/dist/code-intelligence/search/VectorSearch.d.ts.map +1 -0
  270. package/dist/code-intelligence/search/VectorSearch.js +301 -0
  271. package/dist/code-intelligence/search/VectorSearch.js.map +1 -0
  272. package/dist/code-intelligence/search/index.d.ts +14 -0
  273. package/dist/code-intelligence/search/index.d.ts.map +1 -0
  274. package/dist/code-intelligence/search/index.js +23 -0
  275. package/dist/code-intelligence/search/index.js.map +1 -0
  276. package/dist/code-intelligence/search/types.d.ts +201 -0
  277. package/dist/code-intelligence/search/types.d.ts.map +1 -0
  278. package/dist/code-intelligence/search/types.js +35 -0
  279. package/dist/code-intelligence/search/types.js.map +1 -0
  280. package/dist/code-intelligence/service/CodeIntelligenceService.d.ts +171 -0
  281. package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -0
  282. package/dist/code-intelligence/service/CodeIntelligenceService.js +325 -0
  283. package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -0
  284. package/dist/code-intelligence/service/index.d.ts +7 -0
  285. package/dist/code-intelligence/service/index.d.ts.map +1 -0
  286. package/dist/code-intelligence/service/index.js +14 -0
  287. package/dist/code-intelligence/service/index.js.map +1 -0
  288. package/dist/code-intelligence/storage/CodeChunkStore.d.ts +213 -0
  289. package/dist/code-intelligence/storage/CodeChunkStore.d.ts.map +1 -0
  290. package/dist/code-intelligence/storage/CodeChunkStore.js +542 -0
  291. package/dist/code-intelligence/storage/CodeChunkStore.js.map +1 -0
  292. package/dist/code-intelligence/storage/index.d.ts +7 -0
  293. package/dist/code-intelligence/storage/index.d.ts.map +1 -0
  294. package/dist/code-intelligence/storage/index.js +13 -0
  295. package/dist/code-intelligence/storage/index.js.map +1 -0
  296. package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts +51 -0
  297. package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts.map +1 -0
  298. package/dist/code-intelligence/visualization/ClassDiagramBuilder.js +180 -0
  299. package/dist/code-intelligence/visualization/ClassDiagramBuilder.js.map +1 -0
  300. package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts +66 -0
  301. package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts.map +1 -0
  302. package/dist/code-intelligence/visualization/DependencyGraphBuilder.js +203 -0
  303. package/dist/code-intelligence/visualization/DependencyGraphBuilder.js.map +1 -0
  304. package/dist/code-intelligence/visualization/MermaidGenerator.d.ts +76 -0
  305. package/dist/code-intelligence/visualization/MermaidGenerator.d.ts.map +1 -0
  306. package/dist/code-intelligence/visualization/MermaidGenerator.js +368 -0
  307. package/dist/code-intelligence/visualization/MermaidGenerator.js.map +1 -0
  308. package/dist/code-intelligence/visualization/index.d.ts +9 -0
  309. package/dist/code-intelligence/visualization/index.d.ts.map +1 -0
  310. package/dist/code-intelligence/visualization/index.js +15 -0
  311. package/dist/code-intelligence/visualization/index.js.map +1 -0
  312. package/dist/core/FleetManager.d.ts +27 -0
  313. package/dist/core/FleetManager.d.ts.map +1 -1
  314. package/dist/core/FleetManager.js +84 -0
  315. package/dist/core/FleetManager.js.map +1 -1
  316. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  317. package/dist/mcp/server-instructions.d.ts +1 -1
  318. package/dist/mcp/server-instructions.js +1 -1
  319. package/dist/memory/RuVectorPatternStore.d.ts +258 -0
  320. package/dist/memory/RuVectorPatternStore.d.ts.map +1 -0
  321. package/dist/memory/RuVectorPatternStore.js +525 -0
  322. package/dist/memory/RuVectorPatternStore.js.map +1 -0
  323. package/dist/providers/RuVectorPostgresAdapter.d.ts +134 -0
  324. package/dist/providers/RuVectorPostgresAdapter.d.ts.map +1 -0
  325. package/dist/providers/RuVectorPostgresAdapter.js +504 -0
  326. package/dist/providers/RuVectorPostgresAdapter.js.map +1 -0
  327. package/dist/providers/index.d.ts +2 -0
  328. package/dist/providers/index.d.ts.map +1 -1
  329. package/dist/providers/index.js +7 -1
  330. package/dist/providers/index.js.map +1 -1
  331. package/dist/types/index.d.ts +2 -1
  332. package/dist/types/index.d.ts.map +1 -1
  333. package/dist/types/index.js +2 -0
  334. package/dist/types/index.js.map +1 -1
  335. package/docs/reference/agents.md +44 -1
  336. package/package.json +15 -2
@@ -0,0 +1,806 @@
1
+ "use strict";
2
+ /**
3
+ * Code Intelligence Orchestrator
4
+ *
5
+ * The main integration layer that connects all components:
6
+ * - FileWatcher → IncrementalIndexer → ASTChunker → NomicEmbedder → Database
7
+ * - TreeSitterParser → GraphBuilder → RelationshipExtractor
8
+ * - HybridSearchEngine with BM25 + Vector search
9
+ *
10
+ * INTEGRATED WITH EXISTING INFRASTRUCTURE:
11
+ * - CodeChunkStore (RuVector PostgreSQL) for persistent storage
12
+ * - HybridRouter for embeddings and LLM queries
13
+ * - VectorSearch delegates to CodeChunkStore
14
+ *
15
+ * This is the "hallway" that connects all the "rooms".
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.CodeIntelligenceOrchestrator = void 0;
52
+ const events_1 = require("events");
53
+ const fs = __importStar(require("fs/promises"));
54
+ const path = __importStar(require("path"));
55
+ // Import all modules
56
+ const IncrementalIndexer_js_1 = require("../indexing/IncrementalIndexer.js");
57
+ const FileWatcher_js_1 = require("../indexing/FileWatcher.js");
58
+ const TreeSitterParser_js_1 = require("../parser/TreeSitterParser.js");
59
+ const ASTChunker_js_1 = require("../chunking/ASTChunker.js");
60
+ const NomicEmbedder_js_1 = require("../embeddings/NomicEmbedder.js");
61
+ const GraphBuilder_js_1 = require("../graph/GraphBuilder.js");
62
+ const RelationshipExtractor_js_1 = require("../graph/RelationshipExtractor.js");
63
+ const HybridSearchEngine_js_1 = require("../search/HybridSearchEngine.js");
64
+ const ImportParser_js_1 = require("../graph/ImportParser.js");
65
+ const TestMapper_js_1 = require("../graph/TestMapper.js");
66
+ const GitChangeDetector_js_1 = require("../indexing/GitChangeDetector.js");
67
+ const CodeIntelligenceHybridRouter_js_1 = require("../router/CodeIntelligenceHybridRouter.js");
68
+ const types_js_1 = require("./types.js");
69
+ class CodeIntelligenceOrchestrator extends events_1.EventEmitter {
70
+ constructor(config = {}) {
71
+ super();
72
+ // RuVector-integrated router for embeddings and storage
73
+ this.codeRouter = null;
74
+ // State
75
+ this.isInitialized = false;
76
+ this.isIndexing = false;
77
+ this.embeddingCache = new Map(); // Fallback for in-memory mode
78
+ this.config = { ...types_js_1.DEFAULT_ORCHESTRATOR_CONFIG, ...config };
79
+ // Initialize components
80
+ this.indexer = new IncrementalIndexer_js_1.IncrementalIndexer(this.config.indexer);
81
+ this.fileWatcher = new FileWatcher_js_1.FileWatcher({
82
+ rootDir: this.config.rootDir,
83
+ ...this.config.watcher,
84
+ });
85
+ this.parser = new TreeSitterParser_js_1.TreeSitterParser();
86
+ this.chunker = new ASTChunker_js_1.ASTChunker(this.config.chunker);
87
+ this.embedder = new NomicEmbedder_js_1.NomicEmbedder(this.config.ollamaUrl);
88
+ this.graphBuilder = new GraphBuilder_js_1.GraphBuilder(this.config.graph);
89
+ this.relationshipExtractor = new RelationshipExtractor_js_1.RelationshipExtractor(this.graphBuilder);
90
+ this.searchEngine = new HybridSearchEngine_js_1.HybridSearchEngine(this.config.search);
91
+ this.importParser = new ImportParser_js_1.ImportParser();
92
+ this.testMapper = new TestMapper_js_1.TestMapper(this.config.rootDir);
93
+ this.gitDetector = new GitChangeDetector_js_1.GitChangeDetector(this.config.rootDir);
94
+ // Initialize CodeIntelligenceHybridRouter if database configured
95
+ if (this.config.database?.enabled) {
96
+ // Parse Ollama URL to extract port
97
+ let ollamaPort = 11434;
98
+ try {
99
+ const ollamaUrl = new URL(this.config.ollamaUrl);
100
+ ollamaPort = parseInt(ollamaUrl.port) || 11434;
101
+ }
102
+ catch {
103
+ // Use default port
104
+ }
105
+ this.codeRouter = new CodeIntelligenceHybridRouter_js_1.CodeIntelligenceHybridRouter({
106
+ database: this.config.database,
107
+ ruvllm: {
108
+ port: ollamaPort,
109
+ },
110
+ embeddingDimension: 768,
111
+ autoStoreChunks: true,
112
+ storeRelationships: true,
113
+ });
114
+ }
115
+ // Wire up file watcher to indexer
116
+ this.setupFileWatcherIntegration();
117
+ }
118
+ /**
119
+ * Initialize the orchestrator.
120
+ */
121
+ async initialize() {
122
+ if (this.isInitialized)
123
+ return;
124
+ // Parser initializes in constructor, no additional setup needed
125
+ // Initialize CodeIntelligenceHybridRouter (RuVector-backed)
126
+ if (this.codeRouter) {
127
+ try {
128
+ await this.codeRouter.initialize();
129
+ console.log('CodeIntelligenceHybridRouter initialized with RuVector database');
130
+ }
131
+ catch (error) {
132
+ console.warn('Failed to initialize CodeIntelligenceHybridRouter:', error);
133
+ console.warn('Falling back to in-memory mode');
134
+ this.codeRouter = null;
135
+ }
136
+ }
137
+ // Initialize embedder (check Ollama health) - used for in-memory fallback
138
+ if (!this.codeRouter) {
139
+ const embedderReady = await this.embedder.healthCheck();
140
+ if (!embedderReady) {
141
+ console.warn('Ollama not available - embeddings will be skipped');
142
+ }
143
+ }
144
+ // Set up vector search provider
145
+ this.setupVectorSearchProvider();
146
+ this.isInitialized = true;
147
+ this.emit('initialized');
148
+ }
149
+ /**
150
+ * Index a project directory.
151
+ */
152
+ async indexProject(rootDir, progressCallback) {
153
+ if (!this.isInitialized) {
154
+ await this.initialize();
155
+ }
156
+ if (this.isIndexing) {
157
+ throw new Error('Indexing already in progress');
158
+ }
159
+ this.isIndexing = true;
160
+ const projectRoot = rootDir || this.config.rootDir;
161
+ const startTime = Date.now();
162
+ const progress = {
163
+ phase: 'scanning',
164
+ totalFiles: 0,
165
+ processedFiles: 0,
166
+ chunksCreated: 0,
167
+ embeddingsGenerated: 0,
168
+ relationshipsExtracted: 0,
169
+ errors: [],
170
+ startTime,
171
+ elapsedMs: 0,
172
+ };
173
+ const result = {
174
+ success: true,
175
+ stats: {
176
+ filesIndexed: 0,
177
+ chunksCreated: 0,
178
+ embeddingsGenerated: 0,
179
+ nodesCreated: 0,
180
+ edgesCreated: 0,
181
+ totalTimeMs: 0,
182
+ averageTimePerFileMs: 0,
183
+ },
184
+ failures: [],
185
+ };
186
+ try {
187
+ // Phase 1: Scan files
188
+ progress.phase = 'scanning';
189
+ this.emitProgress(progress, progressCallback);
190
+ const files = await this.scanDirectory(projectRoot);
191
+ progress.totalFiles = files.length;
192
+ this.emitProgress(progress, progressCallback);
193
+ // Phase 2-5: Process files in batches
194
+ for (let i = 0; i < files.length; i += this.config.batchSize) {
195
+ const batch = files.slice(i, i + this.config.batchSize);
196
+ await Promise.all(batch.map(async (filePath) => {
197
+ try {
198
+ await this.processFile(filePath, progress);
199
+ progress.processedFiles++;
200
+ result.stats.filesIndexed++;
201
+ }
202
+ catch (error) {
203
+ const errorMsg = error instanceof Error ? error.message : String(error);
204
+ progress.errors.push({ file: filePath, error: errorMsg });
205
+ result.failures.push({ file: filePath, error: errorMsg });
206
+ }
207
+ progress.elapsedMs = Date.now() - startTime;
208
+ if (progress.processedFiles > 0) {
209
+ const avgTime = progress.elapsedMs / progress.processedFiles;
210
+ progress.estimatedRemainingMs =
211
+ avgTime * (progress.totalFiles - progress.processedFiles);
212
+ }
213
+ this.emitProgress(progress, progressCallback);
214
+ }));
215
+ }
216
+ // Phase 6: Extract cross-file relationships
217
+ progress.phase = 'indexing';
218
+ this.emitProgress(progress, progressCallback);
219
+ await this.extractCrossFileRelationships(projectRoot);
220
+ // Complete
221
+ progress.phase = 'complete';
222
+ progress.elapsedMs = Date.now() - startTime;
223
+ this.emitProgress(progress, progressCallback);
224
+ // Update result stats
225
+ const graphStats = this.graphBuilder.getStats();
226
+ result.stats.chunksCreated = progress.chunksCreated;
227
+ result.stats.embeddingsGenerated = progress.embeddingsGenerated;
228
+ result.stats.nodesCreated = graphStats.nodeCount;
229
+ result.stats.edgesCreated = graphStats.edgeCount;
230
+ result.stats.totalTimeMs = progress.elapsedMs;
231
+ result.stats.averageTimePerFileMs =
232
+ result.stats.filesIndexed > 0
233
+ ? result.stats.totalTimeMs / result.stats.filesIndexed
234
+ : 0;
235
+ result.success = result.failures.length === 0;
236
+ }
237
+ finally {
238
+ this.isIndexing = false;
239
+ }
240
+ this.emit('indexingComplete', result);
241
+ return result;
242
+ }
243
+ /**
244
+ * Process incremental changes.
245
+ */
246
+ async processChanges(changes) {
247
+ const startTime = Date.now();
248
+ const result = {
249
+ success: true,
250
+ stats: {
251
+ filesIndexed: 0,
252
+ chunksCreated: 0,
253
+ embeddingsGenerated: 0,
254
+ nodesCreated: 0,
255
+ edgesCreated: 0,
256
+ totalTimeMs: 0,
257
+ averageTimePerFileMs: 0,
258
+ },
259
+ failures: [],
260
+ };
261
+ // Process each change
262
+ const processed = await this.indexer.processChanges(changes);
263
+ // Handle deletions
264
+ for (const filePath of processed.deleted) {
265
+ this.graphBuilder.removeFile(filePath);
266
+ // Note: Would also remove from search index and database
267
+ }
268
+ // Handle additions and modifications
269
+ const toProcess = [...processed.added, ...processed.modified];
270
+ for (const filePath of toProcess) {
271
+ try {
272
+ const progress = {
273
+ phase: 'parsing',
274
+ totalFiles: 1,
275
+ processedFiles: 0,
276
+ chunksCreated: 0,
277
+ embeddingsGenerated: 0,
278
+ relationshipsExtracted: 0,
279
+ errors: [],
280
+ startTime,
281
+ elapsedMs: 0,
282
+ };
283
+ await this.processFile(filePath, progress);
284
+ result.stats.filesIndexed++;
285
+ result.stats.chunksCreated += progress.chunksCreated;
286
+ result.stats.embeddingsGenerated += progress.embeddingsGenerated;
287
+ }
288
+ catch (error) {
289
+ const errorMsg = error instanceof Error ? error.message : String(error);
290
+ result.failures.push({ file: filePath, error: errorMsg });
291
+ }
292
+ }
293
+ result.stats.totalTimeMs = Date.now() - startTime;
294
+ result.success = result.failures.length === 0;
295
+ return result;
296
+ }
297
+ /**
298
+ * Query the code intelligence system.
299
+ */
300
+ async query(context) {
301
+ if (!this.isInitialized) {
302
+ await this.initialize();
303
+ }
304
+ const startTime = Date.now();
305
+ // Perform hybrid search
306
+ const searchResponse = await this.searchEngine.search(context.query, {
307
+ topK: context.topK,
308
+ });
309
+ const results = [];
310
+ for (const searchResult of searchResponse.results) {
311
+ const result = {
312
+ id: searchResult.id,
313
+ filePath: searchResult.filePath,
314
+ content: searchResult.content,
315
+ startLine: searchResult.startLine,
316
+ endLine: searchResult.endLine,
317
+ score: searchResult.score,
318
+ entityType: searchResult.entityType,
319
+ entityName: searchResult.entityName,
320
+ };
321
+ // Add graph context if requested
322
+ if (context.includeGraphContext) {
323
+ result.relatedCode = await this.expandGraphContext(searchResult.filePath, searchResult.entityName, context.graphDepth);
324
+ }
325
+ results.push(result);
326
+ }
327
+ return {
328
+ results,
329
+ metadata: {
330
+ query: context.query,
331
+ totalMatches: searchResponse.totalMatches,
332
+ searchTimeMs: Date.now() - startTime,
333
+ graphExpansionTimeMs: context.includeGraphContext
334
+ ? Date.now() - startTime - searchResponse.searchTimeMs
335
+ : undefined,
336
+ },
337
+ };
338
+ }
339
+ /**
340
+ * Start file watching.
341
+ */
342
+ async startWatching() {
343
+ if (this.config.watchEnabled) {
344
+ await this.fileWatcher.start();
345
+ }
346
+ }
347
+ /**
348
+ * Stop file watching.
349
+ */
350
+ async stopWatching() {
351
+ await this.fileWatcher.stop();
352
+ }
353
+ /**
354
+ * Get changed files since last index using git.
355
+ */
356
+ async getGitChanges(sinceCommit) {
357
+ if (!this.config.gitEnabled) {
358
+ return [];
359
+ }
360
+ return this.gitDetector.getChangedFiles(sinceCommit);
361
+ }
362
+ /**
363
+ * Get current statistics.
364
+ */
365
+ getStats() {
366
+ return {
367
+ indexer: this.indexer.getStats(),
368
+ graph: this.graphBuilder.getStats(),
369
+ search: this.searchEngine.getStats(),
370
+ };
371
+ }
372
+ /**
373
+ * Get configuration.
374
+ */
375
+ getConfig() {
376
+ return { ...this.config };
377
+ }
378
+ /**
379
+ * Clear all indexes.
380
+ */
381
+ async clear() {
382
+ this.indexer.clearIndex();
383
+ this.graphBuilder.clear();
384
+ this.searchEngine.clear();
385
+ this.embeddingCache.clear();
386
+ // Clear database storage if using codeRouter
387
+ if (this.codeRouter) {
388
+ await this.codeRouter.clearStorage();
389
+ }
390
+ }
391
+ /**
392
+ * Check if using database-backed storage.
393
+ */
394
+ isUsingDatabase() {
395
+ return this.codeRouter !== null && this.codeRouter.isUsingDatabase();
396
+ }
397
+ /**
398
+ * Get the code router (for advanced operations).
399
+ */
400
+ getCodeRouter() {
401
+ return this.codeRouter;
402
+ }
403
+ /**
404
+ * Get the graph builder (for visualization and context building).
405
+ */
406
+ getGraphBuilder() {
407
+ return this.graphBuilder;
408
+ }
409
+ /**
410
+ * Get the search engine (for context building).
411
+ */
412
+ getSearchEngine() {
413
+ return this.searchEngine;
414
+ }
415
+ /**
416
+ * Shutdown the orchestrator.
417
+ */
418
+ async shutdown() {
419
+ await this.stopWatching();
420
+ if (this.codeRouter) {
421
+ await this.codeRouter.shutdown();
422
+ this.codeRouter = null;
423
+ }
424
+ this.isInitialized = false;
425
+ this.emit('shutdown');
426
+ }
427
+ // === Private Methods ===
428
+ /**
429
+ * Process a single file through the entire pipeline.
430
+ */
431
+ async processFile(filePath, progress) {
432
+ progress.currentFile = filePath;
433
+ // Read file content
434
+ const content = await fs.readFile(filePath, 'utf-8');
435
+ const language = this.detectLanguage(filePath);
436
+ // Check if file needs re-indexing
437
+ if (!this.indexer.needsReindex(filePath, content)) {
438
+ return;
439
+ }
440
+ // Phase 1: Parse file
441
+ progress.phase = 'parsing';
442
+ const indexedFile = await this.indexer.indexFile(filePath, content, language);
443
+ let entities = [];
444
+ try {
445
+ const parseResult = await this.parser.parseFile(filePath, content);
446
+ entities = parseResult.entities;
447
+ }
448
+ catch (error) {
449
+ // Log but continue - file can still be chunked line-based
450
+ console.warn(`Failed to parse ${filePath}:`, error);
451
+ }
452
+ // Phase 2: Chunk file (ASTChunker parses internally, entities used for graph)
453
+ progress.phase = 'chunking';
454
+ const chunkingResult = this.chunker.chunkFile(filePath, content, language);
455
+ const chunks = chunkingResult.chunks;
456
+ progress.chunksCreated += chunks.length;
457
+ // Phase 3: Generate embeddings and store in database
458
+ progress.phase = 'embedding';
459
+ const chunkIds = [];
460
+ if (this.codeRouter) {
461
+ // Use CodeIntelligenceHybridRouter for database-backed storage
462
+ try {
463
+ const embeddedChunks = await this.codeRouter.embedAndStoreChunks(chunks);
464
+ for (const embeddedChunk of embeddedChunks) {
465
+ // Add to search engine (for BM25 keyword search)
466
+ this.searchEngine.addDocument({
467
+ id: embeddedChunk.chunk.id,
468
+ filePath: embeddedChunk.chunk.filePath,
469
+ content: embeddedChunk.chunk.content,
470
+ startLine: embeddedChunk.chunk.lineStart,
471
+ endLine: embeddedChunk.chunk.lineEnd,
472
+ entityType: embeddedChunk.chunk.entityType,
473
+ entityName: embeddedChunk.chunk.parentEntity,
474
+ });
475
+ chunkIds.push(embeddedChunk.chunk.id);
476
+ progress.embeddingsGenerated++;
477
+ }
478
+ }
479
+ catch (error) {
480
+ console.warn(`Failed to embed chunks for ${filePath}:`, error);
481
+ // Fall back to adding documents without embeddings
482
+ for (const chunk of chunks) {
483
+ this.searchEngine.addDocument({
484
+ id: chunk.id,
485
+ filePath: chunk.filePath,
486
+ content: chunk.content,
487
+ startLine: chunk.lineStart,
488
+ endLine: chunk.lineEnd,
489
+ entityType: chunk.entityType,
490
+ entityName: chunk.parentEntity,
491
+ });
492
+ chunkIds.push(chunk.id);
493
+ }
494
+ }
495
+ }
496
+ else {
497
+ // Fallback: In-memory mode
498
+ for (const chunk of chunks) {
499
+ const embedding = await this.generateEmbedding(chunk);
500
+ // Add to search engine
501
+ this.searchEngine.addDocument({
502
+ id: chunk.id,
503
+ filePath: chunk.filePath,
504
+ content: chunk.content,
505
+ startLine: chunk.lineStart,
506
+ endLine: chunk.lineEnd,
507
+ entityType: chunk.entityType,
508
+ entityName: chunk.parentEntity,
509
+ });
510
+ chunkIds.push(chunk.id);
511
+ if (embedding) {
512
+ progress.embeddingsGenerated++;
513
+ // Store embedding in memory for vector search
514
+ this.embeddingCache.set(chunk.id, embedding);
515
+ }
516
+ }
517
+ }
518
+ // Phase 4: Build graph
519
+ progress.phase = 'indexing';
520
+ // Add file node
521
+ const fileNode = this.graphBuilder.addNode('file', path.basename(filePath), filePath, 1, content.split('\n').length, language);
522
+ // Add entity nodes and extract relationships
523
+ for (const entity of entities) {
524
+ const entityNode = this.graphBuilder.addNode(entity.type, entity.name, filePath, entity.lineStart, entity.lineEnd, language, {
525
+ parameters: entity.metadata.parameters,
526
+ returnType: entity.metadata.returnType,
527
+ visibility: entity.metadata.visibility,
528
+ isAsync: entity.metadata.isAsync,
529
+ isExported: entity.metadata.isExported,
530
+ });
531
+ // DEFINES relationship (file defines entity)
532
+ this.graphBuilder.addEdge(fileNode.id, entityNode.id, 'defines');
533
+ }
534
+ // Extract inheritance relationships from parsed entities
535
+ // Convert CodeEntity[] to ParsedEntity[] format for RelationshipExtractor
536
+ const parsedEntities = entities.map((entity) => ({
537
+ type: entity.type,
538
+ name: entity.name,
539
+ filePath: entity.filePath,
540
+ startLine: entity.lineStart,
541
+ endLine: entity.lineEnd,
542
+ language: entity.language,
543
+ parent: entity.metadata.parentClass,
544
+ returnType: entity.metadata.returnType,
545
+ parameters: entity.metadata.parameters?.map((p) => ({ name: p, type: 'unknown' })),
546
+ }));
547
+ const extractionResult = this.relationshipExtractor.extractFromEntities(parsedEntities);
548
+ progress.relationshipsExtracted += extractionResult.edgesCreated;
549
+ // Extract import relationships
550
+ const imports = this.importParser.parseImports(content, language);
551
+ for (const imp of imports) {
552
+ const targetPath = this.importParser.resolveImportPath(imp, filePath);
553
+ if (targetPath) {
554
+ const targetFileNode = this.graphBuilder.findOrCreateNode('file', path.basename(targetPath), targetPath);
555
+ this.graphBuilder.addEdge(fileNode.id, targetFileNode.id, 'imports');
556
+ progress.relationshipsExtracted++;
557
+ }
558
+ }
559
+ // Mark file as indexed
560
+ this.indexer.markIndexed(filePath, chunkIds);
561
+ }
562
+ /**
563
+ * Extract cross-file relationships (tests, calls).
564
+ */
565
+ async extractCrossFileRelationships(rootDir) {
566
+ // Map test files to source files
567
+ const testMappings = await this.testMapper.mapTestFiles();
568
+ for (const mapping of testMappings) {
569
+ const testFileNode = this.graphBuilder.findNode(path.basename(mapping.testFile), mapping.testFile, 'file');
570
+ const sourceFileNode = this.graphBuilder.findNode(path.basename(mapping.sourceFile), mapping.sourceFile, 'file');
571
+ if (testFileNode && sourceFileNode) {
572
+ this.graphBuilder.addEdge(testFileNode.id, sourceFileNode.id, 'tests');
573
+ }
574
+ }
575
+ }
576
+ /**
577
+ * Generate embedding for a chunk.
578
+ */
579
+ async generateEmbedding(chunk) {
580
+ try {
581
+ const text = this.formatChunkForEmbedding(chunk);
582
+ // embed() takes a single string and returns number[] directly
583
+ const embedding = await this.embedder.embed(text);
584
+ return embedding;
585
+ }
586
+ catch (error) {
587
+ // Embedding failures are not fatal
588
+ return null;
589
+ }
590
+ }
591
+ /**
592
+ * Format chunk content for embedding.
593
+ */
594
+ formatChunkForEmbedding(chunk) {
595
+ const parts = [];
596
+ if (chunk.language) {
597
+ parts.push(`Language: ${chunk.language}`);
598
+ }
599
+ if (chunk.entityType) {
600
+ parts.push(`Type: ${chunk.entityType}`);
601
+ }
602
+ if (chunk.parentEntity) {
603
+ parts.push(`Name: ${chunk.parentEntity}`);
604
+ }
605
+ parts.push('');
606
+ parts.push(chunk.content);
607
+ return parts.join('\n');
608
+ }
609
+ /**
610
+ * Expand graph context for a result.
611
+ */
612
+ async expandGraphContext(filePath, entityName, depth = 2) {
613
+ const related = [];
614
+ // Find starting node
615
+ const startNode = entityName
616
+ ? this.graphBuilder.findNode(entityName, filePath)
617
+ : this.graphBuilder.findNode(path.basename(filePath), filePath, 'file');
618
+ if (!startNode)
619
+ return related;
620
+ // Get neighbors up to specified depth
621
+ const queryResult = this.graphBuilder.query({
622
+ startNode: startNode.id,
623
+ maxDepth: depth,
624
+ limit: 10,
625
+ direction: 'both',
626
+ });
627
+ for (const node of queryResult.nodes) {
628
+ if (node.id === startNode.id)
629
+ continue;
630
+ // Find relationship type
631
+ const edge = queryResult.edges.find((e) => e.source === startNode.id && e.target === node.id) || queryResult.edges.find((e) => e.target === startNode.id && e.source === node.id);
632
+ if (edge) {
633
+ try {
634
+ const content = await fs.readFile(node.filePath, 'utf-8');
635
+ const lines = content.split('\n');
636
+ const snippet = lines
637
+ .slice(node.startLine - 1, node.endLine)
638
+ .join('\n');
639
+ related.push({
640
+ filePath: node.filePath,
641
+ content: snippet,
642
+ relationship: edge.type,
643
+ });
644
+ }
645
+ catch {
646
+ // File not accessible - skip
647
+ }
648
+ }
649
+ }
650
+ return related;
651
+ }
652
+ /**
653
+ * Set up vector search provider using RuVector database or in-memory cache.
654
+ */
655
+ setupVectorSearchProvider() {
656
+ const self = this;
657
+ const vectorProvider = {
658
+ async search(query, topK) {
659
+ // Use CodeIntelligenceHybridRouter if available (RuVector-backed)
660
+ if (self.codeRouter) {
661
+ try {
662
+ const results = await self.codeRouter.searchCode(query, { topK });
663
+ return results.map((r) => ({
664
+ id: r.id,
665
+ filePath: r.filePath,
666
+ content: r.content,
667
+ startLine: r.startLine,
668
+ endLine: r.endLine,
669
+ score: r.score,
670
+ vectorScore: r.score,
671
+ entityType: r.entityType,
672
+ entityName: r.entityName,
673
+ }));
674
+ }
675
+ catch (error) {
676
+ console.warn('RuVector search failed, falling back to in-memory:', error);
677
+ // Fall through to in-memory search
678
+ }
679
+ }
680
+ // Fallback: In-memory search using embedding cache
681
+ let queryEmbedding;
682
+ try {
683
+ // embed() takes a single string and returns number[] directly
684
+ queryEmbedding = await self.embedder.embed(query);
685
+ }
686
+ catch {
687
+ return [];
688
+ }
689
+ if (!queryEmbedding)
690
+ return [];
691
+ // Calculate similarity scores against in-memory cache
692
+ const scores = [];
693
+ for (const [id, embedding] of self.embeddingCache.entries()) {
694
+ const score = self.cosineSimilarity(queryEmbedding, embedding);
695
+ scores.push({ id, score });
696
+ }
697
+ // Sort by score and take topK
698
+ scores.sort((a, b) => b.score - a.score);
699
+ const topResults = scores.slice(0, topK);
700
+ // Convert to SearchResult format
701
+ return topResults.map((s) => ({
702
+ id: s.id,
703
+ filePath: '',
704
+ content: '',
705
+ startLine: 0,
706
+ endLine: 0,
707
+ score: s.score,
708
+ vectorScore: s.score,
709
+ }));
710
+ },
711
+ };
712
+ this.searchEngine.setVectorProvider(vectorProvider);
713
+ }
714
+ /**
715
+ * Calculate cosine similarity between two vectors.
716
+ */
717
+ cosineSimilarity(a, b) {
718
+ if (a.length !== b.length)
719
+ return 0;
720
+ let dotProduct = 0;
721
+ let normA = 0;
722
+ let normB = 0;
723
+ for (let i = 0; i < a.length; i++) {
724
+ dotProduct += a[i] * b[i];
725
+ normA += a[i] * a[i];
726
+ normB += b[i] * b[i];
727
+ }
728
+ const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
729
+ return magnitude === 0 ? 0 : dotProduct / magnitude;
730
+ }
731
+ /**
732
+ * Set up file watcher integration.
733
+ */
734
+ setupFileWatcherIntegration() {
735
+ this.fileWatcher.onChanges(async (changes) => {
736
+ if (!this.isIndexing) {
737
+ const result = await this.processChanges(changes);
738
+ this.emit('incrementalUpdate', result);
739
+ }
740
+ });
741
+ this.fileWatcher.on('error', (error) => {
742
+ this.emit('error', error);
743
+ });
744
+ }
745
+ /**
746
+ * Scan directory for indexable files.
747
+ */
748
+ async scanDirectory(dir) {
749
+ const files = [];
750
+ const config = this.indexer.getConfig();
751
+ const scan = async (currentDir) => {
752
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
753
+ for (const entry of entries) {
754
+ const fullPath = path.join(currentDir, entry.name);
755
+ if (entry.isDirectory()) {
756
+ // Skip excluded directories
757
+ if (!config.excludeDirs.includes(entry.name)) {
758
+ await scan(fullPath);
759
+ }
760
+ }
761
+ else if (entry.isFile()) {
762
+ const ext = path.extname(entry.name);
763
+ if (config.extensions.includes(ext)) {
764
+ const stat = await fs.stat(fullPath);
765
+ if (stat.size <= config.maxFileSize) {
766
+ files.push(fullPath);
767
+ }
768
+ }
769
+ }
770
+ }
771
+ };
772
+ await scan(dir);
773
+ return files;
774
+ }
775
+ /**
776
+ * Detect language from file extension.
777
+ */
778
+ detectLanguage(filePath) {
779
+ const ext = path.extname(filePath).toLowerCase();
780
+ const langMap = {
781
+ '.ts': 'typescript',
782
+ '.tsx': 'typescript',
783
+ '.js': 'javascript',
784
+ '.jsx': 'javascript',
785
+ '.py': 'python',
786
+ '.go': 'go',
787
+ '.rs': 'rust',
788
+ '.java': 'java',
789
+ '.c': 'c',
790
+ '.cpp': 'cpp',
791
+ '.h': 'c',
792
+ };
793
+ return langMap[ext] || 'unknown';
794
+ }
795
+ /**
796
+ * Emit progress event.
797
+ */
798
+ emitProgress(progress, callback) {
799
+ this.emit('progress', progress);
800
+ if (callback) {
801
+ callback(progress);
802
+ }
803
+ }
804
+ }
805
+ exports.CodeIntelligenceOrchestrator = CodeIntelligenceOrchestrator;
806
+ //# sourceMappingURL=CodeIntelligenceOrchestrator.js.map