fix(cli): prevent OOM crash by limiting file search traversal and adding timeout (#16696)

This commit is contained in:
Gal Zahavi
2026-01-15 12:04:22 -08:00
committed by GitHub
parent 48fdb9872f
commit e77d7b2e1e
7 changed files with 126 additions and 3 deletions
+14
View File
@@ -310,6 +310,8 @@ export interface ConfigParameters {
respectGeminiIgnore?: boolean;
enableRecursiveFileSearch?: boolean;
disableFuzzySearch?: boolean;
maxFileCount?: number;
searchTimeout?: number;
};
checkpointing?: boolean;
proxy?: string;
@@ -441,6 +443,8 @@ export class Config {
respectGeminiIgnore: boolean;
enableRecursiveFileSearch: boolean;
disableFuzzySearch: boolean;
maxFileCount: number;
searchTimeout: number;
};
private fileDiscoveryService: FileDiscoveryService | null = null;
private gitService: GitService | undefined = undefined;
@@ -593,6 +597,14 @@ export class Config {
enableRecursiveFileSearch:
params.fileFiltering?.enableRecursiveFileSearch ?? true,
disableFuzzySearch: params.fileFiltering?.disableFuzzySearch ?? false,
maxFileCount:
params.fileFiltering?.maxFileCount ??
DEFAULT_FILE_FILTERING_OPTIONS.maxFileCount ??
20000,
searchTimeout:
params.fileFiltering?.searchTimeout ??
DEFAULT_FILE_FILTERING_OPTIONS.searchTimeout ??
5000,
};
this.checkpointing = params.checkpointing ?? false;
this.proxy = params.proxy;
@@ -1385,6 +1397,8 @@ export class Config {
return {
respectGitIgnore: this.fileFiltering.respectGitIgnore,
respectGeminiIgnore: this.fileFiltering.respectGeminiIgnore,
maxFileCount: this.fileFiltering.maxFileCount,
searchTimeout: this.fileFiltering.searchTimeout,
};
}
+6
View File
@@ -7,16 +7,22 @@
export interface FileFilteringOptions {
respectGitIgnore: boolean;
respectGeminiIgnore: boolean;
maxFileCount?: number;
searchTimeout?: number;
}
// For memory files
export const DEFAULT_MEMORY_FILE_FILTERING_OPTIONS: FileFilteringOptions = {
respectGitIgnore: false,
respectGeminiIgnore: true,
maxFileCount: 20000,
searchTimeout: 5000,
};
// For all other files
export const DEFAULT_FILE_FILTERING_OPTIONS: FileFilteringOptions = {
respectGitIgnore: true,
respectGeminiIgnore: true,
maxFileCount: 20000,
searchTimeout: 5000,
};