@vybestack/llxprt-code-core 0.1.12 → 0.1.13-hotfix1

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 (327) hide show
  1. package/dist/src/adapters/IStreamAdapter.d.ts +18 -0
  2. package/dist/src/adapters/IStreamAdapter.js +7 -0
  3. package/dist/src/adapters/IStreamAdapter.js.map +1 -0
  4. package/dist/src/code_assist/oauth2.d.ts +1 -1
  5. package/dist/src/code_assist/oauth2.js +51 -29
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +36 -7
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/code_assist/server.test.js +10 -2
  10. package/dist/src/code_assist/server.test.js.map +1 -1
  11. package/dist/src/config/config.d.ts +28 -5
  12. package/dist/src/config/config.js +29 -4
  13. package/dist/src/config/config.js.map +1 -1
  14. package/dist/src/config/config.test.js +2 -3
  15. package/dist/src/config/config.test.js.map +1 -1
  16. package/dist/src/core/client.d.ts +4 -2
  17. package/dist/src/core/client.js +68 -7
  18. package/dist/src/core/client.js.map +1 -1
  19. package/dist/src/core/client.test.js +8 -0
  20. package/dist/src/core/client.test.js.map +1 -1
  21. package/dist/src/core/contentGenerator.d.ts +3 -2
  22. package/dist/src/core/contentGenerator.js +6 -8
  23. package/dist/src/core/contentGenerator.js.map +1 -1
  24. package/dist/src/core/contentGenerator.test.js +12 -5
  25. package/dist/src/core/contentGenerator.test.js.map +1 -1
  26. package/dist/src/core/coreToolScheduler.test.js +4 -2
  27. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  28. package/dist/src/core/geminiChat.js +50 -3
  29. package/dist/src/core/geminiChat.js.map +1 -1
  30. package/dist/src/core/modelCheck.d.ts +1 -1
  31. package/dist/src/core/modelCheck.js +10 -3
  32. package/dist/src/core/modelCheck.js.map +1 -1
  33. package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -0
  34. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  35. package/dist/src/core/prompts.d.ts +1 -1
  36. package/dist/src/core/prompts.js +14 -2
  37. package/dist/src/core/prompts.js.map +1 -1
  38. package/dist/src/core/turn.js +6 -0
  39. package/dist/src/core/turn.js.map +1 -1
  40. package/dist/src/index.d.ts +29 -1
  41. package/dist/src/index.js +33 -0
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/mcp/oauth-provider.d.ts +142 -0
  44. package/dist/src/mcp/oauth-provider.js +446 -0
  45. package/dist/src/mcp/oauth-provider.js.map +1 -0
  46. package/dist/src/mcp/oauth-provider.test.js +520 -0
  47. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  48. package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
  49. package/dist/src/mcp/oauth-token-storage.js +149 -0
  50. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  51. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  52. package/dist/src/mcp/oauth-token-storage.test.js +205 -0
  53. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  54. package/dist/src/mcp/oauth-utils.d.ts +109 -0
  55. package/dist/src/mcp/oauth-utils.js +183 -0
  56. package/dist/src/mcp/oauth-utils.js.map +1 -0
  57. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  58. package/dist/src/mcp/oauth-utils.test.js +144 -0
  59. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  60. package/dist/src/parsers/TextToolCallParser.d.ts +35 -0
  61. package/dist/src/parsers/TextToolCallParser.js +248 -0
  62. package/dist/src/parsers/TextToolCallParser.js.map +1 -0
  63. package/dist/src/parsers/TextToolCallParser.test.d.ts +1 -0
  64. package/dist/src/parsers/TextToolCallParser.test.js +225 -0
  65. package/dist/src/parsers/TextToolCallParser.test.js.map +1 -0
  66. package/dist/src/providers/ContentGeneratorRole.d.ts +14 -0
  67. package/dist/src/providers/ContentGeneratorRole.js +16 -0
  68. package/dist/src/providers/ContentGeneratorRole.js.map +1 -0
  69. package/dist/src/providers/IMessage.d.ts +38 -0
  70. package/dist/src/providers/IMessage.js +17 -0
  71. package/dist/src/providers/IMessage.js.map +1 -0
  72. package/dist/src/providers/IModel.d.ts +23 -0
  73. package/dist/src/providers/IModel.js +17 -0
  74. package/dist/src/providers/IModel.js.map +1 -0
  75. package/dist/src/providers/IProvider.d.ts +36 -0
  76. package/dist/src/providers/IProvider.js +17 -0
  77. package/dist/src/providers/IProvider.js.map +1 -0
  78. package/dist/src/providers/IProviderConfig.d.ts +31 -0
  79. package/dist/src/providers/IProviderConfig.js +7 -0
  80. package/dist/src/providers/IProviderConfig.js.map +1 -0
  81. package/dist/src/providers/IProviderManager.d.ts +53 -0
  82. package/dist/src/providers/IProviderManager.js +7 -0
  83. package/dist/src/providers/IProviderManager.js.map +1 -0
  84. package/dist/src/providers/ITool.d.ts +23 -0
  85. package/dist/src/providers/ITool.js +17 -0
  86. package/dist/src/providers/ITool.js.map +1 -0
  87. package/dist/src/providers/ProviderContentGenerator.d.ts +1 -1
  88. package/dist/src/providers/ProviderManager.d.ts +24 -0
  89. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +6 -0
  90. package/dist/src/providers/ProviderManager.gemini-switch.test.js +57 -0
  91. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +1 -0
  92. package/dist/src/providers/ProviderManager.js +116 -0
  93. package/dist/src/providers/ProviderManager.js.map +1 -0
  94. package/dist/src/providers/ProviderManager.test.d.ts +6 -0
  95. package/dist/src/providers/ProviderManager.test.js +284 -0
  96. package/dist/src/providers/ProviderManager.test.js.map +1 -0
  97. package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +2 -1
  98. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +15 -2
  99. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -1
  100. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +20 -0
  101. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -1
  102. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +57 -0
  103. package/dist/src/providers/anthropic/AnthropicProvider.js +490 -0
  104. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -0
  105. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +1 -0
  106. package/dist/src/providers/anthropic/AnthropicProvider.test.js +486 -0
  107. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -0
  108. package/dist/src/providers/errors.d.ts +13 -0
  109. package/dist/src/providers/errors.js +19 -0
  110. package/dist/src/providers/errors.js.map +1 -0
  111. package/dist/src/providers/gemini/GeminiProvider.d.ts +97 -0
  112. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +6 -0
  113. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +90 -0
  114. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +1 -0
  115. package/dist/src/providers/gemini/GeminiProvider.js +937 -0
  116. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -0
  117. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +6 -0
  118. package/dist/src/providers/gemini/GeminiProvider.test.js +136 -0
  119. package/dist/src/providers/gemini/GeminiProvider.test.js.map +1 -0
  120. package/dist/src/providers/integration/TEST_INSTRUCTIONS.md +197 -0
  121. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +6 -0
  122. package/dist/src/providers/integration/multi-provider.integration.test.js +292 -0
  123. package/dist/src/providers/integration/multi-provider.integration.test.js.map +1 -0
  124. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +1 -0
  125. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +97 -0
  126. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +1 -0
  127. package/dist/src/providers/openai/ConversationCache.d.ts +20 -0
  128. package/dist/src/providers/openai/ConversationCache.js +109 -0
  129. package/dist/src/providers/openai/ConversationCache.js.map +1 -0
  130. package/dist/src/providers/openai/ConversationCache.test.d.ts +1 -0
  131. package/dist/src/providers/openai/ConversationCache.test.js +113 -0
  132. package/dist/src/providers/openai/ConversationCache.test.js.map +1 -0
  133. package/dist/src/providers/openai/IChatGenerateParams.d.ts +11 -0
  134. package/dist/src/providers/openai/IChatGenerateParams.js +2 -0
  135. package/dist/src/providers/openai/IChatGenerateParams.js.map +1 -0
  136. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +1 -0
  137. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +189 -0
  138. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +1 -0
  139. package/dist/src/providers/openai/OpenAIProvider.d.ts +80 -0
  140. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +6 -0
  141. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +125 -0
  142. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +1 -0
  143. package/dist/src/providers/openai/OpenAIProvider.js +523 -0
  144. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -0
  145. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +1 -0
  146. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +326 -0
  147. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -0
  148. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +1 -0
  149. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +213 -0
  150. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +1 -0
  151. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +1 -0
  152. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +58 -0
  153. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -0
  154. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +6 -0
  155. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +105 -0
  156. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +1 -0
  157. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +1 -0
  158. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +256 -0
  159. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +1 -0
  160. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +16 -0
  161. package/dist/src/providers/openai/OpenAIProvider.test.js +214 -0
  162. package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -0
  163. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +2 -0
  164. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +14 -0
  165. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -0
  166. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +1 -0
  167. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +210 -0
  168. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +1 -0
  169. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +1 -0
  170. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +65 -0
  171. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +1 -0
  172. package/dist/src/providers/openai/buildResponsesRequest.d.ts +73 -0
  173. package/dist/src/providers/openai/buildResponsesRequest.js +165 -0
  174. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -0
  175. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +1 -0
  176. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +129 -0
  177. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +1 -0
  178. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +1 -0
  179. package/dist/src/providers/openai/buildResponsesRequest.test.js +406 -0
  180. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +1 -0
  181. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +1 -0
  182. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +50 -0
  183. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +1 -0
  184. package/dist/src/providers/openai/docs/accessing-provider-info.md +172 -0
  185. package/dist/src/providers/openai/docs/params-mapping.md +91 -0
  186. package/dist/src/providers/openai/docs/responses-api-tool-calls.md +96 -0
  187. package/dist/src/providers/openai/estimateRemoteTokens.d.ts +26 -0
  188. package/dist/src/providers/openai/estimateRemoteTokens.js +75 -0
  189. package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -0
  190. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +1 -0
  191. package/dist/src/providers/openai/estimateRemoteTokens.test.js +125 -0
  192. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +1 -0
  193. package/dist/src/providers/openai/getOpenAIProviderInfo.d.ts +46 -0
  194. package/dist/src/providers/openai/getOpenAIProviderInfo.js +75 -0
  195. package/dist/src/providers/openai/getOpenAIProviderInfo.js.map +1 -0
  196. package/dist/src/providers/openai/parseResponsesStream.d.ts +3 -0
  197. package/dist/src/providers/openai/parseResponsesStream.js +462 -0
  198. package/dist/src/providers/openai/parseResponsesStream.js.map +1 -0
  199. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +1 -0
  200. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +192 -0
  201. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +1 -0
  202. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +1 -0
  203. package/dist/src/providers/openai/parseResponsesStream.test.js +151 -0
  204. package/dist/src/providers/openai/parseResponsesStream.test.js.map +1 -0
  205. package/dist/src/providers/tokenizers/AnthropicTokenizer.d.ts +19 -0
  206. package/dist/src/providers/tokenizers/AnthropicTokenizer.js +37 -0
  207. package/dist/src/providers/tokenizers/AnthropicTokenizer.js.map +1 -0
  208. package/dist/src/providers/tokenizers/ITokenizer.d.ts +18 -0
  209. package/dist/src/providers/tokenizers/ITokenizer.js +17 -0
  210. package/dist/src/providers/tokenizers/ITokenizer.js.map +1 -0
  211. package/dist/src/providers/tokenizers/OpenAITokenizer.d.ts +24 -0
  212. package/dist/src/providers/tokenizers/OpenAITokenizer.js +56 -0
  213. package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -0
  214. package/dist/src/providers/types/IProviderConfig.d.ts +102 -0
  215. package/dist/src/providers/types/IProviderConfig.js +17 -0
  216. package/dist/src/providers/types/IProviderConfig.js.map +1 -0
  217. package/dist/src/providers/types.d.ts +4 -69
  218. package/dist/src/services/ideContext.d.ts +2 -0
  219. package/dist/src/services/ideContext.js +8 -0
  220. package/dist/src/services/ideContext.js.map +1 -1
  221. package/dist/src/services/ideContext.test.js +10 -0
  222. package/dist/src/services/ideContext.test.js.map +1 -1
  223. package/dist/src/services/loopDetectionService.d.ts +17 -1
  224. package/dist/src/services/loopDetectionService.js +117 -2
  225. package/dist/src/services/loopDetectionService.js.map +1 -1
  226. package/dist/src/services/loopDetectionService.test.js +109 -2
  227. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  228. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -0
  229. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +40 -2
  230. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  231. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -0
  232. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
  233. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  234. package/dist/src/telemetry/sdk.js +0 -2
  235. package/dist/src/telemetry/sdk.js.map +1 -1
  236. package/dist/src/telemetry/types.d.ts +2 -1
  237. package/dist/src/telemetry/types.js +1 -0
  238. package/dist/src/telemetry/types.js.map +1 -1
  239. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  240. package/dist/src/telemetry/uiTelemetry.js +7 -0
  241. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  242. package/dist/src/telemetry/uiTelemetry.test.js +92 -0
  243. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  244. package/dist/src/tools/IToolFormatter.d.ts +40 -0
  245. package/dist/src/tools/IToolFormatter.js +17 -0
  246. package/dist/src/tools/IToolFormatter.js.map +1 -0
  247. package/dist/src/tools/ToolFormatter.d.ts +45 -0
  248. package/dist/src/tools/ToolFormatter.js +216 -0
  249. package/dist/src/tools/ToolFormatter.js.map +1 -0
  250. package/dist/src/tools/ToolFormatter.test.d.ts +16 -0
  251. package/dist/src/tools/ToolFormatter.test.js +349 -0
  252. package/dist/src/tools/ToolFormatter.test.js.map +1 -0
  253. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +1 -0
  254. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +241 -0
  255. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +1 -0
  256. package/dist/src/tools/edit.d.ts +7 -1
  257. package/dist/src/tools/edit.js +19 -7
  258. package/dist/src/tools/edit.js.map +1 -1
  259. package/dist/src/tools/glob.js +2 -2
  260. package/dist/src/tools/glob.js.map +1 -1
  261. package/dist/src/tools/grep.js +2 -2
  262. package/dist/src/tools/grep.js.map +1 -1
  263. package/dist/src/tools/ls.js +2 -2
  264. package/dist/src/tools/ls.js.map +1 -1
  265. package/dist/src/tools/mcp-client.d.ts +0 -2
  266. package/dist/src/tools/mcp-client.js +8 -20
  267. package/dist/src/tools/mcp-client.js.map +1 -1
  268. package/dist/src/tools/mcp-client.test.js +1 -72
  269. package/dist/src/tools/mcp-client.test.js.map +1 -1
  270. package/dist/src/tools/mcp-tool.d.ts +11 -5
  271. package/dist/src/tools/mcp-tool.js +33 -9
  272. package/dist/src/tools/mcp-tool.js.map +1 -1
  273. package/dist/src/tools/mcp-tool.test.js +40 -24
  274. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  275. package/dist/src/tools/memoryTool.js +2 -2
  276. package/dist/src/tools/memoryTool.js.map +1 -1
  277. package/dist/src/tools/read-file.d.ts +2 -1
  278. package/dist/src/tools/read-file.js +5 -2
  279. package/dist/src/tools/read-file.js.map +1 -1
  280. package/dist/src/tools/read-many-files.js +2 -2
  281. package/dist/src/tools/read-many-files.js.map +1 -1
  282. package/dist/src/tools/shell.js +2 -2
  283. package/dist/src/tools/shell.js.map +1 -1
  284. package/dist/src/tools/todo-read.js +2 -2
  285. package/dist/src/tools/todo-read.js.map +1 -1
  286. package/dist/src/tools/todo-write.js +2 -2
  287. package/dist/src/tools/todo-write.js.map +1 -1
  288. package/dist/src/tools/tool-registry.d.ts +0 -1
  289. package/dist/src/tools/tool-registry.js +11 -8
  290. package/dist/src/tools/tool-registry.js.map +1 -1
  291. package/dist/src/tools/tool-registry.test.js +36 -10
  292. package/dist/src/tools/tool-registry.test.js.map +1 -1
  293. package/dist/src/tools/tools.d.ts +37 -2
  294. package/dist/src/tools/tools.js +25 -2
  295. package/dist/src/tools/tools.js.map +1 -1
  296. package/dist/src/tools/web-fetch.integration.test.d.ts +6 -0
  297. package/dist/src/tools/web-fetch.integration.test.js +532 -0
  298. package/dist/src/tools/web-fetch.integration.test.js.map +1 -0
  299. package/dist/src/tools/web-fetch.js +57 -50
  300. package/dist/src/tools/web-fetch.js.map +1 -1
  301. package/dist/src/tools/web-search.js +34 -6
  302. package/dist/src/tools/web-search.js.map +1 -1
  303. package/dist/src/tools/web-search.test.d.ts +6 -0
  304. package/dist/src/tools/web-search.test.js +229 -0
  305. package/dist/src/tools/web-search.test.js.map +1 -0
  306. package/dist/src/tools/write-file.js +12 -5
  307. package/dist/src/tools/write-file.js.map +1 -1
  308. package/dist/src/utils/browser.d.ts +13 -0
  309. package/dist/src/utils/browser.js +49 -0
  310. package/dist/src/utils/browser.js.map +1 -0
  311. package/dist/src/utils/errors.js +4 -4
  312. package/dist/src/utils/errors.js.map +1 -1
  313. package/dist/src/utils/memoryDiscovery.js +5 -1
  314. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  315. package/dist/src/utils/quotaErrorDetection.js +0 -2
  316. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  317. package/dist/src/utils/retry.d.ts +6 -0
  318. package/dist/src/utils/retry.js +1 -1
  319. package/dist/src/utils/retry.js.map +1 -1
  320. package/dist/src/utils/user_account.js +6 -1
  321. package/dist/src/utils/user_account.js.map +1 -1
  322. package/dist/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +6 -3
  324. package/dist/src/tools/web-fetch.test.js +0 -70
  325. package/dist/src/tools/web-fetch.test.js.map +0 -1
  326. package/dist/vybestack-llxprt-code-core-0.1.12.tgz +0 -0
  327. /package/dist/src/{tools/web-fetch.test.d.ts → mcp/oauth-provider.test.d.ts} +0 -0
@@ -4,13 +4,14 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { SchemaValidator } from '../utils/schemaValidator.js';
7
- import { BaseTool, ToolConfirmationOutcome, } from './tools.js';
7
+ import { BaseTool, ToolConfirmationOutcome, Icon, } from './tools.js';
8
8
  import { Type } from '@google/genai';
9
9
  import { getErrorMessage } from '../utils/errors.js';
10
10
  import { ApprovalMode } from '../config/config.js';
11
- import { getResponseText } from '../utils/generateContentResponseUtilities.js';
12
11
  import { fetchWithTimeout, isPrivateIp } from '../utils/fetch.js';
13
12
  import { convert } from 'html-to-text';
13
+ import { ProxyAgent, setGlobalDispatcher } from 'undici';
14
+ import { getResponseText } from '../utils/generateContentResponseUtilities.js';
14
15
  const URL_FETCH_TIMEOUT_MS = 10000;
15
16
  const MAX_CONTENT_LENGTH = 100000;
16
17
  // Helper function to extract URLs from a string
@@ -25,7 +26,7 @@ export class WebFetchTool extends BaseTool {
25
26
  config;
26
27
  static Name = 'web_fetch';
27
28
  constructor(config) {
28
- super(WebFetchTool.Name, 'WebFetch', "Processes content from URL(s), including local and private network addresses (e.g., localhost), embedded in a prompt. Include up to 20 URLs and instructions (e.g., summarize, extract specific data) directly in the 'prompt' parameter.", {
29
+ super(WebFetchTool.Name, 'WebFetch', "Processes content from URL(s), including local and private network addresses (e.g., localhost), embedded in a prompt. Include up to 20 URLs and instructions (e.g., summarize, extract specific data) directly in the 'prompt' parameter.", Icon.Globe, {
29
30
  properties: {
30
31
  prompt: {
31
32
  description: 'A comprehensive prompt that includes the URL(s) (up to 20) to fetch and specific instructions on how to process their content (e.g., "Summarize https://example.com/article and extract key points from https://another.com/data"). Must contain as least one URL starting with http:// or https://.',
@@ -36,8 +37,12 @@ export class WebFetchTool extends BaseTool {
36
37
  type: Type.OBJECT,
37
38
  });
38
39
  this.config = config;
40
+ const proxy = config.getProxy();
41
+ if (proxy) {
42
+ setGlobalDispatcher(new ProxyAgent(proxy));
43
+ }
39
44
  }
40
- async executeFallback(params, signal) {
45
+ async executeFallback(params, _signal) {
41
46
  const urls = extractUrls(params.prompt);
42
47
  if (urls.length === 0) {
43
48
  return {
@@ -66,19 +71,10 @@ export class WebFetchTool extends BaseTool {
66
71
  { selector: 'img', format: 'skip' },
67
72
  ],
68
73
  }).substring(0, MAX_CONTENT_LENGTH);
69
- const geminiClient = this.config.getGeminiClient();
70
- const fallbackPrompt = `The user requested the following: "${params.prompt}".
71
-
72
- I was unable to access the URL directly. Instead, I have fetched the raw content of the page. Please use the following content to answer the user's request. Do not attempt to access the URL again.
73
-
74
- ---
75
- ${textContent}
76
- ---`;
77
- const result = await geminiClient.generateContent([{ role: 'user', parts: [{ text: fallbackPrompt }] }], {}, signal);
78
- const resultText = getResponseText(result) || '';
74
+ // Since we can't use Gemini client directly, return the raw content with an error message
79
75
  return {
80
- llmContent: resultText,
81
- returnDisplay: `Content for ${url} processed using fallback fetch.`,
76
+ llmContent: `Private/local URLs cannot be processed with AI. Raw content provided below.\n\nContent from ${url}:\n\n${textContent.substring(0, 5000)}${textContent.length > 5000 ? '...[truncated]' : ''}`,
77
+ returnDisplay: `Private/local URLs cannot be processed with AI. Raw content provided below.`,
82
78
  };
83
79
  }
84
80
  catch (e) {
@@ -158,42 +154,54 @@ ${textContent}
158
154
  if (isPrivate) {
159
155
  return this.executeFallback(params, signal);
160
156
  }
161
- const geminiClient = this.config.getGeminiClient();
157
+ // Get the content generator config to access the provider manager
158
+ const contentGenConfig = this.config.getContentGeneratorConfig();
159
+ // Get the serverToolsProvider from the provider manager
160
+ if (!contentGenConfig?.providerManager) {
161
+ return {
162
+ llmContent: `Web fetch requires a provider. Please use --provider gemini with authentication.`,
163
+ returnDisplay: 'Web fetch requires a provider.',
164
+ };
165
+ }
166
+ // Use serverToolsProvider for web fetch
167
+ const serverToolsProvider = contentGenConfig.providerManager.getServerToolsProvider();
168
+ if (!serverToolsProvider) {
169
+ return {
170
+ llmContent: `Web fetch requires Gemini provider to be configured. Please ensure Gemini is available with authentication.`,
171
+ returnDisplay: 'Web fetch requires Gemini provider.',
172
+ };
173
+ }
174
+ // Check if the provider supports web_fetch
175
+ const serverTools = serverToolsProvider.getServerTools();
176
+ if (!serverTools.includes('web_fetch')) {
177
+ return {
178
+ llmContent: `Web fetch is not available. The server tools provider does not support web fetch.`,
179
+ returnDisplay: `Web fetch not available.`,
180
+ };
181
+ }
162
182
  try {
163
- const response = await geminiClient.generateContent([{ role: 'user', parts: [{ text: userPrompt }] }], { tools: [{ urlContext: {} }] }, signal);
164
- console.debug(`[WebFetchTool] Full response for prompt "${userPrompt.substring(0, 50)}...":`, JSON.stringify(response, null, 2));
165
- let responseText = getResponseText(response) || '';
166
- const urlContextMeta = response.candidates?.[0]?.urlContextMetadata;
167
- const groundingMetadata = response.candidates?.[0]?.groundingMetadata;
183
+ // Invoke the server tool
184
+ const response = await serverToolsProvider.invokeServerTool('web_fetch', { prompt: params.prompt }, { signal });
185
+ // Extract text using utility function
186
+ const responseText = getResponseText(response);
187
+ // Simple check - if no text, return error
188
+ if (!responseText || !responseText.trim()) {
189
+ return {
190
+ llmContent: `No content found for the provided URL(s).`,
191
+ returnDisplay: 'No content found.',
192
+ };
193
+ }
194
+ // Process grounding metadata
195
+ const geminiResponse = response;
196
+ const groundingMetadata = geminiResponse.candidates?.[0]?.groundingMetadata;
168
197
  const sources = groundingMetadata?.groundingChunks;
169
198
  const groundingSupports = groundingMetadata?.groundingSupports;
170
- // Error Handling
171
- let processingError = false;
172
- if (urlContextMeta?.urlMetadata &&
173
- urlContextMeta.urlMetadata.length > 0) {
174
- const allStatuses = urlContextMeta.urlMetadata.map((m) => m.urlRetrievalStatus);
175
- if (allStatuses.every((s) => s !== 'URL_RETRIEVAL_STATUS_SUCCESS')) {
176
- processingError = true;
177
- }
178
- }
179
- else if (!responseText.trim() && !sources?.length) {
180
- // No URL metadata and no content/sources
181
- processingError = true;
182
- }
183
- if (!processingError &&
184
- !responseText.trim() &&
185
- (!sources || sources.length === 0)) {
186
- // Successfully retrieved some URL (or no specific error from urlContextMeta), but no usable text or grounding data.
187
- processingError = true;
188
- }
189
- if (processingError) {
190
- return this.executeFallback(params, signal);
191
- }
199
+ let modifiedResponseText = responseText;
192
200
  const sourceListFormatted = [];
193
201
  if (sources && sources.length > 0) {
194
202
  sources.forEach((source, index) => {
195
203
  const title = source.web?.title || 'Untitled';
196
- const uri = source.web?.uri || 'Unknown URI'; // Fallback if URI is missing
204
+ const uri = source.web?.uri || 'Unknown URI';
197
205
  sourceListFormatted.push(`[${index + 1}] ${title} (${uri})`);
198
206
  });
199
207
  if (groundingSupports && groundingSupports.length > 0) {
@@ -210,21 +218,20 @@ ${textContent}
210
218
  }
211
219
  });
212
220
  insertions.sort((a, b) => b.index - a.index);
213
- const responseChars = responseText.split('');
221
+ const responseChars = modifiedResponseText.split('');
214
222
  insertions.forEach((insertion) => {
215
223
  responseChars.splice(insertion.index, 0, insertion.marker);
216
224
  });
217
- responseText = responseChars.join('');
225
+ modifiedResponseText = responseChars.join('');
218
226
  }
219
227
  if (sourceListFormatted.length > 0) {
220
- responseText += `
228
+ modifiedResponseText += `
221
229
 
222
230
  Sources:
223
231
  ${sourceListFormatted.join('\n')}`;
224
232
  }
225
233
  }
226
- const llmContent = responseText;
227
- console.debug(`[WebFetchTool] Formatted tool response for prompt "${userPrompt}:\n\n":`, llmContent);
234
+ const llmContent = modifiedResponseText;
228
235
  return {
229
236
  llmContent,
230
237
  returnDisplay: `Content processed from prompt.`,
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { BaseTool } from './tools.js';
6
+ import { BaseTool, Icon } from './tools.js';
7
7
  import { Type } from '@google/genai';
8
8
  import { SchemaValidator } from '../utils/schemaValidator.js';
9
9
  import { getErrorMessage } from '../utils/errors.js';
@@ -15,7 +15,7 @@ export class WebSearchTool extends BaseTool {
15
15
  config;
16
16
  static Name = 'google_web_search';
17
17
  constructor(config) {
18
- super(WebSearchTool.Name, 'GoogleSearch', 'Performs a web search using Google Search (via the Gemini API) and returns the results. This tool is useful for finding information on the internet based on a query.', {
18
+ super(WebSearchTool.Name, 'GoogleSearch', 'Performs a web search using Google Search (via the Gemini API) and returns the results. This tool is useful for finding information on the internet based on a query.', Icon.Globe, {
19
19
  type: Type.OBJECT,
20
20
  properties: {
21
21
  query: {
@@ -53,11 +53,39 @@ export class WebSearchTool extends BaseTool {
53
53
  returnDisplay: validationError,
54
54
  };
55
55
  }
56
- const geminiClient = this.config.getGeminiClient();
57
56
  try {
58
- const response = await geminiClient.generateContent([{ role: 'user', parts: [{ text: params.query }] }], { tools: [{ googleSearch: {} }] }, signal);
59
- const responseText = getResponseText(response);
60
- const groundingMetadata = response.candidates?.[0]?.groundingMetadata;
57
+ // Get the content generator config to access the provider manager
58
+ const contentGenConfig = this.config.getContentGeneratorConfig();
59
+ // Get the serverToolsProvider from the provider manager
60
+ if (!contentGenConfig?.providerManager) {
61
+ return {
62
+ llmContent: `Web search requires a provider. Please use --provider gemini with authentication.`,
63
+ returnDisplay: 'Web search requires a provider.',
64
+ };
65
+ }
66
+ // Use serverToolsProvider for web search
67
+ const serverToolsProvider = contentGenConfig.providerManager.getServerToolsProvider();
68
+ if (!serverToolsProvider) {
69
+ return {
70
+ llmContent: `Web search requires Gemini provider to be configured. Please ensure Gemini is available with authentication.`,
71
+ returnDisplay: 'Web search requires Gemini provider.',
72
+ };
73
+ }
74
+ // Check if the provider supports web_search
75
+ const serverTools = serverToolsProvider.getServerTools();
76
+ if (!serverTools.includes('web_search')) {
77
+ return {
78
+ llmContent: `Web search is not available. The server tools provider does not support web search.`,
79
+ returnDisplay: `Web search not available.`,
80
+ };
81
+ }
82
+ // Invoke the server tool
83
+ const response = await serverToolsProvider.invokeServerTool('web_search', { query: params.query }, { signal });
84
+ // Cast response to the expected type
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ const geminiResponse = response;
87
+ const responseText = getResponseText(geminiResponse);
88
+ const groundingMetadata = geminiResponse?.candidates?.[0]?.groundingMetadata;
61
89
  const sources = groundingMetadata?.groundingChunks;
62
90
  const groundingSupports = groundingMetadata?.groundingSupports;
63
91
  if (!responseText || !responseText.trim()) {
@@ -1 +1 @@
1
- {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,229 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { WebSearchTool } from './web-search.js';
8
+ describe('WebSearchTool', () => {
9
+ let webSearchTool;
10
+ let mockConfig;
11
+ let mockGeminiClient;
12
+ let mockGenerateContent;
13
+ let mockAbortSignal;
14
+ beforeEach(() => {
15
+ mockGenerateContent = vi.fn();
16
+ mockGeminiClient = {
17
+ generateContent: mockGenerateContent,
18
+ isInitialized: vi.fn(() => true), // Mock as initialized
19
+ };
20
+ const mockServerToolsProvider = {
21
+ getServerTools: vi.fn(() => ['web_search']),
22
+ invokeServerTool: mockGenerateContent,
23
+ };
24
+ mockConfig = {
25
+ getGeminiClient: vi.fn(() => mockGeminiClient),
26
+ getProvider: vi.fn(() => 'gemini'), // Default to gemini provider
27
+ getContentGeneratorConfig: vi.fn(() => ({
28
+ model: 'test-model',
29
+ providerManager: {
30
+ getServerToolsProvider: vi.fn(() => mockServerToolsProvider),
31
+ },
32
+ })),
33
+ };
34
+ webSearchTool = new WebSearchTool(mockConfig);
35
+ mockAbortSignal = new AbortController().signal;
36
+ });
37
+ describe('execute', () => {
38
+ it('should perform a web search and return results', async () => {
39
+ const mockResponse = {
40
+ candidates: [
41
+ {
42
+ content: {
43
+ parts: [{ text: 'Search results about testing' }],
44
+ role: 'model',
45
+ },
46
+ groundingMetadata: {
47
+ groundingChunks: [
48
+ {
49
+ web: {
50
+ title: 'Test Result 1',
51
+ uri: 'https://example.com/test1',
52
+ },
53
+ },
54
+ {
55
+ web: {
56
+ title: 'Test Result 2',
57
+ uri: 'https://example.com/test2',
58
+ },
59
+ },
60
+ ],
61
+ groundingSupports: [
62
+ {
63
+ segment: {
64
+ startIndex: 0,
65
+ endIndex: 14,
66
+ },
67
+ groundingChunkIndices: [0, 1],
68
+ confidenceScores: [0.9, 0.8],
69
+ },
70
+ ],
71
+ },
72
+ },
73
+ ],
74
+ };
75
+ mockGenerateContent.mockResolvedValue(mockResponse);
76
+ const result = await webSearchTool.execute({ query: 'test query' }, mockAbortSignal);
77
+ expect(mockGenerateContent).toHaveBeenCalledWith('web_search', { query: 'test query' }, { signal: mockAbortSignal });
78
+ expect(result.llmContent).toContain('Web search results for "test query"');
79
+ expect(result.llmContent).toContain('Search results'); // The citation markers are inserted
80
+ expect(result.llmContent).toContain('about testing');
81
+ expect(result.llmContent).toContain('Sources:');
82
+ expect(result.llmContent).toContain('[1] Test Result 1');
83
+ expect(result.llmContent).toContain('[2] Test Result 2');
84
+ expect(result.sources).toHaveLength(2);
85
+ });
86
+ it('should handle empty search results', async () => {
87
+ const mockResponse = {
88
+ candidates: [
89
+ {
90
+ content: {
91
+ parts: [{ text: '' }],
92
+ role: 'model',
93
+ },
94
+ },
95
+ ],
96
+ };
97
+ mockGenerateContent.mockResolvedValue(mockResponse);
98
+ const result = await webSearchTool.execute({ query: 'empty query' }, mockAbortSignal);
99
+ expect(result.llmContent).toContain('No search results or information found');
100
+ expect(result.returnDisplay).toBe('No information found.');
101
+ });
102
+ it('should handle errors during search', async () => {
103
+ const mockError = new Error('API Error: Function call/response mismatch');
104
+ mockGenerateContent.mockRejectedValue(mockError);
105
+ const result = await webSearchTool.execute({ query: 'error query' }, mockAbortSignal);
106
+ expect(result.llmContent).toContain('Error:');
107
+ expect(result.llmContent).toContain('API Error: Function call/response mismatch');
108
+ expect(result.returnDisplay).toBe('Error performing web search.');
109
+ });
110
+ it('should handle validation errors', () => {
111
+ // Test validateParams directly since execute method has try-catch
112
+ const error = webSearchTool.validateParams({ query: '' });
113
+ expect(error).toBe("The 'query' parameter cannot be empty.");
114
+ // Test whitespace-only query
115
+ const whitespaceError = webSearchTool.validateParams({ query: ' ' });
116
+ expect(whitespaceError).toBe("The 'query' parameter cannot be empty.");
117
+ });
118
+ it('should handle grounding supports without citations', async () => {
119
+ const mockResponse = {
120
+ candidates: [
121
+ {
122
+ content: {
123
+ parts: [{ text: 'Search results without citations' }],
124
+ role: 'model',
125
+ },
126
+ groundingMetadata: {
127
+ groundingChunks: [
128
+ {
129
+ web: {
130
+ title: 'Result',
131
+ uri: 'https://example.com',
132
+ },
133
+ },
134
+ ],
135
+ // No groundingSupports
136
+ },
137
+ },
138
+ ],
139
+ };
140
+ mockGenerateContent.mockResolvedValue(mockResponse);
141
+ const result = await webSearchTool.execute({ query: 'no citations' }, mockAbortSignal);
142
+ expect(result.llmContent).toContain('Search results without citations');
143
+ expect(result.llmContent).toContain('Sources:');
144
+ expect(result.llmContent).toContain('[1] Result');
145
+ // Should not contain inline citations
146
+ expect(result.llmContent).not.toMatch(/\[\d+\]Search/);
147
+ });
148
+ it('should use googleSearch tool in the correct format', async () => {
149
+ const mockResponse = {
150
+ candidates: [
151
+ {
152
+ content: {
153
+ parts: [{ text: 'Test results' }],
154
+ role: 'model',
155
+ },
156
+ },
157
+ ],
158
+ };
159
+ mockGenerateContent.mockResolvedValue(mockResponse);
160
+ await webSearchTool.execute({ query: 'test google search' }, mockAbortSignal);
161
+ // Verify the web_search tool is passed correctly
162
+ expect(mockGenerateContent).toHaveBeenCalledWith('web_search', { query: 'test google search' }, { signal: mockAbortSignal });
163
+ });
164
+ it('should handle API errors related to function call/response mismatch', async () => {
165
+ const mockError = new Error('Please ensure that the number of function response parts is equal to the number of function call parts of the function call turn.');
166
+ mockGenerateContent.mockRejectedValue(mockError);
167
+ const result = await webSearchTool.execute({ query: 'function mismatch test' }, mockAbortSignal);
168
+ expect(result.llmContent).toContain('Error:');
169
+ expect(result.llmContent).toContain('function response parts');
170
+ expect(result.returnDisplay).toBe('Error performing web search.');
171
+ });
172
+ });
173
+ describe('validateParams', () => {
174
+ it('should accept valid query', () => {
175
+ const error = webSearchTool.validateParams({ query: 'valid query' });
176
+ expect(error).toBeNull();
177
+ });
178
+ it('should reject empty query', () => {
179
+ const error = webSearchTool.validateParams({ query: '' });
180
+ expect(error).toBe("The 'query' parameter cannot be empty.");
181
+ });
182
+ it('should reject whitespace-only query', () => {
183
+ const error = webSearchTool.validateParams({ query: ' ' });
184
+ expect(error).toBe("The 'query' parameter cannot be empty.");
185
+ });
186
+ });
187
+ describe('getDescription', () => {
188
+ it('should return description with query', () => {
189
+ const description = webSearchTool.getDescription({
190
+ query: 'test search',
191
+ });
192
+ expect(description).toBe('Searching the web for: "test search"');
193
+ });
194
+ });
195
+ describe('authentication', () => {
196
+ it('should handle when Gemini client is not initialized', async () => {
197
+ // Mock isInitialized to return false
198
+ mockGeminiClient.isInitialized.mockReturnValue(false);
199
+ // Mock getContentGeneratorConfig to return undefined (no auth)
200
+ mockConfig.getContentGeneratorConfig = vi.fn(() => undefined);
201
+ mockConfig.refreshAuth = vi.fn();
202
+ const result = await webSearchTool.execute({ query: 'test query' }, mockAbortSignal);
203
+ expect(result.llmContent).toContain('Web search requires a provider');
204
+ expect(result.returnDisplay).toBe('Web search requires a provider.');
205
+ });
206
+ it('should handle when server tools provider is not available', async () => {
207
+ // Mock getServerToolsProvider to return null
208
+ mockConfig.getContentGeneratorConfig = vi.fn(() => ({
209
+ model: 'test-model',
210
+ providerManager: {
211
+ registerProvider: vi.fn(),
212
+ setActiveProvider: vi.fn(),
213
+ clearActiveProvider: vi.fn(),
214
+ hasActiveProvider: vi.fn(() => false),
215
+ getActiveProvider: vi.fn(),
216
+ getActiveProviderName: vi.fn(() => ''),
217
+ getAvailableModels: vi.fn(async () => []),
218
+ listProviders: vi.fn(() => []),
219
+ getServerToolsProvider: vi.fn(() => null),
220
+ setServerToolsProvider: vi.fn(),
221
+ },
222
+ }));
223
+ const result = await webSearchTool.execute({ query: 'test query' }, mockAbortSignal);
224
+ expect(result.llmContent).toContain('Web search requires Gemini provider');
225
+ expect(result.returnDisplay).toBe('Web search requires Gemini provider.');
226
+ });
227
+ });
228
+ });
229
+ //# sourceMappingURL=web-search.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.test.js","sourceRoot":"","sources":["../../../src/tools/web-search.test.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import fs from 'fs';
7
7
  import path from 'path';
8
8
  import * as Diff from 'diff';
9
9
  import { ApprovalMode } from '../config/config.js';
10
- import { BaseTool, ToolConfirmationOutcome, } from './tools.js';
10
+ import { BaseTool, ToolConfirmationOutcome, Icon, } from './tools.js';
11
11
  import { Type } from '@google/genai';
12
12
  import { SchemaValidator } from '../utils/schemaValidator.js';
13
13
  import { makeRelative, shortenPath } from '../utils/paths.js';
@@ -23,9 +23,9 @@ export class WriteFileTool extends BaseTool {
23
23
  config;
24
24
  static Name = 'write_file';
25
25
  constructor(config) {
26
- super(WriteFileTool.Name, 'WriteFile', `Writes content to a specified file in the local filesystem.
27
-
28
- The user has the ability to modify \`content\`. If modified, this will be stated in the response.`, {
26
+ super(WriteFileTool.Name, 'WriteFile', `Writes content to a specified file in the local filesystem.
27
+
28
+ The user has the ability to modify \`content\`. If modified, this will be stated in the response.`, Icon.Pencil, {
29
29
  properties: {
30
30
  file_path: {
31
31
  description: "The absolute path to the file to write to (e.g., '/home/user/project/file.txt'). Relative paths are not supported.",
@@ -106,6 +106,8 @@ export class WriteFileTool extends BaseTool {
106
106
  title: `Confirm Write: ${shortenPath(relativePath)}`,
107
107
  fileName,
108
108
  fileDiff,
109
+ originalContent,
110
+ newContent: correctedContent,
109
111
  onConfirm: async (outcome) => {
110
112
  if (outcome === ToolConfirmationOutcome.ProceedAlways) {
111
113
  this.config.setApprovalMode(ApprovalMode.AUTO_EDIT);
@@ -160,7 +162,12 @@ export class WriteFileTool extends BaseTool {
160
162
  if (params.modified_by_user) {
161
163
  llmSuccessMessageParts.push(`User modified the \`content\` to be: ${params.content}`);
162
164
  }
163
- const displayResult = { fileDiff, fileName };
165
+ const displayResult = {
166
+ fileDiff,
167
+ fileName,
168
+ originalContent: correctedContentResult.originalContent,
169
+ newContent: correctedContentResult.correctedContent,
170
+ };
164
171
  const lines = fileContent.split('\n').length;
165
172
  const mimetype = getSpecificMimeType(params.file_path);
166
173
  const extension = path.extname(params.file_path); // Get extension