@vybestack/llxprt-code-core 0.1.12 → 0.1.13-hotfix1

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 (327) hide show
  1. package/dist/src/adapters/IStreamAdapter.d.ts +18 -0
  2. package/dist/src/adapters/IStreamAdapter.js +7 -0
  3. package/dist/src/adapters/IStreamAdapter.js.map +1 -0
  4. package/dist/src/code_assist/oauth2.d.ts +1 -1
  5. package/dist/src/code_assist/oauth2.js +51 -29
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +36 -7
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/code_assist/server.test.js +10 -2
  10. package/dist/src/code_assist/server.test.js.map +1 -1
  11. package/dist/src/config/config.d.ts +28 -5
  12. package/dist/src/config/config.js +29 -4
  13. package/dist/src/config/config.js.map +1 -1
  14. package/dist/src/config/config.test.js +2 -3
  15. package/dist/src/config/config.test.js.map +1 -1
  16. package/dist/src/core/client.d.ts +4 -2
  17. package/dist/src/core/client.js +68 -7
  18. package/dist/src/core/client.js.map +1 -1
  19. package/dist/src/core/client.test.js +8 -0
  20. package/dist/src/core/client.test.js.map +1 -1
  21. package/dist/src/core/contentGenerator.d.ts +3 -2
  22. package/dist/src/core/contentGenerator.js +6 -8
  23. package/dist/src/core/contentGenerator.js.map +1 -1
  24. package/dist/src/core/contentGenerator.test.js +12 -5
  25. package/dist/src/core/contentGenerator.test.js.map +1 -1
  26. package/dist/src/core/coreToolScheduler.test.js +4 -2
  27. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  28. package/dist/src/core/geminiChat.js +50 -3
  29. package/dist/src/core/geminiChat.js.map +1 -1
  30. package/dist/src/core/modelCheck.d.ts +1 -1
  31. package/dist/src/core/modelCheck.js +10 -3
  32. package/dist/src/core/modelCheck.js.map +1 -1
  33. package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -0
  34. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  35. package/dist/src/core/prompts.d.ts +1 -1
  36. package/dist/src/core/prompts.js +14 -2
  37. package/dist/src/core/prompts.js.map +1 -1
  38. package/dist/src/core/turn.js +6 -0
  39. package/dist/src/core/turn.js.map +1 -1
  40. package/dist/src/index.d.ts +29 -1
  41. package/dist/src/index.js +33 -0
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/mcp/oauth-provider.d.ts +142 -0
  44. package/dist/src/mcp/oauth-provider.js +446 -0
  45. package/dist/src/mcp/oauth-provider.js.map +1 -0
  46. package/dist/src/mcp/oauth-provider.test.js +520 -0
  47. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  48. package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
  49. package/dist/src/mcp/oauth-token-storage.js +149 -0
  50. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  51. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  52. package/dist/src/mcp/oauth-token-storage.test.js +205 -0
  53. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  54. package/dist/src/mcp/oauth-utils.d.ts +109 -0
  55. package/dist/src/mcp/oauth-utils.js +183 -0
  56. package/dist/src/mcp/oauth-utils.js.map +1 -0
  57. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  58. package/dist/src/mcp/oauth-utils.test.js +144 -0
  59. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  60. package/dist/src/parsers/TextToolCallParser.d.ts +35 -0
  61. package/dist/src/parsers/TextToolCallParser.js +248 -0
  62. package/dist/src/parsers/TextToolCallParser.js.map +1 -0
  63. package/dist/src/parsers/TextToolCallParser.test.d.ts +1 -0
  64. package/dist/src/parsers/TextToolCallParser.test.js +225 -0
  65. package/dist/src/parsers/TextToolCallParser.test.js.map +1 -0
  66. package/dist/src/providers/ContentGeneratorRole.d.ts +14 -0
  67. package/dist/src/providers/ContentGeneratorRole.js +16 -0
  68. package/dist/src/providers/ContentGeneratorRole.js.map +1 -0
  69. package/dist/src/providers/IMessage.d.ts +38 -0
  70. package/dist/src/providers/IMessage.js +17 -0
  71. package/dist/src/providers/IMessage.js.map +1 -0
  72. package/dist/src/providers/IModel.d.ts +23 -0
  73. package/dist/src/providers/IModel.js +17 -0
  74. package/dist/src/providers/IModel.js.map +1 -0
  75. package/dist/src/providers/IProvider.d.ts +36 -0
  76. package/dist/src/providers/IProvider.js +17 -0
  77. package/dist/src/providers/IProvider.js.map +1 -0
  78. package/dist/src/providers/IProviderConfig.d.ts +31 -0
  79. package/dist/src/providers/IProviderConfig.js +7 -0
  80. package/dist/src/providers/IProviderConfig.js.map +1 -0
  81. package/dist/src/providers/IProviderManager.d.ts +53 -0
  82. package/dist/src/providers/IProviderManager.js +7 -0
  83. package/dist/src/providers/IProviderManager.js.map +1 -0
  84. package/dist/src/providers/ITool.d.ts +23 -0
  85. package/dist/src/providers/ITool.js +17 -0
  86. package/dist/src/providers/ITool.js.map +1 -0
  87. package/dist/src/providers/ProviderContentGenerator.d.ts +1 -1
  88. package/dist/src/providers/ProviderManager.d.ts +24 -0
  89. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +6 -0
  90. package/dist/src/providers/ProviderManager.gemini-switch.test.js +57 -0
  91. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +1 -0
  92. package/dist/src/providers/ProviderManager.js +116 -0
  93. package/dist/src/providers/ProviderManager.js.map +1 -0
  94. package/dist/src/providers/ProviderManager.test.d.ts +6 -0
  95. package/dist/src/providers/ProviderManager.test.js +284 -0
  96. package/dist/src/providers/ProviderManager.test.js.map +1 -0
  97. package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +2 -1
  98. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +15 -2
  99. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -1
  100. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +20 -0
  101. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -1
  102. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +57 -0
  103. package/dist/src/providers/anthropic/AnthropicProvider.js +490 -0
  104. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -0
  105. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +1 -0
  106. package/dist/src/providers/anthropic/AnthropicProvider.test.js +486 -0
  107. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -0
  108. package/dist/src/providers/errors.d.ts +13 -0
  109. package/dist/src/providers/errors.js +19 -0
  110. package/dist/src/providers/errors.js.map +1 -0
  111. package/dist/src/providers/gemini/GeminiProvider.d.ts +97 -0
  112. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +6 -0
  113. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +90 -0
  114. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +1 -0
  115. package/dist/src/providers/gemini/GeminiProvider.js +937 -0
  116. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -0
  117. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +6 -0
  118. package/dist/src/providers/gemini/GeminiProvider.test.js +136 -0
  119. package/dist/src/providers/gemini/GeminiProvider.test.js.map +1 -0
  120. package/dist/src/providers/integration/TEST_INSTRUCTIONS.md +197 -0
  121. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +6 -0
  122. package/dist/src/providers/integration/multi-provider.integration.test.js +292 -0
  123. package/dist/src/providers/integration/multi-provider.integration.test.js.map +1 -0
  124. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +1 -0
  125. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +97 -0
  126. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +1 -0
  127. package/dist/src/providers/openai/ConversationCache.d.ts +20 -0
  128. package/dist/src/providers/openai/ConversationCache.js +109 -0
  129. package/dist/src/providers/openai/ConversationCache.js.map +1 -0
  130. package/dist/src/providers/openai/ConversationCache.test.d.ts +1 -0
  131. package/dist/src/providers/openai/ConversationCache.test.js +113 -0
  132. package/dist/src/providers/openai/ConversationCache.test.js.map +1 -0
  133. package/dist/src/providers/openai/IChatGenerateParams.d.ts +11 -0
  134. package/dist/src/providers/openai/IChatGenerateParams.js +2 -0
  135. package/dist/src/providers/openai/IChatGenerateParams.js.map +1 -0
  136. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +1 -0
  137. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +189 -0
  138. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +1 -0
  139. package/dist/src/providers/openai/OpenAIProvider.d.ts +80 -0
  140. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +6 -0
  141. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +125 -0
  142. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +1 -0
  143. package/dist/src/providers/openai/OpenAIProvider.js +523 -0
  144. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -0
  145. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +1 -0
  146. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +326 -0
  147. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -0
  148. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +1 -0
  149. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +213 -0
  150. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +1 -0
  151. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +1 -0
  152. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +58 -0
  153. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -0
  154. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +6 -0
  155. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +105 -0
  156. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +1 -0
  157. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +1 -0
  158. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +256 -0
  159. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +1 -0
  160. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +16 -0
  161. package/dist/src/providers/openai/OpenAIProvider.test.js +214 -0
  162. package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -0
  163. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +2 -0
  164. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +14 -0
  165. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -0
  166. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +1 -0
  167. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +210 -0
  168. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +1 -0
  169. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +1 -0
  170. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +65 -0
  171. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +1 -0
  172. package/dist/src/providers/openai/buildResponsesRequest.d.ts +73 -0
  173. package/dist/src/providers/openai/buildResponsesRequest.js +165 -0
  174. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -0
  175. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +1 -0
  176. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +129 -0
  177. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +1 -0
  178. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +1 -0
  179. package/dist/src/providers/openai/buildResponsesRequest.test.js +406 -0
  180. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +1 -0
  181. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +1 -0
  182. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +50 -0
  183. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +1 -0
  184. package/dist/src/providers/openai/docs/accessing-provider-info.md +172 -0
  185. package/dist/src/providers/openai/docs/params-mapping.md +91 -0
  186. package/dist/src/providers/openai/docs/responses-api-tool-calls.md +96 -0
  187. package/dist/src/providers/openai/estimateRemoteTokens.d.ts +26 -0
  188. package/dist/src/providers/openai/estimateRemoteTokens.js +75 -0
  189. package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -0
  190. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +1 -0
  191. package/dist/src/providers/openai/estimateRemoteTokens.test.js +125 -0
  192. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +1 -0
  193. package/dist/src/providers/openai/getOpenAIProviderInfo.d.ts +46 -0
  194. package/dist/src/providers/openai/getOpenAIProviderInfo.js +75 -0
  195. package/dist/src/providers/openai/getOpenAIProviderInfo.js.map +1 -0
  196. package/dist/src/providers/openai/parseResponsesStream.d.ts +3 -0
  197. package/dist/src/providers/openai/parseResponsesStream.js +462 -0
  198. package/dist/src/providers/openai/parseResponsesStream.js.map +1 -0
  199. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +1 -0
  200. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +192 -0
  201. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +1 -0
  202. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +1 -0
  203. package/dist/src/providers/openai/parseResponsesStream.test.js +151 -0
  204. package/dist/src/providers/openai/parseResponsesStream.test.js.map +1 -0
  205. package/dist/src/providers/tokenizers/AnthropicTokenizer.d.ts +19 -0
  206. package/dist/src/providers/tokenizers/AnthropicTokenizer.js +37 -0
  207. package/dist/src/providers/tokenizers/AnthropicTokenizer.js.map +1 -0
  208. package/dist/src/providers/tokenizers/ITokenizer.d.ts +18 -0
  209. package/dist/src/providers/tokenizers/ITokenizer.js +17 -0
  210. package/dist/src/providers/tokenizers/ITokenizer.js.map +1 -0
  211. package/dist/src/providers/tokenizers/OpenAITokenizer.d.ts +24 -0
  212. package/dist/src/providers/tokenizers/OpenAITokenizer.js +56 -0
  213. package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -0
  214. package/dist/src/providers/types/IProviderConfig.d.ts +102 -0
  215. package/dist/src/providers/types/IProviderConfig.js +17 -0
  216. package/dist/src/providers/types/IProviderConfig.js.map +1 -0
  217. package/dist/src/providers/types.d.ts +4 -69
  218. package/dist/src/services/ideContext.d.ts +2 -0
  219. package/dist/src/services/ideContext.js +8 -0
  220. package/dist/src/services/ideContext.js.map +1 -1
  221. package/dist/src/services/ideContext.test.js +10 -0
  222. package/dist/src/services/ideContext.test.js.map +1 -1
  223. package/dist/src/services/loopDetectionService.d.ts +17 -1
  224. package/dist/src/services/loopDetectionService.js +117 -2
  225. package/dist/src/services/loopDetectionService.js.map +1 -1
  226. package/dist/src/services/loopDetectionService.test.js +109 -2
  227. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  228. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -0
  229. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +40 -2
  230. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  231. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -0
  232. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
  233. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  234. package/dist/src/telemetry/sdk.js +0 -2
  235. package/dist/src/telemetry/sdk.js.map +1 -1
  236. package/dist/src/telemetry/types.d.ts +2 -1
  237. package/dist/src/telemetry/types.js +1 -0
  238. package/dist/src/telemetry/types.js.map +1 -1
  239. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  240. package/dist/src/telemetry/uiTelemetry.js +7 -0
  241. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  242. package/dist/src/telemetry/uiTelemetry.test.js +92 -0
  243. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  244. package/dist/src/tools/IToolFormatter.d.ts +40 -0
  245. package/dist/src/tools/IToolFormatter.js +17 -0
  246. package/dist/src/tools/IToolFormatter.js.map +1 -0
  247. package/dist/src/tools/ToolFormatter.d.ts +45 -0
  248. package/dist/src/tools/ToolFormatter.js +216 -0
  249. package/dist/src/tools/ToolFormatter.js.map +1 -0
  250. package/dist/src/tools/ToolFormatter.test.d.ts +16 -0
  251. package/dist/src/tools/ToolFormatter.test.js +349 -0
  252. package/dist/src/tools/ToolFormatter.test.js.map +1 -0
  253. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +1 -0
  254. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +241 -0
  255. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +1 -0
  256. package/dist/src/tools/edit.d.ts +7 -1
  257. package/dist/src/tools/edit.js +19 -7
  258. package/dist/src/tools/edit.js.map +1 -1
  259. package/dist/src/tools/glob.js +2 -2
  260. package/dist/src/tools/glob.js.map +1 -1
  261. package/dist/src/tools/grep.js +2 -2
  262. package/dist/src/tools/grep.js.map +1 -1
  263. package/dist/src/tools/ls.js +2 -2
  264. package/dist/src/tools/ls.js.map +1 -1
  265. package/dist/src/tools/mcp-client.d.ts +0 -2
  266. package/dist/src/tools/mcp-client.js +8 -20
  267. package/dist/src/tools/mcp-client.js.map +1 -1
  268. package/dist/src/tools/mcp-client.test.js +1 -72
  269. package/dist/src/tools/mcp-client.test.js.map +1 -1
  270. package/dist/src/tools/mcp-tool.d.ts +11 -5
  271. package/dist/src/tools/mcp-tool.js +33 -9
  272. package/dist/src/tools/mcp-tool.js.map +1 -1
  273. package/dist/src/tools/mcp-tool.test.js +40 -24
  274. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  275. package/dist/src/tools/memoryTool.js +2 -2
  276. package/dist/src/tools/memoryTool.js.map +1 -1
  277. package/dist/src/tools/read-file.d.ts +2 -1
  278. package/dist/src/tools/read-file.js +5 -2
  279. package/dist/src/tools/read-file.js.map +1 -1
  280. package/dist/src/tools/read-many-files.js +2 -2
  281. package/dist/src/tools/read-many-files.js.map +1 -1
  282. package/dist/src/tools/shell.js +2 -2
  283. package/dist/src/tools/shell.js.map +1 -1
  284. package/dist/src/tools/todo-read.js +2 -2
  285. package/dist/src/tools/todo-read.js.map +1 -1
  286. package/dist/src/tools/todo-write.js +2 -2
  287. package/dist/src/tools/todo-write.js.map +1 -1
  288. package/dist/src/tools/tool-registry.d.ts +0 -1
  289. package/dist/src/tools/tool-registry.js +11 -8
  290. package/dist/src/tools/tool-registry.js.map +1 -1
  291. package/dist/src/tools/tool-registry.test.js +36 -10
  292. package/dist/src/tools/tool-registry.test.js.map +1 -1
  293. package/dist/src/tools/tools.d.ts +37 -2
  294. package/dist/src/tools/tools.js +25 -2
  295. package/dist/src/tools/tools.js.map +1 -1
  296. package/dist/src/tools/web-fetch.integration.test.d.ts +6 -0
  297. package/dist/src/tools/web-fetch.integration.test.js +532 -0
  298. package/dist/src/tools/web-fetch.integration.test.js.map +1 -0
  299. package/dist/src/tools/web-fetch.js +57 -50
  300. package/dist/src/tools/web-fetch.js.map +1 -1
  301. package/dist/src/tools/web-search.js +34 -6
  302. package/dist/src/tools/web-search.js.map +1 -1
  303. package/dist/src/tools/web-search.test.d.ts +6 -0
  304. package/dist/src/tools/web-search.test.js +229 -0
  305. package/dist/src/tools/web-search.test.js.map +1 -0
  306. package/dist/src/tools/write-file.js +12 -5
  307. package/dist/src/tools/write-file.js.map +1 -1
  308. package/dist/src/utils/browser.d.ts +13 -0
  309. package/dist/src/utils/browser.js +49 -0
  310. package/dist/src/utils/browser.js.map +1 -0
  311. package/dist/src/utils/errors.js +4 -4
  312. package/dist/src/utils/errors.js.map +1 -1
  313. package/dist/src/utils/memoryDiscovery.js +5 -1
  314. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  315. package/dist/src/utils/quotaErrorDetection.js +0 -2
  316. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  317. package/dist/src/utils/retry.d.ts +6 -0
  318. package/dist/src/utils/retry.js +1 -1
  319. package/dist/src/utils/retry.js.map +1 -1
  320. package/dist/src/utils/user_account.js +6 -1
  321. package/dist/src/utils/user_account.js.map +1 -1
  322. package/dist/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +6 -3
  324. package/dist/src/tools/web-fetch.test.js +0 -70
  325. package/dist/src/tools/web-fetch.test.js.map +0 -1
  326. package/dist/vybestack-llxprt-code-core-0.1.12.tgz +0 -0
  327. /package/dist/src/{tools/web-fetch.test.d.ts → mcp/oauth-provider.test.d.ts} +0 -0
@@ -0,0 +1,523 @@
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 { ContentGeneratorRole } from '../ContentGeneratorRole.js';
17
+ import { GemmaToolCallParser } from '../../parsers/TextToolCallParser.js';
18
+ import { ToolFormatter } from '../../tools/ToolFormatter.js';
19
+ import OpenAI from 'openai';
20
+ import { RESPONSES_API_MODELS } from './RESPONSES_API_MODELS.js';
21
+ import { ConversationCache } from './ConversationCache.js';
22
+ import { estimateMessagesTokens, estimateRemoteTokens, } from './estimateRemoteTokens.js';
23
+ // ConversationContext removed - using inline conversation ID generation
24
+ import { parseResponsesStream, parseErrorResponse, } from './parseResponsesStream.js';
25
+ import { buildResponsesRequest } from './buildResponsesRequest.js';
26
+ export class OpenAIProvider {
27
+ name = 'openai';
28
+ openai;
29
+ currentModel = 'gpt-4.1';
30
+ apiKey;
31
+ baseURL;
32
+ config;
33
+ toolFormatter;
34
+ toolFormatOverride;
35
+ conversationCache;
36
+ constructor(apiKey, baseURL, config) {
37
+ this.apiKey = apiKey;
38
+ this.baseURL = baseURL;
39
+ this.config = config;
40
+ this.toolFormatter = new ToolFormatter();
41
+ this.conversationCache = new ConversationCache();
42
+ this.openai = new OpenAI({
43
+ apiKey,
44
+ baseURL,
45
+ // Allow browser environment for tests
46
+ dangerouslyAllowBrowser: process.env.NODE_ENV === 'test',
47
+ });
48
+ }
49
+ requiresTextToolCallParsing() {
50
+ if (this.config?.enableTextToolCallParsing === false) {
51
+ return false;
52
+ }
53
+ // Check if current tool format requires text-based parsing
54
+ const currentFormat = this.getToolFormat();
55
+ const textBasedFormats = ['hermes', 'xml', 'llama', 'gemma'];
56
+ if (textBasedFormats.includes(currentFormat)) {
57
+ return true;
58
+ }
59
+ const defaultModels = ['gemma-3-12b-it', 'gemma-2-27b-it'];
60
+ const configuredModels = this.config?.textToolCallModels || [];
61
+ const allModels = [...defaultModels, ...configuredModels];
62
+ return allModels.includes(this.currentModel);
63
+ }
64
+ getToolFormat() {
65
+ // Check manual override first
66
+ if (this.toolFormatOverride) {
67
+ return this.toolFormatOverride;
68
+ }
69
+ // Check for settings override
70
+ if (this.config?.providerToolFormatOverrides?.[this.name]) {
71
+ return this.config.providerToolFormatOverrides[this.name];
72
+ }
73
+ // Auto-detect tool format based on model or base URL
74
+ if (this.currentModel.includes('deepseek') ||
75
+ this.baseURL?.includes('deepseek')) {
76
+ return 'deepseek';
77
+ }
78
+ if (this.currentModel.includes('qwen') || this.baseURL?.includes('qwen')) {
79
+ return 'qwen';
80
+ }
81
+ // Default to OpenAI format
82
+ return 'openai';
83
+ }
84
+ shouldUseResponses(model) {
85
+ // Check env flag override (highest priority)
86
+ if (process.env.OPENAI_RESPONSES_DISABLE === 'true') {
87
+ return false;
88
+ }
89
+ // Check settings override - if explicitly set to false, always respect that
90
+ if (this.config?.openaiResponsesEnabled === false) {
91
+ return false;
92
+ }
93
+ // Never use Responses API for non-OpenAI providers (those with custom base URLs)
94
+ const baseURL = this.baseURL || 'https://api.openai.com/v1';
95
+ if (baseURL !== 'https://api.openai.com/v1') {
96
+ return false;
97
+ }
98
+ // Default: Check if model starts with any of the responses API model prefixes
99
+ return RESPONSES_API_MODELS.some((responsesModel) => model.startsWith(responsesModel));
100
+ }
101
+ async callResponsesEndpoint(messages, tools, options) {
102
+ // Check if API key is available
103
+ if (!this.apiKey || this.apiKey.trim() === '') {
104
+ throw new Error('OpenAI API key is required to make API calls');
105
+ }
106
+ // Remove the stateful mode error to allow O3 to work with conversation IDs
107
+ // Check context usage and warn if getting close to limit
108
+ if (options?.conversationId && options?.parentId) {
109
+ const contextInfo = this.estimateContextUsage(options.conversationId, options.parentId, messages);
110
+ // Warn if less than 4k tokens remaining
111
+ if (contextInfo.tokensRemaining < 4000) {
112
+ if (process.env.DEBUG) {
113
+ console.warn(`[OpenAI] Warning: Only ${contextInfo.tokensRemaining} tokens remaining ` +
114
+ `(${contextInfo.contextUsedPercent.toFixed(1)}% context used). ` +
115
+ `Consider starting a new conversation.`);
116
+ }
117
+ }
118
+ }
119
+ // Check cache for existing conversation
120
+ if (options?.conversationId && options?.parentId) {
121
+ const cachedMessages = this.conversationCache.get(options.conversationId, options.parentId);
122
+ if (cachedMessages) {
123
+ // Return cached messages as an async iterable
124
+ return (async function* () {
125
+ for (const message of cachedMessages) {
126
+ yield message;
127
+ }
128
+ })();
129
+ }
130
+ }
131
+ // Format tools for Responses API
132
+ const formattedTools = tools
133
+ ? this.toolFormatter.toResponsesTool(tools)
134
+ : undefined;
135
+ // Build the request
136
+ const request = buildResponsesRequest({
137
+ model: this.currentModel,
138
+ messages,
139
+ tools: formattedTools,
140
+ stream: options?.stream ?? true,
141
+ conversationId: options?.conversationId,
142
+ parentId: options?.parentId,
143
+ tool_choice: options?.tool_choice,
144
+ });
145
+ // Make the API call
146
+ const baseURL = this.baseURL || 'https://api.openai.com/v1';
147
+ const responsesURL = `${baseURL}/responses`;
148
+ const response = await fetch(responsesURL, {
149
+ method: 'POST',
150
+ headers: {
151
+ Authorization: `Bearer ${this.apiKey}`,
152
+ 'Content-Type': 'application/json',
153
+ },
154
+ body: JSON.stringify(request),
155
+ });
156
+ // Handle errors
157
+ if (!response.ok) {
158
+ const errorBody = await response.text();
159
+ // Handle 422 context_length_exceeded error
160
+ if (response.status === 422 &&
161
+ errorBody.includes('context_length_exceeded')) {
162
+ if (process.env.DEBUG) {
163
+ console.warn('[OpenAI] Context length exceeded, invalidating cache and retrying stateless...');
164
+ }
165
+ // Invalidate the cache for this conversation
166
+ if (options?.conversationId && options?.parentId) {
167
+ this.conversationCache.invalidate(options.conversationId, options.parentId);
168
+ }
169
+ // Retry without conversation context (pure stateless)
170
+ const retryRequest = buildResponsesRequest({
171
+ model: this.currentModel,
172
+ messages,
173
+ tools: formattedTools,
174
+ stream: options?.stream ?? true,
175
+ // Omit conversationId and parentId for stateless retry
176
+ tool_choice: options?.tool_choice,
177
+ });
178
+ const retryResponse = await fetch(responsesURL, {
179
+ method: 'POST',
180
+ headers: {
181
+ Authorization: `Bearer ${this.apiKey}`,
182
+ 'Content-Type': 'application/json',
183
+ },
184
+ body: JSON.stringify(retryRequest),
185
+ });
186
+ if (!retryResponse.ok) {
187
+ const retryErrorBody = await retryResponse.text();
188
+ throw parseErrorResponse(retryResponse.status, retryErrorBody, this.name);
189
+ }
190
+ // Use the retry response
191
+ return this.handleResponsesApiResponse(retryResponse, messages, undefined, // No conversation context on retry
192
+ undefined, options?.stream !== false);
193
+ }
194
+ throw parseErrorResponse(response.status, errorBody, this.name);
195
+ }
196
+ // Handle the response
197
+ return this.handleResponsesApiResponse(response, messages, options?.conversationId, options?.parentId, options?.stream !== false);
198
+ }
199
+ async handleResponsesApiResponse(response, messages, conversationId, parentId, isStreaming) {
200
+ // Handle streaming response
201
+ if (isStreaming && response.body) {
202
+ const collectedMessages = [];
203
+ const cache = this.conversationCache;
204
+ return (async function* () {
205
+ for await (const message of parseResponsesStream(response.body)) {
206
+ // Collect messages for caching
207
+ if (message.content || message.tool_calls) {
208
+ collectedMessages.push(message);
209
+ }
210
+ else if (message.usage && collectedMessages.length === 0) {
211
+ // If we only got a usage message with no content, add a placeholder
212
+ collectedMessages.push({
213
+ role: ContentGeneratorRole.ASSISTANT,
214
+ content: '',
215
+ });
216
+ }
217
+ // Update the parentId in the context as soon as we get a message ID
218
+ if (message.id) {
219
+ // ConversationContext.setParentId(message.id);
220
+ // TODO: Handle parent ID updates when ConversationContext is available
221
+ }
222
+ yield message;
223
+ }
224
+ // Cache the collected messages with token count
225
+ if (conversationId && parentId && collectedMessages.length > 0) {
226
+ // Get previous accumulated tokens
227
+ const previousTokens = cache.getAccumulatedTokens(conversationId, parentId);
228
+ // Calculate tokens for this request (messages + response)
229
+ const requestTokens = estimateMessagesTokens(messages);
230
+ const responseTokens = estimateMessagesTokens(collectedMessages);
231
+ const totalTokensForRequest = requestTokens + responseTokens;
232
+ // Update cache with new accumulated total
233
+ cache.set(conversationId, parentId, collectedMessages, previousTokens + totalTokensForRequest);
234
+ }
235
+ })();
236
+ }
237
+ const data = (await response.json());
238
+ const resultMessages = [];
239
+ if (data.choices && data.choices.length > 0) {
240
+ const choice = data.choices[0];
241
+ const message = {
242
+ role: choice.message.role,
243
+ content: choice.message.content || '',
244
+ };
245
+ if (choice.message.tool_calls) {
246
+ message.tool_calls = choice.message.tool_calls;
247
+ }
248
+ if (data.usage) {
249
+ message.usage = {
250
+ prompt_tokens: data.usage.prompt_tokens || 0,
251
+ completion_tokens: data.usage.completion_tokens || 0,
252
+ total_tokens: data.usage.total_tokens || 0,
253
+ };
254
+ }
255
+ resultMessages.push(message);
256
+ }
257
+ // Cache the result with token count
258
+ if (conversationId && parentId && resultMessages.length > 0) {
259
+ // Get previous accumulated tokens
260
+ const previousTokens = this.conversationCache.getAccumulatedTokens(conversationId, parentId);
261
+ // Calculate tokens for this request
262
+ const requestTokens = estimateMessagesTokens(messages);
263
+ const responseTokens = estimateMessagesTokens(resultMessages);
264
+ const totalTokensForRequest = requestTokens + responseTokens;
265
+ // Update cache with new accumulated total
266
+ this.conversationCache.set(conversationId, parentId, resultMessages, previousTokens + totalTokensForRequest);
267
+ }
268
+ return (async function* () {
269
+ for (const message of resultMessages) {
270
+ yield message;
271
+ }
272
+ })();
273
+ }
274
+ async getModels() {
275
+ // Check if API key is available
276
+ if (!this.apiKey || this.apiKey.trim() === '') {
277
+ throw new Error('OpenAI API key is required to fetch models');
278
+ }
279
+ try {
280
+ const response = await this.openai.models.list();
281
+ const models = [];
282
+ for await (const model of response) {
283
+ // Filter out non-chat models (embeddings, audio, image, moderation, DALL·E, etc.)
284
+ if (!/embedding|whisper|audio|tts|image|vision|dall[- ]?e|moderation/i.test(model.id)) {
285
+ models.push({
286
+ id: model.id,
287
+ name: model.id,
288
+ provider: 'openai',
289
+ supportedToolFormats: ['openai'],
290
+ });
291
+ }
292
+ }
293
+ return models;
294
+ }
295
+ catch (error) {
296
+ if (process.env.DEBUG) {
297
+ console.error('Error fetching models from OpenAI:', error);
298
+ }
299
+ // Return a hardcoded list as fallback
300
+ return [
301
+ {
302
+ id: 'gpt-4o',
303
+ name: 'gpt-4o',
304
+ provider: 'openai',
305
+ supportedToolFormats: ['openai'],
306
+ },
307
+ {
308
+ id: 'gpt-4o-mini',
309
+ name: 'gpt-4o-mini',
310
+ provider: 'openai',
311
+ supportedToolFormats: ['openai'],
312
+ },
313
+ {
314
+ id: 'gpt-4-turbo',
315
+ name: 'gpt-4-turbo',
316
+ provider: 'openai',
317
+ supportedToolFormats: ['openai'],
318
+ },
319
+ {
320
+ id: 'gpt-3.5-turbo',
321
+ name: 'gpt-3.5-turbo',
322
+ provider: 'openai',
323
+ supportedToolFormats: ['openai'],
324
+ },
325
+ ];
326
+ }
327
+ }
328
+ async *generateChatCompletion(messages, tools, _toolFormat) {
329
+ // Check if API key is available
330
+ if (!this.apiKey || this.apiKey.trim() === '') {
331
+ throw new Error('OpenAI API key is required to generate completions');
332
+ }
333
+ // Check if we should use responses endpoint
334
+ if (this.shouldUseResponses(this.currentModel)) {
335
+ // Generate conversation IDs inline (would normally come from application context)
336
+ const conversationId = undefined;
337
+ const parentId = undefined;
338
+ yield* await this.callResponsesEndpoint(messages, tools, {
339
+ stream: true,
340
+ tool_choice: tools && tools.length > 0 ? 'auto' : undefined,
341
+ stateful: false, // Always stateless for Phase 22-01
342
+ conversationId,
343
+ parentId,
344
+ });
345
+ return;
346
+ }
347
+ // Validate tool messages have required tool_call_id
348
+ const toolMessages = messages.filter((msg) => msg.role === 'tool');
349
+ const missingIds = toolMessages.filter((msg) => !msg.tool_call_id);
350
+ if (missingIds.length > 0) {
351
+ if (process.env.DEBUG) {
352
+ console.error('[OpenAIProvider] FATAL: Tool messages missing tool_call_id:', missingIds);
353
+ }
354
+ throw new Error(`OpenAI API requires tool_call_id for all tool messages. Found ${missingIds.length} tool message(s) without IDs.`);
355
+ }
356
+ const parser = this.requiresTextToolCallParsing()
357
+ ? new GemmaToolCallParser()
358
+ : null;
359
+ // Get current tool format (with override support)
360
+ const currentToolFormat = this.getToolFormat();
361
+ // Format tools using ToolFormatter
362
+ const formattedTools = tools
363
+ ? this.toolFormatter.toProviderFormat(tools, currentToolFormat)
364
+ : undefined;
365
+ const stream = await this.openai.chat.completions.create({
366
+ model: this.currentModel,
367
+ messages: messages,
368
+ stream: true,
369
+ stream_options: { include_usage: true },
370
+ tools: formattedTools,
371
+ tool_choice: tools && tools.length > 0 ? 'auto' : undefined,
372
+ });
373
+ let fullContent = '';
374
+ const accumulatedToolCalls = [];
375
+ let usageData;
376
+ for await (const chunk of stream) {
377
+ const delta = chunk.choices[0]?.delta;
378
+ if (delta?.content) {
379
+ fullContent += delta.content;
380
+ // For text-based models, don't yield content chunks yet
381
+ if (!parser) {
382
+ yield {
383
+ role: ContentGeneratorRole.ASSISTANT,
384
+ content: delta.content,
385
+ };
386
+ }
387
+ }
388
+ if (delta?.tool_calls) {
389
+ for (const toolCall of delta.tool_calls) {
390
+ this.toolFormatter.accumulateStreamingToolCall(toolCall, accumulatedToolCalls, currentToolFormat);
391
+ }
392
+ }
393
+ // Check for usage data in the chunk
394
+ if (chunk.usage) {
395
+ usageData = {
396
+ prompt_tokens: chunk.usage.prompt_tokens,
397
+ completion_tokens: chunk.usage.completion_tokens,
398
+ total_tokens: chunk.usage.total_tokens,
399
+ };
400
+ }
401
+ }
402
+ // After stream ends, parse text-based tool calls if needed
403
+ if (parser && fullContent) {
404
+ const { cleanedContent, toolCalls } = parser.parse(fullContent);
405
+ if (toolCalls.length > 0) {
406
+ // Convert to standard format
407
+ const standardToolCalls = toolCalls.map((tc, index) => ({
408
+ id: `call_${Date.now()}_${index}`,
409
+ type: 'function',
410
+ function: {
411
+ name: tc.name,
412
+ arguments: JSON.stringify(tc.arguments),
413
+ },
414
+ }));
415
+ yield {
416
+ role: ContentGeneratorRole.ASSISTANT,
417
+ content: cleanedContent,
418
+ tool_calls: standardToolCalls,
419
+ usage: usageData,
420
+ };
421
+ }
422
+ else {
423
+ // No tool calls found, yield cleaned content
424
+ yield {
425
+ role: ContentGeneratorRole.ASSISTANT,
426
+ content: cleanedContent,
427
+ usage: usageData,
428
+ };
429
+ }
430
+ }
431
+ else {
432
+ // Standard OpenAI tool call handling
433
+ if (accumulatedToolCalls.length > 0) {
434
+ yield {
435
+ role: ContentGeneratorRole.ASSISTANT,
436
+ content: fullContent || '',
437
+ tool_calls: accumulatedToolCalls,
438
+ usage: usageData,
439
+ };
440
+ }
441
+ else if (usageData) {
442
+ // Always emit usage data so downstream consumers can update stats
443
+ yield {
444
+ role: ContentGeneratorRole.ASSISTANT,
445
+ content: '',
446
+ usage: usageData,
447
+ };
448
+ }
449
+ }
450
+ }
451
+ setModel(modelId) {
452
+ this.currentModel = modelId;
453
+ }
454
+ getCurrentModel() {
455
+ return this.currentModel;
456
+ }
457
+ setApiKey(apiKey) {
458
+ this.apiKey = apiKey;
459
+ // Create a new OpenAI client with the updated API key
460
+ this.openai = new OpenAI({
461
+ apiKey,
462
+ baseURL: this.baseURL,
463
+ dangerouslyAllowBrowser: process.env.NODE_ENV === 'test',
464
+ });
465
+ }
466
+ setBaseUrl(baseUrl) {
467
+ // If no baseUrl is provided, clear to default (undefined)
468
+ this.baseURL = baseUrl && baseUrl.trim() !== '' ? baseUrl : undefined;
469
+ // Create a new OpenAI client with the updated (or cleared) base URL
470
+ this.openai = new OpenAI({
471
+ apiKey: this.apiKey,
472
+ baseURL: this.baseURL,
473
+ dangerouslyAllowBrowser: process.env.NODE_ENV === 'test',
474
+ });
475
+ }
476
+ setConfig(config) {
477
+ this.config = config;
478
+ }
479
+ setToolFormatOverride(format) {
480
+ this.toolFormatOverride = format || undefined;
481
+ }
482
+ /**
483
+ * Estimates the remote context usage for the current conversation
484
+ * @param conversationId The conversation ID
485
+ * @param parentId The parent message ID
486
+ * @param promptMessages The messages being sent in the current prompt
487
+ * @returns Context usage information including remote tokens
488
+ */
489
+ estimateContextUsage(conversationId, parentId, promptMessages) {
490
+ const promptTokens = estimateMessagesTokens(promptMessages);
491
+ return estimateRemoteTokens(this.currentModel, this.conversationCache, conversationId, parentId, promptTokens);
492
+ }
493
+ /**
494
+ * Get the conversation cache instance
495
+ * @returns The conversation cache
496
+ */
497
+ getConversationCache() {
498
+ return this.conversationCache;
499
+ }
500
+ /**
501
+ * OpenAI always requires payment (API key)
502
+ */
503
+ isPaidMode() {
504
+ return true;
505
+ }
506
+ clearState() {
507
+ // Clear the conversation cache to prevent tool call ID mismatches
508
+ this.conversationCache.clear();
509
+ }
510
+ /**
511
+ * Get the list of server tools supported by this provider
512
+ */
513
+ getServerTools() {
514
+ return [];
515
+ }
516
+ /**
517
+ * Invoke a server tool (native provider tool)
518
+ */
519
+ async invokeServerTool(_toolName, _params, _config) {
520
+ throw new Error('Server tools not supported by OpenAI provider');
521
+ }
522
+ }
523
+ //# sourceMappingURL=OpenAIProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.ts"],"names":[],"mappings":"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"}