Introduce limits for search results. (#18767)

This commit is contained in:
Christian Gunderman
2026-02-11 03:50:10 +00:00
committed by GitHub
parent 49d55d972e
commit 0d034b8c18
6 changed files with 249 additions and 3 deletions
+83
View File
@@ -1848,6 +1848,89 @@ describe('RipGrepTool', () => {
expect(invocation.getDescription()).toContain(path.join('src', 'app'));
});
});
describe('new parameters', () => {
it('should pass --max-count when max_matches_per_file is provided', async () => {
mockSpawn.mockImplementationOnce(
createMockSpawn({
outputData:
JSON.stringify({
type: 'match',
data: {
path: { text: 'fileA.txt' },
line_number: 1,
lines: { text: 'hello world\n' },
},
}) + '\n',
exitCode: 0,
}),
);
const params: RipGrepToolParams = {
pattern: 'world',
max_matches_per_file: 1,
};
const invocation = grepTool.build(params);
await invocation.execute(abortSignal);
const spawnArgs = mockSpawn.mock.calls[0][1];
expect(spawnArgs).toContain('--max-count');
expect(spawnArgs).toContain('1');
});
it('should respect total_max_matches and truncate results', async () => {
// Return 3 matches, but set total_max_matches to 2
mockSpawn.mockImplementationOnce(
createMockSpawn({
outputData:
JSON.stringify({
type: 'match',
data: {
path: { text: 'fileA.txt' },
line_number: 1,
lines: { text: 'match 1\n' },
},
}) +
'\n' +
JSON.stringify({
type: 'match',
data: {
path: { text: 'fileA.txt' },
line_number: 2,
lines: { text: 'match 2\n' },
},
}) +
'\n' +
JSON.stringify({
type: 'match',
data: {
path: { text: 'fileA.txt' },
line_number: 3,
lines: { text: 'match 3\n' },
},
}) +
'\n',
exitCode: 0,
}),
);
const params: RipGrepToolParams = {
pattern: 'match',
total_max_matches: 2,
};
const invocation = grepTool.build(params);
const result = await invocation.execute(abortSignal);
expect(result.llmContent).toContain('Found 2 matches');
expect(result.llmContent).toContain(
'results limited to 2 matches for performance',
);
expect(result.llmContent).toContain('L1: match 1');
expect(result.llmContent).toContain('L2: match 2');
expect(result.llmContent).not.toContain('L3: match 3');
expect(result.returnDisplay).toBe('Found 2 matches (limited)');
});
});
});
afterAll(() => {