@vybestack/llxprt-code-core 0.1.18-nightly.250811.b0db22c6 → 0.1.18-nightly.250812.12fa8ad2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
  6. package/dist/src/auth/anthropic-device-flow.js +208 -0
  7. package/dist/src/auth/anthropic-device-flow.js.map +1 -0
  8. package/dist/src/auth/token-store.js +11 -7
  9. package/dist/src/auth/token-store.js.map +1 -1
  10. package/dist/src/config/config.d.ts +7 -1
  11. package/dist/src/config/config.js +42 -4
  12. package/dist/src/config/config.js.map +1 -1
  13. package/dist/src/config/profileManager.d.ts +14 -4
  14. package/dist/src/config/profileManager.js +90 -11
  15. package/dist/src/config/profileManager.js.map +1 -1
  16. package/dist/src/core/contentGenerator.d.ts +2 -1
  17. package/dist/src/core/contentGenerator.js +1 -0
  18. package/dist/src/core/contentGenerator.js.map +1 -1
  19. package/dist/src/index.d.ts +6 -0
  20. package/dist/src/index.js +5 -0
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/providers/BaseProvider.d.ts +51 -0
  23. package/dist/src/providers/BaseProvider.js +136 -1
  24. package/dist/src/providers/BaseProvider.js.map +1 -1
  25. package/dist/src/providers/IProvider.d.ts +1 -0
  26. package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
  27. package/dist/src/providers/LoggingProviderWrapper.js +3 -0
  28. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  29. package/dist/src/providers/ProviderManager.d.ts +0 -1
  30. package/dist/src/providers/ProviderManager.js +23 -14
  31. package/dist/src/providers/ProviderManager.js.map +1 -1
  32. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  33. package/dist/src/providers/anthropic/AnthropicProvider.js +172 -26
  34. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  35. package/dist/src/providers/gemini/GeminiProvider.d.ts +4 -0
  36. package/dist/src/providers/gemini/GeminiProvider.js +33 -1
  37. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  38. package/dist/src/providers/openai/OpenAIProvider.d.ts +32 -0
  39. package/dist/src/providers/openai/OpenAIProvider.js +200 -13
  40. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  41. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  42. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  43. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  44. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  45. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  46. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  47. package/dist/src/settings/SettingsService.d.ts +32 -0
  48. package/dist/src/settings/SettingsService.js +204 -0
  49. package/dist/src/settings/SettingsService.js.map +1 -0
  50. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  51. package/dist/src/settings/settingsServiceInstance.js +24 -0
  52. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  53. package/dist/src/settings/types.d.ts +141 -0
  54. package/dist/src/settings/types.js +5 -0
  55. package/dist/src/settings/types.js.map +1 -0
  56. package/package.json +4 -2
  57. package/dist/src/auth/auth-integration.spec.d.ts +0 -6
  58. package/dist/src/auth/auth-integration.spec.js +0 -384
  59. package/dist/src/auth/auth-integration.spec.js.map +0 -1
  60. package/dist/src/auth/precedence.test.d.ts +0 -6
  61. package/dist/src/auth/precedence.test.js +0 -374
  62. package/dist/src/auth/precedence.test.js.map +0 -1
  63. package/dist/src/auth/qwen-device-flow.spec.d.ts +0 -6
  64. package/dist/src/auth/qwen-device-flow.spec.js +0 -793
  65. package/dist/src/auth/qwen-device-flow.spec.js.map +0 -1
  66. package/dist/src/auth/token-store.spec.d.ts +0 -6
  67. package/dist/src/auth/token-store.spec.js +0 -405
  68. package/dist/src/auth/token-store.spec.js.map +0 -1
  69. package/dist/src/code_assist/converter.test.d.ts +0 -6
  70. package/dist/src/code_assist/converter.test.js +0 -279
  71. package/dist/src/code_assist/converter.test.js.map +0 -1
  72. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  73. package/dist/src/code_assist/oauth2.test.js +0 -370
  74. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  75. package/dist/src/code_assist/server.test.d.ts +0 -6
  76. package/dist/src/code_assist/server.test.js +0 -134
  77. package/dist/src/code_assist/server.test.js.map +0 -1
  78. package/dist/src/code_assist/setup.test.d.ts +0 -6
  79. package/dist/src/code_assist/setup.test.js +0 -65
  80. package/dist/src/code_assist/setup.test.js.map +0 -1
  81. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  82. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  83. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  84. package/dist/src/config/config.ephemeral.test.d.ts +0 -6
  85. package/dist/src/config/config.ephemeral.test.js +0 -152
  86. package/dist/src/config/config.ephemeral.test.js.map +0 -1
  87. package/dist/src/config/config.test.d.ts +0 -6
  88. package/dist/src/config/config.test.js +0 -369
  89. package/dist/src/config/config.test.js.map +0 -1
  90. package/dist/src/config/endpoints.test.d.ts +0 -6
  91. package/dist/src/config/endpoints.test.js +0 -196
  92. package/dist/src/config/endpoints.test.js.map +0 -1
  93. package/dist/src/config/flashFallback.test.d.ts +0 -6
  94. package/dist/src/config/flashFallback.test.js +0 -91
  95. package/dist/src/config/flashFallback.test.js.map +0 -1
  96. package/dist/src/core/client.test.d.ts +0 -6
  97. package/dist/src/core/client.test.js +0 -1323
  98. package/dist/src/core/client.test.js.map +0 -1
  99. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  100. package/dist/src/core/contentGenerator.test.js +0 -103
  101. package/dist/src/core/contentGenerator.test.js.map +0 -1
  102. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  103. package/dist/src/core/coreToolScheduler.test.js +0 -637
  104. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  105. package/dist/src/core/geminiChat.test.d.ts +0 -6
  106. package/dist/src/core/geminiChat.test.js +0 -425
  107. package/dist/src/core/geminiChat.test.js.map +0 -1
  108. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  109. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  110. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  111. package/dist/src/core/logger.test.d.ts +0 -6
  112. package/dist/src/core/logger.test.js +0 -467
  113. package/dist/src/core/logger.test.js.map +0 -1
  114. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  115. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  116. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  117. package/dist/src/core/prompts-async.test.d.ts +0 -6
  118. package/dist/src/core/prompts-async.test.js +0 -115
  119. package/dist/src/core/prompts-async.test.js.map +0 -1
  120. package/dist/src/core/prompts.test.d.ts +0 -6
  121. package/dist/src/core/prompts.test.js +0 -68
  122. package/dist/src/core/prompts.test.js.map +0 -1
  123. package/dist/src/core/subagent.test.d.ts +0 -6
  124. package/dist/src/core/subagent.test.js +0 -510
  125. package/dist/src/core/subagent.test.js.map +0 -1
  126. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  127. package/dist/src/core/tokenLimits.test.js +0 -66
  128. package/dist/src/core/tokenLimits.test.js.map +0 -1
  129. package/dist/src/core/turn.test.d.ts +0 -6
  130. package/dist/src/core/turn.test.js +0 -366
  131. package/dist/src/core/turn.test.js.map +0 -1
  132. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  133. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  134. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  135. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  136. package/dist/src/ide/ide-installer.test.js +0 -55
  137. package/dist/src/ide/ide-installer.test.js.map +0 -1
  138. package/dist/src/ide/ideContext.test.d.ts +0 -6
  139. package/dist/src/ide/ideContext.test.js +0 -265
  140. package/dist/src/ide/ideContext.test.js.map +0 -1
  141. package/dist/src/index.test.d.ts +0 -6
  142. package/dist/src/index.test.js +0 -12
  143. package/dist/src/index.test.js.map +0 -1
  144. package/dist/src/integration-tests/oauth-integration.spec.d.ts +0 -6
  145. package/dist/src/integration-tests/oauth-integration.spec.js +0 -518
  146. package/dist/src/integration-tests/oauth-integration.spec.js.map +0 -1
  147. package/dist/src/integration-tests/oauth-simple-test.spec.d.ts +0 -1
  148. package/dist/src/integration-tests/oauth-simple-test.spec.js +0 -88
  149. package/dist/src/integration-tests/oauth-simple-test.spec.js.map +0 -1
  150. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  151. package/dist/src/integration-tests/todo-system.test.js +0 -46
  152. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  153. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  154. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  155. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  156. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  157. package/dist/src/mcp/oauth-provider.test.js +0 -602
  158. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  159. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  160. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  161. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  162. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  163. package/dist/src/mcp/oauth-utils.test.js +0 -144
  164. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  165. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  166. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  167. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  168. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  169. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  170. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  171. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  172. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  173. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  174. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  175. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  176. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  177. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  178. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  179. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  180. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  181. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  182. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  183. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  184. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  185. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  186. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  187. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  188. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  189. package/dist/src/providers/BaseProvider.test.d.ts +0 -6
  190. package/dist/src/providers/BaseProvider.test.js +0 -472
  191. package/dist/src/providers/BaseProvider.test.js.map +0 -1
  192. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  193. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  194. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  195. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  196. package/dist/src/providers/ProviderManager.test.js +0 -284
  197. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  198. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  199. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  200. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  201. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  202. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  203. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  204. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  205. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  206. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  207. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  208. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  209. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  210. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  211. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  212. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  213. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  214. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -308
  215. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  216. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  217. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  218. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  219. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  220. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  221. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  222. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  223. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  224. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  225. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  226. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  227. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  228. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  229. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  230. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  231. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  232. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  233. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  234. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  235. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  236. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  237. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  238. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  239. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  240. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  241. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  242. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  243. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  244. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -621
  245. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  246. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  247. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  248. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  249. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  250. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  251. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  252. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  253. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  254. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  255. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  256. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  257. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  258. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  259. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  260. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  261. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  262. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  263. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  264. package/dist/src/providers/openai/openai-oauth.spec.d.ts +0 -16
  265. package/dist/src/providers/openai/openai-oauth.spec.js +0 -544
  266. package/dist/src/providers/openai/openai-oauth.spec.js.map +0 -1
  267. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  268. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  269. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  270. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  271. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  272. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  273. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  274. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  275. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  276. package/dist/src/services/gitService.test.d.ts +0 -6
  277. package/dist/src/services/gitService.test.js +0 -209
  278. package/dist/src/services/gitService.test.js.map +0 -1
  279. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  280. package/dist/src/services/loopDetectionService.test.js +0 -484
  281. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  282. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  283. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  284. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  285. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  286. package/dist/src/services/shellExecutionService.test.js +0 -272
  287. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  288. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  289. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  290. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  291. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  292. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  293. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  294. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  295. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  296. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  297. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -6
  298. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -187
  299. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  300. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  301. package/dist/src/telemetry/loggers.test.js +0 -573
  302. package/dist/src/telemetry/loggers.test.js.map +0 -1
  303. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  304. package/dist/src/telemetry/metrics.test.js +0 -212
  305. package/dist/src/telemetry/metrics.test.js.map +0 -1
  306. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  307. package/dist/src/telemetry/telemetry.test.js +0 -54
  308. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  309. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  310. package/dist/src/telemetry/uiTelemetry.test.js +0 -518
  311. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  312. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  313. package/dist/src/tools/ToolFormatter.test.js +0 -349
  314. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  315. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  316. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  317. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  318. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  319. package/dist/src/tools/diffOptions.test.js +0 -119
  320. package/dist/src/tools/diffOptions.test.js.map +0 -1
  321. package/dist/src/tools/edit.test.d.ts +0 -6
  322. package/dist/src/tools/edit.test.js +0 -689
  323. package/dist/src/tools/edit.test.js.map +0 -1
  324. package/dist/src/tools/glob.test.d.ts +0 -6
  325. package/dist/src/tools/glob.test.js +0 -332
  326. package/dist/src/tools/glob.test.js.map +0 -1
  327. package/dist/src/tools/grep.test.d.ts +0 -6
  328. package/dist/src/tools/grep.test.js +0 -272
  329. package/dist/src/tools/grep.test.js.map +0 -1
  330. package/dist/src/tools/ls.test.d.ts +0 -6
  331. package/dist/src/tools/ls.test.js +0 -357
  332. package/dist/src/tools/ls.test.js.map +0 -1
  333. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  334. package/dist/src/tools/mcp-client.test.js +0 -617
  335. package/dist/src/tools/mcp-client.test.js.map +0 -1
  336. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  337. package/dist/src/tools/mcp-tool.test.js +0 -501
  338. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  339. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  340. package/dist/src/tools/memoryTool.test.js +0 -266
  341. package/dist/src/tools/memoryTool.test.js.map +0 -1
  342. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  343. package/dist/src/tools/modifiable-tool.test.js +0 -193
  344. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  345. package/dist/src/tools/read-file.test.d.ts +0 -6
  346. package/dist/src/tools/read-file.test.js +0 -319
  347. package/dist/src/tools/read-file.test.js.map +0 -1
  348. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  349. package/dist/src/tools/read-many-files.test.js +0 -644
  350. package/dist/src/tools/read-many-files.test.js.map +0 -1
  351. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  352. package/dist/src/tools/shell.multibyte.test.js +0 -75
  353. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  354. package/dist/src/tools/shell.test.d.ts +0 -6
  355. package/dist/src/tools/shell.test.js +0 -367
  356. package/dist/src/tools/shell.test.js.map +0 -1
  357. package/dist/src/tools/todo-pause.spec.d.ts +0 -6
  358. package/dist/src/tools/todo-pause.spec.js +0 -287
  359. package/dist/src/tools/todo-pause.spec.js.map +0 -1
  360. package/dist/src/tools/todo-read.test.d.ts +0 -6
  361. package/dist/src/tools/todo-read.test.js +0 -162
  362. package/dist/src/tools/todo-read.test.js.map +0 -1
  363. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  364. package/dist/src/tools/todo-schemas.test.js +0 -341
  365. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  366. package/dist/src/tools/todo-store.test.d.ts +0 -6
  367. package/dist/src/tools/todo-store.test.js +0 -169
  368. package/dist/src/tools/todo-store.test.js.map +0 -1
  369. package/dist/src/tools/todo-write.test.d.ts +0 -6
  370. package/dist/src/tools/todo-write.test.js +0 -226
  371. package/dist/src/tools/todo-write.test.js.map +0 -1
  372. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  373. package/dist/src/tools/tool-registry.test.js +0 -468
  374. package/dist/src/tools/tool-registry.test.js.map +0 -1
  375. package/dist/src/tools/tools.test.d.ts +0 -6
  376. package/dist/src/tools/tools.test.js +0 -117
  377. package/dist/src/tools/tools.test.js.map +0 -1
  378. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  379. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  380. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  381. package/dist/src/tools/web-search.test.d.ts +0 -6
  382. package/dist/src/tools/web-search.test.js +0 -230
  383. package/dist/src/tools/web-search.test.js.map +0 -1
  384. package/dist/src/tools/write-file.test.d.ts +0 -6
  385. package/dist/src/tools/write-file.test.js +0 -465
  386. package/dist/src/tools/write-file.test.js.map +0 -1
  387. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  388. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  389. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  390. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  391. package/dist/src/utils/editCorrector.test.js +0 -564
  392. package/dist/src/utils/editCorrector.test.js.map +0 -1
  393. package/dist/src/utils/editor.test.d.ts +0 -6
  394. package/dist/src/utils/editor.test.js +0 -445
  395. package/dist/src/utils/editor.test.js.map +0 -1
  396. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  397. package/dist/src/utils/environmentContext.test.js +0 -139
  398. package/dist/src/utils/environmentContext.test.js.map +0 -1
  399. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  400. package/dist/src/utils/errorReporting.test.js +0 -130
  401. package/dist/src/utils/errorReporting.test.js.map +0 -1
  402. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  403. package/dist/src/utils/fileUtils.test.js +0 -363
  404. package/dist/src/utils/fileUtils.test.js.map +0 -1
  405. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  406. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  407. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  408. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  409. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  410. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  411. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  412. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  413. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  414. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  415. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  416. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  417. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  418. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  419. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  420. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  421. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  422. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  423. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  424. package/dist/src/utils/getFolderStructure.test.js +0 -282
  425. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  426. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  427. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  428. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  429. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  430. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  431. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  432. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  433. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  434. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  435. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  436. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  437. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  438. package/dist/src/utils/partUtils.test.d.ts +0 -6
  439. package/dist/src/utils/partUtils.test.js +0 -130
  440. package/dist/src/utils/partUtils.test.js.map +0 -1
  441. package/dist/src/utils/paths.test.d.ts +0 -6
  442. package/dist/src/utils/paths.test.js +0 -153
  443. package/dist/src/utils/paths.test.js.map +0 -1
  444. package/dist/src/utils/retry.test.d.ts +0 -6
  445. package/dist/src/utils/retry.test.js +0 -322
  446. package/dist/src/utils/retry.test.js.map +0 -1
  447. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  448. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  449. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  450. package/dist/src/utils/sanitization.test.d.ts +0 -6
  451. package/dist/src/utils/sanitization.test.js +0 -81
  452. package/dist/src/utils/sanitization.test.js.map +0 -1
  453. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  454. package/dist/src/utils/schemaValidator.test.js +0 -146
  455. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  456. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  457. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  458. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  459. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  460. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  461. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  462. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  463. package/dist/src/utils/shell-utils.test.js +0 -200
  464. package/dist/src/utils/shell-utils.test.js.map +0 -1
  465. package/dist/src/utils/summarizer.test.d.ts +0 -6
  466. package/dist/src/utils/summarizer.test.js +0 -131
  467. package/dist/src/utils/summarizer.test.js.map +0 -1
  468. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  469. package/dist/src/utils/systemEncoding.test.js +0 -368
  470. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  471. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  472. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  473. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  474. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  475. package/dist/src/utils/unicodeUtils.test.js +0 -120
  476. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  477. package/dist/src/utils/user_account.test.d.ts +0 -6
  478. package/dist/src/utils/user_account.test.js +0 -153
  479. package/dist/src/utils/user_account.test.js.map +0 -1
  480. package/dist/src/utils/user_id.test.d.ts +0 -6
  481. package/dist/src/utils/user_id.test.js +0 -21
  482. package/dist/src/utils/user_id.test.js.map +0 -1
  483. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  484. package/dist/src/utils/workspaceContext.test.js +0 -209
  485. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -1,465 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, beforeEach, afterEach, vi, } from 'vitest';
7
- import { WriteFileTool } from './write-file.js';
8
- import { ToolConfirmationOutcome, } from './tools.js';
9
- import { ApprovalMode } from '../config/config.js';
10
- import path from 'path';
11
- import fs from 'fs';
12
- import os from 'os';
13
- import { GeminiClient } from '../core/client.js';
14
- import { ensureCorrectEdit, ensureCorrectFileContent, } from '../utils/editCorrector.js';
15
- import { createMockWorkspaceContext } from '../test-utils/mockWorkspaceContext.js';
16
- const rootDir = path.resolve(os.tmpdir(), 'gemini-cli-test-root');
17
- // --- MOCKS ---
18
- vi.mock('../core/client.js');
19
- vi.mock('../utils/editCorrector.js');
20
- let mockGeminiClientInstance;
21
- const mockEnsureCorrectEdit = vi.fn();
22
- const mockEnsureCorrectFileContent = vi.fn();
23
- // Wire up the mocked functions to be used by the actual module imports
24
- vi.mocked(ensureCorrectEdit).mockImplementation(mockEnsureCorrectEdit);
25
- vi.mocked(ensureCorrectFileContent).mockImplementation(mockEnsureCorrectFileContent);
26
- // Mock Config
27
- const mockConfigInternal = {
28
- getTargetDir: () => rootDir,
29
- getApprovalMode: vi.fn(() => ApprovalMode.DEFAULT),
30
- setApprovalMode: vi.fn(),
31
- getGeminiClient: vi.fn(), // Initialize as a plain mock function
32
- getIdeClient: vi.fn(),
33
- getIdeMode: vi.fn(() => false),
34
- getIdeModeFeature: vi.fn(() => false),
35
- getWorkspaceContext: () => createMockWorkspaceContext(rootDir),
36
- getApiKey: () => 'test-key',
37
- getModel: () => 'test-model',
38
- getSandbox: () => false,
39
- getDebugMode: () => false,
40
- getQuestion: () => undefined,
41
- getFullContext: () => false,
42
- getToolDiscoveryCommand: () => undefined,
43
- getToolCallCommand: () => undefined,
44
- getMcpServerCommand: () => undefined,
45
- getMcpServers: () => undefined,
46
- getUserAgent: () => 'test-agent',
47
- getUserMemory: () => '',
48
- setUserMemory: vi.fn(),
49
- getLlxprtMdFileCount: () => 0,
50
- setLlxprtMdFileCount: vi.fn(),
51
- getConversationLoggingEnabled: () => false,
52
- getToolRegistry: () => ({
53
- registerTool: vi.fn(),
54
- discoverTools: vi.fn(),
55
- }),
56
- };
57
- const mockConfig = mockConfigInternal;
58
- // --- END MOCKS ---
59
- describe('WriteFileTool', () => {
60
- let tool;
61
- let tempDir;
62
- beforeEach(() => {
63
- vi.clearAllMocks();
64
- // Create a unique temporary directory for files created outside the root
65
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'write-file-test-external-'));
66
- // Ensure the rootDir for the tool exists
67
- if (!fs.existsSync(rootDir)) {
68
- fs.mkdirSync(rootDir, { recursive: true });
69
- }
70
- // Setup GeminiClient mock
71
- mockGeminiClientInstance = new (vi.mocked(GeminiClient))(mockConfig);
72
- vi.mocked(GeminiClient).mockImplementation(() => mockGeminiClientInstance);
73
- vi.mocked(ensureCorrectEdit).mockImplementation(mockEnsureCorrectEdit);
74
- vi.mocked(ensureCorrectFileContent).mockImplementation(mockEnsureCorrectFileContent);
75
- // Now that mockGeminiClientInstance is initialized, set the mock implementation for getGeminiClient
76
- mockConfigInternal.getGeminiClient.mockReturnValue(mockGeminiClientInstance);
77
- mockConfigInternal.getIdeClient.mockReturnValue({
78
- openDiff: vi.fn(),
79
- closeDiff: vi.fn(),
80
- getIdeContext: vi.fn(),
81
- subscribeToIdeContext: vi.fn(),
82
- isCodeTrackerEnabled: vi.fn(),
83
- getTrackedCode: vi.fn(),
84
- });
85
- tool = new WriteFileTool(mockConfig);
86
- // Reset mocks before each test
87
- mockConfigInternal.getApprovalMode.mockReturnValue(ApprovalMode.DEFAULT);
88
- mockConfigInternal.setApprovalMode.mockClear();
89
- mockEnsureCorrectEdit.mockReset();
90
- mockEnsureCorrectFileContent.mockReset();
91
- // Default mock implementations that return valid structures
92
- mockEnsureCorrectEdit.mockImplementation(async (filePath, _currentContent, params, _client, signal) => {
93
- if (signal?.aborted) {
94
- return Promise.reject(new Error('Aborted'));
95
- }
96
- return Promise.resolve({
97
- params: { ...params, new_string: params.new_string ?? '' },
98
- occurrences: 1,
99
- });
100
- });
101
- mockEnsureCorrectFileContent.mockImplementation(async (content, _client, signal) => {
102
- // Make AbortSignal optional
103
- if (signal?.aborted) {
104
- return Promise.reject(new Error('Aborted'));
105
- }
106
- return Promise.resolve(content ?? '');
107
- });
108
- });
109
- afterEach(() => {
110
- // Clean up the temporary directories
111
- if (fs.existsSync(tempDir)) {
112
- fs.rmSync(tempDir, { recursive: true, force: true });
113
- }
114
- if (fs.existsSync(rootDir)) {
115
- fs.rmSync(rootDir, { recursive: true, force: true });
116
- }
117
- vi.clearAllMocks();
118
- });
119
- describe('validateToolParams', () => {
120
- it('should return null for valid absolute path within root', () => {
121
- const params = {
122
- file_path: path.join(rootDir, 'test.txt'),
123
- content: 'hello',
124
- };
125
- expect(tool.validateToolParams(params)).toBeNull();
126
- });
127
- it('should return error for relative path', () => {
128
- const params = { file_path: 'test.txt', content: 'hello' };
129
- expect(tool.validateToolParams(params)).toMatch(/File path must be absolute/);
130
- });
131
- it('should return error for path outside root', () => {
132
- const outsidePath = path.resolve(tempDir, 'outside-root.txt');
133
- const params = {
134
- file_path: outsidePath,
135
- content: 'hello',
136
- };
137
- const error = tool.validateToolParams(params);
138
- expect(error).toContain('File path must be within one of the workspace directories');
139
- });
140
- it('should return error if path is a directory', () => {
141
- const dirAsFilePath = path.join(rootDir, 'a_directory');
142
- fs.mkdirSync(dirAsFilePath);
143
- const params = {
144
- file_path: dirAsFilePath,
145
- content: 'hello',
146
- };
147
- expect(tool.validateToolParams(params)).toMatch(`Path is a directory, not a file: ${dirAsFilePath}`);
148
- });
149
- });
150
- describe('_getCorrectedFileContent', () => {
151
- it('should call ensureCorrectFileContent for a new file', async () => {
152
- const filePath = path.join(rootDir, 'new_corrected_file.txt');
153
- const proposedContent = 'Proposed new content.';
154
- const correctedContent = 'Corrected new content.';
155
- const abortSignal = new AbortController().signal;
156
- // Ensure the mock is set for this specific test case if needed, or rely on beforeEach
157
- mockEnsureCorrectFileContent.mockResolvedValue(correctedContent);
158
- // @ts-expect-error _getCorrectedFileContent is private
159
- const result = await tool._getCorrectedFileContent(filePath, proposedContent, abortSignal);
160
- expect(mockEnsureCorrectFileContent).toHaveBeenCalledWith(proposedContent, mockGeminiClientInstance, abortSignal);
161
- expect(mockEnsureCorrectEdit).not.toHaveBeenCalled();
162
- expect(result.correctedContent).toBe(correctedContent);
163
- expect(result.originalContent).toBe('');
164
- expect(result.fileExists).toBe(false);
165
- expect(result.error).toBeUndefined();
166
- });
167
- it('should call ensureCorrectEdit for an existing file', async () => {
168
- const filePath = path.join(rootDir, 'existing_corrected_file.txt');
169
- const originalContent = 'Original existing content.';
170
- const proposedContent = 'Proposed replacement content.';
171
- const correctedProposedContent = 'Corrected replacement content.';
172
- const abortSignal = new AbortController().signal;
173
- fs.writeFileSync(filePath, originalContent, 'utf8');
174
- // Ensure this mock is active and returns the correct structure
175
- mockEnsureCorrectEdit.mockResolvedValue({
176
- params: {
177
- file_path: filePath,
178
- old_string: originalContent,
179
- new_string: correctedProposedContent,
180
- },
181
- occurrences: 1,
182
- });
183
- // @ts-expect-error _getCorrectedFileContent is private
184
- const result = await tool._getCorrectedFileContent(filePath, proposedContent, abortSignal);
185
- expect(mockEnsureCorrectEdit).toHaveBeenCalledWith(filePath, originalContent, {
186
- old_string: originalContent,
187
- new_string: proposedContent,
188
- file_path: filePath,
189
- }, mockGeminiClientInstance, abortSignal);
190
- expect(mockEnsureCorrectFileContent).not.toHaveBeenCalled();
191
- expect(result.correctedContent).toBe(correctedProposedContent);
192
- expect(result.originalContent).toBe(originalContent);
193
- expect(result.fileExists).toBe(true);
194
- expect(result.error).toBeUndefined();
195
- });
196
- it('should return error if reading an existing file fails (e.g. permissions)', async () => {
197
- const filePath = path.join(rootDir, 'unreadable_file.txt');
198
- const proposedContent = 'some content';
199
- const abortSignal = new AbortController().signal;
200
- fs.writeFileSync(filePath, 'content', { mode: 0o000 });
201
- const readError = new Error('Permission denied');
202
- const originalReadFileSync = fs.readFileSync;
203
- vi.spyOn(fs, 'readFileSync').mockImplementationOnce(() => {
204
- throw readError;
205
- });
206
- // @ts-expect-error _getCorrectedFileContent is private
207
- const result = await tool._getCorrectedFileContent(filePath, proposedContent, abortSignal);
208
- expect(fs.readFileSync).toHaveBeenCalledWith(filePath, 'utf8');
209
- expect(mockEnsureCorrectEdit).not.toHaveBeenCalled();
210
- expect(mockEnsureCorrectFileContent).not.toHaveBeenCalled();
211
- expect(result.correctedContent).toBe(proposedContent);
212
- expect(result.originalContent).toBe('');
213
- expect(result.fileExists).toBe(true);
214
- expect(result.error).toEqual({
215
- message: 'Permission denied',
216
- code: undefined,
217
- });
218
- vi.spyOn(fs, 'readFileSync').mockImplementation(originalReadFileSync);
219
- fs.chmodSync(filePath, 0o600);
220
- });
221
- });
222
- describe('shouldConfirmExecute', () => {
223
- const abortSignal = new AbortController().signal;
224
- it('should return false if params are invalid (relative path)', async () => {
225
- const params = { file_path: 'relative.txt', content: 'test' };
226
- const confirmation = await tool.shouldConfirmExecute(params, abortSignal);
227
- expect(confirmation).toBe(false);
228
- });
229
- it('should return false if params are invalid (outside root)', async () => {
230
- const outsidePath = path.resolve(tempDir, 'outside-root.txt');
231
- const params = { file_path: outsidePath, content: 'test' };
232
- const confirmation = await tool.shouldConfirmExecute(params, abortSignal);
233
- expect(confirmation).toBe(false);
234
- });
235
- it('should return false if _getCorrectedFileContent returns an error', async () => {
236
- const filePath = path.join(rootDir, 'confirm_error_file.txt');
237
- const params = { file_path: filePath, content: 'test content' };
238
- fs.writeFileSync(filePath, 'original', { mode: 0o000 });
239
- const readError = new Error('Simulated read error for confirmation');
240
- const originalReadFileSync = fs.readFileSync;
241
- vi.spyOn(fs, 'readFileSync').mockImplementationOnce(() => {
242
- throw readError;
243
- });
244
- const confirmation = await tool.shouldConfirmExecute(params, abortSignal);
245
- expect(confirmation).toBe(false);
246
- vi.spyOn(fs, 'readFileSync').mockImplementation(originalReadFileSync);
247
- fs.chmodSync(filePath, 0o600);
248
- });
249
- it('should request confirmation with diff for a new file (with corrected content)', async () => {
250
- const filePath = path.join(rootDir, 'confirm_new_file.txt');
251
- const proposedContent = 'Proposed new content for confirmation.';
252
- const correctedContent = 'Corrected new content for confirmation.';
253
- mockEnsureCorrectFileContent.mockResolvedValue(correctedContent); // Ensure this mock is active
254
- const params = { file_path: filePath, content: proposedContent };
255
- const confirmation = (await tool.shouldConfirmExecute(params, abortSignal));
256
- expect(mockEnsureCorrectFileContent).toHaveBeenCalledWith(proposedContent, mockGeminiClientInstance, abortSignal);
257
- expect(confirmation).toEqual(expect.objectContaining({
258
- title: `Confirm Write: ${path.basename(filePath)}`,
259
- fileName: 'confirm_new_file.txt',
260
- fileDiff: expect.stringContaining(correctedContent),
261
- }));
262
- expect(confirmation.fileDiff).toMatch(/--- confirm_new_file.txt\tCurrent/);
263
- expect(confirmation.fileDiff).toMatch(/\+\+\+ confirm_new_file.txt\tProposed/);
264
- });
265
- it('should request confirmation with diff for an existing file (with corrected content)', async () => {
266
- const filePath = path.join(rootDir, 'confirm_existing_file.txt');
267
- const originalContent = 'Original content for confirmation.';
268
- const proposedContent = 'Proposed replacement for confirmation.';
269
- const correctedProposedContent = 'Corrected replacement for confirmation.';
270
- fs.writeFileSync(filePath, originalContent, 'utf8');
271
- mockEnsureCorrectEdit.mockResolvedValue({
272
- params: {
273
- file_path: filePath,
274
- old_string: originalContent,
275
- new_string: correctedProposedContent,
276
- },
277
- occurrences: 1,
278
- });
279
- const params = { file_path: filePath, content: proposedContent };
280
- const confirmation = (await tool.shouldConfirmExecute(params, abortSignal));
281
- expect(mockEnsureCorrectEdit).toHaveBeenCalledWith(filePath, originalContent, {
282
- old_string: originalContent,
283
- new_string: proposedContent,
284
- file_path: filePath,
285
- }, mockGeminiClientInstance, abortSignal);
286
- expect(confirmation).toEqual(expect.objectContaining({
287
- title: `Confirm Write: ${path.basename(filePath)}`,
288
- fileName: 'confirm_existing_file.txt',
289
- fileDiff: expect.stringContaining(correctedProposedContent),
290
- }));
291
- expect(confirmation.fileDiff).toMatch(originalContent.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&'));
292
- });
293
- });
294
- describe('execute', () => {
295
- const abortSignal = new AbortController().signal;
296
- it('should return error if params are invalid (relative path)', async () => {
297
- const params = { file_path: 'relative.txt', content: 'test' };
298
- const result = await tool.execute(params, abortSignal);
299
- expect(result.llmContent).toContain('Could not write file due to invalid parameters');
300
- expect(result.returnDisplay).toContain('File path must be absolute');
301
- });
302
- it('should return error if params are invalid (path outside root)', async () => {
303
- const outsidePath = path.resolve(tempDir, 'outside-root.txt');
304
- const params = { file_path: outsidePath, content: 'test' };
305
- const result = await tool.execute(params, abortSignal);
306
- expect(result.llmContent).toContain('Could not write file due to invalid parameters');
307
- expect(result.returnDisplay).toContain('File path must be within one of the workspace directories');
308
- });
309
- it('should return error if _getCorrectedFileContent returns an error during execute', async () => {
310
- const filePath = path.join(rootDir, 'execute_error_file.txt');
311
- const params = { file_path: filePath, content: 'test content' };
312
- fs.writeFileSync(filePath, 'original', { mode: 0o000 });
313
- const readError = new Error('Simulated read error for execute');
314
- const originalReadFileSync = fs.readFileSync;
315
- vi.spyOn(fs, 'readFileSync').mockImplementationOnce(() => {
316
- throw readError;
317
- });
318
- const result = await tool.execute(params, abortSignal);
319
- expect(result.llmContent).toMatch(/Error checking existing file/);
320
- expect(result.returnDisplay).toMatch(/Error checking existing file: Simulated read error for execute/);
321
- vi.spyOn(fs, 'readFileSync').mockImplementation(originalReadFileSync);
322
- fs.chmodSync(filePath, 0o600);
323
- });
324
- it('should write a new file with corrected content and return diff', async () => {
325
- const filePath = path.join(rootDir, 'execute_new_corrected_file.txt');
326
- const proposedContent = 'Proposed new content for execute.';
327
- const correctedContent = 'Corrected new content for execute.';
328
- mockEnsureCorrectFileContent.mockResolvedValue(correctedContent);
329
- const params = { file_path: filePath, content: proposedContent };
330
- const confirmDetails = await tool.shouldConfirmExecute(params, abortSignal);
331
- if (typeof confirmDetails === 'object' &&
332
- 'onConfirm' in confirmDetails &&
333
- confirmDetails.onConfirm) {
334
- await confirmDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
335
- }
336
- const result = await tool.execute(params, abortSignal);
337
- expect(mockEnsureCorrectFileContent).toHaveBeenCalledWith(proposedContent, mockGeminiClientInstance, abortSignal);
338
- expect(result.llmContent).toMatch(/Successfully created and wrote to new file/);
339
- expect(fs.existsSync(filePath)).toBe(true);
340
- expect(fs.readFileSync(filePath, 'utf8')).toBe(correctedContent);
341
- const display = result.returnDisplay;
342
- expect(display.fileName).toBe('execute_new_corrected_file.txt');
343
- expect(display.fileDiff).toMatch(/--- execute_new_corrected_file.txt\tOriginal/);
344
- expect(display.fileDiff).toMatch(/\+\+\+ execute_new_corrected_file.txt\tWritten/);
345
- expect(display.fileDiff).toMatch(correctedContent.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&'));
346
- });
347
- it('should overwrite an existing file with corrected content and return diff', async () => {
348
- const filePath = path.join(rootDir, 'execute_existing_corrected_file.txt');
349
- const initialContent = 'Initial content for execute.';
350
- const proposedContent = 'Proposed overwrite for execute.';
351
- const correctedProposedContent = 'Corrected overwrite for execute.';
352
- fs.writeFileSync(filePath, initialContent, 'utf8');
353
- mockEnsureCorrectEdit.mockResolvedValue({
354
- params: {
355
- file_path: filePath,
356
- old_string: initialContent,
357
- new_string: correctedProposedContent,
358
- },
359
- occurrences: 1,
360
- });
361
- const params = { file_path: filePath, content: proposedContent };
362
- const confirmDetails = await tool.shouldConfirmExecute(params, abortSignal);
363
- if (typeof confirmDetails === 'object' &&
364
- 'onConfirm' in confirmDetails &&
365
- confirmDetails.onConfirm) {
366
- await confirmDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
367
- }
368
- const result = await tool.execute(params, abortSignal);
369
- expect(mockEnsureCorrectEdit).toHaveBeenCalledWith(filePath, initialContent, {
370
- old_string: initialContent,
371
- new_string: proposedContent,
372
- file_path: filePath,
373
- }, mockGeminiClientInstance, abortSignal);
374
- expect(result.llmContent).toMatch(/Successfully overwrote file/);
375
- expect(fs.readFileSync(filePath, 'utf8')).toBe(correctedProposedContent);
376
- const display = result.returnDisplay;
377
- expect(display.fileName).toBe('execute_existing_corrected_file.txt');
378
- expect(display.fileDiff).toMatch(initialContent.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&'));
379
- expect(display.fileDiff).toMatch(correctedProposedContent.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&'));
380
- });
381
- it('should create directory if it does not exist', async () => {
382
- const dirPath = path.join(rootDir, 'new_dir_for_write');
383
- const filePath = path.join(dirPath, 'file_in_new_dir.txt');
384
- const content = 'Content in new directory';
385
- mockEnsureCorrectFileContent.mockResolvedValue(content); // Ensure this mock is active
386
- const params = { file_path: filePath, content };
387
- // Simulate confirmation if your logic requires it before execute, or remove if not needed for this path
388
- const confirmDetails = await tool.shouldConfirmExecute(params, abortSignal);
389
- if (typeof confirmDetails === 'object' &&
390
- 'onConfirm' in confirmDetails &&
391
- confirmDetails.onConfirm) {
392
- await confirmDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
393
- }
394
- await tool.execute(params, abortSignal);
395
- expect(fs.existsSync(dirPath)).toBe(true);
396
- expect(fs.statSync(dirPath).isDirectory()).toBe(true);
397
- expect(fs.existsSync(filePath)).toBe(true);
398
- expect(fs.readFileSync(filePath, 'utf8')).toBe(content);
399
- });
400
- it('should include modification message when proposed content is modified', async () => {
401
- const filePath = path.join(rootDir, 'new_file_modified.txt');
402
- const content = 'New file content modified by user';
403
- mockEnsureCorrectFileContent.mockResolvedValue(content);
404
- const params = {
405
- file_path: filePath,
406
- content,
407
- modified_by_user: true,
408
- };
409
- const result = await tool.execute(params, abortSignal);
410
- expect(result.llmContent).toMatch(/User modified the `content`/);
411
- });
412
- it('should not include modification message when proposed content is not modified', async () => {
413
- const filePath = path.join(rootDir, 'new_file_unmodified.txt');
414
- const content = 'New file content not modified';
415
- mockEnsureCorrectFileContent.mockResolvedValue(content);
416
- const params = {
417
- file_path: filePath,
418
- content,
419
- modified_by_user: false,
420
- };
421
- const result = await tool.execute(params, abortSignal);
422
- expect(result.llmContent).not.toMatch(/User modified the `content`/);
423
- });
424
- it('should not include modification message when modified_by_user is not provided', async () => {
425
- const filePath = path.join(rootDir, 'new_file_unmodified.txt');
426
- const content = 'New file content not modified';
427
- mockEnsureCorrectFileContent.mockResolvedValue(content);
428
- const params = {
429
- file_path: filePath,
430
- content,
431
- };
432
- const result = await tool.execute(params, abortSignal);
433
- expect(result.llmContent).not.toMatch(/User modified the `content`/);
434
- });
435
- });
436
- describe('workspace boundary validation', () => {
437
- it('should validate paths are within workspace root', () => {
438
- const params = {
439
- file_path: path.join(rootDir, 'file.txt'),
440
- content: 'test content',
441
- };
442
- expect(tool.validateToolParams(params)).toBeNull();
443
- });
444
- it('should reject paths outside workspace root', () => {
445
- const params = {
446
- file_path: '/etc/passwd',
447
- content: 'malicious',
448
- };
449
- const error = tool.validateToolParams(params);
450
- expect(error).toContain('File path must be within one of the workspace directories');
451
- expect(error).toContain(rootDir);
452
- });
453
- it('should provide clear error message with workspace directories', () => {
454
- const outsidePath = path.join(tempDir, 'outside-root.txt');
455
- const params = {
456
- file_path: outsidePath,
457
- content: 'test',
458
- };
459
- const error = tool.validateToolParams(params);
460
- expect(error).toContain('File path must be within one of the workspace directories');
461
- expect(error).toContain(rootDir);
462
- });
463
- });
464
- });
465
- //# sourceMappingURL=write-file.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-file.test.js","sourceRoot":"","sources":["../../../src/tools/write-file.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 {};