@vybestack/llxprt-code-core 0.1.12

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 (448) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.js +8 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/__mocks__/fs/promises.d.ts +11 -0
  6. package/dist/src/__mocks__/fs/promises.js +17 -0
  7. package/dist/src/__mocks__/fs/promises.js.map +1 -0
  8. package/dist/src/code_assist/codeAssist.d.ts +9 -0
  9. package/dist/src/code_assist/codeAssist.js +19 -0
  10. package/dist/src/code_assist/codeAssist.js.map +1 -0
  11. package/dist/src/code_assist/converter.d.ts +68 -0
  12. package/dist/src/code_assist/converter.js +125 -0
  13. package/dist/src/code_assist/converter.js.map +1 -0
  14. package/dist/src/code_assist/converter.test.d.ts +6 -0
  15. package/dist/src/code_assist/converter.test.js +229 -0
  16. package/dist/src/code_assist/converter.test.js.map +1 -0
  17. package/dist/src/code_assist/oauth2.d.ts +20 -0
  18. package/dist/src/code_assist/oauth2.js +339 -0
  19. package/dist/src/code_assist/oauth2.js.map +1 -0
  20. package/dist/src/code_assist/oauth2.test.d.ts +6 -0
  21. package/dist/src/code_assist/oauth2.test.js +249 -0
  22. package/dist/src/code_assist/oauth2.test.js.map +1 -0
  23. package/dist/src/code_assist/server.d.ts +39 -0
  24. package/dist/src/code_assist/server.js +191 -0
  25. package/dist/src/code_assist/server.js.map +1 -0
  26. package/dist/src/code_assist/server.test.d.ts +6 -0
  27. package/dist/src/code_assist/server.test.js +123 -0
  28. package/dist/src/code_assist/server.test.js.map +1 -0
  29. package/dist/src/code_assist/setup.d.ts +15 -0
  30. package/dist/src/code_assist/setup.js +67 -0
  31. package/dist/src/code_assist/setup.js.map +1 -0
  32. package/dist/src/code_assist/setup.test.d.ts +6 -0
  33. package/dist/src/code_assist/setup.test.js +62 -0
  34. package/dist/src/code_assist/setup.test.js.map +1 -0
  35. package/dist/src/code_assist/types.d.ts +148 -0
  36. package/dist/src/code_assist/types.js +46 -0
  37. package/dist/src/code_assist/types.js.map +1 -0
  38. package/dist/src/config/config.d.ts +212 -0
  39. package/dist/src/config/config.js +454 -0
  40. package/dist/src/config/config.js.map +1 -0
  41. package/dist/src/config/config.test.d.ts +6 -0
  42. package/dist/src/config/config.test.js +291 -0
  43. package/dist/src/config/config.test.js.map +1 -0
  44. package/dist/src/config/flashFallback.test.d.ts +6 -0
  45. package/dist/src/config/flashFallback.test.js +115 -0
  46. package/dist/src/config/flashFallback.test.js.map +1 -0
  47. package/dist/src/config/models.d.ts +8 -0
  48. package/dist/src/config/models.js +9 -0
  49. package/dist/src/config/models.js.map +1 -0
  50. package/dist/src/core/client.d.ts +59 -0
  51. package/dist/src/core/client.js +503 -0
  52. package/dist/src/core/client.js.map +1 -0
  53. package/dist/src/core/client.test.d.ts +6 -0
  54. package/dist/src/core/client.test.js +1006 -0
  55. package/dist/src/core/client.test.js.map +1 -0
  56. package/dist/src/core/contentGenerator.d.ts +36 -0
  57. package/dist/src/core/contentGenerator.js +79 -0
  58. package/dist/src/core/contentGenerator.js.map +1 -0
  59. package/dist/src/core/contentGenerator.test.d.ts +6 -0
  60. package/dist/src/core/contentGenerator.test.js +92 -0
  61. package/dist/src/core/contentGenerator.test.js.map +1 -0
  62. package/dist/src/core/coreToolScheduler.d.ts +104 -0
  63. package/dist/src/core/coreToolScheduler.js +413 -0
  64. package/dist/src/core/coreToolScheduler.js.map +1 -0
  65. package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
  66. package/dist/src/core/coreToolScheduler.test.js +347 -0
  67. package/dist/src/core/coreToolScheduler.test.js.map +1 -0
  68. package/dist/src/core/geminiChat.d.ts +116 -0
  69. package/dist/src/core/geminiChat.js +513 -0
  70. package/dist/src/core/geminiChat.js.map +1 -0
  71. package/dist/src/core/geminiChat.test.d.ts +6 -0
  72. package/dist/src/core/geminiChat.test.js +424 -0
  73. package/dist/src/core/geminiChat.test.js.map +1 -0
  74. package/dist/src/core/geminiRequest.d.ts +13 -0
  75. package/dist/src/core/geminiRequest.js +45 -0
  76. package/dist/src/core/geminiRequest.js.map +1 -0
  77. package/dist/src/core/geminiRequest.test.d.ts +6 -0
  78. package/dist/src/core/geminiRequest.test.js +72 -0
  79. package/dist/src/core/geminiRequest.test.js.map +1 -0
  80. package/dist/src/core/logger.d.ts +38 -0
  81. package/dist/src/core/logger.js +237 -0
  82. package/dist/src/core/logger.js.map +1 -0
  83. package/dist/src/core/logger.test.d.ts +6 -0
  84. package/dist/src/core/logger.test.js +387 -0
  85. package/dist/src/core/logger.test.js.map +1 -0
  86. package/dist/src/core/modelCheck.d.ts +14 -0
  87. package/dist/src/core/modelCheck.js +55 -0
  88. package/dist/src/core/modelCheck.js.map +1 -0
  89. package/dist/src/core/nonInteractiveToolExecutor.d.ts +12 -0
  90. package/dist/src/core/nonInteractiveToolExecutor.js +93 -0
  91. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
  92. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
  93. package/dist/src/core/nonInteractiveToolExecutor.test.js +180 -0
  94. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
  95. package/dist/src/core/prompts.d.ts +12 -0
  96. package/dist/src/core/prompts.js +418 -0
  97. package/dist/src/core/prompts.js.map +1 -0
  98. package/dist/src/core/prompts.test.d.ts +6 -0
  99. package/dist/src/core/prompts.test.js +97 -0
  100. package/dist/src/core/prompts.test.js.map +1 -0
  101. package/dist/src/core/tokenLimits.d.ts +10 -0
  102. package/dist/src/core/tokenLimits.js +75 -0
  103. package/dist/src/core/tokenLimits.js.map +1 -0
  104. package/dist/src/core/tokenLimits.test.d.ts +6 -0
  105. package/dist/src/core/tokenLimits.test.js +66 -0
  106. package/dist/src/core/tokenLimits.test.js.map +1 -0
  107. package/dist/src/core/turn.d.ts +116 -0
  108. package/dist/src/core/turn.js +131 -0
  109. package/dist/src/core/turn.js.map +1 -0
  110. package/dist/src/core/turn.test.d.ts +6 -0
  111. package/dist/src/core/turn.test.js +237 -0
  112. package/dist/src/core/turn.test.js.map +1 -0
  113. package/dist/src/index.d.ts +57 -0
  114. package/dist/src/index.js +64 -0
  115. package/dist/src/index.js.map +1 -0
  116. package/dist/src/index.test.d.ts +6 -0
  117. package/dist/src/index.test.js +12 -0
  118. package/dist/src/index.test.js.map +1 -0
  119. package/dist/src/providers/ProviderContentGenerator.d.ts +21 -0
  120. package/dist/src/providers/ProviderContentGenerator.js +52 -0
  121. package/dist/src/providers/ProviderContentGenerator.js.map +1 -0
  122. package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +68 -0
  123. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +549 -0
  124. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -0
  125. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +6 -0
  126. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +253 -0
  127. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -0
  128. package/dist/src/providers/types.d.ts +82 -0
  129. package/dist/src/providers/types.js +7 -0
  130. package/dist/src/providers/types.js.map +1 -0
  131. package/dist/src/services/fileDiscoveryService.d.ts +35 -0
  132. package/dist/src/services/fileDiscoveryService.js +91 -0
  133. package/dist/src/services/fileDiscoveryService.js.map +1 -0
  134. package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
  135. package/dist/src/services/fileDiscoveryService.test.js +102 -0
  136. package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
  137. package/dist/src/services/gitService.d.ts +21 -0
  138. package/dist/src/services/gitService.js +102 -0
  139. package/dist/src/services/gitService.js.map +1 -0
  140. package/dist/src/services/gitService.test.d.ts +6 -0
  141. package/dist/src/services/gitService.test.js +246 -0
  142. package/dist/src/services/gitService.test.js.map +1 -0
  143. package/dist/src/services/ideContext.d.ts +124 -0
  144. package/dist/src/services/ideContext.js +90 -0
  145. package/dist/src/services/ideContext.js.map +1 -0
  146. package/dist/src/services/ideContext.test.d.ts +6 -0
  147. package/dist/src/services/ideContext.test.js +101 -0
  148. package/dist/src/services/ideContext.test.js.map +1 -0
  149. package/dist/src/services/loopDetectionService.d.ts +35 -0
  150. package/dist/src/services/loopDetectionService.js +117 -0
  151. package/dist/src/services/loopDetectionService.js.map +1 -0
  152. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  153. package/dist/src/services/loopDetectionService.test.js +232 -0
  154. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  155. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +35 -0
  156. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +424 -0
  157. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
  158. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +47 -0
  159. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +123 -0
  160. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
  161. package/dist/src/telemetry/constants.d.ts +20 -0
  162. package/dist/src/telemetry/constants.js +21 -0
  163. package/dist/src/telemetry/constants.js.map +1 -0
  164. package/dist/src/telemetry/index.d.ts +18 -0
  165. package/dist/src/telemetry/index.js +20 -0
  166. package/dist/src/telemetry/index.js.map +1 -0
  167. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  168. package/dist/src/telemetry/integration.test.circular.js +53 -0
  169. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  170. package/dist/src/telemetry/loggers.d.ts +15 -0
  171. package/dist/src/telemetry/loggers.js +229 -0
  172. package/dist/src/telemetry/loggers.js.map +1 -0
  173. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  174. package/dist/src/telemetry/loggers.test.circular.js +100 -0
  175. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  176. package/dist/src/telemetry/loggers.test.d.ts +6 -0
  177. package/dist/src/telemetry/loggers.test.js +558 -0
  178. package/dist/src/telemetry/loggers.test.js.map +1 -0
  179. package/dist/src/telemetry/metrics.d.ts +19 -0
  180. package/dist/src/telemetry/metrics.js +144 -0
  181. package/dist/src/telemetry/metrics.js.map +1 -0
  182. package/dist/src/telemetry/metrics.test.d.ts +6 -0
  183. package/dist/src/telemetry/metrics.test.js +162 -0
  184. package/dist/src/telemetry/metrics.test.js.map +1 -0
  185. package/dist/src/telemetry/sdk.d.ts +9 -0
  186. package/dist/src/telemetry/sdk.js +120 -0
  187. package/dist/src/telemetry/sdk.js.map +1 -0
  188. package/dist/src/telemetry/telemetry.test.d.ts +6 -0
  189. package/dist/src/telemetry/telemetry.test.js +52 -0
  190. package/dist/src/telemetry/telemetry.test.js.map +1 -0
  191. package/dist/src/telemetry/types.d.ts +115 -0
  192. package/dist/src/telemetry/types.js +217 -0
  193. package/dist/src/telemetry/types.js.map +1 -0
  194. package/dist/src/telemetry/uiTelemetry.d.ts +67 -0
  195. package/dist/src/telemetry/uiTelemetry.js +131 -0
  196. package/dist/src/telemetry/uiTelemetry.js.map +1 -0
  197. package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
  198. package/dist/src/telemetry/uiTelemetry.test.js +412 -0
  199. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
  200. package/dist/src/tools/diffOptions.d.ts +7 -0
  201. package/dist/src/tools/diffOptions.js +10 -0
  202. package/dist/src/tools/diffOptions.js.map +1 -0
  203. package/dist/src/tools/edit.d.ts +73 -0
  204. package/dist/src/tools/edit.js +343 -0
  205. package/dist/src/tools/edit.js.map +1 -0
  206. package/dist/src/tools/edit.test.d.ts +6 -0
  207. package/dist/src/tools/edit.test.js +500 -0
  208. package/dist/src/tools/edit.test.js.map +1 -0
  209. package/dist/src/tools/glob.d.ts +58 -0
  210. package/dist/src/tools/glob.js +193 -0
  211. package/dist/src/tools/glob.js.map +1 -0
  212. package/dist/src/tools/glob.test.d.ts +6 -0
  213. package/dist/src/tools/glob.test.js +294 -0
  214. package/dist/src/tools/glob.test.js.map +1 -0
  215. package/dist/src/tools/grep.d.ts +78 -0
  216. package/dist/src/tools/grep.js +422 -0
  217. package/dist/src/tools/grep.js.map +1 -0
  218. package/dist/src/tools/grep.test.d.ts +6 -0
  219. package/dist/src/tools/grep.test.js +188 -0
  220. package/dist/src/tools/grep.test.js.map +1 -0
  221. package/dist/src/tools/ls.d.ts +83 -0
  222. package/dist/src/tools/ls.js +194 -0
  223. package/dist/src/tools/ls.js.map +1 -0
  224. package/dist/src/tools/mcp-client.d.ts +112 -0
  225. package/dist/src/tools/mcp-client.js +332 -0
  226. package/dist/src/tools/mcp-client.js.map +1 -0
  227. package/dist/src/tools/mcp-client.test.d.ts +6 -0
  228. package/dist/src/tools/mcp-client.test.js +227 -0
  229. package/dist/src/tools/mcp-client.test.js.map +1 -0
  230. package/dist/src/tools/mcp-tool.d.ts +23 -0
  231. package/dist/src/tools/mcp-tool.js +119 -0
  232. package/dist/src/tools/mcp-tool.js.map +1 -0
  233. package/dist/src/tools/mcp-tool.test.d.ts +6 -0
  234. package/dist/src/tools/mcp-tool.test.js +173 -0
  235. package/dist/src/tools/mcp-tool.test.js.map +1 -0
  236. package/dist/src/tools/memoryTool.d.ts +28 -0
  237. package/dist/src/tools/memoryTool.js +172 -0
  238. package/dist/src/tools/memoryTool.js.map +1 -0
  239. package/dist/src/tools/memoryTool.test.d.ts +6 -0
  240. package/dist/src/tools/memoryTool.test.js +181 -0
  241. package/dist/src/tools/memoryTool.test.js.map +1 -0
  242. package/dist/src/tools/modifiable-tool.d.ts +29 -0
  243. package/dist/src/tools/modifiable-tool.js +85 -0
  244. package/dist/src/tools/modifiable-tool.js.map +1 -0
  245. package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
  246. package/dist/src/tools/modifiable-tool.test.js +204 -0
  247. package/dist/src/tools/modifiable-tool.test.js.map +1 -0
  248. package/dist/src/tools/read-file.d.ts +35 -0
  249. package/dist/src/tools/read-file.js +106 -0
  250. package/dist/src/tools/read-file.js.map +1 -0
  251. package/dist/src/tools/read-file.test.d.ts +6 -0
  252. package/dist/src/tools/read-file.test.js +181 -0
  253. package/dist/src/tools/read-file.test.js.map +1 -0
  254. package/dist/src/tools/read-many-files.d.ts +59 -0
  255. package/dist/src/tools/read-many-files.js +321 -0
  256. package/dist/src/tools/read-many-files.js.map +1 -0
  257. package/dist/src/tools/read-many-files.test.d.ts +6 -0
  258. package/dist/src/tools/read-many-files.test.js +312 -0
  259. package/dist/src/tools/read-many-files.test.js.map +1 -0
  260. package/dist/src/tools/shell.d.ts +43 -0
  261. package/dist/src/tools/shell.js +435 -0
  262. package/dist/src/tools/shell.js.map +1 -0
  263. package/dist/src/tools/shell.test.d.ts +6 -0
  264. package/dist/src/tools/shell.test.js +407 -0
  265. package/dist/src/tools/shell.test.js.map +1 -0
  266. package/dist/src/tools/todo-read.d.ts +15 -0
  267. package/dist/src/tools/todo-read.js +66 -0
  268. package/dist/src/tools/todo-read.js.map +1 -0
  269. package/dist/src/tools/todo-read.test.d.ts +6 -0
  270. package/dist/src/tools/todo-read.test.js +158 -0
  271. package/dist/src/tools/todo-read.test.js.map +1 -0
  272. package/dist/src/tools/todo-schemas.d.ts +43 -0
  273. package/dist/src/tools/todo-schemas.js +16 -0
  274. package/dist/src/tools/todo-schemas.js.map +1 -0
  275. package/dist/src/tools/todo-schemas.test.d.ts +6 -0
  276. package/dist/src/tools/todo-schemas.test.js +152 -0
  277. package/dist/src/tools/todo-schemas.test.js.map +1 -0
  278. package/dist/src/tools/todo-store.d.ts +15 -0
  279. package/dist/src/tools/todo-store.js +59 -0
  280. package/dist/src/tools/todo-store.js.map +1 -0
  281. package/dist/src/tools/todo-store.test.d.ts +6 -0
  282. package/dist/src/tools/todo-store.test.js +175 -0
  283. package/dist/src/tools/todo-store.test.js.map +1 -0
  284. package/dist/src/tools/todo-write.d.ts +17 -0
  285. package/dist/src/tools/todo-write.js +98 -0
  286. package/dist/src/tools/todo-write.js.map +1 -0
  287. package/dist/src/tools/todo-write.test.d.ts +6 -0
  288. package/dist/src/tools/todo-write.test.js +208 -0
  289. package/dist/src/tools/todo-write.test.js.map +1 -0
  290. package/dist/src/tools/tool-registry.d.ts +67 -0
  291. package/dist/src/tools/tool-registry.js +326 -0
  292. package/dist/src/tools/tool-registry.js.map +1 -0
  293. package/dist/src/tools/tool-registry.test.d.ts +6 -0
  294. package/dist/src/tools/tool-registry.test.js +398 -0
  295. package/dist/src/tools/tool-registry.test.js.map +1 -0
  296. package/dist/src/tools/tools.d.ts +184 -0
  297. package/dist/src/tools/tools.js +88 -0
  298. package/dist/src/tools/tools.js.map +1 -0
  299. package/dist/src/tools/web-fetch.d.ts +29 -0
  300. package/dist/src/tools/web-fetch.js +243 -0
  301. package/dist/src/tools/web-fetch.js.map +1 -0
  302. package/dist/src/tools/web-fetch.test.d.ts +6 -0
  303. package/dist/src/tools/web-fetch.test.js +70 -0
  304. package/dist/src/tools/web-fetch.test.js.map +1 -0
  305. package/dist/src/tools/web-search.d.ts +49 -0
  306. package/dist/src/tools/web-search.js +120 -0
  307. package/dist/src/tools/web-search.js.map +1 -0
  308. package/dist/src/tools/write-file.d.ts +42 -0
  309. package/dist/src/tools/write-file.js +248 -0
  310. package/dist/src/tools/write-file.js.map +1 -0
  311. package/dist/src/tools/write-file.test.d.ts +6 -0
  312. package/dist/src/tools/write-file.test.js +413 -0
  313. package/dist/src/tools/write-file.test.js.map +1 -0
  314. package/dist/src/utils/LruCache.d.ts +13 -0
  315. package/dist/src/utils/LruCache.js +38 -0
  316. package/dist/src/utils/LruCache.js.map +1 -0
  317. package/dist/src/utils/bfsFileSearch.d.ts +22 -0
  318. package/dist/src/utils/bfsFileSearch.js +62 -0
  319. package/dist/src/utils/bfsFileSearch.js.map +1 -0
  320. package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
  321. package/dist/src/utils/bfsFileSearch.test.js +129 -0
  322. package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
  323. package/dist/src/utils/editCorrector.d.ts +53 -0
  324. package/dist/src/utils/editCorrector.js +546 -0
  325. package/dist/src/utils/editCorrector.js.map +1 -0
  326. package/dist/src/utils/editCorrector.test.d.ts +6 -0
  327. package/dist/src/utils/editCorrector.test.js +564 -0
  328. package/dist/src/utils/editCorrector.test.js.map +1 -0
  329. package/dist/src/utils/editor.d.ts +28 -0
  330. package/dist/src/utils/editor.js +163 -0
  331. package/dist/src/utils/editor.js.map +1 -0
  332. package/dist/src/utils/editor.test.d.ts +6 -0
  333. package/dist/src/utils/editor.test.js +293 -0
  334. package/dist/src/utils/editor.test.js.map +1 -0
  335. package/dist/src/utils/errorReporting.d.ts +14 -0
  336. package/dist/src/utils/errorReporting.js +88 -0
  337. package/dist/src/utils/errorReporting.js.map +1 -0
  338. package/dist/src/utils/errorReporting.test.d.ts +6 -0
  339. package/dist/src/utils/errorReporting.test.js +124 -0
  340. package/dist/src/utils/errorReporting.test.js.map +1 -0
  341. package/dist/src/utils/errors.d.ts +14 -0
  342. package/dist/src/utils/errors.js +54 -0
  343. package/dist/src/utils/errors.js.map +1 -0
  344. package/dist/src/utils/fetch.d.ts +11 -0
  345. package/dist/src/utils/fetch.js +51 -0
  346. package/dist/src/utils/fetch.js.map +1 -0
  347. package/dist/src/utils/fileUtils.d.ts +49 -0
  348. package/dist/src/utils/fileUtils.js +286 -0
  349. package/dist/src/utils/fileUtils.js.map +1 -0
  350. package/dist/src/utils/fileUtils.test.d.ts +6 -0
  351. package/dist/src/utils/fileUtils.test.js +321 -0
  352. package/dist/src/utils/fileUtils.test.js.map +1 -0
  353. package/dist/src/utils/flashFallback.integration.test.d.ts +6 -0
  354. package/dist/src/utils/flashFallback.integration.test.js +112 -0
  355. package/dist/src/utils/flashFallback.integration.test.js.map +1 -0
  356. package/dist/src/utils/generateContentResponseUtilities.d.ts +14 -0
  357. package/dist/src/utils/generateContentResponseUtilities.js +92 -0
  358. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
  359. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
  360. package/dist/src/utils/generateContentResponseUtilities.test.js +273 -0
  361. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
  362. package/dist/src/utils/getFolderStructure.d.ts +30 -0
  363. package/dist/src/utils/getFolderStructure.js +247 -0
  364. package/dist/src/utils/getFolderStructure.js.map +1 -0
  365. package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
  366. package/dist/src/utils/getFolderStructure.test.js +298 -0
  367. package/dist/src/utils/getFolderStructure.test.js.map +1 -0
  368. package/dist/src/utils/gitIgnoreParser.d.ts +20 -0
  369. package/dist/src/utils/gitIgnoreParser.js +64 -0
  370. package/dist/src/utils/gitIgnoreParser.js.map +1 -0
  371. package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
  372. package/dist/src/utils/gitIgnoreParser.test.js +145 -0
  373. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
  374. package/dist/src/utils/gitUtils.d.ts +17 -0
  375. package/dist/src/utils/gitUtils.js +61 -0
  376. package/dist/src/utils/gitUtils.js.map +1 -0
  377. package/dist/src/utils/memoryDiscovery.d.ts +14 -0
  378. package/dist/src/utils/memoryDiscovery.js +219 -0
  379. package/dist/src/utils/memoryDiscovery.js.map +1 -0
  380. package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
  381. package/dist/src/utils/memoryDiscovery.test.js +432 -0
  382. package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
  383. package/dist/src/utils/memoryImportProcessor.d.ts +35 -0
  384. package/dist/src/utils/memoryImportProcessor.js +141 -0
  385. package/dist/src/utils/memoryImportProcessor.js.map +1 -0
  386. package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
  387. package/dist/src/utils/memoryImportProcessor.test.js +170 -0
  388. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
  389. package/dist/src/utils/messageInspectors.d.ts +8 -0
  390. package/dist/src/utils/messageInspectors.js +16 -0
  391. package/dist/src/utils/messageInspectors.js.map +1 -0
  392. package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
  393. package/dist/src/utils/nextSpeakerChecker.js +113 -0
  394. package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
  395. package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
  396. package/dist/src/utils/nextSpeakerChecker.test.js +168 -0
  397. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
  398. package/dist/src/utils/paths.d.ts +49 -0
  399. package/dist/src/utils/paths.js +145 -0
  400. package/dist/src/utils/paths.js.map +1 -0
  401. package/dist/src/utils/quotaErrorDetection.d.ts +22 -0
  402. package/dist/src/utils/quotaErrorDetection.js +67 -0
  403. package/dist/src/utils/quotaErrorDetection.js.map +1 -0
  404. package/dist/src/utils/retry.d.ts +21 -0
  405. package/dist/src/utils/retry.js +276 -0
  406. package/dist/src/utils/retry.js.map +1 -0
  407. package/dist/src/utils/retry.test.d.ts +6 -0
  408. package/dist/src/utils/retry.test.js +322 -0
  409. package/dist/src/utils/retry.test.js.map +1 -0
  410. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  411. package/dist/src/utils/safeJsonStringify.js +25 -0
  412. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  413. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  414. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  415. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  416. package/dist/src/utils/schemaValidator.d.ts +23 -0
  417. package/dist/src/utils/schemaValidator.js +142 -0
  418. package/dist/src/utils/schemaValidator.js.map +1 -0
  419. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  420. package/dist/src/utils/schemaValidator.test.js +146 -0
  421. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  422. package/dist/src/utils/session.d.ts +6 -0
  423. package/dist/src/utils/session.js +8 -0
  424. package/dist/src/utils/session.js.map +1 -0
  425. package/dist/src/utils/summarizer.d.ts +25 -0
  426. package/dist/src/utils/summarizer.js +80 -0
  427. package/dist/src/utils/summarizer.js.map +1 -0
  428. package/dist/src/utils/summarizer.test.d.ts +6 -0
  429. package/dist/src/utils/summarizer.test.js +131 -0
  430. package/dist/src/utils/summarizer.test.js.map +1 -0
  431. package/dist/src/utils/testUtils.d.ts +29 -0
  432. package/dist/src/utils/testUtils.js +70 -0
  433. package/dist/src/utils/testUtils.js.map +1 -0
  434. package/dist/src/utils/user_account.d.ts +9 -0
  435. package/dist/src/utils/user_account.js +99 -0
  436. package/dist/src/utils/user_account.js.map +1 -0
  437. package/dist/src/utils/user_account.test.d.ts +6 -0
  438. package/dist/src/utils/user_account.test.js +153 -0
  439. package/dist/src/utils/user_account.test.js.map +1 -0
  440. package/dist/src/utils/user_id.d.ts +11 -0
  441. package/dist/src/utils/user_id.js +49 -0
  442. package/dist/src/utils/user_id.js.map +1 -0
  443. package/dist/src/utils/user_id.test.d.ts +6 -0
  444. package/dist/src/utils/user_id.test.js +21 -0
  445. package/dist/src/utils/user_id.test.js.map +1 -0
  446. package/dist/tsconfig.tsbuildinfo +1 -0
  447. package/dist/vybestack-llxprt-code-core-0.1.12.tgz +0 -0
  448. package/package.json +62 -0
@@ -0,0 +1,291 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { Config } from './config.js';
8
+ import * as path from 'path';
9
+ import { setLlxprtMdFilename as mockSetGeminiMdFilename } from '../tools/memoryTool.js';
10
+ import { DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, } from '../telemetry/index.js';
11
+ import { AuthType, createContentGeneratorConfig, } from '../core/contentGenerator.js';
12
+ import { GeminiClient } from '../core/client.js';
13
+ import { GitService } from '../services/gitService.js';
14
+ import { loadServerHierarchicalMemory } from '../utils/memoryDiscovery.js';
15
+ // Mock dependencies that might be called during Config construction or createServerConfig
16
+ vi.mock('../tools/tool-registry', () => {
17
+ const ToolRegistryMock = vi.fn();
18
+ ToolRegistryMock.prototype.registerTool = vi.fn();
19
+ ToolRegistryMock.prototype.discoverTools = vi.fn();
20
+ ToolRegistryMock.prototype.getAllTools = vi.fn(() => []); // Mock methods if needed
21
+ ToolRegistryMock.prototype.getTool = vi.fn();
22
+ ToolRegistryMock.prototype.getFunctionDeclarations = vi.fn(() => []);
23
+ return { ToolRegistry: ToolRegistryMock };
24
+ });
25
+ vi.mock('../utils/memoryDiscovery.js', () => ({
26
+ loadServerHierarchicalMemory: vi.fn(),
27
+ }));
28
+ // Mock individual tools if their constructors are complex or have side effects
29
+ vi.mock('../tools/ls');
30
+ vi.mock('../tools/read-file');
31
+ vi.mock('../tools/grep');
32
+ vi.mock('../tools/glob');
33
+ vi.mock('../tools/edit');
34
+ vi.mock('../tools/shell');
35
+ vi.mock('../tools/write-file');
36
+ vi.mock('../tools/web-fetch');
37
+ vi.mock('../tools/read-many-files');
38
+ vi.mock('../tools/memoryTool', () => ({
39
+ MemoryTool: vi.fn(),
40
+ setLlxprtMdFilename: vi.fn(),
41
+ getCurrentLlxprtMdFilename: vi.fn(() => 'LLXPRT.md'), // Mock the original filename
42
+ DEFAULT_CONTEXT_FILENAME: 'LLXPRT.md',
43
+ LLXPRT_CONFIG_DIR: '.llxprt',
44
+ }));
45
+ vi.mock('../core/contentGenerator.js', async (importOriginal) => {
46
+ const actual = await importOriginal();
47
+ return {
48
+ ...actual,
49
+ createContentGeneratorConfig: vi.fn(),
50
+ };
51
+ });
52
+ vi.mock('../core/client.js', () => ({
53
+ GeminiClient: vi.fn().mockImplementation(() => ({
54
+ initialize: vi.fn().mockResolvedValue(undefined),
55
+ })),
56
+ }));
57
+ vi.mock('../telemetry/index.js', async (importOriginal) => {
58
+ const actual = await importOriginal();
59
+ return {
60
+ ...actual,
61
+ initializeTelemetry: vi.fn(),
62
+ };
63
+ });
64
+ vi.mock('../services/gitService.js', () => {
65
+ const GitServiceMock = vi.fn();
66
+ GitServiceMock.prototype.initialize = vi.fn();
67
+ return { GitService: GitServiceMock };
68
+ });
69
+ describe('Server Config (config.ts)', () => {
70
+ const MODEL = 'gemini-pro';
71
+ const SANDBOX = {
72
+ command: 'docker',
73
+ image: 'gemini-cli-sandbox',
74
+ };
75
+ const TARGET_DIR = '/path/to/target';
76
+ const DEBUG_MODE = false;
77
+ const QUESTION = 'test question';
78
+ const FULL_CONTEXT = false;
79
+ const USER_MEMORY = 'Test User Memory';
80
+ const TELEMETRY_SETTINGS = { enabled: false };
81
+ const EMBEDDING_MODEL = 'gemini-embedding';
82
+ const SESSION_ID = 'test-session-id';
83
+ const baseParams = {
84
+ cwd: '/tmp',
85
+ embeddingModel: EMBEDDING_MODEL,
86
+ sandbox: SANDBOX,
87
+ targetDir: TARGET_DIR,
88
+ debugMode: DEBUG_MODE,
89
+ question: QUESTION,
90
+ fullContext: FULL_CONTEXT,
91
+ userMemory: USER_MEMORY,
92
+ telemetry: TELEMETRY_SETTINGS,
93
+ sessionId: SESSION_ID,
94
+ model: MODEL,
95
+ };
96
+ beforeEach(() => {
97
+ // Reset mocks if necessary
98
+ vi.clearAllMocks();
99
+ });
100
+ describe('initialize', () => {
101
+ it('should throw an error if checkpointing is enabled and GitService fails', async () => {
102
+ const gitError = new Error('Git is not installed');
103
+ GitService.prototype.initialize.mockRejectedValue(gitError);
104
+ const config = new Config({
105
+ ...baseParams,
106
+ checkpointing: true,
107
+ });
108
+ await expect(config.initialize()).rejects.toThrow(gitError);
109
+ });
110
+ it('should not throw an error if checkpointing is disabled and GitService fails', async () => {
111
+ const gitError = new Error('Git is not installed');
112
+ GitService.prototype.initialize.mockRejectedValue(gitError);
113
+ const config = new Config({
114
+ ...baseParams,
115
+ checkpointing: false,
116
+ });
117
+ await expect(config.initialize()).resolves.toBeUndefined();
118
+ });
119
+ });
120
+ describe('refreshAuth', () => {
121
+ it('should refresh auth and update config', async () => {
122
+ const config = new Config(baseParams);
123
+ // Initialize config to create GeminiClient instance
124
+ await config.initialize();
125
+ const authType = AuthType.USE_GEMINI;
126
+ const newModel = 'gemini-flash';
127
+ const mockContentConfig = {
128
+ model: newModel,
129
+ apiKey: 'test-key',
130
+ };
131
+ createContentGeneratorConfig.mockResolvedValue(mockContentConfig);
132
+ await config.refreshAuth(authType);
133
+ expect(createContentGeneratorConfig).toHaveBeenCalledWith(MODEL, // Should be called with the original model 'gemini-pro'
134
+ authType);
135
+ // Verify that contentGeneratorConfig is updated with the new model
136
+ expect(config.getContentGeneratorConfig()).toEqual(mockContentConfig);
137
+ expect(config.getContentGeneratorConfig()?.model).toBe(newModel);
138
+ expect(config.getModel()).toBe(newModel); // getModel() should return the updated model
139
+ expect(GeminiClient).toHaveBeenCalledWith(config);
140
+ });
141
+ });
142
+ it('Config constructor should store userMemory correctly', () => {
143
+ const config = new Config(baseParams);
144
+ expect(config.getUserMemory()).toBe(USER_MEMORY);
145
+ // Verify other getters if needed
146
+ expect(config.getTargetDir()).toBe(path.resolve(TARGET_DIR)); // Check resolved path
147
+ });
148
+ it('Config constructor should default userMemory to empty string if not provided', () => {
149
+ const paramsWithoutMemory = { ...baseParams };
150
+ delete paramsWithoutMemory.userMemory;
151
+ const config = new Config(paramsWithoutMemory);
152
+ expect(config.getUserMemory()).toBe('');
153
+ });
154
+ it('Config constructor should call setLlxprtMdFilename with contextFileName if provided', () => {
155
+ const contextFileName = 'CUSTOM_AGENTS.md';
156
+ const paramsWithContextFile = {
157
+ ...baseParams,
158
+ contextFileName,
159
+ };
160
+ new Config(paramsWithContextFile);
161
+ expect(mockSetGeminiMdFilename).toHaveBeenCalledWith(contextFileName);
162
+ });
163
+ it('Config constructor should not call setLlxprtMdFilename if contextFileName is not provided', () => {
164
+ new Config(baseParams); // baseParams does not have contextFileName
165
+ expect(mockSetGeminiMdFilename).not.toHaveBeenCalled();
166
+ });
167
+ it('should set default file filtering settings when not provided', () => {
168
+ const config = new Config(baseParams);
169
+ expect(config.getFileFilteringRespectGitIgnore()).toBe(true);
170
+ });
171
+ it('should set custom file filtering settings when provided', () => {
172
+ const paramsWithFileFiltering = {
173
+ ...baseParams,
174
+ fileFiltering: {
175
+ respectGitIgnore: false,
176
+ },
177
+ };
178
+ const config = new Config(paramsWithFileFiltering);
179
+ expect(config.getFileFilteringRespectGitIgnore()).toBe(false);
180
+ });
181
+ it('Config constructor should set telemetry to true when provided as true', () => {
182
+ const paramsWithTelemetry = {
183
+ ...baseParams,
184
+ telemetry: { enabled: true },
185
+ };
186
+ const config = new Config(paramsWithTelemetry);
187
+ expect(config.getTelemetryEnabled()).toBe(true);
188
+ });
189
+ it('Config constructor should set telemetry to false when provided as false', () => {
190
+ const paramsWithTelemetry = {
191
+ ...baseParams,
192
+ telemetry: { enabled: false },
193
+ };
194
+ const config = new Config(paramsWithTelemetry);
195
+ expect(config.getTelemetryEnabled()).toBe(false);
196
+ });
197
+ it('Config constructor should default telemetry to default value if not provided', () => {
198
+ const paramsWithoutTelemetry = { ...baseParams };
199
+ delete paramsWithoutTelemetry.telemetry;
200
+ const config = new Config(paramsWithoutTelemetry);
201
+ expect(config.getTelemetryEnabled()).toBe(TELEMETRY_SETTINGS.enabled);
202
+ });
203
+ it('should have a getFileService method that returns FileDiscoveryService', () => {
204
+ const config = new Config(baseParams);
205
+ const fileService = config.getFileService();
206
+ expect(fileService).toBeDefined();
207
+ });
208
+ describe('Telemetry Settings', () => {
209
+ it('should return default telemetry target if not provided', () => {
210
+ const params = {
211
+ ...baseParams,
212
+ telemetry: { enabled: true },
213
+ };
214
+ const config = new Config(params);
215
+ expect(config.getTelemetryTarget()).toBe(DEFAULT_TELEMETRY_TARGET);
216
+ });
217
+ it('should return provided OTLP endpoint', () => {
218
+ const endpoint = 'http://custom.otel.collector:4317';
219
+ const params = {
220
+ ...baseParams,
221
+ telemetry: { enabled: true, otlpEndpoint: endpoint },
222
+ };
223
+ const config = new Config(params);
224
+ expect(config.getTelemetryOtlpEndpoint()).toBe(endpoint);
225
+ });
226
+ it('should return default OTLP endpoint if not provided', () => {
227
+ const params = {
228
+ ...baseParams,
229
+ telemetry: { enabled: true },
230
+ };
231
+ const config = new Config(params);
232
+ expect(config.getTelemetryOtlpEndpoint()).toBe(DEFAULT_OTLP_ENDPOINT);
233
+ });
234
+ it('should return provided logPrompts setting', () => {
235
+ const params = {
236
+ ...baseParams,
237
+ telemetry: { enabled: true, logPrompts: false },
238
+ };
239
+ const config = new Config(params);
240
+ expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
241
+ });
242
+ it('should return default logPrompts setting (true) if not provided', () => {
243
+ const params = {
244
+ ...baseParams,
245
+ telemetry: { enabled: true },
246
+ };
247
+ const config = new Config(params);
248
+ expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
249
+ });
250
+ it('should return default logPrompts setting (true) if telemetry object is not provided', () => {
251
+ const paramsWithoutTelemetry = { ...baseParams };
252
+ delete paramsWithoutTelemetry.telemetry;
253
+ const config = new Config(paramsWithoutTelemetry);
254
+ expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
255
+ });
256
+ it('should return default telemetry target if telemetry object is not provided', () => {
257
+ const paramsWithoutTelemetry = { ...baseParams };
258
+ delete paramsWithoutTelemetry.telemetry;
259
+ const config = new Config(paramsWithoutTelemetry);
260
+ expect(config.getTelemetryTarget()).toBe(DEFAULT_TELEMETRY_TARGET);
261
+ });
262
+ it('should return default OTLP endpoint if telemetry object is not provided', () => {
263
+ const paramsWithoutTelemetry = { ...baseParams };
264
+ delete paramsWithoutTelemetry.telemetry;
265
+ const config = new Config(paramsWithoutTelemetry);
266
+ expect(config.getTelemetryOtlpEndpoint()).toBe(DEFAULT_OTLP_ENDPOINT);
267
+ });
268
+ });
269
+ describe('refreshMemory', () => {
270
+ it('should update memory and file count on successful refresh', async () => {
271
+ const config = new Config(baseParams);
272
+ const mockMemoryData = {
273
+ memoryContent: 'new memory content',
274
+ fileCount: 5,
275
+ };
276
+ loadServerHierarchicalMemory.mockResolvedValue(mockMemoryData);
277
+ const result = await config.refreshMemory();
278
+ expect(loadServerHierarchicalMemory).toHaveBeenCalledWith(config.getWorkingDir(), config.getDebugMode(), config.getFileService(), config.getExtensionContextFilePaths());
279
+ expect(config.getUserMemory()).toBe(mockMemoryData.memoryContent);
280
+ expect(config.getLlxprtMdFileCount()).toBe(mockMemoryData.fileCount);
281
+ expect(result).toEqual(mockMemoryData);
282
+ });
283
+ it('should propagate errors from loadServerHierarchicalMemory', async () => {
284
+ const config = new Config(baseParams);
285
+ const testError = new Error('Failed to load memory');
286
+ loadServerHierarchicalMemory.mockRejectedValue(testError);
287
+ await expect(config.refreshMemory()).rejects.toThrow(testError);
288
+ });
289
+ });
290
+ });
291
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/config/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,115 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, beforeEach } from 'vitest';
7
+ import { Config } from './config.js';
8
+ import { DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL } from './models.js';
9
+ describe('Flash Model Fallback Configuration', () => {
10
+ let config;
11
+ beforeEach(() => {
12
+ config = new Config({
13
+ sessionId: 'test-session',
14
+ targetDir: '/test',
15
+ debugMode: false,
16
+ cwd: '/test',
17
+ model: DEFAULT_GEMINI_MODEL,
18
+ });
19
+ // Initialize contentGeneratorConfig for testing
20
+ config.contentGeneratorConfig = {
21
+ model: DEFAULT_GEMINI_MODEL,
22
+ authType: 'oauth-personal',
23
+ };
24
+ });
25
+ describe('setModel', () => {
26
+ it('should update the model and mark as switched during session', () => {
27
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL);
28
+ expect(config.isModelSwitchedDuringSession()).toBe(false);
29
+ config.setModel(DEFAULT_GEMINI_FLASH_MODEL);
30
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_FLASH_MODEL);
31
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
32
+ });
33
+ it('should handle multiple model switches during session', () => {
34
+ config.setModel(DEFAULT_GEMINI_FLASH_MODEL);
35
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
36
+ config.setModel('gemini-1.5-pro');
37
+ expect(config.getModel()).toBe('gemini-1.5-pro');
38
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
39
+ });
40
+ it('should only mark as switched if contentGeneratorConfig exists', () => {
41
+ // Create config without initializing contentGeneratorConfig
42
+ const newConfig = new Config({
43
+ sessionId: 'test-session-2',
44
+ targetDir: '/test',
45
+ debugMode: false,
46
+ cwd: '/test',
47
+ model: DEFAULT_GEMINI_MODEL,
48
+ });
49
+ // Should not crash when contentGeneratorConfig is undefined
50
+ newConfig.setModel(DEFAULT_GEMINI_FLASH_MODEL);
51
+ expect(newConfig.isModelSwitchedDuringSession()).toBe(false);
52
+ });
53
+ });
54
+ describe('getModel', () => {
55
+ it('should return contentGeneratorConfig model if available', () => {
56
+ // Simulate initialized content generator config
57
+ config.setModel(DEFAULT_GEMINI_FLASH_MODEL);
58
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_FLASH_MODEL);
59
+ });
60
+ it('should fallback to initial model if contentGeneratorConfig is not available', () => {
61
+ // Test with fresh config where contentGeneratorConfig might not be set
62
+ const newConfig = new Config({
63
+ sessionId: 'test-session-2',
64
+ targetDir: '/test',
65
+ debugMode: false,
66
+ cwd: '/test',
67
+ model: 'custom-model',
68
+ });
69
+ expect(newConfig.getModel()).toBe('custom-model');
70
+ });
71
+ });
72
+ describe('isModelSwitchedDuringSession', () => {
73
+ it('should start as false for new session', () => {
74
+ expect(config.isModelSwitchedDuringSession()).toBe(false);
75
+ });
76
+ it('should remain false if no model switch occurs', () => {
77
+ // Perform other operations that don't involve model switching
78
+ expect(config.isModelSwitchedDuringSession()).toBe(false);
79
+ });
80
+ it('should persist switched state throughout session', () => {
81
+ config.setModel(DEFAULT_GEMINI_FLASH_MODEL);
82
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
83
+ // Should remain true even after getting model
84
+ config.getModel();
85
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
86
+ });
87
+ });
88
+ describe('resetModelToDefault', () => {
89
+ it('should reset model to default and clear session switch flag', () => {
90
+ // Switch to Flash first
91
+ config.setModel(DEFAULT_GEMINI_FLASH_MODEL);
92
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_FLASH_MODEL);
93
+ expect(config.isModelSwitchedDuringSession()).toBe(true);
94
+ // Reset to default
95
+ config.resetModelToDefault();
96
+ // Should be back to default with flag cleared
97
+ expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL);
98
+ expect(config.isModelSwitchedDuringSession()).toBe(false);
99
+ });
100
+ it('should handle case where contentGeneratorConfig is not initialized', () => {
101
+ // Create config without initializing contentGeneratorConfig
102
+ const newConfig = new Config({
103
+ sessionId: 'test-session-2',
104
+ targetDir: '/test',
105
+ debugMode: false,
106
+ cwd: '/test',
107
+ model: DEFAULT_GEMINI_MODEL,
108
+ });
109
+ // Should not crash when contentGeneratorConfig is undefined
110
+ expect(() => newConfig.resetModelToDefault()).not.toThrow();
111
+ expect(newConfig.isModelSwitchedDuringSession()).toBe(false);
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=flashFallback.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashFallback.test.js","sourceRoot":"","sources":["../../../src/config/flashFallback.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE/E,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,MAAM,CAAC;YAClB,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,KAAK;YAChB,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,oBAAoB;SAC5B,CAAC,CAAC;QAEH,gDAAgD;QAE9C,MACD,CAAC,sBAAsB,GAAG;YACzB,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,gBAAgB;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE1D,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,4DAA4D;YAC5D,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,SAAS,EAAE,gBAAgB;gBAC3B,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,oBAAoB;aAC5B,CAAC,CAAC;YAEH,4DAA4D;YAC5D,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,gDAAgD;YAChD,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;YACrF,uEAAuE;YACvE,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,SAAS,EAAE,gBAAgB;gBAC3B,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,8DAA8D;YAC9D,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzD,8CAA8C;YAC9C,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,wBAAwB;YACxB,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzD,mBAAmB;YACnB,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAE7B,8CAA8C;YAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,4DAA4D;YAC5D,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,SAAS,EAAE,gBAAgB;gBAC3B,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,oBAAoB;aAC5B,CAAC,CAAC;YAEH,4DAA4D;YAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5D,MAAM,CAAC,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const DEFAULT_GEMINI_MODEL = "gemini-2.5-pro";
7
+ export declare const DEFAULT_GEMINI_FLASH_MODEL = "gemini-2.5-flash";
8
+ export declare const DEFAULT_GEMINI_EMBEDDING_MODEL = "gemini-embedding-001";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro';
7
+ export const DEFAULT_GEMINI_FLASH_MODEL = 'gemini-2.5-flash';
8
+ export const DEFAULT_GEMINI_EMBEDDING_MODEL = 'gemini-embedding-001';
9
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/config/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAC7D,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAAsB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { GenerateContentConfig, SchemaUnion, PartListUnion, Content, GenerateContentResponse } from '@google/genai';
7
+ import { Turn, ServerGeminiStreamEvent, ChatCompressionInfo } from './turn.js';
8
+ import { Config } from '../config/config.js';
9
+ import { GeminiChat } from './geminiChat.js';
10
+ import { ContentGenerator, ContentGeneratorConfig } from './contentGenerator.js';
11
+ /**
12
+ * Returns the index of the content after the fraction of the total characters in the history.
13
+ *
14
+ * Exported for testing purposes.
15
+ */
16
+ export declare function findIndexAfterFraction(history: Content[], fraction: number): number;
17
+ export declare class GeminiClient {
18
+ private config;
19
+ private chat?;
20
+ private contentGenerator?;
21
+ private embeddingModel;
22
+ private generateContentConfig;
23
+ private sessionTurnCount;
24
+ private readonly MAX_TURNS;
25
+ /**
26
+ * Threshold for compression token count as a fraction of the model's token limit.
27
+ * If the chat history exceeds this threshold, it will be compressed.
28
+ */
29
+ private readonly COMPRESSION_TOKEN_THRESHOLD;
30
+ /**
31
+ * The fraction of the latest chat history to keep. A value of 0.3
32
+ * means that only the last 30% of the chat history will be kept after compression.
33
+ */
34
+ private readonly COMPRESSION_PRESERVE_THRESHOLD;
35
+ private readonly loopDetector;
36
+ private lastPromptId?;
37
+ constructor(config: Config);
38
+ initialize(_contentGeneratorConfig: ContentGeneratorConfig): void;
39
+ private lazyInitialize;
40
+ getContentGenerator(): ContentGenerator;
41
+ addHistory(content: Content): Promise<void>;
42
+ getChat(): GeminiChat;
43
+ isInitialized(): boolean;
44
+ getHistory(): Content[];
45
+ setHistory(history: Content[]): void;
46
+ resetChat(): Promise<void>;
47
+ private getEnvironment;
48
+ private startChat;
49
+ sendMessageStream(request: PartListUnion, signal: AbortSignal, prompt_id: string, turns?: number, originalModel?: string): AsyncGenerator<ServerGeminiStreamEvent, Turn>;
50
+ generateJson(contents: Content[], schema: SchemaUnion, abortSignal: AbortSignal, model?: string, config?: GenerateContentConfig): Promise<Record<string, unknown>>;
51
+ generateContent(contents: Content[], generationConfig: GenerateContentConfig, abortSignal: AbortSignal, model?: string): Promise<GenerateContentResponse>;
52
+ generateEmbedding(texts: string[]): Promise<number[][]>;
53
+ tryCompressChat(prompt_id: string, force?: boolean): Promise<ChatCompressionInfo | null>;
54
+ /**
55
+ * Handles fallback model when persistent 429 errors occur.
56
+ * Uses a fallback handler if provided by the config, otherwise returns null.
57
+ */
58
+ private handleFlashFallback;
59
+ }