codevault 1.8.4 → 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 (351) hide show
  1. package/README.md +3 -2
  2. package/dist/chunking/token-counter.d.ts.map +1 -1
  3. package/dist/chunking/token-counter.js +16 -10
  4. package/dist/chunking/token-counter.js.map +1 -1
  5. package/dist/cli/commands/index-cmd.d.ts.map +1 -1
  6. package/dist/cli/commands/index-cmd.js +108 -97
  7. package/dist/cli/commands/index-cmd.js.map +1 -1
  8. package/dist/cli/commands/interactive-config.d.ts.map +1 -1
  9. package/dist/cli/commands/interactive-config.js +40 -3
  10. package/dist/cli/commands/interactive-config.js.map +1 -1
  11. package/dist/cli/commands/search-cmd.d.ts.map +1 -1
  12. package/dist/cli/commands/search-cmd.js +11 -7
  13. package/dist/cli/commands/search-cmd.js.map +1 -1
  14. package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
  15. package/dist/cli/commands/search-with-code-cmd.js +3 -1
  16. package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
  17. package/dist/cli/utils.d.ts +56 -0
  18. package/dist/cli/utils.d.ts.map +1 -0
  19. package/dist/cli/utils.js +98 -0
  20. package/dist/cli/utils.js.map +1 -0
  21. package/dist/config/constants.d.ts +4 -0
  22. package/dist/config/constants.d.ts.map +1 -1
  23. package/dist/config/constants.js +2 -0
  24. package/dist/config/constants.js.map +1 -1
  25. package/dist/context/packs.d.ts.map +1 -1
  26. package/dist/context/packs.js +3 -1
  27. package/dist/context/packs.js.map +1 -1
  28. package/dist/core/IndexerEngine.d.ts +2 -0
  29. package/dist/core/IndexerEngine.d.ts.map +1 -1
  30. package/dist/core/IndexerEngine.js +34 -26
  31. package/dist/core/IndexerEngine.js.map +1 -1
  32. package/dist/core/SearchService.d.ts +1 -0
  33. package/dist/core/SearchService.d.ts.map +1 -1
  34. package/dist/core/SearchService.js +18 -12
  35. package/dist/core/SearchService.js.map +1 -1
  36. package/dist/core/batch-indexer.d.ts.map +1 -1
  37. package/dist/core/batch-indexer.js +5 -13
  38. package/dist/core/batch-indexer.js.map +1 -1
  39. package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
  40. package/dist/core/indexing/IndexFinalizationStage.js +21 -2
  41. package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
  42. package/dist/core/indexing/IndexState.d.ts +3 -8
  43. package/dist/core/indexing/IndexState.d.ts.map +1 -1
  44. package/dist/core/indexing/IndexState.js.map +1 -1
  45. package/dist/core/indexing/PersistManager.d.ts +1 -1
  46. package/dist/core/indexing/PersistManager.d.ts.map +1 -1
  47. package/dist/core/indexing/PersistManager.js +17 -17
  48. package/dist/core/indexing/PersistManager.js.map +1 -1
  49. package/dist/core/search/HybridFusion.d.ts +0 -1
  50. package/dist/core/search/HybridFusion.d.ts.map +1 -1
  51. package/dist/core/search/HybridFusion.js +2 -14
  52. package/dist/core/search/HybridFusion.js.map +1 -1
  53. package/dist/core/search/ResultMapper.d.ts +0 -1
  54. package/dist/core/search/ResultMapper.d.ts.map +1 -1
  55. package/dist/core/search/ResultMapper.js +2 -13
  56. package/dist/core/search/ResultMapper.js.map +1 -1
  57. package/dist/core/search/SearchContextManager.d.ts +3 -0
  58. package/dist/core/search/SearchContextManager.d.ts.map +1 -1
  59. package/dist/core/search/SearchContextManager.js +15 -2
  60. package/dist/core/search/SearchContextManager.js.map +1 -1
  61. package/dist/core/search.d.ts.map +1 -1
  62. package/dist/core/search.js +9 -4
  63. package/dist/core/search.js.map +1 -1
  64. package/dist/languages/rules.d.ts.map +1 -1
  65. package/dist/languages/rules.js +14 -5
  66. package/dist/languages/rules.js.map +1 -1
  67. package/dist/mcp/schemas.d.ts +2 -2
  68. package/dist/mcp-server.d.ts +1 -0
  69. package/dist/mcp-server.d.ts.map +1 -1
  70. package/dist/mcp-server.js +32 -21
  71. package/dist/mcp-server.js.map +1 -1
  72. package/dist/providers/base.d.ts +3 -2
  73. package/dist/providers/base.d.ts.map +1 -1
  74. package/dist/providers/base.js +3 -1
  75. package/dist/providers/base.js.map +1 -1
  76. package/dist/providers/chat-llm.d.ts +2 -2
  77. package/dist/providers/chat-llm.d.ts.map +1 -1
  78. package/dist/providers/chat-llm.js +4 -1
  79. package/dist/providers/chat-llm.js.map +1 -1
  80. package/dist/providers/openai.d.ts.map +1 -1
  81. package/dist/providers/openai.js +4 -1
  82. package/dist/providers/openai.js.map +1 -1
  83. package/dist/ranking/api-reranker.d.ts.map +1 -1
  84. package/dist/ranking/api-reranker.js +27 -8
  85. package/dist/ranking/api-reranker.js.map +1 -1
  86. package/dist/ranking/symbol-boost.d.ts.map +1 -1
  87. package/dist/ranking/symbol-boost.js +4 -11
  88. package/dist/ranking/symbol-boost.js.map +1 -1
  89. package/dist/search/bm25.d.ts +10 -0
  90. package/dist/search/bm25.d.ts.map +1 -1
  91. package/dist/search/bm25.js +16 -0
  92. package/dist/search/bm25.js.map +1 -1
  93. package/dist/storage/encrypted-chunks.d.ts +3 -0
  94. package/dist/storage/encrypted-chunks.d.ts.map +1 -1
  95. package/dist/storage/encrypted-chunks.js +108 -16
  96. package/dist/storage/encrypted-chunks.js.map +1 -1
  97. package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
  98. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
  99. package/dist/synthesis/conversational-synthesizer.js +6 -1
  100. package/dist/synthesis/conversational-synthesizer.js.map +1 -1
  101. package/dist/synthesis/prompt-builder.d.ts.map +1 -1
  102. package/dist/synthesis/prompt-builder.js +40 -13
  103. package/dist/synthesis/prompt-builder.js.map +1 -1
  104. package/dist/synthesis/synthesizer.d.ts.map +1 -1
  105. package/dist/synthesis/synthesizer.js +14 -2
  106. package/dist/synthesis/synthesizer.js.map +1 -1
  107. package/dist/tests/api-reranker.test.d.ts +2 -0
  108. package/dist/tests/api-reranker.test.d.ts.map +1 -0
  109. package/dist/tests/api-reranker.test.js +575 -0
  110. package/dist/tests/api-reranker.test.js.map +1 -0
  111. package/dist/tests/bm25.test.d.ts +2 -0
  112. package/dist/tests/bm25.test.d.ts.map +1 -0
  113. package/dist/tests/bm25.test.js +340 -0
  114. package/dist/tests/bm25.test.js.map +1 -0
  115. package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
  116. package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
  117. package/dist/tests/chunking/file-grouper.test.js +495 -0
  118. package/dist/tests/chunking/file-grouper.test.js.map +1 -0
  119. package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
  120. package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
  121. package/dist/tests/chunking/semantic-chunker.test.js +509 -0
  122. package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
  123. package/dist/tests/chunking/token-counter.test.d.ts +2 -0
  124. package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
  125. package/dist/tests/chunking/token-counter.test.js +441 -0
  126. package/dist/tests/chunking/token-counter.test.js.map +1 -0
  127. package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
  128. package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
  129. package/dist/tests/cli/ask-cmd.test.js +152 -0
  130. package/dist/tests/cli/ask-cmd.test.js.map +1 -0
  131. package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
  132. package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
  133. package/dist/tests/cli/chat-cmd.test.js +118 -0
  134. package/dist/tests/cli/chat-cmd.test.js.map +1 -0
  135. package/dist/tests/cli/config-cmd.test.d.ts +2 -0
  136. package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
  137. package/dist/tests/cli/config-cmd.test.js +226 -0
  138. package/dist/tests/cli/config-cmd.test.js.map +1 -0
  139. package/dist/tests/cli/context.test.d.ts +2 -0
  140. package/dist/tests/cli/context.test.d.ts.map +1 -0
  141. package/dist/tests/cli/context.test.js +158 -0
  142. package/dist/tests/cli/context.test.js.map +1 -0
  143. package/dist/tests/cli/index-cmd.test.d.ts +2 -0
  144. package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
  145. package/dist/tests/cli/index-cmd.test.js +89 -0
  146. package/dist/tests/cli/index-cmd.test.js.map +1 -0
  147. package/dist/tests/cli/index.test.d.ts +2 -0
  148. package/dist/tests/cli/index.test.d.ts.map +1 -0
  149. package/dist/tests/cli/index.test.js +167 -0
  150. package/dist/tests/cli/index.test.js.map +1 -0
  151. package/dist/tests/cli/info-cmd.test.d.ts +2 -0
  152. package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
  153. package/dist/tests/cli/info-cmd.test.js +47 -0
  154. package/dist/tests/cli/info-cmd.test.js.map +1 -0
  155. package/dist/tests/cli/interactive-config.test.d.ts +2 -0
  156. package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
  157. package/dist/tests/cli/interactive-config.test.js +30 -0
  158. package/dist/tests/cli/interactive-config.test.js.map +1 -0
  159. package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
  160. package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
  161. package/dist/tests/cli/mcp-cmd.test.js +47 -0
  162. package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
  163. package/dist/tests/cli/search-cmd.test.d.ts +2 -0
  164. package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
  165. package/dist/tests/cli/search-cmd.test.js +120 -0
  166. package/dist/tests/cli/search-cmd.test.js.map +1 -0
  167. package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
  168. package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
  169. package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
  170. package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
  171. package/dist/tests/cli/update-cmd.test.d.ts +2 -0
  172. package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
  173. package/dist/tests/cli/update-cmd.test.js +75 -0
  174. package/dist/tests/cli/update-cmd.test.js.map +1 -0
  175. package/dist/tests/cli/utils.test.d.ts +2 -0
  176. package/dist/tests/cli/utils.test.d.ts.map +1 -0
  177. package/dist/tests/cli/utils.test.js +119 -0
  178. package/dist/tests/cli/utils.test.js.map +1 -0
  179. package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
  180. package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
  181. package/dist/tests/cli/watch-cmd.test.js +84 -0
  182. package/dist/tests/cli/watch-cmd.test.js.map +1 -0
  183. package/dist/tests/cli-ui.test.d.ts +2 -0
  184. package/dist/tests/cli-ui.test.d.ts.map +1 -0
  185. package/dist/tests/cli-ui.test.js +608 -0
  186. package/dist/tests/cli-ui.test.js.map +1 -0
  187. package/dist/tests/codemap-io.test.d.ts +2 -0
  188. package/dist/tests/codemap-io.test.d.ts.map +1 -0
  189. package/dist/tests/codemap-io.test.js +992 -0
  190. package/dist/tests/codemap-io.test.js.map +1 -0
  191. package/dist/tests/config/apply-env.test.d.ts +2 -0
  192. package/dist/tests/config/apply-env.test.d.ts.map +1 -0
  193. package/dist/tests/config/apply-env.test.js +717 -0
  194. package/dist/tests/config/apply-env.test.js.map +1 -0
  195. package/dist/tests/config/constants.test.d.ts +2 -0
  196. package/dist/tests/config/constants.test.d.ts.map +1 -0
  197. package/dist/tests/config/constants.test.js +406 -0
  198. package/dist/tests/config/constants.test.js.map +1 -0
  199. package/dist/tests/config/loader.test.d.ts +2 -0
  200. package/dist/tests/config/loader.test.d.ts.map +1 -0
  201. package/dist/tests/config/loader.test.js +716 -0
  202. package/dist/tests/config/loader.test.js.map +1 -0
  203. package/dist/tests/config/resolver.test.d.ts +2 -0
  204. package/dist/tests/config/resolver.test.d.ts.map +1 -0
  205. package/dist/tests/config/resolver.test.js +402 -0
  206. package/dist/tests/config/resolver.test.js.map +1 -0
  207. package/dist/tests/config/types.test.d.ts +2 -0
  208. package/dist/tests/config/types.test.d.ts.map +1 -0
  209. package/dist/tests/config/types.test.js +460 -0
  210. package/dist/tests/config/types.test.js.map +1 -0
  211. package/dist/tests/context-packs.test.d.ts +2 -0
  212. package/dist/tests/context-packs.test.d.ts.map +1 -0
  213. package/dist/tests/context-packs.test.js +826 -0
  214. package/dist/tests/context-packs.test.js.map +1 -0
  215. package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
  216. package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
  217. package/dist/tests/conversational-synthesizer.test.js +595 -0
  218. package/dist/tests/conversational-synthesizer.test.js.map +1 -0
  219. package/dist/tests/database.test.d.ts +2 -0
  220. package/dist/tests/database.test.d.ts.map +1 -0
  221. package/dist/tests/database.test.js +965 -0
  222. package/dist/tests/database.test.js.map +1 -0
  223. package/dist/tests/encrypted-chunks.test.d.ts +2 -0
  224. package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
  225. package/dist/tests/encrypted-chunks.test.js +1470 -0
  226. package/dist/tests/encrypted-chunks.test.js.map +1 -0
  227. package/dist/tests/hybrid.test.d.ts +2 -0
  228. package/dist/tests/hybrid.test.d.ts.map +1 -0
  229. package/dist/tests/hybrid.test.js +456 -0
  230. package/dist/tests/hybrid.test.js.map +1 -0
  231. package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
  232. package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
  233. package/dist/tests/indexer/ChangeQueue.test.js +441 -0
  234. package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
  235. package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
  236. package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
  237. package/dist/tests/indexer/ProviderManager.test.js +290 -0
  238. package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
  239. package/dist/tests/indexer/WatchService.test.d.ts +14 -0
  240. package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
  241. package/dist/tests/indexer/WatchService.test.js +667 -0
  242. package/dist/tests/indexer/WatchService.test.js.map +1 -0
  243. package/dist/tests/indexer/merkle.test.d.ts +11 -0
  244. package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
  245. package/dist/tests/indexer/merkle.test.js +497 -0
  246. package/dist/tests/indexer/merkle.test.js.map +1 -0
  247. package/dist/tests/indexer/update.test.d.ts +10 -0
  248. package/dist/tests/indexer/update.test.d.ts.map +1 -0
  249. package/dist/tests/indexer/update.test.js +317 -0
  250. package/dist/tests/indexer/update.test.js.map +1 -0
  251. package/dist/tests/indexer/watch.test.d.ts +8 -0
  252. package/dist/tests/indexer/watch.test.d.ts.map +1 -0
  253. package/dist/tests/indexer/watch.test.js +95 -0
  254. package/dist/tests/indexer/watch.test.js.map +1 -0
  255. package/dist/tests/integration/index-search.integration.test.js +1 -0
  256. package/dist/tests/integration/index-search.integration.test.js.map +1 -1
  257. package/dist/tests/languages.test.d.ts +2 -0
  258. package/dist/tests/languages.test.d.ts.map +1 -0
  259. package/dist/tests/languages.test.js +575 -0
  260. package/dist/tests/languages.test.js.map +1 -0
  261. package/dist/tests/logger-redaction.test.d.ts +2 -0
  262. package/dist/tests/logger-redaction.test.d.ts.map +1 -0
  263. package/dist/tests/logger-redaction.test.js +48 -0
  264. package/dist/tests/logger-redaction.test.js.map +1 -0
  265. package/dist/tests/logger.test.d.ts +2 -0
  266. package/dist/tests/logger.test.d.ts.map +1 -0
  267. package/dist/tests/logger.test.js +468 -0
  268. package/dist/tests/logger.test.js.map +1 -0
  269. package/dist/tests/markdown-formatter.test.d.ts +2 -0
  270. package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
  271. package/dist/tests/markdown-formatter.test.js +453 -0
  272. package/dist/tests/markdown-formatter.test.js.map +1 -0
  273. package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
  274. package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
  275. package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
  276. package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
  277. package/dist/tests/mutex.test.d.ts +2 -0
  278. package/dist/tests/mutex.test.d.ts.map +1 -0
  279. package/dist/tests/mutex.test.js +489 -0
  280. package/dist/tests/mutex.test.js.map +1 -0
  281. package/dist/tests/path-helpers.test.d.ts +2 -0
  282. package/dist/tests/path-helpers.test.d.ts.map +1 -0
  283. package/dist/tests/path-helpers.test.js +332 -0
  284. package/dist/tests/path-helpers.test.js.map +1 -0
  285. package/dist/tests/prompt-builder.test.d.ts +2 -0
  286. package/dist/tests/prompt-builder.test.d.ts.map +1 -0
  287. package/dist/tests/prompt-builder.test.js +417 -0
  288. package/dist/tests/prompt-builder.test.js.map +1 -0
  289. package/dist/tests/providers/base.test.d.ts +2 -0
  290. package/dist/tests/providers/base.test.d.ts.map +1 -0
  291. package/dist/tests/providers/base.test.js +299 -0
  292. package/dist/tests/providers/base.test.js.map +1 -0
  293. package/dist/tests/providers/chat-llm.test.d.ts +2 -0
  294. package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
  295. package/dist/tests/providers/chat-llm.test.js +435 -0
  296. package/dist/tests/providers/chat-llm.test.js.map +1 -0
  297. package/dist/tests/providers/index.test.d.ts +2 -0
  298. package/dist/tests/providers/index.test.d.ts.map +1 -0
  299. package/dist/tests/providers/index.test.js +204 -0
  300. package/dist/tests/providers/index.test.js.map +1 -0
  301. package/dist/tests/providers/mock.test.d.ts +2 -0
  302. package/dist/tests/providers/mock.test.d.ts.map +1 -0
  303. package/dist/tests/providers/mock.test.js +225 -0
  304. package/dist/tests/providers/mock.test.js.map +1 -0
  305. package/dist/tests/providers/openai.test.d.ts +2 -0
  306. package/dist/tests/providers/openai.test.d.ts.map +1 -0
  307. package/dist/tests/providers/openai.test.js +408 -0
  308. package/dist/tests/providers/openai.test.js.map +1 -0
  309. package/dist/tests/providers/token-counter.test.d.ts +2 -0
  310. package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
  311. package/dist/tests/providers/token-counter.test.js +247 -0
  312. package/dist/tests/providers/token-counter.test.js.map +1 -0
  313. package/dist/tests/rate-limiter.test.js +392 -1
  314. package/dist/tests/rate-limiter.test.js.map +1 -1
  315. package/dist/tests/scope.test.d.ts +2 -0
  316. package/dist/tests/scope.test.d.ts.map +1 -0
  317. package/dist/tests/scope.test.js +529 -0
  318. package/dist/tests/scope.test.js.map +1 -0
  319. package/dist/tests/simple-lru.test.js +377 -0
  320. package/dist/tests/simple-lru.test.js.map +1 -1
  321. package/dist/tests/symbol-boost.test.js +730 -10
  322. package/dist/tests/symbol-boost.test.js.map +1 -1
  323. package/dist/tests/symbols-extract.test.d.ts +2 -0
  324. package/dist/tests/symbols-extract.test.d.ts.map +1 -0
  325. package/dist/tests/symbols-extract.test.js +536 -0
  326. package/dist/tests/symbols-extract.test.js.map +1 -0
  327. package/dist/tests/symbols-graph.test.d.ts +2 -0
  328. package/dist/tests/symbols-graph.test.d.ts.map +1 -0
  329. package/dist/tests/symbols-graph.test.js +656 -0
  330. package/dist/tests/symbols-graph.test.js.map +1 -0
  331. package/dist/tests/synthesizer.test.d.ts +2 -0
  332. package/dist/tests/synthesizer.test.d.ts.map +1 -0
  333. package/dist/tests/synthesizer.test.js +381 -0
  334. package/dist/tests/synthesizer.test.js.map +1 -0
  335. package/dist/types/context-pack.d.ts +3 -3
  336. package/dist/utils/logger.d.ts +5 -1
  337. package/dist/utils/logger.d.ts.map +1 -1
  338. package/dist/utils/logger.js +149 -4
  339. package/dist/utils/logger.js.map +1 -1
  340. package/dist/utils/mutex.d.ts +7 -2
  341. package/dist/utils/mutex.d.ts.map +1 -1
  342. package/dist/utils/mutex.js +31 -7
  343. package/dist/utils/mutex.js.map +1 -1
  344. package/dist/utils/path-helpers.d.ts.map +1 -1
  345. package/dist/utils/path-helpers.js +5 -2
  346. package/dist/utils/path-helpers.js.map +1 -1
  347. package/dist/utils/simple-lru.d.ts +6 -0
  348. package/dist/utils/simple-lru.d.ts.map +1 -1
  349. package/dist/utils/simple-lru.js +26 -0
  350. package/dist/utils/simple-lru.js.map +1 -1
  351. package/package.json +1 -1
@@ -0,0 +1,408 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { OpenAIProvider } from '../../providers/openai.js';
4
+ import { MAX_BATCH_TOKENS, MAX_ITEM_TOKENS, estimateTokens } from '../../providers/base.js';
5
+ function createMockOpenAI(dimensions = 1536) {
6
+ const mock = {
7
+ createCalls: [],
8
+ embeddings: {
9
+ create: async (params) => {
10
+ mock.createCalls.push(params);
11
+ const typedParams = params;
12
+ const inputs = Array.isArray(typedParams.input) ? typedParams.input : [typedParams.input];
13
+ return {
14
+ data: inputs.map((_, i) => ({
15
+ embedding: new Array(dimensions).fill(0).map((_, j) => (j + 1) / dimensions),
16
+ index: i
17
+ })),
18
+ model: typedParams.model,
19
+ usage: { prompt_tokens: 10, total_tokens: 10 }
20
+ };
21
+ }
22
+ }
23
+ };
24
+ return mock;
25
+ }
26
+ function createErrorMockOpenAI(error) {
27
+ return {
28
+ createCalls: [],
29
+ embeddings: {
30
+ create: async () => {
31
+ throw error;
32
+ }
33
+ }
34
+ };
35
+ }
36
+ function createInvalidResponseMockOpenAI(response) {
37
+ return {
38
+ createCalls: [],
39
+ embeddings: {
40
+ create: async () => {
41
+ return response;
42
+ }
43
+ }
44
+ };
45
+ }
46
+ // Helper to inject mock OpenAI client
47
+ function injectMockClient(provider, mockClient) {
48
+ // Access private openai property via any
49
+ provider.openai = mockClient;
50
+ }
51
+ // ============= Constructor tests =============
52
+ test('OpenAIProvider uses default model when no options provided', () => {
53
+ // Clear environment to test defaults
54
+ const originalModel = process.env.CODEVAULT_EMBEDDING_MODEL;
55
+ delete process.env.CODEVAULT_EMBEDDING_MODEL;
56
+ delete process.env.CODEVAULT_OPENAI_EMBEDDING_MODEL;
57
+ delete process.env.OPENAI_MODEL;
58
+ try {
59
+ const provider = new OpenAIProvider();
60
+ assert.equal(provider.getModelName(), 'text-embedding-3-large');
61
+ }
62
+ finally {
63
+ if (originalModel)
64
+ process.env.CODEVAULT_EMBEDDING_MODEL = originalModel;
65
+ }
66
+ });
67
+ test('OpenAIProvider uses model from options', () => {
68
+ const provider = new OpenAIProvider({ model: 'text-embedding-3-small' });
69
+ assert.equal(provider.getModelName(), 'text-embedding-3-small');
70
+ });
71
+ test('OpenAIProvider respects dimensions override', () => {
72
+ const provider = new OpenAIProvider({ dimensions: 512 });
73
+ assert.equal(provider.getDimensions(), 512);
74
+ });
75
+ test('OpenAIProvider uses rate limiter from config when provided', () => {
76
+ const provider = new OpenAIProvider({ rpm: 100, tpm: 50000 });
77
+ const stats = provider.rateLimiter.getStats();
78
+ assert.equal(stats.rpm, 100);
79
+ assert.equal(stats.tpm, 50000);
80
+ });
81
+ test('OpenAIProvider creates default rate limiter when no limits provided', () => {
82
+ const provider = new OpenAIProvider();
83
+ assert.ok(provider.rateLimiter, 'Rate limiter should exist');
84
+ });
85
+ // ============= getName tests =============
86
+ test('OpenAIProvider.getName returns "OpenAI"', () => {
87
+ const provider = new OpenAIProvider();
88
+ assert.equal(provider.getName(), 'OpenAI');
89
+ });
90
+ // ============= getModelName tests =============
91
+ test('OpenAIProvider.getModelName returns configured model', () => {
92
+ const provider = new OpenAIProvider({ model: 'custom-model' });
93
+ assert.equal(provider.getModelName(), 'custom-model');
94
+ });
95
+ // ============= getDimensions tests =============
96
+ test('OpenAIProvider.getDimensions returns 3072 for text-embedding-3-large', () => {
97
+ // Clear dimension overrides
98
+ const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
99
+ delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
100
+ delete process.env.CODEVAULT_DIMENSIONS;
101
+ try {
102
+ const provider = new OpenAIProvider({ model: 'text-embedding-3-large' });
103
+ assert.equal(provider.getDimensions(), 3072);
104
+ }
105
+ finally {
106
+ if (originalDims)
107
+ process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
108
+ }
109
+ });
110
+ test('OpenAIProvider.getDimensions returns 1536 for text-embedding-3-small', () => {
111
+ const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
112
+ delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
113
+ delete process.env.CODEVAULT_DIMENSIONS;
114
+ try {
115
+ const provider = new OpenAIProvider({ model: 'text-embedding-3-small' });
116
+ assert.equal(provider.getDimensions(), 1536);
117
+ }
118
+ finally {
119
+ if (originalDims)
120
+ process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
121
+ }
122
+ });
123
+ test('OpenAIProvider.getDimensions returns 1536 for unknown models', () => {
124
+ const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
125
+ delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
126
+ delete process.env.CODEVAULT_DIMENSIONS;
127
+ try {
128
+ const provider = new OpenAIProvider({ model: 'unknown-model' });
129
+ assert.equal(provider.getDimensions(), 1536);
130
+ }
131
+ finally {
132
+ if (originalDims)
133
+ process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
134
+ }
135
+ });
136
+ test('OpenAIProvider.getDimensions respects dimensionsOverride', () => {
137
+ const provider = new OpenAIProvider({
138
+ model: 'text-embedding-3-large',
139
+ dimensions: 256
140
+ });
141
+ assert.equal(provider.getDimensions(), 256);
142
+ });
143
+ // ============= init tests =============
144
+ test('OpenAIProvider.init initializes OpenAI client', async () => {
145
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
146
+ // init should not throw
147
+ await assert.doesNotReject(async () => {
148
+ await provider.init();
149
+ });
150
+ });
151
+ test('OpenAIProvider.init is idempotent (can call multiple times)', async () => {
152
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
153
+ await provider.init();
154
+ await provider.init();
155
+ await provider.init();
156
+ // Should not throw
157
+ assert.ok(true);
158
+ });
159
+ // ============= generateEmbedding tests =============
160
+ test('OpenAIProvider.generateEmbedding returns embedding from API', async () => {
161
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
162
+ await provider.init();
163
+ const mockClient = createMockOpenAI(3072);
164
+ injectMockClient(provider, mockClient);
165
+ const embedding = await provider.generateEmbedding('test text');
166
+ assert.equal(embedding.length, 3072);
167
+ assert.equal(mockClient.createCalls.length, 1);
168
+ });
169
+ test('OpenAIProvider.generateEmbedding truncates text to maxChars', async () => {
170
+ const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
171
+ await provider.init();
172
+ const mockClient = createMockOpenAI(3072);
173
+ injectMockClient(provider, mockClient);
174
+ // Create text longer than typical maxChars
175
+ const longText = 'a'.repeat(50000);
176
+ await provider.generateEmbedding(longText);
177
+ const call = mockClient.createCalls[0];
178
+ // Should be truncated (exact limit depends on model profile maxChunkChars)
179
+ assert.ok(call.input.length <= 24000, `Input should be truncated, got ${call.input.length}`);
180
+ });
181
+ test('OpenAIProvider.generateEmbedding adds provider routing for OpenRouter', async () => {
182
+ const provider = new OpenAIProvider({
183
+ apiKey: 'test-key',
184
+ baseUrl: 'https://openrouter.ai/api/v1',
185
+ routing: { order: ['first'] }
186
+ });
187
+ await provider.init();
188
+ const mockClient = createMockOpenAI(1536);
189
+ injectMockClient(provider, mockClient);
190
+ await provider.generateEmbedding('test');
191
+ const call = mockClient.createCalls[0];
192
+ assert.ok(call.provider, 'Provider routing should be included');
193
+ assert.deepEqual(call.provider.order, ['first']);
194
+ });
195
+ test('OpenAIProvider.generateEmbedding throws on invalid API response (no data)', async () => {
196
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
197
+ await provider.init();
198
+ const mockClient = createInvalidResponseMockOpenAI({ data: null });
199
+ injectMockClient(provider, mockClient);
200
+ await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid API response/);
201
+ });
202
+ test('OpenAIProvider.generateEmbedding throws on invalid API response (empty data)', async () => {
203
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
204
+ await provider.init();
205
+ const mockClient = createInvalidResponseMockOpenAI({ data: [] });
206
+ injectMockClient(provider, mockClient);
207
+ await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid API response/);
208
+ });
209
+ test('OpenAIProvider.generateEmbedding throws on invalid embedding format', async () => {
210
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
211
+ await provider.init();
212
+ const mockClient = createInvalidResponseMockOpenAI({
213
+ data: [{ embedding: 'not an array' }]
214
+ });
215
+ injectMockClient(provider, mockClient);
216
+ await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid embedding/);
217
+ });
218
+ test('OpenAIProvider.generateEmbedding throws if client not initialized', async () => {
219
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
220
+ // Inject mock first, then null it out after init to test the guard
221
+ await provider.init();
222
+ const mockClient = createMockOpenAI(3072);
223
+ injectMockClient(provider, mockClient);
224
+ // Now null it to simulate an edge case where client becomes null
225
+ provider.openai = null;
226
+ // The generateEmbedding calls init() again which will recreate the client
227
+ // So this test verifies the guard inside rateLimiter.execute callback
228
+ // We need to mock init to not recreate the client
229
+ const originalInit = provider.init.bind(provider);
230
+ provider.init = async () => {
231
+ // Do nothing - don't recreate the client
232
+ await Promise.resolve();
233
+ };
234
+ await assert.rejects(async () => provider.generateEmbedding('test'), /OpenAI client not initialized/);
235
+ // Restore init
236
+ provider.init = originalInit;
237
+ });
238
+ // ============= generateEmbeddings (batch) tests =============
239
+ test('OpenAIProvider.generateEmbeddings processes batch correctly', async () => {
240
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
241
+ await provider.init();
242
+ const mockClient = createMockOpenAI(3072);
243
+ injectMockClient(provider, mockClient);
244
+ const texts = ['text1', 'text2', 'text3'];
245
+ const embeddings = await provider.generateEmbeddings(texts);
246
+ assert.equal(embeddings.length, 3);
247
+ embeddings.forEach(emb => {
248
+ assert.equal(emb.length, 3072);
249
+ });
250
+ });
251
+ test('OpenAIProvider.generateEmbeddings handles empty array', async () => {
252
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
253
+ await provider.init();
254
+ const mockClient = createMockOpenAI(3072);
255
+ injectMockClient(provider, mockClient);
256
+ const embeddings = await provider.generateEmbeddings([]);
257
+ assert.equal(embeddings.length, 0);
258
+ assert.equal(mockClient.createCalls.length, 0);
259
+ });
260
+ test('OpenAIProvider.generateEmbeddings respects MAX_BATCH_TOKENS limit', async () => {
261
+ const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
262
+ await provider.init();
263
+ const mockClient = createMockOpenAI(3072);
264
+ injectMockClient(provider, mockClient);
265
+ // Create texts that would exceed MAX_BATCH_TOKENS in total
266
+ // Each text is ~1000 tokens (4000 chars), so 200 texts = ~200k tokens > 100k limit
267
+ const texts = Array.from({ length: 50 }, () => 'a'.repeat(4000));
268
+ await provider.generateEmbeddings(texts);
269
+ // Should have made multiple API calls due to token limits
270
+ assert.ok(mockClient.createCalls.length >= 1, 'Should make at least one API call');
271
+ });
272
+ test('OpenAIProvider.generateEmbeddings text is truncated to maxChars before token check', async () => {
273
+ // This test verifies that text is truncated before token counting
274
+ // For text-embedding-3-large: maxChars=24000, maxTokens=8191
275
+ // 24000 chars / 4 = 6000 estimated tokens, which is < 8191
276
+ // So even very long texts won't trigger the token limit error after truncation
277
+ const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
278
+ await provider.init();
279
+ const mockClient = createMockOpenAI(3072);
280
+ injectMockClient(provider, mockClient);
281
+ // Create a very long text that would exceed token limits if not truncated
282
+ const oversizedText = 'a'.repeat(100000); // 25000 estimated tokens before truncation
283
+ const texts = [oversizedText];
284
+ // Should NOT throw because text is truncated to maxChars (24000) first
285
+ // 24000 / 4 = 6000 tokens, which is < 8191
286
+ await assert.doesNotReject(async () => provider.generateEmbeddings(texts));
287
+ // Verify the text was truncated
288
+ const call = mockClient.createCalls[0];
289
+ assert.ok(call.input[0].length <= 24000, 'Text should be truncated to maxChars');
290
+ });
291
+ test('OpenAIProvider.generateEmbeddings validates response length matches input', async () => {
292
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
293
+ await provider.init();
294
+ // Mock that returns wrong number of embeddings
295
+ const mockClient = {
296
+ createCalls: [],
297
+ embeddings: {
298
+ create: async () => ({
299
+ data: [{ embedding: [1, 2, 3], index: 0 }], // Only 1 embedding
300
+ model: 'test',
301
+ usage: { prompt_tokens: 10, total_tokens: 10 }
302
+ })
303
+ }
304
+ };
305
+ injectMockClient(provider, mockClient);
306
+ await assert.rejects(async () => provider.generateEmbeddings(['text1', 'text2', 'text3']), // 3 texts
307
+ /expected 3/);
308
+ });
309
+ test('OpenAIProvider.generateEmbeddings handles single item batch', async () => {
310
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
311
+ await provider.init();
312
+ const mockClient = createMockOpenAI(3072);
313
+ injectMockClient(provider, mockClient);
314
+ const embeddings = await provider.generateEmbeddings(['single text']);
315
+ assert.equal(embeddings.length, 1);
316
+ assert.equal(embeddings[0].length, 3072);
317
+ });
318
+ // ============= Token estimation tests =============
319
+ test('estimateTokens function is used for batch size calculation', () => {
320
+ // Test that estimateTokens is consistent with provider expectations
321
+ const text = 'hello world test';
322
+ const estimate = estimateTokens(text);
323
+ assert.equal(estimate, Math.ceil(text.length / 4));
324
+ });
325
+ test('MAX_BATCH_TOKENS constant is correct', () => {
326
+ assert.equal(MAX_BATCH_TOKENS, 100000);
327
+ });
328
+ test('MAX_ITEM_TOKENS constant is correct', () => {
329
+ assert.equal(MAX_ITEM_TOKENS, 8191);
330
+ });
331
+ // ============= Rate limiting integration tests =============
332
+ test('OpenAIProvider uses rate limiter for generateEmbedding', async () => {
333
+ const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 100 });
334
+ await provider.init();
335
+ const mockClient = createMockOpenAI(3072);
336
+ injectMockClient(provider, mockClient);
337
+ await provider.generateEmbedding('test');
338
+ const stats = provider.rateLimiter.getStats();
339
+ assert.ok(stats.requestsInLastMinute >= 0);
340
+ });
341
+ test('OpenAIProvider uses rate limiter for generateEmbeddings', async () => {
342
+ const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 100 });
343
+ await provider.init();
344
+ const mockClient = createMockOpenAI(3072);
345
+ injectMockClient(provider, mockClient);
346
+ await provider.generateEmbeddings(['text1', 'text2']);
347
+ const stats = provider.rateLimiter.getStats();
348
+ assert.ok(stats.requestsInLastMinute >= 0);
349
+ });
350
+ // ============= Error handling tests =============
351
+ test('OpenAIProvider.generateEmbedding propagates API errors', async () => {
352
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
353
+ await provider.init();
354
+ const mockClient = createErrorMockOpenAI(new Error('API unavailable'));
355
+ injectMockClient(provider, mockClient);
356
+ await assert.rejects(async () => provider.generateEmbedding('test'), /API unavailable/);
357
+ });
358
+ test('OpenAIProvider.generateEmbeddings validates each embedding in batch', async () => {
359
+ const provider = new OpenAIProvider({ apiKey: 'test-key' });
360
+ await provider.init();
361
+ // Mock that returns invalid embedding at index 1
362
+ const mockClient = {
363
+ createCalls: [],
364
+ embeddings: {
365
+ create: async () => ({
366
+ data: [
367
+ { embedding: [1, 2, 3], index: 0 },
368
+ { embedding: null, index: 1 } // Invalid
369
+ ],
370
+ model: 'test',
371
+ usage: { prompt_tokens: 10, total_tokens: 10 }
372
+ })
373
+ }
374
+ };
375
+ injectMockClient(provider, mockClient);
376
+ await assert.rejects(async () => provider.generateEmbeddings(['text1', 'text2']), /Invalid embedding at index 1/);
377
+ });
378
+ // ============= OpenRouter detection tests =============
379
+ test('OpenAIProvider does not add routing for non-OpenRouter URLs', async () => {
380
+ const provider = new OpenAIProvider({
381
+ apiKey: 'test-key',
382
+ baseUrl: 'https://api.openai.com/v1',
383
+ routing: { order: ['first'] }
384
+ });
385
+ await provider.init();
386
+ const mockClient = createMockOpenAI(1536);
387
+ injectMockClient(provider, mockClient);
388
+ await provider.generateEmbedding('test');
389
+ const call = mockClient.createCalls[0];
390
+ assert.equal(call.provider, undefined, 'Provider routing should not be included for non-OpenRouter');
391
+ });
392
+ // ============= Concurrent access tests =============
393
+ test('OpenAIProvider handles concurrent generateEmbedding calls', async () => {
394
+ const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 1000 });
395
+ await provider.init();
396
+ const mockClient = createMockOpenAI(3072);
397
+ injectMockClient(provider, mockClient);
398
+ const results = await Promise.all([
399
+ provider.generateEmbedding('text1'),
400
+ provider.generateEmbedding('text2'),
401
+ provider.generateEmbedding('text3')
402
+ ]);
403
+ assert.equal(results.length, 3);
404
+ results.forEach(emb => {
405
+ assert.equal(emb.length, 3072);
406
+ });
407
+ });
408
+ //# sourceMappingURL=openai.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../../src/tests/providers/openai.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token-counter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/tests/providers/token-counter.test.ts"],"names":[],"mappings":""}