codevault 1.8.3 → 1.8.5

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 (479) hide show
  1. package/README.md +33 -5
  2. package/dist/chunking/file-grouper.d.ts +1 -1
  3. package/dist/chunking/file-grouper.d.ts.map +1 -1
  4. package/dist/chunking/file-grouper.js +3 -3
  5. package/dist/chunking/file-grouper.js.map +1 -1
  6. package/dist/chunking/semantic-chunker.d.ts +1 -1
  7. package/dist/chunking/semantic-chunker.d.ts.map +1 -1
  8. package/dist/chunking/token-counter.d.ts +1 -1
  9. package/dist/chunking/token-counter.d.ts.map +1 -1
  10. package/dist/chunking/token-counter.js +16 -10
  11. package/dist/chunking/token-counter.js.map +1 -1
  12. package/dist/cli/commands/ask-cmd.js +15 -15
  13. package/dist/cli/commands/ask-cmd.js.map +1 -1
  14. package/dist/cli/commands/chat-cmd.d.ts.map +1 -1
  15. package/dist/cli/commands/chat-cmd.js +40 -40
  16. package/dist/cli/commands/chat-cmd.js.map +1 -1
  17. package/dist/cli/commands/config-cmd.d.ts.map +1 -1
  18. package/dist/cli/commands/config-cmd.js +61 -52
  19. package/dist/cli/commands/config-cmd.js.map +1 -1
  20. package/dist/cli/commands/context.d.ts.map +1 -1
  21. package/dist/cli/commands/context.js +20 -11
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/index-cmd.d.ts.map +1 -1
  24. package/dist/cli/commands/index-cmd.js +109 -85
  25. package/dist/cli/commands/index-cmd.js.map +1 -1
  26. package/dist/cli/commands/info-cmd.d.ts.map +1 -1
  27. package/dist/cli/commands/info-cmd.js +12 -11
  28. package/dist/cli/commands/info-cmd.js.map +1 -1
  29. package/dist/cli/commands/interactive-config.d.ts.map +1 -1
  30. package/dist/cli/commands/interactive-config.js +60 -20
  31. package/dist/cli/commands/interactive-config.js.map +1 -1
  32. package/dist/cli/commands/search-cmd.d.ts.map +1 -1
  33. package/dist/cli/commands/search-cmd.js +22 -11
  34. package/dist/cli/commands/search-cmd.js.map +1 -1
  35. package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
  36. package/dist/cli/commands/search-with-code-cmd.js +25 -16
  37. package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
  38. package/dist/cli/commands/update-cmd.d.ts.map +1 -1
  39. package/dist/cli/commands/update-cmd.js +16 -7
  40. package/dist/cli/commands/update-cmd.js.map +1 -1
  41. package/dist/cli/commands/watch-cmd.d.ts.map +1 -1
  42. package/dist/cli/commands/watch-cmd.js +21 -11
  43. package/dist/cli/commands/watch-cmd.js.map +1 -1
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/utils.d.ts +56 -0
  46. package/dist/cli/utils.d.ts.map +1 -0
  47. package/dist/cli/utils.js +98 -0
  48. package/dist/cli/utils.js.map +1 -0
  49. package/dist/cli.js +0 -0
  50. package/dist/codemap/io.js.map +1 -1
  51. package/dist/config/constants.d.ts +4 -0
  52. package/dist/config/constants.d.ts.map +1 -1
  53. package/dist/config/constants.js +2 -0
  54. package/dist/config/constants.js.map +1 -1
  55. package/dist/config/loader.js.map +1 -1
  56. package/dist/context/packs.d.ts +2 -2
  57. package/dist/context/packs.d.ts.map +1 -1
  58. package/dist/context/packs.js +7 -4
  59. package/dist/context/packs.js.map +1 -1
  60. package/dist/core/IndexerEngine.d.ts +2 -0
  61. package/dist/core/IndexerEngine.d.ts.map +1 -1
  62. package/dist/core/IndexerEngine.js +34 -26
  63. package/dist/core/IndexerEngine.js.map +1 -1
  64. package/dist/core/SearchService.d.ts +2 -1
  65. package/dist/core/SearchService.d.ts.map +1 -1
  66. package/dist/core/SearchService.js +25 -18
  67. package/dist/core/SearchService.js.map +1 -1
  68. package/dist/core/batch-indexer.d.ts +4 -3
  69. package/dist/core/batch-indexer.d.ts.map +1 -1
  70. package/dist/core/batch-indexer.js +32 -35
  71. package/dist/core/batch-indexer.js.map +1 -1
  72. package/dist/core/indexing/FileProcessor.d.ts +1 -0
  73. package/dist/core/indexing/FileProcessor.d.ts.map +1 -1
  74. package/dist/core/indexing/FileProcessor.js +32 -9
  75. package/dist/core/indexing/FileProcessor.js.map +1 -1
  76. package/dist/core/indexing/IndexContext.d.ts +6 -4
  77. package/dist/core/indexing/IndexContext.d.ts.map +1 -1
  78. package/dist/core/indexing/IndexContext.js +3 -3
  79. package/dist/core/indexing/IndexContext.js.map +1 -1
  80. package/dist/core/indexing/IndexFinalizationStage.d.ts +6 -1
  81. package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
  82. package/dist/core/indexing/IndexFinalizationStage.js +22 -3
  83. package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
  84. package/dist/core/indexing/IndexState.d.ts +3 -8
  85. package/dist/core/indexing/IndexState.d.ts.map +1 -1
  86. package/dist/core/indexing/IndexState.js.map +1 -1
  87. package/dist/core/indexing/PersistManager.d.ts +1 -1
  88. package/dist/core/indexing/PersistManager.d.ts.map +1 -1
  89. package/dist/core/indexing/PersistManager.js +17 -17
  90. package/dist/core/indexing/PersistManager.js.map +1 -1
  91. package/dist/core/indexing/chunk-pipeline.d.ts +33 -7
  92. package/dist/core/indexing/chunk-pipeline.d.ts.map +1 -1
  93. package/dist/core/indexing/chunk-pipeline.js +20 -8
  94. package/dist/core/indexing/chunk-pipeline.js.map +1 -1
  95. package/dist/core/metadata.d.ts +1 -1
  96. package/dist/core/metadata.d.ts.map +1 -1
  97. package/dist/core/metadata.js +1 -1
  98. package/dist/core/metadata.js.map +1 -1
  99. package/dist/core/search/CandidateRetriever.d.ts +1 -1
  100. package/dist/core/search/CandidateRetriever.d.ts.map +1 -1
  101. package/dist/core/search/CandidateRetriever.js +7 -5
  102. package/dist/core/search/CandidateRetriever.js.map +1 -1
  103. package/dist/core/search/HybridFusion.d.ts +1 -2
  104. package/dist/core/search/HybridFusion.d.ts.map +1 -1
  105. package/dist/core/search/HybridFusion.js +5 -17
  106. package/dist/core/search/HybridFusion.js.map +1 -1
  107. package/dist/core/search/ResultMapper.d.ts +0 -1
  108. package/dist/core/search/ResultMapper.d.ts.map +1 -1
  109. package/dist/core/search/ResultMapper.js +3 -14
  110. package/dist/core/search/ResultMapper.js.map +1 -1
  111. package/dist/core/search/SearchContextManager.d.ts +4 -1
  112. package/dist/core/search/SearchContextManager.d.ts.map +1 -1
  113. package/dist/core/search/SearchContextManager.js +19 -6
  114. package/dist/core/search/SearchContextManager.js.map +1 -1
  115. package/dist/core/search.d.ts.map +1 -1
  116. package/dist/core/search.js +9 -4
  117. package/dist/core/search.js.map +1 -1
  118. package/dist/core/types.d.ts +2 -2
  119. package/dist/core/types.d.ts.map +1 -1
  120. package/dist/database/db.d.ts +14 -14
  121. package/dist/database/db.d.ts.map +1 -1
  122. package/dist/database/db.js +14 -14
  123. package/dist/database/db.js.map +1 -1
  124. package/dist/indexer/merkle.js +1 -1
  125. package/dist/indexer/merkle.js.map +1 -1
  126. package/dist/languages/rules.d.ts +2 -1
  127. package/dist/languages/rules.d.ts.map +1 -1
  128. package/dist/languages/rules.js +14 -5
  129. package/dist/languages/rules.js.map +1 -1
  130. package/dist/languages/tree-sitter-loader.d.ts +24 -24
  131. package/dist/languages/tree-sitter-loader.d.ts.map +1 -1
  132. package/dist/languages/tree-sitter-loader.js +14 -10
  133. package/dist/languages/tree-sitter-loader.js.map +1 -1
  134. package/dist/mcp/handlers/context.d.ts +5 -11
  135. package/dist/mcp/handlers/context.d.ts.map +1 -1
  136. package/dist/mcp/handlers/context.js.map +1 -1
  137. package/dist/mcp/handlers/project.d.ts +9 -27
  138. package/dist/mcp/handlers/project.d.ts.map +1 -1
  139. package/dist/mcp/handlers/search.d.ts +24 -18
  140. package/dist/mcp/handlers/search.d.ts.map +1 -1
  141. package/dist/mcp/handlers/search.js +8 -2
  142. package/dist/mcp/handlers/search.js.map +1 -1
  143. package/dist/mcp/handlers/synthesis.d.ts +15 -11
  144. package/dist/mcp/handlers/synthesis.d.ts.map +1 -1
  145. package/dist/mcp/handlers/synthesis.js +4 -1
  146. package/dist/mcp/handlers/synthesis.js.map +1 -1
  147. package/dist/mcp/schemas.d.ts +2 -2
  148. package/dist/mcp/tools/ask-codebase.d.ts +10 -28
  149. package/dist/mcp/tools/ask-codebase.d.ts.map +1 -1
  150. package/dist/mcp/tools/ask-codebase.js +1 -1
  151. package/dist/mcp/tools/ask-codebase.js.map +1 -1
  152. package/dist/mcp/tools/use-context-pack.d.ts +14 -23
  153. package/dist/mcp/tools/use-context-pack.d.ts.map +1 -1
  154. package/dist/mcp/tools/use-context-pack.js +4 -3
  155. package/dist/mcp/tools/use-context-pack.js.map +1 -1
  156. package/dist/mcp-server.d.ts +1 -0
  157. package/dist/mcp-server.d.ts.map +1 -1
  158. package/dist/mcp-server.js +39 -24
  159. package/dist/mcp-server.js.map +1 -1
  160. package/dist/providers/base.d.ts +3 -2
  161. package/dist/providers/base.d.ts.map +1 -1
  162. package/dist/providers/base.js +3 -10
  163. package/dist/providers/base.js.map +1 -1
  164. package/dist/providers/chat-llm.d.ts +3 -2
  165. package/dist/providers/chat-llm.d.ts.map +1 -1
  166. package/dist/providers/chat-llm.js +13 -9
  167. package/dist/providers/chat-llm.js.map +1 -1
  168. package/dist/providers/mock.d.ts.map +1 -1
  169. package/dist/providers/mock.js +6 -5
  170. package/dist/providers/mock.js.map +1 -1
  171. package/dist/providers/openai.d.ts +2 -1
  172. package/dist/providers/openai.d.ts.map +1 -1
  173. package/dist/providers/openai.js +15 -19
  174. package/dist/providers/openai.js.map +1 -1
  175. package/dist/providers/token-counter.d.ts.map +1 -1
  176. package/dist/providers/token-counter.js +11 -3
  177. package/dist/providers/token-counter.js.map +1 -1
  178. package/dist/ranking/api-reranker.d.ts +1 -1
  179. package/dist/ranking/api-reranker.d.ts.map +1 -1
  180. package/dist/ranking/api-reranker.js +50 -13
  181. package/dist/ranking/api-reranker.js.map +1 -1
  182. package/dist/ranking/symbol-boost.d.ts.map +1 -1
  183. package/dist/ranking/symbol-boost.js +4 -11
  184. package/dist/ranking/symbol-boost.js.map +1 -1
  185. package/dist/search/bm25.d.ts +10 -0
  186. package/dist/search/bm25.d.ts.map +1 -1
  187. package/dist/search/bm25.js +16 -0
  188. package/dist/search/bm25.js.map +1 -1
  189. package/dist/search/hybrid.js.map +1 -1
  190. package/dist/search/scope.d.ts.map +1 -1
  191. package/dist/search/scope.js +3 -2
  192. package/dist/search/scope.js.map +1 -1
  193. package/dist/storage/encrypted-chunks.d.ts +3 -0
  194. package/dist/storage/encrypted-chunks.d.ts.map +1 -1
  195. package/dist/storage/encrypted-chunks.js +126 -47
  196. package/dist/storage/encrypted-chunks.js.map +1 -1
  197. package/dist/symbols/extract.d.ts.map +1 -1
  198. package/dist/symbols/extract.js +3 -2
  199. package/dist/symbols/extract.js.map +1 -1
  200. package/dist/symbols/graph.d.ts.map +1 -1
  201. package/dist/symbols/graph.js +14 -8
  202. package/dist/symbols/graph.js.map +1 -1
  203. package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
  204. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
  205. package/dist/synthesis/conversational-synthesizer.js +6 -1
  206. package/dist/synthesis/conversational-synthesizer.js.map +1 -1
  207. package/dist/synthesis/markdown-formatter.d.ts.map +1 -1
  208. package/dist/synthesis/markdown-formatter.js +1 -1
  209. package/dist/synthesis/markdown-formatter.js.map +1 -1
  210. package/dist/synthesis/prompt-builder.d.ts.map +1 -1
  211. package/dist/synthesis/prompt-builder.js +42 -15
  212. package/dist/synthesis/prompt-builder.js.map +1 -1
  213. package/dist/synthesis/synthesizer.d.ts.map +1 -1
  214. package/dist/synthesis/synthesizer.js +23 -10
  215. package/dist/synthesis/synthesizer.js.map +1 -1
  216. package/dist/tests/api-reranker.test.d.ts +2 -0
  217. package/dist/tests/api-reranker.test.d.ts.map +1 -0
  218. package/dist/tests/api-reranker.test.js +575 -0
  219. package/dist/tests/api-reranker.test.js.map +1 -0
  220. package/dist/tests/bm25.test.d.ts +2 -0
  221. package/dist/tests/bm25.test.d.ts.map +1 -0
  222. package/dist/tests/bm25.test.js +340 -0
  223. package/dist/tests/bm25.test.js.map +1 -0
  224. package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
  225. package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
  226. package/dist/tests/chunking/file-grouper.test.js +495 -0
  227. package/dist/tests/chunking/file-grouper.test.js.map +1 -0
  228. package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
  229. package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
  230. package/dist/tests/chunking/semantic-chunker.test.js +509 -0
  231. package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
  232. package/dist/tests/chunking/token-counter.test.d.ts +2 -0
  233. package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
  234. package/dist/tests/chunking/token-counter.test.js +441 -0
  235. package/dist/tests/chunking/token-counter.test.js.map +1 -0
  236. package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
  237. package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
  238. package/dist/tests/cli/ask-cmd.test.js +152 -0
  239. package/dist/tests/cli/ask-cmd.test.js.map +1 -0
  240. package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
  241. package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
  242. package/dist/tests/cli/chat-cmd.test.js +118 -0
  243. package/dist/tests/cli/chat-cmd.test.js.map +1 -0
  244. package/dist/tests/cli/config-cmd.test.d.ts +2 -0
  245. package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
  246. package/dist/tests/cli/config-cmd.test.js +226 -0
  247. package/dist/tests/cli/config-cmd.test.js.map +1 -0
  248. package/dist/tests/cli/context.test.d.ts +2 -0
  249. package/dist/tests/cli/context.test.d.ts.map +1 -0
  250. package/dist/tests/cli/context.test.js +158 -0
  251. package/dist/tests/cli/context.test.js.map +1 -0
  252. package/dist/tests/cli/index-cmd.test.d.ts +2 -0
  253. package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
  254. package/dist/tests/cli/index-cmd.test.js +89 -0
  255. package/dist/tests/cli/index-cmd.test.js.map +1 -0
  256. package/dist/tests/cli/index.test.d.ts +2 -0
  257. package/dist/tests/cli/index.test.d.ts.map +1 -0
  258. package/dist/tests/cli/index.test.js +167 -0
  259. package/dist/tests/cli/index.test.js.map +1 -0
  260. package/dist/tests/cli/info-cmd.test.d.ts +2 -0
  261. package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
  262. package/dist/tests/cli/info-cmd.test.js +47 -0
  263. package/dist/tests/cli/info-cmd.test.js.map +1 -0
  264. package/dist/tests/cli/interactive-config.test.d.ts +2 -0
  265. package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
  266. package/dist/tests/cli/interactive-config.test.js +30 -0
  267. package/dist/tests/cli/interactive-config.test.js.map +1 -0
  268. package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
  269. package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
  270. package/dist/tests/cli/mcp-cmd.test.js +47 -0
  271. package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
  272. package/dist/tests/cli/search-cmd.test.d.ts +2 -0
  273. package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
  274. package/dist/tests/cli/search-cmd.test.js +120 -0
  275. package/dist/tests/cli/search-cmd.test.js.map +1 -0
  276. package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
  277. package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
  278. package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
  279. package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
  280. package/dist/tests/cli/update-cmd.test.d.ts +2 -0
  281. package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
  282. package/dist/tests/cli/update-cmd.test.js +75 -0
  283. package/dist/tests/cli/update-cmd.test.js.map +1 -0
  284. package/dist/tests/cli/utils.test.d.ts +2 -0
  285. package/dist/tests/cli/utils.test.d.ts.map +1 -0
  286. package/dist/tests/cli/utils.test.js +119 -0
  287. package/dist/tests/cli/utils.test.js.map +1 -0
  288. package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
  289. package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
  290. package/dist/tests/cli/watch-cmd.test.js +84 -0
  291. package/dist/tests/cli/watch-cmd.test.js.map +1 -0
  292. package/dist/tests/cli-ui.test.d.ts +2 -0
  293. package/dist/tests/cli-ui.test.d.ts.map +1 -0
  294. package/dist/tests/cli-ui.test.js +608 -0
  295. package/dist/tests/cli-ui.test.js.map +1 -0
  296. package/dist/tests/codemap-io.test.d.ts +2 -0
  297. package/dist/tests/codemap-io.test.d.ts.map +1 -0
  298. package/dist/tests/codemap-io.test.js +992 -0
  299. package/dist/tests/codemap-io.test.js.map +1 -0
  300. package/dist/tests/config/apply-env.test.d.ts +2 -0
  301. package/dist/tests/config/apply-env.test.d.ts.map +1 -0
  302. package/dist/tests/config/apply-env.test.js +717 -0
  303. package/dist/tests/config/apply-env.test.js.map +1 -0
  304. package/dist/tests/config/constants.test.d.ts +2 -0
  305. package/dist/tests/config/constants.test.d.ts.map +1 -0
  306. package/dist/tests/config/constants.test.js +406 -0
  307. package/dist/tests/config/constants.test.js.map +1 -0
  308. package/dist/tests/config/loader.test.d.ts +2 -0
  309. package/dist/tests/config/loader.test.d.ts.map +1 -0
  310. package/dist/tests/config/loader.test.js +716 -0
  311. package/dist/tests/config/loader.test.js.map +1 -0
  312. package/dist/tests/config/resolver.test.d.ts +2 -0
  313. package/dist/tests/config/resolver.test.d.ts.map +1 -0
  314. package/dist/tests/config/resolver.test.js +402 -0
  315. package/dist/tests/config/resolver.test.js.map +1 -0
  316. package/dist/tests/config/types.test.d.ts +2 -0
  317. package/dist/tests/config/types.test.d.ts.map +1 -0
  318. package/dist/tests/config/types.test.js +460 -0
  319. package/dist/tests/config/types.test.js.map +1 -0
  320. package/dist/tests/context-packs.test.d.ts +2 -0
  321. package/dist/tests/context-packs.test.d.ts.map +1 -0
  322. package/dist/tests/context-packs.test.js +826 -0
  323. package/dist/tests/context-packs.test.js.map +1 -0
  324. package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
  325. package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
  326. package/dist/tests/conversational-synthesizer.test.js +595 -0
  327. package/dist/tests/conversational-synthesizer.test.js.map +1 -0
  328. package/dist/tests/database.test.d.ts +2 -0
  329. package/dist/tests/database.test.d.ts.map +1 -0
  330. package/dist/tests/database.test.js +965 -0
  331. package/dist/tests/database.test.js.map +1 -0
  332. package/dist/tests/encrypted-chunks.test.d.ts +2 -0
  333. package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
  334. package/dist/tests/encrypted-chunks.test.js +1470 -0
  335. package/dist/tests/encrypted-chunks.test.js.map +1 -0
  336. package/dist/tests/hybrid.test.d.ts +2 -0
  337. package/dist/tests/hybrid.test.d.ts.map +1 -0
  338. package/dist/tests/hybrid.test.js +456 -0
  339. package/dist/tests/hybrid.test.js.map +1 -0
  340. package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
  341. package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
  342. package/dist/tests/indexer/ChangeQueue.test.js +441 -0
  343. package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
  344. package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
  345. package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
  346. package/dist/tests/indexer/ProviderManager.test.js +290 -0
  347. package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
  348. package/dist/tests/indexer/WatchService.test.d.ts +14 -0
  349. package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
  350. package/dist/tests/indexer/WatchService.test.js +667 -0
  351. package/dist/tests/indexer/WatchService.test.js.map +1 -0
  352. package/dist/tests/indexer/merkle.test.d.ts +11 -0
  353. package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
  354. package/dist/tests/indexer/merkle.test.js +497 -0
  355. package/dist/tests/indexer/merkle.test.js.map +1 -0
  356. package/dist/tests/indexer/update.test.d.ts +10 -0
  357. package/dist/tests/indexer/update.test.d.ts.map +1 -0
  358. package/dist/tests/indexer/update.test.js +317 -0
  359. package/dist/tests/indexer/update.test.js.map +1 -0
  360. package/dist/tests/indexer/watch.test.d.ts +8 -0
  361. package/dist/tests/indexer/watch.test.d.ts.map +1 -0
  362. package/dist/tests/indexer/watch.test.js +95 -0
  363. package/dist/tests/indexer/watch.test.js.map +1 -0
  364. package/dist/tests/integration/index-search.integration.test.js +6 -4
  365. package/dist/tests/integration/index-search.integration.test.js.map +1 -1
  366. package/dist/tests/languages.test.d.ts +2 -0
  367. package/dist/tests/languages.test.d.ts.map +1 -0
  368. package/dist/tests/languages.test.js +575 -0
  369. package/dist/tests/languages.test.js.map +1 -0
  370. package/dist/tests/logger-redaction.test.d.ts +2 -0
  371. package/dist/tests/logger-redaction.test.d.ts.map +1 -0
  372. package/dist/tests/logger-redaction.test.js +48 -0
  373. package/dist/tests/logger-redaction.test.js.map +1 -0
  374. package/dist/tests/logger.test.d.ts +2 -0
  375. package/dist/tests/logger.test.d.ts.map +1 -0
  376. package/dist/tests/logger.test.js +468 -0
  377. package/dist/tests/logger.test.js.map +1 -0
  378. package/dist/tests/markdown-formatter.test.d.ts +2 -0
  379. package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
  380. package/dist/tests/markdown-formatter.test.js +453 -0
  381. package/dist/tests/markdown-formatter.test.js.map +1 -0
  382. package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
  383. package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
  384. package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
  385. package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
  386. package/dist/tests/mutex.test.d.ts +2 -0
  387. package/dist/tests/mutex.test.d.ts.map +1 -0
  388. package/dist/tests/mutex.test.js +489 -0
  389. package/dist/tests/mutex.test.js.map +1 -0
  390. package/dist/tests/path-helpers.test.d.ts +2 -0
  391. package/dist/tests/path-helpers.test.d.ts.map +1 -0
  392. package/dist/tests/path-helpers.test.js +332 -0
  393. package/dist/tests/path-helpers.test.js.map +1 -0
  394. package/dist/tests/prompt-builder.test.d.ts +2 -0
  395. package/dist/tests/prompt-builder.test.d.ts.map +1 -0
  396. package/dist/tests/prompt-builder.test.js +417 -0
  397. package/dist/tests/prompt-builder.test.js.map +1 -0
  398. package/dist/tests/providers/base.test.d.ts +2 -0
  399. package/dist/tests/providers/base.test.d.ts.map +1 -0
  400. package/dist/tests/providers/base.test.js +299 -0
  401. package/dist/tests/providers/base.test.js.map +1 -0
  402. package/dist/tests/providers/chat-llm.test.d.ts +2 -0
  403. package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
  404. package/dist/tests/providers/chat-llm.test.js +435 -0
  405. package/dist/tests/providers/chat-llm.test.js.map +1 -0
  406. package/dist/tests/providers/index.test.d.ts +2 -0
  407. package/dist/tests/providers/index.test.d.ts.map +1 -0
  408. package/dist/tests/providers/index.test.js +204 -0
  409. package/dist/tests/providers/index.test.js.map +1 -0
  410. package/dist/tests/providers/mock.test.d.ts +2 -0
  411. package/dist/tests/providers/mock.test.d.ts.map +1 -0
  412. package/dist/tests/providers/mock.test.js +225 -0
  413. package/dist/tests/providers/mock.test.js.map +1 -0
  414. package/dist/tests/providers/openai.test.d.ts +2 -0
  415. package/dist/tests/providers/openai.test.d.ts.map +1 -0
  416. package/dist/tests/providers/openai.test.js +408 -0
  417. package/dist/tests/providers/openai.test.js.map +1 -0
  418. package/dist/tests/providers/token-counter.test.d.ts +2 -0
  419. package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
  420. package/dist/tests/providers/token-counter.test.js +247 -0
  421. package/dist/tests/providers/token-counter.test.js.map +1 -0
  422. package/dist/tests/rate-limiter.test.js +392 -1
  423. package/dist/tests/rate-limiter.test.js.map +1 -1
  424. package/dist/tests/scope.test.d.ts +2 -0
  425. package/dist/tests/scope.test.d.ts.map +1 -0
  426. package/dist/tests/scope.test.js +529 -0
  427. package/dist/tests/scope.test.js.map +1 -0
  428. package/dist/tests/search-normalization.test.js.map +1 -1
  429. package/dist/tests/semantic-chunker.test.js.map +1 -1
  430. package/dist/tests/simple-lru.test.js +377 -0
  431. package/dist/tests/simple-lru.test.js.map +1 -1
  432. package/dist/tests/symbol-boost.test.js +730 -10
  433. package/dist/tests/symbol-boost.test.js.map +1 -1
  434. package/dist/tests/symbols-extract.test.d.ts +2 -0
  435. package/dist/tests/symbols-extract.test.d.ts.map +1 -0
  436. package/dist/tests/symbols-extract.test.js +536 -0
  437. package/dist/tests/symbols-extract.test.js.map +1 -0
  438. package/dist/tests/symbols-graph.test.d.ts +2 -0
  439. package/dist/tests/symbols-graph.test.d.ts.map +1 -0
  440. package/dist/tests/symbols-graph.test.js +656 -0
  441. package/dist/tests/symbols-graph.test.js.map +1 -0
  442. package/dist/tests/synthesizer.test.d.ts +2 -0
  443. package/dist/tests/synthesizer.test.d.ts.map +1 -0
  444. package/dist/tests/synthesizer.test.js +381 -0
  445. package/dist/tests/synthesizer.test.js.map +1 -0
  446. package/dist/types/codemap.d.ts +2 -2
  447. package/dist/types/codemap.d.ts.map +1 -1
  448. package/dist/types/codemap.js +17 -9
  449. package/dist/types/codemap.js.map +1 -1
  450. package/dist/types/context-pack.d.ts +5 -5
  451. package/dist/types/context-pack.d.ts.map +1 -1
  452. package/dist/types/context-pack.js +6 -3
  453. package/dist/types/context-pack.js.map +1 -1
  454. package/dist/utils/cli-ui.d.ts +1 -1
  455. package/dist/utils/cli-ui.d.ts.map +1 -1
  456. package/dist/utils/cli-ui.js +26 -26
  457. package/dist/utils/cli-ui.js.map +1 -1
  458. package/dist/utils/indexer-with-progress.d.ts.map +1 -1
  459. package/dist/utils/indexer-with-progress.js +0 -6
  460. package/dist/utils/indexer-with-progress.js.map +1 -1
  461. package/dist/utils/logger.d.ts +10 -1
  462. package/dist/utils/logger.d.ts.map +1 -1
  463. package/dist/utils/logger.js +158 -6
  464. package/dist/utils/logger.js.map +1 -1
  465. package/dist/utils/mutex.d.ts +7 -2
  466. package/dist/utils/mutex.d.ts.map +1 -1
  467. package/dist/utils/mutex.js +35 -7
  468. package/dist/utils/mutex.js.map +1 -1
  469. package/dist/utils/path-helpers.d.ts.map +1 -1
  470. package/dist/utils/path-helpers.js +5 -2
  471. package/dist/utils/path-helpers.js.map +1 -1
  472. package/dist/utils/rate-limiter.d.ts.map +1 -1
  473. package/dist/utils/rate-limiter.js +23 -4
  474. package/dist/utils/rate-limiter.js.map +1 -1
  475. package/dist/utils/simple-lru.d.ts +6 -0
  476. package/dist/utils/simple-lru.d.ts.map +1 -1
  477. package/dist/utils/simple-lru.js +26 -0
  478. package/dist/utils/simple-lru.js.map +1 -1
  479. package/package.json +1 -1
@@ -0,0 +1,435 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { ChatLLMProvider, OpenAIChatProvider, createChatLLMProvider } from '../../providers/chat-llm.js';
4
+ function createMockChatOpenAI(responseContent = 'Hello, I am an AI assistant.') {
5
+ const mock = {
6
+ createCalls: [],
7
+ chat: {
8
+ completions: {
9
+ create: async (params) => {
10
+ mock.createCalls.push(params);
11
+ const typedParams = params;
12
+ if (typedParams.stream) {
13
+ // Return async iterable for streaming
14
+ return (async function* () {
15
+ const words = responseContent.split(' ');
16
+ for (const word of words) {
17
+ yield {
18
+ choices: [{ delta: { content: word + ' ' }, index: 0 }],
19
+ model: 'gpt-4',
20
+ usage: { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15 }
21
+ };
22
+ }
23
+ })();
24
+ }
25
+ return {
26
+ choices: [{ message: { content: responseContent }, index: 0 }],
27
+ model: 'gpt-4',
28
+ usage: { prompt_tokens: 10, completion_tokens: 20, total_tokens: 30 }
29
+ };
30
+ }
31
+ }
32
+ }
33
+ };
34
+ return mock;
35
+ }
36
+ function createErrorMockChatOpenAI(error) {
37
+ return {
38
+ createCalls: [],
39
+ chat: {
40
+ completions: {
41
+ create: async () => {
42
+ throw error;
43
+ }
44
+ }
45
+ }
46
+ };
47
+ }
48
+ function createEmptyResponseMockChatOpenAI() {
49
+ return {
50
+ createCalls: [],
51
+ chat: {
52
+ completions: {
53
+ create: async () => ({
54
+ choices: [{ message: { content: '' }, index: 0 }],
55
+ model: 'gpt-4',
56
+ usage: { prompt_tokens: 10, completion_tokens: 0, total_tokens: 10 }
57
+ })
58
+ }
59
+ }
60
+ };
61
+ }
62
+ // Helper to inject mock OpenAI client
63
+ function injectMockChatClient(provider, mockClient) {
64
+ provider.openai = mockClient;
65
+ }
66
+ // ============= ChatLLMProvider abstract class tests =============
67
+ test('ChatLLMProvider is an abstract class with required methods', () => {
68
+ // ChatLLMProvider defines the interface
69
+ assert.ok(ChatLLMProvider, 'ChatLLMProvider should be exported');
70
+ assert.equal(typeof ChatLLMProvider, 'function');
71
+ });
72
+ // ============= OpenAIChatProvider constructor tests =============
73
+ test('OpenAIChatProvider uses default model when no options provided', () => {
74
+ const originalModel = process.env.CODEVAULT_CHAT_MODEL;
75
+ delete process.env.CODEVAULT_CHAT_MODEL;
76
+ delete process.env.CODEVAULT_OPENAI_CHAT_MODEL;
77
+ try {
78
+ const provider = new OpenAIChatProvider();
79
+ assert.equal(provider.getModelName(), 'gpt-4o');
80
+ }
81
+ finally {
82
+ if (originalModel)
83
+ process.env.CODEVAULT_CHAT_MODEL = originalModel;
84
+ }
85
+ });
86
+ test('OpenAIChatProvider uses model from options', () => {
87
+ const provider = new OpenAIChatProvider({ model: 'gpt-3.5-turbo' });
88
+ assert.equal(provider.getModelName(), 'gpt-3.5-turbo');
89
+ });
90
+ test('OpenAIChatProvider creates rate limiter', () => {
91
+ const provider = new OpenAIChatProvider();
92
+ assert.ok(provider.rateLimiter, 'Rate limiter should exist');
93
+ });
94
+ // ============= getName tests =============
95
+ test('OpenAIChatProvider.getName returns "OpenAI-Chat"', () => {
96
+ const provider = new OpenAIChatProvider();
97
+ assert.equal(provider.getName(), 'OpenAI-Chat');
98
+ });
99
+ // ============= getModelName tests =============
100
+ test('OpenAIChatProvider.getModelName returns configured model', () => {
101
+ const provider = new OpenAIChatProvider({ model: 'custom-chat-model' });
102
+ assert.equal(provider.getModelName(), 'custom-chat-model');
103
+ });
104
+ // ============= init tests =============
105
+ test('OpenAIChatProvider.init initializes OpenAI client', async () => {
106
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
107
+ await assert.doesNotReject(async () => {
108
+ await provider.init();
109
+ });
110
+ });
111
+ test('OpenAIChatProvider.init is idempotent', async () => {
112
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
113
+ await provider.init();
114
+ await provider.init();
115
+ await provider.init();
116
+ assert.ok(true);
117
+ });
118
+ // ============= generateCompletion tests =============
119
+ test('OpenAIChatProvider.generateCompletion returns response content', async () => {
120
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
121
+ await provider.init();
122
+ const mockClient = createMockChatOpenAI('This is the AI response.');
123
+ injectMockChatClient(provider, mockClient);
124
+ const messages = [
125
+ { role: 'user', content: 'Hello' }
126
+ ];
127
+ const response = await provider.generateCompletion(messages);
128
+ assert.equal(response, 'This is the AI response.');
129
+ assert.equal(mockClient.createCalls.length, 1);
130
+ });
131
+ test('OpenAIChatProvider.generateCompletion handles system messages', async () => {
132
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
133
+ await provider.init();
134
+ const mockClient = createMockChatOpenAI('Response');
135
+ injectMockChatClient(provider, mockClient);
136
+ const messages = [
137
+ { role: 'system', content: 'You are a helpful assistant.' },
138
+ { role: 'user', content: 'Hello' }
139
+ ];
140
+ await provider.generateCompletion(messages);
141
+ const call = mockClient.createCalls[0];
142
+ assert.equal(call.messages.length, 2);
143
+ assert.equal(call.messages[0].role, 'system');
144
+ assert.equal(call.messages[1].role, 'user');
145
+ });
146
+ test('OpenAIChatProvider.generateCompletion handles assistant messages', async () => {
147
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
148
+ await provider.init();
149
+ const mockClient = createMockChatOpenAI('Response');
150
+ injectMockChatClient(provider, mockClient);
151
+ const messages = [
152
+ { role: 'user', content: 'Hello' },
153
+ { role: 'assistant', content: 'Hi there!' },
154
+ { role: 'user', content: 'How are you?' }
155
+ ];
156
+ await provider.generateCompletion(messages);
157
+ const call = mockClient.createCalls[0];
158
+ assert.equal(call.messages.length, 3);
159
+ assert.equal(call.messages[1].role, 'assistant');
160
+ });
161
+ test('OpenAIChatProvider.generateCompletion uses default temperature', async () => {
162
+ const originalTemp = process.env.CODEVAULT_CHAT_TEMPERATURE;
163
+ delete process.env.CODEVAULT_CHAT_TEMPERATURE;
164
+ try {
165
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
166
+ await provider.init();
167
+ const mockClient = createMockChatOpenAI('Response');
168
+ injectMockChatClient(provider, mockClient);
169
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
170
+ const call = mockClient.createCalls[0];
171
+ assert.equal(call.temperature, 0.7);
172
+ }
173
+ finally {
174
+ if (originalTemp)
175
+ process.env.CODEVAULT_CHAT_TEMPERATURE = originalTemp;
176
+ }
177
+ });
178
+ test('OpenAIChatProvider.generateCompletion uses temperature from options', async () => {
179
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
180
+ await provider.init();
181
+ const mockClient = createMockChatOpenAI('Response');
182
+ injectMockChatClient(provider, mockClient);
183
+ const options = { temperature: 0.3 };
184
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }], options);
185
+ const call = mockClient.createCalls[0];
186
+ assert.equal(call.temperature, 0.3);
187
+ });
188
+ test('OpenAIChatProvider.generateCompletion uses temperatureOverride from constructor', async () => {
189
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key', temperature: 0.5 });
190
+ await provider.init();
191
+ const mockClient = createMockChatOpenAI('Response');
192
+ injectMockChatClient(provider, mockClient);
193
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
194
+ const call = mockClient.createCalls[0];
195
+ assert.equal(call.temperature, 0.5);
196
+ });
197
+ test('OpenAIChatProvider.generateCompletion uses maxTokens from options', async () => {
198
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
199
+ await provider.init();
200
+ const mockClient = createMockChatOpenAI('Response');
201
+ injectMockChatClient(provider, mockClient);
202
+ const options = { maxTokens: 1000 };
203
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }], options);
204
+ const call = mockClient.createCalls[0];
205
+ assert.equal(call.max_tokens, 1000);
206
+ });
207
+ test('OpenAIChatProvider.generateCompletion uses maxTokensOverride from constructor', async () => {
208
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key', maxTokens: 2000 });
209
+ await provider.init();
210
+ const mockClient = createMockChatOpenAI('Response');
211
+ injectMockChatClient(provider, mockClient);
212
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
213
+ const call = mockClient.createCalls[0];
214
+ assert.equal(call.max_tokens, 2000);
215
+ });
216
+ test('OpenAIChatProvider.generateCompletion adds provider routing for OpenRouter', async () => {
217
+ const provider = new OpenAIChatProvider({
218
+ apiKey: 'test-key',
219
+ baseUrl: 'https://openrouter.ai/api/v1',
220
+ routing: { order: ['anthropic'] }
221
+ });
222
+ await provider.init();
223
+ const mockClient = createMockChatOpenAI('Response');
224
+ injectMockChatClient(provider, mockClient);
225
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
226
+ const call = mockClient.createCalls[0];
227
+ assert.ok(call.provider, 'Provider routing should be included');
228
+ assert.deepEqual(call.provider.order, ['anthropic']);
229
+ });
230
+ test('OpenAIChatProvider.generateCompletion returns empty string for empty response', async () => {
231
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
232
+ await provider.init();
233
+ const mockClient = createEmptyResponseMockChatOpenAI();
234
+ injectMockChatClient(provider, mockClient);
235
+ const response = await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
236
+ assert.equal(response, '');
237
+ });
238
+ test('OpenAIChatProvider.generateCompletion throws if client not initialized', async () => {
239
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
240
+ await provider.init();
241
+ // Inject mock first then null it
242
+ const mockClient = createMockChatOpenAI('Response');
243
+ injectMockChatClient(provider, mockClient);
244
+ provider.openai = null;
245
+ // Mock init to not recreate the client
246
+ const originalInit = provider.init.bind(provider);
247
+ provider.init = async () => {
248
+ await Promise.resolve();
249
+ };
250
+ await assert.rejects(async () => provider.generateCompletion([{ role: 'user', content: 'Hi' }]), /OpenAI client not initialized/);
251
+ provider.init = originalInit;
252
+ });
253
+ test('OpenAIChatProvider.generateCompletion propagates API errors', async () => {
254
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
255
+ await provider.init();
256
+ const mockClient = createErrorMockChatOpenAI(new Error('API error'));
257
+ injectMockChatClient(provider, mockClient);
258
+ await assert.rejects(async () => provider.generateCompletion([{ role: 'user', content: 'Hi' }]), /API error/);
259
+ });
260
+ // ============= generateStreamingCompletion tests =============
261
+ test('OpenAIChatProvider.generateStreamingCompletion yields content chunks', async () => {
262
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
263
+ await provider.init();
264
+ const mockClient = createMockChatOpenAI('Hello world test');
265
+ injectMockChatClient(provider, mockClient);
266
+ const messages = [{ role: 'user', content: 'Hi' }];
267
+ const chunks = [];
268
+ for await (const chunk of provider.generateStreamingCompletion(messages)) {
269
+ chunks.push(chunk);
270
+ }
271
+ assert.ok(chunks.length > 0, 'Should yield at least one chunk');
272
+ const fullResponse = chunks.join('');
273
+ assert.ok(fullResponse.includes('Hello'), 'Response should contain content');
274
+ });
275
+ test('OpenAIChatProvider.generateStreamingCompletion uses temperature from options', async () => {
276
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
277
+ await provider.init();
278
+ const mockClient = createMockChatOpenAI('Response');
279
+ injectMockChatClient(provider, mockClient);
280
+ const options = { temperature: 0.2 };
281
+ const generator = provider.generateStreamingCompletion([{ role: 'user', content: 'Hi' }], options);
282
+ // Consume the generator
283
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
284
+ for await (const _ of generator) {
285
+ // Just consume
286
+ }
287
+ const call = mockClient.createCalls[0];
288
+ assert.equal(call.temperature, 0.2);
289
+ assert.equal(call.stream, true);
290
+ });
291
+ test('OpenAIChatProvider.generateStreamingCompletion handles empty chunks', async () => {
292
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
293
+ await provider.init();
294
+ // Mock that returns chunks with empty content
295
+ const mockClient = {
296
+ createCalls: [],
297
+ chat: {
298
+ completions: {
299
+ create: async () => {
300
+ return (async function* () {
301
+ yield { choices: [{ delta: { content: undefined }, index: 0 }], model: 'gpt-4', usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } };
302
+ yield { choices: [{ delta: { content: 'Hello' }, index: 0 }], model: 'gpt-4', usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } };
303
+ yield { choices: [{ delta: { content: '' }, index: 0 }], model: 'gpt-4', usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } };
304
+ })();
305
+ }
306
+ }
307
+ }
308
+ };
309
+ injectMockChatClient(provider, mockClient);
310
+ const chunks = [];
311
+ for await (const chunk of provider.generateStreamingCompletion([{ role: 'user', content: 'Hi' }])) {
312
+ chunks.push(chunk);
313
+ }
314
+ // Should only yield non-empty content
315
+ assert.equal(chunks.length, 1);
316
+ assert.equal(chunks[0], 'Hello');
317
+ });
318
+ test('OpenAIChatProvider.generateStreamingCompletion throws if client not initialized', async () => {
319
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
320
+ await provider.init();
321
+ // Inject mock first then null it
322
+ const mockClient = createMockChatOpenAI('Response');
323
+ injectMockChatClient(provider, mockClient);
324
+ provider.openai = null;
325
+ // Mock init to not recreate the client
326
+ const originalInit = provider.init.bind(provider);
327
+ provider.init = async () => {
328
+ await Promise.resolve();
329
+ };
330
+ const generator = provider.generateStreamingCompletion([{ role: 'user', content: 'Hi' }]);
331
+ await assert.rejects(async () => {
332
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
333
+ for await (const _ of generator) {
334
+ // Consume
335
+ }
336
+ }, /OpenAI client not initialized/);
337
+ provider.init = originalInit;
338
+ });
339
+ test('OpenAIChatProvider.generateStreamingCompletion adds provider routing for OpenRouter', async () => {
340
+ const provider = new OpenAIChatProvider({
341
+ apiKey: 'test-key',
342
+ baseUrl: 'https://openrouter.ai/api/v1',
343
+ routing: { order: ['openai'] }
344
+ });
345
+ await provider.init();
346
+ const mockClient = createMockChatOpenAI('Response');
347
+ injectMockChatClient(provider, mockClient);
348
+ const generator = provider.generateStreamingCompletion([{ role: 'user', content: 'Hi' }]);
349
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
350
+ for await (const _ of generator) {
351
+ // Consume
352
+ }
353
+ const call = mockClient.createCalls[0];
354
+ assert.ok(call.provider, 'Provider routing should be included');
355
+ });
356
+ // ============= createChatLLMProvider factory tests =============
357
+ test('createChatLLMProvider returns OpenAIChatProvider for "openai"', () => {
358
+ const provider = createChatLLMProvider('openai');
359
+ assert.ok(provider instanceof OpenAIChatProvider);
360
+ assert.equal(provider.getName(), 'OpenAI-Chat');
361
+ });
362
+ test('createChatLLMProvider returns OpenAIChatProvider for "auto"', () => {
363
+ const provider = createChatLLMProvider('auto');
364
+ assert.ok(provider instanceof OpenAIChatProvider);
365
+ });
366
+ test('createChatLLMProvider returns OpenAIChatProvider for unknown provider', () => {
367
+ const provider = createChatLLMProvider('unknown-provider');
368
+ assert.ok(provider instanceof OpenAIChatProvider);
369
+ });
370
+ test('createChatLLMProvider passes options to provider', () => {
371
+ const provider = createChatLLMProvider('openai', { model: 'gpt-4-turbo' });
372
+ assert.equal(provider.getModelName?.(), 'gpt-4-turbo');
373
+ });
374
+ test('createChatLLMProvider is case-insensitive', () => {
375
+ const provider1 = createChatLLMProvider('OPENAI');
376
+ const provider2 = createChatLLMProvider('OpenAI');
377
+ const provider3 = createChatLLMProvider('openai');
378
+ assert.ok(provider1 instanceof OpenAIChatProvider);
379
+ assert.ok(provider2 instanceof OpenAIChatProvider);
380
+ assert.ok(provider3 instanceof OpenAIChatProvider);
381
+ });
382
+ test('createChatLLMProvider with no arguments uses defaults', () => {
383
+ const provider = createChatLLMProvider();
384
+ assert.ok(provider instanceof OpenAIChatProvider);
385
+ });
386
+ // ============= Rate limiting integration tests =============
387
+ test('OpenAIChatProvider.generateCompletion uses rate limiter', async () => {
388
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
389
+ await provider.init();
390
+ const mockClient = createMockChatOpenAI('Response');
391
+ injectMockChatClient(provider, mockClient);
392
+ await provider.generateCompletion([{ role: 'user', content: 'Hi' }]);
393
+ const stats = provider.rateLimiter.getStats();
394
+ assert.ok(stats.requestsInLastMinute >= 0);
395
+ });
396
+ // ============= Edge cases =============
397
+ test('OpenAIChatProvider handles empty messages array', async () => {
398
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
399
+ await provider.init();
400
+ const mockClient = createMockChatOpenAI('Response');
401
+ injectMockChatClient(provider, mockClient);
402
+ // Empty messages array - API should handle this
403
+ await assert.doesNotReject(async () => {
404
+ await provider.generateCompletion([]);
405
+ });
406
+ const call = mockClient.createCalls[0];
407
+ assert.equal(call.messages.length, 0);
408
+ });
409
+ test('OpenAIChatProvider handles very long message content', async () => {
410
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
411
+ await provider.init();
412
+ const mockClient = createMockChatOpenAI('Response');
413
+ injectMockChatClient(provider, mockClient);
414
+ const longContent = 'a'.repeat(100000);
415
+ await provider.generateCompletion([{ role: 'user', content: longContent }]);
416
+ const call = mockClient.createCalls[0];
417
+ assert.equal(call.messages[0].content, longContent);
418
+ });
419
+ // ============= Concurrent access tests =============
420
+ test('OpenAIChatProvider handles concurrent generateCompletion calls', async () => {
421
+ const provider = new OpenAIChatProvider({ apiKey: 'test-key' });
422
+ await provider.init();
423
+ const mockClient = createMockChatOpenAI('Response');
424
+ injectMockChatClient(provider, mockClient);
425
+ const results = await Promise.all([
426
+ provider.generateCompletion([{ role: 'user', content: 'Message 1' }]),
427
+ provider.generateCompletion([{ role: 'user', content: 'Message 2' }]),
428
+ provider.generateCompletion([{ role: 'user', content: 'Message 3' }])
429
+ ]);
430
+ assert.equal(results.length, 3);
431
+ results.forEach(result => {
432
+ assert.equal(result, 'Response');
433
+ });
434
+ });
435
+ //# sourceMappingURL=chat-llm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-llm.test.js","sourceRoot":"","sources":["../../../src/tests/providers/chat-llm.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/tests/providers/index.test.ts"],"names":[],"mappings":""}