@machina.ai/cell-cli-core 1.13.0-rc5 → 1.16.0-rc2

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 (424) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.js +2 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +1 -1
  5. package/dist/src/agents/codebase-investigator.test.d.ts +6 -0
  6. package/dist/src/agents/codebase-investigator.test.js +35 -0
  7. package/dist/src/agents/codebase-investigator.test.js.map +1 -0
  8. package/dist/src/agents/executor.d.ts +3 -0
  9. package/dist/src/agents/executor.js +21 -0
  10. package/dist/src/agents/executor.js.map +1 -1
  11. package/dist/src/agents/executor.test.js +358 -3
  12. package/dist/src/agents/executor.test.js.map +1 -1
  13. package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
  14. package/dist/src/code_assist/codeAssist.test.js +99 -0
  15. package/dist/src/code_assist/codeAssist.test.js.map +1 -0
  16. package/dist/src/code_assist/experiments/client_metadata.js +2 -1
  17. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
  18. package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
  19. package/dist/src/code_assist/experiments/client_metadata.test.js +99 -0
  20. package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
  21. package/dist/src/code_assist/experiments/experiments.js +2 -2
  22. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  23. package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
  24. package/dist/src/code_assist/experiments/experiments.test.js +92 -0
  25. package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
  26. package/dist/src/code_assist/experiments/flagNames.d.ts +13 -0
  27. package/dist/src/code_assist/experiments/flagNames.js +13 -0
  28. package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
  29. package/dist/src/code_assist/experiments/types.d.ts +1 -1
  30. package/dist/src/code_assist/oauth-credential-storage.test.js +49 -0
  31. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  32. package/dist/src/code_assist/server.js +5 -8
  33. package/dist/src/code_assist/server.js.map +1 -1
  34. package/dist/src/code_assist/server.test.js +109 -28
  35. package/dist/src/code_assist/server.test.js.map +1 -1
  36. package/dist/src/config/config.d.ts +34 -2
  37. package/dist/src/config/config.js +147 -26
  38. package/dist/src/config/config.js.map +1 -1
  39. package/dist/src/config/config.test.js +436 -19
  40. package/dist/src/config/config.test.js.map +1 -1
  41. package/dist/src/config/defaultModelConfigs.d.ts +7 -0
  42. package/dist/src/config/defaultModelConfigs.js +158 -0
  43. package/dist/src/config/defaultModelConfigs.js.map +1 -0
  44. package/dist/src/config/models.d.ts +22 -1
  45. package/dist/src/config/models.js +49 -6
  46. package/dist/src/config/models.js.map +1 -1
  47. package/dist/src/config/models.test.js +71 -10
  48. package/dist/src/config/models.test.js.map +1 -1
  49. package/dist/src/confirmation-bus/message-bus.d.ts +1 -1
  50. package/dist/src/confirmation-bus/message-bus.js +2 -2
  51. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  52. package/dist/src/confirmation-bus/message-bus.test.js +30 -24
  53. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
  54. package/dist/src/confirmation-bus/types.d.ts +1 -0
  55. package/dist/src/core/baseLlmClient.d.ts +4 -8
  56. package/dist/src/core/baseLlmClient.js +3 -8
  57. package/dist/src/core/baseLlmClient.js.map +1 -1
  58. package/dist/src/core/baseLlmClient.test.js +22 -27
  59. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  60. package/dist/src/core/client.d.ts +6 -5
  61. package/dist/src/core/client.js +33 -33
  62. package/dist/src/core/client.js.map +1 -1
  63. package/dist/src/core/client.test.js +40 -22
  64. package/dist/src/core/client.test.js.map +1 -1
  65. package/dist/src/core/coreToolScheduler.js +7 -1
  66. package/dist/src/core/coreToolScheduler.js.map +1 -1
  67. package/dist/src/core/coreToolScheduler.test.js +151 -357
  68. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  69. package/dist/src/core/geminiChat.d.ts +6 -4
  70. package/dist/src/core/geminiChat.js +106 -29
  71. package/dist/src/core/geminiChat.js.map +1 -1
  72. package/dist/src/core/geminiChat.test.js +317 -16
  73. package/dist/src/core/geminiChat.test.js.map +1 -1
  74. package/dist/src/core/logger.d.ts +7 -2
  75. package/dist/src/core/logger.js +15 -9
  76. package/dist/src/core/logger.js.map +1 -1
  77. package/dist/src/core/logger.test.js +31 -16
  78. package/dist/src/core/logger.test.js.map +1 -1
  79. package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
  80. package/dist/src/core/loggingContentGenerator.test.js +180 -0
  81. package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
  82. package/dist/src/core/nonInteractiveToolExecutor.test.js +1 -0
  83. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  84. package/dist/src/core/prompts.js +8 -11
  85. package/dist/src/core/prompts.js.map +1 -1
  86. package/dist/src/core/tokenLimits.test.d.ts +6 -0
  87. package/dist/src/core/tokenLimits.test.js +26 -0
  88. package/dist/src/core/tokenLimits.test.js.map +1 -0
  89. package/dist/src/fallback/handler.js +52 -7
  90. package/dist/src/fallback/handler.js.map +1 -1
  91. package/dist/src/fallback/handler.test.js +69 -16
  92. package/dist/src/fallback/handler.test.js.map +1 -1
  93. package/dist/src/fallback/types.d.ts +1 -1
  94. package/dist/src/generated/git-commit.d.ts +2 -2
  95. package/dist/src/generated/git-commit.js +2 -2
  96. package/dist/src/hooks/hookAggregator.d.ts +68 -0
  97. package/dist/src/hooks/hookAggregator.js +262 -0
  98. package/dist/src/hooks/hookAggregator.js.map +1 -0
  99. package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
  100. package/dist/src/hooks/hookAggregator.test.js +387 -0
  101. package/dist/src/hooks/hookAggregator.test.js.map +1 -0
  102. package/dist/src/hooks/hookRunner.d.ts +42 -0
  103. package/dist/src/hooks/hookRunner.js +272 -0
  104. package/dist/src/hooks/hookRunner.js.map +1 -0
  105. package/dist/src/hooks/hookRunner.test.d.ts +6 -0
  106. package/dist/src/hooks/hookRunner.test.js +468 -0
  107. package/dist/src/hooks/hookRunner.test.js.map +1 -0
  108. package/dist/src/hooks/hookTranslator.d.ts +3 -3
  109. package/dist/src/hooks/types.js +1 -1
  110. package/dist/src/hooks/types.js.map +1 -1
  111. package/dist/src/hooks/types.test.js +280 -2
  112. package/dist/src/hooks/types.test.js.map +1 -1
  113. package/dist/src/ide/detect-ide.d.ts +4 -0
  114. package/dist/src/ide/detect-ide.js +6 -1
  115. package/dist/src/ide/detect-ide.js.map +1 -1
  116. package/dist/src/ide/detect-ide.test.js +5 -0
  117. package/dist/src/ide/detect-ide.test.js.map +1 -1
  118. package/dist/src/ide/ide-client.d.ts +3 -1
  119. package/dist/src/ide/ide-client.js +66 -59
  120. package/dist/src/ide/ide-client.js.map +1 -1
  121. package/dist/src/ide/ide-client.test.js +159 -0
  122. package/dist/src/ide/ide-client.test.js.map +1 -1
  123. package/dist/src/ide/ide-installer.js +71 -21
  124. package/dist/src/ide/ide-installer.js.map +1 -1
  125. package/dist/src/ide/ide-installer.test.js +42 -1
  126. package/dist/src/ide/ide-installer.test.js.map +1 -1
  127. package/dist/src/ide/process-utils.js +16 -0
  128. package/dist/src/ide/process-utils.js.map +1 -1
  129. package/dist/src/ide/process-utils.test.js +3 -3
  130. package/dist/src/ide/process-utils.test.js.map +1 -1
  131. package/dist/src/ide/types.d.ts +1 -1
  132. package/dist/src/ide/types.js +1 -1
  133. package/dist/src/index.d.ts +2 -0
  134. package/dist/src/index.js +2 -0
  135. package/dist/src/index.js.map +1 -1
  136. package/dist/src/mcp/google-auth-provider.js +1 -1
  137. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  138. package/dist/src/mcp/oauth-provider.js +2 -2
  139. package/dist/src/mcp/oauth-provider.js.map +1 -1
  140. package/dist/src/mcp/oauth-provider.test.js +177 -0
  141. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  142. package/dist/src/mcp/sa-impersonation-provider.js +1 -1
  143. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  144. package/dist/src/policy/config.js +3 -1
  145. package/dist/src/policy/config.js.map +1 -1
  146. package/dist/src/policy/config.test.js +135 -1
  147. package/dist/src/policy/config.test.js.map +1 -1
  148. package/dist/src/policy/policies/discovered.toml +8 -0
  149. package/dist/src/policy/policies/write.toml +10 -0
  150. package/dist/src/policy/policy-engine.d.ts +12 -3
  151. package/dist/src/policy/policy-engine.js +71 -9
  152. package/dist/src/policy/policy-engine.js.map +1 -1
  153. package/dist/src/policy/policy-engine.test.js +460 -76
  154. package/dist/src/policy/policy-engine.test.js.map +1 -1
  155. package/dist/src/policy/toml-loader.d.ts +2 -1
  156. package/dist/src/policy/toml-loader.js +103 -6
  157. package/dist/src/policy/toml-loader.js.map +1 -1
  158. package/dist/src/policy/toml-loader.test.js +222 -368
  159. package/dist/src/policy/toml-loader.test.js.map +1 -1
  160. package/dist/src/policy/types.d.ts +65 -0
  161. package/dist/src/policy/types.js +4 -0
  162. package/dist/src/policy/types.js.map +1 -1
  163. package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
  164. package/dist/src/prompts/mcp-prompts.test.js +40 -0
  165. package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
  166. package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
  167. package/dist/src/prompts/prompt-registry.test.js +111 -0
  168. package/dist/src/prompts/prompt-registry.test.js.map +1 -0
  169. package/dist/src/routing/modelRouterService.js +15 -0
  170. package/dist/src/routing/modelRouterService.js.map +1 -1
  171. package/dist/src/routing/modelRouterService.test.js +62 -0
  172. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  173. package/dist/src/routing/strategies/classifierStrategy.d.ts +1 -1
  174. package/dist/src/routing/strategies/classifierStrategy.js +6 -14
  175. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  176. package/dist/src/routing/strategies/classifierStrategy.test.js +13 -10
  177. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  178. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  179. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  180. package/dist/src/routing/strategies/fallbackStrategy.test.js +4 -0
  181. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  182. package/dist/src/routing/strategies/overrideStrategy.js +2 -2
  183. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  184. package/dist/src/routing/strategies/overrideStrategy.test.js +3 -0
  185. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  186. package/dist/src/safety/built-in.d.ts +21 -0
  187. package/dist/src/safety/built-in.js +106 -0
  188. package/dist/src/safety/built-in.js.map +1 -0
  189. package/dist/src/safety/built-in.test.d.ts +6 -0
  190. package/dist/src/safety/built-in.test.js +199 -0
  191. package/dist/src/safety/built-in.test.js.map +1 -0
  192. package/dist/src/safety/checker-runner.d.ts +48 -0
  193. package/dist/src/safety/checker-runner.js +208 -0
  194. package/dist/src/safety/checker-runner.js.map +1 -0
  195. package/dist/src/safety/checker-runner.test.d.ts +6 -0
  196. package/dist/src/safety/checker-runner.test.js +238 -0
  197. package/dist/src/safety/checker-runner.test.js.map +1 -0
  198. package/dist/src/safety/context-builder.d.ts +23 -0
  199. package/dist/src/safety/context-builder.js +47 -0
  200. package/dist/src/safety/context-builder.js.map +1 -0
  201. package/dist/src/safety/context-builder.test.d.ts +6 -0
  202. package/dist/src/safety/context-builder.test.js +49 -0
  203. package/dist/src/safety/context-builder.test.js.map +1 -0
  204. package/dist/src/safety/protocol.d.ts +88 -0
  205. package/dist/src/safety/protocol.js +15 -0
  206. package/dist/src/safety/protocol.js.map +1 -0
  207. package/dist/src/safety/registry.d.ts +26 -0
  208. package/dist/src/safety/registry.js +65 -0
  209. package/dist/src/safety/registry.js.map +1 -0
  210. package/dist/src/safety/registry.test.d.ts +6 -0
  211. package/dist/src/safety/registry.test.js +31 -0
  212. package/dist/src/safety/registry.test.js.map +1 -0
  213. package/dist/src/services/chatCompressionService.test.js +1 -0
  214. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  215. package/dist/src/services/gitService.js +1 -1
  216. package/dist/src/services/gitService.js.map +1 -1
  217. package/dist/src/services/gitService.test.js +1 -1
  218. package/dist/src/services/gitService.test.js.map +1 -1
  219. package/dist/src/services/loopDetectionService.d.ts +3 -0
  220. package/dist/src/services/loopDetectionService.js +81 -42
  221. package/dist/src/services/loopDetectionService.js.map +1 -1
  222. package/dist/src/services/loopDetectionService.test.js +101 -1
  223. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  224. package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
  225. package/dist/src/services/modelConfig.golden.test.js +42 -0
  226. package/dist/src/services/modelConfig.golden.test.js.map +1 -0
  227. package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
  228. package/dist/src/services/modelConfig.integration.test.js +213 -0
  229. package/dist/src/services/modelConfig.integration.test.js.map +1 -0
  230. package/dist/src/services/modelConfigService.d.ts +46 -0
  231. package/dist/src/services/modelConfigService.js +146 -0
  232. package/dist/src/services/modelConfigService.js.map +1 -0
  233. package/dist/src/services/modelConfigService.test.d.ts +6 -0
  234. package/dist/src/services/modelConfigService.test.js +509 -0
  235. package/dist/src/services/modelConfigService.test.js.map +1 -0
  236. package/dist/src/services/test-data/resolved-aliases.golden.json +169 -0
  237. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -9
  238. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +174 -150
  239. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  240. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
  241. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +76 -20
  242. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  243. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +6 -1
  244. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +18 -5
  245. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  246. package/dist/src/telemetry/index.d.ts +2 -2
  247. package/dist/src/telemetry/index.js +2 -2
  248. package/dist/src/telemetry/index.js.map +1 -1
  249. package/dist/src/telemetry/loggers.d.ts +7 -7
  250. package/dist/src/telemetry/loggers.js +23 -23
  251. package/dist/src/telemetry/loggers.js.map +1 -1
  252. package/dist/src/telemetry/loggers.test.circular.js +0 -1
  253. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  254. package/dist/src/telemetry/loggers.test.js +72 -18
  255. package/dist/src/telemetry/loggers.test.js.map +1 -1
  256. package/dist/src/telemetry/metrics.d.ts +8 -4
  257. package/dist/src/telemetry/metrics.js +10 -4
  258. package/dist/src/telemetry/metrics.js.map +1 -1
  259. package/dist/src/telemetry/metrics.test.js +42 -0
  260. package/dist/src/telemetry/metrics.test.js.map +1 -1
  261. package/dist/src/telemetry/telemetryAttributes.js +1 -0
  262. package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
  263. package/dist/src/telemetry/types.d.ts +17 -11
  264. package/dist/src/telemetry/types.js +53 -28
  265. package/dist/src/telemetry/types.js.map +1 -1
  266. package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
  267. package/dist/src/tools/base-tool-invocation.test.js +85 -0
  268. package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
  269. package/dist/src/tools/edit.d.ts +1 -1
  270. package/dist/src/tools/edit.js +31 -33
  271. package/dist/src/tools/edit.js.map +1 -1
  272. package/dist/src/tools/edit.test.js +31 -20
  273. package/dist/src/tools/edit.test.js.map +1 -1
  274. package/dist/src/tools/glob.d.ts +1 -1
  275. package/dist/src/tools/glob.js +7 -7
  276. package/dist/src/tools/glob.js.map +1 -1
  277. package/dist/src/tools/glob.test.js +20 -17
  278. package/dist/src/tools/glob.test.js.map +1 -1
  279. package/dist/src/tools/grep.d.ts +1 -1
  280. package/dist/src/tools/grep.js +9 -9
  281. package/dist/src/tools/grep.js.map +1 -1
  282. package/dist/src/tools/grep.test.js +15 -12
  283. package/dist/src/tools/grep.test.js.map +1 -1
  284. package/dist/src/tools/ls.d.ts +1 -1
  285. package/dist/src/tools/ls.js +14 -15
  286. package/dist/src/tools/ls.js.map +1 -1
  287. package/dist/src/tools/ls.test.js +32 -33
  288. package/dist/src/tools/ls.test.js.map +1 -1
  289. package/dist/src/tools/mcp-client.js +24 -52
  290. package/dist/src/tools/mcp-client.js.map +1 -1
  291. package/dist/src/tools/mcp-client.test.js +18 -0
  292. package/dist/src/tools/mcp-client.test.js.map +1 -1
  293. package/dist/src/tools/mcp-tool.d.ts +1 -0
  294. package/dist/src/tools/mcp-tool.js +5 -2
  295. package/dist/src/tools/mcp-tool.js.map +1 -1
  296. package/dist/src/tools/memoryTool.js +1 -1
  297. package/dist/src/tools/memoryTool.js.map +1 -1
  298. package/dist/src/tools/memoryTool.test.js +1 -1
  299. package/dist/src/tools/memoryTool.test.js.map +1 -1
  300. package/dist/src/tools/modifiable-tool.d.ts +5 -1
  301. package/dist/src/tools/modifiable-tool.js +34 -13
  302. package/dist/src/tools/modifiable-tool.js.map +1 -1
  303. package/dist/src/tools/modifiable-tool.test.js +56 -22
  304. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  305. package/dist/src/tools/read-file.d.ts +2 -2
  306. package/dist/src/tools/read-file.js +20 -24
  307. package/dist/src/tools/read-file.js.map +1 -1
  308. package/dist/src/tools/read-file.test.js +63 -51
  309. package/dist/src/tools/read-file.test.js.map +1 -1
  310. package/dist/src/tools/read-many-files.d.ts +2 -9
  311. package/dist/src/tools/read-many-files.js +10 -21
  312. package/dist/src/tools/read-many-files.js.map +1 -1
  313. package/dist/src/tools/read-many-files.test.js +37 -35
  314. package/dist/src/tools/read-many-files.test.js.map +1 -1
  315. package/dist/src/tools/ripGrep.d.ts +25 -8
  316. package/dist/src/tools/ripGrep.js +148 -176
  317. package/dist/src/tools/ripGrep.js.map +1 -1
  318. package/dist/src/tools/ripGrep.test.js +383 -58
  319. package/dist/src/tools/ripGrep.test.js.map +1 -1
  320. package/dist/src/tools/shell.d.ts +1 -1
  321. package/dist/src/tools/shell.js +17 -15
  322. package/dist/src/tools/shell.js.map +1 -1
  323. package/dist/src/tools/shell.test.js +66 -36
  324. package/dist/src/tools/shell.test.js.map +1 -1
  325. package/dist/src/tools/smart-edit.d.ts +6 -1
  326. package/dist/src/tools/smart-edit.js +18 -17
  327. package/dist/src/tools/smart-edit.js.map +1 -1
  328. package/dist/src/tools/smart-edit.test.js +49 -24
  329. package/dist/src/tools/smart-edit.test.js.map +1 -1
  330. package/dist/src/tools/tool-registry.d.ts +29 -4
  331. package/dist/src/tools/tool-registry.js +108 -29
  332. package/dist/src/tools/tool-registry.js.map +1 -1
  333. package/dist/src/tools/tool-registry.test.js +134 -4
  334. package/dist/src/tools/tool-registry.test.js.map +1 -1
  335. package/dist/src/tools/tools.d.ts +2 -1
  336. package/dist/src/tools/tools.js +5 -2
  337. package/dist/src/tools/tools.js.map +1 -1
  338. package/dist/src/tools/web-fetch.js +2 -4
  339. package/dist/src/tools/web-fetch.js.map +1 -1
  340. package/dist/src/tools/web-fetch.test.js +11 -4
  341. package/dist/src/tools/web-fetch.test.js.map +1 -1
  342. package/dist/src/tools/web-search.js +1 -2
  343. package/dist/src/tools/web-search.js.map +1 -1
  344. package/dist/src/tools/web-search.test.js +11 -5
  345. package/dist/src/tools/web-search.test.js.map +1 -1
  346. package/dist/src/tools/write-file.js +31 -31
  347. package/dist/src/tools/write-file.js.map +1 -1
  348. package/dist/src/tools/write-file.test.js +24 -5
  349. package/dist/src/tools/write-file.test.js.map +1 -1
  350. package/dist/src/tools/write-todos.d.ts +29 -0
  351. package/dist/src/tools/write-todos.js +34 -1
  352. package/dist/src/tools/write-todos.js.map +1 -1
  353. package/dist/src/utils/editCorrector.js +4 -15
  354. package/dist/src/utils/editCorrector.js.map +1 -1
  355. package/dist/src/utils/editCorrector.test.js +16 -0
  356. package/dist/src/utils/editCorrector.test.js.map +1 -1
  357. package/dist/src/utils/editor.d.ts +3 -1
  358. package/dist/src/utils/editor.js +18 -1
  359. package/dist/src/utils/editor.js.map +1 -1
  360. package/dist/src/utils/editor.test.js +11 -0
  361. package/dist/src/utils/editor.test.js.map +1 -1
  362. package/dist/src/utils/environmentContext.js +3 -1
  363. package/dist/src/utils/environmentContext.js.map +1 -1
  364. package/dist/src/utils/environmentContext.test.js +6 -0
  365. package/dist/src/utils/environmentContext.test.js.map +1 -1
  366. package/dist/src/utils/events.d.ts +14 -11
  367. package/dist/src/utils/events.js +1 -14
  368. package/dist/src/utils/events.js.map +1 -1
  369. package/dist/src/utils/extensionLoader.d.ts +8 -0
  370. package/dist/src/utils/extensionLoader.js +61 -15
  371. package/dist/src/utils/extensionLoader.js.map +1 -1
  372. package/dist/src/utils/extensionLoader.test.js +83 -19
  373. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  374. package/dist/src/utils/fileUtils.test.js +75 -60
  375. package/dist/src/utils/fileUtils.test.js.map +1 -1
  376. package/dist/src/utils/flashFallback.test.js +2 -2
  377. package/dist/src/utils/flashFallback.test.js.map +1 -1
  378. package/dist/src/utils/googleQuotaErrors.d.ts +2 -1
  379. package/dist/src/utils/googleQuotaErrors.js +20 -12
  380. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  381. package/dist/src/utils/httpErrors.d.ts +18 -0
  382. package/dist/src/utils/httpErrors.js +36 -0
  383. package/dist/src/utils/httpErrors.js.map +1 -0
  384. package/dist/src/utils/llm-edit-fixer.js +1 -2
  385. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  386. package/dist/src/utils/llm-edit-fixer.test.js +16 -1
  387. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  388. package/dist/src/utils/memoryDiscovery.d.ts +8 -0
  389. package/dist/src/utils/memoryDiscovery.js +24 -0
  390. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  391. package/dist/src/utils/memoryDiscovery.test.js +43 -1
  392. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  393. package/dist/src/utils/nextSpeakerChecker.js +1 -2
  394. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  395. package/dist/src/utils/nextSpeakerChecker.test.js +10 -4
  396. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  397. package/dist/src/utils/pathReader.js +4 -4
  398. package/dist/src/utils/pathReader.js.map +1 -1
  399. package/dist/src/utils/pathReader.test.js +44 -1
  400. package/dist/src/utils/pathReader.test.js.map +1 -1
  401. package/dist/src/utils/paths.d.ts +1 -1
  402. package/dist/src/utils/paths.js +5 -3
  403. package/dist/src/utils/paths.js.map +1 -1
  404. package/dist/src/utils/retry.d.ts +0 -9
  405. package/dist/src/utils/retry.js +24 -28
  406. package/dist/src/utils/retry.js.map +1 -1
  407. package/dist/src/utils/retry.test.js +51 -0
  408. package/dist/src/utils/retry.test.js.map +1 -1
  409. package/dist/src/utils/shell-utils.js +5 -3
  410. package/dist/src/utils/shell-utils.js.map +1 -1
  411. package/dist/src/utils/shell-utils.test.js +9 -9
  412. package/dist/src/utils/shell-utils.test.js.map +1 -1
  413. package/dist/src/utils/summarizer.d.ts +4 -2
  414. package/dist/src/utils/summarizer.js +6 -8
  415. package/dist/src/utils/summarizer.js.map +1 -1
  416. package/dist/src/utils/summarizer.test.js +32 -11
  417. package/dist/src/utils/summarizer.test.js.map +1 -1
  418. package/dist/src/utils/workspaceContext.d.ts +4 -3
  419. package/dist/src/utils/workspaceContext.js +10 -11
  420. package/dist/src/utils/workspaceContext.js.map +1 -1
  421. package/dist/src/utils/workspaceContext.test.js +1 -1
  422. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  423. package/dist/tsconfig.tsbuildinfo +1 -1
  424. package/package.json +1 -1
@@ -7,6 +7,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
7
  import { CoreToolScheduler, convertToFunctionResponse, truncateAndSaveToFile, } from './coreToolScheduler.js';
8
8
  import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, } from '../index.js';
9
9
  import { MockModifiableTool, MockTool, MOCK_TOOL_SHOULD_CONFIRM_EXECUTE, } from '../test-utils/mock-tool.js';
10
+ import * as modifiableToolModule from '../tools/modifiable-tool.js';
10
11
  import * as fs from 'node:fs/promises';
11
12
  import * as path from 'node:path';
12
13
  import { isShellInvocationAllowlisted } from '../utils/shell-utils.js';
@@ -122,6 +123,50 @@ async function waitForStatus(onToolCallsUpdate, status, timeout = 5000) {
122
123
  check();
123
124
  });
124
125
  }
126
+ function createMockConfig(overrides = {}) {
127
+ const defaultToolRegistry = {
128
+ getTool: () => undefined,
129
+ getToolByName: () => undefined,
130
+ getFunctionDeclarations: () => [],
131
+ tools: new Map(),
132
+ discovery: {},
133
+ registerTool: () => { },
134
+ getToolByDisplayName: () => undefined,
135
+ getTools: () => [],
136
+ discoverTools: async () => { },
137
+ getAllTools: () => [],
138
+ getToolsByServer: () => [],
139
+ };
140
+ const baseConfig = {
141
+ getSessionId: () => 'test-session-id',
142
+ getUsageStatisticsEnabled: () => true,
143
+ getDebugMode: () => false,
144
+ getApprovalMode: () => ApprovalMode.DEFAULT,
145
+ setApprovalMode: () => { },
146
+ getAllowedTools: () => [],
147
+ getContentGeneratorConfig: () => ({
148
+ model: 'test-model',
149
+ authType: 'oauth-personal',
150
+ }),
151
+ getShellExecutionConfig: () => ({
152
+ terminalWidth: 90,
153
+ terminalHeight: 30,
154
+ }),
155
+ storage: {
156
+ getProjectTempDir: () => '/tmp',
157
+ },
158
+ getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
159
+ getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
160
+ getToolRegistry: () => defaultToolRegistry,
161
+ getUseSmartEdit: () => false,
162
+ getUseModelRouter: () => false,
163
+ getGeminiClient: () => null,
164
+ getEnableMessageBusIntegration: () => false,
165
+ getMessageBus: () => null,
166
+ getPolicyEngine: () => null,
167
+ };
168
+ return { ...baseConfig, ...overrides };
169
+ }
125
170
  describe('CoreToolScheduler', () => {
126
171
  it('should cancel a tool call if the signal is aborted before confirmation', async () => {
127
172
  const mockTool = new MockTool({
@@ -144,33 +189,10 @@ describe('CoreToolScheduler', () => {
144
189
  };
145
190
  const onAllToolCallsComplete = vi.fn();
146
191
  const onToolCallsUpdate = vi.fn();
147
- const mockConfig = {
148
- getSessionId: () => 'test-session-id',
149
- getUsageStatisticsEnabled: () => true,
150
- getDebugMode: () => false,
151
- getApprovalMode: () => ApprovalMode.DEFAULT,
152
- getAllowedTools: () => [],
153
- getContentGeneratorConfig: () => ({
154
- model: 'test-model',
155
- authType: 'oauth-personal',
156
- }),
157
- getShellExecutionConfig: () => ({
158
- terminalWidth: 90,
159
- terminalHeight: 30,
160
- }),
161
- storage: {
162
- getProjectTempDir: () => '/tmp',
163
- },
164
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
165
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
192
+ const mockConfig = createMockConfig({
166
193
  getToolRegistry: () => mockToolRegistry,
167
- getUseSmartEdit: () => false,
168
- getUseModelRouter: () => false,
169
- getGeminiClient: () => null, // No client needed for these tests
170
- getEnableMessageBusIntegration: () => false,
171
- getMessageBus: () => null,
172
- getPolicyEngine: () => null,
173
- };
194
+ isInteractive: () => false,
195
+ });
174
196
  const scheduler = new CoreToolScheduler({
175
197
  config: mockConfig,
176
198
  onAllToolCallsComplete,
@@ -231,33 +253,10 @@ describe('CoreToolScheduler', () => {
231
253
  };
232
254
  const onAllToolCallsComplete = vi.fn();
233
255
  const onToolCallsUpdate = vi.fn();
234
- const mockConfig = {
235
- getSessionId: () => 'test-session-id',
236
- getUsageStatisticsEnabled: () => true,
237
- getDebugMode: () => false,
238
- getApprovalMode: () => ApprovalMode.DEFAULT,
239
- getAllowedTools: () => [],
240
- getContentGeneratorConfig: () => ({
241
- model: 'test-model',
242
- authType: 'oauth-personal',
243
- }),
244
- getShellExecutionConfig: () => ({
245
- terminalWidth: 90,
246
- terminalHeight: 30,
247
- }),
248
- storage: {
249
- getProjectTempDir: () => '/tmp',
250
- },
251
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
252
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
256
+ const mockConfig = createMockConfig({
253
257
  getToolRegistry: () => mockToolRegistry,
254
- getUseSmartEdit: () => false,
255
- getUseModelRouter: () => false,
256
- getGeminiClient: () => null, // No client needed for these tests
257
- getEnableMessageBusIntegration: () => false,
258
- getMessageBus: () => null,
259
- getPolicyEngine: () => null,
260
- };
258
+ isInteractive: () => false,
259
+ });
261
260
  const scheduler = new CoreToolScheduler({
262
261
  config: mockConfig,
263
262
  onAllToolCallsComplete,
@@ -344,33 +343,10 @@ describe('CoreToolScheduler', () => {
344
343
  };
345
344
  const onAllToolCallsComplete = vi.fn();
346
345
  const onToolCallsUpdate = vi.fn();
347
- const mockConfig = {
348
- getSessionId: () => 'test-session-id',
349
- getUsageStatisticsEnabled: () => true,
350
- getDebugMode: () => false,
351
- getApprovalMode: () => ApprovalMode.DEFAULT,
352
- getAllowedTools: () => [],
353
- getContentGeneratorConfig: () => ({
354
- model: 'test-model',
355
- authType: 'oauth-personal',
356
- }),
357
- getShellExecutionConfig: () => ({
358
- terminalWidth: 90,
359
- terminalHeight: 30,
360
- }),
361
- storage: {
362
- getProjectTempDir: () => '/tmp',
363
- },
364
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
365
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
346
+ const mockConfig = createMockConfig({
366
347
  getToolRegistry: () => mockToolRegistry,
367
- getUseSmartEdit: () => false,
368
- getUseModelRouter: () => false,
369
- getGeminiClient: () => null, // No client needed for these tests
370
- getEnableMessageBusIntegration: () => false,
371
- getMessageBus: () => null,
372
- getPolicyEngine: () => null,
373
- };
348
+ isInteractive: () => false,
349
+ });
374
350
  const scheduler = new CoreToolScheduler({
375
351
  config: mockConfig,
376
352
  onAllToolCallsComplete,
@@ -438,33 +414,10 @@ describe('CoreToolScheduler', () => {
438
414
  };
439
415
  const onAllToolCallsComplete = vi.fn();
440
416
  const onToolCallsUpdate = vi.fn();
441
- const mockConfig = {
442
- getSessionId: () => 'test-session-id',
443
- getUsageStatisticsEnabled: () => true,
444
- getDebugMode: () => false,
445
- getApprovalMode: () => ApprovalMode.DEFAULT,
446
- getAllowedTools: () => [],
447
- getContentGeneratorConfig: () => ({
448
- model: 'test-model',
449
- authType: 'oauth-personal',
450
- }),
451
- getShellExecutionConfig: () => ({
452
- terminalWidth: 90,
453
- terminalHeight: 30,
454
- }),
455
- storage: {
456
- getProjectTempDir: () => '/tmp',
457
- },
458
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
459
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
417
+ const mockConfig = createMockConfig({
460
418
  getToolRegistry: () => mockToolRegistry,
461
- getUseSmartEdit: () => false,
462
- getUseModelRouter: () => false,
463
- getGeminiClient: () => null,
464
- getEnableMessageBusIntegration: () => false,
465
- getMessageBus: () => null,
466
- getPolicyEngine: () => null,
467
- };
419
+ isInteractive: () => false,
420
+ });
468
421
  const scheduler = new CoreToolScheduler({
469
422
  config: mockConfig,
470
423
  onAllToolCallsComplete,
@@ -493,15 +446,10 @@ describe('CoreToolScheduler', () => {
493
446
  const mockToolRegistry = {
494
447
  getAllToolNames: () => ['list_files', 'read_file', 'write_file'],
495
448
  };
496
- const mockConfig = {
449
+ const mockConfig = createMockConfig({
497
450
  getToolRegistry: () => mockToolRegistry,
498
- getUseSmartEdit: () => false,
499
- getUseModelRouter: () => false,
500
- getGeminiClient: () => null, // No client needed for these tests
501
- getEnableMessageBusIntegration: () => false,
502
- getMessageBus: () => null,
503
- getPolicyEngine: () => null,
504
- };
451
+ isInteractive: () => false,
452
+ });
505
453
  // Create scheduler
506
454
  const scheduler = new CoreToolScheduler({
507
455
  config: mockConfig,
@@ -543,33 +491,10 @@ describe('CoreToolScheduler with payload', () => {
543
491
  };
544
492
  const onAllToolCallsComplete = vi.fn();
545
493
  const onToolCallsUpdate = vi.fn();
546
- const mockConfig = {
547
- getSessionId: () => 'test-session-id',
548
- getUsageStatisticsEnabled: () => true,
549
- getDebugMode: () => false,
550
- getApprovalMode: () => ApprovalMode.DEFAULT,
551
- getAllowedTools: () => [],
552
- getContentGeneratorConfig: () => ({
553
- model: 'test-model',
554
- authType: 'oauth-personal',
555
- }),
556
- getShellExecutionConfig: () => ({
557
- terminalWidth: 90,
558
- terminalHeight: 30,
559
- }),
560
- storage: {
561
- getProjectTempDir: () => '/tmp',
562
- },
563
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
564
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
494
+ const mockConfig = createMockConfig({
565
495
  getToolRegistry: () => mockToolRegistry,
566
- getUseSmartEdit: () => false,
567
- getUseModelRouter: () => false,
568
- getGeminiClient: () => null, // No client needed for these tests
569
- getEnableMessageBusIntegration: () => false,
570
- getMessageBus: () => null,
571
- getPolicyEngine: () => null,
572
- };
496
+ isInteractive: () => false,
497
+ });
573
498
  const scheduler = new CoreToolScheduler({
574
499
  config: mockConfig,
575
500
  onAllToolCallsComplete,
@@ -823,31 +748,10 @@ describe('CoreToolScheduler edit cancellation', () => {
823
748
  };
824
749
  const onAllToolCallsComplete = vi.fn();
825
750
  const onToolCallsUpdate = vi.fn();
826
- const mockConfig = {
827
- getSessionId: () => 'test-session-id',
828
- getUsageStatisticsEnabled: () => true,
829
- getDebugMode: () => false,
830
- getApprovalMode: () => ApprovalMode.DEFAULT,
831
- getAllowedTools: () => [],
832
- getContentGeneratorConfig: () => ({
833
- model: 'test-model',
834
- authType: 'oauth-personal',
835
- }),
836
- getShellExecutionConfig: () => ({
837
- terminalWidth: 90,
838
- terminalHeight: 30,
839
- }),
840
- storage: {
841
- getProjectTempDir: () => '/tmp',
842
- },
751
+ const mockConfig = createMockConfig({
843
752
  getToolRegistry: () => mockToolRegistry,
844
- getUseSmartEdit: () => false,
845
- getUseModelRouter: () => false,
846
- getGeminiClient: () => null, // No client needed for these tests
847
- getEnableMessageBusIntegration: () => false,
848
- getMessageBus: () => null,
849
- getPolicyEngine: () => null,
850
- };
753
+ isInteractive: () => false,
754
+ });
851
755
  const scheduler = new CoreToolScheduler({
852
756
  config: mockConfig,
853
757
  onAllToolCallsComplete,
@@ -912,33 +816,11 @@ describe('CoreToolScheduler YOLO mode', () => {
912
816
  const onAllToolCallsComplete = vi.fn();
913
817
  const onToolCallsUpdate = vi.fn();
914
818
  // Configure the scheduler for YOLO mode.
915
- const mockConfig = {
916
- getSessionId: () => 'test-session-id',
917
- getUsageStatisticsEnabled: () => true,
918
- getDebugMode: () => false,
919
- getApprovalMode: () => ApprovalMode.YOLO,
920
- getAllowedTools: () => [],
921
- getContentGeneratorConfig: () => ({
922
- model: 'test-model',
923
- authType: 'oauth-personal',
924
- }),
925
- getShellExecutionConfig: () => ({
926
- terminalWidth: 90,
927
- terminalHeight: 30,
928
- }),
929
- storage: {
930
- getProjectTempDir: () => '/tmp',
931
- },
819
+ const mockConfig = createMockConfig({
932
820
  getToolRegistry: () => mockToolRegistry,
933
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
934
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
935
- getUseSmartEdit: () => false,
936
- getUseModelRouter: () => false,
937
- getGeminiClient: () => null, // No client needed for these tests
938
- getEnableMessageBusIntegration: () => false,
939
- getMessageBus: () => null,
940
- getPolicyEngine: () => null,
941
- };
821
+ getApprovalMode: () => ApprovalMode.YOLO,
822
+ isInteractive: () => false,
823
+ });
942
824
  const scheduler = new CoreToolScheduler({
943
825
  config: mockConfig,
944
826
  onAllToolCallsComplete,
@@ -1009,33 +891,11 @@ describe('CoreToolScheduler request queueing', () => {
1009
891
  };
1010
892
  const onAllToolCallsComplete = vi.fn();
1011
893
  const onToolCallsUpdate = vi.fn();
1012
- const mockConfig = {
1013
- getSessionId: () => 'test-session-id',
1014
- getUsageStatisticsEnabled: () => true,
1015
- getDebugMode: () => false,
1016
- getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
1017
- getAllowedTools: () => [],
1018
- getContentGeneratorConfig: () => ({
1019
- model: 'test-model',
1020
- authType: 'oauth-personal',
1021
- }),
1022
- getShellExecutionConfig: () => ({
1023
- terminalWidth: 90,
1024
- terminalHeight: 30,
1025
- }),
1026
- storage: {
1027
- getProjectTempDir: () => '/tmp',
1028
- },
1029
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1030
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
894
+ const mockConfig = createMockConfig({
1031
895
  getToolRegistry: () => mockToolRegistry,
1032
- getUseSmartEdit: () => false,
1033
- getUseModelRouter: () => false,
1034
- getGeminiClient: () => null, // No client needed for these tests
1035
- getEnableMessageBusIntegration: () => false,
1036
- getMessageBus: () => null,
1037
- getPolicyEngine: () => null,
1038
- };
896
+ getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
897
+ isInteractive: () => false,
898
+ });
1039
899
  const scheduler = new CoreToolScheduler({
1040
900
  config: mockConfig,
1041
901
  onAllToolCallsComplete,
@@ -1122,35 +982,15 @@ describe('CoreToolScheduler request queueing', () => {
1122
982
  const onAllToolCallsComplete = vi.fn();
1123
983
  const onToolCallsUpdate = vi.fn();
1124
984
  // Configure the scheduler to auto-approve the specific tool call.
1125
- const mockConfig = {
1126
- getSessionId: () => 'test-session-id',
1127
- getUsageStatisticsEnabled: () => true,
1128
- getDebugMode: () => false,
1129
- getApprovalMode: () => ApprovalMode.DEFAULT, // Not YOLO mode
985
+ const mockConfig = createMockConfig({
1130
986
  getAllowedTools: () => ['mockTool'], // Auto-approve this tool
1131
987
  getToolRegistry: () => toolRegistry,
1132
- getContentGeneratorConfig: () => ({
1133
- model: 'test-model',
1134
- authType: 'oauth-personal',
1135
- }),
1136
988
  getShellExecutionConfig: () => ({
1137
989
  terminalWidth: 80,
1138
990
  terminalHeight: 24,
1139
991
  }),
1140
- getTerminalWidth: vi.fn(() => 80),
1141
- getTerminalHeight: vi.fn(() => 24),
1142
- storage: {
1143
- getProjectTempDir: () => '/tmp',
1144
- },
1145
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1146
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1147
- getUseSmartEdit: () => false,
1148
- getUseModelRouter: () => false,
1149
- getGeminiClient: () => null, // No client needed for these tests
1150
- getEnableMessageBusIntegration: () => false,
1151
- getMessageBus: () => null,
1152
- getPolicyEngine: () => null,
1153
- };
992
+ isInteractive: () => false,
993
+ });
1154
994
  const scheduler = new CoreToolScheduler({
1155
995
  config: mockConfig,
1156
996
  onAllToolCallsComplete,
@@ -1231,35 +1071,15 @@ describe('CoreToolScheduler request queueing', () => {
1231
1071
  };
1232
1072
  const onAllToolCallsComplete = vi.fn();
1233
1073
  const onToolCallsUpdate = vi.fn();
1234
- const mockConfig = {
1235
- getSessionId: () => 'test-session-id',
1236
- getUsageStatisticsEnabled: () => true,
1237
- getDebugMode: () => false,
1238
- getApprovalMode: () => ApprovalMode.DEFAULT,
1074
+ const mockConfig = createMockConfig({
1239
1075
  getAllowedTools: () => ['run_shell_command(git)'],
1240
- getContentGeneratorConfig: () => ({
1241
- model: 'test-model',
1242
- authType: 'oauth-personal',
1243
- }),
1244
1076
  getShellExecutionConfig: () => ({
1245
1077
  terminalWidth: 80,
1246
1078
  terminalHeight: 24,
1247
1079
  }),
1248
- getTerminalWidth: vi.fn(() => 80),
1249
- getTerminalHeight: vi.fn(() => 24),
1250
- storage: {
1251
- getProjectTempDir: () => '/tmp',
1252
- },
1253
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1254
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1255
1080
  getToolRegistry: () => toolRegistry,
1256
- getUseSmartEdit: () => false,
1257
- getUseModelRouter: () => false,
1258
- getGeminiClient: () => null,
1259
- getEnableMessageBusIntegration: () => false,
1260
- getMessageBus: () => null,
1261
- getPolicyEngine: () => null,
1262
- };
1081
+ isInteractive: () => false,
1082
+ });
1263
1083
  const scheduler = new CoreToolScheduler({
1264
1084
  config: mockConfig,
1265
1085
  onAllToolCallsComplete,
@@ -1305,33 +1125,11 @@ describe('CoreToolScheduler request queueing', () => {
1305
1125
  };
1306
1126
  const onAllToolCallsComplete = vi.fn();
1307
1127
  const onToolCallsUpdate = vi.fn();
1308
- const mockConfig = {
1309
- getSessionId: () => 'test-session-id',
1310
- getUsageStatisticsEnabled: () => true,
1311
- getDebugMode: () => false,
1312
- getApprovalMode: () => ApprovalMode.YOLO,
1313
- getAllowedTools: () => [],
1314
- getContentGeneratorConfig: () => ({
1315
- model: 'test-model',
1316
- authType: 'oauth-personal',
1317
- }),
1318
- getShellExecutionConfig: () => ({
1319
- terminalWidth: 90,
1320
- terminalHeight: 30,
1321
- }),
1322
- storage: {
1323
- getProjectTempDir: () => '/tmp',
1324
- },
1325
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1326
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1128
+ const mockConfig = createMockConfig({
1327
1129
  getToolRegistry: () => mockToolRegistry,
1328
- getUseSmartEdit: () => false,
1329
- getUseModelRouter: () => false,
1330
- getGeminiClient: () => null, // No client needed for these tests
1331
- getEnableMessageBusIntegration: () => false,
1332
- getMessageBus: () => null,
1333
- getPolicyEngine: () => null,
1334
- };
1130
+ getApprovalMode: () => ApprovalMode.YOLO,
1131
+ isInteractive: () => false,
1132
+ });
1335
1133
  const scheduler = new CoreToolScheduler({
1336
1134
  config: mockConfig,
1337
1135
  onAllToolCallsComplete,
@@ -1368,31 +1166,13 @@ describe('CoreToolScheduler request queueing', () => {
1368
1166
  });
1369
1167
  it('should auto-approve remaining tool calls when first tool call is approved with ProceedAlways', async () => {
1370
1168
  let approvalMode = ApprovalMode.DEFAULT;
1371
- const mockConfig = {
1372
- getSessionId: () => 'test-session-id',
1373
- getUsageStatisticsEnabled: () => true,
1374
- getDebugMode: () => false,
1169
+ const mockConfig = createMockConfig({
1375
1170
  getApprovalMode: () => approvalMode,
1376
- getAllowedTools: () => [],
1377
1171
  setApprovalMode: (mode) => {
1378
1172
  approvalMode = mode;
1379
1173
  },
1380
- getShellExecutionConfig: () => ({
1381
- terminalWidth: 90,
1382
- terminalHeight: 30,
1383
- }),
1384
- storage: {
1385
- getProjectTempDir: () => '/tmp',
1386
- },
1387
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1388
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1389
- getUseSmartEdit: () => false,
1390
- getUseModelRouter: () => false,
1391
- getGeminiClient: () => null, // No client needed for these tests
1392
- getEnableMessageBusIntegration: () => false,
1393
- getMessageBus: () => null,
1394
- getPolicyEngine: () => null,
1395
- };
1174
+ isInteractive: () => false,
1175
+ });
1396
1176
  const testTool = new TestApprovalTool(mockConfig);
1397
1177
  const toolRegistry = {
1398
1178
  getTool: () => testTool,
@@ -1530,32 +1310,11 @@ describe('CoreToolScheduler Sequential Execution', () => {
1530
1310
  };
1531
1311
  const onAllToolCallsComplete = vi.fn();
1532
1312
  const onToolCallsUpdate = vi.fn();
1533
- const mockConfig = {
1534
- getSessionId: () => 'test-session-id',
1535
- getUsageStatisticsEnabled: () => true,
1536
- getDebugMode: () => false,
1537
- getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
1538
- getAllowedTools: () => [],
1539
- getContentGeneratorConfig: () => ({
1540
- model: 'test-model',
1541
- authType: 'oauth-personal',
1542
- }),
1543
- getShellExecutionConfig: () => ({
1544
- terminalWidth: 90,
1545
- terminalHeight: 30,
1546
- }),
1547
- storage: {
1548
- getProjectTempDir: () => '/tmp',
1549
- },
1313
+ const mockConfig = createMockConfig({
1550
1314
  getToolRegistry: () => mockToolRegistry,
1551
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1552
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1553
- getUseSmartEdit: () => false,
1554
- getUseModelRouter: () => false,
1555
- getGeminiClient: () => null,
1556
- getEnableMessageBusIntegration: () => false,
1557
- getMessageBus: () => null,
1558
- };
1315
+ getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
1316
+ isInteractive: () => false,
1317
+ });
1559
1318
  const scheduler = new CoreToolScheduler({
1560
1319
  config: mockConfig,
1561
1320
  onAllToolCallsComplete,
@@ -1638,32 +1397,11 @@ describe('CoreToolScheduler Sequential Execution', () => {
1638
1397
  };
1639
1398
  const onAllToolCallsComplete = vi.fn();
1640
1399
  const onToolCallsUpdate = vi.fn();
1641
- const mockConfig = {
1642
- getSessionId: () => 'test-session-id',
1643
- getUsageStatisticsEnabled: () => true,
1644
- getDebugMode: () => false,
1645
- getApprovalMode: () => ApprovalMode.YOLO,
1646
- getAllowedTools: () => [],
1647
- getContentGeneratorConfig: () => ({
1648
- model: 'test-model',
1649
- authType: 'oauth-personal',
1650
- }),
1651
- getShellExecutionConfig: () => ({
1652
- terminalWidth: 90,
1653
- terminalHeight: 30,
1654
- }),
1655
- storage: {
1656
- getProjectTempDir: () => '/tmp',
1657
- },
1400
+ const mockConfig = createMockConfig({
1658
1401
  getToolRegistry: () => mockToolRegistry,
1659
- getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
1660
- getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
1661
- getUseSmartEdit: () => false,
1662
- getUseModelRouter: () => false,
1663
- getGeminiClient: () => null,
1664
- getEnableMessageBusIntegration: () => false,
1665
- getMessageBus: () => null,
1666
- };
1402
+ getApprovalMode: () => ApprovalMode.YOLO,
1403
+ isInteractive: () => false,
1404
+ });
1667
1405
  const scheduler = new CoreToolScheduler({
1668
1406
  config: mockConfig,
1669
1407
  onAllToolCallsComplete,
@@ -1720,6 +1458,62 @@ describe('CoreToolScheduler Sequential Execution', () => {
1720
1458
  expect(call2?.status).toBe('cancelled');
1721
1459
  expect(call3?.status).toBe('cancelled');
1722
1460
  });
1461
+ it('should pass confirmation diff data into modifyWithEditor overrides', async () => {
1462
+ const modifyWithEditorSpy = vi
1463
+ .spyOn(modifiableToolModule, 'modifyWithEditor')
1464
+ .mockResolvedValue({
1465
+ updatedParams: { param: 'updated' },
1466
+ updatedDiff: 'updated diff',
1467
+ });
1468
+ const mockModifiableTool = new MockModifiableTool('mockModifiableTool');
1469
+ const mockToolRegistry = {
1470
+ getTool: () => mockModifiableTool,
1471
+ getToolByName: () => mockModifiableTool,
1472
+ getFunctionDeclarations: () => [],
1473
+ tools: new Map(),
1474
+ discovery: {},
1475
+ registerTool: () => { },
1476
+ getToolByDisplayName: () => mockModifiableTool,
1477
+ getTools: () => [],
1478
+ discoverTools: async () => { },
1479
+ getAllTools: () => [],
1480
+ getToolsByServer: () => [],
1481
+ };
1482
+ const onAllToolCallsComplete = vi.fn();
1483
+ const onToolCallsUpdate = vi.fn();
1484
+ const mockConfig = createMockConfig({
1485
+ getToolRegistry: () => mockToolRegistry,
1486
+ });
1487
+ const scheduler = new CoreToolScheduler({
1488
+ config: mockConfig,
1489
+ onAllToolCallsComplete,
1490
+ onToolCallsUpdate,
1491
+ getPreferredEditor: () => 'vscode',
1492
+ onEditorClose: vi.fn(),
1493
+ });
1494
+ const abortController = new AbortController();
1495
+ await scheduler.schedule([
1496
+ {
1497
+ callId: '1',
1498
+ name: 'mockModifiableTool',
1499
+ args: {},
1500
+ isClientInitiated: false,
1501
+ prompt_id: 'prompt-1',
1502
+ },
1503
+ ], abortController.signal);
1504
+ const toolCall = scheduler
1505
+ .toolCalls[0];
1506
+ expect(toolCall.status).toBe('awaiting_approval');
1507
+ const confirmationSignal = new AbortController().signal;
1508
+ await scheduler.handleConfirmationResponse(toolCall.request.callId, async () => { }, ToolConfirmationOutcome.ModifyWithEditor, confirmationSignal);
1509
+ expect(modifyWithEditorSpy).toHaveBeenCalled();
1510
+ const overrides = modifyWithEditorSpy.mock.calls[modifyWithEditorSpy.mock.calls.length - 1][5];
1511
+ expect(overrides).toEqual({
1512
+ currentContent: 'originalContent',
1513
+ proposedContent: 'newContent',
1514
+ });
1515
+ modifyWithEditorSpy.mockRestore();
1516
+ });
1723
1517
  });
1724
1518
  describe('truncateAndSaveToFile', () => {
1725
1519
  const mockWriteFile = vi.mocked(fs.writeFile);