@google/gemini-cli-core 0.39.0-preview.2 → 0.40.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 (259) hide show
  1. package/dist/docs/changelogs/index.md +21 -0
  2. package/dist/docs/changelogs/latest.md +253 -407
  3. package/dist/docs/changelogs/preview.md +236 -247
  4. package/dist/docs/cli/auto-memory.md +143 -0
  5. package/dist/docs/cli/enterprise.md +1 -1
  6. package/dist/docs/cli/plan-mode.md +3 -1
  7. package/dist/docs/cli/settings.md +29 -25
  8. package/dist/docs/cli/system-prompt.md +6 -6
  9. package/dist/docs/cli/telemetry.md +18 -11
  10. package/dist/docs/cli/tutorials/memory-management.md +2 -0
  11. package/dist/docs/get-started/{authentication.md → authentication.mdx} +139 -93
  12. package/dist/docs/get-started/index.md +3 -2
  13. package/dist/docs/get-started/installation.mdx +201 -0
  14. package/dist/docs/index.md +2 -2
  15. package/dist/docs/reference/configuration.md +88 -12
  16. package/dist/docs/reference/policy-engine.md +18 -12
  17. package/dist/docs/reference/tools.md +22 -0
  18. package/dist/docs/sidebar.json +13 -1
  19. package/dist/docs/tools/mcp-resources.md +44 -0
  20. package/dist/docs/tools/mcp-server.md +2 -1
  21. package/dist/docs/tools/tracker.md +61 -0
  22. package/dist/src/agents/agent-tool.js +1 -0
  23. package/dist/src/agents/agent-tool.js.map +1 -1
  24. package/dist/src/agents/agentLoader.d.ts +4 -4
  25. package/dist/src/agents/generalist-agent.js +3 -2
  26. package/dist/src/agents/generalist-agent.js.map +1 -1
  27. package/dist/src/agents/local-executor.js +4 -1
  28. package/dist/src/agents/local-executor.js.map +1 -1
  29. package/dist/src/agents/registry.js +0 -8
  30. package/dist/src/agents/registry.js.map +1 -1
  31. package/dist/src/agents/skill-extraction-agent.d.ts +3 -2
  32. package/dist/src/agents/skill-extraction-agent.js +72 -67
  33. package/dist/src/agents/skill-extraction-agent.js.map +1 -1
  34. package/dist/src/agents/skill-extraction-agent.test.js +54 -0
  35. package/dist/src/agents/skill-extraction-agent.test.js.map +1 -0
  36. package/dist/src/config/config.d.ts +21 -6
  37. package/dist/src/config/config.js +103 -19
  38. package/dist/src/config/config.js.map +1 -1
  39. package/dist/src/config/config.test.js +262 -6
  40. package/dist/src/config/config.test.js.map +1 -1
  41. package/dist/src/config/constants.d.ts +1 -0
  42. package/dist/src/config/constants.js +2 -0
  43. package/dist/src/config/constants.js.map +1 -1
  44. package/dist/src/config/memory.js +1 -1
  45. package/dist/src/config/memory.js.map +1 -1
  46. package/dist/src/config/path-validation.test.js +15 -6
  47. package/dist/src/config/path-validation.test.js.map +1 -1
  48. package/dist/src/config/projectRegistry.js +113 -32
  49. package/dist/src/config/projectRegistry.js.map +1 -1
  50. package/dist/src/config/projectRegistry.test.js +51 -0
  51. package/dist/src/config/projectRegistry.test.js.map +1 -1
  52. package/dist/src/config/storage.d.ts +3 -1
  53. package/dist/src/config/storage.js +6 -0
  54. package/dist/src/config/storage.js.map +1 -1
  55. package/dist/src/config/storage.test.js +12 -0
  56. package/dist/src/config/storage.test.js.map +1 -1
  57. package/dist/src/core/contentGenerator.d.ts +8 -1
  58. package/dist/src/core/contentGenerator.js +46 -4
  59. package/dist/src/core/contentGenerator.js.map +1 -1
  60. package/dist/src/core/contentGenerator.test.js +174 -8
  61. package/dist/src/core/contentGenerator.test.js.map +1 -1
  62. package/dist/src/core/geminiChat.test.js +1 -0
  63. package/dist/src/core/geminiChat.test.js.map +1 -1
  64. package/dist/src/core/geminiChat_network_retry.test.js +42 -0
  65. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  66. package/dist/src/core/localLiteRtLmClient.js +2 -0
  67. package/dist/src/core/localLiteRtLmClient.js.map +1 -1
  68. package/dist/src/core/localLiteRtLmClient.test.js +7 -0
  69. package/dist/src/core/localLiteRtLmClient.test.js.map +1 -1
  70. package/dist/src/core/loggingContentGenerator.js +3 -0
  71. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  72. package/dist/src/core/loggingContentGenerator.test.js +1 -0
  73. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  74. package/dist/src/core/prompts.d.ts +1 -1
  75. package/dist/src/core/prompts.js +2 -2
  76. package/dist/src/core/prompts.js.map +1 -1
  77. package/dist/src/core/prompts.test.js +2 -2
  78. package/dist/src/core/prompts.test.js.map +1 -1
  79. package/dist/src/generated/git-commit.d.ts +2 -2
  80. package/dist/src/generated/git-commit.js +2 -2
  81. package/dist/src/ide/ide-client.js +3 -4
  82. package/dist/src/ide/ide-client.js.map +1 -1
  83. package/dist/src/policy/policies/read-only.toml +4 -1
  84. package/dist/src/policy/policy-engine.js +4 -0
  85. package/dist/src/policy/policy-engine.js.map +1 -1
  86. package/dist/src/policy/policy-engine.test.js +25 -0
  87. package/dist/src/policy/policy-engine.test.js.map +1 -1
  88. package/dist/src/policy/toml-loader.test.js +5 -0
  89. package/dist/src/policy/toml-loader.test.js.map +1 -1
  90. package/dist/src/prompts/promptProvider.d.ts +1 -1
  91. package/dist/src/prompts/promptProvider.js +15 -7
  92. package/dist/src/prompts/promptProvider.js.map +1 -1
  93. package/dist/src/prompts/promptProvider.test.js +31 -1
  94. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  95. package/dist/src/prompts/snippets-memory-v2.test.js +94 -0
  96. package/dist/src/prompts/snippets-memory-v2.test.js.map +1 -0
  97. package/dist/src/prompts/snippets.d.ts +19 -1
  98. package/dist/src/prompts/snippets.js +24 -3
  99. package/dist/src/prompts/snippets.js.map +1 -1
  100. package/dist/src/prompts/snippets.legacy.d.ts +6 -1
  101. package/dist/src/prompts/snippets.legacy.js +10 -3
  102. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  103. package/dist/src/sandbox/linux/LinuxSandboxManager.js +16 -2
  104. package/dist/src/sandbox/linux/LinuxSandboxManager.js.map +1 -1
  105. package/dist/src/sandbox/linux/bwrapArgsBuilder.js +64 -36
  106. package/dist/src/sandbox/linux/bwrapArgsBuilder.js.map +1 -1
  107. package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js +3 -3
  108. package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js.map +1 -1
  109. package/dist/src/sandbox/macos/MacOsSandboxManager.js +13 -1
  110. package/dist/src/sandbox/macos/MacOsSandboxManager.js.map +1 -1
  111. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js +61 -42
  112. package/dist/src/sandbox/macos/seatbeltArgsBuilder.js.map +1 -1
  113. package/dist/src/sandbox/windows/WindowsSandboxManager.js +12 -1
  114. package/dist/src/sandbox/windows/WindowsSandboxManager.js.map +1 -1
  115. package/dist/src/scheduler/policy.js +1 -2
  116. package/dist/src/scheduler/policy.js.map +1 -1
  117. package/dist/src/scheduler/policy.test.js +35 -2
  118. package/dist/src/scheduler/policy.test.js.map +1 -1
  119. package/dist/src/scheduler/scheduler.js +1 -0
  120. package/dist/src/scheduler/scheduler.js.map +1 -1
  121. package/dist/src/scheduler/scheduler.test.js +2 -0
  122. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  123. package/dist/src/scheduler/scheduler_hooks.test.js +1 -0
  124. package/dist/src/scheduler/scheduler_hooks.test.js.map +1 -1
  125. package/dist/src/scheduler/scheduler_parallel.test.js +1 -0
  126. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
  127. package/dist/src/scheduler/tool-executor.js +1 -0
  128. package/dist/src/scheduler/tool-executor.js.map +1 -1
  129. package/dist/src/services/chatRecordingService.d.ts +1 -0
  130. package/dist/src/services/chatRecordingService.js +48 -19
  131. package/dist/src/services/chatRecordingService.js.map +1 -1
  132. package/dist/src/services/memoryService.d.ts +15 -1
  133. package/dist/src/services/memoryService.js +276 -57
  134. package/dist/src/services/memoryService.js.map +1 -1
  135. package/dist/src/services/memoryService.test.js +296 -2
  136. package/dist/src/services/memoryService.test.js.map +1 -1
  137. package/dist/src/services/sandboxManager.integration.test.js +204 -0
  138. package/dist/src/services/sandboxManager.integration.test.js.map +1 -1
  139. package/dist/src/services/sandboxManager.js +16 -0
  140. package/dist/src/services/sandboxManager.js.map +1 -1
  141. package/dist/src/services/sessionSummaryUtils.d.ts +1 -1
  142. package/dist/src/services/sessionSummaryUtils.js +111 -38
  143. package/dist/src/services/sessionSummaryUtils.js.map +1 -1
  144. package/dist/src/services/sessionSummaryUtils.test.js +204 -51
  145. package/dist/src/services/sessionSummaryUtils.test.js.map +1 -1
  146. package/dist/src/services/shellExecutionService.js +7 -1
  147. package/dist/src/services/shellExecutionService.js.map +1 -1
  148. package/dist/src/telemetry/config.js +3 -0
  149. package/dist/src/telemetry/config.js.map +1 -1
  150. package/dist/src/telemetry/conseca-logger.test.js +1 -0
  151. package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
  152. package/dist/src/telemetry/loggers.test.js +72 -4
  153. package/dist/src/telemetry/loggers.test.js.map +1 -1
  154. package/dist/src/telemetry/memory-monitor.d.ts +1 -0
  155. package/dist/src/telemetry/memory-monitor.js +8 -1
  156. package/dist/src/telemetry/memory-monitor.js.map +1 -1
  157. package/dist/src/telemetry/memory-monitor.test.js +6 -1
  158. package/dist/src/telemetry/memory-monitor.test.js.map +1 -1
  159. package/dist/src/telemetry/trace.d.ts +1 -0
  160. package/dist/src/telemetry/trace.js +33 -13
  161. package/dist/src/telemetry/trace.js.map +1 -1
  162. package/dist/src/telemetry/trace.test.js +50 -10
  163. package/dist/src/telemetry/trace.test.js.map +1 -1
  164. package/dist/src/telemetry/types.js +11 -4
  165. package/dist/src/telemetry/types.js.map +1 -1
  166. package/dist/src/tools/definitions/base-declarations.d.ts +2 -0
  167. package/dist/src/tools/definitions/base-declarations.js +3 -0
  168. package/dist/src/tools/definitions/base-declarations.js.map +1 -1
  169. package/dist/src/tools/definitions/coreTools.d.ts +3 -1
  170. package/dist/src/tools/definitions/coreTools.js +13 -1
  171. package/dist/src/tools/definitions/coreTools.js.map +1 -1
  172. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +29 -1
  173. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  174. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +29 -1
  175. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  176. package/dist/src/tools/definitions/types.d.ts +2 -0
  177. package/dist/src/tools/get-internal-docs.js +5 -2
  178. package/dist/src/tools/get-internal-docs.js.map +1 -1
  179. package/dist/src/tools/list-mcp-resources.d.ts +24 -0
  180. package/dist/src/tools/list-mcp-resources.js +74 -0
  181. package/dist/src/tools/list-mcp-resources.js.map +1 -0
  182. package/dist/src/tools/list-mcp-resources.test.d.ts +6 -0
  183. package/dist/src/tools/list-mcp-resources.test.js +79 -0
  184. package/dist/src/tools/list-mcp-resources.test.js.map +1 -0
  185. package/dist/src/tools/mcp-client-manager.d.ts +3 -1
  186. package/dist/src/tools/mcp-client-manager.js +24 -1
  187. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  188. package/dist/src/tools/mcp-client-manager.test.js +43 -0
  189. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  190. package/dist/src/tools/memoryTool.d.ts +2 -1
  191. package/dist/src/tools/memoryTool.js +42 -13
  192. package/dist/src/tools/memoryTool.js.map +1 -1
  193. package/dist/src/tools/memoryTool.test.js +23 -3
  194. package/dist/src/tools/memoryTool.test.js.map +1 -1
  195. package/dist/src/tools/read-mcp-resource.d.ts +25 -0
  196. package/dist/src/tools/read-mcp-resource.js +120 -0
  197. package/dist/src/tools/read-mcp-resource.js.map +1 -0
  198. package/dist/src/tools/read-mcp-resource.test.d.ts +6 -0
  199. package/dist/src/tools/read-mcp-resource.test.js +110 -0
  200. package/dist/src/tools/read-mcp-resource.test.js.map +1 -0
  201. package/dist/src/tools/ripGrep.d.ts +3 -2
  202. package/dist/src/tools/ripGrep.js +25 -54
  203. package/dist/src/tools/ripGrep.js.map +1 -1
  204. package/dist/src/tools/ripGrep.test.js +73 -131
  205. package/dist/src/tools/ripGrep.test.js.map +1 -1
  206. package/dist/src/tools/shell.js +38 -12
  207. package/dist/src/tools/shell.js.map +1 -1
  208. package/dist/src/tools/shell.test.js +410 -25
  209. package/dist/src/tools/shell.test.js.map +1 -1
  210. package/dist/src/tools/tool-error.d.ts +1 -0
  211. package/dist/src/tools/tool-error.js +1 -0
  212. package/dist/src/tools/tool-error.js.map +1 -1
  213. package/dist/src/tools/tool-names.d.ts +4 -4
  214. package/dist/src/tools/tool-names.js +6 -2
  215. package/dist/src/tools/tool-names.js.map +1 -1
  216. package/dist/src/tools/tool-registry.js +8 -1
  217. package/dist/src/tools/tool-registry.js.map +1 -1
  218. package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
  219. package/dist/src/utils/filesearch/fileSearch.js +97 -6
  220. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  221. package/dist/src/utils/filesearch/fileSearch.test.js +54 -0
  222. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  223. package/dist/src/utils/filesearch/fileWatcher.d.ts +25 -0
  224. package/dist/src/utils/filesearch/fileWatcher.js +86 -0
  225. package/dist/src/utils/filesearch/fileWatcher.js.map +1 -0
  226. package/dist/src/utils/filesearch/fileWatcher.test.d.ts +6 -0
  227. package/dist/src/utils/filesearch/fileWatcher.test.js +142 -0
  228. package/dist/src/utils/filesearch/fileWatcher.test.js.map +1 -0
  229. package/dist/src/utils/gitIgnoreParser.js +1 -1
  230. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  231. package/dist/src/utils/ignoreFileParser.js +1 -1
  232. package/dist/src/utils/ignoreFileParser.js.map +1 -1
  233. package/dist/src/utils/memoryDiscovery.js +15 -5
  234. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  235. package/dist/src/utils/retry.js +18 -6
  236. package/dist/src/utils/retry.js.map +1 -1
  237. package/dist/src/utils/retry.test.js +30 -0
  238. package/dist/src/utils/retry.test.js.map +1 -1
  239. package/dist/src/utils/shell-utils.d.ts +1 -0
  240. package/dist/src/utils/shell-utils.js +106 -0
  241. package/dist/src/utils/shell-utils.js.map +1 -1
  242. package/dist/tsconfig.tsbuildinfo +1 -1
  243. package/package.json +5 -3
  244. package/vendor/ripgrep/rg-darwin-arm64 +0 -0
  245. package/vendor/ripgrep/rg-darwin-x64 +0 -0
  246. package/vendor/ripgrep/rg-linux-arm64 +0 -0
  247. package/vendor/ripgrep/rg-linux-x64 +0 -0
  248. package/vendor/ripgrep/rg-win32-x64.exe +0 -0
  249. package/dist/docs/get-started/installation.md +0 -181
  250. package/dist/google-gemini-cli-core-0.39.0-preview.1.tgz +0 -0
  251. package/dist/src/agents/memory-manager-agent.d.ts +0 -25
  252. package/dist/src/agents/memory-manager-agent.js +0 -138
  253. package/dist/src/agents/memory-manager-agent.js.map +0 -1
  254. package/dist/src/agents/memory-manager-agent.test.js +0 -123
  255. package/dist/src/agents/memory-manager-agent.test.js.map +0 -1
  256. package/dist/src/prompts/snippets-memory-manager.test.js +0 -31
  257. package/dist/src/prompts/snippets-memory-manager.test.js.map +0 -1
  258. /package/dist/src/agents/{memory-manager-agent.test.d.ts → skill-extraction-agent.test.d.ts} +0 -0
  259. /package/dist/src/prompts/{snippets-memory-manager.test.d.ts → snippets-memory-v2.test.d.ts} +0 -0
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
  import type { ConversationRecord } from '../services/chatRecordingService.js';
9
9
  import type { AgentHistoryProviderConfig, ContextManagementConfig, ToolOutputMaskingConfig } from '../context/types.js';
10
10
  export type { ConversationRecord };
11
- import { AuthType, type ContentGenerator, type ContentGeneratorConfig } from '../core/contentGenerator.js';
11
+ import { AuthType, type ContentGenerator, type ContentGeneratorConfig, type VertexAiRoutingConfig } from '../core/contentGenerator.js';
12
12
  import type { OverageStrategy } from '../billing/billing.js';
13
13
  import { PromptRegistry } from '../prompts/prompt-registry.js';
14
14
  import { ResourceRegistry } from '../resources/resource-registry.js';
@@ -71,6 +71,7 @@ export interface PlanSettings {
71
71
  }
72
72
  export interface TelemetrySettings {
73
73
  enabled?: boolean;
74
+ traces?: boolean;
74
75
  target?: TelemetryTarget;
75
76
  otlpEndpoint?: string;
76
77
  otlpProtocol?: 'grpc' | 'http';
@@ -84,6 +85,8 @@ export interface OutputSettings {
84
85
  }
85
86
  export interface GemmaModelRouterSettings {
86
87
  enabled?: boolean;
88
+ autoStartServer?: boolean;
89
+ binaryPath?: string;
87
90
  classifier?: {
88
91
  host?: string;
89
92
  model?: string;
@@ -438,6 +441,7 @@ export interface ConfigParameters {
438
441
  fileFiltering?: {
439
442
  respectGitIgnore?: boolean;
440
443
  respectGeminiIgnore?: boolean;
444
+ enableFileWatcher?: boolean;
441
445
  enableRecursiveFileSearch?: boolean;
442
446
  enableFuzzySearch?: boolean;
443
447
  maxFileCount?: number;
@@ -530,7 +534,8 @@ export interface ConfigParameters {
530
534
  adminSkillsEnabled?: boolean;
531
535
  experimentalJitContext?: boolean;
532
536
  autoDistillation?: boolean;
533
- experimentalMemoryManager?: boolean;
537
+ experimentalMemoryV2?: boolean;
538
+ experimentalAutoMemory?: boolean;
534
539
  experimentalContextManagementConfig?: string;
535
540
  experimentalAgentHistoryTruncation?: boolean;
536
541
  experimentalAgentHistoryTruncationThreshold?: number;
@@ -557,6 +562,7 @@ export interface ConfigParameters {
557
562
  billing?: {
558
563
  overageStrategy?: OverageStrategy;
559
564
  };
565
+ vertexAiRouting?: VertexAiRoutingConfig;
560
566
  }
561
567
  export declare class Config implements McpContext, AgentLoopContext {
562
568
  private _toolRegistry;
@@ -712,6 +718,7 @@ export declare class Config implements McpContext, AgentLoopContext {
712
718
  private readonly onModelChange;
713
719
  private readonly onReload;
714
720
  private readonly billing;
721
+ private readonly vertexAiRouting;
715
722
  private readonly enableAgents;
716
723
  private agents;
717
724
  private readonly enableEventDrivenScheduler;
@@ -719,7 +726,8 @@ export declare class Config implements McpContext, AgentLoopContext {
719
726
  private disabledSkills;
720
727
  private readonly adminSkillsEnabled;
721
728
  private readonly experimentalJitContext;
722
- private readonly experimentalMemoryManager;
729
+ private readonly experimentalMemoryV2;
730
+ private readonly experimentalAutoMemory;
723
731
  private readonly experimentalContextManagementConfig?;
724
732
  private readonly memoryBoundaryMarkers;
725
733
  private readonly topicUpdateNarration;
@@ -790,6 +798,7 @@ export declare class Config implements McpContext, AgentLoopContext {
790
798
  getWorktreeSettings(): WorktreeSettings | undefined;
791
799
  getClientName(): string | undefined;
792
800
  setSessionId(sessionId: string): void;
801
+ resetNewSessionState(sessionId: string): void;
793
802
  setTerminalBackground(terminalBackground: string | undefined): void;
794
803
  getTerminalBackground(): string | undefined;
795
804
  getLatestApiRequest(): GenerateContentParameters | undefined;
@@ -833,6 +842,7 @@ export declare class Config implements McpContext, AgentLoopContext {
833
842
  getTargetDir(): string;
834
843
  getProjectRoot(): string;
835
844
  getWorkspaceContext(): WorkspaceContext;
845
+ private refreshSessionScopedPlansDirectory;
836
846
  getAgentRegistry(): AgentRegistry;
837
847
  getAcknowledgedAgentsService(): AcknowledgedAgentsService;
838
848
  /** @deprecated Use toolRegistry getter */
@@ -913,7 +923,8 @@ export declare class Config implements McpContext, AgentLoopContext {
913
923
  isJitContextEnabled(): boolean;
914
924
  isContextManagementEnabled(): boolean;
915
925
  getMemoryBoundaryMarkers(): readonly string[];
916
- isMemoryManagerEnabled(): boolean;
926
+ isMemoryV2Enabled(): boolean;
927
+ isAutoMemoryEnabled(): boolean;
917
928
  getExperimentalContextManagementConfig(): string | undefined;
918
929
  getContextManagementConfig(): ContextManagementConfig;
919
930
  get agentHistoryProviderConfig(): AgentHistoryProviderConfig;
@@ -950,6 +961,7 @@ export declare class Config implements McpContext, AgentLoopContext {
950
961
  getShowMemoryUsage(): boolean;
951
962
  getAccessibility(): AccessibilitySettings;
952
963
  getTelemetryEnabled(): boolean;
964
+ getTelemetryTracesEnabled(): boolean;
953
965
  getTelemetryLogPromptsEnabled(): boolean;
954
966
  getTelemetryOtlpEndpoint(): string;
955
967
  getTelemetryOtlpProtocol(): 'grpc' | 'http';
@@ -1034,7 +1046,10 @@ export declare class Config implements McpContext, AgentLoopContext {
1034
1046
  getFileSystemService(): FileSystemService;
1035
1047
  /**
1036
1048
  * Checks if a given absolute path is allowed for file system operations.
1037
- * A path is allowed if it's within the workspace context or the project's temporary directory.
1049
+ * A path is allowed if it's within the workspace context, the project's
1050
+ * temporary directory, or is exactly the global personal `~/.gemini/GEMINI.md`
1051
+ * file (the latter is the only file under `~/.gemini/` that is reachable —
1052
+ * settings, credentials, keybindings, etc. remain disallowed).
1038
1053
  *
1039
1054
  * @param absolutePath The absolute path to check.
1040
1055
  * @returns true if the path is allowed, false otherwise.
@@ -1143,7 +1158,7 @@ export declare class Config implements McpContext, AgentLoopContext {
1143
1158
  getEnableShellOutputEfficiency(): boolean;
1144
1159
  getShellToolInactivityTimeout(): number;
1145
1160
  getShellExecutionConfig(): ShellExecutionConfig;
1146
- setShellExecutionConfig(config: ShellExecutionConfig): void;
1161
+ setShellExecutionConfig(config: Partial<ShellExecutionConfig>): void;
1147
1162
  getScreenReader(): boolean;
1148
1163
  getTruncateToolOutputThreshold(): number;
1149
1164
  getToolMaxOutputTokens(): number;
@@ -15,6 +15,8 @@ import { ResourceRegistry } from '../resources/resource-registry.js';
15
15
  import { ToolRegistry } from '../tools/tool-registry.js';
16
16
  import { LSTool } from '../tools/ls.js';
17
17
  import { ReadFileTool } from '../tools/read-file.js';
18
+ import { ReadMcpResourceTool } from '../tools/read-mcp-resource.js';
19
+ import { ListMcpResourcesTool } from '../tools/list-mcp-resources.js';
18
20
  import { GrepTool } from '../tools/grep.js';
19
21
  import { canUseRipgrep, RipGrepTool } from '../tools/ripGrep.js';
20
22
  import { GlobTool } from '../tools/glob.js';
@@ -23,7 +25,7 @@ import { EditTool } from '../tools/edit.js';
23
25
  import { ShellTool } from '../tools/shell.js';
24
26
  import { WriteFileTool } from '../tools/write-file.js';
25
27
  import { WebFetchTool } from '../tools/web-fetch.js';
26
- import { MemoryTool, setGeminiMdFilename } from '../tools/memoryTool.js';
28
+ import { MemoryTool, setGeminiMdFilename, getCurrentGeminiMdFilename, } from '../tools/memoryTool.js';
27
29
  import { WebSearchTool } from '../tools/web-search.js';
28
30
  import { AskUserTool } from '../tools/ask-user.js';
29
31
  import { UpdateTopicTool } from '../tools/topicTool.js';
@@ -362,6 +364,7 @@ export class Config {
362
364
  onModelChange;
363
365
  onReload;
364
366
  billing;
367
+ vertexAiRouting;
365
368
  enableAgents;
366
369
  agents;
367
370
  enableEventDrivenScheduler;
@@ -369,7 +372,8 @@ export class Config {
369
372
  disabledSkills;
370
373
  adminSkillsEnabled;
371
374
  experimentalJitContext;
372
- experimentalMemoryManager;
375
+ experimentalMemoryV2;
376
+ experimentalAutoMemory;
373
377
  experimentalContextManagementConfig;
374
378
  memoryBoundaryMarkers;
375
379
  topicUpdateNarration;
@@ -466,6 +470,7 @@ export class Config {
466
470
  this.accessibility = params.accessibility ?? {};
467
471
  this.telemetrySettings = {
468
472
  enabled: params.telemetry?.enabled ?? false,
473
+ traces: params.telemetry?.traces ?? false,
469
474
  target: params.telemetry?.target ?? DEFAULT_TELEMETRY_TARGET,
470
475
  otlpEndpoint: params.telemetry?.otlpEndpoint ?? DEFAULT_OTLP_ENDPOINT,
471
476
  otlpProtocol: params.telemetry?.otlpProtocol,
@@ -480,6 +485,9 @@ export class Config {
480
485
  DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore,
481
486
  respectGeminiIgnore: params.fileFiltering?.respectGeminiIgnore ??
482
487
  DEFAULT_FILE_FILTERING_OPTIONS.respectGeminiIgnore,
488
+ enableFileWatcher: params.fileFiltering?.enableFileWatcher ??
489
+ DEFAULT_FILE_FILTERING_OPTIONS.enableFileWatcher ??
490
+ true,
483
491
  enableRecursiveFileSearch: params.fileFiltering?.enableRecursiveFileSearch ?? true,
484
492
  enableFuzzySearch: params.fileFiltering?.enableFuzzySearch ?? true,
485
493
  maxFileCount: params.fileFiltering?.maxFileCount ??
@@ -550,8 +558,9 @@ export class Config {
550
558
  };
551
559
  }
552
560
  this.modelConfigService = new ModelConfigService(modelConfigServiceConfig ?? DEFAULT_MODEL_CONFIGS);
553
- this.experimentalJitContext = params.experimentalJitContext ?? false;
554
- this.experimentalMemoryManager = params.experimentalMemoryManager ?? false;
561
+ this.experimentalJitContext = params.experimentalJitContext ?? true;
562
+ this.experimentalMemoryV2 = params.experimentalMemoryV2 ?? true;
563
+ this.experimentalAutoMemory = params.experimentalAutoMemory ?? false;
555
564
  this.experimentalContextManagementConfig =
556
565
  params.experimentalContextManagementConfig;
557
566
  this.memoryBoundaryMarkers = params.memoryBoundaryMarkers ?? ['.git'];
@@ -585,7 +594,7 @@ export class Config {
585
594
  },
586
595
  },
587
596
  };
588
- this.topicUpdateNarration = params.topicUpdateNarration ?? false;
597
+ this.topicUpdateNarration = params.topicUpdateNarration ?? true;
589
598
  this.modelSteering = params.modelSteering ?? false;
590
599
  this.injectionService = new InjectionService(() => this.isModelSteeringEnabled());
591
600
  ExecutionLifecycleService.setInjectionService(this.injectionService);
@@ -696,6 +705,8 @@ export class Config {
696
705
  };
697
706
  this.gemmaModelRouter = {
698
707
  enabled: params.gemmaModelRouter?.enabled ?? false,
708
+ autoStartServer: params.gemmaModelRouter?.autoStartServer ?? true,
709
+ binaryPath: params.gemmaModelRouter?.binaryPath ?? '',
699
710
  classifier: {
700
711
  host: params.gemmaModelRouter?.classifier?.host ?? 'http://localhost:9379',
701
712
  model: params.gemmaModelRouter?.classifier?.model ?? 'gemma3-1b-gpu-custom',
@@ -722,6 +733,7 @@ export class Config {
722
733
  this.billing = {
723
734
  overageStrategy: params.billing?.overageStrategy ?? 'ask',
724
735
  };
736
+ this.vertexAiRouting = params.vertexAiRouting;
725
737
  if (params.contextFileName) {
726
738
  setGeminiMdFilename(params.contextFileName);
727
739
  }
@@ -857,7 +869,7 @@ export class Config {
857
869
  if (this.contentGeneratorConfig) {
858
870
  this.contentGeneratorConfig.authType = undefined;
859
871
  }
860
- const newContentGeneratorConfig = await createContentGeneratorConfig(this, authMethod, apiKey, baseUrl, customHeaders);
872
+ const newContentGeneratorConfig = await createContentGeneratorConfig(this, authMethod, apiKey, baseUrl, customHeaders, this.vertexAiRouting);
861
873
  this.contentGenerator = await createContentGenerator(newContentGeneratorConfig, this, this.getSessionId());
862
874
  // Only assign to instance properties after successful initialization
863
875
  this.contentGeneratorConfig = newContentGeneratorConfig;
@@ -1021,7 +1033,19 @@ export class Config {
1021
1033
  return this.clientName;
1022
1034
  }
1023
1035
  setSessionId(sessionId) {
1036
+ const previousPlansDir = this.storage.isInitialized()
1037
+ ? this.storage.getPlansDir()
1038
+ : undefined;
1024
1039
  this._sessionId = sessionId;
1040
+ this.storage.setSessionId(sessionId);
1041
+ this.trackerService = undefined;
1042
+ if (previousPlansDir) {
1043
+ this.refreshSessionScopedPlansDirectory(previousPlansDir);
1044
+ }
1045
+ }
1046
+ resetNewSessionState(sessionId) {
1047
+ this.setSessionId(sessionId);
1048
+ this.approvedPlanPath = undefined;
1025
1049
  }
1026
1050
  setTerminalBackground(terminalBackground) {
1027
1051
  this.terminalBackground = terminalBackground;
@@ -1228,6 +1252,34 @@ export class Config {
1228
1252
  getWorkspaceContext() {
1229
1253
  return getWorkspaceContextOverride() ?? this.workspaceContext;
1230
1254
  }
1255
+ refreshSessionScopedPlansDirectory(previousPlansDir) {
1256
+ const nextPlansDir = this.storage.getPlansDir();
1257
+ if (previousPlansDir === nextPlansDir) {
1258
+ return;
1259
+ }
1260
+ const pathsToRemove = new Set([previousPlansDir]);
1261
+ try {
1262
+ pathsToRemove.add(resolveToRealPath(previousPlansDir));
1263
+ }
1264
+ catch {
1265
+ // The previous session's plans directory may never have been created.
1266
+ // In that case there is nothing to resolve or remove beyond the raw path.
1267
+ }
1268
+ const currentDirectories = this.workspaceContext
1269
+ .getDirectories()
1270
+ .filter((dir) => !pathsToRemove.has(dir));
1271
+ this.workspaceContext.setDirectories(currentDirectories);
1272
+ try {
1273
+ if (fs.existsSync(nextPlansDir)) {
1274
+ this.workspaceContext.addDirectory(nextPlansDir);
1275
+ }
1276
+ }
1277
+ catch {
1278
+ // Ignore invalid or unreadable plans directories here. This mirrors
1279
+ // initialization behavior, which only adds the plans directory when it
1280
+ // already exists and is readable.
1281
+ }
1282
+ }
1231
1283
  getAgentRegistry() {
1232
1284
  return this.agentRegistry;
1233
1285
  }
@@ -1530,8 +1582,11 @@ export class Config {
1530
1582
  getMemoryBoundaryMarkers() {
1531
1583
  return this.memoryBoundaryMarkers;
1532
1584
  }
1533
- isMemoryManagerEnabled() {
1534
- return this.experimentalMemoryManager;
1585
+ isMemoryV2Enabled() {
1586
+ return this.experimentalMemoryV2;
1587
+ }
1588
+ isAutoMemoryEnabled() {
1589
+ return this.experimentalAutoMemory;
1535
1590
  }
1536
1591
  getExperimentalContextManagementConfig() {
1537
1592
  return this.experimentalContextManagementConfig;
@@ -1699,6 +1754,9 @@ export class Config {
1699
1754
  getTelemetryEnabled() {
1700
1755
  return this.telemetrySettings.enabled ?? false;
1701
1756
  }
1757
+ getTelemetryTracesEnabled() {
1758
+ return this.telemetrySettings.traces ?? false;
1759
+ }
1702
1760
  getTelemetryLogPromptsEnabled() {
1703
1761
  return this.telemetrySettings.logPrompts ?? true;
1704
1762
  }
@@ -1773,6 +1831,7 @@ export class Config {
1773
1831
  return {
1774
1832
  respectGitIgnore: this.fileFiltering.respectGitIgnore,
1775
1833
  respectGeminiIgnore: this.fileFiltering.respectGeminiIgnore,
1834
+ enableFileWatcher: this.fileFiltering.enableFileWatcher,
1776
1835
  maxFileCount: this.fileFiltering.maxFileCount,
1777
1836
  searchTimeout: this.fileFiltering.searchTimeout,
1778
1837
  customIgnoreFilePaths: this.fileFiltering.customIgnoreFilePaths,
@@ -1925,7 +1984,10 @@ export class Config {
1925
1984
  }
1926
1985
  /**
1927
1986
  * Checks if a given absolute path is allowed for file system operations.
1928
- * A path is allowed if it's within the workspace context or the project's temporary directory.
1987
+ * A path is allowed if it's within the workspace context, the project's
1988
+ * temporary directory, or is exactly the global personal `~/.gemini/GEMINI.md`
1989
+ * file (the latter is the only file under `~/.gemini/` that is reachable —
1990
+ * settings, credentials, keybindings, etc. remain disallowed).
1929
1991
  *
1930
1992
  * @param absolutePath The absolute path to check.
1931
1993
  * @returns true if the path is allowed, false otherwise.
@@ -1938,7 +2000,19 @@ export class Config {
1938
2000
  }
1939
2001
  const projectTempDir = this.storage.getProjectTempDir();
1940
2002
  const resolvedTempDir = resolveToRealPath(projectTempDir);
1941
- return isSubpath(resolvedTempDir, resolvedPath);
2003
+ if (isSubpath(resolvedTempDir, resolvedPath)) {
2004
+ return true;
2005
+ }
2006
+ // Surgical allowlist: the global personal GEMINI.md file (and ONLY that
2007
+ // file) is reachable so the prompt-driven memory flow can persist
2008
+ // cross-project personal preferences. This deliberately does NOT
2009
+ // allowlist the rest of `~/.gemini/`.
2010
+ const globalMemoryFilePath = path.join(Storage.getGlobalGeminiDir(), getCurrentGeminiMdFilename());
2011
+ const resolvedGlobalMemoryFilePath = resolveToRealPath(globalMemoryFilePath);
2012
+ if (resolvedPath === resolvedGlobalMemoryFilePath) {
2013
+ return true;
2014
+ }
2015
+ return false;
1942
2016
  }
1943
2017
  /**
1944
2018
  * Validates if a path is allowed and returns a detailed error message if not.
@@ -2041,7 +2115,8 @@ export class Config {
2041
2115
  * Note: This method should only be called after startup, once experiments have been loaded.
2042
2116
  */
2043
2117
  getProModelNoAccessSync() {
2044
- if (this.contentGeneratorConfig?.authType !== AuthType.LOGIN_WITH_GOOGLE) {
2118
+ if (this.contentGeneratorConfig?.authType !== AuthType.LOGIN_WITH_GOOGLE &&
2119
+ this.contentGeneratorConfig?.authType !== AuthType.COMPUTE_ADC) {
2045
2120
  return false;
2046
2121
  }
2047
2122
  return (this.experiments?.flags[ExperimentFlags.PRO_MODEL_NO_ACCESS]?.boolValue ??
@@ -2236,15 +2311,21 @@ export class Config {
2236
2311
  return this.shellExecutionConfig;
2237
2312
  }
2238
2313
  setShellExecutionConfig(config) {
2314
+ const definedConfig = {};
2315
+ for (const [k, v] of Object.entries(config)) {
2316
+ // Only merge properties explicitly provided with a concrete value.
2317
+ // Filtering out `null` and `undefined` ensures existing system defaults
2318
+ // are preserved when an extension doesn't want to override them.
2319
+ if (v != null) {
2320
+ Object.assign(definedConfig, { [k]: v });
2321
+ }
2322
+ }
2323
+ // Note: This performs a shallow merge. If the incoming config provides a nested
2324
+ // object (e.g., sandboxConfig), it will completely overwrite the existing
2325
+ // nested object rather than merging its individual properties.
2239
2326
  this.shellExecutionConfig = {
2240
2327
  ...this.shellExecutionConfig,
2241
- terminalWidth: config.terminalWidth ?? this.shellExecutionConfig.terminalWidth,
2242
- terminalHeight: config.terminalHeight ?? this.shellExecutionConfig.terminalHeight,
2243
- showColor: config.showColor ?? this.shellExecutionConfig.showColor,
2244
- pager: config.pager ?? this.shellExecutionConfig.pager,
2245
- sanitizationConfig: config.sanitizationConfig ??
2246
- this.shellExecutionConfig.sanitizationConfig,
2247
- sandboxManager: config.sandboxManager ?? this.shellExecutionConfig.sandboxManager,
2328
+ ...definedConfig,
2248
2329
  };
2249
2330
  }
2250
2331
  getScreenReader() {
@@ -2386,6 +2467,7 @@ export class Config {
2386
2467
  maybeRegister(RipGrepTool, () => registry.registerTool(new RipGrepTool(this, this.messageBus)));
2387
2468
  }
2388
2469
  else {
2470
+ debugLogger.warn(`Ripgrep is not available. Falling back to GrepTool.`);
2389
2471
  logRipgrepFallback(this, new RipgrepFallbackEvent(errorString));
2390
2472
  maybeRegister(GrepTool, () => registry.registerTool(new GrepTool(this, this.messageBus)));
2391
2473
  }
@@ -2398,10 +2480,12 @@ export class Config {
2398
2480
  maybeRegister(EditTool, () => registry.registerTool(new EditTool(this, this.messageBus)));
2399
2481
  maybeRegister(WriteFileTool, () => registry.registerTool(new WriteFileTool(this, this.messageBus)));
2400
2482
  maybeRegister(WebFetchTool, () => registry.registerTool(new WebFetchTool(this, this.messageBus)));
2483
+ maybeRegister(ReadMcpResourceTool, () => registry.registerTool(new ReadMcpResourceTool(this, this.messageBus)));
2484
+ maybeRegister(ListMcpResourcesTool, () => registry.registerTool(new ListMcpResourcesTool(this, this.messageBus)));
2401
2485
  maybeRegister(ShellTool, () => registry.registerTool(new ShellTool(this, this.messageBus)));
2402
2486
  maybeRegister(ListBackgroundProcessesTool, () => registry.registerTool(new ListBackgroundProcessesTool(this, this.messageBus)));
2403
2487
  maybeRegister(ReadBackgroundOutputTool, () => registry.registerTool(new ReadBackgroundOutputTool(this, this.messageBus)));
2404
- if (!this.isMemoryManagerEnabled()) {
2488
+ if (!this.isMemoryV2Enabled()) {
2405
2489
  maybeRegister(MemoryTool, () => registry.registerTool(new MemoryTool(this.messageBus, this.storage)));
2406
2490
  }
2407
2491
  maybeRegister(WebSearchTool, () => registry.registerTool(new WebSearchTool(this, this.messageBus)));