From cc9b9e5cf83e1b930ea92b065c1b0679006a5eb3 Mon Sep 17 00:00:00 2001 From: prashantpandeygit Date: Thu, 25 Dec 2025 21:01:35 +0530 Subject: [PATCH] added a plimit wrapper to read 20 files at once --- packages/core/package.json | 1 + packages/core/src/tools/read-many-files.ts | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index e5ac496..e623f73 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,6 +21,7 @@ ], "dependencies": { "@google/genai": "^1.26.0", + "p-limit": "^6.2.0", "@lvce-editor/ripgrep": "^1.6.0", "@modelcontextprotocol/sdk": "^1.11.0", "xlsx": "^0.18.5", diff --git a/packages/core/src/tools/read-many-files.ts b/packages/core/src/tools/read-many-files.ts index 1eed74c..b9b8198 100644 --- a/packages/core/src/tools/read-many-files.ts +++ b/packages/core/src/tools/read-many-files.ts @@ -27,6 +27,7 @@ import { getProgrammingLanguage } from '../telemetry/telemetry-utils.js'; import { logFileOperation } from '../telemetry/loggers.js'; import { FileOperationEvent } from '../telemetry/types.js'; import { ToolErrorType } from './tool-error.js'; +import pLimit from 'p-limit'; /** * Parameters for the ReadManyFilesTool. @@ -327,8 +328,12 @@ ${finalExclusionPatternsForDescription const file_line_limit = DEFAULT_MAX_LINES_TEXT_FILE / Math.max(1, sortedFiles.length); - const fileProcessingPromises = sortedFiles.map( - async (filePath): Promise => { + // to prevent too many open files errors + const MAX_CONCURRENT_FILE_OPS = 20; + const limit = pLimit(MAX_CONCURRENT_FILE_OPS); + + const fileProcessingPromises = sortedFiles.map((filePath) => + limit(async (): Promise => { try { const relativePathForDisplay = path .relative(this.config.getTargetDir(), filePath) @@ -395,7 +400,7 @@ ${finalExclusionPatternsForDescription reason: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`, }; } - }, + }), ); const results = await Promise.allSettled(fileProcessingPromises);