@google/gemini-cli-core 0.1.19 → 0.1.21

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 (149) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/code_assist/setup.js +47 -16
  6. package/dist/src/code_assist/setup.js.map +1 -1
  7. package/dist/src/code_assist/setup.test.js +105 -5
  8. package/dist/src/code_assist/setup.test.js.map +1 -1
  9. package/dist/src/config/config.d.ts +6 -6
  10. package/dist/src/config/config.js +18 -11
  11. package/dist/src/config/config.js.map +1 -1
  12. package/dist/src/config/config.test.js +87 -1
  13. package/dist/src/config/config.test.js.map +1 -1
  14. package/dist/src/core/client.d.ts +3 -1
  15. package/dist/src/core/client.js +22 -3
  16. package/dist/src/core/client.js.map +1 -1
  17. package/dist/src/core/client.test.js +69 -9
  18. package/dist/src/core/client.test.js.map +1 -1
  19. package/dist/src/core/contentGenerator.js +0 -2
  20. package/dist/src/core/contentGenerator.js.map +1 -1
  21. package/dist/src/core/coreToolScheduler.test.js +2 -4
  22. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  23. package/dist/src/ide/detect-ide.d.ts +6 -3
  24. package/dist/src/ide/detect-ide.js +37 -15
  25. package/dist/src/ide/detect-ide.js.map +1 -1
  26. package/dist/src/ide/detect-ide.test.d.ts +6 -0
  27. package/dist/src/ide/detect-ide.test.js +65 -0
  28. package/dist/src/ide/detect-ide.test.js.map +1 -0
  29. package/dist/src/ide/ide-client.js +3 -3
  30. package/dist/src/ide/ide-client.js.map +1 -1
  31. package/dist/src/ide/ide-installer.js +2 -46
  32. package/dist/src/ide/ide-installer.js.map +1 -1
  33. package/dist/src/ide/ide-installer.test.js +0 -39
  34. package/dist/src/ide/ide-installer.test.js.map +1 -1
  35. package/dist/src/ide/ideContext.d.ts +6 -6
  36. package/dist/src/index.d.ts +2 -1
  37. package/dist/src/index.js +2 -1
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/mcp/oauth-provider.d.ts +0 -1
  40. package/dist/src/mcp/oauth-provider.js +0 -1
  41. package/dist/src/mcp/oauth-provider.js.map +1 -1
  42. package/dist/src/mocks/msw.d.ts +6 -0
  43. package/dist/src/mocks/msw.js +8 -0
  44. package/dist/src/mocks/msw.js.map +1 -0
  45. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +31 -13
  46. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +140 -149
  47. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  48. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +172 -77
  49. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  50. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  51. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
  52. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  53. package/dist/src/telemetry/index.d.ts +2 -2
  54. package/dist/src/telemetry/index.js +2 -2
  55. package/dist/src/telemetry/index.js.map +1 -1
  56. package/dist/src/telemetry/loggers.d.ts +2 -1
  57. package/dist/src/telemetry/loggers.js +15 -0
  58. package/dist/src/telemetry/loggers.js.map +1 -1
  59. package/dist/src/telemetry/sdk.d.ts +1 -1
  60. package/dist/src/telemetry/sdk.js +13 -5
  61. package/dist/src/telemetry/sdk.js.map +1 -1
  62. package/dist/src/telemetry/telemetry.test.js +2 -2
  63. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  64. package/dist/src/telemetry/types.d.ts +33 -14
  65. package/dist/src/telemetry/types.js +38 -23
  66. package/dist/src/telemetry/types.js.map +1 -1
  67. package/dist/src/test-utils/config.d.ts +16 -0
  68. package/dist/src/test-utils/config.js +32 -0
  69. package/dist/src/test-utils/config.js.map +1 -0
  70. package/dist/src/test-utils/tools.js +2 -2
  71. package/dist/src/test-utils/tools.js.map +1 -1
  72. package/dist/src/tools/edit.js +3 -4
  73. package/dist/src/tools/edit.js.map +1 -1
  74. package/dist/src/tools/edit.test.js +0 -2
  75. package/dist/src/tools/edit.test.js.map +1 -1
  76. package/dist/src/tools/glob.js +2 -2
  77. package/dist/src/tools/glob.js.map +1 -1
  78. package/dist/src/tools/grep.js +2 -2
  79. package/dist/src/tools/grep.js.map +1 -1
  80. package/dist/src/tools/ls.d.ts +3 -22
  81. package/dist/src/tools/ls.js +81 -77
  82. package/dist/src/tools/ls.js.map +1 -1
  83. package/dist/src/tools/ls.test.js +62 -34
  84. package/dist/src/tools/ls.test.js.map +1 -1
  85. package/dist/src/tools/mcp-tool.d.ts +3 -5
  86. package/dist/src/tools/mcp-tool.js +41 -18
  87. package/dist/src/tools/mcp-tool.js.map +1 -1
  88. package/dist/src/tools/mcp-tool.test.js +53 -51
  89. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  90. package/dist/src/tools/memoryTool.d.ts +9 -13
  91. package/dist/src/tools/memoryTool.js +124 -117
  92. package/dist/src/tools/memoryTool.js.map +1 -1
  93. package/dist/src/tools/memoryTool.test.js +28 -17
  94. package/dist/src/tools/memoryTool.test.js.map +1 -1
  95. package/dist/src/tools/read-file.js +2 -2
  96. package/dist/src/tools/read-file.js.map +1 -1
  97. package/dist/src/tools/read-many-files.d.ts +4 -5
  98. package/dist/src/tools/read-many-files.js +112 -100
  99. package/dist/src/tools/read-many-files.js.map +1 -1
  100. package/dist/src/tools/read-many-files.test.js +60 -37
  101. package/dist/src/tools/read-many-files.test.js.map +1 -1
  102. package/dist/src/tools/shell.d.ts +4 -6
  103. package/dist/src/tools/shell.js +99 -105
  104. package/dist/src/tools/shell.js.map +1 -1
  105. package/dist/src/tools/shell.test.js +40 -46
  106. package/dist/src/tools/shell.test.js.map +1 -1
  107. package/dist/src/tools/tool-registry.d.ts +5 -0
  108. package/dist/src/tools/tool-registry.js +13 -2
  109. package/dist/src/tools/tool-registry.js.map +1 -1
  110. package/dist/src/tools/tools.d.ts +16 -15
  111. package/dist/src/tools/tools.js +19 -18
  112. package/dist/src/tools/tools.js.map +1 -1
  113. package/dist/src/tools/web-fetch.d.ts +4 -7
  114. package/dist/src/tools/web-fetch.js +62 -62
  115. package/dist/src/tools/web-fetch.js.map +1 -1
  116. package/dist/src/tools/web-fetch.test.js +8 -4
  117. package/dist/src/tools/web-fetch.test.js.map +1 -1
  118. package/dist/src/tools/web-search.js +2 -2
  119. package/dist/src/tools/web-search.js.map +1 -1
  120. package/dist/src/tools/write-file.d.ts +2 -1
  121. package/dist/src/tools/write-file.js +6 -4
  122. package/dist/src/tools/write-file.js.map +1 -1
  123. package/dist/src/tools/write-file.test.js +0 -1
  124. package/dist/src/tools/write-file.test.js.map +1 -1
  125. package/dist/src/utils/errorParsing.d.ts +8 -0
  126. package/dist/src/utils/errorParsing.js +93 -0
  127. package/dist/src/utils/errorParsing.js.map +1 -0
  128. package/dist/src/utils/errorParsing.test.d.ts +6 -0
  129. package/dist/src/utils/errorParsing.test.js +172 -0
  130. package/dist/src/utils/errorParsing.test.js.map +1 -0
  131. package/dist/src/utils/filesearch/fileSearch.js +1 -1
  132. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  133. package/dist/src/utils/filesearch/result-cache.d.ts +1 -2
  134. package/dist/src/utils/filesearch/result-cache.js +1 -3
  135. package/dist/src/utils/filesearch/result-cache.js.map +1 -1
  136. package/dist/src/utils/filesearch/result-cache.test.js +3 -4
  137. package/dist/src/utils/filesearch/result-cache.test.js.map +1 -1
  138. package/dist/src/utils/memoryImportProcessor.js +1 -1
  139. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  140. package/dist/src/utils/memoryImportProcessor.test.js +17 -20
  141. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  142. package/dist/src/utils/quotaErrorDetection.d.ts +1 -5
  143. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +2 -2
  146. package/dist/google-gemini-cli-core-0.1.18.tgz +0 -0
  147. package/dist/src/core/modelCheck.d.ts +0 -14
  148. package/dist/src/core/modelCheck.js +0 -62
  149. package/dist/src/core/modelCheck.js.map +0 -1
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { BaseTool, Icon } from './tools.js';
6
+ import { BaseDeclarativeTool, BaseToolInvocation, Kind, } 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';
@@ -57,104 +57,34 @@ const DEFAULT_EXCLUDES = [
57
57
  `**/${getCurrentGeminiMdFilename()}`,
58
58
  ];
59
59
  const DEFAULT_OUTPUT_SEPARATOR_FORMAT = '--- {filePath} ---';
60
- /**
61
- * Tool implementation for finding and reading multiple text files from the local filesystem
62
- * within a specified target directory. The content is concatenated.
63
- * It is intended to run in an environment with access to the local file system (e.g., a Node.js backend).
64
- */
65
- export class ReadManyFilesTool extends BaseTool {
60
+ class ReadManyFilesToolInvocation extends BaseToolInvocation {
66
61
  config;
67
- static Name = 'read_many_files';
68
- constructor(config) {
69
- const parameterSchema = {
70
- type: 'object',
71
- properties: {
72
- paths: {
73
- type: 'array',
74
- items: {
75
- type: 'string',
76
- minLength: 1,
77
- },
78
- minItems: 1,
79
- description: "Required. An array of glob patterns or paths relative to the tool's target directory. Examples: ['src/**/*.ts'], ['README.md', 'docs/']",
80
- },
81
- include: {
82
- type: 'array',
83
- items: {
84
- type: 'string',
85
- minLength: 1,
86
- },
87
- description: 'Optional. Additional glob patterns to include. These are merged with `paths`. Example: ["*.test.ts"] to specifically add test files if they were broadly excluded.',
88
- default: [],
89
- },
90
- exclude: {
91
- type: 'array',
92
- items: {
93
- type: 'string',
94
- minLength: 1,
95
- },
96
- description: 'Optional. Glob patterns for files/directories to exclude. Added to default excludes if useDefaultExcludes is true. Example: ["**/*.log", "temp/"]',
97
- default: [],
98
- },
99
- recursive: {
100
- type: 'boolean',
101
- description: 'Optional. Whether to search recursively (primarily controlled by `**` in glob patterns). Defaults to true.',
102
- default: true,
103
- },
104
- useDefaultExcludes: {
105
- type: 'boolean',
106
- description: 'Optional. Whether to apply a list of default exclusion patterns (e.g., node_modules, .git, binary files). Defaults to true.',
107
- default: true,
108
- },
109
- file_filtering_options: {
110
- description: 'Whether to respect ignore patterns from .gitignore or .geminiignore',
111
- type: 'object',
112
- properties: {
113
- respect_git_ignore: {
114
- description: 'Optional: Whether to respect .gitignore patterns when listing files. Only available in git repositories. Defaults to true.',
115
- type: 'boolean',
116
- },
117
- respect_gemini_ignore: {
118
- description: 'Optional: Whether to respect .geminiignore patterns when listing files. Defaults to true.',
119
- type: 'boolean',
120
- },
121
- },
122
- },
123
- },
124
- required: ['paths'],
125
- };
126
- super(ReadManyFilesTool.Name, 'ReadManyFiles', `Reads content from multiple files specified by paths or glob patterns within a configured target directory. For text files, it concatenates their content into a single string. It is primarily designed for text-based files. However, it can also process image (e.g., .png, .jpg) and PDF (.pdf) files if their file names or extensions are explicitly included in the 'paths' argument. For these explicitly requested non-text files, their data is read and included in a format suitable for model consumption (e.g., base64 encoded).
127
-
128
- This tool is useful when you need to understand or analyze a collection of files, such as:
129
- - Getting an overview of a codebase or parts of it (e.g., all TypeScript files in the 'src' directory).
130
- - Finding where specific functionality is implemented if the user asks broad questions about code.
131
- - Reviewing documentation files (e.g., all Markdown files in the 'docs' directory).
132
- - Gathering context from multiple configuration files.
133
- - When the user asks to "read all files in X directory" or "show me the content of all Y files".
134
-
135
- 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);
62
+ constructor(config, params) {
63
+ super(params);
136
64
  this.config = config;
137
65
  }
138
- validateParams(params) {
139
- const errors = SchemaValidator.validate(this.schema.parametersJsonSchema, params);
140
- if (errors) {
141
- return errors;
142
- }
143
- return null;
144
- }
145
- getDescription(params) {
146
- const allPatterns = [...params.paths, ...(params.include || [])];
147
- const pathDesc = `using patterns: \`${allPatterns.join('`, `')}\` (within target directory: \`${this.config.getTargetDir()}\`)`;
66
+ getDescription() {
67
+ const allPatterns = [...this.params.paths, ...(this.params.include || [])];
68
+ const pathDesc = `using patterns:
69
+ ${allPatterns.join('`, `')}
70
+ (within target directory:
71
+ ${this.config.getTargetDir()}
72
+ ) `;
148
73
  // Determine the final list of exclusion patterns exactly as in execute method
149
- const paramExcludes = params.exclude || [];
150
- const paramUseDefaultExcludes = params.useDefaultExcludes !== false;
74
+ const paramExcludes = this.params.exclude || [];
75
+ const paramUseDefaultExcludes = this.params.useDefaultExcludes !== false;
151
76
  const geminiIgnorePatterns = this.config
152
77
  .getFileService()
153
78
  .getGeminiIgnorePatterns();
154
79
  const finalExclusionPatternsForDescription = paramUseDefaultExcludes
155
80
  ? [...DEFAULT_EXCLUDES, ...paramExcludes, ...geminiIgnorePatterns]
156
81
  : [...paramExcludes, ...geminiIgnorePatterns];
157
- let excludeDesc = `Excluding: ${finalExclusionPatternsForDescription.length > 0 ? `patterns like \`${finalExclusionPatternsForDescription.slice(0, 2).join('`, `')}${finalExclusionPatternsForDescription.length > 2 ? '...`' : '`'}` : 'none specified'}`;
82
+ let excludeDesc = `Excluding: ${finalExclusionPatternsForDescription.length > 0
83
+ ? `patterns like
84
+ ${finalExclusionPatternsForDescription
85
+ .slice(0, 2)
86
+ .join('`, `')}${finalExclusionPatternsForDescription.length > 2 ? '...`' : '`'}`
87
+ : 'none specified'}`;
158
88
  // Add a note if .geminiignore patterns contributed to the final list of exclusions
159
89
  if (geminiIgnorePatterns.length > 0) {
160
90
  const geminiPatternsInEffect = geminiIgnorePatterns.filter((p) => finalExclusionPatternsForDescription.includes(p)).length;
@@ -164,20 +94,13 @@ Use this tool when the user's query implies needing the content of several files
164
94
  }
165
95
  return `Will attempt to read and concatenate files ${pathDesc}. ${excludeDesc}. File encoding: ${DEFAULT_ENCODING}. Separator: "${DEFAULT_OUTPUT_SEPARATOR_FORMAT.replace('{filePath}', 'path/to/file.ext')}".`;
166
96
  }
167
- async execute(params, signal) {
168
- const validationError = this.validateParams(params);
169
- if (validationError) {
170
- return {
171
- llmContent: `Error: Invalid parameters for ${this.displayName}. Reason: ${validationError}`,
172
- returnDisplay: `## Parameter Error\n\n${validationError}`,
173
- };
174
- }
175
- const { paths: inputPatterns, include = [], exclude = [], useDefaultExcludes = true, } = params;
97
+ async execute(signal) {
98
+ const { paths: inputPatterns, include = [], exclude = [], useDefaultExcludes = true, } = this.params;
176
99
  const defaultFileIgnores = this.config.getFileFilteringOptions() ?? DEFAULT_FILE_FILTERING_OPTIONS;
177
100
  const fileFilteringOptions = {
178
- respectGitIgnore: params.file_filtering_options?.respect_git_ignore ??
101
+ respectGitIgnore: this.params.file_filtering_options?.respect_git_ignore ??
179
102
  defaultFileIgnores.respectGitIgnore, // Use the property from the returned object
180
- respectGeminiIgnore: params.file_filtering_options?.respect_gemini_ignore ??
103
+ respectGeminiIgnore: this.params.file_filtering_options?.respect_gemini_ignore ??
181
104
  defaultFileIgnores.respectGeminiIgnore, // Use the property from the returned object
182
105
  };
183
106
  // Get centralized file discovery service
@@ -417,4 +340,93 @@ Use this tool when the user's query implies needing the content of several files
417
340
  };
418
341
  }
419
342
  }
343
+ /**
344
+ * Tool implementation for finding and reading multiple text files from the local filesystem
345
+ * within a specified target directory. The content is concatenated.
346
+ * It is intended to run in an environment with access to the local file system (e.g., a Node.js backend).
347
+ */
348
+ export class ReadManyFilesTool extends BaseDeclarativeTool {
349
+ config;
350
+ static Name = 'read_many_files';
351
+ constructor(config) {
352
+ const parameterSchema = {
353
+ type: 'object',
354
+ properties: {
355
+ paths: {
356
+ type: 'array',
357
+ items: {
358
+ type: 'string',
359
+ minLength: 1,
360
+ },
361
+ minItems: 1,
362
+ description: "Required. An array of glob patterns or paths relative to the tool's target directory. Examples: ['src/**/*.ts'], ['README.md', 'docs/']",
363
+ },
364
+ include: {
365
+ type: 'array',
366
+ items: {
367
+ type: 'string',
368
+ minLength: 1,
369
+ },
370
+ description: 'Optional. Additional glob patterns to include. These are merged with `paths`. Example: "*.test.ts" to specifically add test files if they were broadly excluded.',
371
+ default: [],
372
+ },
373
+ exclude: {
374
+ type: 'array',
375
+ items: {
376
+ type: 'string',
377
+ minLength: 1,
378
+ },
379
+ description: 'Optional. Glob patterns for files/directories to exclude. Added to default excludes if useDefaultExcludes is true. Example: "**/*.log", "temp/"',
380
+ default: [],
381
+ },
382
+ recursive: {
383
+ type: 'boolean',
384
+ description: 'Optional. Whether to search recursively (primarily controlled by `**` in glob patterns). Defaults to true.',
385
+ default: true,
386
+ },
387
+ useDefaultExcludes: {
388
+ type: 'boolean',
389
+ description: 'Optional. Whether to apply a list of default exclusion patterns (e.g., node_modules, .git, binary files). Defaults to true.',
390
+ default: true,
391
+ },
392
+ file_filtering_options: {
393
+ description: 'Whether to respect ignore patterns from .gitignore or .geminiignore',
394
+ type: 'object',
395
+ properties: {
396
+ respect_git_ignore: {
397
+ description: 'Optional: Whether to respect .gitignore patterns when listing files. Only available in git repositories. Defaults to true.',
398
+ type: 'boolean',
399
+ },
400
+ respect_gemini_ignore: {
401
+ description: 'Optional: Whether to respect .geminiignore patterns when listing files. Defaults to true.',
402
+ type: 'boolean',
403
+ },
404
+ },
405
+ },
406
+ },
407
+ required: ['paths'],
408
+ };
409
+ super(ReadManyFilesTool.Name, 'ReadManyFiles', `Reads content from multiple files specified by paths or glob patterns within a configured target directory. For text files, it concatenates their content into a single string. It is primarily designed for text-based files. However, it can also process image (e.g., .png, .jpg) and PDF (.pdf) files if their file names or extensions are explicitly included in the 'paths' argument. For these explicitly requested non-text files, their data is read and included in a format suitable for model consumption (e.g., base64 encoded).
410
+
411
+ This tool is useful when you need to understand or analyze a collection of files, such as:
412
+ - Getting an overview of a codebase or parts of it (e.g., all TypeScript files in the 'src' directory).
413
+ - Finding where specific functionality is implemented if the user asks broad questions about code.
414
+ - Reviewing documentation files (e.g., all Markdown files in the 'docs' directory).
415
+ - Gathering context from multiple configuration files.
416
+ - When the user asks to "read all files in X directory" or "show me the content of all Y files".
417
+
418
+ 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.`, Kind.Read, parameterSchema);
419
+ this.config = config;
420
+ }
421
+ validateToolParams(params) {
422
+ const errors = SchemaValidator.validate(this.schema.parametersJsonSchema, params);
423
+ if (errors) {
424
+ return errors;
425
+ }
426
+ return null;
427
+ }
428
+ createInvocation(params) {
429
+ return new ReadManyFilesToolInvocation(this.config, params);
430
+ }
431
+ }
420
432
  //# sourceMappingURL=read-many-files.js.map
@@ -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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"}
@@ -97,52 +97,57 @@ describe('ReadManyFilesTool', () => {
97
97
  fs.rmSync(tempDirOutsideRoot, { recursive: true, force: true });
98
98
  }
99
99
  });
100
- describe('validateParams', () => {
101
- it('should return null for valid relative paths within root', () => {
100
+ describe('build', () => {
101
+ it('should return an invocation for valid relative paths within root', () => {
102
102
  const params = { paths: ['file1.txt', 'subdir/file2.txt'] };
103
- expect(tool.validateParams(params)).toBeNull();
103
+ const invocation = tool.build(params);
104
+ expect(invocation).toBeDefined();
104
105
  });
105
- it('should return null for valid glob patterns within root', () => {
106
+ it('should return an invocation for valid glob patterns within root', () => {
106
107
  const params = { paths: ['*.txt', 'subdir/**/*.js'] };
107
- expect(tool.validateParams(params)).toBeNull();
108
+ const invocation = tool.build(params);
109
+ expect(invocation).toBeDefined();
108
110
  });
109
- it('should return null for paths trying to escape the root (e.g., ../) as execute handles this', () => {
111
+ it('should return an invocation for paths trying to escape the root (e.g., ../) as execute handles this', () => {
110
112
  const params = { paths: ['../outside.txt'] };
111
- expect(tool.validateParams(params)).toBeNull();
113
+ const invocation = tool.build(params);
114
+ expect(invocation).toBeDefined();
112
115
  });
113
- it('should return null for absolute paths as execute handles this', () => {
116
+ it('should return an invocation for absolute paths as execute handles this', () => {
114
117
  const params = { paths: [path.join(tempDirOutsideRoot, 'absolute.txt')] };
115
- expect(tool.validateParams(params)).toBeNull();
118
+ const invocation = tool.build(params);
119
+ expect(invocation).toBeDefined();
116
120
  });
117
- it('should return error if paths array is empty', () => {
121
+ it('should throw error if paths array is empty', () => {
118
122
  const params = { paths: [] };
119
- expect(tool.validateParams(params)).toBe('params/paths must NOT have fewer than 1 items');
123
+ expect(() => tool.build(params)).toThrow('params/paths must NOT have fewer than 1 items');
120
124
  });
121
- it('should return null for valid exclude and include patterns', () => {
125
+ it('should return an invocation for valid exclude and include patterns', () => {
122
126
  const params = {
123
127
  paths: ['src/**/*.ts'],
124
128
  exclude: ['**/*.test.ts'],
125
129
  include: ['src/utils/*.ts'],
126
130
  };
127
- expect(tool.validateParams(params)).toBeNull();
131
+ const invocation = tool.build(params);
132
+ expect(invocation).toBeDefined();
128
133
  });
129
- it('should return error if paths array contains an empty string', () => {
134
+ it('should throw error if paths array contains an empty string', () => {
130
135
  const params = { paths: ['file1.txt', ''] };
131
- expect(tool.validateParams(params)).toBe('params/paths/1 must NOT have fewer than 1 characters');
136
+ expect(() => tool.build(params)).toThrow('params/paths/1 must NOT have fewer than 1 characters');
132
137
  });
133
- it('should return error if include array contains non-string elements', () => {
138
+ it('should throw error if include array contains non-string elements', () => {
134
139
  const params = {
135
140
  paths: ['file1.txt'],
136
141
  include: ['*.ts', 123],
137
142
  };
138
- expect(tool.validateParams(params)).toBe('params/include/1 must be string');
143
+ expect(() => tool.build(params)).toThrow('params/include/1 must be string');
139
144
  });
140
- it('should return error if exclude array contains non-string elements', () => {
145
+ it('should throw error if exclude array contains non-string elements', () => {
141
146
  const params = {
142
147
  paths: ['file1.txt'],
143
148
  exclude: ['*.log', {}],
144
149
  };
145
- expect(tool.validateParams(params)).toBe('params/exclude/1 must be string');
150
+ expect(() => tool.build(params)).toThrow('params/exclude/1 must be string');
146
151
  });
147
152
  });
148
153
  describe('execute', () => {
@@ -159,7 +164,8 @@ describe('ReadManyFilesTool', () => {
159
164
  it('should read a single specified file', async () => {
160
165
  createFile('file1.txt', 'Content of file1');
161
166
  const params = { paths: ['file1.txt'] };
162
- const result = await tool.execute(params, new AbortController().signal);
167
+ const invocation = tool.build(params);
168
+ const result = await invocation.execute(new AbortController().signal);
163
169
  const expectedPath = path.join(tempRootDir, 'file1.txt');
164
170
  expect(result.llmContent).toEqual([
165
171
  `--- ${expectedPath} ---\n\nContent of file1\n\n`,
@@ -170,7 +176,8 @@ describe('ReadManyFilesTool', () => {
170
176
  createFile('file1.txt', 'Content1');
171
177
  createFile('subdir/file2.js', 'Content2');
172
178
  const params = { paths: ['file1.txt', 'subdir/file2.js'] };
173
- const result = await tool.execute(params, new AbortController().signal);
179
+ const invocation = tool.build(params);
180
+ const result = await invocation.execute(new AbortController().signal);
174
181
  const content = result.llmContent;
175
182
  const expectedPath1 = path.join(tempRootDir, 'file1.txt');
176
183
  const expectedPath2 = path.join(tempRootDir, 'subdir/file2.js');
@@ -183,7 +190,8 @@ describe('ReadManyFilesTool', () => {
183
190
  createFile('another.txt', 'Another text');
184
191
  createFile('sub/data.json', '{}');
185
192
  const params = { paths: ['*.txt'] };
186
- const result = await tool.execute(params, new AbortController().signal);
193
+ const invocation = tool.build(params);
194
+ const result = await invocation.execute(new AbortController().signal);
187
195
  const content = result.llmContent;
188
196
  const expectedPath1 = path.join(tempRootDir, 'file.txt');
189
197
  const expectedPath2 = path.join(tempRootDir, 'another.txt');
@@ -196,7 +204,8 @@ describe('ReadManyFilesTool', () => {
196
204
  createFile('src/main.ts', 'Main content');
197
205
  createFile('src/main.test.ts', 'Test content');
198
206
  const params = { paths: ['src/**/*.ts'], exclude: ['**/*.test.ts'] };
199
- const result = await tool.execute(params, new AbortController().signal);
207
+ const invocation = tool.build(params);
208
+ const result = await invocation.execute(new AbortController().signal);
200
209
  const content = result.llmContent;
201
210
  const expectedPath = path.join(tempRootDir, 'src/main.ts');
202
211
  expect(content).toEqual([`--- ${expectedPath} ---\n\nMain content\n\n`]);
@@ -205,7 +214,8 @@ describe('ReadManyFilesTool', () => {
205
214
  });
206
215
  it('should handle nonexistent specific files gracefully', async () => {
207
216
  const params = { paths: ['nonexistent-file.txt'] };
208
- const result = await tool.execute(params, new AbortController().signal);
217
+ const invocation = tool.build(params);
218
+ const result = await invocation.execute(new AbortController().signal);
209
219
  expect(result.llmContent).toEqual([
210
220
  'No files matching the criteria were found or all were skipped.',
211
221
  ]);
@@ -215,7 +225,8 @@ describe('ReadManyFilesTool', () => {
215
225
  createFile('node_modules/some-lib/index.js', 'lib code');
216
226
  createFile('src/app.js', 'app code');
217
227
  const params = { paths: ['**/*.js'] };
218
- const result = await tool.execute(params, new AbortController().signal);
228
+ const invocation = tool.build(params);
229
+ const result = await invocation.execute(new AbortController().signal);
219
230
  const content = result.llmContent;
220
231
  const expectedPath = path.join(tempRootDir, 'src/app.js');
221
232
  expect(content).toEqual([`--- ${expectedPath} ---\n\napp code\n\n`]);
@@ -226,7 +237,8 @@ describe('ReadManyFilesTool', () => {
226
237
  createFile('node_modules/some-lib/index.js', 'lib code');
227
238
  createFile('src/app.js', 'app code');
228
239
  const params = { paths: ['**/*.js'], useDefaultExcludes: false };
229
- const result = await tool.execute(params, new AbortController().signal);
240
+ const invocation = tool.build(params);
241
+ const result = await invocation.execute(new AbortController().signal);
230
242
  const content = result.llmContent;
231
243
  const expectedPath1 = path.join(tempRootDir, 'node_modules/some-lib/index.js');
232
244
  const expectedPath2 = path.join(tempRootDir, 'src/app.js');
@@ -237,7 +249,8 @@ describe('ReadManyFilesTool', () => {
237
249
  it('should include images as inlineData parts if explicitly requested by extension', async () => {
238
250
  createBinaryFile('image.png', Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]));
239
251
  const params = { paths: ['*.png'] }; // Explicitly requesting .png
240
- const result = await tool.execute(params, new AbortController().signal);
252
+ const invocation = tool.build(params);
253
+ const result = await invocation.execute(new AbortController().signal);
241
254
  expect(result.llmContent).toEqual([
242
255
  {
243
256
  inlineData: {
@@ -253,7 +266,8 @@ describe('ReadManyFilesTool', () => {
253
266
  it('should include images as inlineData parts if explicitly requested by name', async () => {
254
267
  createBinaryFile('myExactImage.png', Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]));
255
268
  const params = { paths: ['myExactImage.png'] }; // Explicitly requesting by full name
256
- const result = await tool.execute(params, new AbortController().signal);
269
+ const invocation = tool.build(params);
270
+ const result = await invocation.execute(new AbortController().signal);
257
271
  expect(result.llmContent).toEqual([
258
272
  {
259
273
  inlineData: {
@@ -269,7 +283,8 @@ describe('ReadManyFilesTool', () => {
269
283
  createBinaryFile('document.pdf', Buffer.from('%PDF-1.4...'));
270
284
  createFile('notes.txt', 'text notes');
271
285
  const params = { paths: ['*'] }; // Generic glob, not specific to .pdf
272
- const result = await tool.execute(params, new AbortController().signal);
286
+ const invocation = tool.build(params);
287
+ const result = await invocation.execute(new AbortController().signal);
273
288
  const content = result.llmContent;
274
289
  const expectedPath = path.join(tempRootDir, 'notes.txt');
275
290
  expect(content.some((c) => typeof c === 'string' &&
@@ -280,7 +295,8 @@ describe('ReadManyFilesTool', () => {
280
295
  it('should include PDF files as inlineData parts if explicitly requested by extension', async () => {
281
296
  createBinaryFile('important.pdf', Buffer.from('%PDF-1.4...'));
282
297
  const params = { paths: ['*.pdf'] }; // Explicitly requesting .pdf files
283
- const result = await tool.execute(params, new AbortController().signal);
298
+ const invocation = tool.build(params);
299
+ const result = await invocation.execute(new AbortController().signal);
284
300
  expect(result.llmContent).toEqual([
285
301
  {
286
302
  inlineData: {
@@ -293,7 +309,8 @@ describe('ReadManyFilesTool', () => {
293
309
  it('should include PDF files as inlineData parts if explicitly requested by name', async () => {
294
310
  createBinaryFile('report-final.pdf', Buffer.from('%PDF-1.4...'));
295
311
  const params = { paths: ['report-final.pdf'] };
296
- const result = await tool.execute(params, new AbortController().signal);
312
+ const invocation = tool.build(params);
313
+ const result = await invocation.execute(new AbortController().signal);
297
314
  expect(result.llmContent).toEqual([
298
315
  {
299
316
  inlineData: {
@@ -308,7 +325,8 @@ describe('ReadManyFilesTool', () => {
308
325
  createFile('bar.ts', '');
309
326
  createFile('foo.quux', '');
310
327
  const params = { paths: ['foo.bar', 'bar.ts', 'foo.quux'] };
311
- const result = await tool.execute(params, new AbortController().signal);
328
+ const invocation = tool.build(params);
329
+ const result = await invocation.execute(new AbortController().signal);
312
330
  expect(result.returnDisplay).not.toContain('foo.bar');
313
331
  expect(result.returnDisplay).not.toContain('foo.quux');
314
332
  expect(result.returnDisplay).toContain('bar.ts');
@@ -330,7 +348,8 @@ describe('ReadManyFilesTool', () => {
330
348
  fs.writeFileSync(path.join(tempDir1, 'file1.txt'), 'Content1');
331
349
  fs.writeFileSync(path.join(tempDir2, 'file2.txt'), 'Content2');
332
350
  const params = { paths: ['*.txt'] };
333
- const result = await tool.execute(params, new AbortController().signal);
351
+ const invocation = tool.build(params);
352
+ const result = await invocation.execute(new AbortController().signal);
334
353
  const content = result.llmContent;
335
354
  if (!Array.isArray(content)) {
336
355
  throw new Error(`llmContent is not an array: ${content}`);
@@ -349,7 +368,8 @@ describe('ReadManyFilesTool', () => {
349
368
  const longContent = Array.from({ length: 2500 }, (_, i) => `L${i}`).join('\n');
350
369
  createFile('large-file.txt', longContent);
351
370
  const params = { paths: ['*.txt'] };
352
- const result = await tool.execute(params, new AbortController().signal);
371
+ const invocation = tool.build(params);
372
+ const result = await invocation.execute(new AbortController().signal);
353
373
  const content = result.llmContent;
354
374
  const normalFileContent = content.find((c) => c.includes('file1.txt'));
355
375
  const truncatedFileContent = content.find((c) => c.includes('large-file.txt'));
@@ -387,7 +407,8 @@ describe('ReadManyFilesTool', () => {
387
407
  return 'text';
388
408
  });
389
409
  const params = { paths: files };
390
- const result = await tool.execute(params, new AbortController().signal);
410
+ const invocation = tool.build(params);
411
+ const result = await invocation.execute(new AbortController().signal);
391
412
  // Verify all files were processed
392
413
  const content = result.llmContent;
393
414
  expect(content).toHaveLength(fileCount);
@@ -410,7 +431,8 @@ describe('ReadManyFilesTool', () => {
410
431
  'valid3.txt',
411
432
  ],
412
433
  };
413
- const result = await tool.execute(params, new AbortController().signal);
434
+ const invocation = tool.build(params);
435
+ const result = await invocation.execute(new AbortController().signal);
414
436
  const content = result.llmContent;
415
437
  // Should successfully process valid files despite one failure
416
438
  expect(content.length).toBeGreaterThanOrEqual(3);
@@ -436,7 +458,8 @@ describe('ReadManyFilesTool', () => {
436
458
  executionOrder.push(`end:${fileName}`);
437
459
  return 'text';
438
460
  });
439
- await tool.execute({ paths: files }, new AbortController().signal);
461
+ const invocation = tool.build({ paths: files });
462
+ await invocation.execute(new AbortController().signal);
440
463
  console.log('Execution order:', executionOrder);
441
464
  // Verify concurrent execution pattern
442
465
  // In parallel execution: all "start:" events should come before all "end:" events