@machina.ai/cell-cli-core 1.13.0-rc4 → 1.16.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) 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 +9 -8
  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 +65 -20
  124. package/dist/src/ide/ide-installer.js.map +1 -1
  125. package/dist/src/ide/ide-installer.test.js +41 -0
  126. package/dist/src/ide/ide-installer.test.js.map +1 -1
  127. package/dist/src/ide/types.d.ts +1 -1
  128. package/dist/src/ide/types.js +1 -1
  129. package/dist/src/index.d.ts +2 -0
  130. package/dist/src/index.js +2 -0
  131. package/dist/src/index.js.map +1 -1
  132. package/dist/src/mcp/google-auth-provider.js +1 -1
  133. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  134. package/dist/src/mcp/mcpLauncher.js +6 -2
  135. package/dist/src/mcp/mcpLauncher.js.map +1 -1
  136. package/dist/src/mcp/oauth-provider.js +2 -2
  137. package/dist/src/mcp/oauth-provider.js.map +1 -1
  138. package/dist/src/mcp/oauth-provider.test.js +177 -0
  139. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  140. package/dist/src/mcp/sa-impersonation-provider.js +1 -1
  141. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  142. package/dist/src/policy/config.js +3 -1
  143. package/dist/src/policy/config.js.map +1 -1
  144. package/dist/src/policy/config.test.js +135 -1
  145. package/dist/src/policy/config.test.js.map +1 -1
  146. package/dist/src/policy/policies/discovered.toml +8 -0
  147. package/dist/src/policy/policies/write.toml +10 -0
  148. package/dist/src/policy/policy-engine.d.ts +12 -3
  149. package/dist/src/policy/policy-engine.js +71 -9
  150. package/dist/src/policy/policy-engine.js.map +1 -1
  151. package/dist/src/policy/policy-engine.test.js +460 -76
  152. package/dist/src/policy/policy-engine.test.js.map +1 -1
  153. package/dist/src/policy/toml-loader.d.ts +2 -1
  154. package/dist/src/policy/toml-loader.js +103 -6
  155. package/dist/src/policy/toml-loader.js.map +1 -1
  156. package/dist/src/policy/toml-loader.test.js +222 -368
  157. package/dist/src/policy/toml-loader.test.js.map +1 -1
  158. package/dist/src/policy/types.d.ts +65 -0
  159. package/dist/src/policy/types.js +4 -0
  160. package/dist/src/policy/types.js.map +1 -1
  161. package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
  162. package/dist/src/prompts/mcp-prompts.test.js +40 -0
  163. package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
  164. package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
  165. package/dist/src/prompts/prompt-registry.test.js +111 -0
  166. package/dist/src/prompts/prompt-registry.test.js.map +1 -0
  167. package/dist/src/routing/modelRouterService.js +15 -0
  168. package/dist/src/routing/modelRouterService.js.map +1 -1
  169. package/dist/src/routing/modelRouterService.test.js +62 -0
  170. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  171. package/dist/src/routing/strategies/classifierStrategy.d.ts +1 -1
  172. package/dist/src/routing/strategies/classifierStrategy.js +6 -14
  173. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
  174. package/dist/src/routing/strategies/classifierStrategy.test.js +13 -10
  175. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
  176. package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
  177. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
  178. package/dist/src/routing/strategies/fallbackStrategy.test.js +4 -0
  179. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
  180. package/dist/src/routing/strategies/overrideStrategy.js +2 -2
  181. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
  182. package/dist/src/routing/strategies/overrideStrategy.test.js +3 -0
  183. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
  184. package/dist/src/safety/built-in.d.ts +21 -0
  185. package/dist/src/safety/built-in.js +106 -0
  186. package/dist/src/safety/built-in.js.map +1 -0
  187. package/dist/src/safety/built-in.test.d.ts +6 -0
  188. package/dist/src/safety/built-in.test.js +199 -0
  189. package/dist/src/safety/built-in.test.js.map +1 -0
  190. package/dist/src/safety/checker-runner.d.ts +48 -0
  191. package/dist/src/safety/checker-runner.js +208 -0
  192. package/dist/src/safety/checker-runner.js.map +1 -0
  193. package/dist/src/safety/checker-runner.test.d.ts +6 -0
  194. package/dist/src/safety/checker-runner.test.js +238 -0
  195. package/dist/src/safety/checker-runner.test.js.map +1 -0
  196. package/dist/src/safety/context-builder.d.ts +23 -0
  197. package/dist/src/safety/context-builder.js +47 -0
  198. package/dist/src/safety/context-builder.js.map +1 -0
  199. package/dist/src/safety/context-builder.test.d.ts +6 -0
  200. package/dist/src/safety/context-builder.test.js +49 -0
  201. package/dist/src/safety/context-builder.test.js.map +1 -0
  202. package/dist/src/safety/protocol.d.ts +88 -0
  203. package/dist/src/safety/protocol.js +15 -0
  204. package/dist/src/safety/protocol.js.map +1 -0
  205. package/dist/src/safety/registry.d.ts +26 -0
  206. package/dist/src/safety/registry.js +65 -0
  207. package/dist/src/safety/registry.js.map +1 -0
  208. package/dist/src/safety/registry.test.d.ts +6 -0
  209. package/dist/src/safety/registry.test.js +31 -0
  210. package/dist/src/safety/registry.test.js.map +1 -0
  211. package/dist/src/services/chatCompressionService.test.js +1 -0
  212. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  213. package/dist/src/services/gitService.js +1 -1
  214. package/dist/src/services/gitService.js.map +1 -1
  215. package/dist/src/services/gitService.test.js +1 -1
  216. package/dist/src/services/gitService.test.js.map +1 -1
  217. package/dist/src/services/loopDetectionService.d.ts +3 -0
  218. package/dist/src/services/loopDetectionService.js +81 -42
  219. package/dist/src/services/loopDetectionService.js.map +1 -1
  220. package/dist/src/services/loopDetectionService.test.js +101 -1
  221. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  222. package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
  223. package/dist/src/services/modelConfig.golden.test.js +42 -0
  224. package/dist/src/services/modelConfig.golden.test.js.map +1 -0
  225. package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
  226. package/dist/src/services/modelConfig.integration.test.js +213 -0
  227. package/dist/src/services/modelConfig.integration.test.js.map +1 -0
  228. package/dist/src/services/modelConfigService.d.ts +46 -0
  229. package/dist/src/services/modelConfigService.js +146 -0
  230. package/dist/src/services/modelConfigService.js.map +1 -0
  231. package/dist/src/services/modelConfigService.test.d.ts +6 -0
  232. package/dist/src/services/modelConfigService.test.js +509 -0
  233. package/dist/src/services/modelConfigService.test.js.map +1 -0
  234. package/dist/src/services/test-data/resolved-aliases.golden.json +169 -0
  235. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -9
  236. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +174 -150
  237. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  238. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
  239. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +76 -20
  240. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  241. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +6 -1
  242. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +18 -5
  243. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  244. package/dist/src/telemetry/index.d.ts +2 -2
  245. package/dist/src/telemetry/index.js +2 -2
  246. package/dist/src/telemetry/index.js.map +1 -1
  247. package/dist/src/telemetry/loggers.d.ts +7 -7
  248. package/dist/src/telemetry/loggers.js +23 -23
  249. package/dist/src/telemetry/loggers.js.map +1 -1
  250. package/dist/src/telemetry/loggers.test.circular.js +0 -1
  251. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  252. package/dist/src/telemetry/loggers.test.js +72 -18
  253. package/dist/src/telemetry/loggers.test.js.map +1 -1
  254. package/dist/src/telemetry/metrics.d.ts +8 -4
  255. package/dist/src/telemetry/metrics.js +10 -4
  256. package/dist/src/telemetry/metrics.js.map +1 -1
  257. package/dist/src/telemetry/metrics.test.js +42 -0
  258. package/dist/src/telemetry/metrics.test.js.map +1 -1
  259. package/dist/src/telemetry/telemetryAttributes.js +1 -0
  260. package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
  261. package/dist/src/telemetry/types.d.ts +17 -11
  262. package/dist/src/telemetry/types.js +53 -28
  263. package/dist/src/telemetry/types.js.map +1 -1
  264. package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
  265. package/dist/src/tools/base-tool-invocation.test.js +85 -0
  266. package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
  267. package/dist/src/tools/edit.d.ts +1 -1
  268. package/dist/src/tools/edit.js +31 -33
  269. package/dist/src/tools/edit.js.map +1 -1
  270. package/dist/src/tools/edit.test.js +31 -20
  271. package/dist/src/tools/edit.test.js.map +1 -1
  272. package/dist/src/tools/glob.d.ts +1 -1
  273. package/dist/src/tools/glob.js +7 -7
  274. package/dist/src/tools/glob.js.map +1 -1
  275. package/dist/src/tools/glob.test.js +20 -17
  276. package/dist/src/tools/glob.test.js.map +1 -1
  277. package/dist/src/tools/grep.d.ts +1 -1
  278. package/dist/src/tools/grep.js +9 -9
  279. package/dist/src/tools/grep.js.map +1 -1
  280. package/dist/src/tools/grep.test.js +15 -12
  281. package/dist/src/tools/grep.test.js.map +1 -1
  282. package/dist/src/tools/ls.d.ts +1 -1
  283. package/dist/src/tools/ls.js +14 -15
  284. package/dist/src/tools/ls.js.map +1 -1
  285. package/dist/src/tools/ls.test.js +32 -33
  286. package/dist/src/tools/ls.test.js.map +1 -1
  287. package/dist/src/tools/mcp-client.js +24 -52
  288. package/dist/src/tools/mcp-client.js.map +1 -1
  289. package/dist/src/tools/mcp-client.test.js +18 -0
  290. package/dist/src/tools/mcp-client.test.js.map +1 -1
  291. package/dist/src/tools/mcp-tool.d.ts +1 -0
  292. package/dist/src/tools/mcp-tool.js +5 -2
  293. package/dist/src/tools/mcp-tool.js.map +1 -1
  294. package/dist/src/tools/memoryTool.js +1 -1
  295. package/dist/src/tools/memoryTool.js.map +1 -1
  296. package/dist/src/tools/memoryTool.test.js +1 -1
  297. package/dist/src/tools/memoryTool.test.js.map +1 -1
  298. package/dist/src/tools/modifiable-tool.d.ts +5 -1
  299. package/dist/src/tools/modifiable-tool.js +34 -13
  300. package/dist/src/tools/modifiable-tool.js.map +1 -1
  301. package/dist/src/tools/modifiable-tool.test.js +56 -22
  302. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  303. package/dist/src/tools/read-file.d.ts +2 -2
  304. package/dist/src/tools/read-file.js +20 -24
  305. package/dist/src/tools/read-file.js.map +1 -1
  306. package/dist/src/tools/read-file.test.js +63 -51
  307. package/dist/src/tools/read-file.test.js.map +1 -1
  308. package/dist/src/tools/read-many-files.d.ts +2 -9
  309. package/dist/src/tools/read-many-files.js +10 -21
  310. package/dist/src/tools/read-many-files.js.map +1 -1
  311. package/dist/src/tools/read-many-files.test.js +37 -35
  312. package/dist/src/tools/read-many-files.test.js.map +1 -1
  313. package/dist/src/tools/ripGrep.d.ts +25 -8
  314. package/dist/src/tools/ripGrep.js +148 -176
  315. package/dist/src/tools/ripGrep.js.map +1 -1
  316. package/dist/src/tools/ripGrep.test.js +383 -58
  317. package/dist/src/tools/ripGrep.test.js.map +1 -1
  318. package/dist/src/tools/shell.d.ts +1 -1
  319. package/dist/src/tools/shell.js +17 -15
  320. package/dist/src/tools/shell.js.map +1 -1
  321. package/dist/src/tools/shell.test.js +66 -36
  322. package/dist/src/tools/shell.test.js.map +1 -1
  323. package/dist/src/tools/smart-edit.d.ts +6 -1
  324. package/dist/src/tools/smart-edit.js +18 -17
  325. package/dist/src/tools/smart-edit.js.map +1 -1
  326. package/dist/src/tools/smart-edit.test.js +49 -24
  327. package/dist/src/tools/smart-edit.test.js.map +1 -1
  328. package/dist/src/tools/tool-registry.d.ts +29 -4
  329. package/dist/src/tools/tool-registry.js +108 -29
  330. package/dist/src/tools/tool-registry.js.map +1 -1
  331. package/dist/src/tools/tool-registry.test.js +134 -4
  332. package/dist/src/tools/tool-registry.test.js.map +1 -1
  333. package/dist/src/tools/tools.d.ts +2 -1
  334. package/dist/src/tools/tools.js +5 -2
  335. package/dist/src/tools/tools.js.map +1 -1
  336. package/dist/src/tools/web-fetch.js +2 -4
  337. package/dist/src/tools/web-fetch.js.map +1 -1
  338. package/dist/src/tools/web-fetch.test.js +11 -4
  339. package/dist/src/tools/web-fetch.test.js.map +1 -1
  340. package/dist/src/tools/web-search.js +1 -2
  341. package/dist/src/tools/web-search.js.map +1 -1
  342. package/dist/src/tools/web-search.test.js +11 -5
  343. package/dist/src/tools/web-search.test.js.map +1 -1
  344. package/dist/src/tools/write-file.js +31 -31
  345. package/dist/src/tools/write-file.js.map +1 -1
  346. package/dist/src/tools/write-file.test.js +24 -5
  347. package/dist/src/tools/write-file.test.js.map +1 -1
  348. package/dist/src/tools/write-todos.d.ts +29 -0
  349. package/dist/src/tools/write-todos.js +34 -1
  350. package/dist/src/tools/write-todos.js.map +1 -1
  351. package/dist/src/utils/editCorrector.js +4 -15
  352. package/dist/src/utils/editCorrector.js.map +1 -1
  353. package/dist/src/utils/editCorrector.test.js +16 -0
  354. package/dist/src/utils/editCorrector.test.js.map +1 -1
  355. package/dist/src/utils/editor.d.ts +3 -1
  356. package/dist/src/utils/editor.js +18 -1
  357. package/dist/src/utils/editor.js.map +1 -1
  358. package/dist/src/utils/editor.test.js +11 -0
  359. package/dist/src/utils/editor.test.js.map +1 -1
  360. package/dist/src/utils/environmentContext.js +3 -1
  361. package/dist/src/utils/environmentContext.js.map +1 -1
  362. package/dist/src/utils/environmentContext.test.js +6 -0
  363. package/dist/src/utils/environmentContext.test.js.map +1 -1
  364. package/dist/src/utils/events.d.ts +14 -11
  365. package/dist/src/utils/events.js +1 -14
  366. package/dist/src/utils/events.js.map +1 -1
  367. package/dist/src/utils/extensionLoader.d.ts +8 -0
  368. package/dist/src/utils/extensionLoader.js +61 -15
  369. package/dist/src/utils/extensionLoader.js.map +1 -1
  370. package/dist/src/utils/extensionLoader.test.js +83 -19
  371. package/dist/src/utils/extensionLoader.test.js.map +1 -1
  372. package/dist/src/utils/fileUtils.test.js +75 -60
  373. package/dist/src/utils/fileUtils.test.js.map +1 -1
  374. package/dist/src/utils/flashFallback.test.js +2 -2
  375. package/dist/src/utils/flashFallback.test.js.map +1 -1
  376. package/dist/src/utils/googleQuotaErrors.d.ts +2 -1
  377. package/dist/src/utils/googleQuotaErrors.js +20 -12
  378. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  379. package/dist/src/utils/httpErrors.d.ts +18 -0
  380. package/dist/src/utils/httpErrors.js +36 -0
  381. package/dist/src/utils/httpErrors.js.map +1 -0
  382. package/dist/src/utils/llm-edit-fixer.js +1 -2
  383. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  384. package/dist/src/utils/llm-edit-fixer.test.js +16 -1
  385. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  386. package/dist/src/utils/memoryDiscovery.d.ts +8 -0
  387. package/dist/src/utils/memoryDiscovery.js +24 -0
  388. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  389. package/dist/src/utils/memoryDiscovery.test.js +43 -1
  390. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  391. package/dist/src/utils/nextSpeakerChecker.js +1 -2
  392. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  393. package/dist/src/utils/nextSpeakerChecker.test.js +10 -4
  394. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  395. package/dist/src/utils/pathReader.js +4 -4
  396. package/dist/src/utils/pathReader.js.map +1 -1
  397. package/dist/src/utils/pathReader.test.js +44 -1
  398. package/dist/src/utils/pathReader.test.js.map +1 -1
  399. package/dist/src/utils/paths.d.ts +1 -1
  400. package/dist/src/utils/paths.js +5 -3
  401. package/dist/src/utils/paths.js.map +1 -1
  402. package/dist/src/utils/retry.d.ts +0 -9
  403. package/dist/src/utils/retry.js +24 -28
  404. package/dist/src/utils/retry.js.map +1 -1
  405. package/dist/src/utils/retry.test.js +51 -0
  406. package/dist/src/utils/retry.test.js.map +1 -1
  407. package/dist/src/utils/shell-utils.js +5 -3
  408. package/dist/src/utils/shell-utils.js.map +1 -1
  409. package/dist/src/utils/shell-utils.test.js +9 -9
  410. package/dist/src/utils/shell-utils.test.js.map +1 -1
  411. package/dist/src/utils/summarizer.d.ts +4 -2
  412. package/dist/src/utils/summarizer.js +6 -8
  413. package/dist/src/utils/summarizer.js.map +1 -1
  414. package/dist/src/utils/summarizer.test.js +32 -11
  415. package/dist/src/utils/summarizer.test.js.map +1 -1
  416. package/dist/src/utils/workspaceContext.d.ts +4 -3
  417. package/dist/src/utils/workspaceContext.js +10 -11
  418. package/dist/src/utils/workspaceContext.js.map +1 -1
  419. package/dist/src/utils/workspaceContext.test.js +1 -1
  420. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  421. package/dist/tsconfig.tsbuildinfo +1 -1
  422. package/package.json +1 -1
@@ -6,8 +6,9 @@
6
6
  import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
7
  import { handleFallback } from './handler.js';
8
8
  import { AuthType } from '../core/contentGenerator.js';
9
- import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, } from '../config/models.js';
9
+ import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
10
10
  import { logFlashFallback } from '../telemetry/index.js';
11
+ import { ModelNotFoundError } from '../utils/httpErrors.js';
11
12
  // Mock the telemetry logger and event class
12
13
  vi.mock('../telemetry/index.js', () => ({
13
14
  logFlashFallback: vi.fn(),
@@ -21,7 +22,13 @@ const AUTH_API_KEY = AuthType.USE_GEMINI;
21
22
  const createMockConfig = (overrides = {}) => ({
22
23
  isInFallbackMode: vi.fn(() => false),
23
24
  setFallbackMode: vi.fn(),
25
+ isPreviewModelFallbackMode: vi.fn(() => false),
26
+ setPreviewModelFallbackMode: vi.fn(),
27
+ isPreviewModelBypassMode: vi.fn(() => false),
28
+ setPreviewModelBypassMode: vi.fn(),
24
29
  fallbackHandler: undefined,
30
+ getFallbackModelHandler: vi.fn(),
31
+ isInteractive: vi.fn(() => false),
25
32
  ...overrides,
26
33
  });
27
34
  describe('handleFallback', () => {
@@ -46,11 +53,12 @@ describe('handleFallback', () => {
46
53
  expect(mockHandler).not.toHaveBeenCalled();
47
54
  expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
48
55
  });
49
- it('should return null if the failed model is already the fallback model', async () => {
56
+ it('should still consult the handler if the failed model is the fallback model', async () => {
57
+ mockHandler.mockResolvedValue('stop');
50
58
  const result = await handleFallback(mockConfig, FALLBACK_MODEL, // Failed model is Flash
51
59
  AUTH_OAUTH);
52
- expect(result).toBeNull();
53
- expect(mockHandler).not.toHaveBeenCalled();
60
+ expect(result).toBe(false);
61
+ expect(mockHandler).toHaveBeenCalled();
54
62
  });
55
63
  it('should return null if no fallbackHandler is injected in config', async () => {
56
64
  const configWithoutHandler = createMockConfig({
@@ -61,7 +69,7 @@ describe('handleFallback', () => {
61
69
  });
62
70
  describe('when handler returns "retry"', () => {
63
71
  it('should activate fallback mode, log telemetry, and return true', async () => {
64
- mockHandler.mockResolvedValue('retry');
72
+ mockHandler.mockResolvedValue('retry_always');
65
73
  const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
66
74
  expect(result).toBe(true);
67
75
  expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
@@ -77,15 +85,6 @@ describe('handleFallback', () => {
77
85
  expect(logFlashFallback).toHaveBeenCalled();
78
86
  });
79
87
  });
80
- describe('when handler returns "auth"', () => {
81
- it('should NOT activate fallback mode and return false', async () => {
82
- mockHandler.mockResolvedValue('auth');
83
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
84
- expect(result).toBe(false);
85
- expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
86
- expect(logFlashFallback).not.toHaveBeenCalled();
87
- });
88
- });
89
88
  describe('when handler returns an unexpected value', () => {
90
89
  it('should log an error and return null', async () => {
91
90
  mockHandler.mockResolvedValue(null);
@@ -97,7 +96,7 @@ describe('handleFallback', () => {
97
96
  });
98
97
  it('should pass the correct context (failedModel, fallbackModel, error) to the handler', async () => {
99
98
  const mockError = new Error('Quota Exceeded');
100
- mockHandler.mockResolvedValue('retry');
99
+ mockHandler.mockResolvedValue('retry_always');
101
100
  await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH, mockError);
102
101
  expect(mockHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, FALLBACK_MODEL, mockError);
103
102
  });
@@ -108,7 +107,7 @@ describe('handleFallback', () => {
108
107
  isInFallbackMode: vi.fn(() => true), // Already active
109
108
  setFallbackMode: vi.fn(),
110
109
  });
111
- mockHandler.mockResolvedValue('retry');
110
+ mockHandler.mockResolvedValue('retry_always');
112
111
  const result = await handleFallback(activeFallbackConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
113
112
  // Should still return true to allow the retry (which will use the active fallback mode)
114
113
  expect(result).toBe(true);
@@ -126,5 +125,59 @@ describe('handleFallback', () => {
126
125
  expect(consoleErrorSpy).toHaveBeenCalledWith('Fallback UI handler failed:', handlerError);
127
126
  expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
128
127
  });
128
+ describe('Preview Model Fallback Logic', () => {
129
+ const previewModel = PREVIEW_GEMINI_MODEL;
130
+ it('should always set Preview Model bypass mode on failure', async () => {
131
+ await handleFallback(mockConfig, previewModel, AUTH_OAUTH);
132
+ expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
133
+ });
134
+ it('should silently retry if Preview Model fallback mode is already active', async () => {
135
+ vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(true);
136
+ const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH);
137
+ expect(result).toBe(true);
138
+ expect(mockHandler).not.toHaveBeenCalled();
139
+ });
140
+ it('should activate Preview Model fallback mode when handler returns "retry_always"', async () => {
141
+ mockHandler.mockResolvedValue('retry_always');
142
+ const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH);
143
+ expect(result).toBe(true);
144
+ expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
145
+ expect(mockConfig.setPreviewModelFallbackMode).toHaveBeenCalledWith(true);
146
+ });
147
+ it('should NOT set fallback mode if user chooses "retry_once"', async () => {
148
+ mockHandler.mockResolvedValue('retry_once');
149
+ const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, new Error('Capacity'));
150
+ expect(result).toBe(true);
151
+ expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
152
+ expect(mockConfig.setPreviewModelFallbackMode).not.toHaveBeenCalled();
153
+ });
154
+ it('should set fallback mode if user chooses "retry_always"', async () => {
155
+ mockHandler.mockResolvedValue('retry_always');
156
+ const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, new Error('Capacity'));
157
+ expect(result).toBe(true);
158
+ expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
159
+ expect(mockConfig.setPreviewModelFallbackMode).toHaveBeenCalledWith(true);
160
+ });
161
+ it('should pass DEFAULT_GEMINI_MODEL as fallback when Preview Model fails', async () => {
162
+ const mockFallbackHandler = vi.fn().mockResolvedValue('stop');
163
+ vi.mocked(mockConfig.fallbackModelHandler).mockImplementation(mockFallbackHandler);
164
+ await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE);
165
+ expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, undefined);
166
+ });
167
+ });
168
+ it('should return null if ModelNotFoundError occurs for a non-preview model', async () => {
169
+ const modelNotFoundError = new ModelNotFoundError('Not found');
170
+ const result = await handleFallback(mockConfig, DEFAULT_GEMINI_MODEL, // Not preview model
171
+ AUTH_OAUTH, modelNotFoundError);
172
+ expect(result).toBeNull();
173
+ expect(mockHandler).not.toHaveBeenCalled();
174
+ });
175
+ it('should consult handler if ModelNotFoundError occurs for preview model', async () => {
176
+ const modelNotFoundError = new ModelNotFoundError('Not found');
177
+ mockHandler.mockResolvedValue('retry_always');
178
+ const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AUTH_OAUTH, modelNotFoundError);
179
+ expect(result).toBe(true);
180
+ expect(mockHandler).toHaveBeenCalled();
181
+ });
129
182
  });
130
183
  //# sourceMappingURL=handler.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  /**
7
7
  * Defines the intent returned by the UI layer during a fallback scenario.
8
8
  */
9
- export type FallbackIntent = 'retry' | 'stop' | 'auth';
9
+ export type FallbackIntent = 'retry_always' | 'retry_once' | 'stop' | 'retry_later' | 'upgrade';
10
10
  /**
11
11
  * The interface for the handler provided by the UI layer (e.g., the CLI)
12
12
  * to interact with the user during a fallback scenario.
@@ -3,5 +3,5 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export declare const GIT_COMMIT_INFO = "a2a890918";
7
- export declare const CLI_VERSION = "1.13.0-rc4";
6
+ export declare const GIT_COMMIT_INFO = "32430e21c";
7
+ export declare const CLI_VERSION = "1.16.0-rc1";
@@ -5,6 +5,6 @@
5
5
  */
6
6
  // This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
7
7
  // Do not edit this file manually.
8
- export const GIT_COMMIT_INFO = 'a2a890918';
9
- export const CLI_VERSION = '1.13.0-rc4';
8
+ export const GIT_COMMIT_INFO = '32430e21c';
9
+ export const CLI_VERSION = '1.16.0-rc1';
10
10
  //# sourceMappingURL=git-commit.js.map
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { HookOutput, HookExecutionResult } from './types.js';
7
+ import { DefaultHookOutput } from './types.js';
8
+ import { HookEventName } from './types.js';
9
+ /**
10
+ * Aggregated hook result
11
+ */
12
+ export interface AggregatedHookResult {
13
+ success: boolean;
14
+ finalOutput?: DefaultHookOutput;
15
+ allOutputs: HookOutput[];
16
+ errors: Error[];
17
+ totalDuration: number;
18
+ }
19
+ /**
20
+ * Hook aggregator that merges results from multiple hooks using event-specific strategies
21
+ */
22
+ export declare class HookAggregator {
23
+ /**
24
+ * Aggregate results from multiple hook executions
25
+ */
26
+ aggregateResults(results: HookExecutionResult[], eventName: HookEventName): AggregatedHookResult;
27
+ /**
28
+ * Merge hook outputs using event-specific strategies
29
+ *
30
+ * Note: We always use the merge logic even for single hooks to ensure
31
+ * consistent default behaviors (e.g., default decision='allow' for OR logic)
32
+ */
33
+ private mergeOutputs;
34
+ /**
35
+ * Merge outputs with OR decision logic and message concatenation
36
+ */
37
+ private mergeWithOrDecision;
38
+ /**
39
+ * Merge outputs with later fields replacing earlier fields
40
+ */
41
+ private mergeWithFieldReplacement;
42
+ /**
43
+ * Merge tool selection outputs with specific logic for tool config
44
+ *
45
+ * Tool Selection Strategy:
46
+ * - The intent is to provide a UNION of tools from all hooks
47
+ * - If any hook specifies NONE mode, no tools are available (most restrictive wins)
48
+ * - If any hook specifies ANY mode (and no NONE), ANY mode is used
49
+ * - Otherwise AUTO mode is used
50
+ * - Function names are collected from all hooks and sorted for deterministic caching
51
+ *
52
+ * This means hooks can only add/enable tools, not filter them out individually.
53
+ * If one hook restricts and another re-enables, the union takes the re-enabled tool.
54
+ */
55
+ private mergeToolSelectionOutputs;
56
+ /**
57
+ * Simple merge for events without special logic
58
+ */
59
+ private mergeSimple;
60
+ /**
61
+ * Create the appropriate specific hook output class based on event type
62
+ */
63
+ private createSpecificHookOutput;
64
+ /**
65
+ * Extract additional context from hook-specific outputs
66
+ */
67
+ private extractAdditionalContext;
68
+ }
@@ -0,0 +1,262 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FunctionCallingConfigMode } from '@google/genai';
7
+ import { DefaultHookOutput, BeforeToolHookOutput, BeforeModelHookOutput, BeforeToolSelectionHookOutput, AfterModelHookOutput, } from './types.js';
8
+ import { HookEventName } from './types.js';
9
+ /**
10
+ * Hook aggregator that merges results from multiple hooks using event-specific strategies
11
+ */
12
+ export class HookAggregator {
13
+ /**
14
+ * Aggregate results from multiple hook executions
15
+ */
16
+ aggregateResults(results, eventName) {
17
+ const allOutputs = [];
18
+ const errors = [];
19
+ let totalDuration = 0;
20
+ // Collect all outputs and errors
21
+ for (const result of results) {
22
+ totalDuration += result.duration;
23
+ if (result.error) {
24
+ errors.push(result.error);
25
+ }
26
+ if (result.output) {
27
+ allOutputs.push(result.output);
28
+ }
29
+ }
30
+ // Merge outputs using event-specific strategy
31
+ const mergedOutput = this.mergeOutputs(allOutputs, eventName);
32
+ const finalOutput = mergedOutput
33
+ ? this.createSpecificHookOutput(mergedOutput, eventName)
34
+ : undefined;
35
+ return {
36
+ success: errors.length === 0,
37
+ finalOutput,
38
+ allOutputs,
39
+ errors,
40
+ totalDuration,
41
+ };
42
+ }
43
+ /**
44
+ * Merge hook outputs using event-specific strategies
45
+ *
46
+ * Note: We always use the merge logic even for single hooks to ensure
47
+ * consistent default behaviors (e.g., default decision='allow' for OR logic)
48
+ */
49
+ mergeOutputs(outputs, eventName) {
50
+ if (outputs.length === 0) {
51
+ return undefined;
52
+ }
53
+ switch (eventName) {
54
+ case HookEventName.BeforeTool:
55
+ case HookEventName.AfterTool:
56
+ case HookEventName.BeforeAgent:
57
+ case HookEventName.AfterAgent:
58
+ case HookEventName.SessionStart:
59
+ return this.mergeWithOrDecision(outputs);
60
+ case HookEventName.BeforeModel:
61
+ case HookEventName.AfterModel:
62
+ return this.mergeWithFieldReplacement(outputs);
63
+ case HookEventName.BeforeToolSelection:
64
+ return this.mergeToolSelectionOutputs(outputs);
65
+ default:
66
+ // For other events, use simple merge
67
+ return this.mergeSimple(outputs);
68
+ }
69
+ }
70
+ /**
71
+ * Merge outputs with OR decision logic and message concatenation
72
+ */
73
+ mergeWithOrDecision(outputs) {
74
+ const merged = {
75
+ continue: true,
76
+ suppressOutput: false,
77
+ };
78
+ const messages = [];
79
+ const reasons = [];
80
+ const systemMessages = [];
81
+ const additionalContexts = [];
82
+ let hasBlockDecision = false;
83
+ let hasContinueFalse = false;
84
+ for (const output of outputs) {
85
+ // Handle continue flag
86
+ if (output.continue === false) {
87
+ hasContinueFalse = true;
88
+ merged.continue = false;
89
+ if (output.stopReason) {
90
+ messages.push(output.stopReason);
91
+ }
92
+ }
93
+ // Handle decision (OR logic for blocking)
94
+ const tempOutput = new DefaultHookOutput(output);
95
+ if (tempOutput.isBlockingDecision()) {
96
+ hasBlockDecision = true;
97
+ merged.decision = output.decision;
98
+ }
99
+ // Collect messages
100
+ if (output.reason) {
101
+ reasons.push(output.reason);
102
+ }
103
+ if (output.systemMessage) {
104
+ systemMessages.push(output.systemMessage);
105
+ }
106
+ // Handle suppress output (any true wins)
107
+ if (output.suppressOutput) {
108
+ merged.suppressOutput = true;
109
+ }
110
+ // Collect additional context from hook-specific outputs
111
+ this.extractAdditionalContext(output, additionalContexts);
112
+ }
113
+ // Set final decision if no blocking decision was found
114
+ if (!hasBlockDecision && !hasContinueFalse) {
115
+ merged.decision = 'allow';
116
+ }
117
+ // Merge messages
118
+ if (messages.length > 0) {
119
+ merged.stopReason = messages.join('\n');
120
+ }
121
+ if (reasons.length > 0) {
122
+ merged.reason = reasons.join('\n');
123
+ }
124
+ if (systemMessages.length > 0) {
125
+ merged.systemMessage = systemMessages.join('\n');
126
+ }
127
+ // Add merged additional context
128
+ if (additionalContexts.length > 0) {
129
+ merged.hookSpecificOutput = {
130
+ ...(merged.hookSpecificOutput || {}),
131
+ additionalContext: additionalContexts.join('\n'),
132
+ };
133
+ }
134
+ return merged;
135
+ }
136
+ /**
137
+ * Merge outputs with later fields replacing earlier fields
138
+ */
139
+ mergeWithFieldReplacement(outputs) {
140
+ let merged = {};
141
+ for (const output of outputs) {
142
+ // Later outputs override earlier ones
143
+ merged = {
144
+ ...merged,
145
+ ...output,
146
+ hookSpecificOutput: {
147
+ ...merged.hookSpecificOutput,
148
+ ...output.hookSpecificOutput,
149
+ },
150
+ };
151
+ }
152
+ return merged;
153
+ }
154
+ /**
155
+ * Merge tool selection outputs with specific logic for tool config
156
+ *
157
+ * Tool Selection Strategy:
158
+ * - The intent is to provide a UNION of tools from all hooks
159
+ * - If any hook specifies NONE mode, no tools are available (most restrictive wins)
160
+ * - If any hook specifies ANY mode (and no NONE), ANY mode is used
161
+ * - Otherwise AUTO mode is used
162
+ * - Function names are collected from all hooks and sorted for deterministic caching
163
+ *
164
+ * This means hooks can only add/enable tools, not filter them out individually.
165
+ * If one hook restricts and another re-enables, the union takes the re-enabled tool.
166
+ */
167
+ mergeToolSelectionOutputs(outputs) {
168
+ const merged = {};
169
+ const allFunctionNames = new Set();
170
+ let hasNoneMode = false;
171
+ let hasAnyMode = false;
172
+ for (const output of outputs) {
173
+ const toolConfig = output.hookSpecificOutput?.toolConfig;
174
+ if (!toolConfig) {
175
+ continue;
176
+ }
177
+ // Check mode (using simplified HookToolConfig format)
178
+ if (toolConfig.mode === 'NONE') {
179
+ hasNoneMode = true;
180
+ }
181
+ else if (toolConfig.mode === 'ANY') {
182
+ hasAnyMode = true;
183
+ }
184
+ // Collect function names (union of all hooks)
185
+ if (toolConfig.allowedFunctionNames) {
186
+ for (const name of toolConfig.allowedFunctionNames) {
187
+ allFunctionNames.add(name);
188
+ }
189
+ }
190
+ }
191
+ // Determine final mode and function names
192
+ let finalMode;
193
+ let finalFunctionNames = [];
194
+ if (hasNoneMode) {
195
+ // NONE mode wins - most restrictive
196
+ finalMode = FunctionCallingConfigMode.NONE;
197
+ finalFunctionNames = [];
198
+ }
199
+ else if (hasAnyMode) {
200
+ // ANY mode if present (and no NONE)
201
+ finalMode = FunctionCallingConfigMode.ANY;
202
+ // Sort for deterministic output to ensure consistent caching
203
+ finalFunctionNames = Array.from(allFunctionNames).sort();
204
+ }
205
+ else {
206
+ // Default to AUTO mode
207
+ finalMode = FunctionCallingConfigMode.AUTO;
208
+ // Sort for deterministic output to ensure consistent caching
209
+ finalFunctionNames = Array.from(allFunctionNames).sort();
210
+ }
211
+ merged.hookSpecificOutput = {
212
+ hookEventName: 'BeforeToolSelection',
213
+ toolConfig: {
214
+ mode: finalMode,
215
+ allowedFunctionNames: finalFunctionNames,
216
+ },
217
+ };
218
+ return merged;
219
+ }
220
+ /**
221
+ * Simple merge for events without special logic
222
+ */
223
+ mergeSimple(outputs) {
224
+ let merged = {};
225
+ for (const output of outputs) {
226
+ merged = { ...merged, ...output };
227
+ }
228
+ return merged;
229
+ }
230
+ /**
231
+ * Create the appropriate specific hook output class based on event type
232
+ */
233
+ createSpecificHookOutput(output, eventName) {
234
+ switch (eventName) {
235
+ case HookEventName.BeforeTool:
236
+ return new BeforeToolHookOutput(output);
237
+ case HookEventName.BeforeModel:
238
+ return new BeforeModelHookOutput(output);
239
+ case HookEventName.BeforeToolSelection:
240
+ return new BeforeToolSelectionHookOutput(output);
241
+ case HookEventName.AfterModel:
242
+ return new AfterModelHookOutput(output);
243
+ default:
244
+ return new DefaultHookOutput(output);
245
+ }
246
+ }
247
+ /**
248
+ * Extract additional context from hook-specific outputs
249
+ */
250
+ extractAdditionalContext(output, contexts) {
251
+ const specific = output.hookSpecificOutput;
252
+ if (!specific) {
253
+ return;
254
+ }
255
+ // Extract additionalContext from various hook types
256
+ if ('additionalContext' in specific &&
257
+ typeof specific['additionalContext'] === 'string') {
258
+ contexts.push(specific['additionalContext']);
259
+ }
260
+ }
261
+ }
262
+ //# sourceMappingURL=hookAggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookAggregator.js","sourceRoot":"","sources":["../../../src/hooks/hookAggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};