@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,279 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect } from 'vitest';
7
- import { toGenerateContentRequest, fromGenerateContentResponse, toContents, } from './converter.js';
8
- import { GenerateContentResponse, FinishReason, BlockedReason, } from '@google/genai';
9
- describe('converter', () => {
10
- describe('toCodeAssistRequest', () => {
11
- it('should convert a simple request with project', () => {
12
- const genaiReq = {
13
- model: 'gemini-pro',
14
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
15
- };
16
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
17
- expect(codeAssistReq).toEqual({
18
- model: 'gemini-pro',
19
- project: 'my-project',
20
- request: {
21
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
22
- systemInstruction: undefined,
23
- cachedContent: undefined,
24
- tools: undefined,
25
- toolConfig: undefined,
26
- labels: undefined,
27
- safetySettings: undefined,
28
- generationConfig: undefined,
29
- session_id: 'my-session',
30
- },
31
- user_prompt_id: 'my-prompt',
32
- });
33
- });
34
- it('should convert a request without a project', () => {
35
- const genaiReq = {
36
- model: 'gemini-pro',
37
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
38
- };
39
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', undefined, 'my-session');
40
- expect(codeAssistReq).toEqual({
41
- model: 'gemini-pro',
42
- project: undefined,
43
- request: {
44
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
45
- systemInstruction: undefined,
46
- cachedContent: undefined,
47
- tools: undefined,
48
- toolConfig: undefined,
49
- labels: undefined,
50
- safetySettings: undefined,
51
- generationConfig: undefined,
52
- session_id: 'my-session',
53
- },
54
- user_prompt_id: 'my-prompt',
55
- });
56
- });
57
- it('should convert a request with sessionId', () => {
58
- const genaiReq = {
59
- model: 'gemini-pro',
60
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
61
- };
62
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'session-123');
63
- expect(codeAssistReq).toEqual({
64
- model: 'gemini-pro',
65
- project: 'my-project',
66
- request: {
67
- contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
68
- systemInstruction: undefined,
69
- cachedContent: undefined,
70
- tools: undefined,
71
- toolConfig: undefined,
72
- labels: undefined,
73
- safetySettings: undefined,
74
- generationConfig: undefined,
75
- session_id: 'session-123',
76
- },
77
- user_prompt_id: 'my-prompt',
78
- });
79
- });
80
- it('should handle string content', () => {
81
- const genaiReq = {
82
- model: 'gemini-pro',
83
- contents: 'Hello',
84
- };
85
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
86
- expect(codeAssistReq.request.contents).toEqual([
87
- { role: 'user', parts: [{ text: 'Hello' }] },
88
- ]);
89
- });
90
- it('should handle Part[] content', () => {
91
- const genaiReq = {
92
- model: 'gemini-pro',
93
- contents: [{ text: 'Hello' }, { text: 'World' }],
94
- };
95
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
96
- expect(codeAssistReq.request.contents).toEqual([
97
- { role: 'user', parts: [{ text: 'Hello' }] },
98
- { role: 'user', parts: [{ text: 'World' }] },
99
- ]);
100
- });
101
- it('should handle system instructions', () => {
102
- const genaiReq = {
103
- model: 'gemini-pro',
104
- contents: 'Hello',
105
- config: {
106
- systemInstruction: 'You are a helpful assistant.',
107
- },
108
- };
109
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
110
- expect(codeAssistReq.request.systemInstruction).toEqual({
111
- role: 'user',
112
- parts: [{ text: 'You are a helpful assistant.' }],
113
- });
114
- });
115
- it('should handle generation config', () => {
116
- const genaiReq = {
117
- model: 'gemini-pro',
118
- contents: 'Hello',
119
- config: {
120
- temperature: 0.8,
121
- topK: 40,
122
- },
123
- };
124
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
125
- expect(codeAssistReq.request.generationConfig).toEqual({
126
- temperature: 0.8,
127
- topK: 40,
128
- });
129
- });
130
- it('should handle all generation config fields', () => {
131
- const genaiReq = {
132
- model: 'gemini-pro',
133
- contents: 'Hello',
134
- config: {
135
- temperature: 0.1,
136
- topP: 0.2,
137
- topK: 3,
138
- candidateCount: 4,
139
- maxOutputTokens: 5,
140
- stopSequences: ['a'],
141
- responseLogprobs: true,
142
- logprobs: 6,
143
- presencePenalty: 0.7,
144
- frequencyPenalty: 0.8,
145
- seed: 9,
146
- responseMimeType: 'application/json',
147
- },
148
- };
149
- const codeAssistReq = toGenerateContentRequest(genaiReq, 'my-prompt', 'my-project', 'my-session');
150
- expect(codeAssistReq.request.generationConfig).toEqual({
151
- temperature: 0.1,
152
- topP: 0.2,
153
- topK: 3,
154
- candidateCount: 4,
155
- maxOutputTokens: 5,
156
- stopSequences: ['a'],
157
- responseLogprobs: true,
158
- logprobs: 6,
159
- presencePenalty: 0.7,
160
- frequencyPenalty: 0.8,
161
- seed: 9,
162
- responseMimeType: 'application/json',
163
- });
164
- });
165
- });
166
- describe('fromCodeAssistResponse', () => {
167
- it('should convert a simple response', () => {
168
- const codeAssistRes = {
169
- response: {
170
- candidates: [
171
- {
172
- index: 0,
173
- content: {
174
- role: 'model',
175
- parts: [{ text: 'Hi there!' }],
176
- },
177
- finishReason: FinishReason.STOP,
178
- safetyRatings: [],
179
- },
180
- ],
181
- },
182
- };
183
- const genaiRes = fromGenerateContentResponse(codeAssistRes);
184
- expect(genaiRes).toBeInstanceOf(GenerateContentResponse);
185
- expect(genaiRes.candidates).toEqual(codeAssistRes.response.candidates);
186
- });
187
- it('should handle prompt feedback and usage metadata', () => {
188
- const codeAssistRes = {
189
- response: {
190
- candidates: [],
191
- promptFeedback: {
192
- blockReason: BlockedReason.SAFETY,
193
- safetyRatings: [],
194
- },
195
- usageMetadata: {
196
- promptTokenCount: 10,
197
- candidatesTokenCount: 20,
198
- totalTokenCount: 30,
199
- },
200
- },
201
- };
202
- const genaiRes = fromGenerateContentResponse(codeAssistRes);
203
- expect(genaiRes.promptFeedback).toEqual(codeAssistRes.response.promptFeedback);
204
- expect(genaiRes.usageMetadata).toEqual(codeAssistRes.response.usageMetadata);
205
- });
206
- it('should handle automatic function calling history', () => {
207
- const codeAssistRes = {
208
- response: {
209
- candidates: [],
210
- automaticFunctionCallingHistory: [
211
- {
212
- role: 'model',
213
- parts: [
214
- {
215
- functionCall: {
216
- name: 'test_function',
217
- args: {
218
- foo: 'bar',
219
- },
220
- },
221
- },
222
- ],
223
- },
224
- ],
225
- },
226
- };
227
- const genaiRes = fromGenerateContentResponse(codeAssistRes);
228
- expect(genaiRes.automaticFunctionCallingHistory).toEqual(codeAssistRes.response.automaticFunctionCallingHistory);
229
- });
230
- });
231
- describe('toContents', () => {
232
- it('should handle Content', () => {
233
- const content = {
234
- role: 'user',
235
- parts: [{ text: 'hello' }],
236
- };
237
- expect(toContents(content)).toEqual([
238
- { role: 'user', parts: [{ text: 'hello' }] },
239
- ]);
240
- });
241
- it('should handle array of Contents', () => {
242
- const contents = [
243
- { role: 'user', parts: [{ text: 'hello' }] },
244
- { role: 'model', parts: [{ text: 'hi' }] },
245
- ];
246
- expect(toContents(contents)).toEqual([
247
- { role: 'user', parts: [{ text: 'hello' }] },
248
- { role: 'model', parts: [{ text: 'hi' }] },
249
- ]);
250
- });
251
- it('should handle Part', () => {
252
- const part = { text: 'a part' };
253
- expect(toContents(part)).toEqual([
254
- { role: 'user', parts: [{ text: 'a part' }] },
255
- ]);
256
- });
257
- it('should handle array of Parts', () => {
258
- const parts = [{ text: 'part 1' }, 'part 2'];
259
- expect(toContents(parts)).toEqual([
260
- { role: 'user', parts: [{ text: 'part 1' }] },
261
- { role: 'user', parts: [{ text: 'part 2' }] },
262
- ]);
263
- });
264
- it('should handle string', () => {
265
- const str = 'a string';
266
- expect(toContents(str)).toEqual([
267
- { role: 'user', parts: [{ text: 'a string' }] },
268
- ]);
269
- });
270
- it('should handle array of strings', () => {
271
- const strings = ['string 1', 'string 2'];
272
- expect(toContents(strings)).toEqual([
273
- { role: 'user', parts: [{ text: 'string 1' }] },
274
- { role: 'user', parts: [{ text: 'string 2' }] },
275
- ]);
276
- });
277
- });
278
- });
279
- //# sourceMappingURL=converter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"converter.test.js","sourceRoot":"","sources":["../../../src/code_assist/converter.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Vybestack LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,370 +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 { getOauthClient } from './oauth2.js';
8
- import { getCachedGoogleAccount } from '../utils/user_account.js';
9
- import { OAuth2Client, Compute } from 'google-auth-library';
10
- import * as fs from 'fs';
11
- import * as path from 'path';
12
- import http from 'http';
13
- import open from 'open';
14
- import crypto from 'crypto';
15
- import * as os from 'os';
16
- import { AuthType } from '../core/contentGenerator.js';
17
- import readline from 'node:readline';
18
- vi.mock('os', async (importOriginal) => {
19
- const os = await importOriginal();
20
- return {
21
- ...os,
22
- homedir: vi.fn(),
23
- };
24
- });
25
- vi.mock('google-auth-library');
26
- vi.mock('http');
27
- vi.mock('open');
28
- vi.mock('crypto');
29
- vi.mock('node:readline');
30
- const mockConfig = {
31
- getNoBrowser: () => false,
32
- getProxy: () => 'http://test.proxy.com:8080',
33
- isBrowserLaunchSuppressed: () => false,
34
- };
35
- // Mock fetch globally
36
- global.fetch = vi.fn();
37
- describe('oauth2', () => {
38
- let tempHomeDir;
39
- let processExitSpy;
40
- beforeEach(() => {
41
- // Mock process.exit to prevent tests from actually exiting
42
- processExitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
43
- throw new Error(`process.exit unexpectedly called`);
44
- }));
45
- tempHomeDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-'));
46
- vi.mocked(os.homedir).mockReturnValue(tempHomeDir);
47
- });
48
- afterEach(() => {
49
- fs.rmSync(tempHomeDir, { recursive: true, force: true });
50
- vi.clearAllMocks();
51
- delete process.env.CLOUD_SHELL;
52
- delete process.env.GOOGLE_GENAI_USE_GCA;
53
- delete process.env.GOOGLE_CLOUD_ACCESS_TOKEN;
54
- processExitSpy.mockRestore();
55
- });
56
- it.skip('should perform a web login', { timeout: 20000 }, async () => {
57
- const mockAuthUrl = 'https://example.com/auth';
58
- const mockCode = 'test-code';
59
- const mockState = 'test-state';
60
- const mockTokens = {
61
- access_token: 'test-access-token',
62
- refresh_token: 'test-refresh-token',
63
- };
64
- const mockGenerateAuthUrl = vi.fn().mockReturnValue(mockAuthUrl);
65
- const mockGetToken = vi.fn().mockResolvedValue({ tokens: mockTokens });
66
- const mockSetCredentials = vi.fn();
67
- const mockGetAccessToken = vi
68
- .fn()
69
- .mockResolvedValue({ token: 'mock-access-token' });
70
- const mockGenerateCodeVerifierAsync = vi
71
- .fn()
72
- .mockResolvedValue('mock-code-verifier');
73
- const mockOAuth2Client = {
74
- generateAuthUrl: mockGenerateAuthUrl,
75
- getToken: mockGetToken,
76
- setCredentials: mockSetCredentials,
77
- getAccessToken: mockGetAccessToken,
78
- generateCodeVerifierAsync: mockGenerateCodeVerifierAsync,
79
- credentials: mockTokens,
80
- on: vi.fn(),
81
- };
82
- vi.mocked(OAuth2Client).mockImplementation(() => mockOAuth2Client);
83
- vi.spyOn(crypto, 'randomBytes').mockReturnValue(mockState);
84
- // Mock open to return a proper child process mock
85
- const mockChildProcess = {
86
- on: vi.fn(),
87
- pid: 12345,
88
- };
89
- vi.mocked(open).mockImplementation(async () => mockChildProcess);
90
- // Mock readline in case it falls back to user code
91
- const mockReadline = {
92
- question: vi.fn((_query, callback) => callback(mockCode)),
93
- close: vi.fn(),
94
- };
95
- vi.mocked(readline.createInterface).mockReturnValue(mockReadline);
96
- // Mock the UserInfo API response
97
- vi.mocked(global.fetch).mockResolvedValue({
98
- ok: true,
99
- json: vi
100
- .fn()
101
- .mockResolvedValue({ email: 'test-google-account@gmail.com' }),
102
- });
103
- let requestCallback;
104
- let serverListeningCallback;
105
- const serverListeningPromise = new Promise((resolve) => (serverListeningCallback = resolve));
106
- let capturedPort = 0;
107
- const mockHttpServer = {
108
- listen: vi.fn((port, host, callback) => {
109
- capturedPort = port;
110
- // The callback might be passed as second parameter when host is omitted
111
- if (typeof host === 'function') {
112
- callback = host;
113
- }
114
- if (callback) {
115
- callback();
116
- }
117
- serverListeningCallback(undefined);
118
- }),
119
- close: vi.fn((callback) => {
120
- if (callback) {
121
- callback();
122
- }
123
- }),
124
- on: vi.fn(),
125
- address: () => ({ port: capturedPort }),
126
- };
127
- vi.mocked(http.createServer).mockImplementation((cb) => {
128
- requestCallback = cb;
129
- return mockHttpServer;
130
- });
131
- const clientPromise = getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
132
- // wait for server to start listening.
133
- await serverListeningPromise;
134
- const mockReq = {
135
- url: `/oauth2callback?code=${mockCode}&state=${mockState}`,
136
- };
137
- const mockRes = {
138
- writeHead: vi.fn(),
139
- end: vi.fn(),
140
- };
141
- await requestCallback(mockReq, mockRes);
142
- const client = await clientPromise;
143
- expect(client).toBe(mockOAuth2Client);
144
- expect(open).toHaveBeenCalledWith(mockAuthUrl);
145
- expect(mockGetToken).toHaveBeenCalledWith({
146
- code: mockCode,
147
- redirect_uri: `http://localhost:${capturedPort}/oauth2callback`,
148
- });
149
- expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
150
- // Verify Google Account was cached
151
- const googleAccountPath = path.join(tempHomeDir, '.llxprt', 'google_accounts.json');
152
- expect(fs.existsSync(googleAccountPath)).toBe(true);
153
- const cachedGoogleAccount = fs.readFileSync(googleAccountPath, 'utf-8');
154
- expect(JSON.parse(cachedGoogleAccount)).toEqual({
155
- active: 'test-google-account@gmail.com',
156
- old: [],
157
- });
158
- // Verify the getCachedGoogleAccount function works
159
- expect(getCachedGoogleAccount()).toBe('test-google-account@gmail.com');
160
- });
161
- it.skip('should perform login with user code', { timeout: 30000 }, async () => {
162
- const mockConfigWithNoBrowser = {
163
- getNoBrowser: () => true,
164
- getProxy: () => 'http://test.proxy.com:8080',
165
- isBrowserLaunchSuppressed: () => true,
166
- };
167
- const mockCodeVerifier = {
168
- codeChallenge: 'test-challenge',
169
- codeVerifier: 'test-verifier',
170
- };
171
- const mockAuthUrl = 'https://example.com/auth-user-code';
172
- const mockCode = 'test-user-code';
173
- const mockTokens = {
174
- access_token: 'test-access-token-user-code',
175
- refresh_token: 'test-refresh-token-user-code',
176
- };
177
- const mockGenerateAuthUrl = vi.fn().mockReturnValue(mockAuthUrl);
178
- const mockGetToken = vi.fn().mockResolvedValue({ tokens: mockTokens });
179
- const mockSetCredentials = vi.fn();
180
- const mockGenerateCodeVerifierAsync = vi
181
- .fn()
182
- .mockResolvedValue(mockCodeVerifier);
183
- const mockGetAccessToken = vi
184
- .fn()
185
- .mockResolvedValue({ token: 'mock-access-token-user-code' });
186
- const mockOAuth2Client = {
187
- generateAuthUrl: mockGenerateAuthUrl,
188
- getToken: mockGetToken,
189
- setCredentials: mockSetCredentials,
190
- generateCodeVerifierAsync: mockGenerateCodeVerifierAsync,
191
- getAccessToken: mockGetAccessToken,
192
- credentials: mockTokens,
193
- on: vi.fn(),
194
- };
195
- vi.mocked(OAuth2Client).mockImplementation(() => mockOAuth2Client);
196
- // Mock open to immediately reject to simulate browser not available
197
- vi.mocked(open).mockRejectedValue(new Error('Browser not available'));
198
- const mockReadline = {
199
- question: vi.fn((_query, callback) => callback(mockCode)),
200
- close: vi.fn(),
201
- };
202
- vi.mocked(readline.createInterface).mockReturnValue(mockReadline);
203
- const consoleLogSpy = vi
204
- .spyOn(console, 'log')
205
- .mockImplementation(() => { });
206
- // Mock the UserInfo API response
207
- vi.mocked(global.fetch).mockResolvedValue({
208
- ok: true,
209
- json: vi.fn().mockResolvedValue({ email: 'test-user-code@gmail.com' }),
210
- });
211
- const client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfigWithNoBrowser);
212
- expect(client).toBe(mockOAuth2Client);
213
- // Verify the auth flow
214
- expect(mockGenerateCodeVerifierAsync).toHaveBeenCalled();
215
- expect(mockGenerateAuthUrl).toHaveBeenCalled();
216
- expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining(mockAuthUrl));
217
- expect(mockReadline.question).toHaveBeenCalledWith('Enter the authorization code: ', expect.any(Function));
218
- expect(mockGetToken).toHaveBeenCalledWith({
219
- code: mockCode,
220
- codeVerifier: mockCodeVerifier.codeVerifier,
221
- redirect_uri: 'https://codeassist.google.com/authcode',
222
- });
223
- expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
224
- consoleLogSpy.mockRestore();
225
- });
226
- describe('in Cloud Shell', () => {
227
- const mockGetAccessToken = vi.fn();
228
- let mockComputeClient;
229
- beforeEach(() => {
230
- mockGetAccessToken.mockResolvedValue({ token: 'test-access-token' });
231
- mockComputeClient = {
232
- credentials: { refresh_token: 'test-refresh-token' },
233
- getAccessToken: mockGetAccessToken,
234
- };
235
- vi.mocked(Compute).mockImplementation(() => mockComputeClient);
236
- });
237
- it('should attempt to load cached credentials first', async () => {
238
- const cachedCreds = { refresh_token: 'cached-token' };
239
- const credsPath = path.join(tempHomeDir, '.llxprt', 'oauth_creds.json');
240
- await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
241
- await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
242
- const mockClient = {
243
- setCredentials: vi.fn(),
244
- getAccessToken: vi.fn().mockResolvedValue({ token: 'test-token' }),
245
- getTokenInfo: vi.fn().mockResolvedValue({}),
246
- on: vi.fn(),
247
- };
248
- // To mock the new OAuth2Client() inside the function
249
- vi.mocked(OAuth2Client).mockImplementation(() => mockClient);
250
- await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
251
- expect(mockClient.setCredentials).toHaveBeenCalledWith(cachedCreds);
252
- expect(mockClient.getAccessToken).toHaveBeenCalled();
253
- expect(mockClient.getTokenInfo).toHaveBeenCalled();
254
- expect(Compute).not.toHaveBeenCalled(); // Should not fetch new client if cache is valid
255
- });
256
- it('should use Compute to get a client if no cached credentials exist', async () => {
257
- await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
258
- expect(Compute).toHaveBeenCalledWith({});
259
- expect(mockGetAccessToken).toHaveBeenCalled();
260
- });
261
- it('should not cache the credentials after fetching them via ADC', async () => {
262
- const newCredentials = { refresh_token: 'new-adc-token' };
263
- mockComputeClient.credentials = newCredentials;
264
- mockGetAccessToken.mockResolvedValue({ token: 'new-adc-token' });
265
- await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
266
- const credsPath = path.join(tempHomeDir, '.llxprt', 'oauth_creds.json');
267
- expect(fs.existsSync(credsPath)).toBe(false);
268
- });
269
- it('should return the Compute client on successful ADC authentication', async () => {
270
- const client = await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
271
- expect(client).toBe(mockComputeClient);
272
- });
273
- it('should throw an error if ADC fails', async () => {
274
- const testError = new Error('ADC Failed');
275
- mockGetAccessToken.mockRejectedValue(testError);
276
- await expect(getOauthClient(AuthType.CLOUD_SHELL, mockConfig)).rejects.toThrow('Could not authenticate using Cloud Shell credentials. Please select a different authentication method or ensure you are in a properly configured environment. Error: ADC Failed');
277
- });
278
- });
279
- describe('with GCP environment variables', () => {
280
- it('should use GOOGLE_CLOUD_ACCESS_TOKEN when GOOGLE_GENAI_USE_GCA is true', async () => {
281
- process.env.GOOGLE_GENAI_USE_GCA = 'true';
282
- process.env.GOOGLE_CLOUD_ACCESS_TOKEN = 'gcp-access-token';
283
- const mockSetCredentials = vi.fn();
284
- const mockGetAccessToken = vi
285
- .fn()
286
- .mockResolvedValue({ token: 'gcp-access-token' });
287
- const mockOAuth2Client = {
288
- setCredentials: mockSetCredentials,
289
- getAccessToken: mockGetAccessToken,
290
- on: vi.fn(),
291
- };
292
- vi.mocked(OAuth2Client).mockImplementation(() => mockOAuth2Client);
293
- // Mock the UserInfo API response for fetchAndCacheUserInfo
294
- vi.mocked(global.fetch).mockResolvedValue({
295
- ok: true,
296
- json: vi
297
- .fn()
298
- .mockResolvedValue({ email: 'test-gcp-account@gmail.com' }),
299
- });
300
- const client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
301
- expect(client).toBe(mockOAuth2Client);
302
- expect(mockSetCredentials).toHaveBeenCalledWith({
303
- access_token: 'gcp-access-token',
304
- });
305
- // Verify fetchAndCacheUserInfo was effectively called
306
- expect(mockGetAccessToken).toHaveBeenCalled();
307
- expect(global.fetch).toHaveBeenCalledWith('https://www.googleapis.com/oauth2/v2/userinfo', {
308
- headers: {
309
- Authorization: 'Bearer gcp-access-token',
310
- },
311
- });
312
- // Verify Google Account was cached
313
- const googleAccountPath = path.join(tempHomeDir, '.llxprt', 'google_accounts.json');
314
- const cachedContent = fs.readFileSync(googleAccountPath, 'utf-8');
315
- expect(JSON.parse(cachedContent)).toEqual({
316
- active: 'test-gcp-account@gmail.com',
317
- old: [],
318
- });
319
- });
320
- it('should not use GCP token if GOOGLE_CLOUD_ACCESS_TOKEN is not set', async () => {
321
- process.env.GOOGLE_GENAI_USE_GCA = 'true';
322
- const mockSetCredentials = vi.fn();
323
- const mockGetAccessToken = vi
324
- .fn()
325
- .mockResolvedValue({ token: 'cached-access-token' });
326
- const mockGetTokenInfo = vi.fn().mockResolvedValue({});
327
- const mockOAuth2Client = {
328
- setCredentials: mockSetCredentials,
329
- getAccessToken: mockGetAccessToken,
330
- getTokenInfo: mockGetTokenInfo,
331
- on: vi.fn(),
332
- };
333
- vi.mocked(OAuth2Client).mockImplementation(() => mockOAuth2Client);
334
- // Make it fall through to cached credentials path
335
- const cachedCreds = { refresh_token: 'cached-token' };
336
- const credsPath = path.join(tempHomeDir, '.llxprt', 'oauth_creds.json');
337
- await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
338
- await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
339
- await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
340
- // It should be called with the cached credentials, not the GCP access token.
341
- expect(mockSetCredentials).toHaveBeenCalledTimes(1);
342
- expect(mockSetCredentials).toHaveBeenCalledWith(cachedCreds);
343
- });
344
- it('should not use GCP token if GOOGLE_GENAI_USE_GCA is not set', async () => {
345
- process.env.GOOGLE_CLOUD_ACCESS_TOKEN = 'gcp-access-token';
346
- const mockSetCredentials = vi.fn();
347
- const mockGetAccessToken = vi
348
- .fn()
349
- .mockResolvedValue({ token: 'cached-access-token' });
350
- const mockGetTokenInfo = vi.fn().mockResolvedValue({});
351
- const mockOAuth2Client = {
352
- setCredentials: mockSetCredentials,
353
- getAccessToken: mockGetAccessToken,
354
- getTokenInfo: mockGetTokenInfo,
355
- on: vi.fn(),
356
- };
357
- vi.mocked(OAuth2Client).mockImplementation(() => mockOAuth2Client);
358
- // Make it fall through to cached credentials path
359
- const cachedCreds = { refresh_token: 'cached-token' };
360
- const credsPath = path.join(tempHomeDir, '.llxprt', 'oauth_creds.json');
361
- await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
362
- await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
363
- await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
364
- // It should be called with the cached credentials, not the GCP access token.
365
- expect(mockSetCredentials).toHaveBeenCalledTimes(1);
366
- expect(mockSetCredentials).toHaveBeenCalledWith(cachedCreds);
367
- });
368
- });
369
- });
370
- //# sourceMappingURL=oauth2.test.js.map