From 3d7cb3fb8aca04f55e92e3d3b7b4a415efe4c799 Mon Sep 17 00:00:00 2001 From: Abhi <43648792+abhipatel12@users.noreply.github.com> Date: Fri, 26 Sep 2025 13:37:00 -0400 Subject: [PATCH] refactor(core): Extract file filtering constants from Config to break circular dependency (#9974) --- packages/core/src/config/config.ts | 23 ++++++++----------- packages/core/src/config/constants.ts | 22 ++++++++++++++++++ packages/core/src/tools/glob.ts | 6 ++--- packages/core/src/tools/ls.ts | 2 +- packages/core/src/utils/bfsFileSearch.ts | 2 +- packages/core/src/utils/getFolderStructure.ts | 4 ++-- packages/core/src/utils/memoryDiscovery.ts | 4 ++-- 7 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 packages/core/src/config/constants.ts diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index a916333408..530d4caf0f 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -129,19 +129,16 @@ export interface ExtensionInstallMetadata { autoUpdate?: boolean; } -export interface FileFilteringOptions { - respectGitIgnore: boolean; - respectGeminiIgnore: boolean; -} -// For memory files -export const DEFAULT_MEMORY_FILE_FILTERING_OPTIONS: FileFilteringOptions = { - respectGitIgnore: false, - respectGeminiIgnore: true, -}; -// For all other files -export const DEFAULT_FILE_FILTERING_OPTIONS: FileFilteringOptions = { - respectGitIgnore: true, - respectGeminiIgnore: true, +import type { FileFilteringOptions } from './constants.js'; +import { + DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, + DEFAULT_FILE_FILTERING_OPTIONS, +} from './constants.js'; + +export type { FileFilteringOptions }; +export { + DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, + DEFAULT_FILE_FILTERING_OPTIONS, }; export const DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD = 4_000_000; diff --git a/packages/core/src/config/constants.ts b/packages/core/src/config/constants.ts new file mode 100644 index 0000000000..75ef3e4979 --- /dev/null +++ b/packages/core/src/config/constants.ts @@ -0,0 +1,22 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export interface FileFilteringOptions { + respectGitIgnore: boolean; + respectGeminiIgnore: boolean; +} + +// For memory files +export const DEFAULT_MEMORY_FILE_FILTERING_OPTIONS: FileFilteringOptions = { + respectGitIgnore: false, + respectGeminiIgnore: true, +}; + +// For all other files +export const DEFAULT_FILE_FILTERING_OPTIONS: FileFilteringOptions = { + respectGitIgnore: true, + respectGeminiIgnore: true, +}; diff --git a/packages/core/src/tools/glob.ts b/packages/core/src/tools/glob.ts index 895b6c9e8a..8d97f3e4c1 100644 --- a/packages/core/src/tools/glob.ts +++ b/packages/core/src/tools/glob.ts @@ -10,10 +10,8 @@ import { glob, escape } from 'glob'; import type { ToolInvocation, ToolResult } from './tools.js'; import { BaseDeclarativeTool, BaseToolInvocation, Kind } from './tools.js'; import { shortenPath, makeRelative } from '../utils/paths.js'; -import { - type Config, - DEFAULT_FILE_FILTERING_OPTIONS, -} from '../config/config.js'; +import { type Config } from '../config/config.js'; +import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/constants.js'; import { ToolErrorType } from './tool-error.js'; // Subset of 'Path' interface provided by 'glob' that we can implement for testing diff --git a/packages/core/src/tools/ls.ts b/packages/core/src/tools/ls.ts index 09c26c796e..2f60f6ea19 100644 --- a/packages/core/src/tools/ls.ts +++ b/packages/core/src/tools/ls.ts @@ -10,7 +10,7 @@ import type { ToolInvocation, ToolResult } from './tools.js'; import { BaseDeclarativeTool, BaseToolInvocation, Kind } from './tools.js'; import { makeRelative, shortenPath } from '../utils/paths.js'; import type { Config } from '../config/config.js'; -import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/config.js'; +import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/constants.js'; import { ToolErrorType } from './tool-error.js'; /** diff --git a/packages/core/src/utils/bfsFileSearch.ts b/packages/core/src/utils/bfsFileSearch.ts index 2d66f719b7..cdec2333e9 100644 --- a/packages/core/src/utils/bfsFileSearch.ts +++ b/packages/core/src/utils/bfsFileSearch.ts @@ -7,7 +7,7 @@ import * as fs from 'node:fs/promises'; import * as path from 'node:path'; import type { FileDiscoveryService } from '../services/fileDiscoveryService.js'; -import type { FileFilteringOptions } from '../config/config.js'; +import type { FileFilteringOptions } from '../config/constants.js'; // Simple console logger for now. // TODO: Integrate with a more robust server-side logger. const logger = { diff --git a/packages/core/src/utils/getFolderStructure.ts b/packages/core/src/utils/getFolderStructure.ts index fd80e43870..734b9acbb2 100644 --- a/packages/core/src/utils/getFolderStructure.ts +++ b/packages/core/src/utils/getFolderStructure.ts @@ -9,8 +9,8 @@ import type { Dirent } from 'node:fs'; import * as path from 'node:path'; import { getErrorMessage, isNodeError } from './errors.js'; import type { FileDiscoveryService } from '../services/fileDiscoveryService.js'; -import type { FileFilteringOptions } from '../config/config.js'; -import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/config.js'; +import type { FileFilteringOptions } from '../config/constants.js'; +import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/constants.js'; const MAX_ITEMS = 200; const TRUNCATION_INDICATOR = '...'; diff --git a/packages/core/src/utils/memoryDiscovery.ts b/packages/core/src/utils/memoryDiscovery.ts index dc7ce0c22a..a2d9ed1e3e 100644 --- a/packages/core/src/utils/memoryDiscovery.ts +++ b/packages/core/src/utils/memoryDiscovery.ts @@ -12,8 +12,8 @@ import { bfsFileSearch } from './bfsFileSearch.js'; import { getAllGeminiMdFilenames } from '../tools/memoryTool.js'; import type { FileDiscoveryService } from '../services/fileDiscoveryService.js'; import { processImports } from './memoryImportProcessor.js'; -import type { FileFilteringOptions } from '../config/config.js'; -import { DEFAULT_MEMORY_FILE_FILTERING_OPTIONS } from '../config/config.js'; +import type { FileFilteringOptions } from '../config/constants.js'; +import { DEFAULT_MEMORY_FILE_FILTERING_OPTIONS } from '../config/constants.js'; import { GEMINI_DIR } from './paths.js'; // Simple console logger, similar to the one previously in CLI's config.ts