@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.
- package/dist/docs/changelogs/index.md +21 -0
- package/dist/docs/changelogs/latest.md +253 -407
- package/dist/docs/changelogs/preview.md +236 -247
- package/dist/docs/cli/auto-memory.md +143 -0
- package/dist/docs/cli/enterprise.md +1 -1
- package/dist/docs/cli/plan-mode.md +3 -1
- package/dist/docs/cli/settings.md +29 -25
- package/dist/docs/cli/system-prompt.md +6 -6
- package/dist/docs/cli/telemetry.md +18 -11
- package/dist/docs/cli/tutorials/memory-management.md +2 -0
- package/dist/docs/get-started/{authentication.md → authentication.mdx} +139 -93
- package/dist/docs/get-started/index.md +3 -2
- package/dist/docs/get-started/installation.mdx +201 -0
- package/dist/docs/index.md +2 -2
- package/dist/docs/reference/configuration.md +88 -12
- package/dist/docs/reference/policy-engine.md +18 -12
- package/dist/docs/reference/tools.md +22 -0
- package/dist/docs/sidebar.json +13 -1
- package/dist/docs/tools/mcp-resources.md +44 -0
- package/dist/docs/tools/mcp-server.md +2 -1
- package/dist/docs/tools/tracker.md +61 -0
- package/dist/src/agents/agent-tool.js +1 -0
- package/dist/src/agents/agent-tool.js.map +1 -1
- package/dist/src/agents/agentLoader.d.ts +4 -4
- package/dist/src/agents/generalist-agent.js +3 -2
- package/dist/src/agents/generalist-agent.js.map +1 -1
- package/dist/src/agents/local-executor.js +4 -1
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/registry.js +0 -8
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/skill-extraction-agent.d.ts +3 -2
- package/dist/src/agents/skill-extraction-agent.js +72 -67
- package/dist/src/agents/skill-extraction-agent.js.map +1 -1
- package/dist/src/agents/skill-extraction-agent.test.js +54 -0
- package/dist/src/agents/skill-extraction-agent.test.js.map +1 -0
- package/dist/src/config/config.d.ts +21 -6
- package/dist/src/config/config.js +103 -19
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +262 -6
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +1 -0
- package/dist/src/config/constants.js +2 -0
- package/dist/src/config/constants.js.map +1 -1
- package/dist/src/config/memory.js +1 -1
- package/dist/src/config/memory.js.map +1 -1
- package/dist/src/config/path-validation.test.js +15 -6
- package/dist/src/config/path-validation.test.js.map +1 -1
- package/dist/src/config/projectRegistry.js +113 -32
- package/dist/src/config/projectRegistry.js.map +1 -1
- package/dist/src/config/projectRegistry.test.js +51 -0
- package/dist/src/config/projectRegistry.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +3 -1
- package/dist/src/config/storage.js +6 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +12 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +8 -1
- package/dist/src/core/contentGenerator.js +46 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +174 -8
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +1 -0
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +42 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.js +2 -0
- package/dist/src/core/localLiteRtLmClient.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.test.js +7 -0
- package/dist/src/core/localLiteRtLmClient.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +3 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +1 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +1 -1
- package/dist/src/core/prompts.js +2 -2
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +2 -2
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/ide/ide-client.js +3 -4
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/policy/policies/read-only.toml +4 -1
- package/dist/src/policy/policy-engine.js +4 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +25 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +5 -0
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/prompts/promptProvider.d.ts +1 -1
- package/dist/src/prompts/promptProvider.js +15 -7
- package/dist/src/prompts/promptProvider.js.map +1 -1
- package/dist/src/prompts/promptProvider.test.js +31 -1
- package/dist/src/prompts/promptProvider.test.js.map +1 -1
- package/dist/src/prompts/snippets-memory-v2.test.js +94 -0
- package/dist/src/prompts/snippets-memory-v2.test.js.map +1 -0
- package/dist/src/prompts/snippets.d.ts +19 -1
- package/dist/src/prompts/snippets.js +24 -3
- package/dist/src/prompts/snippets.js.map +1 -1
- package/dist/src/prompts/snippets.legacy.d.ts +6 -1
- package/dist/src/prompts/snippets.legacy.js +10 -3
- package/dist/src/prompts/snippets.legacy.js.map +1 -1
- package/dist/src/sandbox/linux/LinuxSandboxManager.js +16 -2
- package/dist/src/sandbox/linux/LinuxSandboxManager.js.map +1 -1
- package/dist/src/sandbox/linux/bwrapArgsBuilder.js +64 -36
- package/dist/src/sandbox/linux/bwrapArgsBuilder.js.map +1 -1
- package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js +3 -3
- package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js.map +1 -1
- package/dist/src/sandbox/macos/MacOsSandboxManager.js +13 -1
- package/dist/src/sandbox/macos/MacOsSandboxManager.js.map +1 -1
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.js +61 -42
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.js.map +1 -1
- package/dist/src/sandbox/windows/WindowsSandboxManager.js +12 -1
- package/dist/src/sandbox/windows/WindowsSandboxManager.js.map +1 -1
- package/dist/src/scheduler/policy.js +1 -2
- package/dist/src/scheduler/policy.js.map +1 -1
- package/dist/src/scheduler/policy.test.js +35 -2
- package/dist/src/scheduler/policy.test.js.map +1 -1
- package/dist/src/scheduler/scheduler.js +1 -0
- package/dist/src/scheduler/scheduler.js.map +1 -1
- package/dist/src/scheduler/scheduler.test.js +2 -0
- package/dist/src/scheduler/scheduler.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_hooks.test.js +1 -0
- package/dist/src/scheduler/scheduler_hooks.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_parallel.test.js +1 -0
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +1 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +1 -0
- package/dist/src/services/chatRecordingService.js +48 -19
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/memoryService.d.ts +15 -1
- package/dist/src/services/memoryService.js +276 -57
- package/dist/src/services/memoryService.js.map +1 -1
- package/dist/src/services/memoryService.test.js +296 -2
- package/dist/src/services/memoryService.test.js.map +1 -1
- package/dist/src/services/sandboxManager.integration.test.js +204 -0
- package/dist/src/services/sandboxManager.integration.test.js.map +1 -1
- package/dist/src/services/sandboxManager.js +16 -0
- package/dist/src/services/sandboxManager.js.map +1 -1
- package/dist/src/services/sessionSummaryUtils.d.ts +1 -1
- package/dist/src/services/sessionSummaryUtils.js +111 -38
- package/dist/src/services/sessionSummaryUtils.js.map +1 -1
- package/dist/src/services/sessionSummaryUtils.test.js +204 -51
- package/dist/src/services/sessionSummaryUtils.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +7 -1
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/telemetry/config.js +3 -0
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/conseca-logger.test.js +1 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +72 -4
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +1 -0
- package/dist/src/telemetry/memory-monitor.js +8 -1
- package/dist/src/telemetry/memory-monitor.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.test.js +6 -1
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +1 -0
- package/dist/src/telemetry/trace.js +33 -13
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/trace.test.js +50 -10
- package/dist/src/telemetry/trace.test.js.map +1 -1
- package/dist/src/telemetry/types.js +11 -4
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/definitions/base-declarations.d.ts +2 -0
- package/dist/src/tools/definitions/base-declarations.js +3 -0
- package/dist/src/tools/definitions/base-declarations.js.map +1 -1
- package/dist/src/tools/definitions/coreTools.d.ts +3 -1
- package/dist/src/tools/definitions/coreTools.js +13 -1
- package/dist/src/tools/definitions/coreTools.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +29 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js +29 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
- package/dist/src/tools/definitions/types.d.ts +2 -0
- package/dist/src/tools/get-internal-docs.js +5 -2
- package/dist/src/tools/get-internal-docs.js.map +1 -1
- package/dist/src/tools/list-mcp-resources.d.ts +24 -0
- package/dist/src/tools/list-mcp-resources.js +74 -0
- package/dist/src/tools/list-mcp-resources.js.map +1 -0
- package/dist/src/tools/list-mcp-resources.test.d.ts +6 -0
- package/dist/src/tools/list-mcp-resources.test.js +79 -0
- package/dist/src/tools/list-mcp-resources.test.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.d.ts +3 -1
- package/dist/src/tools/mcp-client-manager.js +24 -1
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +43 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +2 -1
- package/dist/src/tools/memoryTool.js +42 -13
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +23 -3
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-mcp-resource.d.ts +25 -0
- package/dist/src/tools/read-mcp-resource.js +120 -0
- package/dist/src/tools/read-mcp-resource.js.map +1 -0
- package/dist/src/tools/read-mcp-resource.test.d.ts +6 -0
- package/dist/src/tools/read-mcp-resource.test.js +110 -0
- package/dist/src/tools/read-mcp-resource.test.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +3 -2
- package/dist/src/tools/ripGrep.js +25 -54
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +73 -131
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.js +38 -12
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +410 -25
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +1 -0
- package/dist/src/tools/tool-error.js +1 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +4 -4
- package/dist/src/tools/tool-names.js +6 -2
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-registry.js +8 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
- package/dist/src/utils/filesearch/fileSearch.js +97 -6
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +54 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileWatcher.d.ts +25 -0
- package/dist/src/utils/filesearch/fileWatcher.js +86 -0
- package/dist/src/utils/filesearch/fileWatcher.js.map +1 -0
- package/dist/src/utils/filesearch/fileWatcher.test.d.ts +6 -0
- package/dist/src/utils/filesearch/fileWatcher.test.js +142 -0
- package/dist/src/utils/filesearch/fileWatcher.test.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.js +1 -1
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/ignoreFileParser.js +1 -1
- package/dist/src/utils/ignoreFileParser.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +15 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/retry.js +18 -6
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +30 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +1 -0
- package/dist/src/utils/shell-utils.js +106 -0
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/vendor/ripgrep/rg-darwin-arm64 +0 -0
- package/vendor/ripgrep/rg-darwin-x64 +0 -0
- package/vendor/ripgrep/rg-linux-arm64 +0 -0
- package/vendor/ripgrep/rg-linux-x64 +0 -0
- package/vendor/ripgrep/rg-win32-x64.exe +0 -0
- package/dist/docs/get-started/installation.md +0 -181
- package/dist/google-gemini-cli-core-0.39.0-preview.1.tgz +0 -0
- package/dist/src/agents/memory-manager-agent.d.ts +0 -25
- package/dist/src/agents/memory-manager-agent.js +0 -138
- package/dist/src/agents/memory-manager-agent.js.map +0 -1
- package/dist/src/agents/memory-manager-agent.test.js +0 -123
- package/dist/src/agents/memory-manager-agent.test.js.map +0 -1
- package/dist/src/prompts/snippets-memory-manager.test.js +0 -31
- package/dist/src/prompts/snippets-memory-manager.test.js.map +0 -1
- /package/dist/src/agents/{memory-manager-agent.test.d.ts → skill-extraction-agent.test.d.ts} +0 -0
- /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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 ??
|
|
554
|
-
this.
|
|
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 ??
|
|
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
|
-
|
|
1534
|
-
return this.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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)));
|