@google/gemini-cli-core 0.36.0-preview.7 → 0.37.0-preview.0

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 (472) hide show
  1. package/dist/docs/CONTRIBUTING.md +10 -7
  2. package/dist/docs/assets/theme-tokyonight-dark.png +0 -0
  3. package/dist/docs/changelogs/index.md +24 -0
  4. package/dist/docs/changelogs/latest.md +366 -459
  5. package/dist/docs/changelogs/preview.md +362 -356
  6. package/dist/docs/cli/acp-mode.md +126 -0
  7. package/dist/docs/cli/cli-reference.md +1 -1
  8. package/dist/docs/cli/notifications.md +5 -5
  9. package/dist/docs/cli/plan-mode.md +12 -8
  10. package/dist/docs/cli/sandbox.md +1 -1
  11. package/dist/docs/cli/settings.md +14 -13
  12. package/dist/docs/cli/themes.md +5 -0
  13. package/dist/docs/core/index.md +2 -2
  14. package/dist/docs/core/subagents.md +134 -23
  15. package/dist/docs/get-started/gemini-3.md +1 -1
  16. package/dist/docs/get-started/index.md +127 -1
  17. package/dist/docs/ide-integration/index.md +99 -24
  18. package/dist/docs/index.md +0 -2
  19. package/dist/docs/redirects.json +1 -0
  20. package/dist/docs/reference/commands.md +1 -3
  21. package/dist/docs/reference/configuration.md +183 -92
  22. package/dist/docs/reference/keyboard-shortcuts.md +14 -6
  23. package/dist/docs/reference/policy-engine.md +16 -30
  24. package/dist/docs/reference/tools.md +56 -23
  25. package/dist/docs/resources/quota-and-pricing.md +23 -9
  26. package/dist/docs/sidebar.json +11 -4
  27. package/dist/docs/tools/planning.md +6 -4
  28. package/dist/src/agents/agentLoader.d.ts +12 -12
  29. package/dist/src/agents/agentLoader.js +1 -0
  30. package/dist/src/agents/agentLoader.js.map +1 -1
  31. package/dist/src/agents/browser/automationOverlay.js +2 -10
  32. package/dist/src/agents/browser/automationOverlay.js.map +1 -1
  33. package/dist/src/agents/browser/browserAgentDefinition.js +10 -3
  34. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -1
  35. package/dist/src/agents/browser/browserAgentFactory.d.ts +4 -4
  36. package/dist/src/agents/browser/browserAgentFactory.js +15 -29
  37. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -1
  38. package/dist/src/agents/browser/browserAgentFactory.test.js +41 -24
  39. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -1
  40. package/dist/src/agents/browser/browserAgentInvocation.d.ts +1 -0
  41. package/dist/src/agents/browser/browserAgentInvocation.js +60 -27
  42. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
  43. package/dist/src/agents/browser/browserAgentInvocation.test.js +59 -5
  44. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -1
  45. package/dist/src/agents/browser/browserManager.d.ts +51 -8
  46. package/dist/src/agents/browser/browserManager.js +242 -70
  47. package/dist/src/agents/browser/browserManager.js.map +1 -1
  48. package/dist/src/agents/browser/browserManager.test.js +384 -17
  49. package/dist/src/agents/browser/browserManager.test.js.map +1 -1
  50. package/dist/src/agents/browser/inputBlocker.d.ts +4 -4
  51. package/dist/src/agents/browser/inputBlocker.js +8 -18
  52. package/dist/src/agents/browser/inputBlocker.js.map +1 -1
  53. package/dist/src/agents/browser/inputBlocker.test.js +31 -3
  54. package/dist/src/agents/browser/inputBlocker.test.js.map +1 -1
  55. package/dist/src/agents/browser/mcpToolWrapper.d.ts +1 -1
  56. package/dist/src/agents/browser/mcpToolWrapper.js +9 -6
  57. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -1
  58. package/dist/src/agents/browser/mcpToolWrapper.test.js +2 -2
  59. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -1
  60. package/dist/src/agents/browser/snapshotSuperseder.d.ts +31 -0
  61. package/dist/src/agents/browser/snapshotSuperseder.js +101 -0
  62. package/dist/src/agents/browser/snapshotSuperseder.js.map +1 -0
  63. package/dist/src/agents/browser/snapshotSuperseder.test.js +158 -0
  64. package/dist/src/agents/browser/snapshotSuperseder.test.js.map +1 -0
  65. package/dist/src/agents/local-executor.d.ts +4 -0
  66. package/dist/src/agents/local-executor.js +46 -19
  67. package/dist/src/agents/local-executor.js.map +1 -1
  68. package/dist/src/agents/local-executor.test.js +118 -18
  69. package/dist/src/agents/local-executor.test.js.map +1 -1
  70. package/dist/src/agents/local-invocation.d.ts +1 -0
  71. package/dist/src/agents/local-invocation.js +19 -9
  72. package/dist/src/agents/local-invocation.js.map +1 -1
  73. package/dist/src/agents/local-invocation.test.js +24 -0
  74. package/dist/src/agents/local-invocation.test.js.map +1 -1
  75. package/dist/src/agents/registry.js +16 -1
  76. package/dist/src/agents/registry.js.map +1 -1
  77. package/dist/src/agents/registry.test.js +67 -0
  78. package/dist/src/agents/registry.test.js.map +1 -1
  79. package/dist/src/agents/types.d.ts +9 -0
  80. package/dist/src/agents/types.js.map +1 -1
  81. package/dist/src/code_assist/oauth2.js +8 -3
  82. package/dist/src/code_assist/oauth2.js.map +1 -1
  83. package/dist/src/code_assist/oauth2.test.js +57 -0
  84. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  85. package/dist/src/code_assist/setup.js +5 -2
  86. package/dist/src/code_assist/setup.js.map +1 -1
  87. package/dist/src/code_assist/setup.test.js +27 -1
  88. package/dist/src/code_assist/setup.test.js.map +1 -1
  89. package/dist/src/code_assist/types.d.ts +80 -80
  90. package/dist/src/config/agent-loop-context.d.ts +2 -0
  91. package/dist/src/config/config.d.ts +81 -16
  92. package/dist/src/config/config.js +147 -51
  93. package/dist/src/config/config.js.map +1 -1
  94. package/dist/src/config/config.test.js +89 -2
  95. package/dist/src/config/config.test.js.map +1 -1
  96. package/dist/src/config/defaultModelConfigs.js +9 -0
  97. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  98. package/dist/src/config/memory.d.ts +1 -0
  99. package/dist/src/config/memory.js +6 -0
  100. package/dist/src/config/memory.js.map +1 -1
  101. package/dist/src/config/storage.d.ts +1 -0
  102. package/dist/src/config/storage.js +4 -0
  103. package/dist/src/config/storage.js.map +1 -1
  104. package/dist/src/config/storage.test.js +5 -0
  105. package/dist/src/config/storage.test.js.map +1 -1
  106. package/dist/src/config/topicState.d.ts +21 -0
  107. package/dist/src/config/topicState.js +41 -0
  108. package/dist/src/config/topicState.js.map +1 -0
  109. package/dist/src/confirmation-bus/types.d.ts +9 -2
  110. package/dist/src/confirmation-bus/types.js +1 -0
  111. package/dist/src/confirmation-bus/types.js.map +1 -1
  112. package/dist/src/context/agentHistoryProvider.d.ts +45 -0
  113. package/dist/src/context/agentHistoryProvider.js +298 -0
  114. package/dist/src/context/agentHistoryProvider.js.map +1 -0
  115. package/dist/src/context/agentHistoryProvider.test.d.ts +6 -0
  116. package/dist/src/context/agentHistoryProvider.test.js +394 -0
  117. package/dist/src/context/agentHistoryProvider.test.js.map +1 -0
  118. package/dist/src/context/chatCompressionService.js.map +1 -0
  119. package/dist/src/context/chatCompressionService.test.js.map +1 -0
  120. package/dist/src/{services → context}/contextManager.d.ts +2 -0
  121. package/dist/src/{services → context}/contextManager.js +18 -9
  122. package/dist/src/context/contextManager.js.map +1 -0
  123. package/dist/src/{services → context}/contextManager.test.js +21 -6
  124. package/dist/src/context/contextManager.test.js.map +1 -0
  125. package/dist/src/context/toolDistillationService.d.ts +38 -0
  126. package/dist/src/context/toolDistillationService.js +170 -0
  127. package/dist/src/context/toolDistillationService.js.map +1 -0
  128. package/dist/src/context/toolDistillationService.test.d.ts +6 -0
  129. package/dist/src/context/toolDistillationService.test.js +83 -0
  130. package/dist/src/context/toolDistillationService.test.js.map +1 -0
  131. package/dist/src/{services → context}/toolOutputMaskingService.d.ts +2 -2
  132. package/dist/src/{services → context}/toolOutputMaskingService.js +7 -7
  133. package/dist/src/context/toolOutputMaskingService.js.map +1 -0
  134. package/dist/src/context/toolOutputMaskingService.test.d.ts +6 -0
  135. package/dist/src/{services → context}/toolOutputMaskingService.test.js +4 -5
  136. package/dist/src/context/toolOutputMaskingService.test.js.map +1 -0
  137. package/dist/src/context/truncation.d.ts +26 -0
  138. package/dist/src/context/truncation.js +102 -0
  139. package/dist/src/context/truncation.js.map +1 -0
  140. package/dist/src/core/client.d.ts +3 -1
  141. package/dist/src/core/client.js +23 -13
  142. package/dist/src/core/client.js.map +1 -1
  143. package/dist/src/core/client.test.js +29 -34
  144. package/dist/src/core/client.test.js.map +1 -1
  145. package/dist/src/core/contentGenerator.d.ts +0 -1
  146. package/dist/src/core/contentGenerator.js +2 -28
  147. package/dist/src/core/contentGenerator.js.map +1 -1
  148. package/dist/src/core/contentGenerator.test.js +1 -101
  149. package/dist/src/core/contentGenerator.test.js.map +1 -1
  150. package/dist/src/core/geminiChat.js +4 -5
  151. package/dist/src/core/geminiChat.js.map +1 -1
  152. package/dist/src/core/geminiChat.test.js +71 -18
  153. package/dist/src/core/geminiChat.test.js.map +1 -1
  154. package/dist/src/core/prompts-substitution.test.js +5 -0
  155. package/dist/src/core/prompts-substitution.test.js.map +1 -1
  156. package/dist/src/core/prompts.test.js +3 -0
  157. package/dist/src/core/prompts.test.js.map +1 -1
  158. package/dist/src/generated/git-commit.d.ts +2 -2
  159. package/dist/src/generated/git-commit.js +2 -2
  160. package/dist/src/index.d.ts +7 -3
  161. package/dist/src/index.js +9 -5
  162. package/dist/src/index.js.map +1 -1
  163. package/dist/src/policy/config.d.ts +1 -1
  164. package/dist/src/policy/config.js +5 -2
  165. package/dist/src/policy/config.js.map +1 -1
  166. package/dist/src/policy/policies/discovered.toml +7 -0
  167. package/dist/src/policy/policies/non-interactive.toml +7 -0
  168. package/dist/src/policy/policies/plan.toml +25 -0
  169. package/dist/src/policy/policies/read-only.toml +6 -0
  170. package/dist/src/policy/policies/sandbox-default.toml +3 -2
  171. package/dist/src/policy/policies/write.toml +21 -0
  172. package/dist/src/policy/policies/yolo.toml +1 -1
  173. package/dist/src/policy/policy-engine.d.ts +2 -4
  174. package/dist/src/policy/policy-engine.js +24 -37
  175. package/dist/src/policy/policy-engine.js.map +1 -1
  176. package/dist/src/policy/policy-engine.test.js +107 -29
  177. package/dist/src/policy/policy-engine.test.js.map +1 -1
  178. package/dist/src/policy/topic-policy.test.d.ts +6 -0
  179. package/dist/src/policy/topic-policy.test.js +48 -0
  180. package/dist/src/policy/topic-policy.test.js.map +1 -0
  181. package/dist/src/policy/types.d.ts +3 -6
  182. package/dist/src/policy/types.js.map +1 -1
  183. package/dist/src/prompts/promptProvider.js +20 -4
  184. package/dist/src/prompts/promptProvider.js.map +1 -1
  185. package/dist/src/prompts/promptProvider.test.js +84 -1
  186. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  187. package/dist/src/prompts/snippets-memory-manager.test.js +1 -1
  188. package/dist/src/prompts/snippets-memory-manager.test.js.map +1 -1
  189. package/dist/src/prompts/snippets.d.ts +3 -4
  190. package/dist/src/prompts/snippets.js +33 -51
  191. package/dist/src/prompts/snippets.js.map +1 -1
  192. package/dist/src/prompts/snippets.legacy.d.ts +6 -4
  193. package/dist/src/prompts/snippets.legacy.js +32 -7
  194. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  195. package/dist/src/sandbox/linux/LinuxSandboxManager.d.ts +11 -1
  196. package/dist/src/sandbox/linux/LinuxSandboxManager.js +261 -27
  197. package/dist/src/sandbox/linux/LinuxSandboxManager.js.map +1 -1
  198. package/dist/src/sandbox/linux/LinuxSandboxManager.test.js +430 -125
  199. package/dist/src/sandbox/linux/LinuxSandboxManager.test.js.map +1 -1
  200. package/dist/src/sandbox/macos/MacOsSandboxManager.d.ts +7 -22
  201. package/dist/src/sandbox/macos/MacOsSandboxManager.js +58 -57
  202. package/dist/src/sandbox/macos/MacOsSandboxManager.js.map +1 -1
  203. package/dist/src/sandbox/macos/MacOsSandboxManager.test.js +148 -103
  204. package/dist/src/sandbox/macos/MacOsSandboxManager.test.js.map +1 -1
  205. package/dist/src/sandbox/macos/baseProfile.d.ts +1 -1
  206. package/dist/src/sandbox/macos/baseProfile.js +0 -6
  207. package/dist/src/sandbox/macos/baseProfile.js.map +1 -1
  208. package/dist/src/sandbox/macos/seatbeltArgsBuilder.d.ts +10 -10
  209. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js +80 -92
  210. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js.map +1 -1
  211. package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js +135 -99
  212. package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js.map +1 -1
  213. package/dist/src/sandbox/{macos → utils}/commandSafety.d.ts +11 -0
  214. package/dist/src/sandbox/{macos → utils}/commandSafety.js +47 -14
  215. package/dist/src/sandbox/utils/commandSafety.js.map +1 -0
  216. package/dist/src/sandbox/utils/commandUtils.d.ts +9 -0
  217. package/dist/src/sandbox/utils/commandUtils.js +57 -0
  218. package/dist/src/sandbox/utils/commandUtils.js.map +1 -0
  219. package/dist/src/sandbox/utils/fsUtils.d.ts +11 -0
  220. package/dist/src/sandbox/utils/fsUtils.js +82 -0
  221. package/dist/src/sandbox/utils/fsUtils.js.map +1 -0
  222. package/dist/src/sandbox/utils/sandboxDenialUtils.d.ts +12 -0
  223. package/dist/src/sandbox/utils/sandboxDenialUtils.js +68 -0
  224. package/dist/src/sandbox/utils/sandboxDenialUtils.js.map +1 -0
  225. package/dist/src/sandbox/utils/sandboxDenialUtils.test.d.ts +6 -0
  226. package/dist/src/sandbox/utils/sandboxDenialUtils.test.js +37 -0
  227. package/dist/src/sandbox/utils/sandboxDenialUtils.test.js.map +1 -0
  228. package/dist/src/sandbox/utils/sandboxReadWriteUtils.d.ts +5 -0
  229. package/dist/src/sandbox/utils/sandboxReadWriteUtils.js +60 -0
  230. package/dist/src/sandbox/utils/sandboxReadWriteUtils.js.map +1 -0
  231. package/dist/src/sandbox/windows/GeminiSandbox.cs +257 -216
  232. package/dist/src/sandbox/windows/WindowsSandboxManager.d.ts +12 -2
  233. package/dist/src/sandbox/windows/WindowsSandboxManager.js +250 -38
  234. package/dist/src/sandbox/windows/WindowsSandboxManager.js.map +1 -1
  235. package/dist/src/sandbox/windows/WindowsSandboxManager.test.js +326 -9
  236. package/dist/src/sandbox/windows/WindowsSandboxManager.test.js.map +1 -1
  237. package/dist/src/sandbox/windows/commandSafety.d.ts +19 -0
  238. package/dist/src/sandbox/windows/commandSafety.js +128 -0
  239. package/dist/src/sandbox/windows/commandSafety.js.map +1 -0
  240. package/dist/src/sandbox/windows/commandSafety.test.d.ts +6 -0
  241. package/dist/src/sandbox/windows/commandSafety.test.js +42 -0
  242. package/dist/src/sandbox/windows/commandSafety.test.js.map +1 -0
  243. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.d.ts +12 -0
  244. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.js +68 -0
  245. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.js.map +1 -0
  246. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.test.d.ts +6 -0
  247. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.test.js +68 -0
  248. package/dist/src/sandbox/windows/windowsSandboxDenialUtils.test.js.map +1 -0
  249. package/dist/src/scheduler/scheduler.js +12 -2
  250. package/dist/src/scheduler/scheduler.js.map +1 -1
  251. package/dist/src/scheduler/scheduler.test.js +52 -0
  252. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  253. package/dist/src/scheduler/scheduler_hooks.test.js +1 -0
  254. package/dist/src/scheduler/scheduler_hooks.test.js.map +1 -1
  255. package/dist/src/scheduler/state-manager.js +1 -1
  256. package/dist/src/scheduler/state-manager.js.map +1 -1
  257. package/dist/src/scheduler/state-manager.test.js +10 -0
  258. package/dist/src/scheduler/state-manager.test.js.map +1 -1
  259. package/dist/src/scheduler/tool-executor.js +7 -2
  260. package/dist/src/scheduler/tool-executor.js.map +1 -1
  261. package/dist/src/scheduler/tool-executor.test.js +38 -0
  262. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  263. package/dist/src/scheduler/types.d.ts +4 -2
  264. package/dist/src/services/chatRecordingService.d.ts +1 -13
  265. package/dist/src/services/chatRecordingService.js +45 -46
  266. package/dist/src/services/chatRecordingService.js.map +1 -1
  267. package/dist/src/services/chatRecordingService.test.js +79 -10
  268. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  269. package/dist/src/services/executionLifecycleService.d.ts +43 -6
  270. package/dist/src/services/executionLifecycleService.js +49 -12
  271. package/dist/src/services/executionLifecycleService.js.map +1 -1
  272. package/dist/src/services/executionLifecycleService.test.js +157 -3
  273. package/dist/src/services/executionLifecycleService.test.js.map +1 -1
  274. package/dist/src/services/fileDiscoveryService.d.ts +17 -2
  275. package/dist/src/services/fileDiscoveryService.js +84 -20
  276. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  277. package/dist/src/services/fileDiscoveryService.test.js +67 -1
  278. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  279. package/dist/src/services/modelConfigService.d.ts +11 -0
  280. package/dist/src/services/modelConfigService.js +67 -0
  281. package/dist/src/services/modelConfigService.js.map +1 -1
  282. package/dist/src/services/modelConfigService.test.js +30 -0
  283. package/dist/src/services/modelConfigService.test.js.map +1 -1
  284. package/dist/src/services/sandboxManager.d.ts +90 -8
  285. package/dist/src/services/sandboxManager.integration.test.js +438 -0
  286. package/dist/src/services/sandboxManager.integration.test.js.map +1 -0
  287. package/dist/src/services/sandboxManager.js +156 -13
  288. package/dist/src/services/sandboxManager.js.map +1 -1
  289. package/dist/src/services/sandboxManager.test.js +373 -117
  290. package/dist/src/services/sandboxManager.test.js.map +1 -1
  291. package/dist/src/services/sandboxManagerFactory.d.ts +2 -3
  292. package/dist/src/services/sandboxManagerFactory.js +10 -17
  293. package/dist/src/services/sandboxManagerFactory.js.map +1 -1
  294. package/dist/src/services/sandboxedFileSystemService.d.ts +1 -0
  295. package/dist/src/services/sandboxedFileSystemService.js +32 -3
  296. package/dist/src/services/sandboxedFileSystemService.js.map +1 -1
  297. package/dist/src/services/sandboxedFileSystemService.test.js +83 -12
  298. package/dist/src/services/sandboxedFileSystemService.test.js.map +1 -1
  299. package/dist/src/services/shellExecutionService.d.ts +2 -0
  300. package/dist/src/services/shellExecutionService.js +45 -16
  301. package/dist/src/services/shellExecutionService.js.map +1 -1
  302. package/dist/src/services/shellExecutionService.test.js +5 -4
  303. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  304. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +4 -0
  305. package/dist/src/services/test-data/resolved-aliases.golden.json +4 -0
  306. package/dist/src/services/types.d.ts +14 -0
  307. package/dist/src/services/types.js +7 -0
  308. package/dist/src/services/types.js.map +1 -0
  309. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +6 -0
  310. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  311. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +5 -1
  312. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  313. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -1
  314. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +3 -1
  315. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  316. package/dist/src/telemetry/loggers.js +1 -1
  317. package/dist/src/telemetry/loggers.js.map +1 -1
  318. package/dist/src/telemetry/loggers.test.js +8 -3
  319. package/dist/src/telemetry/loggers.test.js.map +1 -1
  320. package/dist/src/telemetry/metrics.d.ts +10 -1
  321. package/dist/src/telemetry/metrics.js +19 -4
  322. package/dist/src/telemetry/metrics.js.map +1 -1
  323. package/dist/src/telemetry/metrics.test.js +44 -0
  324. package/dist/src/telemetry/metrics.test.js.map +1 -1
  325. package/dist/src/telemetry/types.d.ts +3 -3
  326. package/dist/src/telemetry/types.js +9 -4
  327. package/dist/src/telemetry/types.js.map +1 -1
  328. package/dist/src/test-utils/mock-message-bus.d.ts +1 -1
  329. package/dist/src/test-utils/mock-message-bus.js +1 -1
  330. package/dist/src/test-utils/mock-message-bus.js.map +1 -1
  331. package/dist/src/tools/definitions/base-declarations.d.ts +6 -0
  332. package/dist/src/tools/definitions/base-declarations.js +7 -0
  333. package/dist/src/tools/definitions/base-declarations.js.map +1 -1
  334. package/dist/src/tools/definitions/coreTools.d.ts +2 -1
  335. package/dist/src/tools/definitions/coreTools.js +9 -3
  336. package/dist/src/tools/definitions/coreTools.js.map +1 -1
  337. package/dist/src/tools/definitions/dynamic-declaration-helpers.d.ts +4 -0
  338. package/dist/src/tools/definitions/dynamic-declaration-helpers.js +29 -2
  339. package/dist/src/tools/definitions/dynamic-declaration-helpers.js.map +1 -1
  340. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +11 -6
  341. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  342. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +10 -4
  343. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  344. package/dist/src/tools/definitions/trackerTools.js +3 -3
  345. package/dist/src/tools/definitions/trackerTools.js.map +1 -1
  346. package/dist/src/tools/definitions/types.d.ts +1 -0
  347. package/dist/src/tools/enter-plan-mode.js +15 -0
  348. package/dist/src/tools/enter-plan-mode.js.map +1 -1
  349. package/dist/src/tools/enter-plan-mode.test.js +25 -0
  350. package/dist/src/tools/enter-plan-mode.test.js.map +1 -1
  351. package/dist/src/tools/grep-utils.d.ts +2 -1
  352. package/dist/src/tools/grep-utils.js +22 -3
  353. package/dist/src/tools/grep-utils.js.map +1 -1
  354. package/dist/src/tools/grep.js +16 -3
  355. package/dist/src/tools/grep.js.map +1 -1
  356. package/dist/src/tools/grep.test.js +34 -6
  357. package/dist/src/tools/grep.test.js.map +1 -1
  358. package/dist/src/tools/ls.js +6 -4
  359. package/dist/src/tools/ls.js.map +1 -1
  360. package/dist/src/tools/ls.test.js +22 -7
  361. package/dist/src/tools/ls.test.js.map +1 -1
  362. package/dist/src/tools/mcp-client-manager.js +6 -3
  363. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  364. package/dist/src/tools/mcp-client-manager.test.js +35 -0
  365. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  366. package/dist/src/tools/memoryTool.d.ts +9 -2
  367. package/dist/src/tools/memoryTool.js +39 -15
  368. package/dist/src/tools/memoryTool.js.map +1 -1
  369. package/dist/src/tools/memoryTool.test.js +61 -2
  370. package/dist/src/tools/memoryTool.test.js.map +1 -1
  371. package/dist/src/tools/read-many-files.js +12 -4
  372. package/dist/src/tools/read-many-files.js.map +1 -1
  373. package/dist/src/tools/read-many-files.test.js +17 -17
  374. package/dist/src/tools/read-many-files.test.js.map +1 -1
  375. package/dist/src/tools/ripGrep.js +14 -1
  376. package/dist/src/tools/ripGrep.js.map +1 -1
  377. package/dist/src/tools/ripGrep.test.js +9 -9
  378. package/dist/src/tools/ripGrep.test.js.map +1 -1
  379. package/dist/src/tools/shell.d.ts +10 -0
  380. package/dist/src/tools/shell.js +97 -124
  381. package/dist/src/tools/shell.js.map +1 -1
  382. package/dist/src/tools/shell.test.js +22 -3
  383. package/dist/src/tools/shell.test.js.map +1 -1
  384. package/dist/src/tools/tool-names.d.ts +4 -4
  385. package/dist/src/tools/tool-names.js +5 -3
  386. package/dist/src/tools/tool-names.js.map +1 -1
  387. package/dist/src/tools/tool-registry.js +11 -1
  388. package/dist/src/tools/tool-registry.js.map +1 -1
  389. package/dist/src/tools/tool-registry.test.js +43 -1
  390. package/dist/src/tools/tool-registry.test.js.map +1 -1
  391. package/dist/src/tools/tools.d.ts +12 -1
  392. package/dist/src/tools/tools.js +15 -0
  393. package/dist/src/tools/tools.js.map +1 -1
  394. package/dist/src/tools/tools.test.js +42 -1
  395. package/dist/src/tools/tools.test.js.map +1 -1
  396. package/dist/src/tools/topicTool.d.ts +29 -0
  397. package/dist/src/tools/topicTool.js +72 -0
  398. package/dist/src/tools/topicTool.js.map +1 -0
  399. package/dist/src/tools/topicTool.test.d.ts +6 -0
  400. package/dist/src/tools/topicTool.test.js +105 -0
  401. package/dist/src/tools/topicTool.test.js.map +1 -0
  402. package/dist/src/tools/web-fetch.js +38 -20
  403. package/dist/src/tools/web-fetch.js.map +1 -1
  404. package/dist/src/tools/web-fetch.test.js +28 -0
  405. package/dist/src/tools/web-fetch.test.js.map +1 -1
  406. package/dist/src/utils/checkpointUtils.d.ts +4 -4
  407. package/dist/src/utils/errors.d.ts +3 -0
  408. package/dist/src/utils/errors.js +28 -6
  409. package/dist/src/utils/errors.js.map +1 -1
  410. package/dist/src/utils/errors.test.js +23 -0
  411. package/dist/src/utils/errors.test.js.map +1 -1
  412. package/dist/src/utils/getFolderStructure.js +1 -1
  413. package/dist/src/utils/getFolderStructure.js.map +1 -1
  414. package/dist/src/utils/gitIgnoreParser.d.ts +2 -2
  415. package/dist/src/utils/gitIgnoreParser.js +28 -50
  416. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  417. package/dist/src/utils/gitIgnoreParser.test.js +51 -185
  418. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  419. package/dist/src/utils/ignoreFileParser.d.ts +2 -2
  420. package/dist/src/utils/ignoreFileParser.js +6 -17
  421. package/dist/src/utils/ignoreFileParser.js.map +1 -1
  422. package/dist/src/utils/ignoreFileParser.test.js +40 -132
  423. package/dist/src/utils/ignoreFileParser.test.js.map +1 -1
  424. package/dist/src/utils/ignorePathUtils.d.ts +11 -0
  425. package/dist/src/utils/ignorePathUtils.js +39 -0
  426. package/dist/src/utils/ignorePathUtils.js.map +1 -0
  427. package/dist/src/utils/ignorePathUtils.test.d.ts +6 -0
  428. package/dist/src/utils/ignorePathUtils.test.js +70 -0
  429. package/dist/src/utils/ignorePathUtils.test.js.map +1 -0
  430. package/dist/src/utils/memoryDiscovery.d.ts +6 -4
  431. package/dist/src/utils/memoryDiscovery.js +66 -41
  432. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  433. package/dist/src/utils/memoryDiscovery.test.js +40 -0
  434. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  435. package/dist/src/utils/memoryImportProcessor.d.ts +1 -1
  436. package/dist/src/utils/memoryImportProcessor.js +24 -15
  437. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  438. package/dist/src/utils/sessionOperations.d.ts +19 -0
  439. package/dist/src/utils/sessionOperations.js +101 -0
  440. package/dist/src/utils/sessionOperations.js.map +1 -0
  441. package/dist/src/utils/sessionOperations.test.d.ts +6 -0
  442. package/dist/src/utils/sessionOperations.test.js +92 -0
  443. package/dist/src/utils/sessionOperations.test.js.map +1 -0
  444. package/dist/src/utils/shell-utils.d.ts +15 -0
  445. package/dist/src/utils/shell-utils.js +43 -2
  446. package/dist/src/utils/shell-utils.js.map +1 -1
  447. package/dist/src/utils/textUtils.d.ts +8 -0
  448. package/dist/src/utils/textUtils.js +16 -0
  449. package/dist/src/utils/textUtils.js.map +1 -1
  450. package/dist/src/utils/tokenCalculation.d.ts +2 -0
  451. package/dist/src/utils/tokenCalculation.js +2 -2
  452. package/dist/src/utils/tokenCalculation.js.map +1 -1
  453. package/dist/tsconfig.tsbuildinfo +1 -1
  454. package/package.json +1 -1
  455. package/dist/docs/get-started/examples.md +0 -141
  456. package/dist/google-gemini-cli-core-0.36.0-preview.6.tgz +0 -0
  457. package/dist/src/sandbox/macos/MacOsSandboxManager.integration.test.js +0 -164
  458. package/dist/src/sandbox/macos/MacOsSandboxManager.integration.test.js.map +0 -1
  459. package/dist/src/sandbox/macos/commandSafety.js.map +0 -1
  460. package/dist/src/services/chatCompressionService.js.map +0 -1
  461. package/dist/src/services/chatCompressionService.test.js.map +0 -1
  462. package/dist/src/services/contextManager.js.map +0 -1
  463. package/dist/src/services/contextManager.test.js.map +0 -1
  464. package/dist/src/services/toolOutputMaskingService.js.map +0 -1
  465. package/dist/src/services/toolOutputMaskingService.test.js.map +0 -1
  466. /package/dist/src/{services/toolOutputMaskingService.test.d.ts → agents/browser/snapshotSuperseder.test.d.ts} +0 -0
  467. /package/dist/src/{services → context}/chatCompressionService.d.ts +0 -0
  468. /package/dist/src/{services → context}/chatCompressionService.js +0 -0
  469. /package/dist/src/{services → context}/chatCompressionService.test.d.ts +0 -0
  470. /package/dist/src/{services → context}/chatCompressionService.test.js +0 -0
  471. /package/dist/src/{services → context}/contextManager.test.d.ts +0 -0
  472. /package/dist/src/{sandbox/macos/MacOsSandboxManager.integration.test.d.ts → services/sandboxManager.integration.test.d.ts} +0 -0
@@ -4,139 +4,395 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import os from 'node:os';
7
- import { describe, expect, it, vi } from 'vitest';
8
- import { NoopSandboxManager, sanitizePaths } from './sandboxManager.js';
7
+ import path from 'node:path';
8
+ import fsPromises from 'node:fs/promises';
9
+ import { afterEach, describe, expect, it, vi, beforeEach } from 'vitest';
10
+ import { NoopSandboxManager, sanitizePaths, findSecretFiles, isSecretFile, tryRealpath, resolveSandboxPaths, getPathIdentity, } from './sandboxManager.js';
9
11
  import { createSandboxManager } from './sandboxManagerFactory.js';
10
12
  import { LinuxSandboxManager } from '../sandbox/linux/LinuxSandboxManager.js';
11
13
  import { MacOsSandboxManager } from '../sandbox/macos/MacOsSandboxManager.js';
12
14
  import { WindowsSandboxManager } from '../sandbox/windows/WindowsSandboxManager.js';
13
- describe('sanitizePaths', () => {
14
- it('should return undefined if no paths are provided', () => {
15
- expect(sanitizePaths(undefined)).toBeUndefined();
15
+ vi.mock('node:fs/promises', async () => {
16
+ const actual = await vi.importActual('node:fs/promises');
17
+ return {
18
+ ...actual,
19
+ default: {
20
+ ...actual,
21
+ readdir: vi.fn(),
22
+ realpath: vi.fn(),
23
+ stat: vi.fn(),
24
+ },
25
+ readdir: vi.fn(),
26
+ realpath: vi.fn(),
27
+ stat: vi.fn(),
28
+ };
29
+ });
30
+ describe('isSecretFile', () => {
31
+ it('should return true for .env', () => {
32
+ expect(isSecretFile('.env')).toBe(true);
33
+ });
34
+ it('should return true for .env.local', () => {
35
+ expect(isSecretFile('.env.local')).toBe(true);
36
+ });
37
+ it('should return true for .env.production', () => {
38
+ expect(isSecretFile('.env.production')).toBe(true);
16
39
  });
17
- it('should deduplicate paths and return them', () => {
18
- const paths = ['/workspace/foo', '/workspace/bar', '/workspace/foo'];
19
- expect(sanitizePaths(paths)).toEqual(['/workspace/foo', '/workspace/bar']);
40
+ it('should return false for regular files', () => {
41
+ expect(isSecretFile('package.json')).toBe(false);
42
+ expect(isSecretFile('index.ts')).toBe(false);
43
+ expect(isSecretFile('.gitignore')).toBe(false);
20
44
  });
21
- it('should throw an error if a path is not absolute', () => {
22
- const paths = ['/workspace/foo', 'relative/path'];
23
- expect(() => sanitizePaths(paths)).toThrow('Sandbox path must be absolute: relative/path');
45
+ it('should return false for files starting with .env but not matching pattern', () => {
46
+ // This depends on the pattern ".env.*". ".env-backup" would match ".env*" but not ".env.*"
47
+ expect(isSecretFile('.env-backup')).toBe(false);
24
48
  });
25
49
  });
26
- describe('NoopSandboxManager', () => {
27
- const sandboxManager = new NoopSandboxManager();
28
- it('should pass through the command and arguments unchanged', async () => {
29
- const req = {
30
- command: 'ls',
31
- args: ['-la'],
32
- cwd: '/tmp',
33
- env: { PATH: '/usr/bin' },
34
- };
35
- const result = await sandboxManager.prepareCommand(req);
36
- expect(result.program).toBe('ls');
37
- expect(result.args).toEqual(['-la']);
50
+ describe('findSecretFiles', () => {
51
+ beforeEach(() => {
52
+ vi.clearAllMocks();
38
53
  });
39
- it('should sanitize the environment variables', async () => {
40
- const req = {
41
- command: 'echo',
42
- args: ['hello'],
43
- cwd: '/tmp',
44
- env: {
45
- PATH: '/usr/bin',
46
- GITHUB_TOKEN: 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
47
- MY_SECRET: 'super-secret',
48
- SAFE_VAR: 'is-safe',
49
- },
50
- policy: {
51
- sanitizationConfig: {
52
- enableEnvironmentVariableRedaction: true,
53
- },
54
- },
55
- };
56
- const result = await sandboxManager.prepareCommand(req);
57
- expect(result.env['PATH']).toBe('/usr/bin');
58
- expect(result.env['SAFE_VAR']).toBe('is-safe');
59
- expect(result.env['GITHUB_TOKEN']).toBeUndefined();
60
- expect(result.env['MY_SECRET']).toBeUndefined();
54
+ it('should find secret files in the root directory', async () => {
55
+ vi.mocked(fsPromises.readdir).mockImplementation(((dir) => {
56
+ if (dir === '/workspace') {
57
+ return Promise.resolve([
58
+ { name: '.env', isDirectory: () => false, isFile: () => true },
59
+ {
60
+ name: 'package.json',
61
+ isDirectory: () => false,
62
+ isFile: () => true,
63
+ },
64
+ { name: 'src', isDirectory: () => true, isFile: () => false },
65
+ ]);
66
+ }
67
+ return Promise.resolve([]);
68
+ }));
69
+ const secrets = await findSecretFiles('/workspace');
70
+ expect(secrets).toEqual([path.join('/workspace', '.env')]);
61
71
  });
62
- it('should allow disabling environment variable redaction if requested in config', async () => {
63
- const req = {
64
- command: 'echo',
65
- args: ['hello'],
66
- cwd: '/tmp',
67
- env: {
68
- API_KEY: 'sensitive-key',
69
- },
70
- policy: {
71
- sanitizationConfig: {
72
- enableEnvironmentVariableRedaction: false,
73
- },
74
- },
75
- };
76
- const result = await sandboxManager.prepareCommand(req);
77
- // API_KEY should be preserved because redaction was explicitly disabled
78
- expect(result.env['API_KEY']).toBe('sensitive-key');
72
+ it('should NOT find secret files recursively (shallow scan only)', async () => {
73
+ vi.mocked(fsPromises.readdir).mockImplementation(((dir) => {
74
+ if (dir === '/workspace') {
75
+ return Promise.resolve([
76
+ { name: '.env', isDirectory: () => false, isFile: () => true },
77
+ { name: 'packages', isDirectory: () => true, isFile: () => false },
78
+ ]);
79
+ }
80
+ if (dir === path.join('/workspace', 'packages')) {
81
+ return Promise.resolve([
82
+ { name: '.env.local', isDirectory: () => false, isFile: () => true },
83
+ ]);
84
+ }
85
+ return Promise.resolve([]);
86
+ }));
87
+ const secrets = await findSecretFiles('/workspace');
88
+ expect(secrets).toEqual([path.join('/workspace', '.env')]);
89
+ // Should NOT have called readdir for subdirectories
90
+ expect(fsPromises.readdir).toHaveBeenCalledTimes(1);
91
+ expect(fsPromises.readdir).not.toHaveBeenCalledWith(path.join('/workspace', 'packages'), expect.anything());
79
92
  });
80
- it('should respect allowedEnvironmentVariables in config but filter sensitive ones', async () => {
81
- const req = {
82
- command: 'echo',
83
- args: ['hello'],
84
- cwd: '/tmp',
85
- env: {
86
- MY_SAFE_VAR: 'safe-value',
87
- MY_TOKEN: 'secret-token',
88
- },
89
- policy: {
90
- sanitizationConfig: {
91
- allowedEnvironmentVariables: ['MY_SAFE_VAR', 'MY_TOKEN'],
92
- enableEnvironmentVariableRedaction: true,
93
- },
94
- },
95
- };
96
- const result = await sandboxManager.prepareCommand(req);
97
- expect(result.env['MY_SAFE_VAR']).toBe('safe-value');
98
- // MY_TOKEN matches /TOKEN/i so it should be redacted despite being allowed in config
99
- expect(result.env['MY_TOKEN']).toBeUndefined();
93
+ });
94
+ describe('SandboxManager', () => {
95
+ afterEach(() => vi.restoreAllMocks());
96
+ describe('sanitizePaths', () => {
97
+ it('should return an empty array if no paths are provided', () => {
98
+ expect(sanitizePaths(undefined)).toEqual([]);
99
+ expect(sanitizePaths(null)).toEqual([]);
100
+ expect(sanitizePaths([])).toEqual([]);
101
+ });
102
+ it('should deduplicate paths and return them', () => {
103
+ const paths = ['/workspace/foo', '/workspace/bar', '/workspace/foo'];
104
+ expect(sanitizePaths(paths)).toEqual([
105
+ '/workspace/foo',
106
+ '/workspace/bar',
107
+ ]);
108
+ });
109
+ it('should deduplicate case-insensitively on Windows and macOS', () => {
110
+ vi.spyOn(os, 'platform').mockReturnValue('win32');
111
+ const paths = ['/workspace/foo', '/WORKSPACE/FOO'];
112
+ expect(sanitizePaths(paths)).toEqual(['/workspace/foo']);
113
+ vi.spyOn(os, 'platform').mockReturnValue('darwin');
114
+ const macPaths = ['/tmp/foo', '/tmp/FOO'];
115
+ expect(sanitizePaths(macPaths)).toEqual(['/tmp/foo']);
116
+ vi.spyOn(os, 'platform').mockReturnValue('linux');
117
+ const linuxPaths = ['/tmp/foo', '/tmp/FOO'];
118
+ expect(sanitizePaths(linuxPaths)).toEqual(['/tmp/foo', '/tmp/FOO']);
119
+ });
120
+ it('should throw an error if a path is not absolute', () => {
121
+ const paths = ['/workspace/foo', 'relative/path'];
122
+ expect(() => sanitizePaths(paths)).toThrow('Sandbox path must be absolute: relative/path');
123
+ });
124
+ });
125
+ describe('getPathIdentity', () => {
126
+ it('should normalize slashes and strip trailing slashes', () => {
127
+ expect(getPathIdentity('/foo/bar//baz/')).toBe(path.normalize('/foo/bar/baz'));
128
+ });
129
+ it('should handle case sensitivity correctly per platform', () => {
130
+ vi.spyOn(os, 'platform').mockReturnValue('win32');
131
+ expect(getPathIdentity('/Workspace/Foo')).toBe('/workspace/foo');
132
+ vi.spyOn(os, 'platform').mockReturnValue('darwin');
133
+ expect(getPathIdentity('/Tmp/Foo')).toBe('/tmp/foo');
134
+ vi.spyOn(os, 'platform').mockReturnValue('linux');
135
+ expect(getPathIdentity('/Tmp/Foo')).toBe('/Tmp/Foo');
136
+ });
100
137
  });
101
- it('should respect blockedEnvironmentVariables in config', async () => {
102
- const req = {
103
- command: 'echo',
104
- args: ['hello'],
105
- cwd: '/tmp',
106
- env: {
107
- SAFE_VAR: 'safe-value',
108
- BLOCKED_VAR: 'blocked-value',
109
- },
110
- policy: {
111
- sanitizationConfig: {
112
- blockedEnvironmentVariables: ['BLOCKED_VAR'],
113
- enableEnvironmentVariableRedaction: true,
138
+ describe('resolveSandboxPaths', () => {
139
+ it('should resolve allowed and forbidden paths', async () => {
140
+ const options = {
141
+ workspace: '/workspace',
142
+ forbiddenPaths: async () => ['/workspace/forbidden'],
143
+ };
144
+ const req = {
145
+ command: 'ls',
146
+ args: [],
147
+ cwd: '/workspace',
148
+ env: {},
149
+ policy: {
150
+ allowedPaths: ['/workspace/allowed'],
151
+ },
152
+ };
153
+ const result = await resolveSandboxPaths(options, req);
154
+ expect(result.allowed).toEqual(['/workspace/allowed']);
155
+ expect(result.forbidden).toEqual(['/workspace/forbidden']);
156
+ });
157
+ it('should filter out workspace from allowed paths', async () => {
158
+ const options = {
159
+ workspace: '/workspace',
160
+ };
161
+ const req = {
162
+ command: 'ls',
163
+ args: [],
164
+ cwd: '/workspace',
165
+ env: {},
166
+ policy: {
167
+ allowedPaths: ['/workspace', '/workspace/', '/other/path'],
168
+ },
169
+ };
170
+ const result = await resolveSandboxPaths(options, req);
171
+ expect(result.allowed).toEqual(['/other/path']);
172
+ });
173
+ it('should prioritize forbidden paths over allowed paths', async () => {
174
+ const options = {
175
+ workspace: '/workspace',
176
+ forbiddenPaths: async () => ['/workspace/secret'],
177
+ };
178
+ const req = {
179
+ command: 'ls',
180
+ args: [],
181
+ cwd: '/workspace',
182
+ env: {},
183
+ policy: {
184
+ allowedPaths: ['/workspace/secret', '/workspace/normal'],
185
+ },
186
+ };
187
+ const result = await resolveSandboxPaths(options, req);
188
+ expect(result.allowed).toEqual(['/workspace/normal']);
189
+ expect(result.forbidden).toEqual(['/workspace/secret']);
190
+ });
191
+ it('should handle case-insensitive conflicts on supported platforms', async () => {
192
+ vi.spyOn(os, 'platform').mockReturnValue('darwin');
193
+ const options = {
194
+ workspace: '/workspace',
195
+ forbiddenPaths: async () => ['/workspace/SECRET'],
196
+ };
197
+ const req = {
198
+ command: 'ls',
199
+ args: [],
200
+ cwd: '/workspace',
201
+ env: {},
202
+ policy: {
203
+ allowedPaths: ['/workspace/secret'],
114
204
  },
115
- },
116
- };
117
- const result = await sandboxManager.prepareCommand(req);
118
- expect(result.env['SAFE_VAR']).toBe('safe-value');
119
- expect(result.env['BLOCKED_VAR']).toBeUndefined();
205
+ };
206
+ const result = await resolveSandboxPaths(options, req);
207
+ expect(result.allowed).toEqual([]);
208
+ expect(result.forbidden).toEqual(['/workspace/SECRET']);
209
+ });
120
210
  });
121
- });
122
- describe('createSandboxManager', () => {
123
- it('should return NoopSandboxManager if sandboxing is disabled', () => {
124
- const manager = createSandboxManager({ enabled: false }, '/workspace');
125
- expect(manager).toBeInstanceOf(NoopSandboxManager);
211
+ describe('tryRealpath', () => {
212
+ beforeEach(() => {
213
+ vi.clearAllMocks();
214
+ });
215
+ it('should return the realpath if the file exists', async () => {
216
+ vi.mocked(fsPromises.realpath).mockResolvedValue('/real/path/to/file.txt');
217
+ const result = await tryRealpath('/some/symlink/to/file.txt');
218
+ expect(result).toBe('/real/path/to/file.txt');
219
+ expect(fsPromises.realpath).toHaveBeenCalledWith('/some/symlink/to/file.txt');
220
+ });
221
+ it('should fallback to parent directory if file does not exist (ENOENT)', async () => {
222
+ vi.mocked(fsPromises.realpath).mockImplementation(((p) => {
223
+ if (p === '/workspace/nonexistent.txt') {
224
+ return Promise.reject(Object.assign(new Error('ENOENT: no such file or directory'), {
225
+ code: 'ENOENT',
226
+ }));
227
+ }
228
+ if (p === '/workspace') {
229
+ return Promise.resolve('/real/workspace');
230
+ }
231
+ return Promise.reject(new Error(`Unexpected path: ${p}`));
232
+ }));
233
+ const result = await tryRealpath('/workspace/nonexistent.txt');
234
+ // It should combine the real path of the parent with the original basename
235
+ expect(result).toBe(path.join('/real/workspace', 'nonexistent.txt'));
236
+ });
237
+ it('should recursively fallback up the directory tree on multiple ENOENT errors', async () => {
238
+ vi.mocked(fsPromises.realpath).mockImplementation(((p) => {
239
+ if (p === '/workspace/missing_dir/missing_file.txt') {
240
+ return Promise.reject(Object.assign(new Error('ENOENT'), { code: 'ENOENT' }));
241
+ }
242
+ if (p === '/workspace/missing_dir') {
243
+ return Promise.reject(Object.assign(new Error('ENOENT'), { code: 'ENOENT' }));
244
+ }
245
+ if (p === '/workspace') {
246
+ return Promise.resolve('/real/workspace');
247
+ }
248
+ return Promise.reject(new Error(`Unexpected path: ${p}`));
249
+ }));
250
+ const result = await tryRealpath('/workspace/missing_dir/missing_file.txt');
251
+ // It should resolve '/workspace' to '/real/workspace' and append the missing parts
252
+ expect(result).toBe(path.join('/real/workspace', 'missing_dir', 'missing_file.txt'));
253
+ });
254
+ it('should return the path unchanged if it reaches the root directory and it still does not exist', async () => {
255
+ const rootPath = path.resolve('/');
256
+ vi.mocked(fsPromises.realpath).mockImplementation(() => Promise.reject(Object.assign(new Error('ENOENT'), { code: 'ENOENT' })));
257
+ const result = await tryRealpath(rootPath);
258
+ expect(result).toBe(rootPath);
259
+ });
260
+ it('should throw an error if realpath fails with a non-ENOENT error (e.g. EACCES)', async () => {
261
+ vi.mocked(fsPromises.realpath).mockImplementation(() => Promise.reject(Object.assign(new Error('EACCES: permission denied'), {
262
+ code: 'EACCES',
263
+ })));
264
+ await expect(tryRealpath('/secret/file.txt')).rejects.toThrow('EACCES: permission denied');
265
+ });
266
+ });
267
+ describe('NoopSandboxManager', () => {
268
+ const sandboxManager = new NoopSandboxManager();
269
+ it('should pass through the command and arguments unchanged', async () => {
270
+ const req = {
271
+ command: 'ls',
272
+ args: ['-la'],
273
+ cwd: '/tmp',
274
+ env: { PATH: '/usr/bin' },
275
+ };
276
+ const result = await sandboxManager.prepareCommand(req);
277
+ expect(result.program).toBe('ls');
278
+ expect(result.args).toEqual(['-la']);
279
+ });
280
+ it('should sanitize the environment variables', async () => {
281
+ const req = {
282
+ command: 'echo',
283
+ args: ['hello'],
284
+ cwd: '/tmp',
285
+ env: {
286
+ PATH: '/usr/bin',
287
+ GITHUB_TOKEN: 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
288
+ MY_SECRET: 'super-secret',
289
+ SAFE_VAR: 'is-safe',
290
+ },
291
+ policy: {
292
+ sanitizationConfig: {
293
+ enableEnvironmentVariableRedaction: true,
294
+ },
295
+ },
296
+ };
297
+ const result = await sandboxManager.prepareCommand(req);
298
+ expect(result.env['PATH']).toBe('/usr/bin');
299
+ expect(result.env['SAFE_VAR']).toBe('is-safe');
300
+ expect(result.env['GITHUB_TOKEN']).toBeUndefined();
301
+ expect(result.env['MY_SECRET']).toBeUndefined();
302
+ });
303
+ it('should allow disabling environment variable redaction if requested in config', async () => {
304
+ const req = {
305
+ command: 'echo',
306
+ args: ['hello'],
307
+ cwd: '/tmp',
308
+ env: {
309
+ API_KEY: 'sensitive-key',
310
+ },
311
+ policy: {
312
+ sanitizationConfig: {
313
+ enableEnvironmentVariableRedaction: false,
314
+ },
315
+ },
316
+ };
317
+ const result = await sandboxManager.prepareCommand(req);
318
+ // API_KEY should be preserved because redaction was explicitly disabled
319
+ expect(result.env['API_KEY']).toBe('sensitive-key');
320
+ });
321
+ it('should respect allowedEnvironmentVariables in config but filter sensitive ones', async () => {
322
+ const req = {
323
+ command: 'echo',
324
+ args: ['hello'],
325
+ cwd: '/tmp',
326
+ env: {
327
+ MY_SAFE_VAR: 'safe-value',
328
+ MY_TOKEN: 'secret-token',
329
+ },
330
+ policy: {
331
+ sanitizationConfig: {
332
+ allowedEnvironmentVariables: ['MY_SAFE_VAR', 'MY_TOKEN'],
333
+ enableEnvironmentVariableRedaction: true,
334
+ },
335
+ },
336
+ };
337
+ const result = await sandboxManager.prepareCommand(req);
338
+ expect(result.env['MY_SAFE_VAR']).toBe('safe-value');
339
+ // MY_TOKEN matches /TOKEN/i so it should be redacted despite being allowed in config
340
+ expect(result.env['MY_TOKEN']).toBeUndefined();
341
+ });
342
+ it('should respect blockedEnvironmentVariables in config', async () => {
343
+ const req = {
344
+ command: 'echo',
345
+ args: ['hello'],
346
+ cwd: '/tmp',
347
+ env: {
348
+ SAFE_VAR: 'safe-value',
349
+ BLOCKED_VAR: 'blocked-value',
350
+ },
351
+ policy: {
352
+ sanitizationConfig: {
353
+ blockedEnvironmentVariables: ['BLOCKED_VAR'],
354
+ enableEnvironmentVariableRedaction: true,
355
+ },
356
+ },
357
+ };
358
+ const result = await sandboxManager.prepareCommand(req);
359
+ expect(result.env['SAFE_VAR']).toBe('safe-value');
360
+ expect(result.env['BLOCKED_VAR']).toBeUndefined();
361
+ });
362
+ it('should delegate isKnownSafeCommand to platform specific checkers', () => {
363
+ vi.spyOn(os, 'platform').mockReturnValue('darwin');
364
+ expect(sandboxManager.isKnownSafeCommand(['ls'])).toBe(true);
365
+ expect(sandboxManager.isKnownSafeCommand(['dir'])).toBe(false);
366
+ vi.spyOn(os, 'platform').mockReturnValue('win32');
367
+ expect(sandboxManager.isKnownSafeCommand(['dir'])).toBe(true);
368
+ });
369
+ it('should delegate isDangerousCommand to platform specific checkers', () => {
370
+ vi.spyOn(os, 'platform').mockReturnValue('darwin');
371
+ expect(sandboxManager.isDangerousCommand(['rm', '-rf', '.'])).toBe(true);
372
+ expect(sandboxManager.isDangerousCommand(['del'])).toBe(false);
373
+ vi.spyOn(os, 'platform').mockReturnValue('win32');
374
+ expect(sandboxManager.isDangerousCommand(['del'])).toBe(true);
375
+ });
126
376
  });
127
- it.each([
128
- { platform: 'linux', expected: LinuxSandboxManager },
129
- { platform: 'darwin', expected: MacOsSandboxManager },
130
- { platform: 'win32', expected: WindowsSandboxManager },
131
- ])('should return $expected.name if sandboxing is enabled and platform is $platform', ({ platform, expected }) => {
132
- const osSpy = vi.spyOn(os, 'platform').mockReturnValue(platform);
133
- try {
134
- const manager = createSandboxManager({ enabled: true }, '/workspace');
377
+ describe('createSandboxManager', () => {
378
+ it('should return NoopSandboxManager if sandboxing is disabled', () => {
379
+ const manager = createSandboxManager({ enabled: false }, { workspace: '/workspace' });
380
+ expect(manager).toBeInstanceOf(NoopSandboxManager);
381
+ });
382
+ it.each([
383
+ { platform: 'linux', expected: LinuxSandboxManager },
384
+ { platform: 'darwin', expected: MacOsSandboxManager },
385
+ { platform: 'win32', expected: WindowsSandboxManager },
386
+ ])('should return $expected.name if sandboxing is enabled and platform is $platform', ({ platform, expected }) => {
387
+ vi.spyOn(os, 'platform').mockReturnValue(platform);
388
+ const manager = createSandboxManager({ enabled: true }, { workspace: '/workspace' });
135
389
  expect(manager).toBeInstanceOf(expected);
136
- }
137
- finally {
138
- osSpy.mockRestore();
139
- }
390
+ });
391
+ it('should return WindowsSandboxManager if sandboxing is enabled on win32', () => {
392
+ vi.spyOn(os, 'platform').mockReturnValue('win32');
393
+ const manager = createSandboxManager({ enabled: true }, { workspace: '/workspace' });
394
+ expect(manager).toBeInstanceOf(WindowsSandboxManager);
395
+ });
140
396
  });
141
397
  });
142
398
  //# sourceMappingURL=sandboxManager.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxManager.test.js","sourceRoot":"","sources":["../../../src/services/sandboxManager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandboxManager.test.js","sourceRoot":"","sources":["../../../src/services/sandboxManager.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAGpF,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;IACrC,MAAM,MAAM,GACV,MAAM,EAAE,CAAC,YAAY,CACnB,kBAAkB,CACnB,CAAC;IACJ,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,MAAM;YACT,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;YACjB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;SACd;QACD,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;KACd,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,2FAA2F;QAC3F,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YAChE,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;oBAC9D;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;wBACxB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;qBACnB;oBACD,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;iBACpC,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAA4B,CAAC,CAAC;QACvD,CAAC,CAAyC,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YAChE,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;oBAC9D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;iBACzC,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;gBAChD,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;iBAC3C,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAA4B,CAAC,CAAC;QACvD,CAAC,CAAyC,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,oDAAoD;QACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,oBAAoB,CACjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EACnC,MAAM,CAAC,QAAQ,EAAE,CAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEtC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YACrE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;gBACnC,gBAAgB;gBAChB,gBAAgB;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAEzD,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAEtD,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CACxC,8CAA8C,CAC/C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAC5C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEjE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAErD,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,YAAY;gBACvB,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,sBAAsB,CAAC;aACrD,CAAC;YACF,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,oBAAoB,CAAC;iBACrC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAqB,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,YAAY;aACxB,CAAC;YACF,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC;iBAC3D;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAqB,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,YAAY;gBACvB,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,mBAAmB,CAAC;aAClD,CAAC;YACF,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;iBACzD;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAqB,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,YAAY;gBACvB,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,mBAAmB,CAAC;aAClD,CAAC;YACF,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,mBAAmB,CAAC;iBACpC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,GAAqB,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,UAAU,CAAC,GAAG,EAAE;YACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAC9C,wBAAiC,CAClC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,2BAA2B,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAC9C,2BAA2B,CAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE;gBAC/D,IAAI,CAAC,KAAK,4BAA4B,EAAE,CAAC;oBACvC,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,EAAE;wBAC5D,IAAI,EAAE,QAAQ;qBACf,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,CAAC;gBACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAU,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,4BAA4B,CAAC,CAAC;YAE/D,2EAA2E;YAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE;gBAC/D,IAAI,CAAC,KAAK,yCAAyC,EAAE,CAAC;oBACpD,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CACvD,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,KAAK,wBAAwB,EAAE,CAAC;oBACnC,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CACvD,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,CAAC;gBACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAU,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,yCAAyC,CAC1C,CAAC;YAEF,mFAAmF;YACnF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;YAC7G,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CACrD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CACvE,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CACrD,OAAO,CAAC,MAAM,CACZ,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE;gBACpD,IAAI,EAAE,QAAQ;aACf,CAAC,CACH,CACF,CAAC;YAEF,MAAM,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3D,2BAA2B,CAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEhD,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,CAAC,KAAK,CAAC;gBACb,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aAC1B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE;oBACH,IAAI,EAAE,UAAU;oBAChB,YAAY,EAAE,0CAA0C;oBACxD,SAAS,EAAE,cAAc;oBACzB,QAAQ,EAAE,SAAS;iBACpB;gBACD,MAAM,EAAE;oBACN,kBAAkB,EAAE;wBAClB,kCAAkC,EAAE,IAAI;qBACzC;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE;oBACH,OAAO,EAAE,eAAe;iBACzB;gBACD,MAAM,EAAE;oBACN,kBAAkB,EAAE;wBAClB,kCAAkC,EAAE,KAAK;qBAC1C;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAExD,wEAAwE;YACxE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE;oBACH,WAAW,EAAE,YAAY;oBACzB,QAAQ,EAAE,cAAc;iBACzB;gBACD,MAAM,EAAE;oBACN,kBAAkB,EAAE;wBAClB,2BAA2B,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;wBACxD,kCAAkC,EAAE,IAAI;qBACzC;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrD,qFAAqF;YACrF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE;oBACH,QAAQ,EAAE,YAAY;oBACtB,WAAW,EAAE,eAAe;iBAC7B;gBACD,MAAM,EAAE;oBACN,kBAAkB,EAAE;wBAClB,2BAA2B,EAAE,CAAC,aAAa,CAAC;wBAC5C,kCAAkC,EAAE,IAAI;qBACzC;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/D,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/D,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,OAAO,GAAG,oBAAoB,CAClC,EAAE,OAAO,EAAE,KAAK,EAAE,EAClB,EAAE,SAAS,EAAE,YAAY,EAAE,CAC5B,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;YACN,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACpD,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACrD,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE;SAC9C,CAAC,CACT,iFAAiF,EACjF,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzB,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,oBAAoB,CAClC,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,EAAE,SAAS,EAAE,YAAY,EAAE,CAC5B,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CACF,CAAC;QAEF,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,oBAAoB,CAClC,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,EAAE,SAAS,EAAE,YAAY,EAAE,CAC5B,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,10 +3,9 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { type SandboxManager } from './sandboxManager.js';
6
+ import { type SandboxManager, type GlobalSandboxOptions } from './sandboxManager.js';
7
7
  import type { SandboxConfig } from '../config/config.js';
8
- import { type SandboxPolicyManager } from '../policy/sandboxPolicyManager.js';
9
8
  /**
10
9
  * Creates a sandbox manager based on the provided settings.
11
10
  */
12
- export declare function createSandboxManager(sandbox: SandboxConfig | undefined, workspace: string, policyManager?: SandboxPolicyManager, approvalMode?: string): SandboxManager;
11
+ export declare function createSandboxManager(sandbox: SandboxConfig | undefined, options: GlobalSandboxOptions, approvalMode?: string): SandboxManager;
@@ -8,32 +8,25 @@ import { NoopSandboxManager, LocalSandboxManager, } from './sandboxManager.js';
8
8
  import { LinuxSandboxManager } from '../sandbox/linux/LinuxSandboxManager.js';
9
9
  import { MacOsSandboxManager } from '../sandbox/macos/MacOsSandboxManager.js';
10
10
  import { WindowsSandboxManager } from '../sandbox/windows/WindowsSandboxManager.js';
11
- import {} from '../policy/sandboxPolicyManager.js';
12
11
  /**
13
12
  * Creates a sandbox manager based on the provided settings.
14
13
  */
15
- export function createSandboxManager(sandbox, workspace, policyManager, approvalMode) {
14
+ export function createSandboxManager(sandbox, options, approvalMode) {
16
15
  if (approvalMode === 'yolo') {
17
16
  return new NoopSandboxManager();
18
17
  }
19
- const isWindows = os.platform() === 'win32';
20
- if (isWindows &&
21
- (sandbox?.enabled || sandbox?.command === 'windows-native')) {
22
- return new WindowsSandboxManager({ workspace });
18
+ if (!options.modeConfig && options.policyManager && approvalMode) {
19
+ options.modeConfig = options.policyManager.getModeConfig(approvalMode);
23
20
  }
24
21
  if (sandbox?.enabled) {
25
- if (os.platform() === 'linux') {
26
- return new LinuxSandboxManager({ workspace });
22
+ if (os.platform() === 'win32') {
23
+ return new WindowsSandboxManager(options);
27
24
  }
28
- if (os.platform() === 'darwin') {
29
- const modeConfig = policyManager && approvalMode
30
- ? policyManager.getModeConfig(approvalMode)
31
- : undefined;
32
- return new MacOsSandboxManager({
33
- workspace,
34
- modeConfig,
35
- policyManager,
36
- });
25
+ else if (os.platform() === 'linux') {
26
+ return new LinuxSandboxManager(options);
27
+ }
28
+ else if (os.platform() === 'darwin') {
29
+ return new MacOsSandboxManager(options);
37
30
  }
38
31
  return new LocalSandboxManager();
39
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxManagerFactory.js","sourceRoot":"","sources":["../../../src/services/sandboxManagerFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAEpF,OAAO,EAA6B,MAAM,mCAAmC,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAkC,EAClC,SAAiB,EACjB,aAAoC,EACpC,YAAqB;IAErB,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC;IAE5C,IACE,SAAS;QACT,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,KAAK,gBAAgB,CAAC,EAC3D,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,IAAI,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GACd,aAAa,IAAI,YAAY;gBAC3B,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC;gBAC3C,CAAC,CAAC,SAAS,CAAC;YAChB,OAAO,IAAI,mBAAmB,CAAC;gBAC7B,SAAS;gBACT,UAAU;gBACV,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"sandboxManagerFactory.js","sourceRoot":"","sources":["../../../src/services/sandboxManagerFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAGpF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAkC,EAClC,OAA6B,EAC7B,YAAqB;IAErB,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,IAAI,YAAY,EAAE,CAAC;QACjE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YACrC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}