diff options
| author | Ramón Medrano Llamas <[email protected]> | 2025-07-28 17:46:43 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-28 15:46:43 +0000 |
| commit | 0170791800183b81e2afc98f8fb2368219bfb3e3 (patch) | |
| tree | aa413e1c0c608403b2ac0053169ab98dd896e415 /packages/core/src | |
| parent | e2754416516edb8c27e63cee5b249f41c3e0fffc (diff) | |
feat: Add /config refresh command (#4993)
Co-authored-by: Bryan Morgan <[email protected]>
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/config/config.ts | 130 |
1 files changed, 97 insertions, 33 deletions
diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 7ccfdbc8..e03abe8a 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -188,60 +188,62 @@ export interface ConfigParameters { export class Config { private toolRegistry!: ToolRegistry; private promptRegistry!: PromptRegistry; - private readonly sessionId: string; + private sessionId: string; private contentGeneratorConfig!: ContentGeneratorConfig; - private readonly embeddingModel: string; - private readonly sandbox: SandboxConfig | undefined; - private readonly targetDir: string; - private readonly debugMode: boolean; - private readonly question: string | undefined; - private readonly fullContext: boolean; - private readonly coreTools: string[] | undefined; - private readonly excludeTools: string[] | undefined; - private readonly toolDiscoveryCommand: string | undefined; - private readonly toolCallCommand: string | undefined; - private readonly mcpServerCommand: string | undefined; - private readonly mcpServers: Record<string, MCPServerConfig> | undefined; + private embeddingModel: string; + private sandbox: SandboxConfig | undefined; + private targetDir: string; + private debugMode: boolean; + private question: string | undefined; + private fullContext: boolean; + private coreTools: string[] | undefined; + private excludeTools: string[] | undefined; + private toolDiscoveryCommand: string | undefined; + private toolCallCommand: string | undefined; + private mcpServerCommand: string | undefined; + private mcpServers: Record<string, MCPServerConfig> | undefined; private userMemory: string; private geminiMdFileCount: number; private approvalMode: ApprovalMode; - private readonly showMemoryUsage: boolean; - private readonly accessibility: AccessibilitySettings; - private readonly telemetrySettings: TelemetrySettings; - private readonly usageStatisticsEnabled: boolean; + private showMemoryUsage: boolean; + private accessibility: AccessibilitySettings; + private telemetrySettings: TelemetrySettings; + private usageStatisticsEnabled: boolean; private geminiClient!: GeminiClient; - private readonly fileFiltering: { + private fileFiltering: { respectGitIgnore: boolean; respectGeminiIgnore: boolean; enableRecursiveFileSearch: boolean; }; private fileDiscoveryService: FileDiscoveryService | null = null; private gitService: GitService | undefined = undefined; - private readonly checkpointing: boolean; - private readonly proxy: string | undefined; - private readonly cwd: string; - private readonly bugCommand: BugCommandSettings | undefined; - private readonly model: string; - private readonly extensionContextFilePaths: string[]; - private readonly noBrowser: boolean; - private readonly ideMode: boolean; - private readonly ideClient: IdeClient | undefined; + private checkpointing: boolean; + private proxy: string | undefined; + private cwd: string; + private bugCommand: BugCommandSettings | undefined; + private model: string; + private extensionContextFilePaths: string[]; + private noBrowser: boolean; + private ideMode: boolean; + private ideClient: IdeClient | undefined; private modelSwitchedDuringSession: boolean = false; - private readonly maxSessionTurns: number; - private readonly listExtensions: boolean; - private readonly _extensions: GeminiCLIExtension[]; - private readonly _blockedMcpServers: Array<{ + private maxSessionTurns: number; + private listExtensions: boolean; + private _extensions: GeminiCLIExtension[]; + private _blockedMcpServers: Array<{ name: string; extensionName: string; }>; flashFallbackHandler?: FlashFallbackHandler; private quotaErrorOccurred: boolean = false; - private readonly summarizeToolOutput: + private summarizeToolOutput: | Record<string, SummarizeToolOutputSettings> | undefined; - private readonly experimentalAcp: boolean = false; + private experimentalAcp: boolean = false; + private _params: ConfigParameters; constructor(params: ConfigParameters) { + this._params = params; this.sessionId = params.sessionId; this.embeddingModel = params.embeddingModel ?? DEFAULT_GEMINI_EMBEDDING_MODEL; @@ -310,6 +312,68 @@ export class Config { } } + async refresh() { + // Re-run initialization logic. + await this.initialize(); + // After re-initializing, the tool registry will be updated. + // We need to update the gemini client with the new tools. + await this.geminiClient.setTools(); + } + + update(params: ConfigParameters) { + this._params = params; + // Re-assign all properties from the new params. + this.sessionId = params.sessionId; + this.embeddingModel = + params.embeddingModel ?? DEFAULT_GEMINI_EMBEDDING_MODEL; + this.sandbox = params.sandbox; + this.targetDir = path.resolve(params.targetDir); + this.debugMode = params.debugMode; + this.question = params.question; + this.fullContext = params.fullContext ?? false; + this.coreTools = params.coreTools; + this.excludeTools = params.excludeTools; + this.toolDiscoveryCommand = params.toolDiscoveryCommand; + this.toolCallCommand = params.toolCallCommand; + this.mcpServerCommand = params.mcpServerCommand; + this.mcpServers = params.mcpServers; + this.userMemory = params.userMemory ?? ''; + this.geminiMdFileCount = params.geminiMdFileCount ?? 0; + this.approvalMode = params.approvalMode ?? ApprovalMode.DEFAULT; + this.showMemoryUsage = params.showMemoryUsage ?? false; + this.accessibility = params.accessibility ?? {}; + this.telemetrySettings = { + enabled: params.telemetry?.enabled ?? false, + target: params.telemetry?.target ?? DEFAULT_TELEMETRY_TARGET, + otlpEndpoint: params.telemetry?.otlpEndpoint ?? DEFAULT_OTLP_ENDPOINT, + logPrompts: params.telemetry?.logPrompts ?? true, + outfile: params.telemetry?.outfile, + }; + this.usageStatisticsEnabled = params.usageStatisticsEnabled ?? true; + this.fileFiltering = { + respectGitIgnore: params.fileFiltering?.respectGitIgnore ?? true, + respectGeminiIgnore: params.fileFiltering?.respectGeminiIgnore ?? true, + enableRecursiveFileSearch: + params.fileFiltering?.enableRecursiveFileSearch ?? true, + }; + this.checkpointing = params.checkpointing ?? false; + this.proxy = params.proxy; + this.cwd = params.cwd ?? process.cwd(); + this.fileDiscoveryService = params.fileDiscoveryService ?? null; + this.bugCommand = params.bugCommand; + this.model = params.model; + this.extensionContextFilePaths = params.extensionContextFilePaths ?? []; + this.maxSessionTurns = params.maxSessionTurns ?? -1; + this.experimentalAcp = params.experimentalAcp ?? false; + this.listExtensions = params.listExtensions ?? false; + this._extensions = params.extensions ?? []; + this._blockedMcpServers = params.blockedMcpServers ?? []; + this.noBrowser = params.noBrowser ?? false; + this.summarizeToolOutput = params.summarizeToolOutput; + this.ideMode = params.ideMode ?? false; + this.ideClient = params.ideClient; + } + async initialize(): Promise<void> { // Initialize centralized FileDiscoveryService this.getFileService(); |
