From b47a4240ff02484ec9c80e99f4a87c3c57b87f31 Mon Sep 17 00:00:00 2001 From: Billy Biggs Date: Mon, 23 Jun 2025 23:48:26 -0700 Subject: [PATCH] Bug/1369 at command recursive search (#1370) --- .../src/ui/hooks/atCommandProcessor.test.ts | 32 +++++++++++++++++++ .../cli/src/ui/hooks/atCommandProcessor.ts | 8 ++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts index 6380a187..572131af 100644 --- a/packages/cli/src/ui/hooks/atCommandProcessor.test.ts +++ b/packages/cli/src/ui/hooks/atCommandProcessor.test.ts @@ -21,6 +21,7 @@ const mockConfig = { isSandboxed: vi.fn(() => false), getFileService: vi.fn(), getFileFilteringRespectGitIgnore: vi.fn(() => true), + getEnableRecursiveFileSearch: vi.fn(() => true), } as unknown as Config; const mockReadManyFilesExecute = vi.fn(); @@ -720,4 +721,35 @@ describe('handleAtCommand', () => { expect(result.shouldProceed).toBe(true); }); }); + + describe('when recursive file search is disabled', () => { + beforeEach(() => { + vi.mocked(mockConfig.getEnableRecursiveFileSearch).mockReturnValue(false); + }); + + it('should not use glob search for a nonexistent file', async () => { + const invalidFile = 'nonexistent.txt'; + const query = `@${invalidFile}`; + + vi.mocked(fsPromises.stat).mockRejectedValue( + Object.assign(new Error('ENOENT'), { code: 'ENOENT' }), + ); + + const result = await handleAtCommand({ + query, + config: mockConfig, + addItem: mockAddItem, + onDebugMessage: mockOnDebugMessage, + messageId: 300, + signal: abortController.signal, + }); + + expect(mockGlobExecute).not.toHaveBeenCalled(); + expect(mockOnDebugMessage).toHaveBeenCalledWith( + `Glob tool not found. Path ${invalidFile} will be skipped.`, + ); + expect(result.processedQuery).toEqual([{ text: query }]); + expect(result.shouldProceed).toBe(true); + }); + }); }); diff --git a/packages/cli/src/ui/hooks/atCommandProcessor.ts b/packages/cli/src/ui/hooks/atCommandProcessor.ts index d6c5eded..3bbdce0d 100644 --- a/packages/cli/src/ui/hooks/atCommandProcessor.ts +++ b/packages/cli/src/ui/hooks/atCommandProcessor.ts @@ -210,10 +210,10 @@ export async function handleAtCommand({ resolvedSuccessfully = true; } catch (error) { if (isNodeError(error) && error.code === 'ENOENT') { - onDebugMessage( - `Path ${pathName} not found directly, attempting glob search.`, - ); - if (globTool) { + if (config.getEnableRecursiveFileSearch() && globTool) { + onDebugMessage( + `Path ${pathName} not found directly, attempting glob search.`, + ); try { const globResult = await globTool.execute( { pattern: `**/*${pathName}*`, path: config.getTargetDir() },