@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.
- package/README.md +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/setup.js +47 -16
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +105 -5
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/config/config.d.ts +6 -6
- package/dist/src/config/config.js +18 -11
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +87 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +3 -1
- package/dist/src/core/client.js +22 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +69 -9
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +0 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +2 -4
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +6 -3
- package/dist/src/ide/detect-ide.js +37 -15
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.d.ts +6 -0
- package/dist/src/ide/detect-ide.test.js +65 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -0
- package/dist/src/ide/ide-client.js +3 -3
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.js +2 -46
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +0 -39
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +6 -6
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +0 -1
- package/dist/src/mcp/oauth-provider.js +0 -1
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mocks/msw.d.ts +6 -0
- package/dist/src/mocks/msw.js +8 -0
- package/dist/src/mocks/msw.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +31 -13
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +140 -149
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +172 -77
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.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/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +15 -0
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/sdk.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +13 -5
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/telemetry.test.js +2 -2
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +33 -14
- package/dist/src/telemetry/types.js +38 -23
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/config.d.ts +16 -0
- package/dist/src/test-utils/config.js +32 -0
- package/dist/src/test-utils/config.js.map +1 -0
- package/dist/src/test-utils/tools.js +2 -2
- package/dist/src/test-utils/tools.js.map +1 -1
- package/dist/src/tools/edit.js +3 -4
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +0 -2
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.js +2 -2
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.js +2 -2
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.d.ts +3 -22
- package/dist/src/tools/ls.js +81 -77
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +62 -34
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -5
- package/dist/src/tools/mcp-tool.js +41 -18
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +53 -51
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +9 -13
- package/dist/src/tools/memoryTool.js +124 -117
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +28 -17
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +2 -2
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +4 -5
- package/dist/src/tools/read-many-files.js +112 -100
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +60 -37
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +4 -6
- package/dist/src/tools/shell.js +99 -105
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +40 -46
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +5 -0
- package/dist/src/tools/tool-registry.js +13 -2
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +16 -15
- package/dist/src/tools/tools.js +19 -18
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +4 -7
- package/dist/src/tools/web-fetch.js +62 -62
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +8 -4
- 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 +2 -1
- package/dist/src/tools/write-file.js +6 -4
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +0 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/errorParsing.d.ts +8 -0
- package/dist/src/utils/errorParsing.js +93 -0
- package/dist/src/utils/errorParsing.js.map +1 -0
- package/dist/src/utils/errorParsing.test.d.ts +6 -0
- package/dist/src/utils/errorParsing.test.js +172 -0
- package/dist/src/utils/errorParsing.test.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.js +1 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/result-cache.d.ts +1 -2
- package/dist/src/utils/filesearch/result-cache.js +1 -3
- package/dist/src/utils/filesearch/result-cache.js.map +1 -1
- package/dist/src/utils/filesearch/result-cache.test.js +3 -4
- package/dist/src/utils/filesearch/result-cache.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +1 -1
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +17 -20
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.d.ts +1 -5
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/google-gemini-cli-core-0.1.18.tgz +0 -0
- package/dist/src/core/modelCheck.d.ts +0 -14
- package/dist/src/core/modelCheck.js +0 -62
- 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 {
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
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(
|
|
168
|
-
const
|
|
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('
|
|
101
|
-
it('should return
|
|
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
|
-
|
|
103
|
+
const invocation = tool.build(params);
|
|
104
|
+
expect(invocation).toBeDefined();
|
|
104
105
|
});
|
|
105
|
-
it('should return
|
|
106
|
+
it('should return an invocation for valid glob patterns within root', () => {
|
|
106
107
|
const params = { paths: ['*.txt', 'subdir/**/*.js'] };
|
|
107
|
-
|
|
108
|
+
const invocation = tool.build(params);
|
|
109
|
+
expect(invocation).toBeDefined();
|
|
108
110
|
});
|
|
109
|
-
it('should return
|
|
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
|
-
|
|
113
|
+
const invocation = tool.build(params);
|
|
114
|
+
expect(invocation).toBeDefined();
|
|
112
115
|
});
|
|
113
|
-
it('should return
|
|
116
|
+
it('should return an invocation for absolute paths as execute handles this', () => {
|
|
114
117
|
const params = { paths: [path.join(tempDirOutsideRoot, 'absolute.txt')] };
|
|
115
|
-
|
|
118
|
+
const invocation = tool.build(params);
|
|
119
|
+
expect(invocation).toBeDefined();
|
|
116
120
|
});
|
|
117
|
-
it('should
|
|
121
|
+
it('should throw error if paths array is empty', () => {
|
|
118
122
|
const params = { paths: [] };
|
|
119
|
-
expect(tool.
|
|
123
|
+
expect(() => tool.build(params)).toThrow('params/paths must NOT have fewer than 1 items');
|
|
120
124
|
});
|
|
121
|
-
it('should return
|
|
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
|
-
|
|
131
|
+
const invocation = tool.build(params);
|
|
132
|
+
expect(invocation).toBeDefined();
|
|
128
133
|
});
|
|
129
|
-
it('should
|
|
134
|
+
it('should throw error if paths array contains an empty string', () => {
|
|
130
135
|
const params = { paths: ['file1.txt', ''] };
|
|
131
|
-
expect(tool.
|
|
136
|
+
expect(() => tool.build(params)).toThrow('params/paths/1 must NOT have fewer than 1 characters');
|
|
132
137
|
});
|
|
133
|
-
it('should
|
|
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.
|
|
143
|
+
expect(() => tool.build(params)).toThrow('params/include/1 must be string');
|
|
139
144
|
});
|
|
140
|
-
it('should
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|