mod bash;
pub mod batch;
mod edit;
mod git;
mod glob_tool;
mod grep;
mod ls;
mod patch;
mod read;
mod web_fetch;
mod web_search;
mod write;
use super::registry::ToolRegistry;
use std::sync::Arc;
pub fn register_builtins(registry: &ToolRegistry) {
registry.register_builtin(Arc::new(read::ReadTool));
registry.register_builtin(Arc::new(write::WriteTool));
registry.register_builtin(Arc::new(edit::EditTool));
registry.register_builtin(Arc::new(patch::PatchTool));
registry.register_builtin(Arc::new(bash::BashTool));
registry.register_builtin(Arc::new(grep::GrepTool));
registry.register_builtin(Arc::new(glob_tool::GlobTool));
registry.register_builtin(Arc::new(ls::LsTool));
registry.register_builtin(Arc::new(web_fetch::WebFetchTool));
registry.register_builtin(Arc::new(web_search::WebSearchTool));
registry.register_builtin(Arc::new(git::GitTool));
}
pub fn register_batch(registry: &Arc<ToolRegistry>) {
registry.register_builtin(Arc::new(batch::BatchTool::new(Arc::clone(registry))));
}
pub fn register_task(
registry: &Arc<ToolRegistry>,
llm_client: Arc<dyn crate::llm::LlmClient>,
agent_registry: Arc<crate::subagent::AgentRegistry>,
workspace: String,
) {
register_task_with_mcp(registry, llm_client, agent_registry, workspace, None);
}
pub fn register_task_with_mcp(
registry: &Arc<ToolRegistry>,
llm_client: Arc<dyn crate::llm::LlmClient>,
agent_registry: Arc<crate::subagent::AgentRegistry>,
workspace: String,
mcp_manager: Option<Arc<crate::mcp::manager::McpManager>>,
) {
use crate::tools::task::{ParallelTaskTool, RunTeamTool, TaskExecutor, TaskTool};
let executor = Arc::new(match mcp_manager {
Some(mcp) => TaskExecutor::with_mcp(agent_registry, llm_client, workspace, mcp),
None => TaskExecutor::new(agent_registry, llm_client, workspace),
});
registry.register_builtin(Arc::new(TaskTool::new(Arc::clone(&executor))));
registry.register_builtin(Arc::new(ParallelTaskTool::new(Arc::clone(&executor))));
registry.register_builtin(Arc::new(RunTeamTool::new(executor)));
}
pub fn register_skill(
registry: &Arc<ToolRegistry>,
llm_client: Arc<dyn crate::llm::LlmClient>,
skill_registry: Arc<crate::skills::SkillRegistry>,
tool_executor: Arc<crate::tools::ToolExecutor>,
base_config: crate::agent::AgentConfig,
) {
use crate::tools::skill::SkillTool;
registry.register_builtin(Arc::new(SkillTool::new(
skill_registry,
llm_client,
tool_executor,
base_config,
)));
}