@vybestack/llxprt-code-core 0.1.19-beta → 0.1.19

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 (540) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +6 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
  6. package/dist/src/auth/anthropic-device-flow.js +208 -0
  7. package/dist/src/auth/anthropic-device-flow.js.map +1 -0
  8. package/dist/src/auth/precedence.d.ts +55 -0
  9. package/dist/src/auth/precedence.js +211 -0
  10. package/dist/src/auth/precedence.js.map +1 -0
  11. package/dist/src/auth/qwen-device-flow.d.ts +45 -0
  12. package/dist/src/auth/qwen-device-flow.js +179 -0
  13. package/dist/src/auth/qwen-device-flow.js.map +1 -0
  14. package/dist/src/auth/token-store.d.ts +66 -0
  15. package/dist/src/auth/token-store.js +151 -0
  16. package/dist/src/auth/token-store.js.map +1 -0
  17. package/dist/src/auth/types.d.ts +130 -0
  18. package/dist/src/auth/types.js +60 -0
  19. package/dist/src/auth/types.js.map +1 -0
  20. package/dist/src/code_assist/converter.d.ts +2 -2
  21. package/dist/src/code_assist/converter.js +1 -1
  22. package/dist/src/code_assist/converter.js.map +1 -1
  23. package/dist/src/config/config.d.ts +7 -1
  24. package/dist/src/config/config.js +46 -5
  25. package/dist/src/config/config.js.map +1 -1
  26. package/dist/src/config/endpoints.d.ts +60 -0
  27. package/dist/src/config/endpoints.js +126 -0
  28. package/dist/src/config/endpoints.js.map +1 -0
  29. package/dist/src/config/profileManager.d.ts +14 -4
  30. package/dist/src/config/profileManager.js +90 -11
  31. package/dist/src/config/profileManager.js.map +1 -1
  32. package/dist/src/core/client.d.ts +5 -2
  33. package/dist/src/core/client.js +164 -44
  34. package/dist/src/core/client.js.map +1 -1
  35. package/dist/src/core/contentGenerator.d.ts +4 -1
  36. package/dist/src/core/contentGenerator.js +3 -0
  37. package/dist/src/core/contentGenerator.js.map +1 -1
  38. package/dist/src/core/loggingContentGenerator.d.ts +5 -0
  39. package/dist/src/core/loggingContentGenerator.js +9 -1
  40. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  41. package/dist/src/core/subagent.js +12 -10
  42. package/dist/src/core/subagent.js.map +1 -1
  43. package/dist/src/ide/detect-ide.d.ts +10 -2
  44. package/dist/src/ide/detect-ide.js +48 -5
  45. package/dist/src/ide/detect-ide.js.map +1 -1
  46. package/dist/src/ide/ide-client.js +22 -15
  47. package/dist/src/ide/ide-client.js.map +1 -1
  48. package/dist/src/index.d.ts +10 -1
  49. package/dist/src/index.js +10 -1
  50. package/dist/src/index.js.map +1 -1
  51. package/dist/src/prompt-config/defaults/core-defaults.d.ts +1 -1
  52. package/dist/src/prompt-config/defaults/core-defaults.js +21 -326
  53. package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
  54. package/dist/src/prompt-config/defaults/core.md +1 -1
  55. package/dist/src/prompt-config/defaults/provider-defaults.d.ts +1 -1
  56. package/dist/src/prompt-config/defaults/provider-defaults.js +16 -19
  57. package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
  58. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +273 -10
  59. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +278 -0
  60. package/dist/src/prompt-config/defaults/tool-defaults.d.ts +1 -1
  61. package/dist/src/prompt-config/defaults/tool-defaults.js +27 -75
  62. package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -1
  63. package/dist/src/prompt-config/defaults/tools/read-file.md +1 -1
  64. package/dist/src/providers/BaseProvider.d.ts +149 -0
  65. package/dist/src/providers/BaseProvider.js +315 -0
  66. package/dist/src/providers/BaseProvider.js.map +1 -0
  67. package/dist/src/providers/IProvider.d.ts +1 -0
  68. package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
  69. package/dist/src/providers/LoggingProviderWrapper.js +3 -0
  70. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  71. package/dist/src/providers/ProviderManager.d.ts +0 -1
  72. package/dist/src/providers/ProviderManager.js +23 -14
  73. package/dist/src/providers/ProviderManager.js.map +1 -1
  74. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  75. package/dist/src/providers/anthropic/AnthropicProvider.js +173 -27
  76. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  77. package/dist/src/providers/gemini/GeminiProvider.d.ts +20 -7
  78. package/dist/src/providers/gemini/GeminiProvider.js +182 -147
  79. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  80. package/dist/src/providers/openai/OpenAIProvider.d.ts +53 -6
  81. package/dist/src/providers/openai/OpenAIProvider.js +373 -40
  82. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  83. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  84. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  85. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  86. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  87. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  88. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  89. package/dist/src/services/loopDetectionService.js +4 -5
  90. package/dist/src/services/loopDetectionService.js.map +1 -1
  91. package/dist/src/settings/SettingsService.d.ts +32 -0
  92. package/dist/src/settings/SettingsService.js +204 -0
  93. package/dist/src/settings/SettingsService.js.map +1 -0
  94. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  95. package/dist/src/settings/settingsServiceInstance.js +24 -0
  96. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  97. package/dist/src/settings/types.d.ts +141 -0
  98. package/dist/src/settings/types.js +5 -0
  99. package/dist/src/settings/types.js.map +1 -0
  100. package/dist/src/tools/edit.js +6 -7
  101. package/dist/src/tools/edit.js.map +1 -1
  102. package/dist/src/tools/glob.js +7 -8
  103. package/dist/src/tools/glob.js.map +1 -1
  104. package/dist/src/tools/grep.js +6 -7
  105. package/dist/src/tools/grep.js.map +1 -1
  106. package/dist/src/tools/ls.js +9 -10
  107. package/dist/src/tools/ls.js.map +1 -1
  108. package/dist/src/tools/mcp-tool.d.ts +3 -8
  109. package/dist/src/tools/mcp-tool.js +5 -18
  110. package/dist/src/tools/mcp-tool.js.map +1 -1
  111. package/dist/src/tools/memoryTool.js +4 -5
  112. package/dist/src/tools/memoryTool.js.map +1 -1
  113. package/dist/src/tools/read-file.js +5 -6
  114. package/dist/src/tools/read-file.js.map +1 -1
  115. package/dist/src/tools/read-many-files.js +17 -18
  116. package/dist/src/tools/read-many-files.js.map +1 -1
  117. package/dist/src/tools/shell.js +8 -9
  118. package/dist/src/tools/shell.js.map +1 -1
  119. package/dist/src/tools/tool-registry.d.ts +1 -15
  120. package/dist/src/tools/tool-registry.js +4 -72
  121. package/dist/src/tools/tool-registry.js.map +1 -1
  122. package/dist/src/tools/tools.d.ts +6 -6
  123. package/dist/src/tools/tools.js +2 -2
  124. package/dist/src/tools/tools.js.map +1 -1
  125. package/dist/src/tools/web-fetch.js +3 -4
  126. package/dist/src/tools/web-fetch.js.map +1 -1
  127. package/dist/src/tools/web-search.js +3 -4
  128. package/dist/src/tools/web-search.js.map +1 -1
  129. package/dist/src/tools/write-file.js +4 -5
  130. package/dist/src/tools/write-file.js.map +1 -1
  131. package/dist/src/utils/editCorrector.js +8 -9
  132. package/dist/src/utils/editCorrector.js.map +1 -1
  133. package/dist/src/utils/nextSpeakerChecker.js +3 -4
  134. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  135. package/dist/src/utils/schemaValidator.d.ts +1 -9
  136. package/dist/src/utils/schemaValidator.js +1 -109
  137. package/dist/src/utils/schemaValidator.js.map +1 -1
  138. package/package.json +4 -2
  139. package/dist/src/code_assist/converter.test.d.ts +0 -6
  140. package/dist/src/code_assist/converter.test.js +0 -279
  141. package/dist/src/code_assist/converter.test.js.map +0 -1
  142. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  143. package/dist/src/code_assist/oauth2.test.js +0 -370
  144. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  145. package/dist/src/code_assist/server.test.d.ts +0 -6
  146. package/dist/src/code_assist/server.test.js +0 -134
  147. package/dist/src/code_assist/server.test.js.map +0 -1
  148. package/dist/src/code_assist/setup.test.d.ts +0 -6
  149. package/dist/src/code_assist/setup.test.js +0 -65
  150. package/dist/src/code_assist/setup.test.js.map +0 -1
  151. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  152. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  153. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  154. package/dist/src/config/config.ephemeral.test.d.ts +0 -6
  155. package/dist/src/config/config.ephemeral.test.js +0 -152
  156. package/dist/src/config/config.ephemeral.test.js.map +0 -1
  157. package/dist/src/config/config.test.d.ts +0 -6
  158. package/dist/src/config/config.test.js +0 -369
  159. package/dist/src/config/config.test.js.map +0 -1
  160. package/dist/src/config/flashFallback.test.d.ts +0 -6
  161. package/dist/src/config/flashFallback.test.js +0 -91
  162. package/dist/src/config/flashFallback.test.js.map +0 -1
  163. package/dist/src/core/client.test.d.ts +0 -6
  164. package/dist/src/core/client.test.js +0 -1322
  165. package/dist/src/core/client.test.js.map +0 -1
  166. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  167. package/dist/src/core/contentGenerator.test.js +0 -103
  168. package/dist/src/core/contentGenerator.test.js.map +0 -1
  169. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  170. package/dist/src/core/coreToolScheduler.test.js +0 -637
  171. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  172. package/dist/src/core/geminiChat.test.d.ts +0 -6
  173. package/dist/src/core/geminiChat.test.js +0 -425
  174. package/dist/src/core/geminiChat.test.js.map +0 -1
  175. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  176. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  177. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  178. package/dist/src/core/logger.test.d.ts +0 -6
  179. package/dist/src/core/logger.test.js +0 -467
  180. package/dist/src/core/logger.test.js.map +0 -1
  181. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  182. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  183. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  184. package/dist/src/core/prompts-async.test.d.ts +0 -6
  185. package/dist/src/core/prompts-async.test.js +0 -115
  186. package/dist/src/core/prompts-async.test.js.map +0 -1
  187. package/dist/src/core/prompts.test.d.ts +0 -6
  188. package/dist/src/core/prompts.test.js +0 -68
  189. package/dist/src/core/prompts.test.js.map +0 -1
  190. package/dist/src/core/subagent.test.d.ts +0 -6
  191. package/dist/src/core/subagent.test.js +0 -519
  192. package/dist/src/core/subagent.test.js.map +0 -1
  193. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  194. package/dist/src/core/tokenLimits.test.js +0 -66
  195. package/dist/src/core/tokenLimits.test.js.map +0 -1
  196. package/dist/src/core/turn.test.d.ts +0 -6
  197. package/dist/src/core/turn.test.js +0 -366
  198. package/dist/src/core/turn.test.js.map +0 -1
  199. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  200. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  201. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  202. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  203. package/dist/src/ide/ide-installer.test.js +0 -55
  204. package/dist/src/ide/ide-installer.test.js.map +0 -1
  205. package/dist/src/ide/ideContext.test.d.ts +0 -6
  206. package/dist/src/ide/ideContext.test.js +0 -265
  207. package/dist/src/ide/ideContext.test.js.map +0 -1
  208. package/dist/src/index.test.d.ts +0 -6
  209. package/dist/src/index.test.js +0 -12
  210. package/dist/src/index.test.js.map +0 -1
  211. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  212. package/dist/src/integration-tests/todo-system.test.js +0 -46
  213. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  214. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  215. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  216. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  217. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  218. package/dist/src/mcp/oauth-provider.test.js +0 -602
  219. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  220. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  221. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  222. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  223. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  224. package/dist/src/mcp/oauth-utils.test.js +0 -144
  225. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  226. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  227. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  228. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  229. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  230. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  231. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  232. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  233. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  234. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  235. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  236. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  237. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  238. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  239. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  240. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  241. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  242. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  243. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  244. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  245. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  246. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  247. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  248. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  249. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  250. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  251. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  252. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  253. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  254. package/dist/src/providers/ProviderManager.test.js +0 -284
  255. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  256. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  257. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  258. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  259. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  260. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  261. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  262. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  263. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  264. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  265. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  266. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  267. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  268. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  269. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  270. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  271. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  272. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -292
  273. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  274. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  275. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  276. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  277. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  278. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  279. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  280. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  281. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  282. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  283. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  284. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  285. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  286. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  287. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  288. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  289. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  290. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  291. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  292. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  293. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  294. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  295. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  296. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  297. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  298. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  299. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  300. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  301. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  302. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -620
  303. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  304. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  305. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  306. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  307. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  308. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  309. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  310. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  311. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  312. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  313. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  314. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  315. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  316. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  317. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  318. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  319. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  320. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  321. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  322. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  323. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  324. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  325. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  326. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  327. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  328. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  329. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  330. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  331. package/dist/src/services/gitService.test.d.ts +0 -6
  332. package/dist/src/services/gitService.test.js +0 -209
  333. package/dist/src/services/gitService.test.js.map +0 -1
  334. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  335. package/dist/src/services/loopDetectionService.test.js +0 -484
  336. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  337. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  338. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  339. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  340. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  341. package/dist/src/services/shellExecutionService.test.js +0 -272
  342. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  343. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  344. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  345. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  346. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  347. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  348. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  349. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  350. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  351. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  352. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -6
  353. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -187
  354. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  355. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  356. package/dist/src/telemetry/loggers.test.js +0 -573
  357. package/dist/src/telemetry/loggers.test.js.map +0 -1
  358. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  359. package/dist/src/telemetry/metrics.test.js +0 -212
  360. package/dist/src/telemetry/metrics.test.js.map +0 -1
  361. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  362. package/dist/src/telemetry/telemetry.test.js +0 -54
  363. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  364. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  365. package/dist/src/telemetry/uiTelemetry.test.js +0 -518
  366. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  367. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  368. package/dist/src/tools/ToolFormatter.test.js +0 -349
  369. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  370. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  371. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  372. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  373. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  374. package/dist/src/tools/diffOptions.test.js +0 -119
  375. package/dist/src/tools/diffOptions.test.js.map +0 -1
  376. package/dist/src/tools/edit.test.d.ts +0 -6
  377. package/dist/src/tools/edit.test.js +0 -689
  378. package/dist/src/tools/edit.test.js.map +0 -1
  379. package/dist/src/tools/glob.test.d.ts +0 -6
  380. package/dist/src/tools/glob.test.js +0 -332
  381. package/dist/src/tools/glob.test.js.map +0 -1
  382. package/dist/src/tools/grep.test.d.ts +0 -6
  383. package/dist/src/tools/grep.test.js +0 -272
  384. package/dist/src/tools/grep.test.js.map +0 -1
  385. package/dist/src/tools/ls.test.d.ts +0 -6
  386. package/dist/src/tools/ls.test.js +0 -357
  387. package/dist/src/tools/ls.test.js.map +0 -1
  388. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  389. package/dist/src/tools/mcp-client.test.js +0 -617
  390. package/dist/src/tools/mcp-client.test.js.map +0 -1
  391. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  392. package/dist/src/tools/mcp-tool.test.js +0 -501
  393. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  394. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  395. package/dist/src/tools/memoryTool.test.js +0 -266
  396. package/dist/src/tools/memoryTool.test.js.map +0 -1
  397. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  398. package/dist/src/tools/modifiable-tool.test.js +0 -193
  399. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  400. package/dist/src/tools/read-file.test.d.ts +0 -6
  401. package/dist/src/tools/read-file.test.js +0 -319
  402. package/dist/src/tools/read-file.test.js.map +0 -1
  403. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  404. package/dist/src/tools/read-many-files.test.js +0 -644
  405. package/dist/src/tools/read-many-files.test.js.map +0 -1
  406. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  407. package/dist/src/tools/shell.multibyte.test.js +0 -75
  408. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  409. package/dist/src/tools/shell.test.d.ts +0 -6
  410. package/dist/src/tools/shell.test.js +0 -367
  411. package/dist/src/tools/shell.test.js.map +0 -1
  412. package/dist/src/tools/todo-pause.spec.d.ts +0 -6
  413. package/dist/src/tools/todo-pause.spec.js +0 -287
  414. package/dist/src/tools/todo-pause.spec.js.map +0 -1
  415. package/dist/src/tools/todo-read.test.d.ts +0 -6
  416. package/dist/src/tools/todo-read.test.js +0 -162
  417. package/dist/src/tools/todo-read.test.js.map +0 -1
  418. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  419. package/dist/src/tools/todo-schemas.test.js +0 -341
  420. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  421. package/dist/src/tools/todo-store.test.d.ts +0 -6
  422. package/dist/src/tools/todo-store.test.js +0 -169
  423. package/dist/src/tools/todo-store.test.js.map +0 -1
  424. package/dist/src/tools/todo-write.test.d.ts +0 -6
  425. package/dist/src/tools/todo-write.test.js +0 -226
  426. package/dist/src/tools/todo-write.test.js.map +0 -1
  427. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  428. package/dist/src/tools/tool-registry.test.js +0 -468
  429. package/dist/src/tools/tool-registry.test.js.map +0 -1
  430. package/dist/src/tools/tools.test.d.ts +0 -6
  431. package/dist/src/tools/tools.test.js +0 -117
  432. package/dist/src/tools/tools.test.js.map +0 -1
  433. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  434. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  435. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  436. package/dist/src/tools/web-search.test.d.ts +0 -6
  437. package/dist/src/tools/web-search.test.js +0 -230
  438. package/dist/src/tools/web-search.test.js.map +0 -1
  439. package/dist/src/tools/write-file.test.d.ts +0 -6
  440. package/dist/src/tools/write-file.test.js +0 -465
  441. package/dist/src/tools/write-file.test.js.map +0 -1
  442. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  443. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  444. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  445. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  446. package/dist/src/utils/editCorrector.test.js +0 -564
  447. package/dist/src/utils/editCorrector.test.js.map +0 -1
  448. package/dist/src/utils/editor.test.d.ts +0 -6
  449. package/dist/src/utils/editor.test.js +0 -445
  450. package/dist/src/utils/editor.test.js.map +0 -1
  451. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  452. package/dist/src/utils/environmentContext.test.js +0 -139
  453. package/dist/src/utils/environmentContext.test.js.map +0 -1
  454. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  455. package/dist/src/utils/errorReporting.test.js +0 -130
  456. package/dist/src/utils/errorReporting.test.js.map +0 -1
  457. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  458. package/dist/src/utils/fileUtils.test.js +0 -363
  459. package/dist/src/utils/fileUtils.test.js.map +0 -1
  460. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  461. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  462. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  463. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  464. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  465. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  466. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  467. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  468. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  469. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  470. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  471. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  472. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  473. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  474. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  475. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  476. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  477. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  478. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  479. package/dist/src/utils/getFolderStructure.test.js +0 -282
  480. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  481. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  482. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  483. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  484. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  485. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  486. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  487. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  488. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  489. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  490. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  491. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  492. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  493. package/dist/src/utils/partUtils.test.d.ts +0 -6
  494. package/dist/src/utils/partUtils.test.js +0 -130
  495. package/dist/src/utils/partUtils.test.js.map +0 -1
  496. package/dist/src/utils/paths.test.d.ts +0 -6
  497. package/dist/src/utils/paths.test.js +0 -153
  498. package/dist/src/utils/paths.test.js.map +0 -1
  499. package/dist/src/utils/retry.test.d.ts +0 -6
  500. package/dist/src/utils/retry.test.js +0 -322
  501. package/dist/src/utils/retry.test.js.map +0 -1
  502. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  503. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  504. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  505. package/dist/src/utils/sanitization.test.d.ts +0 -6
  506. package/dist/src/utils/sanitization.test.js +0 -81
  507. package/dist/src/utils/sanitization.test.js.map +0 -1
  508. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  509. package/dist/src/utils/schemaValidator.test.js +0 -146
  510. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  511. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  512. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  513. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  514. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  515. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  516. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  517. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  518. package/dist/src/utils/shell-utils.test.js +0 -200
  519. package/dist/src/utils/shell-utils.test.js.map +0 -1
  520. package/dist/src/utils/summarizer.test.d.ts +0 -6
  521. package/dist/src/utils/summarizer.test.js +0 -131
  522. package/dist/src/utils/summarizer.test.js.map +0 -1
  523. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  524. package/dist/src/utils/systemEncoding.test.js +0 -368
  525. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  526. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  527. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  528. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  529. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  530. package/dist/src/utils/unicodeUtils.test.js +0 -120
  531. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  532. package/dist/src/utils/user_account.test.d.ts +0 -6
  533. package/dist/src/utils/user_account.test.js +0 -153
  534. package/dist/src/utils/user_account.test.js.map +0 -1
  535. package/dist/src/utils/user_id.test.d.ts +0 -6
  536. package/dist/src/utils/user_id.test.js +0 -21
  537. package/dist/src/utils/user_id.test.js.map +0 -1
  538. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  539. package/dist/src/utils/workspaceContext.test.js +0 -209
  540. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -1,467 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, vi, beforeEach, afterEach, afterAll, } from 'vitest';
7
- import { Logger, MessageSenderType } from './logger.js';
8
- import { promises as fs } from 'node:fs';
9
- import path from 'node:path';
10
- import crypto from 'node:crypto';
11
- import os from 'node:os';
12
- const LLXPRT_DIR_NAME = '.llxprt';
13
- const TMP_DIR_NAME = 'tmp';
14
- const LOG_FILE_NAME = 'logs.json';
15
- const CHECKPOINT_FILE_NAME = 'checkpoint.json';
16
- const projectDir = process.cwd();
17
- const hash = crypto.createHash('sha256').update(projectDir).digest('hex');
18
- const TEST_LLXPRT_DIR = path.join(os.homedir(), LLXPRT_DIR_NAME, TMP_DIR_NAME, hash);
19
- const TEST_LOG_FILE_PATH = path.join(TEST_LLXPRT_DIR, LOG_FILE_NAME);
20
- const TEST_CHECKPOINT_FILE_PATH = path.join(TEST_LLXPRT_DIR, CHECKPOINT_FILE_NAME);
21
- async function cleanupLogAndCheckpointFiles() {
22
- try {
23
- await fs.rm(TEST_LLXPRT_DIR, { recursive: true, force: true });
24
- }
25
- catch (_error) {
26
- // Ignore errors, as the directory may not exist, which is fine.
27
- }
28
- }
29
- async function readLogFile() {
30
- try {
31
- const content = await fs.readFile(TEST_LOG_FILE_PATH, 'utf-8');
32
- return JSON.parse(content);
33
- }
34
- catch (error) {
35
- if (error.code === 'ENOENT') {
36
- return [];
37
- }
38
- throw error;
39
- }
40
- }
41
- vi.mock('../utils/session.js', () => ({
42
- sessionId: 'test-session-id',
43
- }));
44
- describe('Logger', () => {
45
- let logger;
46
- const testSessionId = 'test-session-id';
47
- beforeEach(async () => {
48
- vi.resetAllMocks();
49
- vi.useFakeTimers();
50
- vi.setSystemTime(new Date('2025-01-01T12:00:00.000Z'));
51
- // Clean up before the test
52
- await cleanupLogAndCheckpointFiles();
53
- // Ensure the directory exists for the test
54
- await fs.mkdir(TEST_LLXPRT_DIR, { recursive: true });
55
- logger = new Logger(testSessionId);
56
- await logger.initialize();
57
- });
58
- afterEach(async () => {
59
- if (logger) {
60
- logger.close();
61
- }
62
- // Clean up after the test
63
- await cleanupLogAndCheckpointFiles();
64
- vi.useRealTimers();
65
- vi.restoreAllMocks();
66
- });
67
- afterAll(async () => {
68
- // Final cleanup
69
- await cleanupLogAndCheckpointFiles();
70
- });
71
- describe('initialize', () => {
72
- it('should create .llxprt directory and an empty log file if none exist', async () => {
73
- const dirExists = await fs
74
- .access(TEST_LLXPRT_DIR)
75
- .then(() => true)
76
- .catch(() => false);
77
- expect(dirExists).toBe(true);
78
- const fileExists = await fs
79
- .access(TEST_LOG_FILE_PATH)
80
- .then(() => true)
81
- .catch(() => false);
82
- expect(fileExists).toBe(true);
83
- const logContent = await readLogFile();
84
- expect(logContent).toEqual([]);
85
- });
86
- it('should load existing logs and set correct messageId for the current session', async () => {
87
- const currentSessionId = 'session-123';
88
- const anotherSessionId = 'session-456';
89
- const existingLogs = [
90
- {
91
- sessionId: currentSessionId,
92
- messageId: 0,
93
- timestamp: new Date('2025-01-01T10:00:05.000Z').toISOString(),
94
- type: MessageSenderType.USER,
95
- message: 'Msg1',
96
- },
97
- {
98
- sessionId: anotherSessionId,
99
- messageId: 5,
100
- timestamp: new Date('2025-01-01T09:00:00.000Z').toISOString(),
101
- type: MessageSenderType.USER,
102
- message: 'OldMsg',
103
- },
104
- {
105
- sessionId: currentSessionId,
106
- messageId: 1,
107
- timestamp: new Date('2025-01-01T10:00:10.000Z').toISOString(),
108
- type: MessageSenderType.USER,
109
- message: 'Msg2',
110
- },
111
- ];
112
- await fs.writeFile(TEST_LOG_FILE_PATH, JSON.stringify(existingLogs, null, 2));
113
- const newLogger = new Logger(currentSessionId);
114
- await newLogger.initialize();
115
- expect(newLogger['messageId']).toBe(2);
116
- expect(newLogger['logs']).toEqual(existingLogs);
117
- newLogger.close();
118
- });
119
- it('should set messageId to 0 for a new session if log file exists but has no logs for current session', async () => {
120
- const existingLogs = [
121
- {
122
- sessionId: 'some-other-session',
123
- messageId: 5,
124
- timestamp: new Date().toISOString(),
125
- type: MessageSenderType.USER,
126
- message: 'OldMsg',
127
- },
128
- ];
129
- await fs.writeFile(TEST_LOG_FILE_PATH, JSON.stringify(existingLogs, null, 2));
130
- const newLogger = new Logger('a-new-session');
131
- await newLogger.initialize();
132
- expect(newLogger['messageId']).toBe(0);
133
- newLogger.close();
134
- });
135
- it('should be idempotent', async () => {
136
- await logger.logMessage(MessageSenderType.USER, 'test message');
137
- const initialMessageId = logger['messageId'];
138
- const initialLogCount = logger['logs'].length;
139
- await logger.initialize(); // Second call should not change state
140
- expect(logger['messageId']).toBe(initialMessageId);
141
- expect(logger['logs'].length).toBe(initialLogCount);
142
- const logsFromFile = await readLogFile();
143
- expect(logsFromFile.length).toBe(1);
144
- });
145
- it('should handle invalid JSON in log file by backing it up and starting fresh', async () => {
146
- await fs.writeFile(TEST_LOG_FILE_PATH, 'invalid json');
147
- const consoleDebugSpy = vi
148
- .spyOn(console, 'debug')
149
- .mockImplementation(() => { });
150
- const newLogger = new Logger(testSessionId);
151
- await newLogger.initialize();
152
- expect(consoleDebugSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid JSON in log file'), expect.any(SyntaxError));
153
- const logContent = await readLogFile();
154
- expect(logContent).toEqual([]);
155
- const dirContents = await fs.readdir(TEST_LLXPRT_DIR);
156
- expect(dirContents.some((f) => f.startsWith(LOG_FILE_NAME + '.invalid_json') && f.endsWith('.bak'))).toBe(true);
157
- newLogger.close();
158
- });
159
- it('should handle non-array JSON in log file by backing it up and starting fresh', async () => {
160
- await fs.writeFile(TEST_LOG_FILE_PATH, JSON.stringify({ not: 'an array' }));
161
- const consoleDebugSpy = vi
162
- .spyOn(console, 'debug')
163
- .mockImplementation(() => { });
164
- const newLogger = new Logger(testSessionId);
165
- await newLogger.initialize();
166
- expect(consoleDebugSpy).toHaveBeenCalledWith(`Log file at ${TEST_LOG_FILE_PATH} is not a valid JSON array. Starting with empty logs.`);
167
- const logContent = await readLogFile();
168
- expect(logContent).toEqual([]);
169
- const dirContents = await fs.readdir(TEST_LLXPRT_DIR);
170
- expect(dirContents.some((f) => f.startsWith(LOG_FILE_NAME + '.malformed_array') &&
171
- f.endsWith('.bak'))).toBe(true);
172
- newLogger.close();
173
- });
174
- });
175
- describe('logMessage', () => {
176
- it('should append a message to the log file and update in-memory logs', async () => {
177
- await logger.logMessage(MessageSenderType.USER, 'Hello, world!');
178
- const logsFromFile = await readLogFile();
179
- expect(logsFromFile.length).toBe(1);
180
- expect(logsFromFile[0]).toMatchObject({
181
- sessionId: testSessionId,
182
- messageId: 0,
183
- type: MessageSenderType.USER,
184
- message: 'Hello, world!',
185
- timestamp: new Date('2025-01-01T12:00:00.000Z').toISOString(),
186
- });
187
- expect(logger['logs'].length).toBe(1);
188
- expect(logger['logs'][0]).toEqual(logsFromFile[0]);
189
- expect(logger['messageId']).toBe(1);
190
- });
191
- it('should correctly increment messageId for subsequent messages in the same session', async () => {
192
- await logger.logMessage(MessageSenderType.USER, 'First');
193
- vi.advanceTimersByTime(1000);
194
- await logger.logMessage(MessageSenderType.USER, 'Second');
195
- const logs = await readLogFile();
196
- expect(logs.length).toBe(2);
197
- expect(logs[0].messageId).toBe(0);
198
- expect(logs[1].messageId).toBe(1);
199
- expect(logs[1].timestamp).not.toBe(logs[0].timestamp);
200
- expect(logger['messageId']).toBe(2);
201
- });
202
- it('should handle logger not initialized', async () => {
203
- const uninitializedLogger = new Logger(testSessionId);
204
- uninitializedLogger.close(); // Ensure it's treated as uninitialized
205
- const consoleDebugSpy = vi
206
- .spyOn(console, 'debug')
207
- .mockImplementation(() => { });
208
- await uninitializedLogger.logMessage(MessageSenderType.USER, 'test');
209
- expect(consoleDebugSpy).toHaveBeenCalledWith('Logger not initialized or session ID missing. Cannot log message.');
210
- expect((await readLogFile()).length).toBe(0);
211
- uninitializedLogger.close();
212
- });
213
- it('should simulate concurrent writes from different logger instances to the same file', async () => {
214
- const concurrentSessionId = 'concurrent-session';
215
- const logger1 = new Logger(concurrentSessionId);
216
- await logger1.initialize();
217
- const logger2 = new Logger(concurrentSessionId);
218
- await logger2.initialize();
219
- expect(logger2['sessionId']).toEqual(logger1['sessionId']);
220
- await logger1.logMessage(MessageSenderType.USER, 'L1M1');
221
- vi.advanceTimersByTime(10);
222
- await logger2.logMessage(MessageSenderType.USER, 'L2M1');
223
- vi.advanceTimersByTime(10);
224
- await logger1.logMessage(MessageSenderType.USER, 'L1M2');
225
- vi.advanceTimersByTime(10);
226
- await logger2.logMessage(MessageSenderType.USER, 'L2M2');
227
- const logsFromFile = await readLogFile();
228
- expect(logsFromFile.length).toBe(4);
229
- const messageIdsInFile = logsFromFile
230
- .map((log) => log.messageId)
231
- .sort((a, b) => a - b);
232
- expect(messageIdsInFile).toEqual([0, 1, 2, 3]);
233
- const messagesInFile = logsFromFile
234
- .sort((a, b) => a.messageId - b.messageId)
235
- .map((l) => l.message);
236
- expect(messagesInFile).toEqual(['L1M1', 'L2M1', 'L1M2', 'L2M2']);
237
- // Check internal state (next messageId each logger would use for that session)
238
- expect(logger1['messageId']).toBe(3);
239
- expect(logger2['messageId']).toBe(4);
240
- logger1.close();
241
- logger2.close();
242
- });
243
- it('should not throw, not increment messageId, and log error if writing to file fails', async () => {
244
- vi.spyOn(fs, 'writeFile').mockRejectedValueOnce(new Error('Disk full'));
245
- const consoleDebugSpy = vi
246
- .spyOn(console, 'debug')
247
- .mockImplementation(() => { });
248
- const initialMessageId = logger['messageId'];
249
- const initialLogCount = logger['logs'].length;
250
- await logger.logMessage(MessageSenderType.USER, 'test fail write');
251
- expect(consoleDebugSpy).toHaveBeenCalledWith('Error writing to log file:', expect.any(Error));
252
- expect(logger['messageId']).toBe(initialMessageId); // Not incremented
253
- expect(logger['logs'].length).toBe(initialLogCount); // Log not added to in-memory cache
254
- });
255
- });
256
- describe('getPreviousUserMessages', () => {
257
- it('should retrieve all user messages from logs, sorted newest first', async () => {
258
- const loggerSort = new Logger('session-1');
259
- await loggerSort.initialize();
260
- await loggerSort.logMessage(MessageSenderType.USER, 'S1M0_ts100000');
261
- vi.advanceTimersByTime(1000);
262
- await loggerSort.logMessage(MessageSenderType.USER, 'S1M1_ts101000');
263
- vi.advanceTimersByTime(1000);
264
- // Switch to a different session to log
265
- const loggerSort2 = new Logger('session-2');
266
- await loggerSort2.initialize();
267
- await loggerSort2.logMessage(MessageSenderType.USER, 'S2M0_ts102000');
268
- vi.advanceTimersByTime(1000);
269
- await loggerSort2.logMessage('model', 'S2_Model_ts103000');
270
- vi.advanceTimersByTime(1000);
271
- await loggerSort2.logMessage(MessageSenderType.USER, 'S2M1_ts104000');
272
- loggerSort.close();
273
- loggerSort2.close();
274
- const finalLogger = new Logger('final-session');
275
- await finalLogger.initialize();
276
- const messages = await finalLogger.getPreviousUserMessages();
277
- expect(messages).toEqual([
278
- 'S2M1_ts104000',
279
- 'S2M0_ts102000',
280
- 'S1M1_ts101000',
281
- 'S1M0_ts100000',
282
- ]);
283
- finalLogger.close();
284
- });
285
- it('should return empty array if no user messages exist', async () => {
286
- await logger.logMessage('system', 'System boot');
287
- const messages = await logger.getPreviousUserMessages();
288
- expect(messages).toEqual([]);
289
- });
290
- it('should return empty array if logger not initialized', async () => {
291
- const uninitializedLogger = new Logger(testSessionId);
292
- uninitializedLogger.close();
293
- const messages = await uninitializedLogger.getPreviousUserMessages();
294
- expect(messages).toEqual([]);
295
- uninitializedLogger.close();
296
- });
297
- });
298
- describe('saveCheckpoint', () => {
299
- const conversation = [
300
- { role: 'user', parts: [{ text: 'Hello' }] },
301
- { role: 'model', parts: [{ text: 'Hi there' }] },
302
- ];
303
- it.each([
304
- { tag: 'test-tag', sanitizedTag: 'test-tag' },
305
- { tag: 'invalid/?*!', sanitizedTag: 'invalid' },
306
- { tag: '/?*!', sanitizedTag: 'default' },
307
- { tag: '../../secret', sanitizedTag: 'secret' },
308
- ])('should save a checkpoint', async ({ tag, sanitizedTag }) => {
309
- await logger.saveCheckpoint(conversation, tag);
310
- const taggedFilePath = path.join(TEST_LLXPRT_DIR, `checkpoint-${sanitizedTag}.json`);
311
- const fileContent = await fs.readFile(taggedFilePath, 'utf-8');
312
- expect(JSON.parse(fileContent)).toEqual({ history: conversation });
313
- });
314
- it('should not throw if logger is not initialized', async () => {
315
- const uninitializedLogger = new Logger(testSessionId);
316
- uninitializedLogger.close();
317
- const consoleErrorSpy = vi
318
- .spyOn(console, 'error')
319
- .mockImplementation(() => { });
320
- await expect(uninitializedLogger.saveCheckpoint(conversation, 'tag')).resolves.not.toThrow();
321
- expect(consoleErrorSpy).toHaveBeenCalledWith('Logger not initialized or checkpoint file path not set. Cannot save a checkpoint.');
322
- });
323
- });
324
- describe('loadCheckpoint', () => {
325
- const conversation = [
326
- { role: 'user', parts: [{ text: 'Hello' }] },
327
- { role: 'model', parts: [{ text: 'Hi there' }] },
328
- ];
329
- beforeEach(async () => {
330
- await fs.writeFile(TEST_CHECKPOINT_FILE_PATH, JSON.stringify(conversation, null, 2));
331
- });
332
- it.each([
333
- { tag: 'load-tag', sanitizedTag: 'load-tag' },
334
- { tag: 'inv/load?*!', sanitizedTag: 'invload' },
335
- { tag: '/?*!', sanitizedTag: 'default' },
336
- { tag: '../../secret', sanitizedTag: 'secret' },
337
- ])('should load from a checkpoint', async ({ tag, sanitizedTag }) => {
338
- const taggedConversation = [
339
- ...conversation,
340
- { role: 'user', parts: [{ text: 'hello' }] },
341
- ];
342
- const taggedFilePath = path.join(TEST_LLXPRT_DIR, `checkpoint-${sanitizedTag}.json`);
343
- await fs.writeFile(taggedFilePath, JSON.stringify(taggedConversation, null, 2));
344
- const loaded = await logger.loadCheckpoint(tag);
345
- expect(loaded).toEqual({ history: taggedConversation });
346
- });
347
- it('should return an empty array if a tagged checkpoint file does not exist', async () => {
348
- const loaded = await logger.loadCheckpoint('non-existent-tag');
349
- expect(loaded).toEqual({ history: [] });
350
- });
351
- it('should return an empty array if the checkpoint file does not exist', async () => {
352
- await fs.unlink(TEST_CHECKPOINT_FILE_PATH); // Ensure it's gone
353
- const loaded = await logger.loadCheckpoint('missing');
354
- expect(loaded).toEqual({ history: [] });
355
- });
356
- it('should return an empty array if the file contains invalid JSON', async () => {
357
- const tag = 'invalid-json-tag';
358
- const taggedFilePath = path.join(TEST_LLXPRT_DIR, `checkpoint-${tag}.json`);
359
- await fs.writeFile(taggedFilePath, 'invalid json');
360
- const consoleErrorSpy = vi
361
- .spyOn(console, 'error')
362
- .mockImplementation(() => { });
363
- const loadedCheckpoint = await logger.loadCheckpoint(tag);
364
- expect(loadedCheckpoint).toEqual({ history: [] });
365
- expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Failed to read or parse checkpoint file'), expect.any(Error));
366
- });
367
- it('should return an empty array if logger is not initialized', async () => {
368
- const uninitializedLogger = new Logger(testSessionId);
369
- uninitializedLogger.close();
370
- const consoleErrorSpy = vi
371
- .spyOn(console, 'error')
372
- .mockImplementation(() => { });
373
- const loadedCheckpoint = await uninitializedLogger.loadCheckpoint('tag');
374
- expect(loadedCheckpoint).toEqual({ history: [] });
375
- expect(consoleErrorSpy).toHaveBeenCalledWith('Logger not initialized or checkpoint file path not set. Cannot load checkpoint.');
376
- });
377
- });
378
- describe('deleteCheckpoint', () => {
379
- const conversation = [
380
- { role: 'user', parts: [{ text: 'Content to be deleted' }] },
381
- ];
382
- const tag = 'delete-me';
383
- let taggedFilePath;
384
- beforeEach(async () => {
385
- taggedFilePath = path.join(TEST_LLXPRT_DIR, `checkpoint-${tag}.json`);
386
- // Create a file to be deleted
387
- await fs.writeFile(taggedFilePath, JSON.stringify(conversation));
388
- });
389
- it('should delete the specified checkpoint file and return true', async () => {
390
- const result = await logger.deleteCheckpoint(tag);
391
- expect(result).toBe(true);
392
- // Verify the file is actually gone
393
- await expect(fs.access(taggedFilePath)).rejects.toThrow(/ENOENT/);
394
- });
395
- it('should return false if the checkpoint file does not exist', async () => {
396
- const result = await logger.deleteCheckpoint('non-existent-tag');
397
- expect(result).toBe(false);
398
- });
399
- it('should re-throw an error if file deletion fails for reasons other than not existing', async () => {
400
- // Simulate a different error (e.g., permission denied)
401
- vi.spyOn(fs, 'unlink').mockRejectedValueOnce(new Error('EACCES: permission denied'));
402
- const consoleErrorSpy = vi
403
- .spyOn(console, 'error')
404
- .mockImplementation(() => { });
405
- await expect(logger.deleteCheckpoint(tag)).rejects.toThrow('EACCES: permission denied');
406
- expect(consoleErrorSpy).toHaveBeenCalledWith(`Failed to delete checkpoint file ${taggedFilePath}:`, expect.any(Error));
407
- });
408
- it('should return false if logger is not initialized', async () => {
409
- const uninitializedLogger = new Logger(testSessionId);
410
- uninitializedLogger.close();
411
- const consoleErrorSpy = vi
412
- .spyOn(console, 'error')
413
- .mockImplementation(() => { });
414
- const result = await uninitializedLogger.deleteCheckpoint(tag);
415
- expect(result).toBe(false);
416
- expect(consoleErrorSpy).toHaveBeenCalledWith('Logger not initialized or checkpoint file path not set. Cannot delete checkpoint.');
417
- });
418
- });
419
- describe('checkpointExists', () => {
420
- const tag = 'exists-test';
421
- let taggedFilePath;
422
- beforeEach(() => {
423
- taggedFilePath = path.join(TEST_LLXPRT_DIR, `checkpoint-${tag}.json`);
424
- });
425
- it('should return true if the checkpoint file exists', async () => {
426
- await fs.writeFile(taggedFilePath, '{}');
427
- const exists = await logger.checkpointExists(tag);
428
- expect(exists).toBe(true);
429
- });
430
- it('should return false if the checkpoint file does not exist', async () => {
431
- const exists = await logger.checkpointExists('non-existent-tag');
432
- expect(exists).toBe(false);
433
- });
434
- it('should throw an error if logger is not initialized', async () => {
435
- const uninitializedLogger = new Logger(testSessionId);
436
- uninitializedLogger.close();
437
- await expect(uninitializedLogger.checkpointExists(tag)).rejects.toThrow('Logger not initialized. Cannot check for checkpoint existence.');
438
- });
439
- it('should re-throw an error if fs.access fails for reasons other than not existing', async () => {
440
- vi.spyOn(fs, 'access').mockRejectedValueOnce(new Error('EACCES: permission denied'));
441
- const consoleErrorSpy = vi
442
- .spyOn(console, 'error')
443
- .mockImplementation(() => { });
444
- await expect(logger.checkpointExists(tag)).rejects.toThrow('EACCES: permission denied');
445
- expect(consoleErrorSpy).toHaveBeenCalledWith(`Failed to check checkpoint existence for ${taggedFilePath}:`, expect.any(Error));
446
- });
447
- });
448
- describe('close', () => {
449
- it('should reset logger state', async () => {
450
- await logger.logMessage(MessageSenderType.USER, 'A message');
451
- logger.close();
452
- const consoleDebugSpy = vi
453
- .spyOn(console, 'debug')
454
- .mockImplementation(() => { });
455
- await logger.logMessage(MessageSenderType.USER, 'Another message');
456
- expect(consoleDebugSpy).toHaveBeenCalledWith('Logger not initialized or session ID missing. Cannot log message.');
457
- const messages = await logger.getPreviousUserMessages();
458
- expect(messages).toEqual([]);
459
- expect(logger['initialized']).toBe(false);
460
- expect(logger['logFilePath']).toBeUndefined();
461
- expect(logger['logs']).toEqual([]);
462
- expect(logger['sessionId']).toBeUndefined();
463
- expect(logger['messageId']).toBe(0);
464
- });
465
- });
466
- });
467
- //# sourceMappingURL=logger.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/core/logger.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};