@google/gemini-cli-core 0.34.0-preview.2 → 0.35.0-nightly.20260313.bb060d7a9

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 (329) hide show
  1. package/dist/docs/changelogs/index.md +19 -0
  2. package/dist/docs/changelogs/latest.md +214 -191
  3. package/dist/docs/changelogs/preview.md +447 -184
  4. package/dist/docs/cli/model-routing.md +18 -1
  5. package/dist/docs/cli/model-steering.md +79 -0
  6. package/dist/docs/cli/plan-mode.md +99 -14
  7. package/dist/docs/cli/settings.md +14 -12
  8. package/dist/docs/cli/telemetry.md +45 -0
  9. package/dist/docs/cli/tutorials/plan-mode-steering.md +89 -0
  10. package/dist/docs/core/index.md +2 -0
  11. package/dist/docs/core/local-model-routing.md +193 -0
  12. package/dist/docs/reference/configuration.md +27 -3
  13. package/dist/docs/reference/keyboard-shortcuts.md +168 -90
  14. package/dist/docs/reference/policy-engine.md +30 -6
  15. package/dist/docs/resources/troubleshooting.md +15 -0
  16. package/dist/docs/sidebar.json +10 -0
  17. package/dist/docs/tools/shell.md +8 -0
  18. package/dist/google-gemini-cli-core-0.35.0-nightly.20260311.657f19c1f.tgz +0 -0
  19. package/dist/src/agents/a2a-client-manager.d.ts +11 -4
  20. package/dist/src/agents/a2a-client-manager.js +61 -34
  21. package/dist/src/agents/a2a-client-manager.js.map +1 -1
  22. package/dist/src/agents/a2a-client-manager.test.js +178 -115
  23. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  24. package/dist/src/agents/a2aUtils.d.ts +4 -28
  25. package/dist/src/agents/a2aUtils.js +20 -181
  26. package/dist/src/agents/a2aUtils.js.map +1 -1
  27. package/dist/src/agents/a2aUtils.test.js +19 -106
  28. package/dist/src/agents/a2aUtils.test.js.map +1 -1
  29. package/dist/src/agents/agent-scheduler.d.ts +2 -0
  30. package/dist/src/agents/agent-scheduler.js +3 -2
  31. package/dist/src/agents/agent-scheduler.js.map +1 -1
  32. package/dist/src/agents/agent-scheduler.test.js +12 -3
  33. package/dist/src/agents/agent-scheduler.test.js.map +1 -1
  34. package/dist/src/agents/agentLoader.d.ts +2 -2
  35. package/dist/src/agents/agentLoader.js +15 -0
  36. package/dist/src/agents/agentLoader.js.map +1 -1
  37. package/dist/src/agents/auth-provider/factory.d.ts +2 -0
  38. package/dist/src/agents/auth-provider/factory.js +6 -3
  39. package/dist/src/agents/auth-provider/factory.js.map +1 -1
  40. package/dist/src/agents/auth-provider/google-credentials-provider.d.ts +26 -0
  41. package/dist/src/agents/auth-provider/google-credentials-provider.js +117 -0
  42. package/dist/src/agents/auth-provider/google-credentials-provider.js.map +1 -0
  43. package/dist/src/agents/auth-provider/google-credentials-provider.test.d.ts +6 -0
  44. package/dist/src/agents/auth-provider/google-credentials-provider.test.js +126 -0
  45. package/dist/src/agents/auth-provider/google-credentials-provider.test.js.map +1 -0
  46. package/dist/src/agents/browser/browserAgentFactory.js +11 -2
  47. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -1
  48. package/dist/src/agents/browser/browserAgentInvocation.d.ts +4 -3
  49. package/dist/src/agents/browser/browserAgentInvocation.js +10 -4
  50. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
  51. package/dist/src/agents/browser/browserAgentInvocation.test.js +1 -0
  52. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -1
  53. package/dist/src/agents/browser/browserManager.d.ts +10 -0
  54. package/dist/src/agents/browser/browserManager.js +53 -8
  55. package/dist/src/agents/browser/browserManager.js.map +1 -1
  56. package/dist/src/agents/browser/inputBlocker.d.ts +51 -0
  57. package/dist/src/agents/browser/inputBlocker.js +234 -0
  58. package/dist/src/agents/browser/inputBlocker.js.map +1 -0
  59. package/dist/src/agents/browser/inputBlocker.test.d.ts +6 -0
  60. package/dist/src/agents/browser/inputBlocker.test.js +82 -0
  61. package/dist/src/agents/browser/inputBlocker.test.js.map +1 -0
  62. package/dist/src/agents/browser/mcpToolWrapper.d.ts +3 -2
  63. package/dist/src/agents/browser/mcpToolWrapper.js +49 -8
  64. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -1
  65. package/dist/src/agents/browser/mcpToolWrapper.test.js +51 -0
  66. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -1
  67. package/dist/src/agents/local-executor.d.ts +5 -4
  68. package/dist/src/agents/local-executor.js +30 -25
  69. package/dist/src/agents/local-executor.js.map +1 -1
  70. package/dist/src/agents/local-executor.test.js +269 -3
  71. package/dist/src/agents/local-executor.test.js.map +1 -1
  72. package/dist/src/agents/local-invocation.d.ts +4 -4
  73. package/dist/src/agents/local-invocation.js +12 -9
  74. package/dist/src/agents/local-invocation.js.map +1 -1
  75. package/dist/src/agents/local-invocation.test.js +19 -3
  76. package/dist/src/agents/local-invocation.test.js.map +1 -1
  77. package/dist/src/agents/registry.js +3 -2
  78. package/dist/src/agents/registry.js.map +1 -1
  79. package/dist/src/agents/registry.test.js +1 -0
  80. package/dist/src/agents/registry.test.js.map +1 -1
  81. package/dist/src/agents/remote-invocation.d.ts +0 -9
  82. package/dist/src/agents/remote-invocation.js +1 -28
  83. package/dist/src/agents/remote-invocation.js.map +1 -1
  84. package/dist/src/agents/remote-invocation.test.js +1 -0
  85. package/dist/src/agents/remote-invocation.test.js.map +1 -1
  86. package/dist/src/agents/subagent-tool-wrapper.d.ts +5 -4
  87. package/dist/src/agents/subagent-tool-wrapper.js +9 -5
  88. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  89. package/dist/src/agents/subagent-tool-wrapper.test.js +15 -1
  90. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  91. package/dist/src/agents/subagent-tool.d.ts +3 -3
  92. package/dist/src/agents/subagent-tool.js +16 -12
  93. package/dist/src/agents/subagent-tool.js.map +1 -1
  94. package/dist/src/agents/subagent-tool.test.js +13 -3
  95. package/dist/src/agents/subagent-tool.test.js.map +1 -1
  96. package/dist/src/code_assist/oauth2.js +0 -1
  97. package/dist/src/code_assist/oauth2.js.map +1 -1
  98. package/dist/src/code_assist/server.js +2 -2
  99. package/dist/src/code_assist/server.js.map +1 -1
  100. package/dist/src/code_assist/server.test.js +5 -1
  101. package/dist/src/code_assist/server.test.js.map +1 -1
  102. package/dist/src/code_assist/telemetry.d.ts +2 -2
  103. package/dist/src/code_assist/telemetry.js +5 -3
  104. package/dist/src/code_assist/telemetry.js.map +1 -1
  105. package/dist/src/code_assist/telemetry.test.js +14 -12
  106. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  107. package/dist/src/code_assist/types.d.ts +14 -12
  108. package/dist/src/code_assist/types.js.map +1 -1
  109. package/dist/src/config/agent-loop-context.d.ts +3 -0
  110. package/dist/src/config/config.d.ts +75 -2
  111. package/dist/src/config/config.js +78 -11
  112. package/dist/src/config/config.js.map +1 -1
  113. package/dist/src/config/config.test.js +170 -10
  114. package/dist/src/config/config.test.js.map +1 -1
  115. package/dist/src/config/models.d.ts +14 -0
  116. package/dist/src/config/models.js +37 -0
  117. package/dist/src/config/models.js.map +1 -1
  118. package/dist/src/config/models.test.js +51 -1
  119. package/dist/src/config/models.test.js.map +1 -1
  120. package/dist/src/config/storage.d.ts +1 -0
  121. package/dist/src/config/storage.js +3 -0
  122. package/dist/src/config/storage.js.map +1 -1
  123. package/dist/src/core/baseLlmClient.js +19 -3
  124. package/dist/src/core/baseLlmClient.js.map +1 -1
  125. package/dist/src/core/baseLlmClient.test.js +2 -0
  126. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  127. package/dist/src/core/client.d.ts +4 -3
  128. package/dist/src/core/client.js +42 -17
  129. package/dist/src/core/client.js.map +1 -1
  130. package/dist/src/core/client.test.js +8 -0
  131. package/dist/src/core/client.test.js.map +1 -1
  132. package/dist/src/core/contentGenerator.d.ts +1 -0
  133. package/dist/src/core/contentGenerator.js +35 -3
  134. package/dist/src/core/contentGenerator.js.map +1 -1
  135. package/dist/src/core/contentGenerator.test.js +137 -2
  136. package/dist/src/core/contentGenerator.test.js.map +1 -1
  137. package/dist/src/core/coreToolHookTriggers.d.ts +2 -3
  138. package/dist/src/core/coreToolHookTriggers.js +5 -11
  139. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  140. package/dist/src/core/coreToolHookTriggers.test.js +24 -0
  141. package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
  142. package/dist/src/core/coreToolScheduler.js +1 -1
  143. package/dist/src/core/coreToolScheduler.js.map +1 -1
  144. package/dist/src/core/geminiChat.js +31 -21
  145. package/dist/src/core/geminiChat.js.map +1 -1
  146. package/dist/src/core/geminiChat.test.js +6 -4
  147. package/dist/src/core/geminiChat.test.js.map +1 -1
  148. package/dist/src/core/geminiChat_network_retry.test.js +21 -11
  149. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  150. package/dist/src/fallback/handler.js +0 -4
  151. package/dist/src/fallback/handler.js.map +1 -1
  152. package/dist/src/fallback/handler.test.js +0 -6
  153. package/dist/src/fallback/handler.test.js.map +1 -1
  154. package/dist/src/generated/git-commit.d.ts +2 -2
  155. package/dist/src/generated/git-commit.js +2 -2
  156. package/dist/src/generated/git-commit.js.map +1 -1
  157. package/dist/src/ide/detect-ide.d.ts +8 -0
  158. package/dist/src/ide/detect-ide.js +12 -1
  159. package/dist/src/ide/detect-ide.js.map +1 -1
  160. package/dist/src/ide/detect-ide.test.js +12 -0
  161. package/dist/src/ide/detect-ide.test.js.map +1 -1
  162. package/dist/src/ide/ide-installer.js +20 -8
  163. package/dist/src/ide/ide-installer.js.map +1 -1
  164. package/dist/src/ide/ide-installer.test.js +60 -4
  165. package/dist/src/ide/ide-installer.test.js.map +1 -1
  166. package/dist/src/mcp/oauth-provider.js +0 -2
  167. package/dist/src/mcp/oauth-provider.js.map +1 -1
  168. package/dist/src/mcp/oauth-utils.js +0 -2
  169. package/dist/src/mcp/oauth-utils.js.map +1 -1
  170. package/dist/src/policy/config.d.ts +14 -2
  171. package/dist/src/policy/config.js +94 -49
  172. package/dist/src/policy/config.js.map +1 -1
  173. package/dist/src/policy/config.test.js +208 -488
  174. package/dist/src/policy/config.test.js.map +1 -1
  175. package/dist/src/policy/policies/plan.toml +1 -1
  176. package/dist/src/policy/stable-stringify.js +15 -5
  177. package/dist/src/policy/stable-stringify.js.map +1 -1
  178. package/dist/src/policy/types.d.ts +1 -0
  179. package/dist/src/policy/types.js.map +1 -1
  180. package/dist/src/policy/utils.d.ts +17 -0
  181. package/dist/src/policy/utils.js +27 -7
  182. package/dist/src/policy/utils.js.map +1 -1
  183. package/dist/src/prompts/snippets.js +2 -1
  184. package/dist/src/prompts/snippets.js.map +1 -1
  185. package/dist/src/prompts/utils.test.d.ts +6 -0
  186. package/dist/src/prompts/utils.test.js +225 -0
  187. package/dist/src/prompts/utils.test.js.map +1 -0
  188. package/dist/src/routing/modelRouterService.js +2 -2
  189. package/dist/src/routing/modelRouterService.js.map +1 -1
  190. package/dist/src/routing/modelRouterService.test.js +4 -3
  191. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  192. package/dist/src/routing/strategies/numericalClassifierStrategy.js +6 -40
  193. package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
  194. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +29 -64
  195. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
  196. package/dist/src/scheduler/policy.d.ts +3 -7
  197. package/dist/src/scheduler/policy.js +4 -3
  198. package/dist/src/scheduler/policy.js.map +1 -1
  199. package/dist/src/scheduler/policy.test.js +51 -31
  200. package/dist/src/scheduler/policy.test.js.map +1 -1
  201. package/dist/src/scheduler/scheduler.d.ts +4 -2
  202. package/dist/src/scheduler/scheduler.js +19 -16
  203. package/dist/src/scheduler/scheduler.js.map +1 -1
  204. package/dist/src/scheduler/scheduler.test.js +33 -10
  205. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  206. package/dist/src/scheduler/scheduler_parallel.test.js +40 -2
  207. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
  208. package/dist/src/scheduler/scheduler_waiting_callback.test.js +1 -1
  209. package/dist/src/scheduler/scheduler_waiting_callback.test.js.map +1 -1
  210. package/dist/src/scheduler/tool-executor.d.ts +3 -3
  211. package/dist/src/scheduler/tool-executor.js +15 -21
  212. package/dist/src/scheduler/tool-executor.js.map +1 -1
  213. package/dist/src/scheduler/tool-executor.test.js +43 -8
  214. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  215. package/dist/src/services/chatRecordingService.js +2 -1
  216. package/dist/src/services/chatRecordingService.js.map +1 -1
  217. package/dist/src/services/chatRecordingService.test.js +21 -0
  218. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  219. package/dist/src/services/executionLifecycleService.d.ts +83 -0
  220. package/dist/src/services/executionLifecycleService.js +271 -0
  221. package/dist/src/services/executionLifecycleService.js.map +1 -0
  222. package/dist/src/services/executionLifecycleService.test.d.ts +6 -0
  223. package/dist/src/services/executionLifecycleService.test.js +227 -0
  224. package/dist/src/services/executionLifecycleService.test.js.map +1 -0
  225. package/dist/src/services/sandboxManager.d.ts +54 -0
  226. package/dist/src/services/sandboxManager.js +30 -0
  227. package/dist/src/services/sandboxManager.js.map +1 -0
  228. package/dist/src/services/sandboxManager.test.d.ts +6 -0
  229. package/dist/src/services/sandboxManager.test.js +95 -0
  230. package/dist/src/services/sandboxManager.test.js.map +1 -0
  231. package/dist/src/services/shellExecutionService.d.ts +4 -52
  232. package/dist/src/services/shellExecutionService.js +437 -498
  233. package/dist/src/services/shellExecutionService.js.map +1 -1
  234. package/dist/src/services/shellExecutionService.test.js +10 -21
  235. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  236. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +13 -2
  237. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +91 -1
  238. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  239. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +77 -0
  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 +10 -1
  242. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +25 -1
  243. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  244. package/dist/src/telemetry/index.d.ts +3 -3
  245. package/dist/src/telemetry/index.js +3 -3
  246. package/dist/src/telemetry/index.js.map +1 -1
  247. package/dist/src/telemetry/loggers.d.ts +2 -1
  248. package/dist/src/telemetry/loggers.js +32 -1
  249. package/dist/src/telemetry/loggers.js.map +1 -1
  250. package/dist/src/telemetry/loggers.test.js +37 -2
  251. package/dist/src/telemetry/loggers.test.js.map +1 -1
  252. package/dist/src/telemetry/metrics.d.ts +13 -0
  253. package/dist/src/telemetry/metrics.js +17 -0
  254. package/dist/src/telemetry/metrics.js.map +1 -1
  255. package/dist/src/telemetry/startupProfiler.js +4 -4
  256. package/dist/src/telemetry/startupProfiler.js.map +1 -1
  257. package/dist/src/telemetry/startupProfiler.test.js +19 -0
  258. package/dist/src/telemetry/startupProfiler.test.js.map +1 -1
  259. package/dist/src/telemetry/telemetry-utils.test.js +3 -3
  260. package/dist/src/telemetry/types.d.ts +16 -2
  261. package/dist/src/telemetry/types.js +34 -0
  262. package/dist/src/telemetry/types.js.map +1 -1
  263. package/dist/src/telemetry/uiTelemetry.d.ts +7 -0
  264. package/dist/src/telemetry/uiTelemetry.js +78 -0
  265. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  266. package/dist/src/telemetry/uiTelemetry.test.js +101 -0
  267. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  268. package/dist/src/tools/exit-plan-mode.js +10 -2
  269. package/dist/src/tools/exit-plan-mode.js.map +1 -1
  270. package/dist/src/tools/exit-plan-mode.test.js +15 -0
  271. package/dist/src/tools/exit-plan-mode.test.js.map +1 -1
  272. package/dist/src/tools/ls.js +2 -2
  273. package/dist/src/tools/ls.js.map +1 -1
  274. package/dist/src/tools/mcp-client.js +0 -1
  275. package/dist/src/tools/mcp-client.js.map +1 -1
  276. package/dist/src/tools/mcp-client.test.js +4 -0
  277. package/dist/src/tools/mcp-client.test.js.map +1 -1
  278. package/dist/src/tools/mcp-tool.test.js +10 -1
  279. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  280. package/dist/src/tools/read-many-files.js +2 -4
  281. package/dist/src/tools/read-many-files.js.map +1 -1
  282. package/dist/src/tools/shell.d.ts +1 -1
  283. package/dist/src/tools/shell.js +3 -3
  284. package/dist/src/tools/shell.js.map +1 -1
  285. package/dist/src/tools/tool-registry.test.js +4 -0
  286. package/dist/src/tools/tool-registry.test.js.map +1 -1
  287. package/dist/src/tools/tools.d.ts +34 -1
  288. package/dist/src/tools/tools.js +47 -1
  289. package/dist/src/tools/tools.js.map +1 -1
  290. package/dist/src/tools/web-fetch.d.ts +5 -0
  291. package/dist/src/tools/web-fetch.js +177 -100
  292. package/dist/src/tools/web-fetch.js.map +1 -1
  293. package/dist/src/tools/web-fetch.test.js +130 -26
  294. package/dist/src/tools/web-fetch.test.js.map +1 -1
  295. package/dist/src/tools/web-search.test.js +2 -0
  296. package/dist/src/tools/web-search.test.js.map +1 -1
  297. package/dist/src/utils/fetch.d.ts +0 -29
  298. package/dist/src/utils/fetch.js +10 -123
  299. package/dist/src/utils/fetch.js.map +1 -1
  300. package/dist/src/utils/fetch.test.js +1 -103
  301. package/dist/src/utils/fetch.test.js.map +1 -1
  302. package/dist/src/utils/language-detection.js +96 -89
  303. package/dist/src/utils/language-detection.js.map +1 -1
  304. package/dist/src/utils/language-detection.test.d.ts +6 -0
  305. package/dist/src/utils/language-detection.test.js +39 -0
  306. package/dist/src/utils/language-detection.test.js.map +1 -0
  307. package/dist/src/utils/oauth-flow.js +0 -2
  308. package/dist/src/utils/oauth-flow.js.map +1 -1
  309. package/dist/src/utils/paths.js +5 -2
  310. package/dist/src/utils/paths.js.map +1 -1
  311. package/dist/src/utils/paths.test.js +11 -0
  312. package/dist/src/utils/paths.test.js.map +1 -1
  313. package/dist/src/utils/process-utils.js +18 -4
  314. package/dist/src/utils/process-utils.js.map +1 -1
  315. package/dist/src/utils/process-utils.test.js +32 -10
  316. package/dist/src/utils/process-utils.test.js.map +1 -1
  317. package/dist/src/utils/retry.d.ts +7 -0
  318. package/dist/src/utils/retry.js +40 -3
  319. package/dist/src/utils/retry.js.map +1 -1
  320. package/dist/src/utils/retry.test.js +13 -0
  321. package/dist/src/utils/retry.test.js.map +1 -1
  322. package/dist/src/utils/summarizer.test.js +5 -0
  323. package/dist/src/utils/summarizer.test.js.map +1 -1
  324. package/dist/src/utils/surface.d.ts +18 -0
  325. package/dist/src/utils/surface.js +46 -0
  326. package/dist/src/utils/surface.js.map +1 -0
  327. package/dist/tsconfig.tsbuildinfo +1 -1
  328. package/package.json +1 -1
  329. package/dist/google-gemini-cli-core-0.34.0-preview.1.tgz +0 -0
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
7
  import { Config, DEFAULT_FILE_FILTERING_OPTIONS, } from './config.js';
8
+ import { createMockSandboxConfig } from '@google/gemini-cli-test-utils';
8
9
  import { DEFAULT_MAX_ATTEMPTS } from '../utils/retry.js';
9
10
  import { ExperimentFlags } from '../code_assist/experiments/flagNames.js';
10
11
  import { debugLogger } from '../utils/debugLogger.js';
@@ -182,10 +183,10 @@ vi.mock('../code_assist/codeAssist.js');
182
183
  vi.mock('../code_assist/experiments/experiments.js');
183
184
  describe('Server Config (config.ts)', () => {
184
185
  const MODEL = DEFAULT_GEMINI_MODEL;
185
- const SANDBOX = {
186
+ const SANDBOX = createMockSandboxConfig({
186
187
  command: 'docker',
187
188
  image: 'gemini-cli-sandbox',
188
- };
189
+ });
189
190
  const TARGET_DIR = '/path/to/target';
190
191
  const DEBUG_MODE = false;
191
192
  const QUESTION = 'test question';
@@ -385,6 +386,88 @@ describe('Server Config (config.ts)', () => {
385
386
  expect(await config.getUserCaching()).toBeUndefined();
386
387
  });
387
388
  });
389
+ describe('getNumericalRoutingEnabled', () => {
390
+ it('should return true by default if there are no experiments', async () => {
391
+ const config = new Config(baseParams);
392
+ expect(await config.getNumericalRoutingEnabled()).toBe(true);
393
+ });
394
+ it('should return true if the remote flag is set to true', async () => {
395
+ const config = new Config({
396
+ ...baseParams,
397
+ experiments: {
398
+ flags: {
399
+ [ExperimentFlags.ENABLE_NUMERICAL_ROUTING]: {
400
+ boolValue: true,
401
+ },
402
+ },
403
+ experimentIds: [],
404
+ },
405
+ });
406
+ expect(await config.getNumericalRoutingEnabled()).toBe(true);
407
+ });
408
+ it('should return false if the remote flag is explicitly set to false', async () => {
409
+ const config = new Config({
410
+ ...baseParams,
411
+ experiments: {
412
+ flags: {
413
+ [ExperimentFlags.ENABLE_NUMERICAL_ROUTING]: {
414
+ boolValue: false,
415
+ },
416
+ },
417
+ experimentIds: [],
418
+ },
419
+ });
420
+ expect(await config.getNumericalRoutingEnabled()).toBe(false);
421
+ });
422
+ });
423
+ describe('getResolvedClassifierThreshold', () => {
424
+ it('should return 90 by default if there are no experiments', async () => {
425
+ const config = new Config(baseParams);
426
+ expect(await config.getResolvedClassifierThreshold()).toBe(90);
427
+ });
428
+ it('should return the remote flag value if it is within range (0-100)', async () => {
429
+ const config = new Config({
430
+ ...baseParams,
431
+ experiments: {
432
+ flags: {
433
+ [ExperimentFlags.CLASSIFIER_THRESHOLD]: {
434
+ intValue: '75',
435
+ },
436
+ },
437
+ experimentIds: [],
438
+ },
439
+ });
440
+ expect(await config.getResolvedClassifierThreshold()).toBe(75);
441
+ });
442
+ it('should return 90 if the remote flag is out of range (less than 0)', async () => {
443
+ const config = new Config({
444
+ ...baseParams,
445
+ experiments: {
446
+ flags: {
447
+ [ExperimentFlags.CLASSIFIER_THRESHOLD]: {
448
+ intValue: '-10',
449
+ },
450
+ },
451
+ experimentIds: [],
452
+ },
453
+ });
454
+ expect(await config.getResolvedClassifierThreshold()).toBe(90);
455
+ });
456
+ it('should return 90 if the remote flag is out of range (greater than 100)', async () => {
457
+ const config = new Config({
458
+ ...baseParams,
459
+ experiments: {
460
+ flags: {
461
+ [ExperimentFlags.CLASSIFIER_THRESHOLD]: {
462
+ intValue: '110',
463
+ },
464
+ },
465
+ experimentIds: [],
466
+ },
467
+ });
468
+ expect(await config.getResolvedClassifierThreshold()).toBe(90);
469
+ });
470
+ });
388
471
  });
389
472
  describe('refreshAuth', () => {
390
473
  it('should refresh auth and update config', async () => {
@@ -1115,13 +1198,55 @@ describe('Server Config (config.ts)', () => {
1115
1198
  expect(browserConfig.customConfig.sessionMode).toBe('persistent');
1116
1199
  });
1117
1200
  });
1201
+ describe('Sandbox Configuration', () => {
1202
+ it('should default sandbox settings when not provided', () => {
1203
+ const config = new Config({
1204
+ ...baseParams,
1205
+ sandbox: undefined,
1206
+ });
1207
+ expect(config.getSandboxEnabled()).toBe(false);
1208
+ expect(config.getSandboxAllowedPaths()).toEqual([]);
1209
+ expect(config.getSandboxNetworkAccess()).toBe(false);
1210
+ });
1211
+ it('should store provided sandbox settings', () => {
1212
+ const sandbox = {
1213
+ enabled: true,
1214
+ allowedPaths: ['/tmp/foo', '/var/bar'],
1215
+ networkAccess: true,
1216
+ command: 'docker',
1217
+ image: 'my-image',
1218
+ };
1219
+ const config = new Config({
1220
+ ...baseParams,
1221
+ sandbox,
1222
+ });
1223
+ expect(config.getSandboxEnabled()).toBe(true);
1224
+ expect(config.getSandboxAllowedPaths()).toEqual(['/tmp/foo', '/var/bar']);
1225
+ expect(config.getSandboxNetworkAccess()).toBe(true);
1226
+ expect(config.getSandbox()?.command).toBe('docker');
1227
+ expect(config.getSandbox()?.image).toBe('my-image');
1228
+ });
1229
+ it('should partially override default sandbox settings', () => {
1230
+ const config = new Config({
1231
+ ...baseParams,
1232
+ sandbox: {
1233
+ enabled: true,
1234
+ allowedPaths: ['/only/this'],
1235
+ networkAccess: false,
1236
+ },
1237
+ });
1238
+ expect(config.getSandboxEnabled()).toBe(true);
1239
+ expect(config.getSandboxAllowedPaths()).toEqual(['/only/this']);
1240
+ expect(config.getSandboxNetworkAccess()).toBe(false);
1241
+ });
1242
+ });
1118
1243
  });
1119
1244
  describe('GemmaModelRouterSettings', () => {
1120
1245
  const MODEL = DEFAULT_GEMINI_MODEL;
1121
- const SANDBOX = {
1246
+ const SANDBOX = createMockSandboxConfig({
1122
1247
  command: 'docker',
1123
1248
  image: 'gemini-cli-sandbox',
1124
- };
1249
+ });
1125
1250
  const TARGET_DIR = '/path/to/target';
1126
1251
  const DEBUG_MODE = false;
1127
1252
  const QUESTION = 'test question';
@@ -1408,10 +1533,10 @@ describe('isYoloModeDisabled', () => {
1408
1533
  });
1409
1534
  describe('BaseLlmClient Lifecycle', () => {
1410
1535
  const MODEL = 'gemini-pro';
1411
- const SANDBOX = {
1536
+ const SANDBOX = createMockSandboxConfig({
1412
1537
  command: 'docker',
1413
1538
  image: 'gemini-cli-sandbox',
1414
- };
1539
+ });
1415
1540
  const TARGET_DIR = '/path/to/target';
1416
1541
  const DEBUG_MODE = false;
1417
1542
  const QUESTION = 'test question';
@@ -1450,10 +1575,10 @@ describe('BaseLlmClient Lifecycle', () => {
1450
1575
  });
1451
1576
  describe('Generation Config Merging (HACK)', () => {
1452
1577
  const MODEL = 'gemini-pro';
1453
- const SANDBOX = {
1578
+ const SANDBOX = createMockSandboxConfig({
1454
1579
  command: 'docker',
1455
1580
  image: 'gemini-cli-sandbox',
1456
- };
1581
+ });
1457
1582
  const TARGET_DIR = '/path/to/target';
1458
1583
  const DEBUG_MODE = false;
1459
1584
  const QUESTION = 'test question';
@@ -1695,10 +1820,10 @@ describe('Config getHooks', () => {
1695
1820
  });
1696
1821
  describe('LocalLiteRtLmClient Lifecycle', () => {
1697
1822
  const MODEL = 'gemini-pro';
1698
- const SANDBOX = {
1823
+ const SANDBOX = createMockSandboxConfig({
1699
1824
  command: 'docker',
1700
1825
  image: 'gemini-cli-sandbox',
1701
- };
1826
+ });
1702
1827
  const TARGET_DIR = '/path/to/target';
1703
1828
  const DEBUG_MODE = false;
1704
1829
  const QUESTION = 'test question';
@@ -1962,6 +2087,9 @@ describe('Config Quota & Preview Model Access', () => {
1962
2087
  usageStatisticsEnabled: false,
1963
2088
  embeddingModel: 'gemini-embedding',
1964
2089
  sandbox: {
2090
+ enabled: true,
2091
+ allowedPaths: [],
2092
+ networkAccess: false,
1965
2093
  command: 'docker',
1966
2094
  image: 'gemini-cli-sandbox',
1967
2095
  },
@@ -2454,4 +2582,36 @@ describe('Model Persistence Bug Fix (#19864)', () => {
2454
2582
  expect(config.getModel()).toBe(PREVIEW_GEMINI_3_1_MODEL);
2455
2583
  });
2456
2584
  });
2585
+ describe('ConfigSchema validation', () => {
2586
+ it('should validate a valid sandbox config', async () => {
2587
+ const validConfig = {
2588
+ sandbox: {
2589
+ enabled: true,
2590
+ allowedPaths: ['/tmp'],
2591
+ networkAccess: false,
2592
+ command: 'docker',
2593
+ image: 'node:20',
2594
+ },
2595
+ };
2596
+ const { ConfigSchema } = await import('./config.js');
2597
+ const result = ConfigSchema.safeParse(validConfig);
2598
+ expect(result.success).toBe(true);
2599
+ if (result.success) {
2600
+ expect(result.data.sandbox?.enabled).toBe(true);
2601
+ }
2602
+ });
2603
+ it('should apply defaults in ConfigSchema', async () => {
2604
+ const minimalConfig = {
2605
+ sandbox: {},
2606
+ };
2607
+ const { ConfigSchema } = await import('./config.js');
2608
+ const result = ConfigSchema.safeParse(minimalConfig);
2609
+ expect(result.success).toBe(true);
2610
+ if (result.success) {
2611
+ expect(result.data.sandbox?.enabled).toBe(false);
2612
+ expect(result.data.sandbox?.allowedPaths).toEqual([]);
2613
+ expect(result.data.sandbox?.networkAccess).toBe(false);
2614
+ }
2615
+ });
2616
+ });
2457
2617
  //# sourceMappingURL=config.test.js.map