@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
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it } from 'vitest';
7
+ import { NoopSandboxManager } from './sandboxManager.js';
8
+ describe('NoopSandboxManager', () => {
9
+ const sandboxManager = new NoopSandboxManager();
10
+ it('should pass through the command and arguments unchanged', async () => {
11
+ const req = {
12
+ command: 'ls',
13
+ args: ['-la'],
14
+ cwd: '/tmp',
15
+ env: { PATH: '/usr/bin' },
16
+ };
17
+ const result = await sandboxManager.prepareCommand(req);
18
+ expect(result.program).toBe('ls');
19
+ expect(result.args).toEqual(['-la']);
20
+ });
21
+ it('should sanitize the environment variables', async () => {
22
+ const req = {
23
+ command: 'echo',
24
+ args: ['hello'],
25
+ cwd: '/tmp',
26
+ env: {
27
+ PATH: '/usr/bin',
28
+ GITHUB_TOKEN: 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
29
+ MY_SECRET: 'super-secret',
30
+ SAFE_VAR: 'is-safe',
31
+ },
32
+ };
33
+ const result = await sandboxManager.prepareCommand(req);
34
+ expect(result.env['PATH']).toBe('/usr/bin');
35
+ expect(result.env['SAFE_VAR']).toBe('is-safe');
36
+ expect(result.env['GITHUB_TOKEN']).toBeUndefined();
37
+ expect(result.env['MY_SECRET']).toBeUndefined();
38
+ });
39
+ it('should force environment variable redaction even if not requested in config', async () => {
40
+ const req = {
41
+ command: 'echo',
42
+ args: ['hello'],
43
+ cwd: '/tmp',
44
+ env: {
45
+ API_KEY: 'sensitive-key',
46
+ },
47
+ config: {
48
+ sanitizationConfig: {
49
+ enableEnvironmentVariableRedaction: false,
50
+ },
51
+ },
52
+ };
53
+ const result = await sandboxManager.prepareCommand(req);
54
+ expect(result.env['API_KEY']).toBeUndefined();
55
+ });
56
+ it('should respect allowedEnvironmentVariables in config', async () => {
57
+ const req = {
58
+ command: 'echo',
59
+ args: ['hello'],
60
+ cwd: '/tmp',
61
+ env: {
62
+ MY_TOKEN: 'secret-token',
63
+ OTHER_SECRET: 'another-secret',
64
+ },
65
+ config: {
66
+ sanitizationConfig: {
67
+ allowedEnvironmentVariables: ['MY_TOKEN'],
68
+ },
69
+ },
70
+ };
71
+ const result = await sandboxManager.prepareCommand(req);
72
+ expect(result.env['MY_TOKEN']).toBe('secret-token');
73
+ expect(result.env['OTHER_SECRET']).toBeUndefined();
74
+ });
75
+ it('should respect blockedEnvironmentVariables in config', async () => {
76
+ const req = {
77
+ command: 'echo',
78
+ args: ['hello'],
79
+ cwd: '/tmp',
80
+ env: {
81
+ SAFE_VAR: 'safe-value',
82
+ BLOCKED_VAR: 'blocked-value',
83
+ },
84
+ config: {
85
+ sanitizationConfig: {
86
+ blockedEnvironmentVariables: ['BLOCKED_VAR'],
87
+ },
88
+ },
89
+ };
90
+ const result = await sandboxManager.prepareCommand(req);
91
+ expect(result.env['SAFE_VAR']).toBe('safe-value');
92
+ expect(result.env['BLOCKED_VAR']).toBeUndefined();
93
+ });
94
+ });
95
+ //# sourceMappingURL=sandboxManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxManager.test.js","sourceRoot":"","sources":["../../../src/services/sandboxManager.test.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { type AnsiOutput } from '../utils/terminalSerializer.js';
7
6
  import { type EnvironmentSanitizationConfig } from './environmentSanitization.js';
7
+ import { type ExecutionHandle, type ExecutionOutputEvent, type ExecutionResult } from './executionLifecycleService.js';
8
8
  /**
9
9
  * An environment variable that is set for shell executions. This can be used
10
10
  * by downstream executables and scripts to identify that they were executed
@@ -17,33 +17,9 @@ export declare const GEMINI_CLI_IDENTIFICATION_ENV_VAR = "GEMINI_CLI";
17
17
  export declare const GEMINI_CLI_IDENTIFICATION_ENV_VAR_VALUE = "1";
18
18
  export declare const SCROLLBACK_LIMIT = 300000;
19
19
  /** A structured result from a shell command execution. */
20
- export interface ShellExecutionResult {
21
- /** The raw, unprocessed output buffer. */
22
- rawOutput: Buffer;
23
- /** The combined, decoded output as a string. */
24
- output: string;
25
- /** The process exit code, or null if terminated by a signal. */
26
- exitCode: number | null;
27
- /** The signal that terminated the process, if any. */
28
- signal: number | null;
29
- /** An error object if the process failed to spawn. */
30
- error: Error | null;
31
- /** A boolean indicating if the command was aborted by the user. */
32
- aborted: boolean;
33
- /** The process ID of the spawned shell. */
34
- pid: number | undefined;
35
- /** The method used to execute the shell command. */
36
- executionMethod: 'lydell-node-pty' | 'node-pty' | 'child_process' | 'none';
37
- /** Whether the command was moved to the background. */
38
- backgrounded?: boolean;
39
- }
20
+ export type ShellExecutionResult = ExecutionResult;
40
21
  /** A handle for an ongoing shell execution. */
41
- export interface ShellExecutionHandle {
42
- /** The process ID of the spawned shell. */
43
- pid: number | undefined;
44
- /** A promise that resolves with the complete execution result. */
45
- result: Promise<ShellExecutionResult>;
46
- }
22
+ export type ShellExecutionHandle = ExecutionHandle;
47
23
  export interface ShellExecutionConfig {
48
24
  terminalWidth?: number;
49
25
  terminalHeight?: number;
@@ -59,27 +35,7 @@ export interface ShellExecutionConfig {
59
35
  /**
60
36
  * Describes a structured event emitted during shell command execution.
61
37
  */
62
- export type ShellOutputEvent = {
63
- /** The event contains a chunk of output data. */
64
- type: 'data';
65
- /** The decoded string chunk. */
66
- chunk: string | AnsiOutput;
67
- } | {
68
- /** Signals that the output stream has been identified as binary. */
69
- type: 'binary_detected';
70
- } | {
71
- /** Provides progress updates for a binary stream. */
72
- type: 'binary_progress';
73
- /** The total number of bytes received so far. */
74
- bytesReceived: number;
75
- } | {
76
- /** Signals that the process has exited. */
77
- type: 'exit';
78
- /** The exit code of the process, if any. */
79
- exitCode: number | null;
80
- /** The signal that terminated the process, if any. */
81
- signal: number | null;
82
- };
38
+ export type ShellOutputEvent = ExecutionOutputEvent;
83
39
  /**
84
40
  * A centralized service for executing shell commands with robust process
85
41
  * management, cross-platform compatibility, and streaming output capabilities.
@@ -90,13 +46,10 @@ export declare class ShellExecutionService {
90
46
  private static activeChildProcesses;
91
47
  private static backgroundLogPids;
92
48
  private static backgroundLogStreams;
93
- private static exitedPtyInfo;
94
49
  static getLogDir(): string;
95
50
  static getLogFilePath(pid: number): string;
96
51
  private static syncBackgroundLog;
97
52
  private static cleanupLogStream;
98
- private static activeResolvers;
99
- private static activeListeners;
100
53
  /**
101
54
  * Executes a shell command using `node-pty`, capturing all output and lifecycle events.
102
55
  *
@@ -109,7 +62,6 @@ export declare class ShellExecutionService {
109
62
  */
110
63
  static execute(commandToExecute: string, cwd: string, onOutputEvent: (event: ShellOutputEvent) => void, abortSignal: AbortSignal, shouldUseNodePty: boolean, shellExecutionConfig: ShellExecutionConfig): Promise<ShellExecutionHandle>;
111
64
  private static appendAndTruncate;
112
- private static emitEvent;
113
65
  private static childProcessFallback;
114
66
  private static executeWithPty;
115
67
  /**