agentic-qe 2.5.10 → 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 (313) hide show
  1. package/.claude/agents/qe-code-intelligence.md +359 -0
  2. package/CHANGELOG.md +61 -0
  3. package/README.md +3 -2
  4. package/dist/agents/BaseAgent.d.ts +48 -0
  5. package/dist/agents/BaseAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseAgent.js +126 -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/context/ContextCache.d.ts +105 -0
  13. package/dist/agents/context/ContextCache.d.ts.map +1 -0
  14. package/dist/agents/context/ContextCache.js +235 -0
  15. package/dist/agents/context/ContextCache.js.map +1 -0
  16. package/dist/agents/context/ContextFormatter.d.ts +92 -0
  17. package/dist/agents/context/ContextFormatter.d.ts.map +1 -0
  18. package/dist/agents/context/ContextFormatter.js +338 -0
  19. package/dist/agents/context/ContextFormatter.js.map +1 -0
  20. package/dist/agents/context/GraphExpander.d.ts +87 -0
  21. package/dist/agents/context/GraphExpander.d.ts.map +1 -0
  22. package/dist/agents/context/GraphExpander.js +215 -0
  23. package/dist/agents/context/GraphExpander.js.map +1 -0
  24. package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts +160 -0
  25. package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts.map +1 -0
  26. package/dist/agents/context/KnowledgeGraphContextBuilder.js +300 -0
  27. package/dist/agents/context/KnowledgeGraphContextBuilder.js.map +1 -0
  28. package/dist/agents/context/index.d.ts +15 -0
  29. package/dist/agents/context/index.d.ts.map +1 -0
  30. package/dist/agents/context/index.js +18 -0
  31. package/dist/agents/context/index.js.map +1 -0
  32. package/dist/agents/index.d.ts +1 -0
  33. package/dist/agents/index.d.ts.map +1 -1
  34. package/dist/agents/index.js +67 -3
  35. package/dist/agents/index.js.map +1 -1
  36. package/dist/cli/commands/knowledge-graph.d.ts +112 -0
  37. package/dist/cli/commands/knowledge-graph.d.ts.map +1 -0
  38. package/dist/cli/commands/knowledge-graph.js +466 -0
  39. package/dist/cli/commands/knowledge-graph.js.map +1 -0
  40. package/dist/cli/formatters/KGOutputFormatter.d.ts +50 -0
  41. package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -0
  42. package/dist/cli/formatters/KGOutputFormatter.js +237 -0
  43. package/dist/cli/formatters/KGOutputFormatter.js.map +1 -0
  44. package/dist/cli/index-working.js +138 -0
  45. package/dist/cli/index-working.js.map +1 -1
  46. package/dist/cli/init/claude-config.d.ts +13 -1
  47. package/dist/cli/init/claude-config.d.ts.map +1 -1
  48. package/dist/cli/init/claude-config.js +70 -8
  49. package/dist/cli/init/claude-config.js.map +1 -1
  50. package/dist/cli/init/code-intelligence-init.d.ts +52 -0
  51. package/dist/cli/init/code-intelligence-init.d.ts.map +1 -0
  52. package/dist/cli/init/code-intelligence-init.js +250 -0
  53. package/dist/cli/init/code-intelligence-init.js.map +1 -0
  54. package/dist/cli/init/index.d.ts +2 -2
  55. package/dist/cli/init/index.d.ts.map +1 -1
  56. package/dist/cli/init/index.js +10 -1
  57. package/dist/cli/init/index.js.map +1 -1
  58. package/dist/code-intelligence/chunking/ASTChunker.d.ts +64 -0
  59. package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -0
  60. package/dist/code-intelligence/chunking/ASTChunker.js +344 -0
  61. package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -0
  62. package/dist/code-intelligence/chunking/ChunkSplitter.d.ts +48 -0
  63. package/dist/code-intelligence/chunking/ChunkSplitter.d.ts.map +1 -0
  64. package/dist/code-intelligence/chunking/ChunkSplitter.js +278 -0
  65. package/dist/code-intelligence/chunking/ChunkSplitter.js.map +1 -0
  66. package/dist/code-intelligence/chunking/index.d.ts +8 -0
  67. package/dist/code-intelligence/chunking/index.d.ts.map +1 -0
  68. package/dist/code-intelligence/chunking/index.js +13 -0
  69. package/dist/code-intelligence/chunking/index.js.map +1 -0
  70. package/dist/code-intelligence/chunking/types.d.ts +52 -0
  71. package/dist/code-intelligence/chunking/types.d.ts.map +1 -0
  72. package/dist/code-intelligence/chunking/types.js +6 -0
  73. package/dist/code-intelligence/chunking/types.js.map +1 -0
  74. package/dist/code-intelligence/config/database-schema.d.ts +245 -0
  75. package/dist/code-intelligence/config/database-schema.d.ts.map +1 -0
  76. package/dist/code-intelligence/config/database-schema.js +110 -0
  77. package/dist/code-intelligence/config/database-schema.js.map +1 -0
  78. package/dist/code-intelligence/config/environment.d.ts +53 -0
  79. package/dist/code-intelligence/config/environment.d.ts.map +1 -0
  80. package/dist/code-intelligence/config/environment.js +86 -0
  81. package/dist/code-intelligence/config/environment.js.map +1 -0
  82. package/dist/code-intelligence/config/index.d.ts +10 -0
  83. package/dist/code-intelligence/config/index.d.ts.map +1 -0
  84. package/dist/code-intelligence/config/index.js +36 -0
  85. package/dist/code-intelligence/config/index.js.map +1 -0
  86. package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts +81 -0
  87. package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts.map +1 -0
  88. package/dist/code-intelligence/embeddings/EmbeddingCache.js +168 -0
  89. package/dist/code-intelligence/embeddings/EmbeddingCache.js.map +1 -0
  90. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +82 -0
  91. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -0
  92. package/dist/code-intelligence/embeddings/NomicEmbedder.js +233 -0
  93. package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -0
  94. package/dist/code-intelligence/embeddings/OllamaClient.d.ts +42 -0
  95. package/dist/code-intelligence/embeddings/OllamaClient.d.ts.map +1 -0
  96. package/dist/code-intelligence/embeddings/OllamaClient.js +142 -0
  97. package/dist/code-intelligence/embeddings/OllamaClient.js.map +1 -0
  98. package/dist/code-intelligence/embeddings/index.d.ts +33 -0
  99. package/dist/code-intelligence/embeddings/index.d.ts.map +1 -0
  100. package/dist/code-intelligence/embeddings/index.js +39 -0
  101. package/dist/code-intelligence/embeddings/index.js.map +1 -0
  102. package/dist/code-intelligence/embeddings/types.d.ts +84 -0
  103. package/dist/code-intelligence/embeddings/types.d.ts.map +1 -0
  104. package/dist/code-intelligence/embeddings/types.js +19 -0
  105. package/dist/code-intelligence/embeddings/types.js.map +1 -0
  106. package/dist/code-intelligence/graph/GraphBuilder.d.ts +126 -0
  107. package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -0
  108. package/dist/code-intelligence/graph/GraphBuilder.js +416 -0
  109. package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -0
  110. package/dist/code-intelligence/graph/ImportParser.d.ts +72 -0
  111. package/dist/code-intelligence/graph/ImportParser.d.ts.map +1 -0
  112. package/dist/code-intelligence/graph/ImportParser.js +422 -0
  113. package/dist/code-intelligence/graph/ImportParser.js.map +1 -0
  114. package/dist/code-intelligence/graph/RelationshipExtractor.d.ts +74 -0
  115. package/dist/code-intelligence/graph/RelationshipExtractor.d.ts.map +1 -0
  116. package/dist/code-intelligence/graph/RelationshipExtractor.js +310 -0
  117. package/dist/code-intelligence/graph/RelationshipExtractor.js.map +1 -0
  118. package/dist/code-intelligence/graph/TestMapper.d.ts +99 -0
  119. package/dist/code-intelligence/graph/TestMapper.d.ts.map +1 -0
  120. package/dist/code-intelligence/graph/TestMapper.js +335 -0
  121. package/dist/code-intelligence/graph/TestMapper.js.map +1 -0
  122. package/dist/code-intelligence/graph/index.d.ts +14 -0
  123. package/dist/code-intelligence/graph/index.d.ts.map +1 -0
  124. package/dist/code-intelligence/graph/index.js +19 -0
  125. package/dist/code-intelligence/graph/index.js.map +1 -0
  126. package/dist/code-intelligence/graph/types.d.ts +141 -0
  127. package/dist/code-intelligence/graph/types.d.ts.map +1 -0
  128. package/dist/code-intelligence/graph/types.js +18 -0
  129. package/dist/code-intelligence/graph/types.js.map +1 -0
  130. package/dist/code-intelligence/indexing/FileWatcher.d.ts +90 -0
  131. package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -0
  132. package/dist/code-intelligence/indexing/FileWatcher.js +304 -0
  133. package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -0
  134. package/dist/code-intelligence/indexing/GitChangeDetector.d.ts +76 -0
  135. package/dist/code-intelligence/indexing/GitChangeDetector.d.ts.map +1 -0
  136. package/dist/code-intelligence/indexing/GitChangeDetector.js +347 -0
  137. package/dist/code-intelligence/indexing/GitChangeDetector.js.map +1 -0
  138. package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts +108 -0
  139. package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts.map +1 -0
  140. package/dist/code-intelligence/indexing/IncrementalIndexer.js +269 -0
  141. package/dist/code-intelligence/indexing/IncrementalIndexer.js.map +1 -0
  142. package/dist/code-intelligence/indexing/index.d.ts +11 -0
  143. package/dist/code-intelligence/indexing/index.d.ts.map +1 -0
  144. package/dist/code-intelligence/indexing/index.js +18 -0
  145. package/dist/code-intelligence/indexing/index.js.map +1 -0
  146. package/dist/code-intelligence/indexing/types.d.ts +133 -0
  147. package/dist/code-intelligence/indexing/types.d.ts.map +1 -0
  148. package/dist/code-intelligence/indexing/types.js +27 -0
  149. package/dist/code-intelligence/indexing/types.js.map +1 -0
  150. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +150 -0
  151. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -0
  152. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +806 -0
  153. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -0
  154. package/dist/code-intelligence/orchestrator/index.d.ts +8 -0
  155. package/dist/code-intelligence/orchestrator/index.d.ts.map +1 -0
  156. package/dist/code-intelligence/orchestrator/index.js +24 -0
  157. package/dist/code-intelligence/orchestrator/index.js.map +1 -0
  158. package/dist/code-intelligence/orchestrator/types.d.ts +164 -0
  159. package/dist/code-intelligence/orchestrator/types.d.ts.map +1 -0
  160. package/dist/code-intelligence/orchestrator/types.js +18 -0
  161. package/dist/code-intelligence/orchestrator/types.js.map +1 -0
  162. package/dist/code-intelligence/parser/LanguageRegistry.d.ts +13 -0
  163. package/dist/code-intelligence/parser/LanguageRegistry.d.ts.map +1 -0
  164. package/dist/code-intelligence/parser/LanguageRegistry.js +150 -0
  165. package/dist/code-intelligence/parser/LanguageRegistry.js.map +1 -0
  166. package/dist/code-intelligence/parser/TreeSitterParser.d.ts +98 -0
  167. package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +1 -0
  168. package/dist/code-intelligence/parser/TreeSitterParser.js +530 -0
  169. package/dist/code-intelligence/parser/TreeSitterParser.js.map +1 -0
  170. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +36 -0
  171. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -0
  172. package/dist/code-intelligence/parser/extractors/BaseExtractor.js +31 -0
  173. package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -0
  174. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +21 -0
  175. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -0
  176. package/dist/code-intelligence/parser/extractors/GoExtractor.js +249 -0
  177. package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -0
  178. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +21 -0
  179. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -0
  180. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +217 -0
  181. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -0
  182. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +20 -0
  183. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -0
  184. package/dist/code-intelligence/parser/extractors/PythonExtractor.js +237 -0
  185. package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -0
  186. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +21 -0
  187. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -0
  188. package/dist/code-intelligence/parser/extractors/RustExtractor.js +234 -0
  189. package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -0
  190. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +23 -0
  191. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -0
  192. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +247 -0
  193. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -0
  194. package/dist/code-intelligence/parser/extractors/index.d.ts +7 -0
  195. package/dist/code-intelligence/parser/extractors/index.d.ts.map +1 -0
  196. package/dist/code-intelligence/parser/extractors/index.js +16 -0
  197. package/dist/code-intelligence/parser/extractors/index.js.map +1 -0
  198. package/dist/code-intelligence/parser/index.d.ts +8 -0
  199. package/dist/code-intelligence/parser/index.d.ts.map +1 -0
  200. package/dist/code-intelligence/parser/index.js +12 -0
  201. package/dist/code-intelligence/parser/index.js.map +1 -0
  202. package/dist/code-intelligence/parser/types.d.ts +60 -0
  203. package/dist/code-intelligence/parser/types.d.ts.map +1 -0
  204. package/dist/code-intelligence/parser/types.js +6 -0
  205. package/dist/code-intelligence/parser/types.js.map +1 -0
  206. package/dist/code-intelligence/rag/ContextBuilder.d.ts +82 -0
  207. package/dist/code-intelligence/rag/ContextBuilder.d.ts.map +1 -0
  208. package/dist/code-intelligence/rag/ContextBuilder.js +242 -0
  209. package/dist/code-intelligence/rag/ContextBuilder.js.map +1 -0
  210. package/dist/code-intelligence/rag/GraphExpander.d.ts +95 -0
  211. package/dist/code-intelligence/rag/GraphExpander.d.ts.map +1 -0
  212. package/dist/code-intelligence/rag/GraphExpander.js +250 -0
  213. package/dist/code-intelligence/rag/GraphExpander.js.map +1 -0
  214. package/dist/code-intelligence/rag/index.d.ts +9 -0
  215. package/dist/code-intelligence/rag/index.d.ts.map +1 -0
  216. package/dist/code-intelligence/rag/index.js +25 -0
  217. package/dist/code-intelligence/rag/index.js.map +1 -0
  218. package/dist/code-intelligence/rag/types.d.ts +121 -0
  219. package/dist/code-intelligence/rag/types.d.ts.map +1 -0
  220. package/dist/code-intelligence/rag/types.js +50 -0
  221. package/dist/code-intelligence/rag/types.js.map +1 -0
  222. package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts +62 -0
  223. package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts.map +1 -0
  224. package/dist/code-intelligence/retrieval/SemanticRetriever.js +174 -0
  225. package/dist/code-intelligence/retrieval/SemanticRetriever.js.map +1 -0
  226. package/dist/code-intelligence/retrieval/index.d.ts +9 -0
  227. package/dist/code-intelligence/retrieval/index.d.ts.map +1 -0
  228. package/dist/code-intelligence/retrieval/index.js +16 -0
  229. package/dist/code-intelligence/retrieval/index.js.map +1 -0
  230. package/dist/code-intelligence/retrieval/types.d.ts +118 -0
  231. package/dist/code-intelligence/retrieval/types.d.ts.map +1 -0
  232. package/dist/code-intelligence/retrieval/types.js +46 -0
  233. package/dist/code-intelligence/retrieval/types.js.map +1 -0
  234. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts +167 -0
  235. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts.map +1 -0
  236. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js +365 -0
  237. package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js.map +1 -0
  238. package/dist/code-intelligence/router/index.d.ts +7 -0
  239. package/dist/code-intelligence/router/index.d.ts.map +1 -0
  240. package/dist/code-intelligence/router/index.js +14 -0
  241. package/dist/code-intelligence/router/index.js.map +1 -0
  242. package/dist/code-intelligence/search/BM25Search.d.ts +74 -0
  243. package/dist/code-intelligence/search/BM25Search.d.ts.map +1 -0
  244. package/dist/code-intelligence/search/BM25Search.js +233 -0
  245. package/dist/code-intelligence/search/BM25Search.js.map +1 -0
  246. package/dist/code-intelligence/search/HybridSearchEngine.d.ts +94 -0
  247. package/dist/code-intelligence/search/HybridSearchEngine.d.ts.map +1 -0
  248. package/dist/code-intelligence/search/HybridSearchEngine.js +168 -0
  249. package/dist/code-intelligence/search/HybridSearchEngine.js.map +1 -0
  250. package/dist/code-intelligence/search/RRFFusion.d.ts +46 -0
  251. package/dist/code-intelligence/search/RRFFusion.d.ts.map +1 -0
  252. package/dist/code-intelligence/search/RRFFusion.js +223 -0
  253. package/dist/code-intelligence/search/RRFFusion.js.map +1 -0
  254. package/dist/code-intelligence/search/VectorSearch.d.ts +157 -0
  255. package/dist/code-intelligence/search/VectorSearch.d.ts.map +1 -0
  256. package/dist/code-intelligence/search/VectorSearch.js +301 -0
  257. package/dist/code-intelligence/search/VectorSearch.js.map +1 -0
  258. package/dist/code-intelligence/search/index.d.ts +14 -0
  259. package/dist/code-intelligence/search/index.d.ts.map +1 -0
  260. package/dist/code-intelligence/search/index.js +23 -0
  261. package/dist/code-intelligence/search/index.js.map +1 -0
  262. package/dist/code-intelligence/search/types.d.ts +201 -0
  263. package/dist/code-intelligence/search/types.d.ts.map +1 -0
  264. package/dist/code-intelligence/search/types.js +35 -0
  265. package/dist/code-intelligence/search/types.js.map +1 -0
  266. package/dist/code-intelligence/service/CodeIntelligenceService.d.ts +171 -0
  267. package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -0
  268. package/dist/code-intelligence/service/CodeIntelligenceService.js +325 -0
  269. package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -0
  270. package/dist/code-intelligence/service/index.d.ts +7 -0
  271. package/dist/code-intelligence/service/index.d.ts.map +1 -0
  272. package/dist/code-intelligence/service/index.js +14 -0
  273. package/dist/code-intelligence/service/index.js.map +1 -0
  274. package/dist/code-intelligence/storage/CodeChunkStore.d.ts +213 -0
  275. package/dist/code-intelligence/storage/CodeChunkStore.d.ts.map +1 -0
  276. package/dist/code-intelligence/storage/CodeChunkStore.js +542 -0
  277. package/dist/code-intelligence/storage/CodeChunkStore.js.map +1 -0
  278. package/dist/code-intelligence/storage/index.d.ts +7 -0
  279. package/dist/code-intelligence/storage/index.d.ts.map +1 -0
  280. package/dist/code-intelligence/storage/index.js +13 -0
  281. package/dist/code-intelligence/storage/index.js.map +1 -0
  282. package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts +51 -0
  283. package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts.map +1 -0
  284. package/dist/code-intelligence/visualization/ClassDiagramBuilder.js +180 -0
  285. package/dist/code-intelligence/visualization/ClassDiagramBuilder.js.map +1 -0
  286. package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts +66 -0
  287. package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts.map +1 -0
  288. package/dist/code-intelligence/visualization/DependencyGraphBuilder.js +203 -0
  289. package/dist/code-intelligence/visualization/DependencyGraphBuilder.js.map +1 -0
  290. package/dist/code-intelligence/visualization/MermaidGenerator.d.ts +76 -0
  291. package/dist/code-intelligence/visualization/MermaidGenerator.d.ts.map +1 -0
  292. package/dist/code-intelligence/visualization/MermaidGenerator.js +368 -0
  293. package/dist/code-intelligence/visualization/MermaidGenerator.js.map +1 -0
  294. package/dist/code-intelligence/visualization/index.d.ts +9 -0
  295. package/dist/code-intelligence/visualization/index.d.ts.map +1 -0
  296. package/dist/code-intelligence/visualization/index.js +15 -0
  297. package/dist/code-intelligence/visualization/index.js.map +1 -0
  298. package/dist/core/FleetManager.d.ts +27 -0
  299. package/dist/core/FleetManager.d.ts.map +1 -1
  300. package/dist/core/FleetManager.js +84 -0
  301. package/dist/core/FleetManager.js.map +1 -1
  302. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  303. package/dist/core/memory/HNSWVectorMemory.js.map +1 -1
  304. package/dist/mcp/server-instructions.d.ts +1 -1
  305. package/dist/mcp/server-instructions.d.ts.map +1 -1
  306. package/dist/mcp/server-instructions.js +1 -1
  307. package/dist/mcp/server-instructions.js.map +1 -1
  308. package/dist/types/index.d.ts +2 -1
  309. package/dist/types/index.d.ts.map +1 -1
  310. package/dist/types/index.js +2 -0
  311. package/dist/types/index.js.map +1 -1
  312. package/docs/reference/agents.md +44 -1
  313. package/package.json +12 -1
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /**
3
+ * ContextCache
4
+ *
5
+ * LRU cache for agent contexts with TTL-based expiration.
6
+ * Achieves 70-80% LLM token savings by caching similar queries.
7
+ *
8
+ * Architecture:
9
+ * - LRU eviction policy for bounded memory usage
10
+ * - TTL-based expiration for freshness
11
+ * - Hash-based key generation for query similarity
12
+ * - Optional persistence for cross-session reuse
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ContextCache = void 0;
19
+ const crypto_1 = __importDefault(require("crypto"));
20
+ const DEFAULT_CONFIG = {
21
+ maxSize: 1000,
22
+ defaultTTL: 5 * 60 * 1000, // 5 minutes
23
+ enableCleanup: true,
24
+ cleanupInterval: 60 * 1000, // 1 minute
25
+ };
26
+ class ContextCache {
27
+ constructor(config = {}) {
28
+ this.config = { ...DEFAULT_CONFIG, ...config };
29
+ this.cache = new Map();
30
+ this.accessOrder = [];
31
+ this.stats = {
32
+ hits: 0,
33
+ misses: 0,
34
+ evictions: 0,
35
+ expirations: 0,
36
+ };
37
+ if (this.config.enableCleanup) {
38
+ this.startCleanup();
39
+ }
40
+ }
41
+ /**
42
+ * Generate cache key from query and options.
43
+ */
44
+ generateKey(query, options) {
45
+ const data = JSON.stringify({
46
+ query: query.toLowerCase().trim(),
47
+ options: options || {},
48
+ });
49
+ return crypto_1.default.createHash('sha256').update(data).digest('hex');
50
+ }
51
+ /**
52
+ * Get value from cache.
53
+ */
54
+ get(key) {
55
+ const entry = this.cache.get(key);
56
+ if (!entry) {
57
+ this.stats.misses++;
58
+ return null;
59
+ }
60
+ // Check expiration
61
+ if (Date.now() > entry.expiresAt) {
62
+ this.cache.delete(key);
63
+ this.removeFromAccessOrder(key);
64
+ this.stats.expirations++;
65
+ this.stats.misses++;
66
+ return null;
67
+ }
68
+ // Update access stats
69
+ entry.accessCount++;
70
+ entry.lastAccessedAt = Date.now();
71
+ this.updateAccessOrder(key);
72
+ this.stats.hits++;
73
+ return entry.value;
74
+ }
75
+ /**
76
+ * Set value in cache.
77
+ */
78
+ set(key, value, ttl) {
79
+ const now = Date.now();
80
+ const expiresAt = now + (ttl ?? this.config.defaultTTL);
81
+ // Check if entry exists
82
+ const existing = this.cache.get(key);
83
+ if (existing) {
84
+ // Update existing entry
85
+ existing.value = value;
86
+ existing.expiresAt = expiresAt;
87
+ existing.lastAccessedAt = now;
88
+ this.updateAccessOrder(key);
89
+ }
90
+ else {
91
+ // Evict if at capacity
92
+ if (this.cache.size >= this.config.maxSize) {
93
+ this.evictLRU();
94
+ }
95
+ // Add new entry
96
+ const entry = {
97
+ key,
98
+ value,
99
+ accessCount: 0,
100
+ createdAt: now,
101
+ lastAccessedAt: now,
102
+ expiresAt,
103
+ };
104
+ this.cache.set(key, entry);
105
+ this.accessOrder.push(key);
106
+ }
107
+ }
108
+ /**
109
+ * Check if key exists in cache (without affecting LRU).
110
+ */
111
+ has(key) {
112
+ const entry = this.cache.get(key);
113
+ if (!entry)
114
+ return false;
115
+ // Check expiration
116
+ if (Date.now() > entry.expiresAt) {
117
+ this.cache.delete(key);
118
+ this.removeFromAccessOrder(key);
119
+ this.stats.expirations++;
120
+ return false;
121
+ }
122
+ return true;
123
+ }
124
+ /**
125
+ * Delete entry from cache.
126
+ */
127
+ delete(key) {
128
+ const existed = this.cache.delete(key);
129
+ if (existed) {
130
+ this.removeFromAccessOrder(key);
131
+ }
132
+ return existed;
133
+ }
134
+ /**
135
+ * Clear all entries.
136
+ */
137
+ clear() {
138
+ this.cache.clear();
139
+ this.accessOrder = [];
140
+ }
141
+ /**
142
+ * Get cache statistics.
143
+ */
144
+ getStats() {
145
+ const totalAccesses = this.stats.hits + this.stats.misses;
146
+ const hitRate = totalAccesses > 0 ? this.stats.hits / totalAccesses : 0;
147
+ let totalAccessCount = 0;
148
+ for (const entry of this.cache.values()) {
149
+ totalAccessCount += entry.accessCount;
150
+ }
151
+ const avgAccessCount = this.cache.size > 0 ? totalAccessCount / this.cache.size : 0;
152
+ return {
153
+ size: this.cache.size,
154
+ maxSize: this.config.maxSize,
155
+ hits: this.stats.hits,
156
+ misses: this.stats.misses,
157
+ hitRate,
158
+ evictions: this.stats.evictions,
159
+ expirations: this.stats.expirations,
160
+ avgAccessCount,
161
+ };
162
+ }
163
+ /**
164
+ * Get all entries (for inspection/persistence).
165
+ */
166
+ getEntries() {
167
+ return Array.from(this.cache.values());
168
+ }
169
+ /**
170
+ * Cleanup expired entries.
171
+ */
172
+ cleanup() {
173
+ const now = Date.now();
174
+ let removed = 0;
175
+ for (const [key, entry] of this.cache.entries()) {
176
+ if (now > entry.expiresAt) {
177
+ this.cache.delete(key);
178
+ this.removeFromAccessOrder(key);
179
+ this.stats.expirations++;
180
+ removed++;
181
+ }
182
+ }
183
+ return removed;
184
+ }
185
+ /**
186
+ * Shutdown cache (stop cleanup timer).
187
+ */
188
+ shutdown() {
189
+ if (this.cleanupTimer) {
190
+ clearInterval(this.cleanupTimer);
191
+ this.cleanupTimer = undefined;
192
+ }
193
+ }
194
+ // === Private Methods ===
195
+ /**
196
+ * Evict least recently used entry.
197
+ */
198
+ evictLRU() {
199
+ if (this.accessOrder.length === 0)
200
+ return;
201
+ const lruKey = this.accessOrder.shift();
202
+ this.cache.delete(lruKey);
203
+ this.stats.evictions++;
204
+ }
205
+ /**
206
+ * Update access order for LRU tracking.
207
+ */
208
+ updateAccessOrder(key) {
209
+ this.removeFromAccessOrder(key);
210
+ this.accessOrder.push(key);
211
+ }
212
+ /**
213
+ * Remove key from access order.
214
+ */
215
+ removeFromAccessOrder(key) {
216
+ const index = this.accessOrder.indexOf(key);
217
+ if (index !== -1) {
218
+ this.accessOrder.splice(index, 1);
219
+ }
220
+ }
221
+ /**
222
+ * Start periodic cleanup.
223
+ */
224
+ startCleanup() {
225
+ this.cleanupTimer = setInterval(() => {
226
+ this.cleanup();
227
+ }, this.config.cleanupInterval);
228
+ // Don't block process exit
229
+ if (this.cleanupTimer.unref) {
230
+ this.cleanupTimer.unref();
231
+ }
232
+ }
233
+ }
234
+ exports.ContextCache = ContextCache;
235
+ //# sourceMappingURL=ContextCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextCache.js","sourceRoot":"","sources":["../../../src/agents/context/ContextCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * ContextFormatter
3
+ *
4
+ * Formats code context for optimal LLM consumption.
5
+ * Includes metadata, relationship context, and intelligent truncation.
6
+ *
7
+ * Goals:
8
+ * - Minimize tokens while preserving essential information
9
+ * - Include navigational metadata (file paths, line numbers)
10
+ * - Show relationship context (imports, calls, tests)
11
+ * - Smart truncation for large code blocks
12
+ */
13
+ import type { SearchResult } from '../../code-intelligence/search/types.js';
14
+ import type { ExpandedNode } from './GraphExpander.js';
15
+ export interface FormattingOptions {
16
+ /** Include file paths (default: true) */
17
+ includeFilePaths: boolean;
18
+ /** Include line numbers (default: true) */
19
+ includeLineNumbers: boolean;
20
+ /** Include entity metadata (default: true) */
21
+ includeMetadata: boolean;
22
+ /** Include relationship context (default: true) */
23
+ includeRelationships: boolean;
24
+ /** Maximum lines per code block (default: 50) */
25
+ maxLinesPerBlock: number;
26
+ /** Truncation strategy (default: 'middle') */
27
+ truncationStrategy: 'start' | 'middle' | 'end' | 'smart';
28
+ /** Markdown formatting (default: true) */
29
+ useMarkdown: boolean;
30
+ }
31
+ export interface FormattedContext {
32
+ content: string;
33
+ metadata: {
34
+ totalChunks: number;
35
+ totalLines: number;
36
+ totalTokensEstimate: number;
37
+ truncated: boolean;
38
+ };
39
+ }
40
+ export declare class ContextFormatter {
41
+ private options;
42
+ constructor(options?: Partial<FormattingOptions>);
43
+ /**
44
+ * Format search results with graph context.
45
+ */
46
+ format(searchResults: SearchResult[], expandedNodes: ExpandedNode[], options?: Partial<FormattingOptions>): FormattedContext;
47
+ /**
48
+ * Format primary search results.
49
+ */
50
+ private formatPrimaryResults;
51
+ /**
52
+ * Format related code from graph expansion.
53
+ */
54
+ private formatRelatedCode;
55
+ /**
56
+ * Format a code block from search result.
57
+ */
58
+ private formatCodeBlock;
59
+ /**
60
+ * Format a graph node.
61
+ */
62
+ private formatGraphNode;
63
+ /**
64
+ * Truncate content based on strategy.
65
+ */
66
+ private truncateContent;
67
+ /**
68
+ * Smart truncation preserving important lines.
69
+ */
70
+ private smartTruncate;
71
+ /**
72
+ * Detect programming language from file path.
73
+ */
74
+ private detectLanguage;
75
+ /**
76
+ * Capitalize relationship name for display.
77
+ */
78
+ private capitalizeRelationship;
79
+ /**
80
+ * Estimate token count (rough heuristic: ~4 chars per token).
81
+ */
82
+ private estimateTokens;
83
+ /**
84
+ * Update formatting options.
85
+ */
86
+ updateOptions(options: Partial<FormattingOptions>): void;
87
+ /**
88
+ * Get current options.
89
+ */
90
+ getOptions(): FormattingOptions;
91
+ }
92
+ //# sourceMappingURL=ContextFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextFormatter.d.ts","sourceRoot":"","sources":["../../../src/agents/context/ContextFormatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,mDAAmD;IACnD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,kBAAkB,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;IACzD,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAYD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAIpD;;OAEG;IACH,MAAM,CACJ,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,gBAAgB;IAoCnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0DvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA8CvB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACH,UAAU,IAAI,iBAAiB;CAGhC"}
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ /**
3
+ * ContextFormatter
4
+ *
5
+ * Formats code context for optimal LLM consumption.
6
+ * Includes metadata, relationship context, and intelligent truncation.
7
+ *
8
+ * Goals:
9
+ * - Minimize tokens while preserving essential information
10
+ * - Include navigational metadata (file paths, line numbers)
11
+ * - Show relationship context (imports, calls, tests)
12
+ * - Smart truncation for large code blocks
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ContextFormatter = void 0;
16
+ const DEFAULT_OPTIONS = {
17
+ includeFilePaths: true,
18
+ includeLineNumbers: true,
19
+ includeMetadata: true,
20
+ includeRelationships: true,
21
+ maxLinesPerBlock: 50,
22
+ truncationStrategy: 'middle',
23
+ useMarkdown: true,
24
+ };
25
+ class ContextFormatter {
26
+ constructor(options = {}) {
27
+ this.options = { ...DEFAULT_OPTIONS, ...options };
28
+ }
29
+ /**
30
+ * Format search results with graph context.
31
+ */
32
+ format(searchResults, expandedNodes, options) {
33
+ const opts = { ...this.options, ...options };
34
+ const sections = [];
35
+ let totalLines = 0;
36
+ let truncated = false;
37
+ // Primary results section
38
+ if (searchResults.length > 0) {
39
+ const primarySection = this.formatPrimaryResults(searchResults, opts);
40
+ sections.push(primarySection.content);
41
+ totalLines += primarySection.lines;
42
+ truncated = truncated || primarySection.truncated;
43
+ }
44
+ // Related code section
45
+ if (expandedNodes.length > 0 && opts.includeRelationships) {
46
+ const relatedSection = this.formatRelatedCode(expandedNodes, opts);
47
+ sections.push(relatedSection.content);
48
+ totalLines += relatedSection.lines;
49
+ truncated = truncated || relatedSection.truncated;
50
+ }
51
+ const content = sections.join('\n\n');
52
+ const totalTokensEstimate = this.estimateTokens(content);
53
+ return {
54
+ content,
55
+ metadata: {
56
+ totalChunks: searchResults.length + expandedNodes.length,
57
+ totalLines,
58
+ totalTokensEstimate,
59
+ truncated,
60
+ },
61
+ };
62
+ }
63
+ /**
64
+ * Format primary search results.
65
+ */
66
+ formatPrimaryResults(results, opts) {
67
+ const sections = [];
68
+ let totalLines = 0;
69
+ let truncated = false;
70
+ if (opts.useMarkdown) {
71
+ sections.push('## Relevant Code');
72
+ sections.push('');
73
+ }
74
+ for (let i = 0; i < results.length; i++) {
75
+ const result = results[i];
76
+ const formatted = this.formatCodeBlock(result, opts, `Result ${i + 1}`);
77
+ sections.push(formatted.content);
78
+ totalLines += formatted.lines;
79
+ truncated = truncated || formatted.truncated;
80
+ if (i < results.length - 1) {
81
+ sections.push('');
82
+ }
83
+ }
84
+ return {
85
+ content: sections.join('\n'),
86
+ lines: totalLines,
87
+ truncated,
88
+ };
89
+ }
90
+ /**
91
+ * Format related code from graph expansion.
92
+ */
93
+ formatRelatedCode(nodes, opts) {
94
+ const sections = [];
95
+ let totalLines = 0;
96
+ let truncated = false;
97
+ if (opts.useMarkdown) {
98
+ sections.push('## Related Code');
99
+ sections.push('');
100
+ }
101
+ // Group by relationship type
102
+ const grouped = new Map();
103
+ for (const node of nodes) {
104
+ const relationship = node.relationship;
105
+ if (!grouped.has(relationship)) {
106
+ grouped.set(relationship, []);
107
+ }
108
+ grouped.get(relationship).push(node);
109
+ }
110
+ // Format each group
111
+ for (const [relationship, relatedNodes] of grouped.entries()) {
112
+ if (opts.useMarkdown) {
113
+ sections.push(`### ${this.capitalizeRelationship(relationship)}`);
114
+ sections.push('');
115
+ }
116
+ for (let i = 0; i < relatedNodes.length; i++) {
117
+ const node = relatedNodes[i];
118
+ const formatted = this.formatGraphNode(node, opts);
119
+ sections.push(formatted.content);
120
+ totalLines += formatted.lines;
121
+ truncated = truncated || formatted.truncated;
122
+ if (i < relatedNodes.length - 1) {
123
+ sections.push('');
124
+ }
125
+ }
126
+ sections.push('');
127
+ }
128
+ return {
129
+ content: sections.join('\n'),
130
+ lines: totalLines,
131
+ truncated,
132
+ };
133
+ }
134
+ /**
135
+ * Format a code block from search result.
136
+ */
137
+ formatCodeBlock(result, opts, label) {
138
+ const lines = [];
139
+ // Header
140
+ if (label && opts.useMarkdown) {
141
+ lines.push(`### ${label}`);
142
+ }
143
+ // File path and line numbers
144
+ if (opts.includeFilePaths) {
145
+ const location = opts.includeLineNumbers
146
+ ? `${result.filePath}:${result.startLine}-${result.endLine}`
147
+ : result.filePath;
148
+ lines.push(opts.useMarkdown ? `**File:** \`${location}\`` : `File: ${location}`);
149
+ }
150
+ // Entity metadata
151
+ if (opts.includeMetadata && (result.entityType || result.entityName)) {
152
+ const metadata = [];
153
+ if (result.entityType)
154
+ metadata.push(`Type: ${result.entityType}`);
155
+ if (result.entityName)
156
+ metadata.push(`Name: ${result.entityName}`);
157
+ if (result.score !== undefined) {
158
+ metadata.push(`Relevance: ${(result.score * 100).toFixed(1)}%`);
159
+ }
160
+ lines.push(opts.useMarkdown ? `**${metadata.join(' | ')}**` : metadata.join(' | '));
161
+ }
162
+ lines.push('');
163
+ // Code content with truncation
164
+ const { content, truncated } = this.truncateContent(result.content, opts.maxLinesPerBlock, opts.truncationStrategy);
165
+ const language = this.detectLanguage(result.filePath);
166
+ if (opts.useMarkdown) {
167
+ lines.push(`\`\`\`${language}`);
168
+ lines.push(content);
169
+ lines.push('```');
170
+ }
171
+ else {
172
+ lines.push(content);
173
+ }
174
+ const totalLines = content.split('\n').length;
175
+ return {
176
+ content: lines.join('\n'),
177
+ lines: totalLines,
178
+ truncated,
179
+ };
180
+ }
181
+ /**
182
+ * Format a graph node.
183
+ */
184
+ formatGraphNode(expandedNode, opts) {
185
+ const node = expandedNode.node;
186
+ const lines = [];
187
+ // File path and line numbers
188
+ if (opts.includeFilePaths) {
189
+ const location = opts.includeLineNumbers
190
+ ? `${node.filePath}:${node.startLine}-${node.endLine}`
191
+ : node.filePath;
192
+ lines.push(opts.useMarkdown ? `**\`${location}\`**` : location);
193
+ }
194
+ // Node metadata
195
+ if (opts.includeMetadata) {
196
+ const metadata = [];
197
+ metadata.push(`Type: ${node.type}`);
198
+ metadata.push(`Label: ${node.label}`);
199
+ if (expandedNode.depth > 0) {
200
+ metadata.push(`Depth: ${expandedNode.depth}`);
201
+ }
202
+ lines.push(metadata.join(' | '));
203
+ }
204
+ // Note: Graph nodes don't have content - would need to read from file
205
+ // For now, just show metadata
206
+ lines.push('');
207
+ return {
208
+ content: lines.join('\n'),
209
+ lines: 3,
210
+ truncated: false,
211
+ };
212
+ }
213
+ /**
214
+ * Truncate content based on strategy.
215
+ */
216
+ truncateContent(content, maxLines, strategy) {
217
+ const lines = content.split('\n');
218
+ if (lines.length <= maxLines) {
219
+ return { content, truncated: false };
220
+ }
221
+ let truncatedLines;
222
+ switch (strategy) {
223
+ case 'start':
224
+ truncatedLines = lines.slice(0, maxLines);
225
+ truncatedLines.push('// ... (truncated)');
226
+ break;
227
+ case 'end':
228
+ truncatedLines = ['// ... (truncated)'];
229
+ truncatedLines.push(...lines.slice(-maxLines));
230
+ break;
231
+ case 'middle':
232
+ const half = Math.floor(maxLines / 2);
233
+ truncatedLines = lines.slice(0, half);
234
+ truncatedLines.push('// ... (truncated)');
235
+ truncatedLines.push(...lines.slice(-half));
236
+ break;
237
+ case 'smart':
238
+ // Keep important lines (function signatures, class definitions, etc.)
239
+ truncatedLines = this.smartTruncate(lines, maxLines);
240
+ break;
241
+ default:
242
+ truncatedLines = lines.slice(0, maxLines);
243
+ }
244
+ return {
245
+ content: truncatedLines.join('\n'),
246
+ truncated: true,
247
+ };
248
+ }
249
+ /**
250
+ * Smart truncation preserving important lines.
251
+ */
252
+ smartTruncate(lines, maxLines) {
253
+ const important = [];
254
+ const importantPatterns = [
255
+ /^\s*(export\s+)?(class|interface|function|const|let|var)\s+/,
256
+ /^\s*\/\*\*/, // JSDoc comments
257
+ /^\s*import\s+/,
258
+ /^\s*@\w+/, // Decorators
259
+ ];
260
+ // Find important lines
261
+ for (let i = 0; i < lines.length; i++) {
262
+ for (const pattern of importantPatterns) {
263
+ if (pattern.test(lines[i])) {
264
+ important.push(i);
265
+ break;
266
+ }
267
+ }
268
+ }
269
+ // If we have enough important lines, use those
270
+ if (important.length >= maxLines) {
271
+ return important.slice(0, maxLines).map(i => lines[i]);
272
+ }
273
+ // Otherwise, include important lines plus context
274
+ const result = [];
275
+ const included = new Set();
276
+ for (const idx of important) {
277
+ // Include important line and 2 lines of context
278
+ for (let i = Math.max(0, idx - 2); i <= Math.min(lines.length - 1, idx + 2); i++) {
279
+ if (!included.has(i) && result.length < maxLines) {
280
+ included.add(i);
281
+ result.push(lines[i]);
282
+ }
283
+ }
284
+ if (result.length >= maxLines)
285
+ break;
286
+ }
287
+ return result;
288
+ }
289
+ /**
290
+ * Detect programming language from file path.
291
+ */
292
+ detectLanguage(filePath) {
293
+ const ext = filePath.split('.').pop()?.toLowerCase();
294
+ const langMap = {
295
+ ts: 'typescript',
296
+ tsx: 'typescript',
297
+ js: 'javascript',
298
+ jsx: 'javascript',
299
+ py: 'python',
300
+ go: 'go',
301
+ rs: 'rust',
302
+ java: 'java',
303
+ c: 'c',
304
+ cpp: 'cpp',
305
+ h: 'c',
306
+ };
307
+ return langMap[ext || ''] || '';
308
+ }
309
+ /**
310
+ * Capitalize relationship name for display.
311
+ */
312
+ capitalizeRelationship(rel) {
313
+ return rel
314
+ .split('_')
315
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
316
+ .join(' ');
317
+ }
318
+ /**
319
+ * Estimate token count (rough heuristic: ~4 chars per token).
320
+ */
321
+ estimateTokens(text) {
322
+ return Math.ceil(text.length / 4);
323
+ }
324
+ /**
325
+ * Update formatting options.
326
+ */
327
+ updateOptions(options) {
328
+ this.options = { ...this.options, ...options };
329
+ }
330
+ /**
331
+ * Get current options.
332
+ */
333
+ getOptions() {
334
+ return { ...this.options };
335
+ }
336
+ }
337
+ exports.ContextFormatter = ContextFormatter;
338
+ //# sourceMappingURL=ContextFormatter.js.map