@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.
Files changed (287) hide show
  1. package/README.md +30 -3
  2. package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
  3. package/dist/src/code_assist/codeAssist.js +2 -2
  4. package/dist/src/code_assist/codeAssist.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.js +46 -5
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +100 -3
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/code_assist/server.d.ts +4 -6
  10. package/dist/src/code_assist/server.js +4 -69
  11. package/dist/src/code_assist/server.js.map +1 -1
  12. package/dist/src/code_assist/server.test.js +10 -2
  13. package/dist/src/code_assist/server.test.js.map +1 -1
  14. package/dist/src/code_assist/setup.d.ts +6 -1
  15. package/dist/src/code_assist/setup.js +4 -1
  16. package/dist/src/code_assist/setup.js.map +1 -1
  17. package/dist/src/code_assist/setup.test.js +4 -1
  18. package/dist/src/code_assist/setup.test.js.map +1 -1
  19. package/dist/src/code_assist/types.d.ts +2 -2
  20. package/dist/src/config/config.d.ts +52 -11
  21. package/dist/src/config/config.js +79 -33
  22. package/dist/src/config/config.js.map +1 -1
  23. package/dist/src/config/config.test.js +29 -26
  24. package/dist/src/config/config.test.js.map +1 -1
  25. package/dist/src/config/flashFallback.test.js +1 -1
  26. package/dist/src/config/flashFallback.test.js.map +1 -1
  27. package/dist/src/core/client.d.ts +8 -3
  28. package/dist/src/core/client.js +62 -3
  29. package/dist/src/core/client.js.map +1 -1
  30. package/dist/src/core/client.test.js +145 -37
  31. package/dist/src/core/client.test.js.map +1 -1
  32. package/dist/src/core/contentGenerator.d.ts +3 -2
  33. package/dist/src/core/contentGenerator.js +5 -4
  34. package/dist/src/core/contentGenerator.js.map +1 -1
  35. package/dist/src/core/contentGenerator.test.js +12 -5
  36. package/dist/src/core/contentGenerator.test.js.map +1 -1
  37. package/dist/src/core/coreToolScheduler.js +14 -1
  38. package/dist/src/core/coreToolScheduler.js.map +1 -1
  39. package/dist/src/core/coreToolScheduler.test.js +84 -2
  40. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  41. package/dist/src/core/geminiChat.d.ts +4 -3
  42. package/dist/src/core/geminiChat.js +8 -11
  43. package/dist/src/core/geminiChat.js.map +1 -1
  44. package/dist/src/core/geminiRequest.js +2 -37
  45. package/dist/src/core/geminiRequest.js.map +1 -1
  46. package/dist/src/core/logger.js +6 -0
  47. package/dist/src/core/logger.js.map +1 -1
  48. package/dist/src/core/logger.test.js +1 -1
  49. package/dist/src/core/logger.test.js.map +1 -1
  50. package/dist/src/core/modelCheck.d.ts +1 -1
  51. package/dist/src/core/modelCheck.js +10 -3
  52. package/dist/src/core/modelCheck.js.map +1 -1
  53. package/dist/src/core/nonInteractiveToolExecutor.test.js +8 -5
  54. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  55. package/dist/src/core/prompts.js +42 -18
  56. package/dist/src/core/prompts.js.map +1 -1
  57. package/dist/src/core/prompts.test.js +121 -4
  58. package/dist/src/core/prompts.test.js.map +1 -1
  59. package/dist/src/core/turn.d.ts +12 -3
  60. package/dist/src/core/turn.js +10 -0
  61. package/dist/src/core/turn.js.map +1 -1
  62. package/dist/src/core/turn.test.js +129 -0
  63. package/dist/src/core/turn.test.js.map +1 -1
  64. package/dist/src/ide/ide-client.d.ts +28 -0
  65. package/dist/src/ide/ide-client.js +79 -0
  66. package/dist/src/ide/ide-client.js.map +1 -0
  67. package/dist/src/ide/ideContext.d.ts +174 -0
  68. package/dist/src/ide/ideContext.js +101 -0
  69. package/dist/src/ide/ideContext.js.map +1 -0
  70. package/dist/src/ide/ideContext.test.js +111 -0
  71. package/dist/src/ide/ideContext.test.js.map +1 -0
  72. package/dist/src/index.d.ts +11 -0
  73. package/dist/src/index.js +11 -0
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/mcp/google-auth-provider.d.ts +23 -0
  76. package/dist/src/mcp/google-auth-provider.js +63 -0
  77. package/dist/src/mcp/google-auth-provider.js.map +1 -0
  78. package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
  79. package/dist/src/mcp/google-auth-provider.test.js +54 -0
  80. package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
  81. package/dist/src/mcp/oauth-provider.d.ts +142 -0
  82. package/dist/src/mcp/oauth-provider.js +446 -0
  83. package/dist/src/mcp/oauth-provider.js.map +1 -0
  84. package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
  85. package/dist/src/mcp/oauth-provider.test.js +520 -0
  86. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  87. package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
  88. package/dist/src/mcp/oauth-token-storage.js +149 -0
  89. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  90. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  91. package/dist/src/mcp/oauth-token-storage.test.js +205 -0
  92. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  93. package/dist/src/mcp/oauth-utils.d.ts +109 -0
  94. package/dist/src/mcp/oauth-utils.js +183 -0
  95. package/dist/src/mcp/oauth-utils.js.map +1 -0
  96. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  97. package/dist/src/mcp/oauth-utils.test.js +144 -0
  98. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  99. package/dist/src/services/gitService.js +1 -5
  100. package/dist/src/services/gitService.js.map +1 -1
  101. package/dist/src/services/gitService.test.js +1 -6
  102. package/dist/src/services/gitService.test.js.map +1 -1
  103. package/dist/src/services/loopDetectionService.d.ts +94 -0
  104. package/dist/src/services/loopDetectionService.js +318 -0
  105. package/dist/src/services/loopDetectionService.js.map +1 -0
  106. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  107. package/dist/src/services/loopDetectionService.test.js +266 -0
  108. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -1
  110. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +69 -4
  111. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  112. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  113. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
  114. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  115. package/dist/src/telemetry/constants.d.ts +1 -0
  116. package/dist/src/telemetry/constants.js +1 -0
  117. package/dist/src/telemetry/constants.js.map +1 -1
  118. package/dist/src/telemetry/file-exporters.d.ts +28 -0
  119. package/dist/src/telemetry/file-exporters.js +62 -0
  120. package/dist/src/telemetry/file-exporters.js.map +1 -0
  121. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  122. package/dist/src/telemetry/integration.test.circular.js +53 -0
  123. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  124. package/dist/src/telemetry/loggers.d.ts +3 -1
  125. package/dist/src/telemetry/loggers.js +34 -2
  126. package/dist/src/telemetry/loggers.js.map +1 -1
  127. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  128. package/dist/src/telemetry/loggers.test.circular.js +100 -0
  129. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  130. package/dist/src/telemetry/sdk.js +17 -6
  131. package/dist/src/telemetry/sdk.js.map +1 -1
  132. package/dist/src/telemetry/types.d.ts +19 -1
  133. package/dist/src/telemetry/types.js +28 -0
  134. package/dist/src/telemetry/types.js.map +1 -1
  135. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  136. package/dist/src/telemetry/uiTelemetry.js +7 -0
  137. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  138. package/dist/src/telemetry/uiTelemetry.test.js +92 -0
  139. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  140. package/dist/src/tools/edit.d.ts +7 -12
  141. package/dist/src/tools/edit.js +34 -32
  142. package/dist/src/tools/edit.js.map +1 -1
  143. package/dist/src/tools/edit.test.js +12 -0
  144. package/dist/src/tools/edit.test.js.map +1 -1
  145. package/dist/src/tools/glob.d.ts +1 -14
  146. package/dist/src/tools/glob.js +13 -36
  147. package/dist/src/tools/glob.js.map +1 -1
  148. package/dist/src/tools/glob.test.js +4 -3
  149. package/dist/src/tools/glob.test.js.map +1 -1
  150. package/dist/src/tools/grep.d.ts +3 -6
  151. package/dist/src/tools/grep.js +12 -18
  152. package/dist/src/tools/grep.js.map +1 -1
  153. package/dist/src/tools/grep.test.js +5 -2
  154. package/dist/src/tools/grep.test.js.map +1 -1
  155. package/dist/src/tools/ls.d.ts +6 -14
  156. package/dist/src/tools/ls.js +47 -40
  157. package/dist/src/tools/ls.js.map +1 -1
  158. package/dist/src/tools/mcp-client.d.ts +59 -1
  159. package/dist/src/tools/mcp-client.js +557 -146
  160. package/dist/src/tools/mcp-client.js.map +1 -1
  161. package/dist/src/tools/mcp-client.test.js +166 -623
  162. package/dist/src/tools/mcp-client.test.js.map +1 -1
  163. package/dist/src/tools/mcp-tool.d.ts +11 -5
  164. package/dist/src/tools/mcp-tool.js +34 -10
  165. package/dist/src/tools/mcp-tool.js.map +1 -1
  166. package/dist/src/tools/mcp-tool.test.js +74 -24
  167. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  168. package/dist/src/tools/memoryTool.js +2 -2
  169. package/dist/src/tools/memoryTool.js.map +1 -1
  170. package/dist/src/tools/read-file.d.ts +3 -3
  171. package/dist/src/tools/read-file.js +10 -10
  172. package/dist/src/tools/read-file.js.map +1 -1
  173. package/dist/src/tools/read-file.test.js +100 -70
  174. package/dist/src/tools/read-file.test.js.map +1 -1
  175. package/dist/src/tools/read-many-files.d.ts +6 -10
  176. package/dist/src/tools/read-many-files.js +74 -43
  177. package/dist/src/tools/read-many-files.js.map +1 -1
  178. package/dist/src/tools/read-many-files.test.js +7 -3
  179. package/dist/src/tools/read-many-files.test.js.map +1 -1
  180. package/dist/src/tools/shell.d.ts +2 -23
  181. package/dist/src/tools/shell.js +58 -138
  182. package/dist/src/tools/shell.js.map +1 -1
  183. package/dist/src/tools/shell.test.js +85 -311
  184. package/dist/src/tools/shell.test.js.map +1 -1
  185. package/dist/src/tools/tool-registry.d.ts +13 -2
  186. package/dist/src/tools/tool-registry.js +57 -10
  187. package/dist/src/tools/tool-registry.js.map +1 -1
  188. package/dist/src/tools/tool-registry.test.js +112 -41
  189. package/dist/src/tools/tool-registry.test.js.map +1 -1
  190. package/dist/src/tools/tools.d.ts +37 -2
  191. package/dist/src/tools/tools.js +25 -2
  192. package/dist/src/tools/tools.js.map +1 -1
  193. package/dist/src/tools/web-fetch.js +7 -2
  194. package/dist/src/tools/web-fetch.js.map +1 -1
  195. package/dist/src/tools/web-fetch.test.js +1 -0
  196. package/dist/src/tools/web-fetch.test.js.map +1 -1
  197. package/dist/src/tools/web-search.js +2 -2
  198. package/dist/src/tools/web-search.js.map +1 -1
  199. package/dist/src/tools/write-file.d.ts +0 -8
  200. package/dist/src/tools/write-file.js +14 -23
  201. package/dist/src/tools/write-file.js.map +1 -1
  202. package/dist/src/utils/bfsFileSearch.d.ts +2 -0
  203. package/dist/src/utils/bfsFileSearch.js +4 -1
  204. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  205. package/dist/src/utils/bfsFileSearch.test.js +108 -105
  206. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  207. package/dist/src/utils/browser.d.ts +13 -0
  208. package/dist/src/utils/browser.js +49 -0
  209. package/dist/src/utils/browser.js.map +1 -0
  210. package/dist/src/utils/editCorrector.js +4 -4
  211. package/dist/src/utils/editCorrector.js.map +1 -1
  212. package/dist/src/utils/editCorrector.test.js +1 -1
  213. package/dist/src/utils/editor.js +16 -10
  214. package/dist/src/utils/editor.js.map +1 -1
  215. package/dist/src/utils/editor.test.js +128 -28
  216. package/dist/src/utils/editor.test.js.map +1 -1
  217. package/dist/src/utils/errorReporting.d.ts +1 -1
  218. package/dist/src/utils/errorReporting.js +2 -2
  219. package/dist/src/utils/errorReporting.js.map +1 -1
  220. package/dist/src/utils/errorReporting.test.js +44 -38
  221. package/dist/src/utils/errorReporting.test.js.map +1 -1
  222. package/dist/src/utils/errors.js +4 -4
  223. package/dist/src/utils/errors.js.map +1 -1
  224. package/dist/src/utils/fileUtils.d.ts +4 -4
  225. package/dist/src/utils/fileUtils.js +33 -17
  226. package/dist/src/utils/fileUtils.js.map +1 -1
  227. package/dist/src/utils/fileUtils.test.js +37 -37
  228. package/dist/src/utils/fileUtils.test.js.map +1 -1
  229. package/dist/src/utils/getFolderStructure.d.ts +3 -2
  230. package/dist/src/utils/getFolderStructure.js +27 -28
  231. package/dist/src/utils/getFolderStructure.js.map +1 -1
  232. package/dist/src/utils/getFolderStructure.test.js +169 -187
  233. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  234. package/dist/src/utils/gitIgnoreParser.js +4 -7
  235. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  236. package/dist/src/utils/gitIgnoreParser.test.js +70 -61
  237. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  238. package/dist/src/utils/memoryDiscovery.d.ts +2 -1
  239. package/dist/src/utils/memoryDiscovery.js +11 -5
  240. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  241. package/dist/src/utils/memoryDiscovery.test.js +160 -371
  242. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  243. package/dist/src/utils/partUtils.d.ts +14 -0
  244. package/dist/src/utils/partUtils.js +65 -0
  245. package/dist/src/utils/partUtils.js.map +1 -0
  246. package/dist/src/utils/partUtils.test.d.ts +6 -0
  247. package/dist/src/utils/partUtils.test.js +130 -0
  248. package/dist/src/utils/partUtils.test.js.map +1 -0
  249. package/dist/src/utils/paths.d.ts +11 -0
  250. package/dist/src/utils/paths.js +17 -1
  251. package/dist/src/utils/paths.js.map +1 -1
  252. package/dist/src/utils/quotaErrorDetection.js +2 -11
  253. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  254. package/dist/src/utils/retry.d.ts +6 -0
  255. package/dist/src/utils/retry.js +2 -2
  256. package/dist/src/utils/retry.js.map +1 -1
  257. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  258. package/dist/src/utils/safeJsonStringify.js +25 -0
  259. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  260. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  261. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  262. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  263. package/dist/src/utils/schemaValidator.d.ts +1 -1
  264. package/dist/src/utils/schemaValidator.js +6 -3
  265. package/dist/src/utils/schemaValidator.js.map +1 -1
  266. package/dist/src/utils/shell-utils.d.ts +44 -0
  267. package/dist/src/utils/shell-utils.js +243 -0
  268. package/dist/src/utils/shell-utils.js.map +1 -0
  269. package/dist/src/utils/shell-utils.test.d.ts +6 -0
  270. package/dist/src/utils/shell-utils.test.js +450 -0
  271. package/dist/src/utils/shell-utils.test.js.map +1 -0
  272. package/dist/src/utils/summarizer.d.ts +1 -1
  273. package/dist/src/utils/summarizer.js +11 -39
  274. package/dist/src/utils/summarizer.js.map +1 -1
  275. package/dist/src/utils/summarizer.test.js +1 -1
  276. package/dist/src/utils/systemEncoding.d.ts +40 -0
  277. package/dist/src/utils/systemEncoding.js +149 -0
  278. package/dist/src/utils/systemEncoding.js.map +1 -0
  279. package/dist/src/utils/systemEncoding.test.d.ts +6 -0
  280. package/dist/src/utils/systemEncoding.test.js +368 -0
  281. package/dist/src/utils/systemEncoding.test.js.map +1 -0
  282. package/dist/tsconfig.tsbuildinfo +1 -1
  283. package/package.json +4 -3
  284. package/dist/google-gemini-cli-core-0.1.11.tgz +0 -0
  285. package/dist/src/core/geminiRequest.test.js +0 -72
  286. package/dist/src/core/geminiRequest.test.js.map +0 -1
  287. /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 { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
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'; // For actual fs operations in setup
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 = fs.mkdtempSync(path.join(os.tmpdir(), 'read-file-tool-root-'));
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: () => fileService,
21
+ getFileService: () => new FileDiscoveryService(tempRootDir),
22
+ getTargetDir: () => tempRootDir,
33
23
  };
34
- tool = new ReadFileTool(tempRootDir, mockConfigInstance);
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
- fs.rmSync(tempRootDir, { recursive: true, force: true });
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
- // Assuming tempRootDir is something like /tmp/read-file-tool-root-XXXXXX
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 = { absolute_path: 'relative/path.txt' };
110
- const result = await tool.execute(params, abortSignal);
111
- expect(result.llmContent).toBe('Error: Invalid parameters provided. Reason: File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.');
112
- expect(result.returnDisplay).toBe('File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.');
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 from processSingleFileContent if it fails', async () => {
115
- const filePath = path.join(tempRootDir, 'error.txt');
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
- const errorMessage = 'Simulated read error';
118
- mockProcessSingleFileContent.mockResolvedValue({
119
- llmContent: `Error reading file ${filePath}: ${errorMessage}`,
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
- mockProcessSingleFileContent.mockResolvedValue({
117
+ expect(await tool.execute(params, abortSignal)).toEqual({
133
118
  llmContent: fileContent,
134
- returnDisplay: `Read text file: ${path.basename(filePath)}`,
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
- const imageData = {
144
- inlineData: { mimeType: 'image/png', data: 'base64...' },
145
- };
131
+ await fsp.writeFile(filePath, pngContent);
146
132
  const params = { absolute_path: filePath };
147
- mockProcessSingleFileContent.mockResolvedValue({
148
- llmContent: imageData,
149
- returnDisplay: `Read image file: ${path.basename(filePath)}`,
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 pass offset and limit to processSingleFileContent', async () => {
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: 10,
161
- limit: 5,
164
+ offset: 5, // Start from line 6
165
+ limit: 3,
162
166
  };
163
- mockProcessSingleFileContent.mockResolvedValue({
164
- llmContent: 'some lines',
165
- returnDisplay: 'Read text file (paginated)',
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
- it('should return error if path is ignored by a .geminiignore pattern', async () => {
171
- const params = {
172
- absolute_path: path.join(tempRootDir, 'foo.bar'),
173
- };
174
- const result = await tool.execute(params, abortSignal);
175
- expect(result.returnDisplay).toContain('foo.bar');
176
- expect(result.returnDisplay).not.toContain('foo.baz');
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,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,oCAAoC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,0CAA0C;AAC1C,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;IACvC,MAAM,eAAe,GACnB,MAAM,EAAE,CAAC,YAAY,CAAmB,oBAAoB,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,eAAe,EAAE,gCAAgC;QACpD,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,yBAAyB;KAC7D,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,SAAS,CAAC,wBAAgC,CAAC;AAEhF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,WAAmB,CAAC;IACxB,IAAI,IAAkB,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IAEjD,UAAU,CAAC,GAAG,EAAE;QACd,6DAA6D;QAC7D,WAAW,GAAG,EAAE,CAAC,WAAW,CAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAC/C,CAAC;QACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACrB,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,kBAAkB,GAAG;YACzB,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW;SACb,CAAC;QACvB,IAAI,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzD,4BAA4B,CAAC,SAAS,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,wCAAwC;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;aAClD,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,4FAA4F,CAC7F,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAC7C,6CAA6C,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC,CAAC;gBACV,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,sCAAsC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,UAAU,GAAuB;gBACrC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;aACT,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC9C,iCAAiC,CAClC,CAAC;YACF,MAAM,cAAc,GAAuB;gBACzC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC,CAAC;aACV,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAClD,iCAAiC,CAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAmC,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,oDAAoD,CACrD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAClE,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC/D,yEAAyE;YACzE,8CAA8C;YAC9C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC5B,iJAAiJ,CAClJ,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/B,qGAAqG,CACtG,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC/D,MAAM,YAAY,GAAG,sBAAsB,CAAC;YAC5C,4BAA4B,CAAC,iBAAiB,CAAC;gBAC7C,UAAU,EAAE,sBAAsB,QAAQ,KAAK,YAAY,EAAE;gBAC7D,aAAa,EAAE,sBAAsB,QAAQ,KAAK,YAAY,EAAE;gBAChE,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,sBAAsB,CAAC;YAC3C,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC/D,4BAA4B,CAAC,iBAAiB,CAAC;gBAC7C,UAAU,EAAE,WAAW;gBACvB,aAAa,EAAE,mBAAmB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aAC5D,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/B,mBAAmB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG;gBAChB,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;aACzD,CAAC;YACF,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC/D,4BAA4B,CAAC,iBAAiB,CAAC;gBAC7C,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,oBAAoB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aAC7D,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,CACV,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/B,oBAAoB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACzD,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,QAAQ;gBACvB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,CAAC;aACT,CAAC;YACF,4BAA4B,CAAC,iBAAiB,CAAC;gBAC7C,UAAU,EAAE,YAAY;gBACxB,aAAa,EAAE,4BAA4B;aAC5C,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,QAAQ,EACR,WAAW,EACX,EAAE,EACF,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;aACjD,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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
- * Optional. Whether to respect .gitignore patterns. Defaults to true.
42
+ * Whether to respect .gitignore and .geminiignore patterns (optional, defaults to true)
43
43
  */
44
- respect_git_ignore?: boolean;
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
- private readonly geminiIgnorePatterns;
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
- geminiIgnorePatterns = [];
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
- respect_git_ignore: {
117
- type: Type.BOOLEAN,
118
- description: 'Optional. Whether to respect .gitignore patterns when discovering files. Only available in git repositories. Defaults to true.',
119
- default: true,
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.targetDir}\`)`;
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, ...this.geminiIgnorePatterns]
156
- : [...paramExcludes, ...this.geminiIgnorePatterns];
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 (this.geminiIgnorePatterns.length > 0) {
160
- const geminiPatternsInEffect = this.geminiIgnorePatterns.filter((p) => finalExclusionPatternsForDescription.includes(p)).length;
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, respect_git_ignore = true, } = params;
176
- const respectGitIgnore = respect_git_ignore ?? this.config.getFileFilteringRespectGitIgnore();
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, ...this.geminiIgnorePatterns]
186
- : [...exclude, ...this.geminiIgnorePatterns];
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: toolBaseDir,
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 filteredEntries = respectGitIgnore
210
+ const gitFilteredEntries = fileFilteringOptions.respectGitIgnore
205
211
  ? fileDiscovery
206
- .filterFiles(entries.map((p) => path.relative(toolBaseDir, p)), {
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(toolBaseDir, p))
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(toolBaseDir)) {
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: ${toolBaseDir}, Path: ${absoluteFilePath}`,
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 && !filteredEntries.includes(absoluteFilePath)) {
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(toolBaseDir, filePath)
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, toolBaseDir);
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.targetDir}\`)\n\n`;
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
- getFileFilteringRespectGitIgnore: () => true,
51
+ getFileFilteringOptions: () => ({
52
+ respectGitIgnore: true,
53
+ respectGeminiIgnore: true,
54
+ }),
55
+ getTargetDir: () => tempRootDir,
52
56
  };
53
- tool = new ReadManyFilesTool(tempRootDir, mockConfig);
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 non-existent specific files gracefully', async () => {
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([