@machina.ai/cell-cli-core 1.0.21-rc4 → 1.4.0-rc1

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 (505) hide show
  1. package/dist/index.d.ts +6 -2
  2. package/dist/index.js +6 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +25 -11
  5. package/dist/src/code_assist/codeAssist.d.ts +6 -3
  6. package/dist/src/code_assist/codeAssist.js +12 -0
  7. package/dist/src/code_assist/codeAssist.js.map +1 -1
  8. package/dist/src/code_assist/converter.d.ts +3 -1
  9. package/dist/src/code_assist/converter.js +37 -5
  10. package/dist/src/code_assist/converter.js.map +1 -1
  11. package/dist/src/code_assist/converter.test.js +83 -0
  12. package/dist/src/code_assist/converter.test.js.map +1 -1
  13. package/dist/src/code_assist/oauth2.d.ts +2 -1
  14. package/dist/src/code_assist/oauth2.js +85 -49
  15. package/dist/src/code_assist/oauth2.js.map +1 -1
  16. package/dist/src/code_assist/oauth2.test.js +317 -15
  17. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  18. package/dist/src/code_assist/server.d.ts +5 -5
  19. package/dist/src/code_assist/server.js +1 -1
  20. package/dist/src/code_assist/server.js.map +1 -1
  21. package/dist/src/code_assist/setup.d.ts +1 -1
  22. package/dist/src/code_assist/setup.js +1 -1
  23. package/dist/src/code_assist/setup.js.map +1 -1
  24. package/dist/src/code_assist/setup.test.js.map +1 -1
  25. package/dist/src/config/config.d.ts +53 -15
  26. package/dist/src/config/config.js +127 -47
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/config.test.js +151 -6
  29. package/dist/src/config/config.test.js.map +1 -1
  30. package/dist/src/config/models.d.ts +1 -0
  31. package/dist/src/config/models.js +2 -0
  32. package/dist/src/config/models.js.map +1 -1
  33. package/dist/src/config/storage.d.ts +32 -0
  34. package/dist/src/config/storage.js +90 -0
  35. package/dist/src/config/storage.js.map +1 -0
  36. package/dist/src/config/storage.test.js +43 -0
  37. package/dist/src/config/storage.test.js.map +1 -0
  38. package/dist/src/core/client.d.ts +21 -11
  39. package/dist/src/core/client.js +83 -26
  40. package/dist/src/core/client.js.map +1 -1
  41. package/dist/src/core/client.test.js +398 -88
  42. package/dist/src/core/client.test.js.map +1 -1
  43. package/dist/src/core/contentGenerator.d.ts +6 -6
  44. package/dist/src/core/contentGenerator.js +4 -3
  45. package/dist/src/core/contentGenerator.js.map +1 -1
  46. package/dist/src/core/contentGenerator.test.js.map +1 -1
  47. package/dist/src/core/coreToolScheduler.d.ts +14 -5
  48. package/dist/src/core/coreToolScheduler.js +120 -49
  49. package/dist/src/core/coreToolScheduler.js.map +1 -1
  50. package/dist/src/core/coreToolScheduler.test.js +383 -72
  51. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  52. package/dist/src/core/geminiChat.d.ts +48 -15
  53. package/dist/src/core/geminiChat.js +327 -154
  54. package/dist/src/core/geminiChat.js.map +1 -1
  55. package/dist/src/core/geminiChat.test.js +1041 -257
  56. package/dist/src/core/geminiChat.test.js.map +1 -1
  57. package/dist/src/core/geminiRequest.js +1 -0
  58. package/dist/src/core/geminiRequest.js.map +1 -1
  59. package/dist/src/core/logger.d.ts +4 -2
  60. package/dist/src/core/logger.js +4 -3
  61. package/dist/src/core/logger.js.map +1 -1
  62. package/dist/src/core/logger.test.js +19 -18
  63. package/dist/src/core/logger.test.js.map +1 -1
  64. package/dist/src/core/loggingContentGenerator.d.ts +3 -3
  65. package/dist/src/core/loggingContentGenerator.js +11 -9
  66. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  67. package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -5
  68. package/dist/src/core/nonInteractiveToolExecutor.js +15 -123
  69. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  70. package/dist/src/core/nonInteractiveToolExecutor.test.js +116 -90
  71. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  72. package/dist/src/core/prompts.js +8 -7
  73. package/dist/src/core/prompts.js.map +1 -1
  74. package/dist/src/core/prompts.test.js +21 -21
  75. package/dist/src/core/prompts.test.js.map +1 -1
  76. package/dist/src/core/subagent.d.ts +24 -18
  77. package/dist/src/core/subagent.js +126 -89
  78. package/dist/src/core/subagent.js.map +1 -1
  79. package/dist/src/core/subagent.test.js +51 -35
  80. package/dist/src/core/subagent.test.js.map +1 -1
  81. package/dist/src/core/turn.d.ts +33 -8
  82. package/dist/src/core/turn.js +59 -14
  83. package/dist/src/core/turn.js.map +1 -1
  84. package/dist/src/core/turn.test.js +349 -90
  85. package/dist/src/core/turn.test.js.map +1 -1
  86. package/dist/src/generated/git-commit.d.ts +2 -2
  87. package/dist/src/generated/git-commit.js +2 -2
  88. package/dist/src/generated/git-commit.js.map +1 -1
  89. package/dist/src/ide/constants.d.ts +1 -1
  90. package/dist/src/ide/constants.js +1 -1
  91. package/dist/src/ide/constants.js.map +1 -1
  92. package/dist/src/ide/detect-ide.d.ts +8 -3
  93. package/dist/src/ide/detect-ide.js +29 -11
  94. package/dist/src/ide/detect-ide.js.map +1 -1
  95. package/dist/src/ide/detect-ide.test.js +96 -52
  96. package/dist/src/ide/detect-ide.test.js.map +1 -1
  97. package/dist/src/ide/ide-client.d.ts +18 -9
  98. package/dist/src/ide/ide-client.js +151 -33
  99. package/dist/src/ide/ide-client.js.map +1 -1
  100. package/dist/src/ide/ide-client.test.js +147 -25
  101. package/dist/src/ide/ide-client.test.js.map +1 -1
  102. package/dist/src/ide/ide-installer.d.ts +1 -1
  103. package/dist/src/ide/ide-installer.js +31 -22
  104. package/dist/src/ide/ide-installer.js.map +1 -1
  105. package/dist/src/ide/ide-installer.test.js +82 -22
  106. package/dist/src/ide/ide-installer.test.js.map +1 -1
  107. package/dist/src/ide/ideContext.d.ts +12 -0
  108. package/dist/src/ide/ideContext.js +1 -0
  109. package/dist/src/ide/ideContext.js.map +1 -1
  110. package/dist/src/ide/process-utils.d.ts +13 -6
  111. package/dist/src/ide/process-utils.js +142 -35
  112. package/dist/src/ide/process-utils.js.map +1 -1
  113. package/dist/src/ide/process-utils.test.js +158 -0
  114. package/dist/src/ide/process-utils.test.js.map +1 -0
  115. package/dist/src/index.d.ts +12 -2
  116. package/dist/src/index.js +11 -1
  117. package/dist/src/index.js.map +1 -1
  118. package/dist/src/mcp/google-auth-provider.d.ts +3 -3
  119. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  120. package/dist/src/mcp/oauth-provider.d.ts +13 -13
  121. package/dist/src/mcp/oauth-provider.js +32 -31
  122. package/dist/src/mcp/oauth-provider.js.map +1 -1
  123. package/dist/src/mcp/oauth-provider.test.js +75 -36
  124. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  125. package/dist/src/mcp/oauth-token-storage.d.ts +9 -31
  126. package/dist/src/mcp/oauth-token-storage.js +10 -13
  127. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  128. package/dist/src/mcp/oauth-token-storage.test.js +30 -27
  129. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  130. package/dist/src/mcp/oauth-utils.d.ts +9 -1
  131. package/dist/src/mcp/oauth-utils.js +41 -27
  132. package/dist/src/mcp/oauth-utils.js.map +1 -1
  133. package/dist/src/mcp/oauth-utils.test.js +41 -1
  134. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  135. package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
  136. package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
  137. package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
  138. package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
  139. package/dist/src/mcp/token-storage/base-token-storage.test.js +160 -0
  140. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
  141. package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
  142. package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
  143. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
  144. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
  145. package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
  146. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
  147. package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
  148. package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
  149. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
  150. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
  151. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
  152. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
  153. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
  154. package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
  155. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
  156. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
  157. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
  158. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
  159. package/dist/src/mcp/token-storage/types.d.ts +38 -0
  160. package/dist/src/mcp/token-storage/types.js +11 -0
  161. package/dist/src/mcp/token-storage/types.js.map +1 -0
  162. package/dist/src/prompts/mcp-prompts.d.ts +2 -2
  163. package/dist/src/prompts/prompt-registry.d.ts +1 -1
  164. package/dist/src/services/chatRecordingService.d.ts +6 -13
  165. package/dist/src/services/chatRecordingService.js +31 -19
  166. package/dist/src/services/chatRecordingService.js.map +1 -1
  167. package/dist/src/services/chatRecordingService.test.js +64 -25
  168. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  169. package/dist/src/services/fileDiscoveryService.js +1 -1
  170. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  171. package/dist/src/services/fileDiscoveryService.test.js +3 -3
  172. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  173. package/dist/src/services/fileSystemService.js +1 -1
  174. package/dist/src/services/fileSystemService.js.map +1 -1
  175. package/dist/src/services/fileSystemService.test.js +1 -1
  176. package/dist/src/services/fileSystemService.test.js.map +1 -1
  177. package/dist/src/services/gitService.d.ts +3 -1
  178. package/dist/src/services/gitService.js +21 -12
  179. package/dist/src/services/gitService.js.map +1 -1
  180. package/dist/src/services/gitService.test.js +22 -19
  181. package/dist/src/services/gitService.test.js.map +1 -1
  182. package/dist/src/services/loopDetectionService.d.ts +3 -2
  183. package/dist/src/services/loopDetectionService.js +28 -4
  184. package/dist/src/services/loopDetectionService.js.map +1 -1
  185. package/dist/src/services/loopDetectionService.test.js +23 -1
  186. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  187. package/dist/src/services/shellExecutionService.d.ts +8 -10
  188. package/dist/src/services/shellExecutionService.js +292 -135
  189. package/dist/src/services/shellExecutionService.js.map +1 -1
  190. package/dist/src/services/shellExecutionService.test.js +277 -42
  191. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  192. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +18 -4
  193. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +171 -11
  194. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  195. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +103 -11
  196. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  197. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +31 -1
  198. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +75 -0
  199. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  200. package/dist/src/telemetry/constants.d.ts +9 -0
  201. package/dist/src/telemetry/constants.js +9 -0
  202. package/dist/src/telemetry/constants.js.map +1 -1
  203. package/dist/src/telemetry/file-exporters.d.ts +5 -4
  204. package/dist/src/telemetry/file-exporters.js +1 -1
  205. package/dist/src/telemetry/file-exporters.js.map +1 -1
  206. package/dist/src/telemetry/index.d.ts +5 -2
  207. package/dist/src/telemetry/index.js +3 -2
  208. package/dist/src/telemetry/index.js.map +1 -1
  209. package/dist/src/telemetry/loggers.d.ts +8 -2
  210. package/dist/src/telemetry/loggers.js +130 -2
  211. package/dist/src/telemetry/loggers.js.map +1 -1
  212. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  213. package/dist/src/telemetry/loggers.test.js +105 -9
  214. package/dist/src/telemetry/loggers.test.js.map +1 -1
  215. package/dist/src/telemetry/metrics.d.ts +15 -4
  216. package/dist/src/telemetry/metrics.js +46 -8
  217. package/dist/src/telemetry/metrics.js.map +1 -1
  218. package/dist/src/telemetry/metrics.test.js +5 -25
  219. package/dist/src/telemetry/metrics.test.js.map +1 -1
  220. package/dist/src/telemetry/sdk.d.ts +1 -1
  221. package/dist/src/telemetry/sdk.js +3 -3
  222. package/dist/src/telemetry/sdk.js.map +1 -1
  223. package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
  224. package/dist/src/telemetry/telemetry-utils.js +14 -0
  225. package/dist/src/telemetry/telemetry-utils.js.map +1 -0
  226. package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
  227. package/dist/src/telemetry/telemetry-utils.test.js +40 -0
  228. package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
  229. package/dist/src/telemetry/types.d.ts +61 -6
  230. package/dist/src/telemetry/types.js +105 -4
  231. package/dist/src/telemetry/types.js.map +1 -1
  232. package/dist/src/telemetry/uiTelemetry.d.ts +2 -2
  233. package/dist/src/telemetry/uiTelemetry.js +5 -5
  234. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  235. package/dist/src/telemetry/uiTelemetry.test.js +20 -16
  236. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  237. package/dist/src/test-utils/config.d.ts +2 -1
  238. package/dist/src/test-utils/config.js.map +1 -1
  239. package/dist/src/test-utils/index.d.ts +6 -0
  240. package/dist/src/test-utils/index.js +7 -0
  241. package/dist/src/test-utils/index.js.map +1 -0
  242. package/dist/src/test-utils/mock-tool.d.ts +41 -0
  243. package/dist/src/test-utils/mock-tool.js +51 -0
  244. package/dist/src/test-utils/mock-tool.js.map +1 -0
  245. package/dist/src/test-utils/mockWorkspaceContext.d.ts +1 -1
  246. package/dist/src/test-utils/tools.d.ts +3 -2
  247. package/dist/src/test-utils/tools.js.map +1 -1
  248. package/dist/src/tools/diffOptions.d.ts +1 -1
  249. package/dist/src/tools/diffOptions.js +21 -13
  250. package/dist/src/tools/diffOptions.js.map +1 -1
  251. package/dist/src/tools/diffOptions.test.js +58 -22
  252. package/dist/src/tools/diffOptions.test.js.map +1 -1
  253. package/dist/src/tools/edit.d.ts +6 -5
  254. package/dist/src/tools/edit.js +47 -36
  255. package/dist/src/tools/edit.js.map +1 -1
  256. package/dist/src/tools/edit.test.js +77 -12
  257. package/dist/src/tools/edit.test.js.map +1 -1
  258. package/dist/src/tools/glob.d.ts +3 -2
  259. package/dist/src/tools/glob.js +17 -6
  260. package/dist/src/tools/glob.js.map +1 -1
  261. package/dist/src/tools/glob.test.js +29 -4
  262. package/dist/src/tools/glob.test.js.map +1 -1
  263. package/dist/src/tools/grep.d.ts +3 -2
  264. package/dist/src/tools/grep.js +35 -15
  265. package/dist/src/tools/grep.js.map +1 -1
  266. package/dist/src/tools/grep.test.js +26 -3
  267. package/dist/src/tools/grep.test.js.map +1 -1
  268. package/dist/src/tools/ls.d.ts +3 -2
  269. package/dist/src/tools/ls.js +12 -7
  270. package/dist/src/tools/ls.js.map +1 -1
  271. package/dist/src/tools/ls.test.js +7 -2
  272. package/dist/src/tools/ls.test.js.map +1 -1
  273. package/dist/src/tools/mcp-client-manager.d.ts +8 -6
  274. package/dist/src/tools/mcp-client-manager.js +30 -5
  275. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  276. package/dist/src/tools/mcp-client-manager.test.js +20 -1
  277. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  278. package/dist/src/tools/mcp-client.d.ts +18 -11
  279. package/dist/src/tools/mcp-client.js +67 -57
  280. package/dist/src/tools/mcp-client.js.map +1 -1
  281. package/dist/src/tools/mcp-client.test.js +29 -4
  282. package/dist/src/tools/mcp-client.test.js.map +1 -1
  283. package/dist/src/tools/mcp-tool.d.ts +6 -4
  284. package/dist/src/tools/mcp-tool.js +21 -11
  285. package/dist/src/tools/mcp-tool.js.map +1 -1
  286. package/dist/src/tools/mcp-tool.test.js +49 -12
  287. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  288. package/dist/src/tools/memoryTool.d.ts +4 -3
  289. package/dist/src/tools/memoryTool.js +15 -38
  290. package/dist/src/tools/memoryTool.js.map +1 -1
  291. package/dist/src/tools/memoryTool.test.js +24 -12
  292. package/dist/src/tools/memoryTool.test.js.map +1 -1
  293. package/dist/src/tools/modifiable-tool.d.ts +2 -2
  294. package/dist/src/tools/modifiable-tool.js +3 -3
  295. package/dist/src/tools/modifiable-tool.js.map +1 -1
  296. package/dist/src/tools/modifiable-tool.test.js +4 -4
  297. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  298. package/dist/src/tools/read-file.d.ts +3 -2
  299. package/dist/src/tools/read-file.js +12 -34
  300. package/dist/src/tools/read-file.js.map +1 -1
  301. package/dist/src/tools/read-file.test.js +9 -6
  302. package/dist/src/tools/read-file.test.js.map +1 -1
  303. package/dist/src/tools/read-many-files.d.ts +3 -2
  304. package/dist/src/tools/read-many-files.js +35 -58
  305. package/dist/src/tools/read-many-files.js.map +1 -1
  306. package/dist/src/tools/read-many-files.test.js +64 -11
  307. package/dist/src/tools/read-many-files.test.js.map +1 -1
  308. package/dist/src/tools/ripGrep.d.ts +47 -0
  309. package/dist/src/tools/ripGrep.js +368 -0
  310. package/dist/src/tools/ripGrep.js.map +1 -0
  311. package/dist/src/tools/ripGrep.test.d.ts +6 -0
  312. package/dist/src/tools/ripGrep.test.js +874 -0
  313. package/dist/src/tools/ripGrep.test.js.map +1 -0
  314. package/dist/src/tools/shell.d.ts +3 -2
  315. package/dist/src/tools/shell.js +30 -25
  316. package/dist/src/tools/shell.js.map +1 -1
  317. package/dist/src/tools/shell.test.js +34 -25
  318. package/dist/src/tools/shell.test.js.map +1 -1
  319. package/dist/src/tools/smart-edit.d.ts +73 -0
  320. package/dist/src/tools/smart-edit.js +607 -0
  321. package/dist/src/tools/smart-edit.js.map +1 -0
  322. package/dist/src/tools/smart-edit.test.d.ts +6 -0
  323. package/dist/src/tools/smart-edit.test.js +405 -0
  324. package/dist/src/tools/smart-edit.test.js.map +1 -0
  325. package/dist/src/tools/tool-error.d.ts +17 -1
  326. package/dist/src/tools/tool-error.js +26 -0
  327. package/dist/src/tools/tool-error.js.map +1 -1
  328. package/dist/src/tools/tool-registry.d.ts +10 -4
  329. package/dist/src/tools/tool-registry.js +19 -7
  330. package/dist/src/tools/tool-registry.js.map +1 -1
  331. package/dist/src/tools/tool-registry.test.js +86 -3
  332. package/dist/src/tools/tool-registry.test.js.map +1 -1
  333. package/dist/src/tools/tools.d.ts +15 -9
  334. package/dist/src/tools/tools.js +12 -0
  335. package/dist/src/tools/tools.js.map +1 -1
  336. package/dist/src/tools/tools.test.js +1 -2
  337. package/dist/src/tools/tools.test.js.map +1 -1
  338. package/dist/src/tools/web-fetch.d.ts +3 -2
  339. package/dist/src/tools/web-fetch.js +14 -10
  340. package/dist/src/tools/web-fetch.js.map +1 -1
  341. package/dist/src/tools/web-fetch.test.js +55 -16
  342. package/dist/src/tools/web-fetch.test.js.map +1 -1
  343. package/dist/src/tools/web-search.d.ts +4 -3
  344. package/dist/src/tools/web-search.js +31 -8
  345. package/dist/src/tools/web-search.js.map +1 -1
  346. package/dist/src/tools/web-search.test.js +69 -1
  347. package/dist/src/tools/web-search.test.js.map +1 -1
  348. package/dist/src/tools/write-file.d.ts +4 -3
  349. package/dist/src/tools/write-file.js +14 -14
  350. package/dist/src/tools/write-file.js.map +1 -1
  351. package/dist/src/tools/write-file.test.js +14 -14
  352. package/dist/src/tools/write-file.test.js.map +1 -1
  353. package/dist/src/utils/bfsFileSearch.d.ts +2 -2
  354. package/dist/src/utils/bfsFileSearch.js +2 -2
  355. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  356. package/dist/src/utils/bfsFileSearch.test.js +3 -3
  357. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  358. package/dist/src/utils/editCorrector.d.ts +2 -2
  359. package/dist/src/utils/editCorrector.js +1 -1
  360. package/dist/src/utils/editCorrector.js.map +1 -1
  361. package/dist/src/utils/editCorrector.test.js +3 -3
  362. package/dist/src/utils/editCorrector.test.js.map +1 -1
  363. package/dist/src/utils/editor.js +2 -2
  364. package/dist/src/utils/editor.js.map +1 -1
  365. package/dist/src/utils/editor.test.js +2 -2
  366. package/dist/src/utils/editor.test.js.map +1 -1
  367. package/dist/src/utils/environmentContext.d.ts +2 -2
  368. package/dist/src/utils/environmentContext.js +1 -1
  369. package/dist/src/utils/environmentContext.js.map +1 -1
  370. package/dist/src/utils/environmentContext.test.js +1 -1
  371. package/dist/src/utils/environmentContext.test.js.map +1 -1
  372. package/dist/src/utils/errorReporting.d.ts +1 -1
  373. package/dist/src/utils/errors.d.ts +19 -0
  374. package/dist/src/utils/errors.js +32 -0
  375. package/dist/src/utils/errors.js.map +1 -1
  376. package/dist/src/utils/fetch.js +1 -1
  377. package/dist/src/utils/fetch.js.map +1 -1
  378. package/dist/src/utils/fileUtils.d.ts +23 -12
  379. package/dist/src/utils/fileUtils.js +160 -79
  380. package/dist/src/utils/fileUtils.js.map +1 -1
  381. package/dist/src/utils/fileUtils.test.js +314 -21
  382. package/dist/src/utils/fileUtils.test.js.map +1 -1
  383. package/dist/src/utils/filesearch/crawler.d.ts +1 -1
  384. package/dist/src/utils/filesearch/crawler.test.js +2 -2
  385. package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
  386. package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
  387. package/dist/src/utils/filesearch/fileSearch.js +14 -9
  388. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  389. package/dist/src/utils/filesearch/fileSearch.test.js +90 -0
  390. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  391. package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -2
  392. package/dist/src/utils/generateContentResponseUtilities.js +1 -13
  393. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  394. package/dist/src/utils/generateContentResponseUtilities.test.js +2 -40
  395. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  396. package/dist/src/utils/getFolderStructure.d.ts +2 -2
  397. package/dist/src/utils/getFolderStructure.js +2 -2
  398. package/dist/src/utils/getFolderStructure.js.map +1 -1
  399. package/dist/src/utils/getFolderStructure.test.js +13 -13
  400. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  401. package/dist/src/utils/getPty.d.ts +19 -0
  402. package/dist/src/utils/getPty.js +23 -0
  403. package/dist/src/utils/getPty.js.map +1 -0
  404. package/dist/src/utils/gitIgnoreParser.d.ts +1 -0
  405. package/dist/src/utils/gitIgnoreParser.js +104 -13
  406. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  407. package/dist/src/utils/gitIgnoreParser.test.js +69 -3
  408. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  409. package/dist/src/utils/gitUtils.js +2 -2
  410. package/dist/src/utils/gitUtils.js.map +1 -1
  411. package/dist/src/utils/ide-trust.d.ts +10 -0
  412. package/dist/src/utils/ide-trust.js +14 -0
  413. package/dist/src/utils/ide-trust.js.map +1 -0
  414. package/dist/src/utils/ignorePatterns.d.ts +103 -0
  415. package/dist/src/utils/ignorePatterns.js +220 -0
  416. package/dist/src/utils/ignorePatterns.js.map +1 -0
  417. package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
  418. package/dist/src/utils/ignorePatterns.test.js +250 -0
  419. package/dist/src/utils/ignorePatterns.test.js.map +1 -0
  420. package/dist/src/utils/installationManager.d.ts +16 -0
  421. package/dist/src/utils/installationManager.js +50 -0
  422. package/dist/src/utils/installationManager.js.map +1 -0
  423. package/dist/src/utils/installationManager.test.d.ts +6 -0
  424. package/dist/src/utils/installationManager.test.js +83 -0
  425. package/dist/src/utils/installationManager.test.js.map +1 -0
  426. package/dist/src/utils/language-detection.d.ts +6 -0
  427. package/dist/src/utils/language-detection.js +101 -0
  428. package/dist/src/utils/language-detection.js.map +1 -0
  429. package/dist/src/utils/llm-edit-fixer.d.ts +25 -0
  430. package/dist/src/utils/llm-edit-fixer.js +112 -0
  431. package/dist/src/utils/llm-edit-fixer.js.map +1 -0
  432. package/dist/src/utils/memoryDiscovery.d.ts +7 -6
  433. package/dist/src/utils/memoryDiscovery.js +68 -33
  434. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  435. package/dist/src/utils/memoryDiscovery.test.js +76 -20
  436. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  437. package/dist/src/utils/memoryImportProcessor.js +2 -2
  438. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  439. package/dist/src/utils/memoryImportProcessor.test.js +2 -141
  440. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  441. package/dist/src/utils/messageInspectors.d.ts +1 -1
  442. package/dist/src/utils/nextSpeakerChecker.d.ts +2 -2
  443. package/dist/src/utils/nextSpeakerChecker.test.js +33 -0
  444. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  445. package/dist/src/utils/partUtils.d.ts +22 -1
  446. package/dist/src/utils/partUtils.js +68 -0
  447. package/dist/src/utils/partUtils.js.map +1 -1
  448. package/dist/src/utils/partUtils.test.js +112 -1
  449. package/dist/src/utils/partUtils.test.js.map +1 -1
  450. package/dist/src/utils/pathReader.d.ts +17 -0
  451. package/dist/src/utils/pathReader.js +92 -0
  452. package/dist/src/utils/pathReader.js.map +1 -0
  453. package/dist/src/utils/pathReader.test.d.ts +6 -0
  454. package/dist/src/utils/pathReader.test.js +363 -0
  455. package/dist/src/utils/pathReader.test.js.map +1 -0
  456. package/dist/src/utils/paths.d.ts +1 -18
  457. package/dist/src/utils/paths.js +3 -29
  458. package/dist/src/utils/paths.js.map +1 -1
  459. package/dist/src/utils/quotaErrorDetection.d.ts +1 -1
  460. package/dist/src/utils/retry.test.js +4 -1
  461. package/dist/src/utils/retry.test.js.map +1 -1
  462. package/dist/src/utils/schemaValidator.js +4 -0
  463. package/dist/src/utils/schemaValidator.js.map +1 -1
  464. package/dist/src/utils/session.js +1 -1
  465. package/dist/src/utils/session.js.map +1 -1
  466. package/dist/src/utils/shell-utils.d.ts +1 -1
  467. package/dist/src/utils/shell-utils.js +23 -29
  468. package/dist/src/utils/shell-utils.js.map +1 -1
  469. package/dist/src/utils/shell-utils.test.js +7 -0
  470. package/dist/src/utils/shell-utils.test.js.map +1 -1
  471. package/dist/src/utils/summarizer.d.ts +2 -2
  472. package/dist/src/utils/summarizer.test.js.map +1 -1
  473. package/dist/src/utils/systemEncoding.js +2 -2
  474. package/dist/src/utils/systemEncoding.js.map +1 -1
  475. package/dist/src/utils/systemEncoding.test.js +2 -2
  476. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  477. package/dist/src/utils/tool-utils.d.ts +19 -0
  478. package/dist/src/utils/tool-utils.js +58 -0
  479. package/dist/src/utils/tool-utils.js.map +1 -0
  480. package/dist/src/utils/tool-utils.test.d.ts +6 -0
  481. package/dist/src/utils/tool-utils.test.js +61 -0
  482. package/dist/src/utils/tool-utils.test.js.map +1 -0
  483. package/dist/src/utils/userAccountManager.d.ts +20 -0
  484. package/dist/src/utils/userAccountManager.js +114 -0
  485. package/dist/src/utils/userAccountManager.js.map +1 -0
  486. package/dist/src/utils/userAccountManager.test.d.ts +6 -0
  487. package/dist/src/utils/{user_account.test.js → userAccountManager.test.js} +33 -30
  488. package/dist/src/utils/userAccountManager.test.js.map +1 -0
  489. package/dist/src/utils/workspaceContext.js +13 -7
  490. package/dist/src/utils/workspaceContext.js.map +1 -1
  491. package/dist/src/utils/workspaceContext.test.js +41 -16
  492. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  493. package/dist/tsconfig.tsbuildinfo +1 -1
  494. package/package.json +27 -13
  495. package/dist/src/utils/user_account.d.ts +0 -9
  496. package/dist/src/utils/user_account.js +0 -109
  497. package/dist/src/utils/user_account.js.map +0 -1
  498. package/dist/src/utils/user_account.test.js.map +0 -1
  499. package/dist/src/utils/user_id.d.ts +0 -11
  500. package/dist/src/utils/user_id.js +0 -49
  501. package/dist/src/utils/user_id.js.map +0 -1
  502. package/dist/src/utils/user_id.test.js +0 -21
  503. package/dist/src/utils/user_id.test.js.map +0 -1
  504. /package/dist/src/{utils/user_account.test.d.ts → config/storage.test.d.ts} +0 -0
  505. /package/dist/src/{utils/user_id.test.d.ts → ide/process-utils.test.d.ts} +0 -0
@@ -0,0 +1,405 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const mockFixLLMEditWithInstruction = vi.hoisted(() => vi.fn());
8
+ const mockGenerateJson = vi.hoisted(() => vi.fn());
9
+ const mockOpenDiff = vi.hoisted(() => vi.fn());
10
+ import { IdeClient, IDEConnectionStatus } from '../ide/ide-client.js';
11
+ vi.mock('../ide/ide-client.js', () => ({
12
+ IdeClient: {
13
+ getInstance: vi.fn(),
14
+ },
15
+ IDEConnectionStatus: {
16
+ Connected: 'connected',
17
+ Disconnected: 'disconnected',
18
+ },
19
+ }));
20
+ vi.mock('../utils/llm-edit-fixer.js', () => ({
21
+ FixLLMEditWithInstruction: mockFixLLMEditWithInstruction,
22
+ }));
23
+ vi.mock('../core/client.js', () => ({
24
+ GeminiClient: vi.fn().mockImplementation(() => ({
25
+ generateJson: mockGenerateJson,
26
+ })),
27
+ }));
28
+ vi.mock('../utils/editor.js', () => ({
29
+ openDiff: mockOpenDiff,
30
+ }));
31
+ import { describe, it, expect, beforeEach, afterEach, vi, } from 'vitest';
32
+ import { applyReplacement, SmartEditTool, calculateReplacement, } from './smart-edit.js';
33
+ import { ToolConfirmationOutcome } from './tools.js';
34
+ import { ToolErrorType } from './tool-error.js';
35
+ import path from 'node:path';
36
+ import fs from 'node:fs';
37
+ import os from 'node:os';
38
+ import { ApprovalMode } from '../config/config.js';
39
+ import {} from '@google/genai';
40
+ import { createMockWorkspaceContext } from '../test-utils/mockWorkspaceContext.js';
41
+ import { StandardFileSystemService } from '../services/fileSystemService.js';
42
+ describe('SmartEditTool', () => {
43
+ let tool;
44
+ let tempDir;
45
+ let rootDir;
46
+ let mockConfig;
47
+ let geminiClient;
48
+ beforeEach(() => {
49
+ vi.restoreAllMocks();
50
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'smart-edit-tool-test-'));
51
+ rootDir = path.join(tempDir, 'root');
52
+ fs.mkdirSync(rootDir);
53
+ geminiClient = {
54
+ generateJson: mockGenerateJson,
55
+ };
56
+ mockConfig = {
57
+ getGeminiClient: vi.fn().mockReturnValue(geminiClient),
58
+ getTargetDir: () => rootDir,
59
+ getApprovalMode: vi.fn(),
60
+ setApprovalMode: vi.fn(),
61
+ getWorkspaceContext: () => createMockWorkspaceContext(rootDir),
62
+ getFileSystemService: () => new StandardFileSystemService(),
63
+ getIdeMode: () => false,
64
+ getApiKey: () => 'test-api-key',
65
+ getModel: () => 'test-model',
66
+ getSandbox: () => false,
67
+ getDebugMode: () => false,
68
+ getQuestion: () => undefined,
69
+ getFullContext: () => false,
70
+ getToolDiscoveryCommand: () => undefined,
71
+ getToolCallCommand: () => undefined,
72
+ getMcpServerCommand: () => undefined,
73
+ getMcpServers: () => undefined,
74
+ getUserAgent: () => 'test-agent',
75
+ getUserMemory: () => '',
76
+ setUserMemory: vi.fn(),
77
+ getGeminiMdFileCount: () => 0,
78
+ setGeminiMdFileCount: vi.fn(),
79
+ getToolRegistry: () => ({}),
80
+ };
81
+ mockConfig.getApprovalMode.mockClear();
82
+ mockConfig.getApprovalMode.mockReturnValue(ApprovalMode.DEFAULT);
83
+ mockFixLLMEditWithInstruction.mockReset();
84
+ mockFixLLMEditWithInstruction.mockResolvedValue({
85
+ noChangesRequired: false,
86
+ search: '',
87
+ replace: '',
88
+ explanation: 'LLM fix failed',
89
+ });
90
+ mockGenerateJson.mockReset();
91
+ mockGenerateJson.mockImplementation(async (contents, schema) => {
92
+ const userContent = contents.find((c) => c.role === 'user');
93
+ let promptText = '';
94
+ if (userContent && userContent.parts) {
95
+ promptText = userContent.parts
96
+ .filter((p) => typeof p.text === 'string')
97
+ .map((p) => p.text)
98
+ .join('\n');
99
+ }
100
+ const snippetMatch = promptText.match(/Problematic target snippet:\n```\n([\s\S]*?)\n```/);
101
+ const problematicSnippet = snippetMatch && snippetMatch[1] ? snippetMatch[1] : '';
102
+ if (schema.properties?.corrected_target_snippet) {
103
+ return Promise.resolve({
104
+ corrected_target_snippet: problematicSnippet,
105
+ });
106
+ }
107
+ if (schema.properties?.corrected_new_string) {
108
+ const originalNewStringMatch = promptText.match(/original_new_string \(what was intended to replace original_old_string\):\n```\n([\s\S]*?)\n```/);
109
+ const originalNewString = originalNewStringMatch && originalNewStringMatch[1]
110
+ ? originalNewStringMatch[1]
111
+ : '';
112
+ return Promise.resolve({ corrected_new_string: originalNewString });
113
+ }
114
+ return Promise.resolve({});
115
+ });
116
+ tool = new SmartEditTool(mockConfig);
117
+ });
118
+ afterEach(() => {
119
+ fs.rmSync(tempDir, { recursive: true, force: true });
120
+ });
121
+ describe('applyReplacement', () => {
122
+ it('should return newString if isNewFile is true', () => {
123
+ expect(applyReplacement(null, 'old', 'new', true)).toBe('new');
124
+ expect(applyReplacement('existing', 'old', 'new', true)).toBe('new');
125
+ });
126
+ it('should replace oldString with newString in currentContent', () => {
127
+ expect(applyReplacement('hello old world old', 'old', 'new', false)).toBe('hello new world new');
128
+ });
129
+ });
130
+ describe('calculateReplacement', () => {
131
+ const abortSignal = new AbortController().signal;
132
+ it('should perform an exact replacement', async () => {
133
+ const content = 'hello world';
134
+ const result = await calculateReplacement({
135
+ params: {
136
+ file_path: 'test.txt',
137
+ instruction: 'test',
138
+ old_string: 'world',
139
+ new_string: 'moon',
140
+ },
141
+ currentContent: content,
142
+ abortSignal,
143
+ });
144
+ expect(result.newContent).toBe('hello moon');
145
+ expect(result.occurrences).toBe(1);
146
+ });
147
+ it('should perform a flexible, whitespace-insensitive replacement', async () => {
148
+ const content = ' hello\n world\n';
149
+ const result = await calculateReplacement({
150
+ params: {
151
+ file_path: 'test.txt',
152
+ instruction: 'test',
153
+ old_string: 'hello\nworld',
154
+ new_string: 'goodbye\nmoon',
155
+ },
156
+ currentContent: content,
157
+ abortSignal,
158
+ });
159
+ expect(result.newContent).toBe(' goodbye\n moon\n');
160
+ expect(result.occurrences).toBe(1);
161
+ });
162
+ it('should return 0 occurrences if no match is found', async () => {
163
+ const content = 'hello world';
164
+ const result = await calculateReplacement({
165
+ params: {
166
+ file_path: 'test.txt',
167
+ instruction: 'test',
168
+ old_string: 'nomatch',
169
+ new_string: 'moon',
170
+ },
171
+ currentContent: content,
172
+ abortSignal,
173
+ });
174
+ expect(result.newContent).toBe(content);
175
+ expect(result.occurrences).toBe(0);
176
+ });
177
+ });
178
+ describe('validateToolParams', () => {
179
+ it('should return null for valid params', () => {
180
+ const params = {
181
+ file_path: path.join(rootDir, 'test.txt'),
182
+ instruction: 'An instruction',
183
+ old_string: 'old',
184
+ new_string: 'new',
185
+ };
186
+ expect(tool.validateToolParams(params)).toBeNull();
187
+ });
188
+ it('should return error for relative path', () => {
189
+ const params = {
190
+ file_path: 'test.txt',
191
+ instruction: 'An instruction',
192
+ old_string: 'old',
193
+ new_string: 'new',
194
+ };
195
+ expect(tool.validateToolParams(params)).toMatch(/File path must be absolute/);
196
+ });
197
+ });
198
+ describe('execute', () => {
199
+ const testFile = 'execute_me.txt';
200
+ let filePath;
201
+ beforeEach(() => {
202
+ filePath = path.join(rootDir, testFile);
203
+ });
204
+ it('should edit an existing file and return diff with fileName', async () => {
205
+ const initialContent = 'This is some old text.';
206
+ const newContent = 'This is some new text.';
207
+ fs.writeFileSync(filePath, initialContent, 'utf8');
208
+ const params = {
209
+ file_path: filePath,
210
+ instruction: 'Replace old with new',
211
+ old_string: 'old',
212
+ new_string: 'new',
213
+ };
214
+ const invocation = tool.build(params);
215
+ const result = await invocation.execute(new AbortController().signal);
216
+ expect(result.llmContent).toMatch(/Successfully modified file/);
217
+ expect(fs.readFileSync(filePath, 'utf8')).toBe(newContent);
218
+ const display = result.returnDisplay;
219
+ expect(display.fileDiff).toMatch(initialContent);
220
+ expect(display.fileDiff).toMatch(newContent);
221
+ expect(display.fileName).toBe(testFile);
222
+ });
223
+ it('should return error if old_string is not found in file', async () => {
224
+ fs.writeFileSync(filePath, 'Some content.', 'utf8');
225
+ const params = {
226
+ file_path: filePath,
227
+ instruction: 'Replace non-existent text',
228
+ old_string: 'nonexistent',
229
+ new_string: 'replacement',
230
+ };
231
+ const invocation = tool.build(params);
232
+ const result = await invocation.execute(new AbortController().signal);
233
+ expect(result.llmContent).toMatch(/0 occurrences found for old_string/);
234
+ expect(result.returnDisplay).toMatch(/Failed to edit, could not find the string to replace./);
235
+ expect(mockFixLLMEditWithInstruction).toHaveBeenCalled();
236
+ });
237
+ it('should succeed if FixLLMEditWithInstruction corrects the params', async () => {
238
+ const initialContent = 'This is some original text.';
239
+ const finalContent = 'This is some brand new text.';
240
+ fs.writeFileSync(filePath, initialContent, 'utf8');
241
+ const params = {
242
+ file_path: filePath,
243
+ instruction: 'Replace original with brand new',
244
+ old_string: 'original text that is slightly wrong', // This will fail first
245
+ new_string: 'brand new text',
246
+ };
247
+ mockFixLLMEditWithInstruction.mockResolvedValueOnce({
248
+ noChangesRequired: false,
249
+ search: 'original text', // The corrected search string
250
+ replace: 'brand new text',
251
+ explanation: 'Corrected the search string to match the file content.',
252
+ });
253
+ const invocation = tool.build(params);
254
+ const result = await invocation.execute(new AbortController().signal);
255
+ expect(result.error).toBeUndefined();
256
+ expect(result.llmContent).toMatch(/Successfully modified file/);
257
+ expect(fs.readFileSync(filePath, 'utf8')).toBe(finalContent);
258
+ expect(mockFixLLMEditWithInstruction).toHaveBeenCalledTimes(1);
259
+ });
260
+ it('should return NO_CHANGE if FixLLMEditWithInstruction determines no changes are needed', async () => {
261
+ const initialContent = 'The price is $100.';
262
+ fs.writeFileSync(filePath, initialContent, 'utf8');
263
+ const params = {
264
+ file_path: filePath,
265
+ instruction: 'Ensure the price is $100',
266
+ old_string: 'price is $50', // Incorrect old string
267
+ new_string: 'price is $100',
268
+ };
269
+ mockFixLLMEditWithInstruction.mockResolvedValueOnce({
270
+ noChangesRequired: true,
271
+ search: '',
272
+ replace: '',
273
+ explanation: 'The price is already correctly set to $100.',
274
+ });
275
+ const invocation = tool.build(params);
276
+ const result = await invocation.execute(new AbortController().signal);
277
+ expect(result.error?.type).toBe(ToolErrorType.EDIT_NO_CHANGE);
278
+ expect(result.llmContent).toMatch(/A secondary check determined/);
279
+ expect(fs.readFileSync(filePath, 'utf8')).toBe(initialContent); // File is unchanged
280
+ });
281
+ it('should preserve CRLF line endings when editing a file', async () => {
282
+ const initialContent = 'line one\r\nline two\r\n';
283
+ const newContent = 'line one\r\nline three\r\n';
284
+ fs.writeFileSync(filePath, initialContent, 'utf8');
285
+ const params = {
286
+ file_path: filePath,
287
+ instruction: 'Replace two with three',
288
+ old_string: 'line two',
289
+ new_string: 'line three',
290
+ };
291
+ const invocation = tool.build(params);
292
+ await invocation.execute(new AbortController().signal);
293
+ const finalContent = fs.readFileSync(filePath, 'utf8');
294
+ expect(finalContent).toBe(newContent);
295
+ });
296
+ it('should create a new file with CRLF line endings if new_string has them', async () => {
297
+ const newContentWithCRLF = 'new line one\r\nnew line two\r\n';
298
+ const params = {
299
+ file_path: filePath,
300
+ instruction: 'Create a new file',
301
+ old_string: '',
302
+ new_string: newContentWithCRLF,
303
+ };
304
+ const invocation = tool.build(params);
305
+ await invocation.execute(new AbortController().signal);
306
+ const finalContent = fs.readFileSync(filePath, 'utf8');
307
+ expect(finalContent).toBe(newContentWithCRLF);
308
+ });
309
+ });
310
+ describe('Error Scenarios', () => {
311
+ const testFile = 'error_test.txt';
312
+ let filePath;
313
+ beforeEach(() => {
314
+ filePath = path.join(rootDir, testFile);
315
+ });
316
+ it('should return FILE_NOT_FOUND error', async () => {
317
+ const params = {
318
+ file_path: filePath,
319
+ instruction: 'test',
320
+ old_string: 'any',
321
+ new_string: 'new',
322
+ };
323
+ const invocation = tool.build(params);
324
+ const result = await invocation.execute(new AbortController().signal);
325
+ expect(result.error?.type).toBe(ToolErrorType.FILE_NOT_FOUND);
326
+ });
327
+ it('should return ATTEMPT_TO_CREATE_EXISTING_FILE error', async () => {
328
+ fs.writeFileSync(filePath, 'existing content', 'utf8');
329
+ const params = {
330
+ file_path: filePath,
331
+ instruction: 'test',
332
+ old_string: '',
333
+ new_string: 'new content',
334
+ };
335
+ const invocation = tool.build(params);
336
+ const result = await invocation.execute(new AbortController().signal);
337
+ expect(result.error?.type).toBe(ToolErrorType.ATTEMPT_TO_CREATE_EXISTING_FILE);
338
+ });
339
+ it('should return NO_OCCURRENCE_FOUND error', async () => {
340
+ fs.writeFileSync(filePath, 'content', 'utf8');
341
+ const params = {
342
+ file_path: filePath,
343
+ instruction: 'test',
344
+ old_string: 'not-found',
345
+ new_string: 'new',
346
+ };
347
+ const invocation = tool.build(params);
348
+ const result = await invocation.execute(new AbortController().signal);
349
+ expect(result.error?.type).toBe(ToolErrorType.EDIT_NO_OCCURRENCE_FOUND);
350
+ });
351
+ it('should return EXPECTED_OCCURRENCE_MISMATCH error', async () => {
352
+ fs.writeFileSync(filePath, 'one one two', 'utf8');
353
+ const params = {
354
+ file_path: filePath,
355
+ instruction: 'test',
356
+ old_string: 'one',
357
+ new_string: 'new',
358
+ };
359
+ const invocation = tool.build(params);
360
+ const result = await invocation.execute(new AbortController().signal);
361
+ expect(result.error?.type).toBe(ToolErrorType.EDIT_EXPECTED_OCCURRENCE_MISMATCH);
362
+ });
363
+ });
364
+ describe('IDE mode', () => {
365
+ const testFile = 'edit_me.txt';
366
+ let filePath;
367
+ let ideClient;
368
+ beforeEach(() => {
369
+ filePath = path.join(rootDir, testFile);
370
+ ideClient = {
371
+ openDiff: vi.fn(),
372
+ getConnectionStatus: vi.fn().mockReturnValue({
373
+ status: IDEConnectionStatus.Connected,
374
+ }),
375
+ };
376
+ vi.mocked(IdeClient.getInstance).mockResolvedValue(ideClient);
377
+ mockConfig.getIdeMode = () => true;
378
+ });
379
+ it('should call ideClient.openDiff and update params on confirmation', async () => {
380
+ const initialContent = 'some old content here';
381
+ const newContent = 'some new content here';
382
+ const modifiedContent = 'some modified content here';
383
+ fs.writeFileSync(filePath, initialContent);
384
+ const params = {
385
+ file_path: filePath,
386
+ instruction: 'test',
387
+ old_string: 'old',
388
+ new_string: 'new',
389
+ };
390
+ ideClient.openDiff.mockResolvedValueOnce({
391
+ status: 'accepted',
392
+ content: modifiedContent,
393
+ });
394
+ const invocation = tool.build(params);
395
+ const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
396
+ expect(ideClient.openDiff).toHaveBeenCalledWith(filePath, newContent);
397
+ if (confirmation && 'onConfirm' in confirmation) {
398
+ await confirmation.onConfirm(ToolConfirmationOutcome.ProceedOnce);
399
+ }
400
+ expect(params.old_string).toBe(initialContent);
401
+ expect(params.new_string).toBe(modifiedContent);
402
+ });
403
+ });
404
+ });
405
+ //# sourceMappingURL=smart-edit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-edit.test.js","sourceRoot":"","sources":["../../../src/tools/smart-edit.test.ts"],"names":[],"mappings":"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"}
@@ -20,8 +20,24 @@ export declare enum ToolErrorType {
20
20
  PERMISSION_DENIED = "permission_denied",
21
21
  NO_SPACE_LEFT = "no_space_left",
22
22
  TARGET_IS_DIRECTORY = "target_is_directory",
23
+ PATH_NOT_IN_WORKSPACE = "path_not_in_workspace",
24
+ SEARCH_PATH_NOT_FOUND = "search_path_not_found",
25
+ SEARCH_PATH_NOT_A_DIRECTORY = "search_path_not_a_directory",
23
26
  EDIT_PREPARATION_FAILURE = "edit_preparation_failure",
24
27
  EDIT_NO_OCCURRENCE_FOUND = "edit_no_occurrence_found",
25
28
  EDIT_EXPECTED_OCCURRENCE_MISMATCH = "edit_expected_occurrence_mismatch",
26
- EDIT_NO_CHANGE = "edit_no_change"
29
+ EDIT_NO_CHANGE = "edit_no_change",
30
+ GLOB_EXECUTION_ERROR = "glob_execution_error",
31
+ GREP_EXECUTION_ERROR = "grep_execution_error",
32
+ LS_EXECUTION_ERROR = "ls_execution_error",
33
+ PATH_IS_NOT_A_DIRECTORY = "path_is_not_a_directory",
34
+ MCP_TOOL_ERROR = "mcp_tool_error",
35
+ MEMORY_TOOL_EXECUTION_ERROR = "memory_tool_execution_error",
36
+ READ_MANY_FILES_SEARCH_ERROR = "read_many_files_search_error",
37
+ SHELL_EXECUTE_ERROR = "shell_execute_error",
38
+ DISCOVERED_TOOL_EXECUTION_ERROR = "discovered_tool_execution_error",
39
+ WEB_FETCH_NO_URL_IN_PROMPT = "web_fetch_no_url_in_prompt",
40
+ WEB_FETCH_FALLBACK_FAILED = "web_fetch_fallback_failed",
41
+ WEB_FETCH_PROCESSING_ERROR = "web_fetch_processing_error",
42
+ WEB_SEARCH_FAILED = "web_search_failed"
27
43
  }
@@ -23,10 +23,36 @@ export var ToolErrorType;
23
23
  ToolErrorType["PERMISSION_DENIED"] = "permission_denied";
24
24
  ToolErrorType["NO_SPACE_LEFT"] = "no_space_left";
25
25
  ToolErrorType["TARGET_IS_DIRECTORY"] = "target_is_directory";
26
+ ToolErrorType["PATH_NOT_IN_WORKSPACE"] = "path_not_in_workspace";
27
+ ToolErrorType["SEARCH_PATH_NOT_FOUND"] = "search_path_not_found";
28
+ ToolErrorType["SEARCH_PATH_NOT_A_DIRECTORY"] = "search_path_not_a_directory";
26
29
  // Edit-specific Errors
27
30
  ToolErrorType["EDIT_PREPARATION_FAILURE"] = "edit_preparation_failure";
28
31
  ToolErrorType["EDIT_NO_OCCURRENCE_FOUND"] = "edit_no_occurrence_found";
29
32
  ToolErrorType["EDIT_EXPECTED_OCCURRENCE_MISMATCH"] = "edit_expected_occurrence_mismatch";
30
33
  ToolErrorType["EDIT_NO_CHANGE"] = "edit_no_change";
34
+ // Glob-specific Errors
35
+ ToolErrorType["GLOB_EXECUTION_ERROR"] = "glob_execution_error";
36
+ // Grep-specific Errors
37
+ ToolErrorType["GREP_EXECUTION_ERROR"] = "grep_execution_error";
38
+ // Ls-specific Errors
39
+ ToolErrorType["LS_EXECUTION_ERROR"] = "ls_execution_error";
40
+ ToolErrorType["PATH_IS_NOT_A_DIRECTORY"] = "path_is_not_a_directory";
41
+ // MCP-specific Errors
42
+ ToolErrorType["MCP_TOOL_ERROR"] = "mcp_tool_error";
43
+ // Memory-specific Errors
44
+ ToolErrorType["MEMORY_TOOL_EXECUTION_ERROR"] = "memory_tool_execution_error";
45
+ // ReadManyFiles-specific Errors
46
+ ToolErrorType["READ_MANY_FILES_SEARCH_ERROR"] = "read_many_files_search_error";
47
+ // Shell errors
48
+ ToolErrorType["SHELL_EXECUTE_ERROR"] = "shell_execute_error";
49
+ // DiscoveredTool-specific Errors
50
+ ToolErrorType["DISCOVERED_TOOL_EXECUTION_ERROR"] = "discovered_tool_execution_error";
51
+ // WebFetch-specific Errors
52
+ ToolErrorType["WEB_FETCH_NO_URL_IN_PROMPT"] = "web_fetch_no_url_in_prompt";
53
+ ToolErrorType["WEB_FETCH_FALLBACK_FAILED"] = "web_fetch_fallback_failed";
54
+ ToolErrorType["WEB_FETCH_PROCESSING_ERROR"] = "web_fetch_processing_error";
55
+ // WebSearch-specific Errors
56
+ ToolErrorType["WEB_SEARCH_FAILED"] = "web_search_failed";
31
57
  })(ToolErrorType || (ToolErrorType = {}));
32
58
  //# sourceMappingURL=tool-error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-error.js","sourceRoot":"","sources":["../../../src/tools/tool-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,aAuBX;AAvBD,WAAY,aAAa;IACvB,iBAAiB;IACjB,4DAA2C,CAAA;IAC3C,oCAAmB,CAAA;IACnB,4DAA2C,CAAA;IAC3C,4DAA2C,CAAA;IAC3C,sDAAqC,CAAA;IAErC,qBAAqB;IACrB,kDAAiC,CAAA;IACjC,0DAAyC,CAAA;IACzC,8DAA6C,CAAA;IAC7C,oFAAmE,CAAA;IACnE,kDAAiC,CAAA;IACjC,wDAAuC,CAAA;IACvC,gDAA+B,CAAA;IAC/B,4DAA2C,CAAA;IAE3C,uBAAuB;IACvB,sEAAqD,CAAA;IACrD,sEAAqD,CAAA;IACrD,wFAAuE,CAAA;IACvE,kDAAiC,CAAA;AACnC,CAAC,EAvBW,aAAa,KAAb,aAAa,QAuBxB"}
1
+ {"version":3,"file":"tool-error.js","sourceRoot":"","sources":["../../../src/tools/tool-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,aA2DX;AA3DD,WAAY,aAAa;IACvB,iBAAiB;IACjB,4DAA2C,CAAA;IAC3C,oCAAmB,CAAA;IACnB,4DAA2C,CAAA;IAC3C,4DAA2C,CAAA;IAC3C,sDAAqC,CAAA;IAErC,qBAAqB;IACrB,kDAAiC,CAAA;IACjC,0DAAyC,CAAA;IACzC,8DAA6C,CAAA;IAC7C,oFAAmE,CAAA;IACnE,kDAAiC,CAAA;IACjC,wDAAuC,CAAA;IACvC,gDAA+B,CAAA;IAC/B,4DAA2C,CAAA;IAC3C,gEAA+C,CAAA;IAC/C,gEAA+C,CAAA;IAC/C,4EAA2D,CAAA;IAE3D,uBAAuB;IACvB,sEAAqD,CAAA;IACrD,sEAAqD,CAAA;IACrD,wFAAuE,CAAA;IACvE,kDAAiC,CAAA;IAEjC,uBAAuB;IACvB,8DAA6C,CAAA;IAE7C,uBAAuB;IACvB,8DAA6C,CAAA;IAE7C,qBAAqB;IACrB,0DAAyC,CAAA;IACzC,oEAAmD,CAAA;IAEnD,sBAAsB;IACtB,kDAAiC,CAAA;IAEjC,yBAAyB;IACzB,4EAA2D,CAAA;IAE3D,gCAAgC;IAChC,8EAA6D,CAAA;IAE7D,eAAe;IACf,4DAA2C,CAAA;IAE3C,iCAAiC;IACjC,oFAAmE,CAAA;IAEnE,2BAA2B;IAC3B,0EAAyD,CAAA;IACzD,wEAAuD,CAAA;IACvD,0EAAyD,CAAA;IAEzD,4BAA4B;IAC5B,wDAAuC,CAAA;AACzC,CAAC,EA3DW,aAAa,KAAb,aAAa,QA2DxB"}
@@ -3,9 +3,11 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { FunctionDeclaration } from '@google/genai';
7
- import { AnyDeclarativeTool, ToolResult, BaseDeclarativeTool, ToolInvocation } from './tools.js';
8
- import { Config } from '../config/config.js';
6
+ import type { FunctionDeclaration } from '@google/genai';
7
+ import type { AnyDeclarativeTool, ToolResult, ToolInvocation } from './tools.js';
8
+ import { BaseDeclarativeTool } from './tools.js';
9
+ import type { Config } from '../config/config.js';
10
+ import type { EventEmitter } from 'node:events';
9
11
  type ToolParams = Record<string, unknown>;
10
12
  export declare class DiscoveredTool extends BaseDeclarativeTool<ToolParams, ToolResult> {
11
13
  private readonly config;
@@ -18,7 +20,7 @@ export declare class ToolRegistry {
18
20
  private tools;
19
21
  private config;
20
22
  private mcpClientManager;
21
- constructor(config: Config);
23
+ constructor(config: Config, eventEmitter?: EventEmitter);
22
24
  /**
23
25
  * Registers a tool definition.
24
26
  * @param tool - The tool object containing schema and execution logic.
@@ -65,6 +67,10 @@ export declare class ToolRegistry {
65
67
  * @returns An array of FunctionDeclarations for the specified tools.
66
68
  */
67
69
  getFunctionDeclarationsFiltered(toolNames: string[]): FunctionDeclaration[];
70
+ /**
71
+ * Returns an array of all registered and discovered tool names.
72
+ */
73
+ getAllToolNames(): string[];
68
74
  /**
69
75
  * Returns an array of all registered and discovered tool instances.
70
76
  */
@@ -3,13 +3,15 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Kind, BaseDeclarativeTool, BaseToolInvocation, } from './tools.js';
6
+ import { Kind, BaseDeclarativeTool, BaseToolInvocation } from './tools.js';
7
7
  import { spawn } from 'node:child_process';
8
8
  import { StringDecoder } from 'node:string_decoder';
9
9
  import { connectAndDiscover } from './mcp-client.js';
10
10
  import { McpClientManager } from './mcp-client-manager.js';
11
11
  import { DiscoveredMCPTool } from './mcp-tool.js';
12
12
  import { parse } from 'shell-quote';
13
+ import { ToolErrorType } from './tool-error.js';
14
+ import { safeJsonStringify } from '../utils/safeJsonStringify.js';
13
15
  class DiscoveredToolInvocation extends BaseToolInvocation {
14
16
  config;
15
17
  toolName;
@@ -19,7 +21,7 @@ class DiscoveredToolInvocation extends BaseToolInvocation {
19
21
  this.toolName = toolName;
20
22
  }
21
23
  getDescription() {
22
- return `Calling discovered tool: ${this.toolName}`;
24
+ return safeJsonStringify(this.params);
23
25
  }
24
26
  async execute(_signal, _updateOutput) {
25
27
  const callCommand = this.config.getToolCallCommand();
@@ -73,6 +75,10 @@ class DiscoveredToolInvocation extends BaseToolInvocation {
73
75
  return {
74
76
  llmContent,
75
77
  returnDisplay: llmContent,
78
+ error: {
79
+ message: llmContent,
80
+ type: ToolErrorType.DISCOVERED_TOOL_EXECUTION_ERROR,
81
+ },
76
82
  };
77
83
  }
78
84
  return {
@@ -118,9 +124,9 @@ export class ToolRegistry {
118
124
  tools = new Map();
119
125
  config;
120
126
  mcpClientManager;
121
- constructor(config) {
127
+ constructor(config, eventEmitter) {
122
128
  this.config = config;
123
- this.mcpClientManager = new McpClientManager(this.config.getMcpServers() ?? {}, this.config.getMcpServerCommand(), this, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext());
129
+ this.mcpClientManager = new McpClientManager(this.config.getMcpServers() ?? {}, this.config.getMcpServerCommand(), this, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext(), eventEmitter);
124
130
  }
125
131
  /**
126
132
  * Registers a tool definition.
@@ -167,7 +173,7 @@ export class ToolRegistry {
167
173
  this.config.getPromptRegistry().clear();
168
174
  await this.discoverAndRegisterToolsFromCommand();
169
175
  // discover tools using MCP servers, if configured
170
- await this.mcpClientManager.discoverAllMcpTools();
176
+ await this.mcpClientManager.discoverAllMcpTools(this.config);
171
177
  }
172
178
  /**
173
179
  * Discovers tools from project (if available and configured).
@@ -179,7 +185,7 @@ export class ToolRegistry {
179
185
  this.removeDiscoveredTools();
180
186
  this.config.getPromptRegistry().clear();
181
187
  // discover tools using MCP servers, if configured
182
- await this.mcpClientManager.discoverAllMcpTools();
188
+ await this.mcpClientManager.discoverAllMcpTools(this.config);
183
189
  }
184
190
  /**
185
191
  * Restarts all MCP servers and re-discovers tools.
@@ -202,7 +208,7 @@ export class ToolRegistry {
202
208
  const mcpServers = this.config.getMcpServers() ?? {};
203
209
  const serverConfig = mcpServers[serverName];
204
210
  if (serverConfig) {
205
- await connectAndDiscover(serverName, serverConfig, this, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext());
211
+ await connectAndDiscover(serverName, serverConfig, this, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext(), this.config);
206
212
  }
207
213
  }
208
214
  async discoverAndRegisterToolsFromCommand() {
@@ -329,6 +335,12 @@ export class ToolRegistry {
329
335
  }
330
336
  return declarations;
331
337
  }
338
+ /**
339
+ * Returns an array of all registered and discovered tool names.
340
+ */
341
+ getAllToolNames() {
342
+ return Array.from(this.tools.keys());
343
+ }
332
344
  /**
333
345
  * Returns an array of all registered and discovered tool instances.
334
346
  */