Compare commits

...

19 Commits

Author SHA1 Message Date
Christian Gunderman 9f0d2b92f0 Limit search output. 2026-01-28 22:27:49 -08:00
Christian Gunderman cbe4fc9a89 Update prompt baseline. 2026-01-28 21:50:06 -08:00
Christian Gunderman 34f754e2e9 Add minimization mandate. 2026-01-28 21:40:29 -08:00
Christian Gunderman f35b67fd47 Reduce the prompt changes. 2026-01-28 21:30:31 -08:00
Christian Gunderman 866336dafb Revert test diag. 2026-01-28 21:29:36 -08:00
Christian Gunderman 2468f56922 Update debug command. 2026-01-28 21:27:48 -08:00
Christian Gunderman f50ca36fd4 Fix. 2026-01-28 21:21:52 -08:00
Christian Gunderman b5963fa0c9 Always log on exit. 2026-01-28 21:04:37 -08:00
Christian Gunderman 8362e3fe32 Add pkg json. 2026-01-28 20:45:27 -08:00
Christian Gunderman 86a134e5a9 Stabilize test. 2026-01-28 20:25:31 -08:00
Christian Gunderman 67be126c98 Test updates. 2026-01-28 20:01:04 -08:00
Christian Gunderman 89b1a9abd7 Revert "Simplify prompt changes."
This reverts commit 4e1fa84d75.
2026-01-28 18:19:57 -08:00
Christian Gunderman 3d38eeb0f4 Slightly more realistic test. 2026-01-28 18:00:56 -08:00
Christian Gunderman 4e1fa84d75 Simplify prompt changes. 2026-01-28 17:38:59 -08:00
Christian Gunderman 09a79b3058 Rename test. 2026-01-28 17:23:24 -08:00
Christian Gunderman 0a679226bb Cleanup eval. 2026-01-28 17:15:09 -08:00
Christian Gunderman 5f50ccea75 test: add eval case for implicit ranged reads 2026-01-28 11:37:10 -08:00
Christian Gunderman d858e855cb Further prompt improvements. 2026-01-28 10:55:08 -08:00
Christian Gunderman 796dfac23c Steer towards frugal reads. 2026-01-27 21:17:06 -08:00
8 changed files with 230 additions and 10 deletions
+3 -1
View File
@@ -27,7 +27,9 @@ You are an expert at fixing behavioral evaluations.
- Your primary mechanism for improving the agent's behavior is to make changes to
tool instructions, prompt.ts, and/or modules that contribute to the prompt.
- If prompt and description changes are unsuccessful, use logs and debugging to
confirm that everything is working as expected.
confirm that everything is working as expected. You can try some of the following.
- **Interactive Prompts**: Commands like `npx` may hang waiting for user confirmation to install a package. Prefer `npx --yes <cmd>`.
- **Missing package.json**: Some tools (like `eslint`) require a `package.json` to be present in the working directory or a parent.
- If unable to fix the test, you can make recommendations for architecture changes
that might help stablize the test. Be sure to THINK DEEPLY if offering architecture guidance.
Some facts that might help with this are:
+186
View File
@@ -0,0 +1,186 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, expect } from 'vitest';
import { evalTest } from './test-helper.js';
import { READ_FILE_TOOL_NAME, GREP_TOOL_NAME } from '@google/gemini-cli-core';
describe('Frugal reads eval', () => {
/**
* Ensures that the agent is frugal in its use of context by relying
* primarily on ranged reads when the line number is known. Smaller
* context generally helps the agent to work more reliably for longer.
*/
evalTest('ALWAYS_PASSES', {
name: 'should use ranged read when specific line is targeted',
files: {
'package.json': JSON.stringify({
name: 'test-project',
version: '1.0.0',
type: 'module',
}),
'eslint.config.mjs': `export default [
{
files: ["**/*.ts"],
rules: {
"no-var": "error"
}
}
];`,
'linter_mess.ts': (() => {
const lines = [];
for (let i = 0; i < 4000; i++) {
if (i === 1000 || i === 1040 || i === 3000) {
lines.push(`var oldVar${i} = "needs fix";`);
} else {
lines.push(`const goodVar${i} = "clean";`);
}
}
return lines.join('\n');
})(),
},
prompt:
'Fix all linter errors in linter_mess.ts manually by editing the file. Run eslint directly (using "npx --yes eslint") to find them. Do not run the file.',
assert: async (rig) => {
const logs = rig.readToolLogs();
// Check if the agent read the whole file
const readCalls = logs.filter(
(log) => log.toolRequest?.name === READ_FILE_TOOL_NAME,
);
const targetFileReads = readCalls.filter((call) => {
const args = JSON.parse(call.toolRequest.args);
return args.file_path.includes('linter_mess.ts');
});
expect(
targetFileReads.length,
'Agent should have used read_file to check context',
).toBeGreaterThan(0);
// We expect 2-3 ranges: one covering 1000/1040 (or two separate ones) and one for 3000
// Some models re-verify their findings, so we relax this to 6.
expect(
targetFileReads.length,
'Agent should have used ranged reads on the target file',
).toBeGreaterThanOrEqual(2);
expect(
targetFileReads.length,
'Agent should have used ranged reads on the target file',
).toBeLessThanOrEqual(6);
let totalLinesRead = 0;
const readRanges: { offset: number; limit: number }[] = [];
for (const call of targetFileReads) {
const args = JSON.parse(call.toolRequest.args);
// file_path check is redundant now but harmless
const limit = args.limit ?? 4000;
const offset = args.offset ?? 0;
totalLinesRead += limit;
readRanges.push({ offset, limit });
expect(
args.limit,
'Agent read the entire file (missing limit) instead of using ranged read',
).toBeDefined();
expect(args.limit, 'Agent read too many lines at once').toBeLessThan(
1000,
);
}
// Ranged read shoud be frugal and just enough to satisfy the task at hand.
expect(
totalLinesRead,
'Agent read more of the file than expected',
).toBeLessThan(500);
// Check that we read around the error lines
const errorLines = [1000, 1040, 3000];
for (const line of errorLines) {
const covered = readRanges.some(
(range) => line >= range.offset && line < range.offset + range.limit,
);
expect(covered, `Agent should have read around line ${line}`).toBe(
true,
);
}
},
});
/**
* Ensures that the agent uses search_file_content effectively when searching
* through large files, and refines its search or uses context to find the
* correct match among many.
*/
evalTest('ALWAYS_PASSES', {
name: 'should use search_file_content with context and limits to find a needle in a haystack',
files: (() => {
const files: Record<string, string> = {};
for (let f = 1; f <= 5; f++) {
const lines = [];
for (let i = 0; i < 2000; i++) {
if (f === 3 && i === 1500) {
lines.push('Pattern: TargetMatch');
lines.push('Metadata: CORRECT_VALUE_42');
} else if (i % 50 === 0) {
lines.push('Pattern: TargetMatch');
lines.push('Metadata: WRONG_VALUE');
} else {
lines.push(`Noise line ${i} in file ${f}`);
}
}
files[`large_file_${f}.txt`] = lines.join('\n');
}
return files;
})(),
prompt:
'Find the "Metadata" value associated with the "Pattern: TargetMatch" in the large_file_*.txt files. There are many such patterns, so you MUST set the "limit" parameter of search_file_content to 10 to avoid returning too many results. If you do not find the correct metadata (CORRECT_VALUE_42) in the first batch, refine your search or search file-by-file.',
assert: async (rig) => {
const logs = rig.readToolLogs();
const grepCalls = logs.filter(
(log) => log.toolRequest?.name === GREP_TOOL_NAME,
);
expect(
grepCalls.length,
'Agent should have used search_file_content to find the pattern',
).toBeGreaterThan(0);
// Check that the agent used the limit parameter
const usedLimit = grepCalls.some((call) => {
const args = JSON.parse(call.toolRequest.args);
return args.limit !== undefined && args.limit <= 20;
});
expect(usedLimit, 'Agent should have used the limit parameter').toBe(
true,
);
// We expect the agent to eventually use context or refine the search.
const usedContext = grepCalls.some((call) => {
const args = JSON.parse(call.toolRequest.args);
return (args.after ?? 0) > 0 || (args.context ?? 0) > 0;
});
const usedReadForContext = logs.some((log) => {
if (log.toolRequest?.name !== READ_FILE_TOOL_NAME) return false;
const args = JSON.parse(log.toolRequest.args);
return (
args.file_path.includes('large_file_3.txt') &&
args.offset !== undefined
);
});
expect(
usedContext || usedReadForContext,
'Agent should have used context (either via grep "after/context" or read_file) to find the metadata',
).toBe(true);
},
});
});
@@ -5,6 +5,7 @@ exports[`Core System Prompt (prompts.ts) > ApprovalMode in System Prompt > shoul
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -104,6 +105,7 @@ exports[`Core System Prompt (prompts.ts) > ApprovalMode in System Prompt > shoul
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -216,6 +218,7 @@ exports[`Core System Prompt (prompts.ts) > should append userMemory with separat
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -320,6 +323,7 @@ exports[`Core System Prompt (prompts.ts) > should handle CodebaseInvestigator wi
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -418,6 +422,7 @@ exports[`Core System Prompt (prompts.ts) > should handle CodebaseInvestigator wi
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -515,6 +520,7 @@ exports[`Core System Prompt (prompts.ts) > should handle git instructions when i
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -614,6 +620,7 @@ exports[`Core System Prompt (prompts.ts) > should handle git instructions when i
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -731,6 +738,7 @@ exports[`Core System Prompt (prompts.ts) > should include available_skills when
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -843,6 +851,7 @@ exports[`Core System Prompt (prompts.ts) > should include correct sandbox instru
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -942,6 +951,7 @@ exports[`Core System Prompt (prompts.ts) > should include correct sandbox instru
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1041,6 +1051,7 @@ exports[`Core System Prompt (prompts.ts) > should include correct sandbox instru
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1140,6 +1151,7 @@ exports[`Core System Prompt (prompts.ts) > should return the base prompt when us
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1239,6 +1251,7 @@ exports[`Core System Prompt (prompts.ts) > should return the base prompt when us
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1338,6 +1351,7 @@ exports[`Core System Prompt (prompts.ts) > should return the interactive avoidan
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1436,6 +1450,7 @@ exports[`Core System Prompt (prompts.ts) > should use chatty system prompt for p
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
@@ -1536,6 +1551,7 @@ exports[`Core System Prompt (prompts.ts) > should use chatty system prompt for p
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use 'search_file_content' or 'read_file' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
+1
View File
@@ -135,6 +135,7 @@ export function renderCoreMandates(options?: CoreMandatesOptions): string {
return `
# Core Mandates
- **Context Efficiency:** Minimize context usage. Do not read entire files unless necessary. Use '${GREP_TOOL_NAME}' or '${READ_FILE_TOOL_NAME}' with 'limit' to inspect large files.
- **Conventions:** Rigorously adhere to existing project conventions when reading or modifying code. Analyze surrounding code, tests, and configuration first.
- **Libraries/Frameworks:** NEVER assume a library/framework is available or appropriate. Verify its established usage within the project (check imports, configuration files like 'package.json', 'Cargo.toml', 'requirements.txt', 'build.gradle', etc., or observe neighboring files) before employing it.
- **Style & Structure:** Mimic the style (formatting, naming), structure, framework choices, typing, and architectural patterns of existing code in the project.
+1 -1
View File
@@ -912,7 +912,7 @@ export class EditTool
super(
EditTool.Name,
'Edit',
`Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when \`expected_replacements\` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${READ_FILE_TOOL_NAME} tool to examine the file's current content before attempting a text replacement.
`Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when \`expected_replacements\` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${READ_FILE_TOOL_NAME} tool (using 'offset' and 'limit' to get ~20 lines of context around the match) to examine the file's current content before attempting a text replacement.
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
+11 -5
View File
@@ -46,6 +46,11 @@ export interface GrepToolParams {
* File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")
*/
include?: string;
/**
* Max number of matches to return. Defaults to 20,000.
*/
limit?: number;
}
/**
@@ -184,7 +189,7 @@ class GrepToolInvocation extends BaseToolInvocation<
// Collect matches from all search directories
let allMatches: GrepMatch[] = [];
const totalMaxMatches = DEFAULT_TOTAL_MAX_MATCHES;
const totalMaxMatches = this.params.limit ?? DEFAULT_TOTAL_MAX_MATCHES;
// Create a timeout controller to prevent indefinitely hanging searches
const timeoutController = new AbortController();
@@ -352,10 +357,6 @@ class GrepToolInvocation extends BaseToolInvocation<
'--ignore-case',
pattern,
];
if (include) {
gitArgs.push('--', include);
}
try {
const generator = execStreaming('git', gitArgs, {
cwd: absolutePath,
@@ -587,6 +588,11 @@ export class GrepTool extends BaseDeclarativeTool<GrepToolParams, ToolResult> {
description: `Optional: A glob pattern to filter which files are searched (e.g., '*.js', '*.{ts,tsx}', 'src/**'). If omitted, searches all files (respecting potential global ignores).`,
type: 'string',
},
limit: {
description:
'Optional: Max number of matches to return. Defaults to 20,000.',
type: 'integer',
},
},
required: ['pattern'],
type: 'object',
+2 -2
View File
@@ -177,12 +177,12 @@ export class ReadFileTool extends BaseDeclarativeTool<
},
offset: {
description:
"Optional: For text files, the 0-based line number to start reading from. Requires 'limit' to be set. Use for paginating through large files.",
"Optional: For text files, the 0-based line number to start reading from. Requires 'limit' to be set. Use with 'limit' to target specific lines.",
type: 'number',
},
limit: {
description:
"Optional: For text files, maximum number of lines to read. Use with 'offset' to paginate through large files. If omitted, reads the entire file (if feasible, up to a default limit).",
"Optional: For text files, maximum number of lines to read. Use with 'offset' to paginate through large files. When checking for context or verifying changes, always set this to a small value (e.g. 50) to avoid reading the entire file.",
type: 'number',
},
},
+10 -1
View File
@@ -131,6 +131,11 @@ export interface RipGrepToolParams {
* If true, does not respect .gitignore or default ignores (like build/dist).
*/
no_ignore?: boolean;
/**
* Max number of matches to return. Defaults to 20,000.
*/
limit?: number;
}
/**
@@ -204,7 +209,7 @@ class GrepToolInvocation extends BaseToolInvocation<
const searchDirDisplay = pathParam;
const totalMaxMatches = DEFAULT_TOTAL_MAX_MATCHES;
const totalMaxMatches = this.params.limit ?? DEFAULT_TOTAL_MAX_MATCHES;
if (this.config.getDebugMode()) {
debugLogger.log(`[GrepTool] Total result limit: ${totalMaxMatches}`);
}
@@ -530,6 +535,10 @@ export class RipGrepTool extends BaseDeclarativeTool<
'If true, searches all files including those usually ignored (like in .gitignore, build/, dist/, etc). Defaults to false if omitted.',
type: 'boolean',
},
limit: {
description: 'Max number of matches to return. Defaults to 20,000.',
type: 'integer',
},
},
required: ['pattern'],
type: 'object',