Make regex search tool optionally case-sensitive (#28427)
Release Notes: - The agent panel's regex search tool is now optionally case-sensitive.
This commit is contained in:
parent
9d0fe164a7
commit
e43a397f1d
1 changed files with 18 additions and 8 deletions
|
@ -26,6 +26,10 @@ pub struct RegexSearchToolInput {
|
||||||
/// When not provided, starts from the beginning.
|
/// When not provided, starts from the beginning.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub offset: u32,
|
pub offset: u32,
|
||||||
|
|
||||||
|
/// Whether the regex is case-sensitive. Defaults to false (case-insensitive).
|
||||||
|
#[serde(default)]
|
||||||
|
pub case_sensitive: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RegexSearchToolInput {
|
impl RegexSearchToolInput {
|
||||||
|
@ -64,12 +68,17 @@ impl Tool for RegexSearchTool {
|
||||||
match serde_json::from_value::<RegexSearchToolInput>(input.clone()) {
|
match serde_json::from_value::<RegexSearchToolInput>(input.clone()) {
|
||||||
Ok(input) => {
|
Ok(input) => {
|
||||||
let page = input.page();
|
let page = input.page();
|
||||||
let regex = MarkdownString::inline_code(&input.regex);
|
let regex_str = MarkdownString::inline_code(&input.regex);
|
||||||
|
let case_info = if input.case_sensitive {
|
||||||
|
" (case-sensitive)"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
|
|
||||||
if page > 1 {
|
if page > 1 {
|
||||||
format!("Get page {page} of search results for regex “{regex}”")
|
format!("Get page {page} of search results for regex {regex_str}{case_info}")
|
||||||
} else {
|
} else {
|
||||||
format!("Search files for regex “{regex}”")
|
format!("Search files for regex {regex_str}{case_info}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(_) => "Search with regex".to_string(),
|
Err(_) => "Search with regex".to_string(),
|
||||||
|
@ -86,15 +95,16 @@ impl Tool for RegexSearchTool {
|
||||||
) -> Task<Result<String>> {
|
) -> Task<Result<String>> {
|
||||||
const CONTEXT_LINES: u32 = 2;
|
const CONTEXT_LINES: u32 = 2;
|
||||||
|
|
||||||
let (offset, regex) = match serde_json::from_value::<RegexSearchToolInput>(input) {
|
let (offset, regex, case_sensitive) =
|
||||||
Ok(input) => (input.offset, input.regex),
|
match serde_json::from_value::<RegexSearchToolInput>(input) {
|
||||||
|
Ok(input) => (input.offset, input.regex, input.case_sensitive),
|
||||||
Err(err) => return Task::ready(Err(anyhow!(err))),
|
Err(err) => return Task::ready(Err(anyhow!(err))),
|
||||||
};
|
};
|
||||||
|
|
||||||
let query = match SearchQuery::regex(
|
let query = match SearchQuery::regex(
|
||||||
®ex,
|
®ex,
|
||||||
false,
|
false,
|
||||||
false,
|
case_sensitive,
|
||||||
false,
|
false,
|
||||||
PathMatcher::default(),
|
PathMatcher::default(),
|
||||||
PathMatcher::default(),
|
PathMatcher::default(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue