mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import path from "path"
|
|
|
|
import { Task } from "../task/Task"
|
|
import { ToolUse, AskApproval, HandleError, PushToolResult, RemoveClosingTag } from "../../shared/tools"
|
|
import { ClineSayTool } from "../../shared/ExtensionMessage"
|
|
import { getReadablePath } from "../../utils/path"
|
|
import { isPathOutsideWorkspace } from "../../utils/pathUtils"
|
|
import { regexSearchFiles } from "../../services/ripgrep"
|
|
|
|
export async function searchFilesTool(
|
|
cline: Task,
|
|
block: ToolUse,
|
|
askApproval: AskApproval,
|
|
handleError: HandleError,
|
|
pushToolResult: PushToolResult,
|
|
removeClosingTag: RemoveClosingTag,
|
|
) {
|
|
const relDirPath: string | undefined = block.params.path
|
|
const regex: string | undefined = block.params.regex
|
|
const filePattern: string | undefined = block.params.file_pattern
|
|
|
|
const absolutePath = relDirPath ? path.resolve(cline.cwd, relDirPath) : cline.cwd
|
|
const isOutsideWorkspace = isPathOutsideWorkspace(absolutePath)
|
|
|
|
const sharedMessageProps: ClineSayTool = {
|
|
tool: "searchFiles",
|
|
path: getReadablePath(cline.cwd, removeClosingTag("path", relDirPath)),
|
|
regex: removeClosingTag("regex", regex),
|
|
filePattern: removeClosingTag("file_pattern", filePattern),
|
|
isOutsideWorkspace,
|
|
}
|
|
|
|
try {
|
|
if (block.partial) {
|
|
const partialMessage = JSON.stringify({ ...sharedMessageProps, content: "" } satisfies ClineSayTool)
|
|
await cline.ask("tool", partialMessage, block.partial).catch(() => {})
|
|
return
|
|
} else {
|
|
if (!relDirPath) {
|
|
cline.consecutiveMistakeCount++
|
|
cline.recordToolError("search_files")
|
|
pushToolResult(await cline.sayAndCreateMissingParamError("search_files", "path"))
|
|
return
|
|
}
|
|
|
|
if (!regex) {
|
|
cline.consecutiveMistakeCount++
|
|
cline.recordToolError("search_files")
|
|
pushToolResult(await cline.sayAndCreateMissingParamError("search_files", "regex"))
|
|
return
|
|
}
|
|
|
|
cline.consecutiveMistakeCount = 0
|
|
|
|
const results = await regexSearchFiles(
|
|
cline.cwd,
|
|
absolutePath,
|
|
regex,
|
|
filePattern,
|
|
cline.rooIgnoreController,
|
|
)
|
|
|
|
const completeMessage = JSON.stringify({ ...sharedMessageProps, content: results } satisfies ClineSayTool)
|
|
const didApprove = await askApproval("tool", completeMessage)
|
|
|
|
if (!didApprove) {
|
|
return
|
|
}
|
|
|
|
pushToolResult(results)
|
|
|
|
return
|
|
}
|
|
} catch (error) {
|
|
await handleError("searching files", error)
|
|
return
|
|
}
|
|
}
|