@vybestack/llxprt-code-core 0.1.18-nightly.250811.b0db22c6 → 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 (485) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.js +2 -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/token-store.js +11 -7
  9. package/dist/src/auth/token-store.js.map +1 -1
  10. package/dist/src/config/config.d.ts +7 -1
  11. package/dist/src/config/config.js +42 -4
  12. package/dist/src/config/config.js.map +1 -1
  13. package/dist/src/config/profileManager.d.ts +14 -4
  14. package/dist/src/config/profileManager.js +90 -11
  15. package/dist/src/config/profileManager.js.map +1 -1
  16. package/dist/src/core/contentGenerator.d.ts +2 -1
  17. package/dist/src/core/contentGenerator.js +1 -0
  18. package/dist/src/core/contentGenerator.js.map +1 -1
  19. package/dist/src/index.d.ts +6 -0
  20. package/dist/src/index.js +5 -0
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/providers/BaseProvider.d.ts +51 -0
  23. package/dist/src/providers/BaseProvider.js +136 -1
  24. package/dist/src/providers/BaseProvider.js.map +1 -1
  25. package/dist/src/providers/IProvider.d.ts +1 -0
  26. package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
  27. package/dist/src/providers/LoggingProviderWrapper.js +3 -0
  28. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  29. package/dist/src/providers/ProviderManager.d.ts +0 -1
  30. package/dist/src/providers/ProviderManager.js +23 -14
  31. package/dist/src/providers/ProviderManager.js.map +1 -1
  32. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  33. package/dist/src/providers/anthropic/AnthropicProvider.js +172 -26
  34. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  35. package/dist/src/providers/gemini/GeminiProvider.d.ts +4 -0
  36. package/dist/src/providers/gemini/GeminiProvider.js +33 -1
  37. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  38. package/dist/src/providers/openai/OpenAIProvider.d.ts +32 -0
  39. package/dist/src/providers/openai/OpenAIProvider.js +200 -13
  40. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  41. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  42. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  43. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  44. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  45. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  46. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  47. package/dist/src/settings/SettingsService.d.ts +32 -0
  48. package/dist/src/settings/SettingsService.js +204 -0
  49. package/dist/src/settings/SettingsService.js.map +1 -0
  50. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  51. package/dist/src/settings/settingsServiceInstance.js +24 -0
  52. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  53. package/dist/src/settings/types.d.ts +141 -0
  54. package/dist/src/settings/types.js +5 -0
  55. package/dist/src/settings/types.js.map +1 -0
  56. package/package.json +4 -2
  57. package/dist/src/auth/auth-integration.spec.d.ts +0 -6
  58. package/dist/src/auth/auth-integration.spec.js +0 -384
  59. package/dist/src/auth/auth-integration.spec.js.map +0 -1
  60. package/dist/src/auth/precedence.test.d.ts +0 -6
  61. package/dist/src/auth/precedence.test.js +0 -374
  62. package/dist/src/auth/precedence.test.js.map +0 -1
  63. package/dist/src/auth/qwen-device-flow.spec.d.ts +0 -6
  64. package/dist/src/auth/qwen-device-flow.spec.js +0 -793
  65. package/dist/src/auth/qwen-device-flow.spec.js.map +0 -1
  66. package/dist/src/auth/token-store.spec.d.ts +0 -6
  67. package/dist/src/auth/token-store.spec.js +0 -405
  68. package/dist/src/auth/token-store.spec.js.map +0 -1
  69. package/dist/src/code_assist/converter.test.d.ts +0 -6
  70. package/dist/src/code_assist/converter.test.js +0 -279
  71. package/dist/src/code_assist/converter.test.js.map +0 -1
  72. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  73. package/dist/src/code_assist/oauth2.test.js +0 -370
  74. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  75. package/dist/src/code_assist/server.test.d.ts +0 -6
  76. package/dist/src/code_assist/server.test.js +0 -134
  77. package/dist/src/code_assist/server.test.js.map +0 -1
  78. package/dist/src/code_assist/setup.test.d.ts +0 -6
  79. package/dist/src/code_assist/setup.test.js +0 -65
  80. package/dist/src/code_assist/setup.test.js.map +0 -1
  81. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  82. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  83. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  84. package/dist/src/config/config.ephemeral.test.d.ts +0 -6
  85. package/dist/src/config/config.ephemeral.test.js +0 -152
  86. package/dist/src/config/config.ephemeral.test.js.map +0 -1
  87. package/dist/src/config/config.test.d.ts +0 -6
  88. package/dist/src/config/config.test.js +0 -369
  89. package/dist/src/config/config.test.js.map +0 -1
  90. package/dist/src/config/endpoints.test.d.ts +0 -6
  91. package/dist/src/config/endpoints.test.js +0 -196
  92. package/dist/src/config/endpoints.test.js.map +0 -1
  93. package/dist/src/config/flashFallback.test.d.ts +0 -6
  94. package/dist/src/config/flashFallback.test.js +0 -91
  95. package/dist/src/config/flashFallback.test.js.map +0 -1
  96. package/dist/src/core/client.test.d.ts +0 -6
  97. package/dist/src/core/client.test.js +0 -1323
  98. package/dist/src/core/client.test.js.map +0 -1
  99. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  100. package/dist/src/core/contentGenerator.test.js +0 -103
  101. package/dist/src/core/contentGenerator.test.js.map +0 -1
  102. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  103. package/dist/src/core/coreToolScheduler.test.js +0 -637
  104. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  105. package/dist/src/core/geminiChat.test.d.ts +0 -6
  106. package/dist/src/core/geminiChat.test.js +0 -425
  107. package/dist/src/core/geminiChat.test.js.map +0 -1
  108. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  109. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  110. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  111. package/dist/src/core/logger.test.d.ts +0 -6
  112. package/dist/src/core/logger.test.js +0 -467
  113. package/dist/src/core/logger.test.js.map +0 -1
  114. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  115. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  116. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  117. package/dist/src/core/prompts-async.test.d.ts +0 -6
  118. package/dist/src/core/prompts-async.test.js +0 -115
  119. package/dist/src/core/prompts-async.test.js.map +0 -1
  120. package/dist/src/core/prompts.test.d.ts +0 -6
  121. package/dist/src/core/prompts.test.js +0 -68
  122. package/dist/src/core/prompts.test.js.map +0 -1
  123. package/dist/src/core/subagent.test.d.ts +0 -6
  124. package/dist/src/core/subagent.test.js +0 -510
  125. package/dist/src/core/subagent.test.js.map +0 -1
  126. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  127. package/dist/src/core/tokenLimits.test.js +0 -66
  128. package/dist/src/core/tokenLimits.test.js.map +0 -1
  129. package/dist/src/core/turn.test.d.ts +0 -6
  130. package/dist/src/core/turn.test.js +0 -366
  131. package/dist/src/core/turn.test.js.map +0 -1
  132. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  133. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  134. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  135. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  136. package/dist/src/ide/ide-installer.test.js +0 -55
  137. package/dist/src/ide/ide-installer.test.js.map +0 -1
  138. package/dist/src/ide/ideContext.test.d.ts +0 -6
  139. package/dist/src/ide/ideContext.test.js +0 -265
  140. package/dist/src/ide/ideContext.test.js.map +0 -1
  141. package/dist/src/index.test.d.ts +0 -6
  142. package/dist/src/index.test.js +0 -12
  143. package/dist/src/index.test.js.map +0 -1
  144. package/dist/src/integration-tests/oauth-integration.spec.d.ts +0 -6
  145. package/dist/src/integration-tests/oauth-integration.spec.js +0 -518
  146. package/dist/src/integration-tests/oauth-integration.spec.js.map +0 -1
  147. package/dist/src/integration-tests/oauth-simple-test.spec.d.ts +0 -1
  148. package/dist/src/integration-tests/oauth-simple-test.spec.js +0 -88
  149. package/dist/src/integration-tests/oauth-simple-test.spec.js.map +0 -1
  150. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  151. package/dist/src/integration-tests/todo-system.test.js +0 -46
  152. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  153. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  154. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  155. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  156. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  157. package/dist/src/mcp/oauth-provider.test.js +0 -602
  158. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  159. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  160. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  161. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  162. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  163. package/dist/src/mcp/oauth-utils.test.js +0 -144
  164. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  165. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  166. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  167. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  168. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  169. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  170. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  171. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  172. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  173. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  174. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  175. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  176. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  177. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  178. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  179. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  180. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  181. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  182. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  183. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  184. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  185. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  186. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  187. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  188. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  189. package/dist/src/providers/BaseProvider.test.d.ts +0 -6
  190. package/dist/src/providers/BaseProvider.test.js +0 -472
  191. package/dist/src/providers/BaseProvider.test.js.map +0 -1
  192. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  193. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  194. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  195. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  196. package/dist/src/providers/ProviderManager.test.js +0 -284
  197. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  198. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  199. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  200. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  201. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  202. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  203. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  204. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  205. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  206. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  207. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  208. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  209. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  210. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  211. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  212. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  213. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  214. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -308
  215. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  216. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  217. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  218. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  219. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  220. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  221. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  222. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  223. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  224. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  225. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  226. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  227. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  228. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  229. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  230. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  231. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  232. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  233. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  234. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  235. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  236. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  237. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  238. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  239. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  240. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  241. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  242. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  243. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  244. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -621
  245. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  246. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  247. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  248. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  249. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  250. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  251. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  252. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  253. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  254. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  255. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  256. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  257. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  258. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  259. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  260. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  261. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  262. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  263. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  264. package/dist/src/providers/openai/openai-oauth.spec.d.ts +0 -16
  265. package/dist/src/providers/openai/openai-oauth.spec.js +0 -544
  266. package/dist/src/providers/openai/openai-oauth.spec.js.map +0 -1
  267. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  268. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  269. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  270. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  271. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  272. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  273. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  274. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  275. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  276. package/dist/src/services/gitService.test.d.ts +0 -6
  277. package/dist/src/services/gitService.test.js +0 -209
  278. package/dist/src/services/gitService.test.js.map +0 -1
  279. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  280. package/dist/src/services/loopDetectionService.test.js +0 -484
  281. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  282. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  283. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  284. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  285. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  286. package/dist/src/services/shellExecutionService.test.js +0 -272
  287. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  288. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  289. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  290. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  291. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  292. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  293. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  294. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  295. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  296. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  297. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -6
  298. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -187
  299. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  300. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  301. package/dist/src/telemetry/loggers.test.js +0 -573
  302. package/dist/src/telemetry/loggers.test.js.map +0 -1
  303. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  304. package/dist/src/telemetry/metrics.test.js +0 -212
  305. package/dist/src/telemetry/metrics.test.js.map +0 -1
  306. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  307. package/dist/src/telemetry/telemetry.test.js +0 -54
  308. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  309. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  310. package/dist/src/telemetry/uiTelemetry.test.js +0 -518
  311. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  312. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  313. package/dist/src/tools/ToolFormatter.test.js +0 -349
  314. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  315. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  316. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  317. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  318. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  319. package/dist/src/tools/diffOptions.test.js +0 -119
  320. package/dist/src/tools/diffOptions.test.js.map +0 -1
  321. package/dist/src/tools/edit.test.d.ts +0 -6
  322. package/dist/src/tools/edit.test.js +0 -689
  323. package/dist/src/tools/edit.test.js.map +0 -1
  324. package/dist/src/tools/glob.test.d.ts +0 -6
  325. package/dist/src/tools/glob.test.js +0 -332
  326. package/dist/src/tools/glob.test.js.map +0 -1
  327. package/dist/src/tools/grep.test.d.ts +0 -6
  328. package/dist/src/tools/grep.test.js +0 -272
  329. package/dist/src/tools/grep.test.js.map +0 -1
  330. package/dist/src/tools/ls.test.d.ts +0 -6
  331. package/dist/src/tools/ls.test.js +0 -357
  332. package/dist/src/tools/ls.test.js.map +0 -1
  333. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  334. package/dist/src/tools/mcp-client.test.js +0 -617
  335. package/dist/src/tools/mcp-client.test.js.map +0 -1
  336. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  337. package/dist/src/tools/mcp-tool.test.js +0 -501
  338. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  339. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  340. package/dist/src/tools/memoryTool.test.js +0 -266
  341. package/dist/src/tools/memoryTool.test.js.map +0 -1
  342. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  343. package/dist/src/tools/modifiable-tool.test.js +0 -193
  344. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  345. package/dist/src/tools/read-file.test.d.ts +0 -6
  346. package/dist/src/tools/read-file.test.js +0 -319
  347. package/dist/src/tools/read-file.test.js.map +0 -1
  348. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  349. package/dist/src/tools/read-many-files.test.js +0 -644
  350. package/dist/src/tools/read-many-files.test.js.map +0 -1
  351. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  352. package/dist/src/tools/shell.multibyte.test.js +0 -75
  353. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  354. package/dist/src/tools/shell.test.d.ts +0 -6
  355. package/dist/src/tools/shell.test.js +0 -367
  356. package/dist/src/tools/shell.test.js.map +0 -1
  357. package/dist/src/tools/todo-pause.spec.d.ts +0 -6
  358. package/dist/src/tools/todo-pause.spec.js +0 -287
  359. package/dist/src/tools/todo-pause.spec.js.map +0 -1
  360. package/dist/src/tools/todo-read.test.d.ts +0 -6
  361. package/dist/src/tools/todo-read.test.js +0 -162
  362. package/dist/src/tools/todo-read.test.js.map +0 -1
  363. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  364. package/dist/src/tools/todo-schemas.test.js +0 -341
  365. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  366. package/dist/src/tools/todo-store.test.d.ts +0 -6
  367. package/dist/src/tools/todo-store.test.js +0 -169
  368. package/dist/src/tools/todo-store.test.js.map +0 -1
  369. package/dist/src/tools/todo-write.test.d.ts +0 -6
  370. package/dist/src/tools/todo-write.test.js +0 -226
  371. package/dist/src/tools/todo-write.test.js.map +0 -1
  372. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  373. package/dist/src/tools/tool-registry.test.js +0 -468
  374. package/dist/src/tools/tool-registry.test.js.map +0 -1
  375. package/dist/src/tools/tools.test.d.ts +0 -6
  376. package/dist/src/tools/tools.test.js +0 -117
  377. package/dist/src/tools/tools.test.js.map +0 -1
  378. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  379. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  380. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  381. package/dist/src/tools/web-search.test.d.ts +0 -6
  382. package/dist/src/tools/web-search.test.js +0 -230
  383. package/dist/src/tools/web-search.test.js.map +0 -1
  384. package/dist/src/tools/write-file.test.d.ts +0 -6
  385. package/dist/src/tools/write-file.test.js +0 -465
  386. package/dist/src/tools/write-file.test.js.map +0 -1
  387. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  388. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  389. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  390. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  391. package/dist/src/utils/editCorrector.test.js +0 -564
  392. package/dist/src/utils/editCorrector.test.js.map +0 -1
  393. package/dist/src/utils/editor.test.d.ts +0 -6
  394. package/dist/src/utils/editor.test.js +0 -445
  395. package/dist/src/utils/editor.test.js.map +0 -1
  396. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  397. package/dist/src/utils/environmentContext.test.js +0 -139
  398. package/dist/src/utils/environmentContext.test.js.map +0 -1
  399. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  400. package/dist/src/utils/errorReporting.test.js +0 -130
  401. package/dist/src/utils/errorReporting.test.js.map +0 -1
  402. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  403. package/dist/src/utils/fileUtils.test.js +0 -363
  404. package/dist/src/utils/fileUtils.test.js.map +0 -1
  405. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  406. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  407. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  408. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  409. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  410. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  411. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  412. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  413. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  414. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  415. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  416. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  417. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  418. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  419. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  420. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  421. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  422. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  423. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  424. package/dist/src/utils/getFolderStructure.test.js +0 -282
  425. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  426. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  427. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  428. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  429. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  430. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  431. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  432. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  433. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  434. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  435. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  436. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  437. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  438. package/dist/src/utils/partUtils.test.d.ts +0 -6
  439. package/dist/src/utils/partUtils.test.js +0 -130
  440. package/dist/src/utils/partUtils.test.js.map +0 -1
  441. package/dist/src/utils/paths.test.d.ts +0 -6
  442. package/dist/src/utils/paths.test.js +0 -153
  443. package/dist/src/utils/paths.test.js.map +0 -1
  444. package/dist/src/utils/retry.test.d.ts +0 -6
  445. package/dist/src/utils/retry.test.js +0 -322
  446. package/dist/src/utils/retry.test.js.map +0 -1
  447. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  448. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  449. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  450. package/dist/src/utils/sanitization.test.d.ts +0 -6
  451. package/dist/src/utils/sanitization.test.js +0 -81
  452. package/dist/src/utils/sanitization.test.js.map +0 -1
  453. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  454. package/dist/src/utils/schemaValidator.test.js +0 -146
  455. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  456. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  457. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  458. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  459. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  460. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  461. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  462. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  463. package/dist/src/utils/shell-utils.test.js +0 -200
  464. package/dist/src/utils/shell-utils.test.js.map +0 -1
  465. package/dist/src/utils/summarizer.test.d.ts +0 -6
  466. package/dist/src/utils/summarizer.test.js +0 -131
  467. package/dist/src/utils/summarizer.test.js.map +0 -1
  468. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  469. package/dist/src/utils/systemEncoding.test.js +0 -368
  470. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  471. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  472. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  473. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  474. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  475. package/dist/src/utils/unicodeUtils.test.js +0 -120
  476. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  477. package/dist/src/utils/user_account.test.d.ts +0 -6
  478. package/dist/src/utils/user_account.test.js +0 -153
  479. package/dist/src/utils/user_account.test.js.map +0 -1
  480. package/dist/src/utils/user_id.test.d.ts +0 -6
  481. package/dist/src/utils/user_id.test.js +0 -21
  482. package/dist/src/utils/user_id.test.js.map +0 -1
  483. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  484. package/dist/src/utils/workspaceContext.test.js +0 -209
  485. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -1,518 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Vybestack LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import { OpenAIProvider } from '../providers/openai/OpenAIProvider.js';
8
- import { AuthPrecedenceResolver } from '../auth/precedence.js';
9
- import { TEST_PROVIDER_CONFIG } from '../providers/test-utils/providerTestConfig.js';
10
- // Mock configuration manager for OAuth persistence tests
11
- class MockConfigManager {
12
- oauthState = new Map();
13
- async getOAuthEnabled(provider) {
14
- return this.oauthState.get(provider) || false;
15
- }
16
- async setOAuthEnabled(provider, enabled) {
17
- this.oauthState.set(provider, enabled);
18
- }
19
- // Simulate persistence across "restarts"
20
- getPersistedState() {
21
- return new Map(this.oauthState);
22
- }
23
- restoreState(state) {
24
- this.oauthState = new Map(state);
25
- }
26
- clear() {
27
- this.oauthState.clear();
28
- }
29
- }
30
- describe('OAuth Integration: Complete Implementation Validation', () => {
31
- let mockOAuthManager;
32
- let mockConfigManager;
33
- let originalEnv;
34
- beforeEach(() => {
35
- vi.clearAllMocks();
36
- originalEnv = { ...process.env };
37
- // Clear all environment variables for clean testing
38
- delete process.env.OPENAI_API_KEY;
39
- delete process.env.GEMINI_API_KEY;
40
- mockConfigManager = new MockConfigManager();
41
- // Create comprehensive mock OAuth manager
42
- mockOAuthManager = {
43
- getToken: vi.fn(),
44
- isAuthenticated: vi.fn(),
45
- isOAuthEnabled: vi.fn(),
46
- toggleOAuthEnabled: vi.fn(),
47
- getAuthStatus: vi.fn(),
48
- };
49
- });
50
- afterEach(() => {
51
- process.env = originalEnv;
52
- mockConfigManager.clear();
53
- });
54
- describe('1. OAuth Toggle Integration Tests', () => {
55
- /**
56
- * @requirement REQ-004.1 OAuth Toggle Persistence
57
- * @scenario OAuth enablement persists across CLI restarts
58
- */
59
- it('should persist OAuth enablement across restarts', async () => {
60
- // Given: OAuth enabled for qwen provider
61
- vi.mocked(mockOAuthManager.toggleOAuthEnabled).mockResolvedValue(true);
62
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
63
- // When: Enable OAuth in first session
64
- await mockConfigManager.setOAuthEnabled('qwen', true);
65
- const firstToggleResult = await mockOAuthManager.toggleOAuthEnabled('qwen');
66
- expect(firstToggleResult).toBe(true);
67
- // Simulate system restart by preserving config state
68
- const persistedState = mockConfigManager.getPersistedState();
69
- mockConfigManager.clear();
70
- mockConfigManager.restoreState(persistedState);
71
- // Then: OAuth should remain enabled after restart
72
- const persistedEnabled = await mockConfigManager.getOAuthEnabled('qwen');
73
- expect(persistedEnabled).toBe(true);
74
- // And: Can be toggled again
75
- vi.mocked(mockOAuthManager.toggleOAuthEnabled).mockResolvedValue(false);
76
- const secondToggleResult = await mockOAuthManager.toggleOAuthEnabled('qwen');
77
- expect(secondToggleResult).toBe(false);
78
- });
79
- /**
80
- * @requirement REQ-004.1 Independent OAuth per Provider
81
- * @scenario Multiple providers with different OAuth states
82
- */
83
- it('should maintain independent OAuth enablement per provider', async () => {
84
- // Given: Multiple providers with different OAuth states
85
- await mockConfigManager.setOAuthEnabled('qwen', true);
86
- await mockConfigManager.setOAuthEnabled('gemini', false);
87
- await mockConfigManager.setOAuthEnabled('openai', true);
88
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockImplementation(async (provider) => await mockConfigManager.getOAuthEnabled(provider));
89
- // When: Check enablement for different providers
90
- const qwenEnabled = await mockOAuthManager.isOAuthEnabled('qwen');
91
- const geminiEnabled = await mockOAuthManager.isOAuthEnabled('gemini');
92
- const openaiEnabled = await mockOAuthManager.isOAuthEnabled('openai');
93
- // Then: Should reflect independent states
94
- expect(qwenEnabled).toBe(true);
95
- expect(geminiEnabled).toBe(false);
96
- expect(openaiEnabled).toBe(true);
97
- // And: Status should reflect independent OAuth enablement
98
- vi.mocked(mockOAuthManager.getAuthStatus).mockResolvedValue([
99
- {
100
- provider: 'qwen',
101
- authenticated: false,
102
- authType: 'none',
103
- oauthEnabled: true,
104
- },
105
- {
106
- provider: 'gemini',
107
- authenticated: false,
108
- authType: 'none',
109
- oauthEnabled: false,
110
- },
111
- {
112
- provider: 'openai',
113
- authenticated: false,
114
- authType: 'none',
115
- oauthEnabled: true,
116
- },
117
- ]);
118
- const status = await mockOAuthManager.getAuthStatus();
119
- expect(status.find((s) => s.provider === 'qwen')?.oauthEnabled).toBe(true);
120
- expect(status.find((s) => s.provider === 'gemini')?.oauthEnabled).toBe(false);
121
- expect(status.find((s) => s.provider === 'openai')?.oauthEnabled).toBe(true);
122
- });
123
- /**
124
- * @requirement REQ-004.1 Toggle While Active Sessions
125
- * @scenario OAuth toggled while active sessions exist
126
- */
127
- it('should handle OAuth toggle while active sessions exist', async () => {
128
- // Given: Active OAuth session for qwen
129
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('active-token-123');
130
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(true);
131
- const provider = new OpenAIProvider('', // No CLI key
132
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', // Qwen endpoint
133
- TEST_PROVIDER_CONFIG, mockOAuthManager);
134
- // Verify provider is authenticated via OAuth
135
- const isAuthenticated = await provider.isAuthenticated();
136
- expect(isAuthenticated).toBe(true);
137
- // When: OAuth manager returns null (simulating OAuth disabled/token removed)
138
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue(null);
139
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(false);
140
- // Create new provider instance to simulate fresh state
141
- const newProvider = new OpenAIProvider('', // No CLI key
142
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
143
- // Then: Provider should lose authentication
144
- const isStillAuthenticated = await newProvider.isAuthenticated();
145
- expect(isStillAuthenticated).toBe(false);
146
- });
147
- });
148
- describe('2. Lazy OAuth Triggering Tests', () => {
149
- /**
150
- * @requirement REQ-004.3 OAuth Only Triggered on API Calls
151
- * @scenario OAuth not triggered during command execution
152
- */
153
- it('should not trigger OAuth during command setup, only on API calls', async () => {
154
- // Given: OAuth available via OAuth manager presence
155
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('lazy-oauth-token');
156
- const oauthSpy = vi.mocked(mockOAuthManager.getToken);
157
- // When: Creating provider instance (simulating command setup)
158
- const provider = new OpenAIProvider('', // No CLI key
159
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
160
- // Then: OAuth should not be triggered during instantiation
161
- expect(oauthSpy).not.toHaveBeenCalled();
162
- // When: Actually checking authentication (triggers lazy OAuth)
163
- const isAuthenticated = await provider.isAuthenticated();
164
- expect(isAuthenticated).toBe(true);
165
- // Then: OAuth should be triggered only when authentication is needed
166
- expect(oauthSpy).toHaveBeenCalledWith('qwen');
167
- });
168
- /**
169
- * @requirement REQ-004.3 OAuth Skipped When Higher Priority Available
170
- * @scenario OAuth not triggered when API key exists
171
- */
172
- it('should not trigger OAuth when higher precedence authentication exists', async () => {
173
- // Given: API key and OAuth both available
174
- const apiKey = 'cli-api-key-123';
175
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
176
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token-456');
177
- const oauthSpy = vi.mocked(mockOAuthManager.getToken);
178
- // When: Provider created with API key (higher precedence)
179
- const provider = new OpenAIProvider(apiKey, // CLI key has higher precedence
180
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
181
- // Then: Should be authenticated via API key
182
- const isAuthenticated = await provider.isAuthenticated();
183
- expect(isAuthenticated).toBe(true);
184
- // And: OAuth should not be triggered since API key has precedence
185
- expect(oauthSpy).not.toHaveBeenCalled();
186
- });
187
- /**
188
- * @requirement REQ-004.3 OAuth Token Caching
189
- * @scenario OAuth token cached and reused for subsequent calls
190
- */
191
- it('should cache OAuth token and avoid repeated OAuth triggers', async () => {
192
- // Given: OAuth enabled, no other auth methods
193
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('cached-oauth-token');
194
- const provider = new OpenAIProvider('', // No CLI key
195
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
196
- const oauthSpy = vi.mocked(mockOAuthManager.getToken);
197
- // When: First authentication check (triggers OAuth)
198
- const firstCheck = await provider.isAuthenticated();
199
- expect(firstCheck).toBe(true);
200
- expect(oauthSpy).toHaveBeenCalledTimes(1);
201
- // When: Second authentication check within cache duration (immediately after first)
202
- const secondCheck = await provider.isAuthenticated();
203
- expect(secondCheck).toBe(true);
204
- // Then: OAuth should be called for both checks (BaseProvider has short cache duration)
205
- // This is expected behavior - the cache is intentionally short to handle token expiration
206
- expect(oauthSpy).toHaveBeenCalledTimes(2);
207
- });
208
- });
209
- describe('3. Authentication Precedence Chain Tests', () => {
210
- /**
211
- * @requirement REQ-004.1 Complete Precedence Chain
212
- * @scenario CLI > Env > OAuth precedence validation
213
- */
214
- it('should follow complete precedence chain: CLI > Environment > OAuth', async () => {
215
- const testCases = [
216
- {
217
- name: 'CLI key takes precedence over env and OAuth',
218
- cliKey: 'cli-key-123',
219
- envKey: 'env-key-456',
220
- oauthToken: 'oauth-token-789',
221
- expectedAuth: 'cli-key-123',
222
- expectedOAuthCalls: 0,
223
- },
224
- {
225
- name: 'Environment key takes precedence over OAuth when no CLI key',
226
- cliKey: '',
227
- envKey: 'env-key-456',
228
- oauthToken: 'oauth-token-789',
229
- expectedAuth: 'env-key-456',
230
- expectedOAuthCalls: 0,
231
- },
232
- {
233
- name: 'OAuth used when no higher precedence methods available',
234
- cliKey: '',
235
- envKey: '',
236
- oauthToken: 'oauth-token-789',
237
- expectedAuth: 'oauth-token-789',
238
- expectedOAuthCalls: 1,
239
- },
240
- ];
241
- for (const testCase of testCases) {
242
- // Setup environment
243
- if (testCase.envKey) {
244
- process.env.OPENAI_API_KEY = testCase.envKey;
245
- }
246
- else {
247
- delete process.env.OPENAI_API_KEY;
248
- }
249
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue(testCase.oauthToken);
250
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
251
- const oauthSpy = vi.mocked(mockOAuthManager.getToken);
252
- oauthSpy.mockClear();
253
- // Test precedence using AuthPrecedenceResolver directly
254
- const resolver = new AuthPrecedenceResolver({
255
- cliKey: testCase.cliKey,
256
- envKeyNames: ['OPENAI_API_KEY'],
257
- isOAuthEnabled: true,
258
- supportsOAuth: true,
259
- oauthProvider: 'qwen',
260
- }, mockOAuthManager);
261
- // When: Resolve authentication
262
- const resolvedAuth = await resolver.resolveAuthentication();
263
- // Then: Should use expected authentication method
264
- expect(resolvedAuth).toBe(testCase.expectedAuth);
265
- expect(oauthSpy).toHaveBeenCalledTimes(testCase.expectedOAuthCalls);
266
- if (testCase.expectedOAuthCalls > 0) {
267
- expect(oauthSpy).toHaveBeenCalledWith('qwen');
268
- }
269
- }
270
- });
271
- /**
272
- * @requirement REQ-004.1 Auth Method Detection
273
- * @scenario Proper identification of active auth method
274
- */
275
- it('should correctly identify active authentication method', async () => {
276
- const testCases = [
277
- {
278
- setup: () => ({ cliKey: 'cli-key' }),
279
- expectedMethod: 'cli-key',
280
- },
281
- {
282
- setup: () => {
283
- process.env.OPENAI_API_KEY = 'env-key';
284
- return { cliKey: '' };
285
- },
286
- expectedMethod: 'env-openai_api_key',
287
- },
288
- {
289
- setup: () => {
290
- delete process.env.OPENAI_API_KEY;
291
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(true);
292
- return { cliKey: '' };
293
- },
294
- expectedMethod: 'oauth-qwen',
295
- },
296
- ];
297
- for (const testCase of testCases) {
298
- const config = testCase.setup();
299
- const resolver = new AuthPrecedenceResolver({
300
- cliKey: config.cliKey,
301
- envKeyNames: ['OPENAI_API_KEY'],
302
- isOAuthEnabled: true,
303
- supportsOAuth: true,
304
- oauthProvider: 'qwen',
305
- }, mockOAuthManager);
306
- const authMethod = await resolver.getAuthMethodName();
307
- expect(authMethod).toBe(testCase.expectedMethod);
308
- }
309
- });
310
- });
311
- describe('4. OpenAI Endpoint Validation Tests', () => {
312
- /**
313
- * @requirement REQ-004.1 Qwen Endpoint Validation
314
- * @scenario OAuth allowed for Qwen endpoints only
315
- */
316
- it('should allow OAuth for Qwen endpoints and reject for others', async () => {
317
- const qwenEndpoints = [
318
- 'https://dashscope.aliyuncs.com/compatible-mode/v1',
319
- 'https://dashscope.aliyuncs.com/v1',
320
- ];
321
- const nonQwenEndpoints = [
322
- 'https://api.openai.com/v1',
323
- 'https://api.anthropic.com/v1',
324
- 'https://my-custom-ai.com/v1',
325
- ];
326
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token');
327
- // Test Qwen endpoints (should allow OAuth)
328
- for (const endpoint of qwenEndpoints) {
329
- const provider = new OpenAIProvider('', // No CLI key
330
- endpoint, TEST_PROVIDER_CONFIG, mockOAuthManager);
331
- const isAuthenticated = await provider.isAuthenticated();
332
- expect(isAuthenticated).toBe(true);
333
- }
334
- // Test non-Qwen endpoints (should not enable OAuth automatically)
335
- for (const endpoint of nonQwenEndpoints) {
336
- const provider = new OpenAIProvider('', // No CLI key
337
- endpoint, TEST_PROVIDER_CONFIG, mockOAuthManager);
338
- const isAuthenticated = await provider.isAuthenticated();
339
- expect(isAuthenticated).toBe(false); // Should fail because OAuth not enabled for non-Qwen endpoints
340
- }
341
- });
342
- /**
343
- * @requirement REQ-004.1 Endpoint Mismatch Error
344
- * @scenario Clear error message when OAuth used with wrong endpoint
345
- */
346
- it('should provide clear error for OAuth with non-Qwen endpoints', async () => {
347
- // Given: OAuth enabled for non-Qwen endpoint
348
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
349
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue(null); // No other auth
350
- const provider = new OpenAIProvider('', // No CLI key
351
- 'https://api.openai.com/v1', // Standard OpenAI endpoint
352
- TEST_PROVIDER_CONFIG, mockOAuthManager);
353
- // When: Attempting to authenticate
354
- // Then: Should throw specific endpoint mismatch error
355
- await expect(provider.isAuthenticated()).resolves.toBe(false);
356
- });
357
- });
358
- describe('5. Warning System Tests', () => {
359
- /**
360
- * @requirement REQ-004.1 Warning for Higher Priority Auth
361
- * @scenario Warning when OAuth enabled but higher priority auth exists
362
- */
363
- it('should detect when OAuth is enabled but higher priority auth will be used', async () => {
364
- // Test scenario: API key exists, OAuth enabled
365
- process.env.OPENAI_API_KEY = 'env-api-key';
366
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
367
- const resolver = new AuthPrecedenceResolver({
368
- envKeyNames: ['OPENAI_API_KEY'],
369
- isOAuthEnabled: true,
370
- supportsOAuth: true,
371
- oauthProvider: 'qwen',
372
- }, mockOAuthManager);
373
- // When: Check for non-OAuth authentication
374
- const hasNonOAuth = await resolver.hasNonOAuthAuthentication();
375
- const isOAuthOnly = await resolver.isOAuthOnlyAvailable();
376
- // Then: Should detect higher priority auth exists
377
- expect(hasNonOAuth).toBe(true);
378
- expect(isOAuthOnly).toBe(false);
379
- // And: Should identify the active auth method
380
- const authMethod = await resolver.getAuthMethodName();
381
- expect(authMethod).toBe('env-openai_api_key');
382
- });
383
- /**
384
- * @requirement REQ-004.1 OAuth Only Detection
385
- * @scenario Detection when OAuth is the only available method
386
- */
387
- it('should detect when OAuth is the only available authentication', async () => {
388
- // Given: No API keys, only OAuth enabled
389
- delete process.env.OPENAI_API_KEY;
390
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(true);
391
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(false); // Not yet authenticated
392
- const resolver = new AuthPrecedenceResolver({
393
- cliKey: '',
394
- envKeyNames: ['OPENAI_API_KEY'],
395
- isOAuthEnabled: true,
396
- supportsOAuth: true,
397
- oauthProvider: 'qwen',
398
- }, mockOAuthManager);
399
- // When: Check authentication availability
400
- const hasNonOAuth = await resolver.hasNonOAuthAuthentication();
401
- const isOAuthOnly = await resolver.isOAuthOnlyAvailable();
402
- // Then: Should detect OAuth is only option
403
- expect(hasNonOAuth).toBe(false);
404
- expect(isOAuthOnly).toBe(true);
405
- });
406
- });
407
- describe('6. Error Handling Tests', () => {
408
- /**
409
- * @requirement REQ-004.4 OAuth Manager Errors
410
- * @scenario Graceful handling of OAuth manager failures
411
- */
412
- it('should handle OAuth manager errors gracefully', async () => {
413
- // Given: OAuth manager that throws errors
414
- vi.mocked(mockOAuthManager.getToken).mockRejectedValue(new Error('OAuth service unavailable'));
415
- process.env.OPENAI_API_KEY = 'fallback-key';
416
- const resolver = new AuthPrecedenceResolver({
417
- envKeyNames: ['OPENAI_API_KEY'],
418
- isOAuthEnabled: true,
419
- supportsOAuth: true,
420
- oauthProvider: 'qwen',
421
- }, mockOAuthManager);
422
- // When: OAuth fails, should fall back to environment variable
423
- const resolvedAuth = await resolver.resolveAuthentication();
424
- // Then: Should use fallback authentication
425
- expect(resolvedAuth).toBe('fallback-key');
426
- });
427
- /**
428
- * @requirement REQ-004.3 No Auth Available
429
- * @scenario Clear error when no authentication methods available
430
- */
431
- it('should provide clear error when no authentication available', async () => {
432
- // Given: No authentication methods available
433
- delete process.env.OPENAI_API_KEY;
434
- vi.mocked(mockOAuthManager.isOAuthEnabled).mockResolvedValue(false);
435
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue(null);
436
- const provider = new OpenAIProvider('', // No CLI key
437
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
438
- // When: Attempting to authenticate without any methods
439
- const isAuthenticated = await provider.isAuthenticated();
440
- // Then: Should return false (not authenticated)
441
- expect(isAuthenticated).toBe(false);
442
- });
443
- });
444
- describe('7. End-to-End Integration Tests', () => {
445
- /**
446
- * @requirement REQ-004.1 Complete OAuth Workflow
447
- * @scenario Full OAuth enablement, authentication, and usage cycle
448
- */
449
- it('should handle complete OAuth workflow end-to-end', async () => {
450
- // Step 1: Start with no authentication (no OAuth manager)
451
- delete process.env.OPENAI_API_KEY;
452
- let provider = new OpenAIProvider('', 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, undefined);
453
- // Initially not authenticated
454
- expect(await provider.isAuthenticated()).toBe(false);
455
- // Step 2: Simulate enabling OAuth by providing OAuth manager
456
- await mockConfigManager.setOAuthEnabled('qwen', true);
457
- // Step 3: Create provider with OAuth manager (simulates OAuth enablement)
458
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token-123');
459
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(true);
460
- provider = new OpenAIProvider('', 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
461
- expect(await provider.isAuthenticated()).toBe(true);
462
- // Step 4: Check status shows OAuth enabled and authenticated
463
- vi.mocked(mockOAuthManager.getAuthStatus).mockResolvedValue([
464
- {
465
- provider: 'qwen',
466
- authenticated: true,
467
- authType: 'oauth',
468
- oauthEnabled: true,
469
- expiresIn: 3600,
470
- },
471
- ]);
472
- const status = await mockOAuthManager.getAuthStatus();
473
- expect(status[0]).toMatchObject({
474
- provider: 'qwen',
475
- authenticated: true,
476
- authType: 'oauth',
477
- oauthEnabled: true,
478
- });
479
- // Step 5: Simulate disabling OAuth by removing token
480
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue(null);
481
- vi.mocked(mockOAuthManager.isAuthenticated).mockResolvedValue(false);
482
- // Step 6: Should no longer be authenticated
483
- provider = new OpenAIProvider('', 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
484
- expect(await provider.isAuthenticated()).toBe(false);
485
- });
486
- /**
487
- * @requirement REQ-006.1 Mixed Authentication Coordination
488
- * @scenario Multiple providers with different authentication methods
489
- */
490
- it('should coordinate mixed authentication methods without interference', async () => {
491
- // Given: Mixed authentication setup
492
- process.env.OPENAI_API_KEY = 'env-key-for-openai';
493
- // Setup OAuth for Qwen provider
494
- vi.mocked(mockOAuthManager.getToken).mockImplementation(async (provider) => {
495
- if (provider === 'qwen')
496
- return 'qwen-oauth-token';
497
- return null;
498
- });
499
- // Create providers with different auth strategies
500
- const qwenProvider = new OpenAIProvider('', // No CLI key for Qwen
501
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', // Qwen endpoint enables OAuth
502
- TEST_PROVIDER_CONFIG, mockOAuthManager);
503
- const openaiProvider = new OpenAIProvider('', // No CLI key, will use env var
504
- 'https://api.openai.com/v1', // Standard OpenAI endpoint (no OAuth)
505
- TEST_PROVIDER_CONFIG, mockOAuthManager);
506
- // When: Check authentication for both providers
507
- const qwenAuth = await qwenProvider.isAuthenticated();
508
- const openaiAuth = await openaiProvider.isAuthenticated();
509
- // Then: Each uses appropriate method without interference
510
- expect(qwenAuth).toBe(true); // OAuth for Qwen
511
- expect(openaiAuth).toBe(true); // Env var for OpenAI
512
- // Note: In this test, both providers will use the environment variable
513
- // due to auth precedence (env var > OAuth), which is correct behavior
514
- // The key test is that both providers authenticate successfully
515
- });
516
- });
517
- });
518
- //# sourceMappingURL=oauth-integration.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-integration.spec.js","sourceRoot":"","sources":["../../../src/integration-tests/oauth-integration.spec.ts"],"names":[],"mappings":"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"}
@@ -1,88 +0,0 @@
1
- /**
2
- * Simple OAuth integration test to debug the issue
3
- */
4
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
5
- import { OpenAIProvider } from '../providers/openai/OpenAIProvider.js';
6
- import { TEST_PROVIDER_CONFIG } from '../providers/test-utils/providerTestConfig.js';
7
- import { isQwenEndpoint } from '../config/endpoints.js';
8
- describe('Simple OAuth Integration Test', () => {
9
- let mockOAuthManager;
10
- let originalEnv;
11
- beforeEach(() => {
12
- vi.clearAllMocks();
13
- originalEnv = { ...process.env };
14
- // Clear environment variables
15
- delete process.env.OPENAI_API_KEY;
16
- mockOAuthManager = {
17
- getToken: vi.fn(),
18
- isAuthenticated: vi.fn(),
19
- };
20
- });
21
- afterEach(() => {
22
- process.env = originalEnv;
23
- });
24
- it('should verify endpoint validation first', () => {
25
- const qwenEndpoint = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
26
- const openaiEndpoint = 'https://api.openai.com/v1';
27
- const isQwenResult = isQwenEndpoint(qwenEndpoint);
28
- const isOpenAIResult = isQwenEndpoint(openaiEndpoint);
29
- // These should pass if endpoint validation is working
30
- expect(isQwenResult).toBe(true);
31
- expect(isOpenAIResult).toBe(false);
32
- });
33
- it('should test OAuth manager setup', async () => {
34
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('test-token');
35
- const qwenEndpoint = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
36
- // Create provider with explicit parameters
37
- const _provider = new OpenAIProvider('', // No API key
38
- qwenEndpoint, // Qwen endpoint
39
- TEST_PROVIDER_CONFIG, mockOAuthManager);
40
- // Call the getToken method to see if it's working
41
- const token = await mockOAuthManager.getToken('qwen');
42
- expect(token).toBe('test-token');
43
- });
44
- it('should test provider with API key precedence', async () => {
45
- const apiKey = 'test-api-key';
46
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token');
47
- const provider = new OpenAIProvider(apiKey, // API key present - should take precedence
48
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
49
- const isAuth = await provider.isAuthenticated();
50
- expect(isAuth).toBe(true);
51
- // OAuth should not be called when API key exists
52
- expect(mockOAuthManager.getToken).not.toHaveBeenCalled();
53
- });
54
- it('should test provider with environment variable', async () => {
55
- process.env.OPENAI_API_KEY = 'env-api-key';
56
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token');
57
- const provider = new OpenAIProvider('', // No CLI key
58
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', TEST_PROVIDER_CONFIG, mockOAuthManager);
59
- const isAuth = await provider.isAuthenticated();
60
- expect(isAuth).toBe(true);
61
- // OAuth should not be called when env var exists
62
- expect(mockOAuthManager.getToken).not.toHaveBeenCalled();
63
- });
64
- it('should debug OAuth configuration step by step', async () => {
65
- // Ensure no other auth methods are available
66
- delete process.env.OPENAI_API_KEY;
67
- vi.mocked(mockOAuthManager.getToken).mockResolvedValue('oauth-token');
68
- const provider = new OpenAIProvider('', // No CLI key
69
- 'https://dashscope.aliyuncs.com/compatible-mode/v1', // Qwen endpoint
70
- TEST_PROVIDER_CONFIG, mockOAuthManager);
71
- // Step 1: Check OAuth availability methods
72
- const hasNonOAuth = await provider.hasNonOAuthAuthentication();
73
- const isOAuthOnly = await provider.isOAuthOnlyAvailable();
74
- // These should be false and true respectively if OAuth is the only method
75
- expect(hasNonOAuth).toBe(false); // No other auth methods
76
- expect(isOAuthOnly).toBe(true); // OAuth is only method available
77
- // Step 2: Try authentication - this should work if OAuth is properly configured
78
- const isAuth = await provider.isAuthenticated();
79
- // Step 3: If auth fails, let's see what happened
80
- if (!isAuth) {
81
- const callCount = vi.mocked(mockOAuthManager.getToken).mock.calls.length;
82
- throw new Error(`OAuth authentication failed. getToken called ${callCount} times. Expected: 1`);
83
- }
84
- expect(isAuth).toBe(true);
85
- expect(mockOAuthManager.getToken).toHaveBeenCalledWith('qwen');
86
- });
87
- });
88
- //# sourceMappingURL=oauth-simple-test.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-simple-test.spec.js","sourceRoot":"","sources":["../../../src/integration-tests/oauth-simple-test.spec.ts"],"names":[],"mappings":"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"}