@google/gemini-cli-core 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -3
- package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
- package/dist/src/code_assist/codeAssist.js +2 -2
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +46 -5
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +100 -3
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +4 -6
- package/dist/src/code_assist/server.js +4 -69
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +10 -2
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +6 -1
- package/dist/src/code_assist/setup.js +4 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +4 -1
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +2 -2
- package/dist/src/config/config.d.ts +52 -11
- package/dist/src/config/config.js +79 -33
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +29 -26
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +1 -1
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/core/client.d.ts +8 -3
- package/dist/src/core/client.js +62 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +145 -37
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -2
- package/dist/src/core/contentGenerator.js +5 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +12 -5
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +14 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +84 -2
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +4 -3
- package/dist/src/core/geminiChat.js +8 -11
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiRequest.js +2 -37
- package/dist/src/core/geminiRequest.js.map +1 -1
- package/dist/src/core/logger.js +6 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +1 -1
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/modelCheck.d.ts +1 -1
- package/dist/src/core/modelCheck.js +10 -3
- package/dist/src/core/modelCheck.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +8 -5
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +42 -18
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +121 -4
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +12 -3
- package/dist/src/core/turn.js +10 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +129 -0
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +28 -0
- package/dist/src/ide/ide-client.js +79 -0
- package/dist/src/ide/ide-client.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +174 -0
- package/dist/src/ide/ideContext.js +101 -0
- package/dist/src/ide/ideContext.js.map +1 -0
- package/dist/src/ide/ideContext.test.js +111 -0
- package/dist/src/ide/ideContext.test.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +23 -0
- package/dist/src/mcp/google-auth-provider.js +63 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
- package/dist/src/mcp/google-auth-provider.test.js +54 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +142 -0
- package/dist/src/mcp/oauth-provider.js +446 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/oauth-provider.test.js +520 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
- package/dist/src/mcp/oauth-token-storage.js +149 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/oauth-token-storage.test.js +205 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +109 -0
- package/dist/src/mcp/oauth-utils.js +183 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.test.js +144 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -0
- package/dist/src/services/gitService.js +1 -5
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +1 -6
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +94 -0
- package/dist/src/services/loopDetectionService.js +318 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/loopDetectionService.test.d.ts +6 -0
- package/dist/src/services/loopDetectionService.test.js +266 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +69 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -0
- package/dist/src/telemetry/constants.js +1 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +28 -0
- package/dist/src/telemetry/file-exporters.js +62 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +53 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +3 -1
- package/dist/src/telemetry/loggers.js +34 -2
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +100 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/sdk.js +17 -6
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +19 -1
- package/dist/src/telemetry/types.js +28 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +7 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +92 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +7 -12
- package/dist/src/tools/edit.js +34 -32
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +12 -0
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -14
- package/dist/src/tools/glob.js +13 -36
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +4 -3
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -6
- package/dist/src/tools/grep.js +12 -18
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +5 -2
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +6 -14
- package/dist/src/tools/ls.js +47 -40
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +59 -1
- package/dist/src/tools/mcp-client.js +557 -146
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +166 -623
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +11 -5
- package/dist/src/tools/mcp-tool.js +34 -10
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +74 -24
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +2 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +3 -3
- package/dist/src/tools/read-file.js +10 -10
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +100 -70
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +6 -10
- package/dist/src/tools/read-many-files.js +74 -43
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +7 -3
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +2 -23
- package/dist/src/tools/shell.js +58 -138
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +85 -311
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +13 -2
- package/dist/src/tools/tool-registry.js +57 -10
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +112 -41
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +37 -2
- package/dist/src/tools/tools.js +25 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +7 -2
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +1 -0
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +2 -2
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +0 -8
- package/dist/src/tools/write-file.js +14 -23
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +2 -0
- package/dist/src/utils/bfsFileSearch.js +4 -1
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +108 -105
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +49 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/editCorrector.js +4 -4
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +1 -1
- package/dist/src/utils/editor.js +16 -10
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +128 -28
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/errorReporting.d.ts +1 -1
- package/dist/src/utils/errorReporting.js +2 -2
- package/dist/src/utils/errorReporting.js.map +1 -1
- package/dist/src/utils/errorReporting.test.js +44 -38
- package/dist/src/utils/errorReporting.test.js.map +1 -1
- package/dist/src/utils/errors.js +4 -4
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +4 -4
- package/dist/src/utils/fileUtils.js +33 -17
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +37 -37
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.d.ts +3 -2
- package/dist/src/utils/getFolderStructure.js +27 -28
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +169 -187
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.js +4 -7
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +70 -61
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +2 -1
- package/dist/src/utils/memoryDiscovery.js +11 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +160 -371
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/partUtils.d.ts +14 -0
- package/dist/src/utils/partUtils.js +65 -0
- package/dist/src/utils/partUtils.js.map +1 -0
- package/dist/src/utils/partUtils.test.d.ts +6 -0
- package/dist/src/utils/partUtils.test.js +130 -0
- package/dist/src/utils/partUtils.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +11 -0
- package/dist/src/utils/paths.js +17 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.js +2 -11
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.d.ts +6 -0
- package/dist/src/utils/retry.js +2 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
- package/dist/src/utils/safeJsonStringify.test.js +61 -0
- package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +1 -1
- package/dist/src/utils/schemaValidator.js +6 -3
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +44 -0
- package/dist/src/utils/shell-utils.js +243 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/shell-utils.test.d.ts +6 -0
- package/dist/src/utils/shell-utils.test.js +450 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +1 -1
- package/dist/src/utils/summarizer.js +11 -39
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +1 -1
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +149 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/systemEncoding.test.d.ts +6 -0
- package/dist/src/utils/systemEncoding.test.js +368 -0
- package/dist/src/utils/systemEncoding.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/dist/google-gemini-cli-core-0.1.11.tgz +0 -0
- package/dist/src/core/geminiRequest.test.js +0 -72
- package/dist/src/core/geminiRequest.test.js.map +0 -1
- /package/dist/src/{core/geminiRequest.test.d.ts → ide/ideContext.test.d.ts} +0 -0
|
@@ -3,41 +3,30 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
7
7
|
import { ReadFileTool } from './read-file.js';
|
|
8
|
-
import * as fileUtils from '../utils/fileUtils.js';
|
|
9
8
|
import path from 'path';
|
|
10
9
|
import os from 'os';
|
|
11
|
-
import fs from 'fs';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import fsp from 'fs/promises';
|
|
12
12
|
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
13
|
-
// Mock fileUtils.processSingleFileContent
|
|
14
|
-
vi.mock('../utils/fileUtils', async () => {
|
|
15
|
-
const actualFileUtils = await vi.importActual('../utils/fileUtils');
|
|
16
|
-
return {
|
|
17
|
-
...actualFileUtils, // Spread actual implementations
|
|
18
|
-
processSingleFileContent: vi.fn(), // Mock specific function
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
const mockProcessSingleFileContent = fileUtils.processSingleFileContent;
|
|
22
13
|
describe('ReadFileTool', () => {
|
|
23
14
|
let tempRootDir;
|
|
24
15
|
let tool;
|
|
25
16
|
const abortSignal = new AbortController().signal;
|
|
26
|
-
beforeEach(() => {
|
|
17
|
+
beforeEach(async () => {
|
|
27
18
|
// Create a unique temporary root directory for each test run
|
|
28
|
-
tempRootDir =
|
|
29
|
-
fs.writeFileSync(path.join(tempRootDir, '.geminiignore'), ['foo.*'].join('\n'));
|
|
30
|
-
const fileService = new FileDiscoveryService(tempRootDir);
|
|
19
|
+
tempRootDir = await fsp.mkdtemp(path.join(os.tmpdir(), 'read-file-tool-root-'));
|
|
31
20
|
const mockConfigInstance = {
|
|
32
|
-
getFileService: () =>
|
|
21
|
+
getFileService: () => new FileDiscoveryService(tempRootDir),
|
|
22
|
+
getTargetDir: () => tempRootDir,
|
|
33
23
|
};
|
|
34
|
-
tool = new ReadFileTool(
|
|
35
|
-
mockProcessSingleFileContent.mockReset();
|
|
24
|
+
tool = new ReadFileTool(mockConfigInstance);
|
|
36
25
|
});
|
|
37
|
-
afterEach(() => {
|
|
26
|
+
afterEach(async () => {
|
|
38
27
|
// Clean up the temporary root directory
|
|
39
28
|
if (fs.existsSync(tempRootDir)) {
|
|
40
|
-
|
|
29
|
+
await fsp.rm(tempRootDir, { recursive: true, force: true });
|
|
41
30
|
}
|
|
42
31
|
});
|
|
43
32
|
describe('validateToolParams', () => {
|
|
@@ -95,9 +84,7 @@ describe('ReadFileTool', () => {
|
|
|
95
84
|
it('should return a shortened, relative path', () => {
|
|
96
85
|
const filePath = path.join(tempRootDir, 'sub', 'dir', 'file.txt');
|
|
97
86
|
const params = { absolute_path: filePath };
|
|
98
|
-
|
|
99
|
-
// The relative path would be sub/dir/file.txt
|
|
100
|
-
expect(tool.getDescription(params)).toBe('sub/dir/file.txt');
|
|
87
|
+
expect(tool.getDescription(params)).toBe(path.join('sub', 'dir', 'file.txt'));
|
|
101
88
|
});
|
|
102
89
|
it('should return . if path is the root directory', () => {
|
|
103
90
|
const params = { absolute_path: tempRootDir };
|
|
@@ -106,74 +93,117 @@ describe('ReadFileTool', () => {
|
|
|
106
93
|
});
|
|
107
94
|
describe('execute', () => {
|
|
108
95
|
it('should return validation error if params are invalid', async () => {
|
|
109
|
-
const params = {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
expect(
|
|
96
|
+
const params = {
|
|
97
|
+
absolute_path: 'relative/path.txt',
|
|
98
|
+
};
|
|
99
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
100
|
+
llmContent: 'Error: Invalid parameters provided. Reason: File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.',
|
|
101
|
+
returnDisplay: 'File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.',
|
|
102
|
+
});
|
|
113
103
|
});
|
|
114
|
-
it('should return error
|
|
115
|
-
const filePath = path.join(tempRootDir, '
|
|
104
|
+
it('should return error if file does not exist', async () => {
|
|
105
|
+
const filePath = path.join(tempRootDir, 'nonexistent.txt');
|
|
116
106
|
const params = { absolute_path: filePath };
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
returnDisplay: `Error reading file ${filePath}: ${errorMessage}`,
|
|
121
|
-
error: errorMessage,
|
|
107
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
108
|
+
llmContent: `File not found: ${filePath}`,
|
|
109
|
+
returnDisplay: 'File not found.',
|
|
122
110
|
});
|
|
123
|
-
const result = await tool.execute(params, abortSignal);
|
|
124
|
-
expect(mockProcessSingleFileContent).toHaveBeenCalledWith(filePath, tempRootDir, undefined, undefined);
|
|
125
|
-
expect(result.llmContent).toContain(errorMessage);
|
|
126
|
-
expect(result.returnDisplay).toContain(errorMessage);
|
|
127
111
|
});
|
|
128
112
|
it('should return success result for a text file', async () => {
|
|
129
113
|
const filePath = path.join(tempRootDir, 'textfile.txt');
|
|
130
114
|
const fileContent = 'This is a test file.';
|
|
115
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
131
116
|
const params = { absolute_path: filePath };
|
|
132
|
-
|
|
117
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
133
118
|
llmContent: fileContent,
|
|
134
|
-
returnDisplay:
|
|
119
|
+
returnDisplay: '',
|
|
135
120
|
});
|
|
136
|
-
const result = await tool.execute(params, abortSignal);
|
|
137
|
-
expect(mockProcessSingleFileContent).toHaveBeenCalledWith(filePath, tempRootDir, undefined, undefined);
|
|
138
|
-
expect(result.llmContent).toBe(fileContent);
|
|
139
|
-
expect(result.returnDisplay).toBe(`Read text file: ${path.basename(filePath)}`);
|
|
140
121
|
});
|
|
141
122
|
it('should return success result for an image file', async () => {
|
|
123
|
+
// A minimal 1x1 transparent PNG file.
|
|
124
|
+
const pngContent = Buffer.from([
|
|
125
|
+
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,
|
|
126
|
+
1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 10, 73, 68, 65,
|
|
127
|
+
84, 120, 156, 99, 0, 1, 0, 0, 5, 0, 1, 13, 10, 45, 180, 0, 0, 0, 0, 73,
|
|
128
|
+
69, 78, 68, 174, 66, 96, 130,
|
|
129
|
+
]);
|
|
142
130
|
const filePath = path.join(tempRootDir, 'image.png');
|
|
143
|
-
|
|
144
|
-
inlineData: { mimeType: 'image/png', data: 'base64...' },
|
|
145
|
-
};
|
|
131
|
+
await fsp.writeFile(filePath, pngContent);
|
|
146
132
|
const params = { absolute_path: filePath };
|
|
147
|
-
|
|
148
|
-
llmContent:
|
|
149
|
-
|
|
133
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
134
|
+
llmContent: {
|
|
135
|
+
inlineData: {
|
|
136
|
+
mimeType: 'image/png',
|
|
137
|
+
data: pngContent.toString('base64'),
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
returnDisplay: `Read image file: image.png`,
|
|
150
141
|
});
|
|
151
|
-
const result = await tool.execute(params, abortSignal);
|
|
152
|
-
expect(mockProcessSingleFileContent).toHaveBeenCalledWith(filePath, tempRootDir, undefined, undefined);
|
|
153
|
-
expect(result.llmContent).toEqual(imageData);
|
|
154
|
-
expect(result.returnDisplay).toBe(`Read image file: ${path.basename(filePath)}`);
|
|
155
142
|
});
|
|
156
|
-
it('should
|
|
143
|
+
it('should treat a non-image file with image extension as an image', async () => {
|
|
144
|
+
const filePath = path.join(tempRootDir, 'fake-image.png');
|
|
145
|
+
const fileContent = 'This is not a real png.';
|
|
146
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
147
|
+
const params = { absolute_path: filePath };
|
|
148
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
149
|
+
llmContent: {
|
|
150
|
+
inlineData: {
|
|
151
|
+
mimeType: 'image/png',
|
|
152
|
+
data: Buffer.from(fileContent).toString('base64'),
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
returnDisplay: `Read image file: fake-image.png`,
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
it('should pass offset and limit to read a slice of a text file', async () => {
|
|
157
159
|
const filePath = path.join(tempRootDir, 'paginated.txt');
|
|
160
|
+
const fileContent = Array.from({ length: 20 }, (_, i) => `Line ${i + 1}`).join('\n');
|
|
161
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
158
162
|
const params = {
|
|
159
163
|
absolute_path: filePath,
|
|
160
|
-
offset:
|
|
161
|
-
limit:
|
|
164
|
+
offset: 5, // Start from line 6
|
|
165
|
+
limit: 3,
|
|
162
166
|
};
|
|
163
|
-
|
|
164
|
-
llmContent:
|
|
165
|
-
|
|
167
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
168
|
+
llmContent: [
|
|
169
|
+
'[File content truncated: showing lines 6-8 of 20 total lines. Use offset/limit parameters to view more.]',
|
|
170
|
+
'Line 6',
|
|
171
|
+
'Line 7',
|
|
172
|
+
'Line 8',
|
|
173
|
+
].join('\n'),
|
|
174
|
+
returnDisplay: '(truncated)',
|
|
166
175
|
});
|
|
167
|
-
await tool.execute(params, abortSignal);
|
|
168
|
-
expect(mockProcessSingleFileContent).toHaveBeenCalledWith(filePath, tempRootDir, 10, 5);
|
|
169
176
|
});
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
+
describe('with .geminiignore', () => {
|
|
178
|
+
beforeEach(async () => {
|
|
179
|
+
await fsp.writeFile(path.join(tempRootDir, '.geminiignore'), ['foo.*', 'ignored/'].join('\n'));
|
|
180
|
+
});
|
|
181
|
+
it('should return error if path is ignored by a .geminiignore pattern', async () => {
|
|
182
|
+
const ignoredFilePath = path.join(tempRootDir, 'foo.bar');
|
|
183
|
+
await fsp.writeFile(ignoredFilePath, 'content', 'utf-8');
|
|
184
|
+
const params = {
|
|
185
|
+
absolute_path: ignoredFilePath,
|
|
186
|
+
};
|
|
187
|
+
const expectedError = `File path '${ignoredFilePath}' is ignored by .geminiignore pattern(s).`;
|
|
188
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
189
|
+
llmContent: `Error: Invalid parameters provided. Reason: ${expectedError}`,
|
|
190
|
+
returnDisplay: expectedError,
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
it('should return error if path is in an ignored directory', async () => {
|
|
194
|
+
const ignoredDirPath = path.join(tempRootDir, 'ignored');
|
|
195
|
+
await fsp.mkdir(ignoredDirPath);
|
|
196
|
+
const filePath = path.join(ignoredDirPath, 'somefile.txt');
|
|
197
|
+
await fsp.writeFile(filePath, 'content', 'utf-8');
|
|
198
|
+
const params = {
|
|
199
|
+
absolute_path: filePath,
|
|
200
|
+
};
|
|
201
|
+
const expectedError = `File path '${filePath}' is ignored by .geminiignore pattern(s).`;
|
|
202
|
+
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
203
|
+
llmContent: `Error: Invalid parameters provided. Reason: ${expectedError}`,
|
|
204
|
+
returnDisplay: expectedError,
|
|
205
|
+
});
|
|
206
|
+
});
|
|
177
207
|
});
|
|
178
208
|
});
|
|
179
209
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.test.js","sourceRoot":"","sources":["../../../src/tools/read-file.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"read-file.test.js","sourceRoot":"","sources":["../../../src/tools/read-file.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,9 +39,12 @@ export interface ReadManyFilesParams {
|
|
|
39
39
|
*/
|
|
40
40
|
useDefaultExcludes?: boolean;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Whether to respect .gitignore and .geminiignore patterns (optional, defaults to true)
|
|
43
43
|
*/
|
|
44
|
-
|
|
44
|
+
file_filtering_options?: {
|
|
45
|
+
respect_git_ignore?: boolean;
|
|
46
|
+
respect_gemini_ignore?: boolean;
|
|
47
|
+
};
|
|
45
48
|
}
|
|
46
49
|
/**
|
|
47
50
|
* Tool implementation for finding and reading multiple text files from the local filesystem
|
|
@@ -49,16 +52,9 @@ export interface ReadManyFilesParams {
|
|
|
49
52
|
* It is intended to run in an environment with access to the local file system (e.g., a Node.js backend).
|
|
50
53
|
*/
|
|
51
54
|
export declare class ReadManyFilesTool extends BaseTool<ReadManyFilesParams, ToolResult> {
|
|
52
|
-
readonly targetDir: string;
|
|
53
55
|
private config;
|
|
54
56
|
static readonly Name: string;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Creates an instance of ReadManyFilesTool.
|
|
58
|
-
* @param targetDir The absolute root directory within which this tool is allowed to operate.
|
|
59
|
-
* All paths provided in `params` will be resolved relative to this directory.
|
|
60
|
-
*/
|
|
61
|
-
constructor(targetDir: string, config: Config);
|
|
57
|
+
constructor(config: Config);
|
|
62
58
|
validateParams(params: ReadManyFilesParams): string | null;
|
|
63
59
|
getDescription(params: ReadManyFilesParams): string;
|
|
64
60
|
execute(params: ReadManyFilesParams, signal: AbortSignal): Promise<ToolResult>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { BaseTool } from './tools.js';
|
|
6
|
+
import { BaseTool, Icon } from './tools.js';
|
|
7
7
|
import { SchemaValidator } from '../utils/schemaValidator.js';
|
|
8
8
|
import { getErrorMessage } from '../utils/errors.js';
|
|
9
9
|
import * as path from 'path';
|
|
@@ -11,6 +11,7 @@ import { glob } from 'glob';
|
|
|
11
11
|
import { getCurrentGeminiMdFilename } from './memoryTool.js';
|
|
12
12
|
import { detectFileType, processSingleFileContent, DEFAULT_ENCODING, getSpecificMimeType, } from '../utils/fileUtils.js';
|
|
13
13
|
import { Type } from '@google/genai';
|
|
14
|
+
import { DEFAULT_FILE_FILTERING_OPTIONS } from '../config/config.js';
|
|
14
15
|
import { recordFileOperationMetric, FileOperation, } from '../telemetry/metrics.js';
|
|
15
16
|
/**
|
|
16
17
|
* Default exclusion patterns for commonly ignored directories and binary file types.
|
|
@@ -63,16 +64,9 @@ const DEFAULT_OUTPUT_SEPARATOR_FORMAT = '--- {filePath} ---';
|
|
|
63
64
|
* It is intended to run in an environment with access to the local file system (e.g., a Node.js backend).
|
|
64
65
|
*/
|
|
65
66
|
export class ReadManyFilesTool extends BaseTool {
|
|
66
|
-
targetDir;
|
|
67
67
|
config;
|
|
68
68
|
static Name = 'read_many_files';
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Creates an instance of ReadManyFilesTool.
|
|
72
|
-
* @param targetDir The absolute root directory within which this tool is allowed to operate.
|
|
73
|
-
* All paths provided in `params` will be resolved relative to this directory.
|
|
74
|
-
*/
|
|
75
|
-
constructor(targetDir, config) {
|
|
69
|
+
constructor(config) {
|
|
76
70
|
const parameterSchema = {
|
|
77
71
|
type: Type.OBJECT,
|
|
78
72
|
properties: {
|
|
@@ -113,10 +107,19 @@ export class ReadManyFilesTool extends BaseTool {
|
|
|
113
107
|
description: 'Optional. Whether to apply a list of default exclusion patterns (e.g., node_modules, .git, binary files). Defaults to true.',
|
|
114
108
|
default: true,
|
|
115
109
|
},
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
110
|
+
file_filtering_options: {
|
|
111
|
+
description: 'Whether to respect ignore patterns from .gitignore or .geminiignore',
|
|
112
|
+
type: Type.OBJECT,
|
|
113
|
+
properties: {
|
|
114
|
+
respect_git_ignore: {
|
|
115
|
+
description: 'Optional: Whether to respect .gitignore patterns when listing files. Only available in git repositories. Defaults to true.',
|
|
116
|
+
type: Type.BOOLEAN,
|
|
117
|
+
},
|
|
118
|
+
respect_gemini_ignore: {
|
|
119
|
+
description: 'Optional: Whether to respect .geminiignore patterns when listing files. Defaults to true.',
|
|
120
|
+
type: Type.BOOLEAN,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
120
123
|
},
|
|
121
124
|
},
|
|
122
125
|
required: ['paths'],
|
|
@@ -130,13 +133,8 @@ This tool is useful when you need to understand or analyze a collection of files
|
|
|
130
133
|
- Gathering context from multiple configuration files.
|
|
131
134
|
- When the user asks to "read all files in X directory" or "show me the content of all Y files".
|
|
132
135
|
|
|
133
|
-
Use this tool when the user's query implies needing the content of several files simultaneously for context, analysis, or summarization. For text files, it uses default UTF-8 encoding and a '--- {filePath} ---' separator between file contents. Ensure paths are relative to the target directory. Glob patterns like 'src/**/*.js' are supported. Avoid using for single files if a more specific single-file reading tool is available, unless the user specifically requests to process a list containing just one file via this tool. Other binary files (not explicitly requested as image/PDF) are generally skipped. Default excludes apply to common non-text files (except for explicitly requested images/PDFs) and large dependency directories unless 'useDefaultExcludes' is false.`, parameterSchema);
|
|
134
|
-
this.targetDir = targetDir;
|
|
136
|
+
Use this tool when the user's query implies needing the content of several files simultaneously for context, analysis, or summarization. For text files, it uses default UTF-8 encoding and a '--- {filePath} ---' separator between file contents. Ensure paths are relative to the target directory. Glob patterns like 'src/**/*.js' are supported. Avoid using for single files if a more specific single-file reading tool is available, unless the user specifically requests to process a list containing just one file via this tool. Other binary files (not explicitly requested as image/PDF) are generally skipped. Default excludes apply to common non-text files (except for explicitly requested images/PDFs) and large dependency directories unless 'useDefaultExcludes' is false.`, Icon.FileSearch, parameterSchema);
|
|
135
137
|
this.config = config;
|
|
136
|
-
this.targetDir = path.resolve(targetDir);
|
|
137
|
-
this.geminiIgnorePatterns = config
|
|
138
|
-
.getFileService()
|
|
139
|
-
.getGeminiIgnorePatterns();
|
|
140
138
|
}
|
|
141
139
|
validateParams(params) {
|
|
142
140
|
const errors = SchemaValidator.validate(this.schema.parameters, params);
|
|
@@ -147,17 +145,20 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
147
145
|
}
|
|
148
146
|
getDescription(params) {
|
|
149
147
|
const allPatterns = [...params.paths, ...(params.include || [])];
|
|
150
|
-
const pathDesc = `using patterns: \`${allPatterns.join('`, `')}\` (within target directory: \`${this.
|
|
148
|
+
const pathDesc = `using patterns: \`${allPatterns.join('`, `')}\` (within target directory: \`${this.config.getTargetDir()}\`)`;
|
|
151
149
|
// Determine the final list of exclusion patterns exactly as in execute method
|
|
152
150
|
const paramExcludes = params.exclude || [];
|
|
153
151
|
const paramUseDefaultExcludes = params.useDefaultExcludes !== false;
|
|
152
|
+
const geminiIgnorePatterns = this.config
|
|
153
|
+
.getFileService()
|
|
154
|
+
.getGeminiIgnorePatterns();
|
|
154
155
|
const finalExclusionPatternsForDescription = paramUseDefaultExcludes
|
|
155
|
-
? [...DEFAULT_EXCLUDES, ...paramExcludes, ...
|
|
156
|
-
: [...paramExcludes, ...
|
|
156
|
+
? [...DEFAULT_EXCLUDES, ...paramExcludes, ...geminiIgnorePatterns]
|
|
157
|
+
: [...paramExcludes, ...geminiIgnorePatterns];
|
|
157
158
|
let excludeDesc = `Excluding: ${finalExclusionPatternsForDescription.length > 0 ? `patterns like \`${finalExclusionPatternsForDescription.slice(0, 2).join('`, `')}${finalExclusionPatternsForDescription.length > 2 ? '...`' : '`'}` : 'none specified'}`;
|
|
158
159
|
// Add a note if .geminiignore patterns contributed to the final list of exclusions
|
|
159
|
-
if (
|
|
160
|
-
const geminiPatternsInEffect =
|
|
160
|
+
if (geminiIgnorePatterns.length > 0) {
|
|
161
|
+
const geminiPatternsInEffect = geminiIgnorePatterns.filter((p) => finalExclusionPatternsForDescription.includes(p)).length;
|
|
161
162
|
if (geminiPatternsInEffect > 0) {
|
|
162
163
|
excludeDesc += ` (includes ${geminiPatternsInEffect} from .geminiignore)`;
|
|
163
164
|
}
|
|
@@ -172,18 +173,23 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
172
173
|
returnDisplay: `## Parameter Error\n\n${validationError}`,
|
|
173
174
|
};
|
|
174
175
|
}
|
|
175
|
-
const { paths: inputPatterns, include = [], exclude = [], useDefaultExcludes = true,
|
|
176
|
-
const
|
|
176
|
+
const { paths: inputPatterns, include = [], exclude = [], useDefaultExcludes = true, } = params;
|
|
177
|
+
const defaultFileIgnores = this.config.getFileFilteringOptions() ?? DEFAULT_FILE_FILTERING_OPTIONS;
|
|
178
|
+
const fileFilteringOptions = {
|
|
179
|
+
respectGitIgnore: params.file_filtering_options?.respect_git_ignore ??
|
|
180
|
+
defaultFileIgnores.respectGitIgnore, // Use the property from the returned object
|
|
181
|
+
respectGeminiIgnore: params.file_filtering_options?.respect_gemini_ignore ??
|
|
182
|
+
defaultFileIgnores.respectGeminiIgnore, // Use the property from the returned object
|
|
183
|
+
};
|
|
177
184
|
// Get centralized file discovery service
|
|
178
185
|
const fileDiscovery = this.config.getFileService();
|
|
179
|
-
const toolBaseDir = this.targetDir;
|
|
180
186
|
const filesToConsider = new Set();
|
|
181
187
|
const skippedFiles = [];
|
|
182
188
|
const processedFilesRelativePaths = [];
|
|
183
189
|
const contentParts = [];
|
|
184
190
|
const effectiveExcludes = useDefaultExcludes
|
|
185
|
-
? [...DEFAULT_EXCLUDES, ...exclude
|
|
186
|
-
: [...exclude
|
|
191
|
+
? [...DEFAULT_EXCLUDES, ...exclude]
|
|
192
|
+
: [...exclude];
|
|
187
193
|
const searchPatterns = [...inputPatterns, ...include];
|
|
188
194
|
if (searchPatterns.length === 0) {
|
|
189
195
|
return {
|
|
@@ -192,8 +198,8 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
192
198
|
};
|
|
193
199
|
}
|
|
194
200
|
try {
|
|
195
|
-
const entries = await glob(searchPatterns, {
|
|
196
|
-
cwd:
|
|
201
|
+
const entries = await glob(searchPatterns.map((p) => p.replace(/\\/g, '/')), {
|
|
202
|
+
cwd: this.config.getTargetDir(),
|
|
197
203
|
ignore: effectiveExcludes,
|
|
198
204
|
nodir: true,
|
|
199
205
|
dot: true,
|
|
@@ -201,35 +207,60 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
201
207
|
nocase: true,
|
|
202
208
|
signal,
|
|
203
209
|
});
|
|
204
|
-
const
|
|
210
|
+
const gitFilteredEntries = fileFilteringOptions.respectGitIgnore
|
|
205
211
|
? fileDiscovery
|
|
206
|
-
.filterFiles(entries.map((p) => path.relative(
|
|
207
|
-
respectGitIgnore,
|
|
212
|
+
.filterFiles(entries.map((p) => path.relative(this.config.getTargetDir(), p)), {
|
|
213
|
+
respectGitIgnore: true,
|
|
214
|
+
respectGeminiIgnore: false,
|
|
208
215
|
})
|
|
209
|
-
.map((p) => path.resolve(
|
|
216
|
+
.map((p) => path.resolve(this.config.getTargetDir(), p))
|
|
210
217
|
: entries;
|
|
218
|
+
// Apply gemini ignore filtering if enabled
|
|
219
|
+
const finalFilteredEntries = fileFilteringOptions.respectGeminiIgnore
|
|
220
|
+
? fileDiscovery
|
|
221
|
+
.filterFiles(gitFilteredEntries.map((p) => path.relative(this.config.getTargetDir(), p)), {
|
|
222
|
+
respectGitIgnore: false,
|
|
223
|
+
respectGeminiIgnore: true,
|
|
224
|
+
})
|
|
225
|
+
.map((p) => path.resolve(this.config.getTargetDir(), p))
|
|
226
|
+
: gitFilteredEntries;
|
|
211
227
|
let gitIgnoredCount = 0;
|
|
228
|
+
let geminiIgnoredCount = 0;
|
|
212
229
|
for (const absoluteFilePath of entries) {
|
|
213
230
|
// Security check: ensure the glob library didn't return something outside targetDir.
|
|
214
|
-
if (!absoluteFilePath.startsWith(
|
|
231
|
+
if (!absoluteFilePath.startsWith(this.config.getTargetDir())) {
|
|
215
232
|
skippedFiles.push({
|
|
216
233
|
path: absoluteFilePath,
|
|
217
|
-
reason: `Security: Glob library returned path outside target directory. Base: ${
|
|
234
|
+
reason: `Security: Glob library returned path outside target directory. Base: ${this.config.getTargetDir()}, Path: ${absoluteFilePath}`,
|
|
218
235
|
});
|
|
219
236
|
continue;
|
|
220
237
|
}
|
|
221
238
|
// Check if this file was filtered out by git ignore
|
|
222
|
-
if (respectGitIgnore &&
|
|
239
|
+
if (fileFilteringOptions.respectGitIgnore &&
|
|
240
|
+
!gitFilteredEntries.includes(absoluteFilePath)) {
|
|
223
241
|
gitIgnoredCount++;
|
|
224
242
|
continue;
|
|
225
243
|
}
|
|
244
|
+
// Check if this file was filtered out by gemini ignore
|
|
245
|
+
if (fileFilteringOptions.respectGeminiIgnore &&
|
|
246
|
+
!finalFilteredEntries.includes(absoluteFilePath)) {
|
|
247
|
+
geminiIgnoredCount++;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
226
250
|
filesToConsider.add(absoluteFilePath);
|
|
227
251
|
}
|
|
228
252
|
// Add info about git-ignored files if any were filtered
|
|
229
253
|
if (gitIgnoredCount > 0) {
|
|
230
254
|
skippedFiles.push({
|
|
231
255
|
path: `${gitIgnoredCount} file(s)`,
|
|
232
|
-
reason: 'ignored',
|
|
256
|
+
reason: 'git ignored',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// Add info about gemini-ignored files if any were filtered
|
|
260
|
+
if (geminiIgnoredCount > 0) {
|
|
261
|
+
skippedFiles.push({
|
|
262
|
+
path: `${geminiIgnoredCount} file(s)`,
|
|
263
|
+
reason: 'gemini ignored',
|
|
233
264
|
});
|
|
234
265
|
}
|
|
235
266
|
}
|
|
@@ -242,9 +273,9 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
242
273
|
const sortedFiles = Array.from(filesToConsider).sort();
|
|
243
274
|
for (const filePath of sortedFiles) {
|
|
244
275
|
const relativePathForDisplay = path
|
|
245
|
-
.relative(
|
|
276
|
+
.relative(this.config.getTargetDir(), filePath)
|
|
246
277
|
.replace(/\\/g, '/');
|
|
247
|
-
const fileType = detectFileType(filePath);
|
|
278
|
+
const fileType = await detectFileType(filePath);
|
|
248
279
|
if (fileType === 'image' || fileType === 'pdf') {
|
|
249
280
|
const fileExtension = path.extname(filePath).toLowerCase();
|
|
250
281
|
const fileNameWithoutExtension = path.basename(filePath, fileExtension);
|
|
@@ -259,7 +290,7 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
259
290
|
}
|
|
260
291
|
}
|
|
261
292
|
// Use processSingleFileContent for all file types now
|
|
262
|
-
const fileReadResult = await processSingleFileContent(filePath,
|
|
293
|
+
const fileReadResult = await processSingleFileContent(filePath, this.config.getTargetDir());
|
|
263
294
|
if (fileReadResult.error) {
|
|
264
295
|
skippedFiles.push({
|
|
265
296
|
path: relativePathForDisplay,
|
|
@@ -282,7 +313,7 @@ Use this tool when the user's query implies needing the content of several files
|
|
|
282
313
|
recordFileOperationMetric(this.config, FileOperation.READ, lines, mimetype, path.extname(filePath));
|
|
283
314
|
}
|
|
284
315
|
}
|
|
285
|
-
let displayMessage = `### ReadManyFiles Result (Target Dir: \`${this.
|
|
316
|
+
let displayMessage = `### ReadManyFiles Result (Target Dir: \`${this.config.getTargetDir()}\`)\n\n`;
|
|
286
317
|
if (processedFilesRelativePaths.length > 0) {
|
|
287
318
|
displayMessage += `Successfully read and concatenated content from **${processedFilesRelativePaths.length} file(s)**.\n`;
|
|
288
319
|
if (processedFilesRelativePaths.length <= 10) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-many-files.js","sourceRoot":"","sources":["../../../src/tools/read-many-files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read-many-files.js","sourceRoot":"","sources":["../../../src/tools/read-many-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,9 +48,13 @@ describe('ReadManyFilesTool', () => {
|
|
|
48
48
|
const fileService = new FileDiscoveryService(tempRootDir);
|
|
49
49
|
const mockConfig = {
|
|
50
50
|
getFileService: () => fileService,
|
|
51
|
-
|
|
51
|
+
getFileFilteringOptions: () => ({
|
|
52
|
+
respectGitIgnore: true,
|
|
53
|
+
respectGeminiIgnore: true,
|
|
54
|
+
}),
|
|
55
|
+
getTargetDir: () => tempRootDir,
|
|
52
56
|
};
|
|
53
|
-
tool = new ReadManyFilesTool(
|
|
57
|
+
tool = new ReadManyFilesTool(mockConfig);
|
|
54
58
|
mockReadFileFn = mockControl.mockReadFile;
|
|
55
59
|
mockReadFileFn.mockReset();
|
|
56
60
|
mockReadFileFn.mockImplementation(async (filePath, options) => {
|
|
@@ -196,7 +200,7 @@ describe('ReadManyFilesTool', () => {
|
|
|
196
200
|
expect(content.find((c) => c.includes('src/main.test.ts'))).toBeUndefined();
|
|
197
201
|
expect(result.returnDisplay).toContain('Successfully read and concatenated content from **1 file(s)**');
|
|
198
202
|
});
|
|
199
|
-
it('should handle
|
|
203
|
+
it('should handle nonexistent specific files gracefully', async () => {
|
|
200
204
|
const params = { paths: ['nonexistent-file.txt'] };
|
|
201
205
|
const result = await tool.execute(params, new AbortController().signal);
|
|
202
206
|
expect(result.llmContent).toEqual([
|