@machina.ai/cell-cli-core 1.19.4-rc3 → 1.22.5-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 (504) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +1 -1
  5. package/dist/src/agents/delegate-to-agent-tool.d.ts +19 -0
  6. package/dist/src/agents/delegate-to-agent-tool.js +111 -0
  7. package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
  8. package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
  9. package/dist/src/agents/delegate-to-agent-tool.test.js +133 -0
  10. package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
  11. package/dist/src/agents/executor.js +12 -17
  12. package/dist/src/agents/executor.js.map +1 -1
  13. package/dist/src/agents/executor.test.js +8 -9
  14. package/dist/src/agents/executor.test.js.map +1 -1
  15. package/dist/src/agents/registry.d.ts +15 -0
  16. package/dist/src/agents/registry.js +58 -2
  17. package/dist/src/agents/registry.js.map +1 -1
  18. package/dist/src/agents/registry.test.js +61 -0
  19. package/dist/src/agents/registry.test.js.map +1 -1
  20. package/dist/src/availability/errorClassification.d.ts +7 -0
  21. package/dist/src/availability/errorClassification.js +20 -0
  22. package/dist/src/availability/errorClassification.js.map +1 -0
  23. package/dist/src/availability/modelAvailabilityService.d.ts +2 -1
  24. package/dist/src/availability/modelAvailabilityService.js +5 -2
  25. package/dist/src/availability/modelAvailabilityService.js.map +1 -1
  26. package/dist/src/availability/modelAvailabilityService.test.js +3 -3
  27. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
  28. package/dist/src/availability/modelPolicy.d.ts +8 -1
  29. package/dist/src/availability/policyCatalog.d.ts +4 -1
  30. package/dist/src/availability/policyCatalog.js +8 -9
  31. package/dist/src/availability/policyCatalog.js.map +1 -1
  32. package/dist/src/availability/policyCatalog.test.js +2 -2
  33. package/dist/src/availability/policyCatalog.test.js.map +1 -1
  34. package/dist/src/availability/policyHelpers.d.ts +51 -0
  35. package/dist/src/availability/policyHelpers.js +145 -0
  36. package/dist/src/availability/policyHelpers.js.map +1 -0
  37. package/dist/src/availability/policyHelpers.test.d.ts +6 -0
  38. package/dist/src/availability/policyHelpers.test.js +172 -0
  39. package/dist/src/availability/policyHelpers.test.js.map +1 -0
  40. package/dist/src/availability/testUtils.d.ts +10 -0
  41. package/dist/src/availability/testUtils.js +22 -0
  42. package/dist/src/availability/testUtils.js.map +1 -0
  43. package/dist/src/code_assist/experiments/client_metadata.js +3 -2
  44. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
  45. package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
  46. package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
  47. package/dist/src/code_assist/experiments/experiments.js +2 -2
  48. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  49. package/dist/src/code_assist/oauth2.d.ts +2 -0
  50. package/dist/src/code_assist/oauth2.js +41 -15
  51. package/dist/src/code_assist/oauth2.js.map +1 -1
  52. package/dist/src/code_assist/oauth2.test.js +114 -7
  53. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  54. package/dist/src/code_assist/server.d.ts +2 -1
  55. package/dist/src/code_assist/server.js +7 -4
  56. package/dist/src/code_assist/server.js.map +1 -1
  57. package/dist/src/code_assist/server.test.js +24 -0
  58. package/dist/src/code_assist/server.test.js.map +1 -1
  59. package/dist/src/code_assist/types.d.ts +14 -0
  60. package/dist/src/commands/init.d.ts +7 -0
  61. package/dist/src/commands/init.js +53 -0
  62. package/dist/src/commands/init.js.map +1 -0
  63. package/dist/src/commands/init.test.d.ts +6 -0
  64. package/dist/src/commands/init.test.js +25 -0
  65. package/dist/src/commands/init.test.js.map +1 -0
  66. package/dist/src/commands/restore.d.ts +9 -0
  67. package/dist/src/commands/restore.js +46 -0
  68. package/dist/src/commands/restore.js.map +1 -0
  69. package/dist/src/commands/restore.test.d.ts +6 -0
  70. package/dist/src/commands/restore.test.js +137 -0
  71. package/dist/src/commands/restore.test.js.map +1 -0
  72. package/dist/src/commands/types.d.ts +41 -0
  73. package/dist/src/commands/types.js +7 -0
  74. package/dist/src/commands/types.js.map +1 -0
  75. package/dist/src/config/config.d.ts +43 -3
  76. package/dist/src/config/config.js +182 -29
  77. package/dist/src/config/config.js.map +1 -1
  78. package/dist/src/config/config.test.js +217 -9
  79. package/dist/src/config/config.test.js.map +1 -1
  80. package/dist/src/config/defaultModelConfigs.js +21 -0
  81. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  82. package/dist/src/config/models.d.ts +33 -11
  83. package/dist/src/config/models.js +82 -24
  84. package/dist/src/config/models.js.map +1 -1
  85. package/dist/src/config/models.test.js +70 -76
  86. package/dist/src/config/models.test.js.map +1 -1
  87. package/dist/src/confirmation-bus/message-bus.js +1 -0
  88. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  89. package/dist/src/confirmation-bus/types.d.ts +4 -0
  90. package/dist/src/core/AuthenticatedContentGenerator.js +4 -4
  91. package/dist/src/core/AuthenticatedContentGenerator.js.map +1 -1
  92. package/dist/src/core/baseLlmClient.d.ts +3 -1
  93. package/dist/src/core/baseLlmClient.js +40 -3
  94. package/dist/src/core/baseLlmClient.js.map +1 -1
  95. package/dist/src/core/baseLlmClient.test.js +184 -7
  96. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  97. package/dist/src/core/client.js +52 -51
  98. package/dist/src/core/client.js.map +1 -1
  99. package/dist/src/core/client.test.js +178 -6
  100. package/dist/src/core/client.test.js.map +1 -1
  101. package/dist/src/core/contentGenerator.js +5 -3
  102. package/dist/src/core/contentGenerator.js.map +1 -1
  103. package/dist/src/core/contentGenerator.test.js +29 -22
  104. package/dist/src/core/contentGenerator.test.js.map +1 -1
  105. package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
  106. package/dist/src/core/coreToolHookTriggers.js +244 -0
  107. package/dist/src/core/coreToolHookTriggers.js.map +1 -0
  108. package/dist/src/core/coreToolScheduler.d.ts +1 -1
  109. package/dist/src/core/coreToolScheduler.js +87 -36
  110. package/dist/src/core/coreToolScheduler.js.map +1 -1
  111. package/dist/src/core/coreToolScheduler.test.js +201 -38
  112. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  113. package/dist/src/core/geminiChat.js +144 -41
  114. package/dist/src/core/geminiChat.js.map +1 -1
  115. package/dist/src/core/geminiChat.test.js +251 -192
  116. package/dist/src/core/geminiChat.test.js.map +1 -1
  117. package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
  118. package/dist/src/core/geminiChatHookTriggers.js +136 -0
  119. package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
  120. package/dist/src/core/geminiChat_network_retry.test.d.ts +6 -0
  121. package/dist/src/core/geminiChat_network_retry.test.js +198 -0
  122. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -0
  123. package/dist/src/core/logger.js.map +1 -1
  124. package/dist/src/core/loggingContentGenerator.js +9 -4
  125. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  126. package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -5
  127. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  128. package/dist/src/core/prompts.js +50 -29
  129. package/dist/src/core/prompts.js.map +1 -1
  130. package/dist/src/core/prompts.test.js +19 -8
  131. package/dist/src/core/prompts.test.js.map +1 -1
  132. package/dist/src/core/sessionHookTriggers.d.ts +28 -0
  133. package/dist/src/core/sessionHookTriggers.js +68 -0
  134. package/dist/src/core/sessionHookTriggers.js.map +1 -0
  135. package/dist/src/core/turn.d.ts +1 -0
  136. package/dist/src/core/turn.js +1 -1
  137. package/dist/src/core/turn.js.map +1 -1
  138. package/dist/src/fallback/handler.js +82 -69
  139. package/dist/src/fallback/handler.js.map +1 -1
  140. package/dist/src/fallback/handler.test.js +186 -170
  141. package/dist/src/fallback/handler.test.js.map +1 -1
  142. package/dist/src/fallback/types.d.ts +8 -0
  143. package/dist/src/generated/git-commit.d.ts +2 -2
  144. package/dist/src/generated/git-commit.js +2 -2
  145. package/dist/src/hooks/hookEventHandler.js +70 -12
  146. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  147. package/dist/src/hooks/hookEventHandler.test.js +8 -1
  148. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  149. package/dist/src/hooks/hookRegistry.d.ts +0 -7
  150. package/dist/src/hooks/hookRegistry.js +8 -21
  151. package/dist/src/hooks/hookRegistry.js.map +1 -1
  152. package/dist/src/hooks/hookRegistry.test.js +2 -7
  153. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  154. package/dist/src/hooks/hookRunner.js +19 -3
  155. package/dist/src/hooks/hookRunner.js.map +1 -1
  156. package/dist/src/hooks/hookRunner.test.js +2 -1
  157. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  158. package/dist/src/hooks/hookSystem.d.ts +0 -8
  159. package/dist/src/hooks/hookSystem.js +0 -18
  160. package/dist/src/hooks/hookSystem.js.map +1 -1
  161. package/dist/src/hooks/hookSystem.test.js +124 -18
  162. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  163. package/dist/src/hooks/index.d.ts +3 -1
  164. package/dist/src/hooks/index.js +3 -0
  165. package/dist/src/hooks/index.js.map +1 -1
  166. package/dist/src/hooks/types.d.ts +1 -2
  167. package/dist/src/hooks/types.js +0 -1
  168. package/dist/src/hooks/types.js.map +1 -1
  169. package/dist/src/ide/detect-ide.test.js +32 -1
  170. package/dist/src/ide/detect-ide.test.js.map +1 -1
  171. package/dist/src/ide/ide-client.js +5 -3
  172. package/dist/src/ide/ide-client.js.map +1 -1
  173. package/dist/src/ide/ide-client.test.js +17 -0
  174. package/dist/src/ide/ide-client.test.js.map +1 -1
  175. package/dist/src/ide/ide-installer.test.js +1 -1
  176. package/dist/src/ide/ide-installer.test.js.map +1 -1
  177. package/dist/src/index.d.ts +10 -0
  178. package/dist/src/index.js +10 -0
  179. package/dist/src/index.js.map +1 -1
  180. package/dist/src/mcp/auth-provider.d.ts +16 -0
  181. package/dist/src/mcp/auth-provider.js +7 -0
  182. package/dist/src/mcp/auth-provider.js.map +1 -0
  183. package/dist/src/mcp/google-auth-provider.d.ts +10 -2
  184. package/dist/src/mcp/google-auth-provider.js +28 -0
  185. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  186. package/dist/src/mcp/google-auth-provider.test.js +45 -0
  187. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  188. package/dist/src/mcp/mcpLauncher.js +6 -3
  189. package/dist/src/mcp/mcpLauncher.js.map +1 -1
  190. package/dist/src/mcp/oauth-provider.js.map +1 -1
  191. package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
  192. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  193. package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
  194. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
  195. package/dist/src/output/json-formatter.d.ts +2 -2
  196. package/dist/src/output/json-formatter.js +6 -3
  197. package/dist/src/output/json-formatter.js.map +1 -1
  198. package/dist/src/output/json-formatter.test.js +37 -9
  199. package/dist/src/output/json-formatter.test.js.map +1 -1
  200. package/dist/src/output/stream-json-formatter.js +6 -0
  201. package/dist/src/output/stream-json-formatter.js.map +1 -1
  202. package/dist/src/output/stream-json-formatter.test.js +98 -100
  203. package/dist/src/output/stream-json-formatter.test.js.map +1 -1
  204. package/dist/src/output/types.d.ts +3 -0
  205. package/dist/src/output/types.js.map +1 -1
  206. package/dist/src/policy/config.js +97 -11
  207. package/dist/src/policy/config.js.map +1 -1
  208. package/dist/src/policy/persistence.test.d.ts +6 -0
  209. package/dist/src/policy/persistence.test.js +154 -0
  210. package/dist/src/policy/persistence.test.js.map +1 -0
  211. package/dist/src/policy/policies/agent.toml +31 -0
  212. package/dist/src/policy/policies/read-only.toml +5 -0
  213. package/dist/src/policy/policy-engine.d.ts +10 -1
  214. package/dist/src/policy/policy-engine.js +79 -5
  215. package/dist/src/policy/policy-engine.js.map +1 -1
  216. package/dist/src/policy/policy-engine.test.js +26 -2
  217. package/dist/src/policy/policy-engine.test.js.map +1 -1
  218. package/dist/src/policy/policy-updater.test.d.ts +6 -0
  219. package/dist/src/policy/policy-updater.test.js +116 -0
  220. package/dist/src/policy/policy-updater.test.js.map +1 -0
  221. package/dist/src/policy/shell-safety.test.d.ts +6 -0
  222. package/dist/src/policy/shell-safety.test.js +75 -0
  223. package/dist/src/policy/shell-safety.test.js.map +1 -0
  224. package/dist/src/policy/toml-loader.d.ts +11 -5
  225. package/dist/src/policy/toml-loader.js +38 -23
  226. package/dist/src/policy/toml-loader.js.map +1 -1
  227. package/dist/src/policy/toml-loader.test.js +28 -7
  228. package/dist/src/policy/toml-loader.test.js.map +1 -1
  229. package/dist/src/policy/types.d.ts +15 -0
  230. package/dist/src/resources/resource-registry.d.ts +30 -0
  231. package/dist/src/resources/resource-registry.js +57 -0
  232. package/dist/src/resources/resource-registry.js.map +1 -0
  233. package/dist/src/resources/resource-registry.test.d.ts +6 -0
  234. package/dist/src/resources/resource-registry.test.js +54 -0
  235. package/dist/src/resources/resource-registry.test.js.map +1 -0
  236. package/dist/src/routing/modelRouterService.js +0 -15
  237. package/dist/src/routing/modelRouterService.js.map +1 -1
  238. package/dist/src/routing/modelRouterService.test.js +0 -62
  239. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  240. package/dist/src/routing/strategies/classifierStrategy.js +10 -21
  241. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  242. package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
  243. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  244. package/dist/src/routing/strategies/fallbackStrategy.js +23 -12
  245. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  246. package/dist/src/routing/strategies/fallbackStrategy.test.js +69 -39
  247. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  248. package/dist/src/routing/strategies/overrideStrategy.js +4 -3
  249. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  250. package/dist/src/safety/checker-runner.js +17 -6
  251. package/dist/src/safety/checker-runner.js.map +1 -1
  252. package/dist/src/services/chatCompressionService.js +17 -3
  253. package/dist/src/services/chatCompressionService.js.map +1 -1
  254. package/dist/src/services/chatCompressionService.test.js +9 -0
  255. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  256. package/dist/src/services/chatRecordingService.d.ts +14 -0
  257. package/dist/src/services/chatRecordingService.js +37 -0
  258. package/dist/src/services/chatRecordingService.js.map +1 -1
  259. package/dist/src/services/contextManager.d.ts +35 -0
  260. package/dist/src/services/contextManager.js +68 -0
  261. package/dist/src/services/contextManager.js.map +1 -0
  262. package/dist/src/services/contextManager.test.d.ts +6 -0
  263. package/dist/src/services/contextManager.test.js +105 -0
  264. package/dist/src/services/contextManager.test.js.map +1 -0
  265. package/dist/src/services/fileSystemService.d.ts +0 -9
  266. package/dist/src/services/fileSystemService.js +0 -11
  267. package/dist/src/services/fileSystemService.js.map +1 -1
  268. package/dist/src/services/gitService.js +5 -0
  269. package/dist/src/services/gitService.js.map +1 -1
  270. package/dist/src/services/gitService.test.js +28 -0
  271. package/dist/src/services/gitService.test.js.map +1 -1
  272. package/dist/src/services/loopDetectionService.js +3 -3
  273. package/dist/src/services/loopDetectionService.js.map +1 -1
  274. package/dist/src/services/modelConfig.golden.test.js +32 -0
  275. package/dist/src/services/modelConfig.golden.test.js.map +1 -1
  276. package/dist/src/services/modelConfigService.d.ts +3 -0
  277. package/dist/src/services/modelConfigService.js +3 -2
  278. package/dist/src/services/modelConfigService.js.map +1 -1
  279. package/dist/src/services/modelConfigService.test.js +110 -0
  280. package/dist/src/services/modelConfigService.test.js.map +1 -1
  281. package/dist/src/services/modelConfigServiceTestUtils.d.ts +10 -0
  282. package/dist/src/services/modelConfigServiceTestUtils.js +17 -0
  283. package/dist/src/services/modelConfigServiceTestUtils.js.map +1 -0
  284. package/dist/src/services/sessionSummaryService.d.ts +28 -0
  285. package/dist/src/services/sessionSummaryService.js +131 -0
  286. package/dist/src/services/sessionSummaryService.js.map +1 -0
  287. package/dist/src/services/sessionSummaryService.test.d.ts +6 -0
  288. package/dist/src/services/sessionSummaryService.test.js +785 -0
  289. package/dist/src/services/sessionSummaryService.test.js.map +1 -0
  290. package/dist/src/services/sessionSummaryUtils.d.ts +16 -0
  291. package/dist/src/services/sessionSummaryUtils.js +129 -0
  292. package/dist/src/services/sessionSummaryUtils.js.map +1 -0
  293. package/dist/src/services/sessionSummaryUtils.test.d.ts +6 -0
  294. package/dist/src/services/sessionSummaryUtils.test.js +137 -0
  295. package/dist/src/services/sessionSummaryUtils.test.js.map +1 -0
  296. package/dist/src/services/shellExecutionService.js +56 -22
  297. package/dist/src/services/shellExecutionService.js.map +1 -1
  298. package/dist/src/services/shellExecutionService.test.js +137 -5
  299. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  300. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +238 -0
  301. package/dist/src/services/test-data/resolved-aliases.golden.json +16 -0
  302. package/dist/src/telemetry/activity-detector.test.js.map +1 -1
  303. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +1 -0
  304. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +28 -5
  305. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  306. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +67 -1
  307. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  308. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +1 -0
  309. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +3 -1
  310. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  311. package/dist/src/telemetry/config.js +2 -0
  312. package/dist/src/telemetry/config.js.map +1 -1
  313. package/dist/src/telemetry/config.test.js +25 -0
  314. package/dist/src/telemetry/config.test.js.map +1 -1
  315. package/dist/src/telemetry/gcp-exporters.d.ts +4 -3
  316. package/dist/src/telemetry/gcp-exporters.js +8 -4
  317. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  318. package/dist/src/telemetry/index.d.ts +2 -1
  319. package/dist/src/telemetry/index.js +2 -1
  320. package/dist/src/telemetry/index.js.map +1 -1
  321. package/dist/src/telemetry/loggers.d.ts +2 -1
  322. package/dist/src/telemetry/loggers.js +345 -338
  323. package/dist/src/telemetry/loggers.js.map +1 -1
  324. package/dist/src/telemetry/loggers.test.js +195 -18
  325. package/dist/src/telemetry/loggers.test.js.map +1 -1
  326. package/dist/src/telemetry/metrics.test.js.map +1 -1
  327. package/dist/src/telemetry/sdk.d.ts +9 -2
  328. package/dist/src/telemetry/sdk.js +143 -17
  329. package/dist/src/telemetry/sdk.js.map +1 -1
  330. package/dist/src/telemetry/sdk.test.js +130 -28
  331. package/dist/src/telemetry/sdk.test.js.map +1 -1
  332. package/dist/src/telemetry/startupProfiler.d.ts +51 -0
  333. package/dist/src/telemetry/startupProfiler.js +170 -0
  334. package/dist/src/telemetry/startupProfiler.js.map +1 -0
  335. package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
  336. package/dist/src/telemetry/startupProfiler.test.js +289 -0
  337. package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
  338. package/dist/src/telemetry/telemetry.test.js +10 -3
  339. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  340. package/dist/src/telemetry/trace.js +2 -2
  341. package/dist/src/telemetry/trace.js.map +1 -1
  342. package/dist/src/telemetry/types.d.ts +37 -10
  343. package/dist/src/telemetry/types.js +82 -17
  344. package/dist/src/telemetry/types.js.map +1 -1
  345. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  346. package/dist/src/telemetry/uiTelemetry.js +2 -0
  347. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  348. package/dist/src/telemetry/uiTelemetry.test.js +4 -0
  349. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  350. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  351. package/dist/src/tools/confirmation-policy.test.d.ts +6 -0
  352. package/dist/src/tools/confirmation-policy.test.js +152 -0
  353. package/dist/src/tools/confirmation-policy.test.js.map +1 -0
  354. package/dist/src/tools/edit.js +5 -0
  355. package/dist/src/tools/edit.js.map +1 -1
  356. package/dist/src/tools/edit.test.js.map +1 -1
  357. package/dist/src/tools/grep.js.map +1 -1
  358. package/dist/src/tools/mcp-client-manager.d.ts +3 -1
  359. package/dist/src/tools/mcp-client-manager.js +30 -4
  360. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  361. package/dist/src/tools/mcp-client-manager.test.js +38 -10
  362. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  363. package/dist/src/tools/mcp-client.d.ts +40 -3
  364. package/dist/src/tools/mcp-client.js +437 -174
  365. package/dist/src/tools/mcp-client.js.map +1 -1
  366. package/dist/src/tools/mcp-client.test.js +695 -28
  367. package/dist/src/tools/mcp-client.test.js.map +1 -1
  368. package/dist/src/tools/mcp-tool.js +13 -0
  369. package/dist/src/tools/mcp-tool.js.map +1 -1
  370. package/dist/src/tools/mcp-tool.test.js +25 -0
  371. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  372. package/dist/src/tools/memoryTool.js +1 -0
  373. package/dist/src/tools/memoryTool.js.map +1 -1
  374. package/dist/src/tools/modifiable-tool.js.map +1 -1
  375. package/dist/src/tools/modifiable-tool.test.js +22 -13
  376. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  377. package/dist/src/tools/read-file.js +1 -1
  378. package/dist/src/tools/read-file.js.map +1 -1
  379. package/dist/src/tools/read-file.test.js.map +1 -1
  380. package/dist/src/tools/read-many-files.js +6 -4
  381. package/dist/src/tools/read-many-files.js.map +1 -1
  382. package/dist/src/tools/read-many-files.test.js +1 -1
  383. package/dist/src/tools/read-many-files.test.js.map +1 -1
  384. package/dist/src/tools/shell.d.ts +2 -1
  385. package/dist/src/tools/shell.js +58 -4
  386. package/dist/src/tools/shell.js.map +1 -1
  387. package/dist/src/tools/shell.test.js +25 -5
  388. package/dist/src/tools/shell.test.js.map +1 -1
  389. package/dist/src/tools/smart-edit.js +6 -1
  390. package/dist/src/tools/smart-edit.js.map +1 -1
  391. package/dist/src/tools/smart-edit.test.js.map +1 -1
  392. package/dist/src/tools/tool-names.d.ts +2 -0
  393. package/dist/src/tools/tool-names.js +2 -0
  394. package/dist/src/tools/tool-names.js.map +1 -1
  395. package/dist/src/tools/tools.d.ts +19 -0
  396. package/dist/src/tools/tools.js +29 -8
  397. package/dist/src/tools/tools.js.map +1 -1
  398. package/dist/src/tools/web-fetch.js +18 -5
  399. package/dist/src/tools/web-fetch.js.map +1 -1
  400. package/dist/src/tools/web-fetch.test.js +1 -0
  401. package/dist/src/tools/web-fetch.test.js.map +1 -1
  402. package/dist/src/tools/write-file.js +5 -0
  403. package/dist/src/tools/write-file.js.map +1 -1
  404. package/dist/src/tools/write-file.test.js.map +1 -1
  405. package/dist/src/utils/bfsFileSearch.d.ts +8 -0
  406. package/dist/src/utils/bfsFileSearch.js +63 -23
  407. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  408. package/dist/src/utils/bfsFileSearch.test.js +65 -1
  409. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  410. package/dist/src/utils/checkpointUtils.d.ts +82 -0
  411. package/dist/src/utils/checkpointUtils.js +117 -0
  412. package/dist/src/utils/checkpointUtils.js.map +1 -0
  413. package/dist/src/utils/checkpointUtils.test.d.ts +6 -0
  414. package/dist/src/utils/checkpointUtils.test.js +229 -0
  415. package/dist/src/utils/checkpointUtils.test.js.map +1 -0
  416. package/dist/src/utils/debugLogger.d.ts +3 -0
  417. package/dist/src/utils/debugLogger.js +27 -0
  418. package/dist/src/utils/debugLogger.js.map +1 -1
  419. package/dist/src/utils/editCorrector.test.js +4 -0
  420. package/dist/src/utils/editCorrector.test.js.map +1 -1
  421. package/dist/src/utils/editor.d.ts +9 -1
  422. package/dist/src/utils/editor.js +23 -14
  423. package/dist/src/utils/editor.js.map +1 -1
  424. package/dist/src/utils/errors.d.ts +8 -0
  425. package/dist/src/utils/errors.js +39 -2
  426. package/dist/src/utils/errors.js.map +1 -1
  427. package/dist/src/utils/errors.test.d.ts +6 -0
  428. package/dist/src/utils/errors.test.js +155 -0
  429. package/dist/src/utils/errors.test.js.map +1 -0
  430. package/dist/src/utils/exitCodes.d.ts +12 -0
  431. package/dist/src/utils/exitCodes.js +13 -0
  432. package/dist/src/utils/exitCodes.js.map +1 -0
  433. package/dist/src/utils/extensionLoader.d.ts +2 -2
  434. package/dist/src/utils/extensionLoader.js +5 -6
  435. package/dist/src/utils/extensionLoader.js.map +1 -1
  436. package/dist/src/utils/extensionLoader.test.js +11 -0
  437. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  438. package/dist/src/utils/fetch.d.ts +1 -1
  439. package/dist/src/utils/fetch.js +3 -3
  440. package/dist/src/utils/fetch.js.map +1 -1
  441. package/dist/src/utils/fileUtils.test.js +15 -0
  442. package/dist/src/utils/fileUtils.test.js.map +1 -1
  443. package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
  444. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  445. package/dist/src/utils/flashFallback.test.js +1 -1
  446. package/dist/src/utils/flashFallback.test.js.map +1 -1
  447. package/dist/src/utils/googleErrors.js +31 -18
  448. package/dist/src/utils/googleErrors.js.map +1 -1
  449. package/dist/src/utils/googleErrors.test.js +10 -2
  450. package/dist/src/utils/googleErrors.test.js.map +1 -1
  451. package/dist/src/utils/googleQuotaErrors.d.ts +3 -3
  452. package/dist/src/utils/googleQuotaErrors.js +32 -6
  453. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  454. package/dist/src/utils/googleQuotaErrors.test.js +94 -2
  455. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  456. package/dist/src/utils/memoryDiscovery.d.ts +5 -0
  457. package/dist/src/utils/memoryDiscovery.js +7 -3
  458. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  459. package/dist/src/utils/memoryDiscovery.test.js +28 -0
  460. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  461. package/dist/src/utils/nextSpeakerChecker.test.js +4 -0
  462. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  463. package/dist/src/utils/pathCorrector.js +12 -2
  464. package/dist/src/utils/pathCorrector.js.map +1 -1
  465. package/dist/src/utils/pathCorrector.test.js +6 -2
  466. package/dist/src/utils/pathCorrector.test.js.map +1 -1
  467. package/dist/src/utils/retry.d.ts +11 -0
  468. package/dist/src/utils/retry.js +54 -13
  469. package/dist/src/utils/retry.js.map +1 -1
  470. package/dist/src/utils/retry.test.js +170 -10
  471. package/dist/src/utils/retry.test.js.map +1 -1
  472. package/dist/src/utils/shell-permissions.d.ts +52 -0
  473. package/dist/src/utils/shell-permissions.js +188 -0
  474. package/dist/src/utils/shell-permissions.js.map +1 -0
  475. package/dist/src/utils/shell-permissions.test.d.ts +6 -0
  476. package/dist/src/utils/shell-permissions.test.js +347 -0
  477. package/dist/src/utils/shell-permissions.test.js.map +1 -0
  478. package/dist/src/utils/shell-utils.d.ts +10 -47
  479. package/dist/src/utils/shell-utils.js +1 -182
  480. package/dist/src/utils/shell-utils.js.map +1 -1
  481. package/dist/src/utils/shell-utils.test.js +1 -288
  482. package/dist/src/utils/shell-utils.test.js.map +1 -1
  483. package/dist/src/utils/stdio.d.ts +2 -2
  484. package/dist/src/utils/stdio.js +2 -2
  485. package/dist/src/utils/stdio.js.map +1 -1
  486. package/dist/src/utils/stdio.test.js +5 -5
  487. package/dist/src/utils/stdio.test.js.map +1 -1
  488. package/dist/src/utils/terminalSerializer.test.js +17 -0
  489. package/dist/src/utils/terminalSerializer.test.js.map +1 -1
  490. package/dist/src/utils/tokenCalculation.d.ts +19 -0
  491. package/dist/src/utils/tokenCalculation.js +70 -0
  492. package/dist/src/utils/tokenCalculation.js.map +1 -0
  493. package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
  494. package/dist/src/utils/tokenCalculation.test.js +78 -0
  495. package/dist/src/utils/tokenCalculation.test.js.map +1 -0
  496. package/dist/src/utils/tool-utils.js.map +1 -1
  497. package/dist/src/utils/version.d.ts +6 -0
  498. package/dist/src/utils/version.js +15 -0
  499. package/dist/src/utils/version.js.map +1 -0
  500. package/dist/src/utils/version.test.d.ts +6 -0
  501. package/dist/src/utils/version.test.js +39 -0
  502. package/dist/src/utils/version.test.js.map +1 -0
  503. package/dist/tsconfig.tsbuildinfo +1 -1
  504. package/package.json +1 -1
@@ -5,12 +5,14 @@
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach } from 'vitest';
7
7
  import { CoreToolScheduler, convertToFunctionResponse, truncateAndSaveToFile, } from './coreToolScheduler.js';
8
- import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, } from '../index.js';
8
+ import { DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, ApprovalMode, HookSystem, } from '../index.js';
9
+ import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
9
10
  import { MockModifiableTool, MockTool, MOCK_TOOL_SHOULD_CONFIRM_EXECUTE, } from '../test-utils/mock-tool.js';
10
11
  import * as modifiableToolModule from '../tools/modifiable-tool.js';
11
12
  import * as fs from 'node:fs/promises';
12
13
  import * as path from 'node:path';
13
- import { isShellInvocationAllowlisted } from '../utils/shell-utils.js';
14
+ import { isShellInvocationAllowlisted } from '../utils/shell-permissions.js';
15
+ import { DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
14
16
  vi.mock('fs/promises', () => ({
15
17
  writeFile: vi.fn(),
16
18
  }));
@@ -142,6 +144,7 @@ function createMockConfig(overrides = {}) {
142
144
  getSessionId: () => 'test-session-id',
143
145
  getUsageStatisticsEnabled: () => true,
144
146
  getDebugMode: () => false,
147
+ isInteractive: () => true,
145
148
  getApprovalMode: () => ApprovalMode.DEFAULT,
146
149
  setApprovalMode: () => { },
147
150
  getAllowedTools: () => [],
@@ -159,10 +162,12 @@ function createMockConfig(overrides = {}) {
159
162
  getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
160
163
  getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
161
164
  getToolRegistry: () => defaultToolRegistry,
165
+ getActiveModel: () => DEFAULT_GEMINI_MODEL,
162
166
  getUseSmartEdit: () => false,
163
167
  getGeminiClient: () => null,
164
168
  getEnableMessageBusIntegration: () => false,
165
169
  getMessageBus: () => null,
170
+ getEnableHooks: () => false,
166
171
  getPolicyEngine: () => null,
167
172
  getExperiments: () => { },
168
173
  };
@@ -255,7 +260,7 @@ describe('CoreToolScheduler', () => {
255
260
  const onToolCallsUpdate = vi.fn();
256
261
  const mockConfig = createMockConfig({
257
262
  getToolRegistry: () => mockToolRegistry,
258
- isInteractive: () => false,
263
+ getHookSystem: () => undefined,
259
264
  });
260
265
  const scheduler = new CoreToolScheduler({
261
266
  config: mockConfig,
@@ -344,7 +349,7 @@ describe('CoreToolScheduler', () => {
344
349
  const onToolCallsUpdate = vi.fn();
345
350
  const mockConfig = createMockConfig({
346
351
  getToolRegistry: () => mockToolRegistry,
347
- isInteractive: () => false,
352
+ getHookSystem: () => undefined,
348
353
  });
349
354
  const scheduler = new CoreToolScheduler({
350
355
  config: mockConfig,
@@ -437,6 +442,57 @@ describe('CoreToolScheduler', () => {
437
442
  const statuses = onToolCallsUpdate.mock.calls.flatMap((call) => call[0].map((toolCall) => toolCall.status));
438
443
  expect(statuses).not.toContain('error');
439
444
  });
445
+ it('should error when tool requires confirmation in non-interactive mode', async () => {
446
+ const mockTool = new MockTool({
447
+ name: 'mockTool',
448
+ shouldConfirmExecute: MOCK_TOOL_SHOULD_CONFIRM_EXECUTE,
449
+ });
450
+ const declarativeTool = mockTool;
451
+ const mockToolRegistry = {
452
+ getTool: () => declarativeTool,
453
+ getFunctionDeclarations: () => [],
454
+ tools: new Map(),
455
+ discovery: {},
456
+ registerTool: () => { },
457
+ getToolByName: () => declarativeTool,
458
+ getToolByDisplayName: () => declarativeTool,
459
+ getTools: () => [],
460
+ discoverTools: async () => { },
461
+ getAllTools: () => [],
462
+ getToolsByServer: () => [],
463
+ };
464
+ const onAllToolCallsComplete = vi.fn();
465
+ const onToolCallsUpdate = vi.fn();
466
+ const mockConfig = createMockConfig({
467
+ getToolRegistry: () => mockToolRegistry,
468
+ isInteractive: () => false,
469
+ });
470
+ const scheduler = new CoreToolScheduler({
471
+ config: mockConfig,
472
+ onAllToolCallsComplete,
473
+ onToolCallsUpdate,
474
+ getPreferredEditor: () => 'vscode',
475
+ });
476
+ const abortController = new AbortController();
477
+ const request = {
478
+ callId: '1',
479
+ name: 'mockTool',
480
+ args: {},
481
+ isClientInitiated: false,
482
+ prompt_id: 'prompt-id-1',
483
+ };
484
+ await scheduler.schedule([request], abortController.signal);
485
+ expect(onAllToolCallsComplete).toHaveBeenCalled();
486
+ const completedCalls = onAllToolCallsComplete.mock
487
+ .calls[0][0];
488
+ expect(completedCalls[0].status).toBe('error');
489
+ const erroredCall = completedCalls[0];
490
+ const errorResponse = erroredCall.response;
491
+ const errorParts = errorResponse.responseParts;
492
+ // @ts-expect-error - accessing internal structure of FunctionResponsePart
493
+ const errorMessage = errorParts[0].functionResponse.response.error;
494
+ expect(errorMessage).toContain('Tool execution for "mockTool" requires user confirmation, which is not supported in non-interactive mode.');
495
+ });
440
496
  describe('getToolSuggestion', () => {
441
497
  it('should suggest the top N closest tool names for a typo', () => {
442
498
  // Create mocked tool registry
@@ -489,8 +545,13 @@ describe('CoreToolScheduler with payload', () => {
489
545
  const onToolCallsUpdate = vi.fn();
490
546
  const mockConfig = createMockConfig({
491
547
  getToolRegistry: () => mockToolRegistry,
492
- isInteractive: () => false,
493
548
  });
549
+ const mockMessageBus = createMockMessageBus();
550
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
551
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
552
+ mockConfig.getHookSystem = vi
553
+ .fn()
554
+ .mockReturnValue(new HookSystem(mockConfig));
494
555
  const scheduler = new CoreToolScheduler({
495
556
  config: mockConfig,
496
557
  onAllToolCallsComplete,
@@ -529,7 +590,7 @@ describe('convertToFunctionResponse', () => {
529
590
  const callId = 'call1';
530
591
  it('should handle simple string llmContent', () => {
531
592
  const llmContent = 'Simple text output';
532
- const result = convertToFunctionResponse(toolName, callId, llmContent);
593
+ const result = convertToFunctionResponse(toolName, callId, llmContent, DEFAULT_GEMINI_MODEL);
533
594
  expect(result).toEqual([
534
595
  {
535
596
  functionResponse: {
@@ -542,7 +603,7 @@ describe('convertToFunctionResponse', () => {
542
603
  });
543
604
  it('should handle llmContent as a single Part with text', () => {
544
605
  const llmContent = { text: 'Text from Part object' };
545
- const result = convertToFunctionResponse(toolName, callId, llmContent);
606
+ const result = convertToFunctionResponse(toolName, callId, llmContent, DEFAULT_GEMINI_MODEL);
546
607
  expect(result).toEqual([
547
608
  {
548
609
  functionResponse: {
@@ -555,7 +616,7 @@ describe('convertToFunctionResponse', () => {
555
616
  });
556
617
  it('should handle llmContent as a PartListUnion array with a single text Part', () => {
557
618
  const llmContent = [{ text: 'Text from array' }];
558
- const result = convertToFunctionResponse(toolName, callId, llmContent);
619
+ const result = convertToFunctionResponse(toolName, callId, llmContent, DEFAULT_GEMINI_MODEL);
559
620
  expect(result).toEqual([
560
621
  {
561
622
  functionResponse: {
@@ -566,94 +627,144 @@ describe('convertToFunctionResponse', () => {
566
627
  },
567
628
  ]);
568
629
  });
569
- it('should handle llmContent with inlineData', () => {
630
+ it('should handle llmContent as a PartListUnion array with multiple Parts', () => {
631
+ const llmContent = [{ text: 'part1' }, { text: 'part2' }];
632
+ const result = convertToFunctionResponse(toolName, callId, llmContent, DEFAULT_GEMINI_MODEL);
633
+ expect(result).toEqual([
634
+ {
635
+ functionResponse: {
636
+ name: toolName,
637
+ id: callId,
638
+ response: { output: 'part1\npart2' },
639
+ },
640
+ },
641
+ ]);
642
+ });
643
+ it('should handle llmContent with fileData for Gemini 3 model (should be siblings)', () => {
570
644
  const llmContent = {
571
- inlineData: { mimeType: 'image/png', data: 'base64...' },
645
+ fileData: { mimeType: 'application/pdf', fileUri: 'gs://...' },
572
646
  };
573
- const result = convertToFunctionResponse(toolName, callId, llmContent);
647
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
574
648
  expect(result).toEqual([
575
649
  {
576
650
  functionResponse: {
577
651
  name: toolName,
578
652
  id: callId,
579
- response: {
580
- output: 'Binary content of type image/png was processed.',
581
- },
653
+ response: { output: 'Binary content provided (1 item(s)).' },
582
654
  },
583
655
  },
584
656
  llmContent,
585
657
  ]);
586
658
  });
587
- it('should handle llmContent with fileData', () => {
659
+ it('should handle llmContent with inlineData for Gemini 3 model (should be nested)', () => {
660
+ const llmContent = {
661
+ inlineData: { mimeType: 'image/png', data: 'base64...' },
662
+ };
663
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
664
+ expect(result).toEqual([
665
+ {
666
+ functionResponse: {
667
+ name: toolName,
668
+ id: callId,
669
+ response: { output: 'Binary content provided (1 item(s)).' },
670
+ parts: [llmContent],
671
+ },
672
+ },
673
+ ]);
674
+ });
675
+ it('should handle llmContent with fileData for non-Gemini 3 models', () => {
588
676
  const llmContent = {
589
677
  fileData: { mimeType: 'application/pdf', fileUri: 'gs://...' },
590
678
  };
591
- const result = convertToFunctionResponse(toolName, callId, llmContent);
679
+ const result = convertToFunctionResponse(toolName, callId, llmContent, DEFAULT_GEMINI_MODEL);
592
680
  expect(result).toEqual([
593
681
  {
594
682
  functionResponse: {
595
683
  name: toolName,
596
684
  id: callId,
597
- response: {
598
- output: 'Binary content of type application/pdf was processed.',
599
- },
685
+ response: { output: 'Binary content provided (1 item(s)).' },
600
686
  },
601
687
  },
602
688
  llmContent,
603
689
  ]);
604
690
  });
691
+ it('should preserve existing functionResponse metadata', () => {
692
+ const innerId = 'inner-call-id';
693
+ const innerName = 'inner-tool-name';
694
+ const responseMetadata = {
695
+ flags: ['flag1'],
696
+ isError: false,
697
+ customData: { key: 'value' },
698
+ };
699
+ const input = {
700
+ functionResponse: {
701
+ id: innerId,
702
+ name: innerName,
703
+ response: responseMetadata,
704
+ },
705
+ };
706
+ const result = convertToFunctionResponse(toolName, callId, input, DEFAULT_GEMINI_MODEL);
707
+ expect(result).toHaveLength(1);
708
+ expect(result[0].functionResponse).toEqual({
709
+ id: callId,
710
+ name: toolName,
711
+ response: responseMetadata,
712
+ });
713
+ });
605
714
  it('should handle llmContent as an array of multiple Parts (text and inlineData)', () => {
606
715
  const llmContent = [
607
716
  { text: 'Some textual description' },
608
717
  { inlineData: { mimeType: 'image/jpeg', data: 'base64data...' } },
609
718
  { text: 'Another text part' },
610
719
  ];
611
- const result = convertToFunctionResponse(toolName, callId, llmContent);
720
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
612
721
  expect(result).toEqual([
613
722
  {
614
723
  functionResponse: {
615
724
  name: toolName,
616
725
  id: callId,
617
- response: { output: 'Tool execution succeeded.' },
726
+ response: {
727
+ output: 'Some textual description\nAnother text part',
728
+ },
729
+ parts: [
730
+ { inlineData: { mimeType: 'image/jpeg', data: 'base64data...' } },
731
+ ],
618
732
  },
619
733
  },
620
- ...llmContent,
621
734
  ]);
622
735
  });
623
736
  it('should handle llmContent as an array with a single inlineData Part', () => {
624
737
  const llmContent = [
625
738
  { inlineData: { mimeType: 'image/gif', data: 'gifdata...' } },
626
739
  ];
627
- const result = convertToFunctionResponse(toolName, callId, llmContent);
740
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
628
741
  expect(result).toEqual([
629
742
  {
630
743
  functionResponse: {
631
744
  name: toolName,
632
745
  id: callId,
633
- response: {
634
- output: 'Binary content of type image/gif was processed.',
635
- },
746
+ response: { output: 'Binary content provided (1 item(s)).' },
747
+ parts: llmContent,
636
748
  },
637
749
  },
638
- ...llmContent,
639
750
  ]);
640
751
  });
641
752
  it('should handle llmContent as a generic Part (not text, inlineData, or fileData)', () => {
642
753
  const llmContent = { functionCall: { name: 'test', args: {} } };
643
- const result = convertToFunctionResponse(toolName, callId, llmContent);
754
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
644
755
  expect(result).toEqual([
645
756
  {
646
757
  functionResponse: {
647
758
  name: toolName,
648
759
  id: callId,
649
- response: { output: 'Tool execution succeeded.' },
760
+ response: {},
650
761
  },
651
762
  },
652
763
  ]);
653
764
  });
654
765
  it('should handle empty string llmContent', () => {
655
766
  const llmContent = '';
656
- const result = convertToFunctionResponse(toolName, callId, llmContent);
767
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
657
768
  expect(result).toEqual([
658
769
  {
659
770
  functionResponse: {
@@ -666,26 +777,26 @@ describe('convertToFunctionResponse', () => {
666
777
  });
667
778
  it('should handle llmContent as an empty array', () => {
668
779
  const llmContent = [];
669
- const result = convertToFunctionResponse(toolName, callId, llmContent);
780
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
670
781
  expect(result).toEqual([
671
782
  {
672
783
  functionResponse: {
673
784
  name: toolName,
674
785
  id: callId,
675
- response: { output: 'Tool execution succeeded.' },
786
+ response: {},
676
787
  },
677
788
  },
678
789
  ]);
679
790
  });
680
791
  it('should handle llmContent as a Part with undefined inlineData/fileData/text', () => {
681
792
  const llmContent = {}; // An empty part object
682
- const result = convertToFunctionResponse(toolName, callId, llmContent);
793
+ const result = convertToFunctionResponse(toolName, callId, llmContent, PREVIEW_GEMINI_MODEL);
683
794
  expect(result).toEqual([
684
795
  {
685
796
  functionResponse: {
686
797
  name: toolName,
687
798
  id: callId,
688
- response: { output: 'Tool execution succeeded.' },
799
+ response: {},
689
800
  },
690
801
  },
691
802
  ]);
@@ -745,8 +856,13 @@ describe('CoreToolScheduler edit cancellation', () => {
745
856
  const onToolCallsUpdate = vi.fn();
746
857
  const mockConfig = createMockConfig({
747
858
  getToolRegistry: () => mockToolRegistry,
748
- isInteractive: () => false,
749
859
  });
860
+ const mockMessageBus = createMockMessageBus();
861
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
862
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
863
+ mockConfig.getHookSystem = vi
864
+ .fn()
865
+ .mockReturnValue(new HookSystem(mockConfig));
750
866
  const scheduler = new CoreToolScheduler({
751
867
  config: mockConfig,
752
868
  onAllToolCallsComplete,
@@ -815,6 +931,12 @@ describe('CoreToolScheduler YOLO mode', () => {
815
931
  getApprovalMode: () => ApprovalMode.YOLO,
816
932
  isInteractive: () => false,
817
933
  });
934
+ const mockMessageBus = createMockMessageBus();
935
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
936
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
937
+ mockConfig.getHookSystem = vi
938
+ .fn()
939
+ .mockReturnValue(new HookSystem(mockConfig));
818
940
  const scheduler = new CoreToolScheduler({
819
941
  config: mockConfig,
820
942
  onAllToolCallsComplete,
@@ -889,6 +1011,12 @@ describe('CoreToolScheduler request queueing', () => {
889
1011
  getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
890
1012
  isInteractive: () => false,
891
1013
  });
1014
+ const mockMessageBus = createMockMessageBus();
1015
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1016
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1017
+ mockConfig.getHookSystem = vi
1018
+ .fn()
1019
+ .mockReturnValue(new HookSystem(mockConfig));
892
1020
  const scheduler = new CoreToolScheduler({
893
1021
  config: mockConfig,
894
1022
  onAllToolCallsComplete,
@@ -911,6 +1039,7 @@ describe('CoreToolScheduler request queueing', () => {
911
1039
  prompt_id: 'prompt-2',
912
1040
  };
913
1041
  // Schedule the first call, which will pause execution.
1042
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
914
1043
  scheduler.schedule([request1], abortController.signal);
915
1044
  // Wait for the first call to be in the 'executing' state.
916
1045
  await waitForStatus(onToolCallsUpdate, 'executing');
@@ -983,6 +1112,12 @@ describe('CoreToolScheduler request queueing', () => {
983
1112
  }),
984
1113
  isInteractive: () => false,
985
1114
  });
1115
+ const mockMessageBus = createMockMessageBus();
1116
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1117
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1118
+ mockConfig.getHookSystem = vi
1119
+ .fn()
1120
+ .mockReturnValue(new HookSystem(mockConfig));
986
1121
  const scheduler = new CoreToolScheduler({
987
1122
  config: mockConfig,
988
1123
  onAllToolCallsComplete,
@@ -1069,7 +1204,7 @@ describe('CoreToolScheduler request queueing', () => {
1069
1204
  terminalHeight: 24,
1070
1205
  }),
1071
1206
  getToolRegistry: () => toolRegistry,
1072
- isInteractive: () => false,
1207
+ getHookSystem: () => undefined,
1073
1208
  });
1074
1209
  const scheduler = new CoreToolScheduler({
1075
1210
  config: mockConfig,
@@ -1118,8 +1253,13 @@ describe('CoreToolScheduler request queueing', () => {
1118
1253
  const mockConfig = createMockConfig({
1119
1254
  getToolRegistry: () => mockToolRegistry,
1120
1255
  getApprovalMode: () => ApprovalMode.YOLO,
1121
- isInteractive: () => false,
1122
1256
  });
1257
+ const mockMessageBus = createMockMessageBus();
1258
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1259
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1260
+ mockConfig.getHookSystem = vi
1261
+ .fn()
1262
+ .mockReturnValue(new HookSystem(mockConfig));
1123
1263
  const scheduler = new CoreToolScheduler({
1124
1264
  config: mockConfig,
1125
1265
  onAllToolCallsComplete,
@@ -1160,8 +1300,13 @@ describe('CoreToolScheduler request queueing', () => {
1160
1300
  setApprovalMode: (mode) => {
1161
1301
  approvalMode = mode;
1162
1302
  },
1163
- isInteractive: () => false,
1164
1303
  });
1304
+ const mockMessageBus = createMockMessageBus();
1305
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1306
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1307
+ mockConfig.getHookSystem = vi
1308
+ .fn()
1309
+ .mockReturnValue(new HookSystem(mockConfig));
1165
1310
  const testTool = new TestApprovalTool(mockConfig);
1166
1311
  const toolRegistry = {
1167
1312
  getTool: () => testTool,
@@ -1303,6 +1448,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
1303
1448
  getApprovalMode: () => ApprovalMode.YOLO, // Use YOLO to avoid confirmation prompts
1304
1449
  isInteractive: () => false,
1305
1450
  });
1451
+ const mockMessageBus = createMockMessageBus();
1452
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1453
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1454
+ mockConfig.getHookSystem = vi
1455
+ .fn()
1456
+ .mockReturnValue(new HookSystem(mockConfig));
1306
1457
  const scheduler = new CoreToolScheduler({
1307
1458
  config: mockConfig,
1308
1459
  onAllToolCallsComplete,
@@ -1389,6 +1540,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
1389
1540
  getApprovalMode: () => ApprovalMode.YOLO,
1390
1541
  isInteractive: () => false,
1391
1542
  });
1543
+ const mockMessageBus = createMockMessageBus();
1544
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1545
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1546
+ mockConfig.getHookSystem = vi
1547
+ .fn()
1548
+ .mockReturnValue(new HookSystem(mockConfig));
1392
1549
  const scheduler = new CoreToolScheduler({
1393
1550
  config: mockConfig,
1394
1551
  onAllToolCallsComplete,
@@ -1470,6 +1627,12 @@ describe('CoreToolScheduler Sequential Execution', () => {
1470
1627
  const mockConfig = createMockConfig({
1471
1628
  getToolRegistry: () => mockToolRegistry,
1472
1629
  });
1630
+ const mockMessageBus = createMockMessageBus();
1631
+ mockConfig.getMessageBus = vi.fn().mockReturnValue(mockMessageBus);
1632
+ mockConfig.getEnableHooks = vi.fn().mockReturnValue(false);
1633
+ mockConfig.getHookSystem = vi
1634
+ .fn()
1635
+ .mockReturnValue(new HookSystem(mockConfig));
1473
1636
  const scheduler = new CoreToolScheduler({
1474
1637
  config: mockConfig,
1475
1638
  onAllToolCallsComplete,