@vybestack/llxprt-code-core 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250812.12fa8ad2

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 (563) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
  6. package/dist/src/auth/anthropic-device-flow.js +208 -0
  7. package/dist/src/auth/anthropic-device-flow.js.map +1 -0
  8. package/dist/src/auth/precedence.d.ts +55 -0
  9. package/dist/src/auth/precedence.js +211 -0
  10. package/dist/src/auth/precedence.js.map +1 -0
  11. package/dist/src/auth/qwen-device-flow.d.ts +45 -0
  12. package/dist/src/auth/qwen-device-flow.js +179 -0
  13. package/dist/src/auth/qwen-device-flow.js.map +1 -0
  14. package/dist/src/auth/token-store.d.ts +66 -0
  15. package/dist/src/auth/token-store.js +151 -0
  16. package/dist/src/auth/token-store.js.map +1 -0
  17. package/dist/src/auth/types.d.ts +130 -0
  18. package/dist/src/auth/types.js +60 -0
  19. package/dist/src/auth/types.js.map +1 -0
  20. package/dist/src/code_assist/converter.d.ts +2 -1
  21. package/dist/src/code_assist/converter.js +1 -1
  22. package/dist/src/code_assist/converter.js.map +1 -1
  23. package/dist/src/code_assist/oauth2.js +2 -1
  24. package/dist/src/code_assist/oauth2.js.map +1 -1
  25. package/dist/src/config/config.d.ts +78 -3
  26. package/dist/src/config/config.js +159 -6
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/endpoints.d.ts +60 -0
  29. package/dist/src/config/endpoints.js +126 -0
  30. package/dist/src/config/endpoints.js.map +1 -0
  31. package/dist/src/config/profileManager.d.ts +14 -4
  32. package/dist/src/config/profileManager.js +90 -11
  33. package/dist/src/config/profileManager.js.map +1 -1
  34. package/dist/src/core/client.js +16 -16
  35. package/dist/src/core/client.js.map +1 -1
  36. package/dist/src/core/contentGenerator.d.ts +4 -1
  37. package/dist/src/core/contentGenerator.js +3 -0
  38. package/dist/src/core/contentGenerator.js.map +1 -1
  39. package/dist/src/core/logger.d.ts +1 -0
  40. package/dist/src/core/logger.js +18 -0
  41. package/dist/src/core/logger.js.map +1 -1
  42. package/dist/src/core/loggingContentGenerator.d.ts +24 -0
  43. package/dist/src/core/loggingContentGenerator.js +89 -0
  44. package/dist/src/core/loggingContentGenerator.js.map +1 -0
  45. package/dist/src/core/nonInteractiveToolExecutor.js +17 -0
  46. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  47. package/dist/src/core/subagent.js +12 -10
  48. package/dist/src/core/subagent.js.map +1 -1
  49. package/dist/src/ide/ide-client.d.ts +2 -2
  50. package/dist/src/ide/ide-client.js +56 -18
  51. package/dist/src/ide/ide-client.js.map +1 -1
  52. package/dist/src/index.d.ts +11 -0
  53. package/dist/src/index.js +12 -0
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/providers/BaseProvider.d.ts +149 -0
  56. package/dist/src/providers/BaseProvider.js +315 -0
  57. package/dist/src/providers/BaseProvider.js.map +1 -0
  58. package/dist/src/providers/IProvider.d.ts +1 -0
  59. package/dist/src/providers/IProviderManager.d.ts +5 -0
  60. package/dist/src/providers/LoggingProviderWrapper.d.ts +54 -0
  61. package/dist/src/providers/LoggingProviderWrapper.js +350 -0
  62. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -0
  63. package/dist/src/providers/ProviderManager.d.ts +20 -1
  64. package/dist/src/providers/ProviderManager.js +236 -14
  65. package/dist/src/providers/ProviderManager.js.map +1 -1
  66. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  67. package/dist/src/providers/anthropic/AnthropicProvider.js +172 -26
  68. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  69. package/dist/src/providers/gemini/GeminiProvider.d.ts +16 -7
  70. package/dist/src/providers/gemini/GeminiProvider.js +163 -148
  71. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  72. package/dist/src/providers/logging/ProviderContentExtractor.d.ts +27 -0
  73. package/dist/src/providers/logging/ProviderContentExtractor.js +198 -0
  74. package/dist/src/providers/logging/ProviderContentExtractor.js.map +1 -0
  75. package/dist/src/providers/logging/ProviderPerformanceTracker.d.ts +43 -0
  76. package/dist/src/providers/logging/ProviderPerformanceTracker.js +98 -0
  77. package/dist/src/providers/logging/ProviderPerformanceTracker.js.map +1 -0
  78. package/dist/src/providers/openai/OpenAIProvider.d.ts +53 -6
  79. package/dist/src/providers/openai/OpenAIProvider.js +373 -40
  80. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  81. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  82. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  83. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  84. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  85. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  86. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  87. package/dist/src/providers/types.d.ts +47 -0
  88. package/dist/src/services/git-stats-service.d.ts +32 -0
  89. package/dist/src/services/git-stats-service.js +22 -0
  90. package/dist/src/services/git-stats-service.js.map +1 -0
  91. package/dist/src/services/loopDetectionService.js +10 -6
  92. package/dist/src/services/loopDetectionService.js.map +1 -1
  93. package/dist/src/services/shellExecutionService.js +44 -8
  94. package/dist/src/services/shellExecutionService.js.map +1 -1
  95. package/dist/src/settings/SettingsService.d.ts +32 -0
  96. package/dist/src/settings/SettingsService.js +204 -0
  97. package/dist/src/settings/SettingsService.js.map +1 -0
  98. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  99. package/dist/src/settings/settingsServiceInstance.js +24 -0
  100. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  101. package/dist/src/settings/types.d.ts +141 -0
  102. package/dist/src/settings/types.js +5 -0
  103. package/dist/src/settings/types.js.map +1 -0
  104. package/dist/src/storage/ConversationFileWriter.d.ts +16 -0
  105. package/dist/src/storage/ConversationFileWriter.js +69 -0
  106. package/dist/src/storage/ConversationFileWriter.js.map +1 -0
  107. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +8 -0
  108. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +56 -3
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  110. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
  111. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +11 -0
  112. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  113. package/dist/src/telemetry/constants.d.ts +5 -0
  114. package/dist/src/telemetry/constants.js +5 -0
  115. package/dist/src/telemetry/constants.js.map +1 -1
  116. package/dist/src/telemetry/loggers.d.ts +5 -1
  117. package/dist/src/telemetry/loggers.js +87 -1
  118. package/dist/src/telemetry/loggers.js.map +1 -1
  119. package/dist/src/telemetry/metrics.d.ts +2 -1
  120. package/dist/src/telemetry/metrics.js +7 -1
  121. package/dist/src/telemetry/metrics.js.map +1 -1
  122. package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
  123. package/dist/src/telemetry/tool-call-decision.js +29 -0
  124. package/dist/src/telemetry/tool-call-decision.js.map +1 -0
  125. package/dist/src/telemetry/types.d.ts +56 -1
  126. package/dist/src/telemetry/types.js +123 -0
  127. package/dist/src/telemetry/types.js.map +1 -1
  128. package/dist/src/telemetry/uiTelemetry.d.ts +2 -1
  129. package/dist/src/telemetry/uiTelemetry.js +1 -1
  130. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  131. package/dist/src/tools/diffOptions.d.ts +2 -0
  132. package/dist/src/tools/diffOptions.js +28 -0
  133. package/dist/src/tools/diffOptions.js.map +1 -1
  134. package/dist/src/tools/edit.d.ts +8 -32
  135. package/dist/src/tools/edit.js +153 -136
  136. package/dist/src/tools/edit.js.map +1 -1
  137. package/dist/src/tools/glob.d.ts +3 -10
  138. package/dist/src/tools/glob.js +97 -99
  139. package/dist/src/tools/glob.js.map +1 -1
  140. package/dist/src/tools/grep.d.ts +3 -35
  141. package/dist/src/tools/grep.js +117 -88
  142. package/dist/src/tools/grep.js.map +1 -1
  143. package/dist/src/tools/mcp-client.d.ts +4 -3
  144. package/dist/src/tools/mcp-client.js +23 -6
  145. package/dist/src/tools/mcp-client.js.map +1 -1
  146. package/dist/src/tools/read-file.js +37 -9
  147. package/dist/src/tools/read-file.js.map +1 -1
  148. package/dist/src/tools/todo-pause.d.ts +22 -0
  149. package/dist/src/tools/todo-pause.js +93 -0
  150. package/dist/src/tools/todo-pause.js.map +1 -0
  151. package/dist/src/tools/tool-error.d.ts +4 -0
  152. package/dist/src/tools/tool-error.js +4 -0
  153. package/dist/src/tools/tool-error.js.map +1 -1
  154. package/dist/src/tools/tool-registry.js +3 -3
  155. package/dist/src/tools/tool-registry.js.map +1 -1
  156. package/dist/src/tools/tools.d.ts +18 -0
  157. package/dist/src/tools/tools.js +15 -0
  158. package/dist/src/tools/tools.js.map +1 -1
  159. package/dist/src/tools/write-file.d.ts +4 -0
  160. package/dist/src/tools/write-file.js +90 -16
  161. package/dist/src/tools/write-file.js.map +1 -1
  162. package/dist/src/types/modelParams.d.ts +2 -0
  163. package/dist/src/utils/environmentContext.js +1 -1
  164. package/dist/src/utils/errors.d.ts +3 -0
  165. package/dist/src/utils/errors.js +6 -0
  166. package/dist/src/utils/errors.js.map +1 -1
  167. package/dist/src/utils/fileUtils.d.ts +7 -0
  168. package/dist/src/utils/fileUtils.js +9 -0
  169. package/dist/src/utils/fileUtils.js.map +1 -1
  170. package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
  171. package/dist/src/utils/filesearch/fileSearch.js +27 -19
  172. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  173. package/package.json +4 -2
  174. package/dist/src/code_assist/converter.test.d.ts +0 -6
  175. package/dist/src/code_assist/converter.test.js +0 -232
  176. package/dist/src/code_assist/converter.test.js.map +0 -1
  177. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  178. package/dist/src/code_assist/oauth2.test.js +0 -370
  179. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  180. package/dist/src/code_assist/server.test.d.ts +0 -6
  181. package/dist/src/code_assist/server.test.js +0 -131
  182. package/dist/src/code_assist/server.test.js.map +0 -1
  183. package/dist/src/code_assist/setup.test.d.ts +0 -6
  184. package/dist/src/code_assist/setup.test.js +0 -65
  185. package/dist/src/code_assist/setup.test.js.map +0 -1
  186. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  187. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  188. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  189. package/dist/src/config/config.test.d.ts +0 -6
  190. package/dist/src/config/config.test.js +0 -361
  191. package/dist/src/config/config.test.js.map +0 -1
  192. package/dist/src/config/flashFallback.test.d.ts +0 -6
  193. package/dist/src/config/flashFallback.test.js +0 -91
  194. package/dist/src/config/flashFallback.test.js.map +0 -1
  195. package/dist/src/core/client.test.d.ts +0 -6
  196. package/dist/src/core/client.test.js +0 -1317
  197. package/dist/src/core/client.test.js.map +0 -1
  198. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  199. package/dist/src/core/contentGenerator.test.js +0 -103
  200. package/dist/src/core/contentGenerator.test.js.map +0 -1
  201. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  202. package/dist/src/core/coreToolScheduler.test.js +0 -637
  203. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  204. package/dist/src/core/geminiChat.test.d.ts +0 -6
  205. package/dist/src/core/geminiChat.test.js +0 -425
  206. package/dist/src/core/geminiChat.test.js.map +0 -1
  207. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  208. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  209. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  210. package/dist/src/core/logger.test.d.ts +0 -6
  211. package/dist/src/core/logger.test.js +0 -438
  212. package/dist/src/core/logger.test.js.map +0 -1
  213. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  214. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  215. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  216. package/dist/src/core/prompts-async.test.d.ts +0 -6
  217. package/dist/src/core/prompts-async.test.js +0 -115
  218. package/dist/src/core/prompts-async.test.js.map +0 -1
  219. package/dist/src/core/prompts.test.d.ts +0 -6
  220. package/dist/src/core/prompts.test.js +0 -68
  221. package/dist/src/core/prompts.test.js.map +0 -1
  222. package/dist/src/core/subagent.test.d.ts +0 -6
  223. package/dist/src/core/subagent.test.js +0 -519
  224. package/dist/src/core/subagent.test.js.map +0 -1
  225. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  226. package/dist/src/core/tokenLimits.test.js +0 -66
  227. package/dist/src/core/tokenLimits.test.js.map +0 -1
  228. package/dist/src/core/turn.test.d.ts +0 -6
  229. package/dist/src/core/turn.test.js +0 -366
  230. package/dist/src/core/turn.test.js.map +0 -1
  231. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  232. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  233. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  234. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  235. package/dist/src/ide/ide-installer.test.js +0 -55
  236. package/dist/src/ide/ide-installer.test.js.map +0 -1
  237. package/dist/src/ide/ideContext.test.d.ts +0 -6
  238. package/dist/src/ide/ideContext.test.js +0 -265
  239. package/dist/src/ide/ideContext.test.js.map +0 -1
  240. package/dist/src/index.test.d.ts +0 -6
  241. package/dist/src/index.test.js +0 -12
  242. package/dist/src/index.test.js.map +0 -1
  243. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  244. package/dist/src/integration-tests/todo-system.test.js +0 -46
  245. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  246. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  247. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  248. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  249. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  250. package/dist/src/mcp/oauth-provider.test.js +0 -602
  251. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  252. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  253. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  254. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  255. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  256. package/dist/src/mcp/oauth-utils.test.js +0 -144
  257. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  258. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  259. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  260. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  261. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  262. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  263. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  264. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  265. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  266. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  267. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  268. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  269. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  270. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  271. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  272. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  273. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  274. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  275. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  276. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  277. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  278. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  279. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  280. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  281. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  282. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  283. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  284. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  285. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  286. package/dist/src/providers/ProviderManager.test.js +0 -284
  287. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  288. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  289. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  290. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  291. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  292. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  293. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  294. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  295. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  296. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  297. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  298. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  299. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  300. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  301. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  302. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  303. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  304. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -292
  305. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  306. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  307. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  308. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  309. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  310. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  311. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  312. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  313. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  314. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  315. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  316. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  317. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  318. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  319. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  320. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  321. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  322. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  323. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  324. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  325. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  326. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  327. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  328. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  329. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  330. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  331. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  332. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  333. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  334. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -620
  335. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  336. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  337. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  338. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  339. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  340. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  341. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  342. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  343. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  344. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  345. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  346. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  347. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  348. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  349. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  350. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  351. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  352. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  353. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  354. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  355. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  356. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  357. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  358. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  359. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  360. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  361. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  362. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  363. package/dist/src/services/gitService.test.d.ts +0 -6
  364. package/dist/src/services/gitService.test.js +0 -209
  365. package/dist/src/services/gitService.test.js.map +0 -1
  366. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  367. package/dist/src/services/loopDetectionService.test.js +0 -345
  368. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  369. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  370. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  371. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  372. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  373. package/dist/src/services/shellExecutionService.test.js +0 -272
  374. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  375. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  376. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  377. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  378. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  379. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  380. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  381. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  382. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  383. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  384. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  385. package/dist/src/telemetry/loggers.test.js +0 -572
  386. package/dist/src/telemetry/loggers.test.js.map +0 -1
  387. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  388. package/dist/src/telemetry/metrics.test.js +0 -162
  389. package/dist/src/telemetry/metrics.test.js.map +0 -1
  390. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  391. package/dist/src/telemetry/telemetry.test.js +0 -54
  392. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  393. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  394. package/dist/src/telemetry/uiTelemetry.test.js +0 -517
  395. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  396. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  397. package/dist/src/tools/ToolFormatter.test.js +0 -349
  398. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  399. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  400. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  401. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  402. package/dist/src/tools/edit.test.d.ts +0 -6
  403. package/dist/src/tools/edit.test.js +0 -663
  404. package/dist/src/tools/edit.test.js.map +0 -1
  405. package/dist/src/tools/glob.test.d.ts +0 -6
  406. package/dist/src/tools/glob.test.js +0 -321
  407. package/dist/src/tools/glob.test.js.map +0 -1
  408. package/dist/src/tools/grep.test.d.ts +0 -6
  409. package/dist/src/tools/grep.test.js +0 -258
  410. package/dist/src/tools/grep.test.js.map +0 -1
  411. package/dist/src/tools/ls.test.d.ts +0 -6
  412. package/dist/src/tools/ls.test.js +0 -357
  413. package/dist/src/tools/ls.test.js.map +0 -1
  414. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  415. package/dist/src/tools/mcp-client.test.js +0 -575
  416. package/dist/src/tools/mcp-client.test.js.map +0 -1
  417. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  418. package/dist/src/tools/mcp-tool.test.js +0 -501
  419. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  420. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  421. package/dist/src/tools/memoryTool.test.js +0 -266
  422. package/dist/src/tools/memoryTool.test.js.map +0 -1
  423. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  424. package/dist/src/tools/modifiable-tool.test.js +0 -193
  425. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  426. package/dist/src/tools/read-file.test.d.ts +0 -6
  427. package/dist/src/tools/read-file.test.js +0 -313
  428. package/dist/src/tools/read-file.test.js.map +0 -1
  429. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  430. package/dist/src/tools/read-many-files.test.js +0 -644
  431. package/dist/src/tools/read-many-files.test.js.map +0 -1
  432. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  433. package/dist/src/tools/shell.multibyte.test.js +0 -75
  434. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  435. package/dist/src/tools/shell.test.d.ts +0 -6
  436. package/dist/src/tools/shell.test.js +0 -350
  437. package/dist/src/tools/shell.test.js.map +0 -1
  438. package/dist/src/tools/todo-read.test.d.ts +0 -6
  439. package/dist/src/tools/todo-read.test.js +0 -162
  440. package/dist/src/tools/todo-read.test.js.map +0 -1
  441. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  442. package/dist/src/tools/todo-schemas.test.js +0 -341
  443. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  444. package/dist/src/tools/todo-store.test.d.ts +0 -6
  445. package/dist/src/tools/todo-store.test.js +0 -169
  446. package/dist/src/tools/todo-store.test.js.map +0 -1
  447. package/dist/src/tools/todo-write.test.d.ts +0 -6
  448. package/dist/src/tools/todo-write.test.js +0 -226
  449. package/dist/src/tools/todo-write.test.js.map +0 -1
  450. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  451. package/dist/src/tools/tool-registry.test.js +0 -468
  452. package/dist/src/tools/tool-registry.test.js.map +0 -1
  453. package/dist/src/tools/tools.test.d.ts +0 -6
  454. package/dist/src/tools/tools.test.js +0 -117
  455. package/dist/src/tools/tools.test.js.map +0 -1
  456. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  457. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  458. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  459. package/dist/src/tools/web-search.test.d.ts +0 -6
  460. package/dist/src/tools/web-search.test.js +0 -229
  461. package/dist/src/tools/web-search.test.js.map +0 -1
  462. package/dist/src/tools/write-file.test.d.ts +0 -6
  463. package/dist/src/tools/write-file.test.js +0 -464
  464. package/dist/src/tools/write-file.test.js.map +0 -1
  465. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  466. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  467. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  468. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  469. package/dist/src/utils/editCorrector.test.js +0 -564
  470. package/dist/src/utils/editCorrector.test.js.map +0 -1
  471. package/dist/src/utils/editor.test.d.ts +0 -6
  472. package/dist/src/utils/editor.test.js +0 -445
  473. package/dist/src/utils/editor.test.js.map +0 -1
  474. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  475. package/dist/src/utils/environmentContext.test.js +0 -139
  476. package/dist/src/utils/environmentContext.test.js.map +0 -1
  477. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  478. package/dist/src/utils/errorReporting.test.js +0 -130
  479. package/dist/src/utils/errorReporting.test.js.map +0 -1
  480. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  481. package/dist/src/utils/fileUtils.test.js +0 -363
  482. package/dist/src/utils/fileUtils.test.js.map +0 -1
  483. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  484. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  485. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  486. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  487. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  488. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  489. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  490. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  491. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  492. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  493. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  494. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  495. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  496. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  497. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  498. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  499. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  500. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  501. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  502. package/dist/src/utils/getFolderStructure.test.js +0 -282
  503. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  504. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  505. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  506. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  507. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  508. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  509. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  510. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  511. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  512. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  513. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  514. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  515. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  516. package/dist/src/utils/partUtils.test.d.ts +0 -6
  517. package/dist/src/utils/partUtils.test.js +0 -130
  518. package/dist/src/utils/partUtils.test.js.map +0 -1
  519. package/dist/src/utils/paths.test.d.ts +0 -6
  520. package/dist/src/utils/paths.test.js +0 -153
  521. package/dist/src/utils/paths.test.js.map +0 -1
  522. package/dist/src/utils/retry.test.d.ts +0 -6
  523. package/dist/src/utils/retry.test.js +0 -322
  524. package/dist/src/utils/retry.test.js.map +0 -1
  525. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  526. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  527. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  528. package/dist/src/utils/sanitization.test.d.ts +0 -6
  529. package/dist/src/utils/sanitization.test.js +0 -81
  530. package/dist/src/utils/sanitization.test.js.map +0 -1
  531. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  532. package/dist/src/utils/schemaValidator.test.js +0 -146
  533. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  534. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  535. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  536. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  537. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  538. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  539. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  540. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  541. package/dist/src/utils/shell-utils.test.js +0 -200
  542. package/dist/src/utils/shell-utils.test.js.map +0 -1
  543. package/dist/src/utils/summarizer.test.d.ts +0 -6
  544. package/dist/src/utils/summarizer.test.js +0 -131
  545. package/dist/src/utils/summarizer.test.js.map +0 -1
  546. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  547. package/dist/src/utils/systemEncoding.test.js +0 -368
  548. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  549. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  550. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  551. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  552. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  553. package/dist/src/utils/unicodeUtils.test.js +0 -120
  554. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  555. package/dist/src/utils/user_account.test.d.ts +0 -6
  556. package/dist/src/utils/user_account.test.js +0 -153
  557. package/dist/src/utils/user_account.test.js.map +0 -1
  558. package/dist/src/utils/user_id.test.d.ts +0 -6
  559. package/dist/src/utils/user_id.test.js +0 -21
  560. package/dist/src/utils/user_id.test.js.map +0 -1
  561. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  562. package/dist/src/utils/workspaceContext.test.js +0 -209
  563. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -1,620 +0,0 @@
1
- /**
2
- * Copyright 2025 Vybestack LLC
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { describe, it, expect, vi, beforeEach } from 'vitest';
17
- import { OpenAIProvider } from './OpenAIProvider.js';
18
- import { ContentGeneratorRole } from '../ContentGeneratorRole.js';
19
- import { TEST_PROVIDER_CONFIG } from '../test-utils/providerTestConfig.js';
20
- // Mock OpenAI module
21
- vi.mock('openai', () => ({
22
- default: vi.fn().mockImplementation(() => ({
23
- chat: {
24
- completions: {
25
- create: vi.fn(),
26
- },
27
- },
28
- models: {
29
- list: vi.fn(),
30
- },
31
- })),
32
- }));
33
- describe('OpenAIProvider', () => {
34
- let provider;
35
- let mockOpenAIInstance;
36
- let capturedApiParams;
37
- beforeEach(() => {
38
- vi.clearAllMocks();
39
- provider = new OpenAIProvider('test-api-key', undefined, TEST_PROVIDER_CONFIG);
40
- // Set a model that doesn't use the Responses API
41
- provider.setModel('gpt-3.5-turbo');
42
- // Get the mocked OpenAI instance (typed as unknown then cast)
43
- mockOpenAIInstance = provider.openai; // Cast for test
44
- // Reset captured params
45
- capturedApiParams = undefined;
46
- });
47
- describe('generateChatCompletion with usage tracking', () => {
48
- it('should include stream_options with include_usage', async () => {
49
- const mockStream = {
50
- async *[Symbol.asyncIterator]() {
51
- yield {
52
- choices: [{ delta: { content: 'Hello' } }],
53
- };
54
- yield {
55
- choices: [{ delta: { content: ' world' } }],
56
- usage: {
57
- prompt_tokens: 10,
58
- completion_tokens: 5,
59
- total_tokens: 15,
60
- },
61
- };
62
- },
63
- };
64
- // Capture the parameters passed to the API
65
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
66
- capturedApiParams = params;
67
- return mockStream;
68
- });
69
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Hi' }];
70
- const generator = provider.generateChatCompletion(messages);
71
- const results = [];
72
- for await (const chunk of generator) {
73
- results.push(chunk);
74
- }
75
- // Test the actual parameters that would be sent to the API
76
- expect(capturedApiParams).toBeDefined();
77
- const apiParams = capturedApiParams;
78
- expect(apiParams.stream).toBe(true);
79
- expect(apiParams.stream_options).toEqual({ include_usage: true });
80
- });
81
- it('should yield usage data when provided in stream', async () => {
82
- const mockStream = {
83
- async *[Symbol.asyncIterator]() {
84
- yield {
85
- choices: [{ delta: { content: 'Test response' } }],
86
- };
87
- yield {
88
- choices: [{ delta: {} }],
89
- usage: {
90
- prompt_tokens: 20,
91
- completion_tokens: 10,
92
- total_tokens: 30,
93
- },
94
- };
95
- },
96
- };
97
- mockOpenAIInstance.chat.completions.create.mockResolvedValue(mockStream);
98
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
99
- const generator = provider.generateChatCompletion(messages);
100
- const results = [];
101
- for await (const chunk of generator) {
102
- results.push(chunk);
103
- }
104
- // Should have content chunk and usage chunk
105
- expect(results).toHaveLength(2);
106
- // Check content chunk
107
- expect(results[0]).toMatchObject({
108
- role: ContentGeneratorRole.ASSISTANT,
109
- content: 'Test response',
110
- });
111
- // Check usage chunk
112
- expect(results[1]).toMatchObject({
113
- role: ContentGeneratorRole.ASSISTANT,
114
- content: '',
115
- usage: {
116
- prompt_tokens: 20,
117
- completion_tokens: 10,
118
- total_tokens: 30,
119
- },
120
- });
121
- });
122
- it('should handle usage data with tool calls', async () => {
123
- const mockStream = {
124
- async *[Symbol.asyncIterator]() {
125
- yield {
126
- choices: [
127
- {
128
- delta: {
129
- tool_calls: [
130
- {
131
- index: 0,
132
- id: 'call_123',
133
- function: {
134
- name: 'test_tool',
135
- arguments: '{"param": "value"}',
136
- },
137
- },
138
- ],
139
- },
140
- },
141
- ],
142
- };
143
- yield {
144
- choices: [{ delta: {} }],
145
- usage: {
146
- prompt_tokens: 50,
147
- completion_tokens: 25,
148
- total_tokens: 75,
149
- },
150
- };
151
- },
152
- };
153
- mockOpenAIInstance.chat.completions.create.mockResolvedValue(mockStream);
154
- const messages = [
155
- { role: ContentGeneratorRole.USER, content: 'Use a tool' },
156
- ];
157
- const tools = [
158
- {
159
- type: 'function',
160
- function: {
161
- name: 'test_tool',
162
- parameters: { type: 'object', properties: {} },
163
- },
164
- },
165
- ];
166
- const generator = provider.generateChatCompletion(messages, tools);
167
- const results = [];
168
- for await (const chunk of generator) {
169
- results.push(chunk);
170
- }
171
- // Should yield tool call with usage data
172
- expect(results).toHaveLength(1);
173
- expect(results[0]).toMatchObject({
174
- role: ContentGeneratorRole.ASSISTANT,
175
- content: '',
176
- tool_calls: [
177
- {
178
- id: 'call_123',
179
- type: 'function',
180
- function: {
181
- name: 'test_tool',
182
- arguments: '{"param": "value"}',
183
- },
184
- },
185
- ],
186
- usage: {
187
- prompt_tokens: 50,
188
- completion_tokens: 25,
189
- total_tokens: 75,
190
- },
191
- });
192
- });
193
- });
194
- describe('stream_options ephemeral settings', () => {
195
- it('should omit stream_options when set to null via ephemeral settings', async () => {
196
- // Create provider with config that returns null for stream-options
197
- const configWithNullStreamOptions = {
198
- ...TEST_PROVIDER_CONFIG,
199
- getEphemeralSettings: () => ({ 'stream-options': null }),
200
- };
201
- const providerWithNullStreamOptions = new OpenAIProvider('test-key', undefined, configWithNullStreamOptions);
202
- providerWithNullStreamOptions.setModel('gpt-3.5-turbo');
203
- const mockInstance = providerWithNullStreamOptions.openai;
204
- const mockStream = {
205
- async *[Symbol.asyncIterator]() {
206
- yield {
207
- choices: [{ delta: { content: 'Hello' } }],
208
- };
209
- },
210
- };
211
- let localCapturedParams;
212
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
213
- localCapturedParams = params;
214
- return mockStream;
215
- });
216
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
217
- const generator = providerWithNullStreamOptions.generateChatCompletion(messages);
218
- const results = [];
219
- for await (const chunk of generator) {
220
- results.push(chunk);
221
- }
222
- // Verify stream_options is NOT included when set to null
223
- expect(localCapturedParams).toBeDefined();
224
- const apiParams = localCapturedParams;
225
- expect(apiParams.stream).toBe(true);
226
- expect(apiParams).not.toHaveProperty('stream_options');
227
- });
228
- it('should use custom stream_options from ephemeral settings', async () => {
229
- // Create provider with custom stream_options
230
- const configWithCustomStreamOptions = {
231
- ...TEST_PROVIDER_CONFIG,
232
- getEphemeralSettings: () => ({
233
- 'stream-options': { include_usage: false, custom_field: true },
234
- }),
235
- };
236
- const providerWithCustomStreamOptions = new OpenAIProvider('test-key', undefined, configWithCustomStreamOptions);
237
- providerWithCustomStreamOptions.setModel('gpt-3.5-turbo');
238
- const mockInstance = providerWithCustomStreamOptions.openai;
239
- const mockStream = {
240
- async *[Symbol.asyncIterator]() {
241
- yield {
242
- choices: [{ delta: { content: 'Hello' } }],
243
- };
244
- },
245
- };
246
- let localCapturedParams;
247
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
248
- localCapturedParams = params;
249
- return mockStream;
250
- });
251
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
252
- const generator = providerWithCustomStreamOptions.generateChatCompletion(messages);
253
- const results = [];
254
- for await (const chunk of generator) {
255
- results.push(chunk);
256
- }
257
- // Verify custom stream_options is used
258
- expect(localCapturedParams).toBeDefined();
259
- const apiParams = localCapturedParams;
260
- expect(apiParams.stream).toBe(true);
261
- expect(apiParams.stream_options).toEqual({
262
- include_usage: false,
263
- custom_field: true,
264
- });
265
- });
266
- it('should use default stream_options when ephemeral setting is undefined', async () => {
267
- // Create provider with no stream-options in ephemeral settings
268
- const configWithoutStreamOptions = {
269
- ...TEST_PROVIDER_CONFIG,
270
- getEphemeralSettings: () => ({}), // No stream-options key
271
- };
272
- const providerWithDefaults = new OpenAIProvider('test-key', undefined, configWithoutStreamOptions);
273
- providerWithDefaults.setModel('gpt-3.5-turbo');
274
- const mockInstance = providerWithDefaults.openai;
275
- const mockStream = {
276
- async *[Symbol.asyncIterator]() {
277
- yield {
278
- choices: [{ delta: { content: 'Hello' } }],
279
- };
280
- },
281
- };
282
- let localCapturedParams;
283
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
284
- localCapturedParams = params;
285
- return mockStream;
286
- });
287
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
288
- const generator = providerWithDefaults.generateChatCompletion(messages);
289
- const results = [];
290
- for await (const chunk of generator) {
291
- results.push(chunk);
292
- }
293
- // Verify default stream_options is used
294
- expect(localCapturedParams).toBeDefined();
295
- const apiParams = localCapturedParams;
296
- expect(apiParams.stream).toBe(true);
297
- expect(apiParams.stream_options).toEqual({ include_usage: true });
298
- });
299
- });
300
- describe('model management', () => {
301
- it('should set and get current model', () => {
302
- // We set it to gpt-3.5-turbo in beforeEach to avoid Responses API
303
- expect(provider.getCurrentModel()).toBe('gpt-3.5-turbo');
304
- provider.setModel('gpt-4o');
305
- expect(provider.getCurrentModel()).toBe('gpt-4o');
306
- });
307
- });
308
- describe('configuration methods', () => {
309
- it('should update API key', () => {
310
- const newKey = 'new-test-key';
311
- provider.setApiKey(newKey);
312
- // Verify new OpenAI instance was created
313
- expect(provider.apiKey).toBe(newKey);
314
- });
315
- it('should accept empty API key', () => {
316
- // Should not throw error for empty API key
317
- expect(() => provider.setApiKey('')).not.toThrow();
318
- expect(() => provider.setApiKey(' ')).not.toThrow();
319
- });
320
- it('should update base URL', () => {
321
- const newUrl = 'https://custom.openai.com';
322
- provider.setBaseUrl(newUrl);
323
- // Verify new OpenAI instance was created with base URL
324
- expect(provider.baseURL).toBe(newUrl);
325
- });
326
- });
327
- describe('model parameters functionality', () => {
328
- describe('setting and getting model parameters', () => {
329
- it('should store model parameters when set', () => {
330
- // When I set model parameters
331
- provider.setModelParams({ temperature: 0.7 });
332
- // Then they should be retrievable
333
- const params = provider.getModelParams();
334
- expect(params).toEqual({ temperature: 0.7 });
335
- });
336
- it('should return undefined when no model parameters are set', () => {
337
- // Given a fresh provider with no parameters set
338
- const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
339
- // When I get model parameters
340
- const params = freshProvider.getModelParams();
341
- // Then it should return undefined
342
- expect(params).toBeUndefined();
343
- });
344
- it('should merge new parameters with existing ones instead of replacing', () => {
345
- // Given I have set some initial parameters
346
- provider.setModelParams({ temperature: 0.7, max_tokens: 1000 });
347
- // When I set additional parameters
348
- provider.setModelParams({ top_p: 0.9, temperature: 0.5 });
349
- // Then all parameters should be merged with new values overriding old
350
- const params = provider.getModelParams();
351
- expect(params).toEqual({
352
- temperature: 0.5, // Updated value
353
- max_tokens: 1000, // Retained from first call
354
- top_p: 0.9, // New parameter
355
- });
356
- });
357
- it('should accept any parameter names without validation', () => {
358
- // When I set various parameter types including unknown ones
359
- provider.setModelParams({
360
- temperature: 0.8,
361
- max_tokens: 2048,
362
- top_p: 0.95,
363
- unknown_param: 'should_work',
364
- nested_object: { key: 'value' },
365
- numeric_string: '123',
366
- });
367
- // Then all parameters should be stored as-is
368
- const params = provider.getModelParams();
369
- expect(params).toEqual({
370
- temperature: 0.8,
371
- max_tokens: 2048,
372
- top_p: 0.95,
373
- unknown_param: 'should_work',
374
- nested_object: { key: 'value' },
375
- numeric_string: '123',
376
- });
377
- });
378
- });
379
- describe('passing parameters to OpenAI API', () => {
380
- it('should include model parameters in chat completions API call', async () => {
381
- // Given I have set model parameters
382
- provider.setModelParams({
383
- temperature: 0.7,
384
- max_tokens: 2000,
385
- top_p: 0.9,
386
- });
387
- // And the API returns a response
388
- const mockStream = {
389
- async *[Symbol.asyncIterator]() {
390
- yield {
391
- choices: [{ delta: { content: 'Response' } }],
392
- };
393
- },
394
- };
395
- // Capture the parameters passed to the API
396
- let localCapturedParams;
397
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
398
- localCapturedParams = params;
399
- return mockStream;
400
- });
401
- // When I generate a chat completion
402
- const messages = [
403
- { role: ContentGeneratorRole.USER, content: 'Hello' },
404
- ];
405
- const generator = provider.generateChatCompletion(messages);
406
- const results = [];
407
- for await (const chunk of generator) {
408
- results.push(chunk);
409
- }
410
- // Then the API should receive the model parameters
411
- expect(localCapturedParams).toBeDefined();
412
- const apiParams = localCapturedParams;
413
- expect(apiParams.temperature).toBe(0.7);
414
- expect(apiParams.max_tokens).toBe(2000);
415
- expect(apiParams.top_p).toBe(0.9);
416
- expect(apiParams.model).toBe('gpt-3.5-turbo');
417
- expect(apiParams.messages).toEqual(messages);
418
- expect(apiParams.stream).toBe(true);
419
- expect(apiParams.stream_options).toEqual({ include_usage: true });
420
- });
421
- it('should make API calls without parameters when none are set', async () => {
422
- // Given no model parameters are set (fresh provider)
423
- const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
424
- freshProvider.setModel('gpt-3.5-turbo');
425
- const freshMockInstance = freshProvider.openai;
426
- // And the API returns a response
427
- const mockStream = {
428
- async *[Symbol.asyncIterator]() {
429
- yield {
430
- choices: [{ delta: { content: 'Response' } }],
431
- };
432
- },
433
- };
434
- // Capture the parameters passed to the API
435
- let localCapturedParams;
436
- freshMockInstance.chat.completions.create.mockImplementation(async (params) => {
437
- localCapturedParams = params;
438
- return mockStream;
439
- });
440
- // When I generate a chat completion
441
- const messages = [
442
- { role: ContentGeneratorRole.USER, content: 'Hello' },
443
- ];
444
- const generator = freshProvider.generateChatCompletion(messages);
445
- const results = [];
446
- for await (const chunk of generator) {
447
- results.push(chunk);
448
- }
449
- // Then the API should be called without extra parameters
450
- expect(localCapturedParams).toBeDefined();
451
- const apiParams = localCapturedParams;
452
- expect(apiParams).not.toHaveProperty('temperature');
453
- expect(apiParams).not.toHaveProperty('max_tokens');
454
- expect(apiParams).not.toHaveProperty('top_p');
455
- });
456
- it('should pass multiple model parameters correctly to the API', async () => {
457
- // Given I have set multiple diverse parameters
458
- provider.setModelParams({
459
- temperature: 0.5,
460
- max_tokens: 4096,
461
- top_p: 0.95,
462
- presence_penalty: 0.1,
463
- frequency_penalty: 0.2,
464
- seed: 12345,
465
- });
466
- // And the API returns a response
467
- const mockStream = {
468
- async *[Symbol.asyncIterator]() {
469
- yield {
470
- choices: [{ delta: { content: 'Response' } }],
471
- };
472
- },
473
- };
474
- // Capture the parameters passed to the API
475
- let localCapturedParams;
476
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
477
- localCapturedParams = params;
478
- return mockStream;
479
- });
480
- // When I generate a chat completion
481
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
482
- const generator = provider.generateChatCompletion(messages);
483
- for await (const _chunk of generator) {
484
- // consume the generator
485
- }
486
- // Then all parameters should be passed to the API
487
- expect(localCapturedParams).toBeDefined();
488
- const apiParams = localCapturedParams;
489
- expect(apiParams.temperature).toBe(0.5);
490
- expect(apiParams.max_tokens).toBe(4096);
491
- expect(apiParams.top_p).toBe(0.95);
492
- expect(apiParams.presence_penalty).toBe(0.1);
493
- expect(apiParams.frequency_penalty).toBe(0.2);
494
- expect(apiParams.seed).toBe(12345);
495
- });
496
- it('should pass unknown parameters through to the API without validation', async () => {
497
- // Given I set parameters that might not be standard OpenAI params
498
- provider.setModelParams({
499
- custom_param: 'custom_value',
500
- experimental_feature: true,
501
- vendor_specific: { nested: 'data' },
502
- });
503
- // And the API returns a response
504
- const mockStream = {
505
- async *[Symbol.asyncIterator]() {
506
- yield {
507
- choices: [{ delta: { content: 'Response' } }],
508
- };
509
- },
510
- };
511
- // Capture the parameters passed to the API
512
- let localCapturedParams;
513
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
514
- localCapturedParams = params;
515
- return mockStream;
516
- });
517
- // When I generate a chat completion
518
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
519
- const generator = provider.generateChatCompletion(messages);
520
- for await (const _chunk of generator) {
521
- // consume the generator
522
- }
523
- // Then unknown parameters should be passed through
524
- expect(localCapturedParams).toBeDefined();
525
- const apiParams = localCapturedParams;
526
- expect(apiParams.custom_param).toBe('custom_value');
527
- expect(apiParams.experimental_feature).toBe(true);
528
- expect(apiParams.vendor_specific).toEqual({ nested: 'data' });
529
- });
530
- it('should use model parameters across multiple API calls', async () => {
531
- // Given I set model parameters once
532
- provider.setModelParams({ temperature: 0.8 });
533
- // And the API returns responses
534
- const mockStream = {
535
- async *[Symbol.asyncIterator]() {
536
- yield {
537
- choices: [{ delta: { content: 'Response' } }],
538
- };
539
- },
540
- };
541
- // Capture parameters from multiple calls
542
- const capturedParamsArray = [];
543
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
544
- capturedParamsArray.push(params);
545
- return mockStream;
546
- });
547
- // When I make multiple API calls
548
- const messages = [
549
- { role: ContentGeneratorRole.USER, content: 'Hello' },
550
- ];
551
- // First call
552
- const generator1 = provider.generateChatCompletion(messages);
553
- for await (const _chunk of generator1) {
554
- // consume
555
- }
556
- // Second call
557
- const generator2 = provider.generateChatCompletion(messages);
558
- for await (const _chunk of generator2) {
559
- // consume
560
- }
561
- // Then both calls should include the parameters
562
- expect(capturedParamsArray).toHaveLength(2);
563
- const firstCallParams = capturedParamsArray[0];
564
- const secondCallParams = capturedParamsArray[1];
565
- expect(firstCallParams.temperature).toBe(0.8);
566
- expect(secondCallParams.temperature).toBe(0.8);
567
- });
568
- it('should work correctly with common OpenAI parameters', async () => {
569
- // Given I set common OpenAI parameters
570
- provider.setModelParams({
571
- temperature: 0.7, // Controls randomness
572
- max_tokens: 2048, // Maximum response length
573
- top_p: 0.9, // Nucleus sampling
574
- presence_penalty: 0.5, // Penalize repeated topics
575
- frequency_penalty: 0.3, // Penalize repeated tokens
576
- });
577
- // And the API returns a response
578
- const mockStream = {
579
- async *[Symbol.asyncIterator]() {
580
- yield {
581
- choices: [{ delta: { content: 'Creative response' } }],
582
- };
583
- },
584
- };
585
- // Capture the parameters passed to the API
586
- let localCapturedParams;
587
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
588
- localCapturedParams = params;
589
- return mockStream;
590
- });
591
- // When I generate a chat completion
592
- const messages = [
593
- {
594
- role: ContentGeneratorRole.USER,
595
- content: 'Write something creative',
596
- },
597
- ];
598
- const generator = provider.generateChatCompletion(messages);
599
- const results = [];
600
- for await (const chunk of generator) {
601
- results.push(chunk);
602
- }
603
- // Then the response should be generated with all parameters
604
- expect(results[0]).toMatchObject({
605
- role: ContentGeneratorRole.ASSISTANT,
606
- content: 'Creative response',
607
- });
608
- // And all parameters should have been passed to the API
609
- expect(localCapturedParams).toBeDefined();
610
- const apiParams = localCapturedParams;
611
- expect(apiParams.temperature).toBe(0.7);
612
- expect(apiParams.max_tokens).toBe(2048);
613
- expect(apiParams.top_p).toBe(0.9);
614
- expect(apiParams.presence_penalty).toBe(0.5);
615
- expect(apiParams.frequency_penalty).toBe(0.3);
616
- });
617
- });
618
- });
619
- });
620
- //# sourceMappingURL=OpenAIProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}