mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-23 03:24:42 -07:00
Make limit a parameter.
This commit is contained in:
@@ -3,5 +3,5 @@
|
||||
* Copyright 2026 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
export const DEFAULT_TOTAL_MAX_MATCHES = 100;
|
||||
export const DEFAULT_TOTAL_MAX_MATCHES = 2000;
|
||||
export const DEFAULT_SEARCH_TIMEOUT_MS = 30000;
|
||||
|
||||
@@ -56,6 +56,11 @@ export interface GrepToolParams {
|
||||
* Optional: Maximum number of matches to return per file.
|
||||
*/
|
||||
max_matches_per_file?: number;
|
||||
|
||||
/**
|
||||
* Optional: Maximum number of total matches to return.
|
||||
*/
|
||||
total_max_matches?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -194,7 +199,8 @@ class GrepToolInvocation extends BaseToolInvocation<
|
||||
|
||||
// Collect matches from all search directories
|
||||
let allMatches: GrepMatch[] = [];
|
||||
const totalMaxMatches = DEFAULT_TOTAL_MAX_MATCHES;
|
||||
const totalMaxMatches =
|
||||
this.params.total_max_matches ?? DEFAULT_TOTAL_MAX_MATCHES;
|
||||
|
||||
// Create a timeout controller to prevent indefinitely hanging searches
|
||||
const timeoutController = new AbortController();
|
||||
@@ -797,6 +803,12 @@ export class GrepTool extends BaseDeclarativeTool<GrepToolParams, ToolResult> {
|
||||
type: 'integer',
|
||||
minimum: 1,
|
||||
},
|
||||
total_max_matches: {
|
||||
description:
|
||||
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 100 if omitted.',
|
||||
type: 'integer',
|
||||
minimum: 1,
|
||||
},
|
||||
},
|
||||
required: ['pattern'],
|
||||
type: 'object',
|
||||
|
||||
@@ -141,6 +141,11 @@ export interface RipGrepToolParams {
|
||||
* Optional: Maximum number of matches to return per file.
|
||||
*/
|
||||
max_matches_per_file?: number;
|
||||
|
||||
/**
|
||||
* Optional: Maximum number of total matches to return.
|
||||
*/
|
||||
total_max_matches?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,7 +219,8 @@ class GrepToolInvocation extends BaseToolInvocation<
|
||||
|
||||
const searchDirDisplay = pathParam;
|
||||
|
||||
const totalMaxMatches = DEFAULT_TOTAL_MAX_MATCHES;
|
||||
const totalMaxMatches =
|
||||
this.params.total_max_matches ?? DEFAULT_TOTAL_MAX_MATCHES;
|
||||
if (this.config.getDebugMode()) {
|
||||
debugLogger.log(`[GrepTool] Total result limit: ${totalMaxMatches}`);
|
||||
}
|
||||
@@ -530,7 +536,7 @@ class GrepToolInvocation extends BaseToolInvocation<
|
||||
): GrepMatch | null {
|
||||
try {
|
||||
const json = JSON.parse(line);
|
||||
if (json.type === 'match') {
|
||||
if (json.type === 'match' || json.type === 'context') {
|
||||
const match = json.data;
|
||||
// Defensive check: ensure text properties exist (skips binary/invalid encoding)
|
||||
if (match.path?.text && match.lines?.text) {
|
||||
@@ -667,6 +673,12 @@ export class RipGrepTool extends BaseDeclarativeTool<
|
||||
type: 'integer',
|
||||
minimum: 1,
|
||||
},
|
||||
total_max_matches: {
|
||||
description:
|
||||
'Optional: Maximum number of total matches to return. Use this to limit the overall size of the response. Defaults to 2000 if omitted.',
|
||||
type: 'integer',
|
||||
minimum: 1,
|
||||
},
|
||||
},
|
||||
required: ['pattern'],
|
||||
type: 'object',
|
||||
|
||||
Reference in New Issue
Block a user