@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,10 +5,14 @@
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
7
  import { handleFallback } from './handler.js';
8
+ import { createAvailabilityServiceMock } from '../availability/testUtils.js';
8
9
  import { AuthType } from '../core/contentGenerator.js';
9
- import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
10
- import { logFlashFallback } from '../telemetry/index.js';
11
- import { ModelNotFoundError } from '../utils/httpErrors.js';
10
+ import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, PREVIEW_GEMINI_FLASH_MODEL, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, } from '../config/models.js';
11
+ import { openBrowserSecurely } from '../utils/secure-browser-launcher.js';
12
+ import { coreEvents } from '../utils/events.js';
13
+ import { debugLogger } from '../utils/debugLogger.js';
14
+ import * as policyHelpers from '../availability/policyHelpers.js';
15
+ import { createDefaultPolicy } from '../availability/policyCatalog.js';
12
16
  import { RetryableQuotaError, TerminalQuotaError, } from '../utils/googleQuotaErrors.js';
13
17
  // Mock the telemetry logger and event class
14
18
  vi.mock('../telemetry/index.js', () => ({
@@ -16,6 +20,17 @@ vi.mock('../telemetry/index.js', () => ({
16
20
  FlashFallbackEvent: class {
17
21
  },
18
22
  }));
23
+ vi.mock('../utils/secure-browser-launcher.js', () => ({
24
+ openBrowserSecurely: vi.fn(),
25
+ }));
26
+ // Mock debugLogger to prevent console pollution and allow spying
27
+ vi.mock('../utils/debugLogger.js', () => ({
28
+ debugLogger: {
29
+ warn: vi.fn(),
30
+ error: vi.fn(),
31
+ log: vi.fn(),
32
+ },
33
+ }));
19
34
  const MOCK_PRO_MODEL = DEFAULT_GEMINI_MODEL;
20
35
  const FALLBACK_MODEL = DEFAULT_GEMINI_FLASH_MODEL;
21
36
  const AUTH_OAUTH = AuthType.LOGIN_WITH_GOOGLE;
@@ -23,12 +38,22 @@ const AUTH_API_KEY = AuthType.USE_GEMINI;
23
38
  const createMockConfig = (overrides = {}) => ({
24
39
  isInFallbackMode: vi.fn(() => false),
25
40
  setFallbackMode: vi.fn(),
41
+ isModelAvailabilityServiceEnabled: vi.fn(() => true),
26
42
  isPreviewModelFallbackMode: vi.fn(() => false),
27
43
  setPreviewModelFallbackMode: vi.fn(),
28
44
  isPreviewModelBypassMode: vi.fn(() => false),
29
45
  setPreviewModelBypassMode: vi.fn(),
30
46
  fallbackHandler: undefined,
31
47
  getFallbackModelHandler: vi.fn(),
48
+ setActiveModel: vi.fn(),
49
+ getModelAvailabilityService: vi.fn(() => createAvailabilityServiceMock({
50
+ selectedModel: FALLBACK_MODEL,
51
+ skipped: [],
52
+ })),
53
+ getActiveModel: vi.fn(() => MOCK_PRO_MODEL),
54
+ getModel: vi.fn(() => MOCK_PRO_MODEL),
55
+ getPreviewFeatures: vi.fn(() => false),
56
+ getUserTier: vi.fn(() => undefined),
32
57
  isInteractive: vi.fn(() => false),
33
58
  ...overrides,
34
59
  });
@@ -36,6 +61,7 @@ describe('handleFallback', () => {
36
61
  let mockConfig;
37
62
  let mockHandler;
38
63
  let consoleErrorSpy;
64
+ let fallbackEventSpy;
39
65
  beforeEach(() => {
40
66
  vi.clearAllMocks();
41
67
  mockHandler = vi.fn();
@@ -43,203 +69,193 @@ describe('handleFallback', () => {
43
69
  mockConfig = createMockConfig({
44
70
  fallbackModelHandler: mockHandler,
45
71
  });
72
+ // Explicitly set the property to ensure it's present for legacy checks
73
+ mockConfig.fallbackModelHandler = mockHandler;
74
+ // We mocked debugLogger, so we don't need to spy on console.error for handler failures
75
+ // But tests might check console.error usage in legacy code if any?
76
+ // The handler uses console.error in legacyHandleFallback.
46
77
  consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
78
+ fallbackEventSpy = vi.spyOn(coreEvents, 'emitFallbackModeChanged');
47
79
  });
48
80
  afterEach(() => {
49
81
  consoleErrorSpy.mockRestore();
82
+ fallbackEventSpy.mockRestore();
50
83
  });
51
- it('should return null immediately if authType is not OAuth', async () => {
52
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_API_KEY);
53
- expect(result).toBeNull();
54
- expect(mockHandler).not.toHaveBeenCalled();
55
- expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
56
- });
57
- it('should still consult the handler if the failed model is the fallback model', async () => {
58
- mockHandler.mockResolvedValue('stop');
59
- const result = await handleFallback(mockConfig, FALLBACK_MODEL, // Failed model is Flash
60
- AUTH_OAUTH);
61
- expect(result).toBe(false);
62
- expect(mockHandler).toHaveBeenCalled();
63
- });
64
- it('should return null if no fallbackHandler is injected in config', async () => {
65
- const configWithoutHandler = createMockConfig({
66
- fallbackModelHandler: undefined,
84
+ describe('policy-driven flow', () => {
85
+ let policyConfig;
86
+ let availability;
87
+ let policyHandler;
88
+ beforeEach(() => {
89
+ vi.clearAllMocks();
90
+ availability = createAvailabilityServiceMock({
91
+ selectedModel: DEFAULT_GEMINI_FLASH_MODEL,
92
+ skipped: [],
93
+ });
94
+ policyHandler = vi.fn().mockResolvedValue('retry_once');
95
+ policyConfig = createMockConfig();
96
+ // Ensure we test the availability path
97
+ vi.mocked(policyConfig.isModelAvailabilityServiceEnabled).mockReturnValue(true);
98
+ vi.mocked(policyConfig.getModelAvailabilityService).mockReturnValue(availability);
99
+ vi.mocked(policyConfig.getFallbackModelHandler).mockReturnValue(policyHandler);
67
100
  });
68
- const result = await handleFallback(configWithoutHandler, MOCK_PRO_MODEL, AUTH_OAUTH);
69
- expect(result).toBeNull();
70
- });
71
- describe('when handler returns "retry_always"', () => {
72
- it('should activate fallback mode, log telemetry, and return true', async () => {
73
- mockHandler.mockResolvedValue('retry_always');
74
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
75
- expect(result).toBe(true);
76
- expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
77
- expect(logFlashFallback).toHaveBeenCalled();
101
+ it('should return null immediately if authType is not OAuth', async () => {
102
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_API_KEY);
103
+ expect(result).toBeNull();
104
+ expect(policyHandler).not.toHaveBeenCalled();
78
105
  });
79
- });
80
- describe('when handler returns "stop"', () => {
81
- it('should activate fallback mode, log telemetry, and return false', async () => {
82
- mockHandler.mockResolvedValue('stop');
83
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
84
- expect(result).toBe(false);
85
- expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
86
- expect(logFlashFallback).toHaveBeenCalled();
106
+ it('uses availability selection with correct candidates when enabled', async () => {
107
+ // Direct mock manipulation since it's already a vi.fn()
108
+ vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
109
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
110
+ await handleFallback(policyConfig, DEFAULT_GEMINI_MODEL, AUTH_OAUTH);
111
+ expect(availability.selectFirstAvailable).toHaveBeenCalledWith([
112
+ DEFAULT_GEMINI_FLASH_MODEL,
113
+ ]);
87
114
  });
88
- });
89
- describe('when handler returns an unexpected value', () => {
90
- it('should log an error and return null', async () => {
91
- mockHandler.mockResolvedValue(null);
92
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
93
- expect(result).toBeNull();
94
- expect(consoleErrorSpy).toHaveBeenCalledWith('Fallback UI handler failed:', new Error('Unexpected fallback intent received from fallbackModelHandler: "null"'));
95
- expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
115
+ it('falls back to last resort when availability returns null', async () => {
116
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
117
+ availability.selectFirstAvailable = vi
118
+ .fn()
119
+ .mockReturnValue({ selectedModel: null, skipped: [] });
120
+ policyHandler.mockResolvedValue('retry_once');
121
+ await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
122
+ expect(policyHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, DEFAULT_GEMINI_FLASH_MODEL, undefined);
96
123
  });
97
- });
98
- it('should pass the correct context (failedModel, fallbackModel, error) to the handler', async () => {
99
- const mockError = new Error('Quota Exceeded');
100
- mockHandler.mockResolvedValue('retry_always');
101
- await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH, mockError);
102
- expect(mockHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, FALLBACK_MODEL, mockError);
103
- });
104
- it('should not call setFallbackMode or log telemetry if already in fallback mode', async () => {
105
- // Setup config where fallback mode is already active
106
- const activeFallbackConfig = createMockConfig({
107
- fallbackModelHandler: mockHandler,
108
- isInFallbackMode: vi.fn(() => true), // Already active
109
- setFallbackMode: vi.fn(),
110
- });
111
- mockHandler.mockResolvedValue('retry_always');
112
- const result = await handleFallback(activeFallbackConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
113
- // Should still return true to allow the retry (which will use the active fallback mode)
114
- expect(result).toBe(true);
115
- // Should still consult the handler
116
- expect(mockHandler).toHaveBeenCalled();
117
- // But should not mutate state or log telemetry again
118
- expect(activeFallbackConfig.setFallbackMode).not.toHaveBeenCalled();
119
- expect(logFlashFallback).not.toHaveBeenCalled();
120
- });
121
- it('should catch errors from the handler, log an error, and return null', async () => {
122
- const handlerError = new Error('UI interaction failed');
123
- mockHandler.mockRejectedValue(handlerError);
124
- const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
125
- expect(result).toBeNull();
126
- expect(consoleErrorSpy).toHaveBeenCalledWith('Fallback UI handler failed:', handlerError);
127
- expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
128
- });
129
- describe('Preview Model Fallback Logic', () => {
130
- const previewModel = PREVIEW_GEMINI_MODEL;
131
- it('should only set Preview Model bypass mode on retryable quota failure', async () => {
132
- const mockGoogleApiError = {
133
- code: 429,
134
- message: 'mock error',
135
- details: [],
124
+ it('executes silent policy action without invoking UI handler', async () => {
125
+ const proPolicy = createDefaultPolicy(MOCK_PRO_MODEL);
126
+ const flashPolicy = createDefaultPolicy(DEFAULT_GEMINI_FLASH_MODEL);
127
+ flashPolicy.actions = {
128
+ ...flashPolicy.actions,
129
+ terminal: 'silent',
130
+ unknown: 'silent',
136
131
  };
137
- const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
138
- await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
139
- expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
132
+ flashPolicy.isLastResort = true;
133
+ const silentChain = [proPolicy, flashPolicy];
134
+ const chainSpy = vi
135
+ .spyOn(policyHelpers, 'resolvePolicyChain')
136
+ .mockReturnValue(silentChain);
137
+ try {
138
+ availability.selectFirstAvailable = vi.fn().mockReturnValue({
139
+ selectedModel: DEFAULT_GEMINI_FLASH_MODEL,
140
+ skipped: [],
141
+ });
142
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
143
+ expect(result).toBe(true);
144
+ expect(policyConfig.getFallbackModelHandler).not.toHaveBeenCalled();
145
+ expect(policyConfig.setActiveModel).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL);
146
+ // Silent actions should not trigger the legacy fallback mode (via activateFallbackMode),
147
+ // but setActiveModel might trigger it via legacy sync if it switches to Flash.
148
+ // However, the test requirement is "doesn't emit fallback mode".
149
+ // Since we are mocking setActiveModel, we can verify setFallbackMode isn't called *independently*.
150
+ // But setActiveModel is mocked, so it won't trigger side effects unless the implementation does.
151
+ // We verified setActiveModel is called.
152
+ // We verify setFallbackMode is NOT called (which would happen if activateFallbackMode was called).
153
+ expect(policyConfig.setFallbackMode).not.toHaveBeenCalled();
154
+ }
155
+ finally {
156
+ chainSpy.mockRestore();
157
+ }
140
158
  });
141
- it('should not set Preview Model bypass mode on non-retryable quota failure', async () => {
142
- const mockGoogleApiError = {
143
- code: 429,
144
- message: 'mock error',
145
- details: [],
146
- };
147
- const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
148
- await handleFallback(mockConfig, previewModel, AUTH_OAUTH, terminalQuotaError);
149
- expect(mockConfig.setPreviewModelBypassMode).not.toHaveBeenCalled();
159
+ it('does not wrap around to upgrade candidates if the current model was selected at the end (e.g. by router)', async () => {
160
+ // Last-resort failure (Flash) in [Preview, Pro, Flash] checks Preview then Pro (all upstream).
161
+ vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
162
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
163
+ availability.selectFirstAvailable = vi.fn().mockReturnValue({
164
+ selectedModel: MOCK_PRO_MODEL,
165
+ skipped: [],
166
+ });
167
+ policyHandler.mockResolvedValue('retry_once');
168
+ await handleFallback(policyConfig, DEFAULT_GEMINI_FLASH_MODEL, AUTH_OAUTH);
169
+ expect(availability.selectFirstAvailable).not.toHaveBeenCalled();
170
+ expect(policyHandler).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_MODEL, undefined);
150
171
  });
151
- it('should silently retry if Preview Model fallback mode is already active and error is retryable error', async () => {
152
- vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(true);
153
- const mockGoogleApiError = {
154
- code: 429,
155
- message: 'mock error',
156
- details: [],
157
- };
158
- const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
159
- const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
172
+ it('successfully follows expected availability response for Preview Chain', async () => {
173
+ availability.selectFirstAvailable = vi.fn().mockReturnValue({
174
+ selectedModel: PREVIEW_GEMINI_FLASH_MODEL,
175
+ skipped: [],
176
+ });
177
+ policyHandler.mockResolvedValue('retry_once');
178
+ vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
179
+ vi.mocked(policyConfig.getActiveModel).mockReturnValue(PREVIEW_GEMINI_MODEL);
180
+ vi.mocked(policyConfig.getModel).mockReturnValue(PREVIEW_GEMINI_MODEL_AUTO);
181
+ const result = await handleFallback(policyConfig, PREVIEW_GEMINI_MODEL, AUTH_OAUTH);
160
182
  expect(result).toBe(true);
161
- expect(mockHandler).not.toHaveBeenCalled();
183
+ expect(availability.selectFirstAvailable).toHaveBeenCalledWith([
184
+ PREVIEW_GEMINI_FLASH_MODEL,
185
+ ]);
186
+ });
187
+ it('should launch upgrade flow and avoid fallback mode when handler returns "upgrade"', async () => {
188
+ policyHandler.mockResolvedValue('upgrade');
189
+ vi.mocked(openBrowserSecurely).mockResolvedValue(undefined);
190
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
191
+ expect(result).toBe(false);
192
+ expect(openBrowserSecurely).toHaveBeenCalledWith('https://goo.gle/set-up-gemini-code-assist');
193
+ expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
194
+ });
195
+ it('should catch errors from the handler, log an error, and return null', async () => {
196
+ const handlerError = new Error('UI interaction failed');
197
+ policyHandler.mockRejectedValue(handlerError);
198
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
199
+ expect(result).toBeNull();
200
+ expect(debugLogger.error).toHaveBeenCalledWith('Fallback handler failed:', handlerError);
162
201
  });
163
- it('should activate Preview Model fallback mode when handler returns "retry_always" and is RetryableQuotaError', async () => {
164
- mockHandler.mockResolvedValue('retry_always');
202
+ it('should pass TerminalQuotaError (429) correctly to the handler', async () => {
165
203
  const mockGoogleApiError = {
166
204
  code: 429,
167
205
  message: 'mock error',
168
206
  details: [],
169
207
  };
170
- const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
171
- const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
172
- expect(result).toBe(true);
173
- expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
174
- expect(mockConfig.setPreviewModelFallbackMode).toHaveBeenCalledWith(true);
208
+ const terminalError = new TerminalQuotaError('Quota error', mockGoogleApiError, 5);
209
+ policyHandler.mockResolvedValue('retry_always');
210
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
211
+ await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH, terminalError);
212
+ expect(policyHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, DEFAULT_GEMINI_FLASH_MODEL, terminalError);
175
213
  });
176
- it('should activate regular fallback when handler returns "retry_always" and is TerminalQuotaError', async () => {
177
- mockHandler.mockResolvedValue('retry_always');
214
+ it('should pass RetryableQuotaError correctly to the handler', async () => {
178
215
  const mockGoogleApiError = {
179
216
  code: 503,
180
217
  message: 'mock error',
181
218
  details: [],
182
219
  };
183
- const terminalError = new TerminalQuotaError('Quota error', mockGoogleApiError, 5);
184
- const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, terminalError);
185
- expect(result).toBe(true);
186
- expect(mockConfig.setPreviewModelFallbackMode).not.toBeCalled();
187
- expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
220
+ const retryableError = new RetryableQuotaError('Service unavailable', mockGoogleApiError, 1000);
221
+ policyHandler.mockResolvedValue('retry_once');
222
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
223
+ await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH, retryableError);
224
+ expect(policyHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, DEFAULT_GEMINI_FLASH_MODEL, retryableError);
188
225
  });
189
- it('should NOT set fallback mode if user chooses "retry_once"', async () => {
190
- const mockGoogleApiError = {
191
- code: 429,
192
- message: 'mock error',
193
- details: [],
194
- };
195
- const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
196
- mockHandler.mockResolvedValue('retry_once');
197
- const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, terminalQuotaError);
198
- expect(result).toBe(true);
199
- expect(mockConfig.setPreviewModelBypassMode).not.toHaveBeenCalled();
200
- expect(mockConfig.setPreviewModelFallbackMode).not.toHaveBeenCalled();
201
- expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
226
+ it('Call the handler with fallback model same as the failed model when the failed model is the last-resort policy', async () => {
227
+ // Ensure short-circuit when wrapping to an unavailable upstream model.
228
+ availability.selectFirstAvailable = vi
229
+ .fn()
230
+ .mockReturnValue({ selectedModel: null, skipped: [] });
231
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
232
+ const result = await handleFallback(policyConfig, DEFAULT_GEMINI_FLASH_MODEL, AUTH_OAUTH);
233
+ policyHandler.mockResolvedValue('retry_once');
234
+ expect(result).not.toBeNull();
235
+ expect(policyHandler).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_MODEL, undefined);
202
236
  });
203
- it('should pass DEFAULT_GEMINI_MODEL as fallback when Preview Model fails with Retryable Error', async () => {
204
- const mockFallbackHandler = vi.fn().mockResolvedValue('stop');
205
- vi.mocked(mockConfig.fallbackModelHandler).mockImplementation(mockFallbackHandler);
206
- const mockGoogleApiError = {
207
- code: 429,
208
- message: 'mock error',
209
- details: [],
210
- };
211
- const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
212
- await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, retryableQuotaError);
213
- expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, retryableQuotaError);
237
+ it('calls setActiveModel and logs telemetry when handler returns "retry_always"', async () => {
238
+ policyHandler.mockResolvedValue('retry_always');
239
+ vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
240
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
241
+ expect(result).toBe(true);
242
+ expect(policyConfig.setActiveModel).toHaveBeenCalledWith(FALLBACK_MODEL);
243
+ expect(policyConfig.setFallbackMode).not.toHaveBeenCalled();
244
+ // TODO: add logging expect statement
214
245
  });
215
- it('should pass DEFAULT_GEMINI_MODEL as fallback when Preview Model fails with other error', async () => {
216
- await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE);
217
- expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, undefined);
246
+ it('does NOT call setActiveModel when handler returns "stop"', async () => {
247
+ policyHandler.mockResolvedValue('stop');
248
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
249
+ expect(result).toBe(false);
250
+ expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
251
+ // TODO: add logging expect statement
218
252
  });
219
- it('should pass DEFAULT_GEMINI_FLASH_MODEL as fallback when Preview Model fails with other error', async () => {
220
- const mockGoogleApiError = {
221
- code: 429,
222
- message: 'mock error',
223
- details: [],
224
- };
225
- const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
226
- await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, terminalQuotaError);
227
- expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, terminalQuotaError);
253
+ it('does NOT call setActiveModel when handler returns "retry_once"', async () => {
254
+ policyHandler.mockResolvedValue('retry_once');
255
+ const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
256
+ expect(result).toBe(true);
257
+ expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
228
258
  });
229
259
  });
230
- it('should return null if ModelNotFoundError occurs for a non-preview model', async () => {
231
- const modelNotFoundError = new ModelNotFoundError('Not found');
232
- const result = await handleFallback(mockConfig, DEFAULT_GEMINI_MODEL, // Not preview model
233
- AUTH_OAUTH, modelNotFoundError);
234
- expect(result).toBeNull();
235
- expect(mockHandler).not.toHaveBeenCalled();
236
- });
237
- it('should consult handler if ModelNotFoundError occurs for preview model', async () => {
238
- const modelNotFoundError = new ModelNotFoundError('Not found');
239
- mockHandler.mockResolvedValue('retry_always');
240
- const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AUTH_OAUTH, modelNotFoundError);
241
- expect(result).toBe(true);
242
- expect(mockHandler).toHaveBeenCalled();
243
- });
244
260
  });
245
261
  //# sourceMappingURL=handler.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,EAAE,EACF,UAAU,EAGV,SAAS,GACV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,4CAA4C;AAC5C,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,kBAAkB,EAAE;KAAQ;CAC7B,CAAC,CAAC,CAAC;AAEJ,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAC5C,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC;AAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC;AAEzC,MAAM,gBAAgB,GAAG,CAAC,YAA6B,EAAE,EAAU,EAAE,CACnE,CAAC;IACC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACpC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;IACxB,0BAA0B,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9C,2BAA2B,EAAE,EAAE,CAAC,EAAE,EAAE;IACpC,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5C,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE;IAClC,eAAe,EAAE,SAAS;IAC1B,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE;IAChC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACjC,GAAG,SAAS;CACb,CAAsB,CAAC;AAE1B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAuC,CAAC;IAC5C,IAAI,eAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACtB,gEAAgE;QAChE,UAAU,GAAG,gBAAgB,CAAC;YAC5B,oBAAoB,EAAE,WAAW;SAClC,CAAC,CAAC;QACH,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,cAAc,EACd,YAAY,CACb,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,cAAc,EAAE,wBAAwB;QACxC,UAAU,CACX,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;YAC5C,oBAAoB,EAAE,SAAS;SAChC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,oBAAoB,EACpB,cAAc,EACd,UAAU,CACX,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;QACnD,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,cAAc,EACd,UAAU,CACX,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,cAAc,EACd,UAAU,CACX,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,cAAc,EACd,UAAU,CACX,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,6BAA6B,EAC7B,IAAI,KAAK,CACP,uEAAuE,CACxE,CACF,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9C,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAExE,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CACtC,cAAc,EACd,cAAc,EACd,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,qDAAqD;QACrD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;YAC5C,oBAAoB,EAAE,WAAW;YACjC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB;YACtD,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;SACzB,CAAC,CAAC;QAEH,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,oBAAoB,EACpB,cAAc,EACd,UAAU,CACX,CAAC;QAEF,wFAAwF;QACxF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,mCAAmC;QACnC,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACvC,qDAAqD;QACrD,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACxD,WAAW,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QAE5E,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,6BAA6B,EAC7B,YAAY,CACb,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,MAAM,YAAY,GAAG,oBAAoB,CAAC;QAE1C,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,gBAAgB,EAChB,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,cAAc,CAClB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,CACpB,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,aAAa,EACb,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,cAAc,CAClB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,CACnB,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;YACnH,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,gBAAgB,EAChB,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,CACpB,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;YAC1H,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,gBAAgB,EAChB,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,CACpB,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACxE,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gGAAgG,EAAE,KAAK,IAAI,EAAE;YAC9G,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,kBAAkB,CAC1C,aAAa,EACb,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAChE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,aAAa,EACb,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,WAAW,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,oBAAoB,EACpB,QAAQ,CAAC,iBAAiB,EAC1B,kBAAkB,CACnB,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACpE,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACtE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;YAC1G,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC9D,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAqB,CAAC,CAAC,kBAAkB,CAC5D,mBAAmB,CACpB,CAAC;YACF,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,gBAAgB,EAChB,kBAAkB,EAClB,CAAC,CACF,CAAC;YAEF,MAAM,cAAc,CAClB,UAAU,EACV,oBAAoB,EACpB,QAAQ,CAAC,iBAAiB,EAC1B,mBAAmB,CACpB,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAC1D,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,CACpB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;YACtG,MAAM,cAAc,CAClB,UAAU,EACV,oBAAoB,EACpB,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAC1D,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;YAC5G,MAAM,kBAAkB,GAAG;gBACzB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,aAAa,EACb,kBAAkB,EAClB,CAAC,CACF,CAAC;YACF,MAAM,cAAc,CAClB,UAAU,EACV,oBAAoB,EACpB,QAAQ,CAAC,iBAAiB,EAC1B,kBAAkB,CACnB,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAC1D,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,oBAAoB,EAAE,oBAAoB;QAC1C,UAAU,EACV,kBAAkB,CACnB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC/D,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,kBAAkB,CACnB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,18 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import type { ModelSelectionResult } from '../availability/modelAvailabilityService.js';
7
+ import type { FailureKind, FallbackAction, ModelPolicy } from '../availability/modelPolicy.js';
6
8
  /**
7
9
  * Defines the intent returned by the UI layer during a fallback scenario.
8
10
  */
9
11
  export type FallbackIntent = 'retry_always' | 'retry_once' | 'stop' | 'retry_later' | 'upgrade';
12
+ export interface FallbackRecommendation extends ModelSelectionResult {
13
+ action: FallbackAction;
14
+ failureKind: FailureKind;
15
+ failedPolicy?: ModelPolicy;
16
+ selectedPolicy: ModelPolicy;
17
+ }
10
18
  /**
11
19
  * The interface for the handler provided by the UI layer (e.g., the CLI)
12
20
  * 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 = "c628ad088";
7
- export declare const CLI_VERSION = "1.19.4-rc3";
6
+ export declare const GIT_COMMIT_INFO = "703942039";
7
+ export declare const CLI_VERSION = "1.22.5-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 = 'c628ad088';
9
- export const CLI_VERSION = '1.19.4-rc3';
8
+ export const GIT_COMMIT_INFO = '703942039';
9
+ export const CLI_VERSION = '1.22.5-rc1';
10
10
  //# sourceMappingURL=git-commit.js.map