@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
@@ -26,6 +26,8 @@ import { WebFetchTool } from '../tools/web-fetch.js';
26
26
  import { MemoryTool, setGeminiMdFilename } from '../tools/memoryTool.js';
27
27
  import { WebSearchTool } from '../tools/web-search.js';
28
28
  import { AskUserTool } from '../tools/ask-user.js';
29
+ import { UpdateTopicTool } from '../tools/topicTool.js';
30
+ import { TopicState } from './topicState.js';
29
31
  import { ExitPlanModeTool } from '../tools/exit-plan-mode.js';
30
32
  import { EnterPlanModeTool } from '../tools/enter-plan-mode.js';
31
33
  import { GeminiClient } from '../core/client.js';
@@ -52,7 +54,7 @@ import { ModelRouterService } from '../routing/modelRouterService.js';
52
54
  import { OutputFormat } from '../output/types.js';
53
55
  import { ModelConfigService, } from '../services/modelConfigService.js';
54
56
  import { DEFAULT_MODEL_CONFIGS } from './defaultModelConfigs.js';
55
- import { ContextManager } from '../services/contextManager.js';
57
+ import { ContextManager } from '../context/contextManager.js';
56
58
  import { TrackerService } from '../services/trackerService.js';
57
59
  import { WorkspaceContext } from '../utils/workspaceContext.js';
58
60
  import { Storage } from './storage.js';
@@ -83,7 +85,7 @@ import { CheckerRegistry } from '../safety/registry.js';
83
85
  import { ConsecaSafetyChecker } from '../safety/conseca/conseca.js';
84
86
  import { DEFAULT_MAX_ATTEMPTS } from '../utils/retry.js';
85
87
  import { DEFAULT_FILE_FILTERING_OPTIONS, DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, } from './constants.js';
86
- import { DEFAULT_TOOL_PROTECTION_THRESHOLD, DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD, DEFAULT_PROTECT_LATEST_TURN, } from '../services/toolOutputMaskingService.js';
88
+ import { DEFAULT_TOOL_PROTECTION_THRESHOLD, DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD, DEFAULT_PROTECT_LATEST_TURN, } from '../context/toolOutputMaskingService.js';
87
89
  import { SimpleExtensionLoader, } from '../utils/extensionLoader.js';
88
90
  import { McpClientManager } from '../tools/mcp-client-manager.js';
89
91
  import { A2AClientManager } from '../agents/a2a-client-manager.js';
@@ -212,11 +214,13 @@ export class Config {
212
214
  clientVersion;
213
215
  fileSystemService;
214
216
  trackerService;
217
+ topicState = new TopicState();
215
218
  contentGeneratorConfig;
216
219
  contentGenerator;
217
220
  modelConfigService;
218
221
  embeddingModel;
219
222
  sandbox;
223
+ _sandboxForbiddenPaths;
220
224
  targetDir;
221
225
  workspaceContext;
222
226
  debugMode;
@@ -304,6 +308,7 @@ export class Config {
304
308
  directWebFetch;
305
309
  useRipgrep;
306
310
  enableInteractiveShell;
311
+ shellBackgroundCompletionBehavior;
307
312
  skipNextSpeakerCheck;
308
313
  useBackgroundColor;
309
314
  useAlternateBuffer;
@@ -340,7 +345,6 @@ export class Config {
340
345
  pendingIncludeDirectories;
341
346
  enableHooks;
342
347
  enableHooksUI;
343
- toolOutputMasking;
344
348
  hooks;
345
349
  projectHooks;
346
350
  disabledHooks;
@@ -358,6 +362,7 @@ export class Config {
358
362
  adminSkillsEnabled;
359
363
  experimentalJitContext;
360
364
  experimentalMemoryManager;
365
+ memoryBoundaryMarkers;
361
366
  topicUpdateNarration;
362
367
  disableLLMCorrection;
363
368
  planEnabled;
@@ -365,6 +370,7 @@ export class Config {
365
370
  planModeRoutingEnabled;
366
371
  modelSteering;
367
372
  contextManager;
373
+ contextManagement;
368
374
  terminalBackground = undefined;
369
375
  remoteAdminSettings;
370
376
  latestApiRequest;
@@ -391,30 +397,30 @@ export class Config {
391
397
  allowedPaths: [],
392
398
  networkAccess: false,
393
399
  };
394
- this._sandboxManager = createSandboxManager(this.sandbox, params.targetDir);
395
- if (!(this._sandboxManager instanceof NoopSandboxManager) &&
396
- this.sandbox.enabled) {
397
- this.fileSystemService = new SandboxedFileSystemService(this._sandboxManager, params.targetDir);
398
- }
399
- else {
400
- this.fileSystemService = new StandardFileSystemService();
401
- }
400
+ this.targetDir = path.resolve(params.targetDir);
401
+ this.folderTrust = params.folderTrust ?? false;
402
+ this.workspaceContext = new WorkspaceContext(this.targetDir, []);
403
+ this.pendingIncludeDirectories = params.includeDirectories ?? [];
404
+ this.debugMode = params.debugMode;
405
+ this.question = params.question;
406
+ this.worktreeSettings = params.worktreeSettings;
402
407
  this._sandboxPolicyManager = new SandboxPolicyManager();
403
408
  const initialApprovalMode = params.approvalMode ??
404
409
  params.policyEngineConfig?.approvalMode ??
405
410
  'default';
406
- this._sandboxManager = createSandboxManager(this.sandbox, params.targetDir, this._sandboxPolicyManager, initialApprovalMode);
411
+ this._sandboxManager = createSandboxManager(this.sandbox, {
412
+ workspace: this.targetDir,
413
+ forbiddenPaths: this.getSandboxForbiddenPaths.bind(this),
414
+ includeDirectories: this.pendingIncludeDirectories,
415
+ policyManager: this._sandboxPolicyManager,
416
+ }, initialApprovalMode);
407
417
  if (!(this._sandboxManager instanceof NoopSandboxManager) &&
408
- this.sandbox?.enabled) {
418
+ this.sandbox.enabled) {
409
419
  this.fileSystemService = new SandboxedFileSystemService(this._sandboxManager, params.targetDir);
410
420
  }
411
421
  else {
412
422
  this.fileSystemService = new StandardFileSystemService();
413
423
  }
414
- this.targetDir = path.resolve(params.targetDir);
415
- this.folderTrust = params.folderTrust ?? false;
416
- this.workspaceContext = new WorkspaceContext(this.targetDir, []);
417
- this.pendingIncludeDirectories = params.includeDirectories ?? [];
418
424
  this.debugMode = params.debugMode;
419
425
  this.question = params.question;
420
426
  this.worktreeSettings = params.worktreeSettings;
@@ -526,21 +532,43 @@ export class Config {
526
532
  };
527
533
  }
528
534
  this.modelConfigService = new ModelConfigService(modelConfigServiceConfig ?? DEFAULT_MODEL_CONFIGS);
529
- this.experimentalJitContext = params.experimentalJitContext ?? true;
535
+ this.experimentalJitContext = params.experimentalJitContext ?? false;
530
536
  this.experimentalMemoryManager = params.experimentalMemoryManager ?? false;
537
+ this.memoryBoundaryMarkers = params.memoryBoundaryMarkers ?? ['.git'];
538
+ this.contextManagement = {
539
+ enabled: params.contextManagement?.enabled ?? false,
540
+ historyWindow: {
541
+ maxTokens: params.contextManagement?.historyWindow?.maxTokens ?? 150000,
542
+ retainedTokens: params.contextManagement?.historyWindow?.retainedTokens ?? 40000,
543
+ },
544
+ messageLimits: {
545
+ normalMaxTokens: params.contextManagement?.messageLimits?.normalMaxTokens ?? 2500,
546
+ retainedMaxTokens: params.contextManagement?.messageLimits?.retainedMaxTokens ?? 12000,
547
+ normalizationHeadRatio: params.contextManagement?.messageLimits?.normalizationHeadRatio ??
548
+ 0.25,
549
+ },
550
+ tools: {
551
+ distillation: {
552
+ maxOutputTokens: params.contextManagement?.tools?.distillation?.maxOutputTokens ??
553
+ 10000,
554
+ summarizationThresholdTokens: params.contextManagement?.tools?.distillation
555
+ ?.summarizationThresholdTokens ?? 20000,
556
+ },
557
+ outputMasking: {
558
+ protectionThresholdTokens: params.contextManagement?.tools?.outputMasking
559
+ ?.protectionThresholdTokens ?? DEFAULT_TOOL_PROTECTION_THRESHOLD,
560
+ minPrunableThresholdTokens: params.contextManagement?.tools?.outputMasking
561
+ ?.minPrunableThresholdTokens ??
562
+ DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD,
563
+ protectLatestTurn: params.contextManagement?.tools?.outputMasking?.protectLatestTurn ??
564
+ DEFAULT_PROTECT_LATEST_TURN,
565
+ },
566
+ },
567
+ };
531
568
  this.topicUpdateNarration = params.topicUpdateNarration ?? false;
532
569
  this.modelSteering = params.modelSteering ?? false;
533
570
  this.injectionService = new InjectionService(() => this.isModelSteeringEnabled());
534
571
  ExecutionLifecycleService.setInjectionService(this.injectionService);
535
- this.toolOutputMasking = {
536
- enabled: params.toolOutputMasking?.enabled ?? true,
537
- toolProtectionThreshold: params.toolOutputMasking?.toolProtectionThreshold ??
538
- DEFAULT_TOOL_PROTECTION_THRESHOLD,
539
- minPrunableTokensThreshold: params.toolOutputMasking?.minPrunableTokensThreshold ??
540
- DEFAULT_MIN_PRUNABLE_TOKENS_THRESHOLD,
541
- protectLatestTurn: params.toolOutputMasking?.protectLatestTurn ??
542
- DEFAULT_PROTECT_LATEST_TURN,
543
- };
544
572
  this.maxSessionTurns = params.maxSessionTurns ?? -1;
545
573
  this.acpMode = params.acpMode ?? false;
546
574
  this.listSessions = params.listSessions ?? false;
@@ -567,6 +595,13 @@ export class Config {
567
595
  this.useBackgroundColor = params.useBackgroundColor ?? true;
568
596
  this.useAlternateBuffer = params.useAlternateBuffer ?? false;
569
597
  this.enableInteractiveShell = params.enableInteractiveShell ?? false;
598
+ const requestedBehavior = params.shellBackgroundCompletionBehavior;
599
+ if (requestedBehavior === 'inject' || requestedBehavior === 'notify') {
600
+ this.shellBackgroundCompletionBehavior = requestedBehavior;
601
+ }
602
+ else {
603
+ this.shellBackgroundCompletionBehavior = 'silent';
604
+ }
570
605
  this.skipNextSpeakerCheck = params.skipNextSpeakerCheck ?? true;
571
606
  this.shellExecutionConfig = {
572
607
  terminalWidth: params.shellExecutionConfig?.terminalWidth ?? 80,
@@ -576,6 +611,7 @@ export class Config {
576
611
  sanitizationConfig: this.sanitizationConfig,
577
612
  sandboxManager: this._sandboxManager,
578
613
  sandboxConfig: this.sandbox,
614
+ backgroundCompletionBehavior: this.shellBackgroundCompletionBehavior,
579
615
  };
580
616
  this.truncateToolOutputThreshold =
581
617
  params.truncateToolOutputThreshold ??
@@ -623,9 +659,7 @@ export class Config {
623
659
  ...params.policyEngineConfig,
624
660
  approvalMode: engineApprovalMode,
625
661
  disableAlwaysAllow: this.disableAlwaysAllow,
626
- toolSandboxEnabled: this.getSandboxEnabled(),
627
- sandboxApprovedTools: this.sandboxPolicyManager?.getModeConfig(engineApprovalMode)
628
- ?.approvedTools ?? [],
662
+ sandboxManager: this._sandboxManager,
629
663
  }, checkerRunner);
630
664
  // Register Conseca if enabled
631
665
  if (this.enableConseca) {
@@ -916,8 +950,22 @@ export class Config {
916
950
  get geminiClient() {
917
951
  return this._geminiClient;
918
952
  }
953
+ async getSandboxForbiddenPaths() {
954
+ if (this._sandboxForbiddenPaths) {
955
+ return this._sandboxForbiddenPaths;
956
+ }
957
+ this._sandboxForbiddenPaths = await this.getFileService().getIgnoredPaths({
958
+ respectGitIgnore: false,
959
+ respectGeminiIgnore: true,
960
+ });
961
+ return this._sandboxForbiddenPaths;
962
+ }
919
963
  refreshSandboxManager() {
920
- this._sandboxManager = createSandboxManager(this.sandbox, this.targetDir, this._sandboxPolicyManager, this.getApprovalMode());
964
+ this._sandboxManager = createSandboxManager(this.sandbox, {
965
+ workspace: this.targetDir,
966
+ forbiddenPaths: this.getSandboxForbiddenPaths.bind(this),
967
+ policyManager: this._sandboxPolicyManager,
968
+ }, this.getApprovalMode());
921
969
  this.shellExecutionConfig.sandboxManager = this._sandboxManager;
922
970
  }
923
971
  get sandboxPolicyManager() {
@@ -1345,6 +1393,7 @@ export class Config {
1345
1393
  global: this.contextManager.getGlobalMemory(),
1346
1394
  extension: this.contextManager.getExtensionMemory(),
1347
1395
  project: this.contextManager.getEnvironmentMemory(),
1396
+ userProjectMemory: this.contextManager.getUserProjectMemory(),
1348
1397
  };
1349
1398
  }
1350
1399
  return this.userMemory;
@@ -1370,13 +1419,20 @@ export class Config {
1370
1419
  }
1371
1420
  /**
1372
1421
  * Returns memory for the system instruction.
1373
- * When JIT is enabled, only global memory (Tier 1) goes in the system
1374
- * instruction. Extension and project memory (Tier 2) are placed in the
1375
- * first user message instead, per the tiered context model.
1422
+ * When JIT is enabled, global memory and user project memory (Tier 1) go
1423
+ * in the system instruction. Extension and project memory (Tier 2) are
1424
+ * placed in the first user message instead, per the tiered context model.
1425
+ * User project memory is in Tier 1 so mid-session saves are reflected
1426
+ * via system instruction updates.
1376
1427
  */
1377
1428
  getSystemInstructionMemory() {
1378
1429
  if (this.experimentalJitContext && this.contextManager) {
1379
- return this.contextManager.getGlobalMemory();
1430
+ const global = this.contextManager.getGlobalMemory();
1431
+ const userProjectMemory = this.contextManager.getUserProjectMemory();
1432
+ if (userProjectMemory?.trim()) {
1433
+ return { global, userProjectMemory };
1434
+ }
1435
+ return global;
1380
1436
  }
1381
1437
  return this.userMemory;
1382
1438
  }
@@ -1414,18 +1470,35 @@ export class Config {
1414
1470
  isJitContextEnabled() {
1415
1471
  return this.experimentalJitContext;
1416
1472
  }
1473
+ isAutoDistillationEnabled() {
1474
+ return this.contextManagement.enabled;
1475
+ }
1476
+ getMemoryBoundaryMarkers() {
1477
+ return this.memoryBoundaryMarkers;
1478
+ }
1417
1479
  isMemoryManagerEnabled() {
1418
1480
  return this.experimentalMemoryManager;
1419
1481
  }
1482
+ getContextManagementConfig() {
1483
+ return this.contextManagement;
1484
+ }
1485
+ get agentHistoryProviderConfig() {
1486
+ return {
1487
+ isTruncationEnabled: this.contextManagement.enabled,
1488
+ isSummarizationEnabled: this.contextManagement.enabled,
1489
+ maxTokens: this.contextManagement.historyWindow.maxTokens,
1490
+ retainedTokens: this.contextManagement.historyWindow.retainedTokens,
1491
+ normalMessageTokens: this.contextManagement.messageLimits.normalMaxTokens,
1492
+ maximumMessageTokens: this.contextManagement.messageLimits.retainedMaxTokens,
1493
+ normalizationHeadRatio: this.contextManagement.messageLimits.normalizationHeadRatio,
1494
+ };
1495
+ }
1420
1496
  isTopicUpdateNarrationEnabled() {
1421
1497
  return this.topicUpdateNarration;
1422
1498
  }
1423
1499
  isModelSteeringEnabled() {
1424
1500
  return this.modelSteering;
1425
1501
  }
1426
- getToolOutputMaskingEnabled() {
1427
- return this.toolOutputMasking.enabled;
1428
- }
1429
1502
  async getToolOutputMaskingConfig() {
1430
1503
  await this.ensureExperimentsLoaded();
1431
1504
  const remoteProtection = this.experiments?.flags[ExperimentFlags.MASKING_PROTECTION_THRESHOLD]
@@ -1441,14 +1514,16 @@ export class Config {
1441
1514
  ? parseInt(remotePrunable, 10)
1442
1515
  : undefined;
1443
1516
  return {
1444
- enabled: this.toolOutputMasking.enabled,
1445
- toolProtectionThreshold: parsedProtection !== undefined && !isNaN(parsedProtection)
1517
+ protectionThresholdTokens: parsedProtection !== undefined && !isNaN(parsedProtection)
1446
1518
  ? parsedProtection
1447
- : this.toolOutputMasking.toolProtectionThreshold,
1448
- minPrunableTokensThreshold: parsedPrunable !== undefined && !isNaN(parsedPrunable)
1519
+ : this.contextManagement.tools.outputMasking
1520
+ .protectionThresholdTokens,
1521
+ minPrunableThresholdTokens: parsedPrunable !== undefined && !isNaN(parsedPrunable)
1449
1522
  ? parsedPrunable
1450
- : this.toolOutputMasking.minPrunableTokensThreshold,
1451
- protectLatestTurn: remoteProtectLatest ?? this.toolOutputMasking.protectLatestTurn,
1523
+ : this.contextManagement.tools.outputMasking
1524
+ .minPrunableThresholdTokens,
1525
+ protectLatestTurn: remoteProtectLatest ??
1526
+ this.contextManagement.tools.outputMasking.protectLatestTurn,
1452
1527
  };
1453
1528
  }
1454
1529
  getGeminiMdFileCount() {
@@ -1502,7 +1577,9 @@ export class Config {
1502
1577
  debugLogger.debug(`Workspace policies loaded from: ${policyDir}`);
1503
1578
  }
1504
1579
  setApprovalMode(mode) {
1505
- if (!this.isTrustedFolder() && mode !== ApprovalMode.DEFAULT) {
1580
+ if (!this.isTrustedFolder() &&
1581
+ mode !== ApprovalMode.DEFAULT &&
1582
+ mode !== ApprovalMode.PLAN) {
1506
1583
  throw new Error('Cannot enable privileged approval modes in an untrusted folder.');
1507
1584
  }
1508
1585
  const currentMode = this.getApprovalMode();
@@ -1510,7 +1587,7 @@ export class Config {
1510
1587
  this.logCurrentModeDuration(currentMode);
1511
1588
  logApprovalModeSwitch(this, new ApprovalModeSwitchEvent(currentMode, mode));
1512
1589
  }
1513
- this.policyEngine.setApprovalMode(mode, this.sandboxPolicyManager?.getModeConfig(mode)?.approvedTools ?? []);
1590
+ this.policyEngine.setApprovalMode(mode);
1514
1591
  this.refreshSandboxManager();
1515
1592
  const isPlanModeTransition = currentMode !== mode &&
1516
1593
  (currentMode === ApprovalMode.PLAN || mode === ApprovalMode.PLAN);
@@ -1518,6 +1595,7 @@ export class Config {
1518
1595
  (currentMode === ApprovalMode.YOLO || mode === ApprovalMode.YOLO);
1519
1596
  if (isPlanModeTransition || isYoloModeTransition) {
1520
1597
  if (this._geminiClient?.isInitialized()) {
1598
+ this._geminiClient.clearCurrentSequenceModel();
1521
1599
  this._geminiClient.setTools().catch((err) => {
1522
1600
  debugLogger.error('Failed to update tools', err);
1523
1601
  });
@@ -1615,6 +1693,9 @@ export class Config {
1615
1693
  getModelRouterService() {
1616
1694
  return this.modelRouterService;
1617
1695
  }
1696
+ getModelConfigService() {
1697
+ return this.modelConfigService;
1698
+ }
1618
1699
  getModelAvailabilityService() {
1619
1700
  return this.modelAvailabilityService;
1620
1701
  }
@@ -1945,6 +2026,11 @@ export class Config {
1945
2026
  const authType = this.contentGeneratorConfig?.authType;
1946
2027
  return useGemini3_1 && authType === AuthType.USE_GEMINI;
1947
2028
  }
2029
+ isGemini31LaunchedForAuthType(authType) {
2030
+ return (authType === AuthType.USE_GEMINI ||
2031
+ authType === AuthType.USE_VERTEX_AI ||
2032
+ authType === AuthType.GATEWAY);
2033
+ }
1948
2034
  /**
1949
2035
  * Returns whether Gemini 3.1 has been launched.
1950
2036
  *
@@ -1954,8 +2040,7 @@ export class Config {
1954
2040
  */
1955
2041
  getGemini31LaunchedSync() {
1956
2042
  const authType = this.contentGeneratorConfig?.authType;
1957
- if (authType === AuthType.USE_GEMINI ||
1958
- authType === AuthType.USE_VERTEX_AI) {
2043
+ if (this.isGemini31LaunchedForAuthType(authType)) {
1959
2044
  return true;
1960
2045
  }
1961
2046
  return (this.experiments?.flags[ExperimentFlags.GEMINI_3_1_PRO_LAUNCHED]
@@ -1970,8 +2055,7 @@ export class Config {
1970
2055
  */
1971
2056
  getGemini31FlashLiteLaunchedSync() {
1972
2057
  const authType = this.contentGeneratorConfig?.authType;
1973
- if (authType === AuthType.USE_GEMINI ||
1974
- authType === AuthType.USE_VERTEX_AI) {
2058
+ if (this.isGemini31LaunchedForAuthType(authType)) {
1975
2059
  return true;
1976
2060
  }
1977
2061
  return (this.experiments?.flags[ExperimentFlags.GEMINI_3_1_FLASH_LITE_LAUNCHED]
@@ -2053,6 +2137,9 @@ export class Config {
2053
2137
  getEnableInteractiveShell() {
2054
2138
  return this.enableInteractiveShell;
2055
2139
  }
2140
+ getShellBackgroundCompletionBehavior() {
2141
+ return this.shellBackgroundCompletionBehavior;
2142
+ }
2056
2143
  getSkipNextSpeakerCheck() {
2057
2144
  return this.skipNextSpeakerCheck;
2058
2145
  }
@@ -2094,6 +2181,13 @@ export class Config {
2094
2181
  4 *
2095
2182
  (tokenLimit(this.model) - uiTelemetryService.getLastPromptTokenCount()), this.truncateToolOutputThreshold);
2096
2183
  }
2184
+ getToolMaxOutputTokens() {
2185
+ return this.contextManagement.tools.distillation.maxOutputTokens;
2186
+ }
2187
+ getToolSummarizationThresholdTokens() {
2188
+ return this.contextManagement.tools.distillation
2189
+ .summarizationThresholdTokens;
2190
+ }
2097
2191
  getNextCompressionTruncationId() {
2098
2192
  return ++this.compressionTruncationCounter;
2099
2193
  }
@@ -2159,6 +2253,7 @@ export class Config {
2159
2253
  visualModel: customConfig.visualModel,
2160
2254
  allowedDomains: customConfig.allowedDomains,
2161
2255
  disableUserInput: customConfig.disableUserInput,
2256
+ maxActionsPerTask: customConfig.maxActionsPerTask ?? 100,
2162
2257
  confirmSensitiveActions: customConfig.confirmSensitiveActions,
2163
2258
  blockFileUploads: customConfig.blockFileUploads,
2164
2259
  },
@@ -2194,6 +2289,7 @@ export class Config {
2194
2289
  registerFn();
2195
2290
  }
2196
2291
  };
2292
+ maybeRegister(UpdateTopicTool, () => registry.registerTool(new UpdateTopicTool(this, this.messageBus)));
2197
2293
  maybeRegister(LSTool, () => registry.registerTool(new LSTool(this, this.messageBus)));
2198
2294
  maybeRegister(ReadFileTool, () => registry.registerTool(new ReadFileTool(this, this.messageBus)));
2199
2295
  if (this.getUseRipgrep()) {
@@ -2223,7 +2319,7 @@ export class Config {
2223
2319
  maybeRegister(WebFetchTool, () => registry.registerTool(new WebFetchTool(this, this.messageBus)));
2224
2320
  maybeRegister(ShellTool, () => registry.registerTool(new ShellTool(this, this.messageBus)));
2225
2321
  if (!this.isMemoryManagerEnabled()) {
2226
- maybeRegister(MemoryTool, () => registry.registerTool(new MemoryTool(this.messageBus)));
2322
+ maybeRegister(MemoryTool, () => registry.registerTool(new MemoryTool(this.messageBus, this.storage)));
2227
2323
  }
2228
2324
  maybeRegister(WebSearchTool, () => registry.registerTool(new WebSearchTool(this, this.messageBus)));
2229
2325
  maybeRegister(AskUserTool, () => registry.registerTool(new AskUserTool(this.messageBus)));