From f79193d1390ba47da0b3e2c17e1f911646cf2748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=90=E7=9B=AE?= Date: Thu, 23 Apr 2026 18:52:10 +0800 Subject: [PATCH] fix(core): treat empty 'pages' parameter as unset in ReadFile params.pages !== undefined let "" fall through to parsePDFPageRange(''), which returns null and surfaced "Invalid pages parameter: ''" for every read_file call from models that default optional strings to "". Switch to a truthy check so "" behaves the same as an omitted field, and add a regression test. Fixes #3558 --- packages/core/src/tools/read-file.test.ts | 8 ++++++++ packages/core/src/tools/read-file.ts | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/core/src/tools/read-file.test.ts b/packages/core/src/tools/read-file.test.ts index b3c80214499..e0003f82086 100644 --- a/packages/core/src/tools/read-file.test.ts +++ b/packages/core/src/tools/read-file.test.ts @@ -480,6 +480,14 @@ describe('ReadFileTool', () => { expect(() => tool.build(params)).not.toThrow(); }); + it('should treat empty pages parameter as unset', () => { + const params: ReadFileToolParams = { + file_path: path.join(tempRootDir, 'test.txt'), + pages: '', + }; + expect(() => tool.build(params)).not.toThrow(); + }); + it('should support offset and limit for text files', async () => { const filePath = path.join(tempRootDir, 'paginated.txt'); const lines = Array.from({ length: 20 }, (_, i) => `Line ${i + 1}`); diff --git a/packages/core/src/tools/read-file.ts b/packages/core/src/tools/read-file.ts index 315ddd6b170..c05740b524c 100644 --- a/packages/core/src/tools/read-file.ts +++ b/packages/core/src/tools/read-file.ts @@ -264,7 +264,7 @@ export class ReadFileTool extends BaseDeclarativeTool< return 'Limit must be a positive number'; } - if (params.pages !== undefined) { + if (params.pages) { const parsed = parsePDFPageRange(params.pages); if (!parsed) { return `Invalid pages parameter: '${params.pages}'. Use formats like '5' or '1-10'.`;