mod fs;
mod shell;
mod web_search;
pub use fs::{
EditFileArgs, EditFileTool, ListDirArgs, ListDirTool, ReadFileArgs, ReadFileTool,
WriteFileArgs, WriteFileTool,
};
pub use shell::{ExecArgs, ExecResult, ExecTool};
pub use web_search::{
BingProvider, BoxedSearchProvider, BraveProvider, DuckDuckGoProvider, SearchProvider,
SearchResult, SearxngProvider, TavilyProvider, WebSearchArgs, WebSearchTool,
};
use crate::tool::BoxedTool;
pub const BUILTIN_TOOL_NAMES: &[&str] = &[
"read_file",
"write_file",
"edit_file",
"list_dir",
"exec",
"web_search",
];
#[must_use]
pub fn create_tool(name: &str) -> Option<BoxedTool> {
match name {
"read_file" => Some(Box::new(ReadFileTool::new())),
"write_file" => Some(Box::new(WriteFileTool::new())),
"edit_file" => Some(Box::new(EditFileTool::new())),
"list_dir" => Some(Box::new(ListDirTool::new())),
"exec" => Some(Box::new(ExecTool::new())),
_ => None,
}
}
#[must_use]
pub fn create_tools(names: &[&str]) -> Vec<BoxedTool> {
names.iter().filter_map(|name| create_tool(name)).collect()
}
#[must_use]
pub fn is_builtin_tool(name: &str) -> bool {
BUILTIN_TOOL_NAMES.contains(&name)
}
#[must_use]
pub fn fs_tools() -> Vec<BoxedTool> {
vec![
Box::new(ReadFileTool::new()),
Box::new(WriteFileTool::new()),
Box::new(EditFileTool::new()),
Box::new(ListDirTool::new()),
]
}
#[must_use]
pub fn all_tools() -> Vec<BoxedTool> {
vec![
Box::new(ReadFileTool::new()),
Box::new(WriteFileTool::new()),
Box::new(EditFileTool::new()),
Box::new(ListDirTool::new()),
Box::new(ExecTool::new()),
]
}