a3s_code_core/tools/builtin/
mod.rs1mod bash;
7pub mod batch;
8pub mod codesearch;
9mod edit;
10mod git_worktree;
11mod glob_tool;
12mod grep;
13mod ls;
14mod patch;
15mod read;
16#[cfg(feature = "sandbox")]
17mod sandbox_tool;
18mod web_fetch;
19mod web_search;
20mod write;
21
22use super::registry::ToolRegistry;
23use std::sync::Arc;
24
25pub fn register_builtins(registry: &ToolRegistry) {
34 registry.register_builtin(Arc::new(read::ReadTool));
35 registry.register_builtin(Arc::new(write::WriteTool));
36 registry.register_builtin(Arc::new(edit::EditTool));
37 registry.register_builtin(Arc::new(patch::PatchTool));
38 registry.register_builtin(Arc::new(bash::BashTool));
39 registry.register_builtin(Arc::new(grep::GrepTool));
40 registry.register_builtin(Arc::new(glob_tool::GlobTool));
41 registry.register_builtin(Arc::new(ls::LsTool));
42 registry.register_builtin(Arc::new(web_fetch::WebFetchTool));
43 registry.register_builtin(Arc::new(web_search::WebSearchTool));
44 registry.register_builtin(Arc::new(git_worktree::GitWorktreeTool));
45
46 #[cfg(feature = "sandbox")]
48 registry.register_builtin(Arc::new(sandbox_tool::SandboxTool::new()));
49}
50
51pub fn register_batch(registry: &Arc<ToolRegistry>) {
53 registry.register_builtin(Arc::new(batch::BatchTool::new(Arc::clone(registry))));
54}
55
56pub fn register_task(
62 registry: &Arc<ToolRegistry>,
63 llm_client: Arc<dyn crate::llm::LlmClient>,
64 agent_registry: Arc<crate::subagent::AgentRegistry>,
65 workspace: String,
66) {
67 register_task_with_mcp(registry, llm_client, agent_registry, workspace, None);
68}
69
70pub fn register_task_with_mcp(
75 registry: &Arc<ToolRegistry>,
76 llm_client: Arc<dyn crate::llm::LlmClient>,
77 agent_registry: Arc<crate::subagent::AgentRegistry>,
78 workspace: String,
79 mcp_manager: Option<Arc<crate::mcp::manager::McpManager>>,
80) {
81 use crate::tools::task::{ParallelTaskTool, TaskExecutor, TaskTool};
82 let executor = Arc::new(match mcp_manager {
83 Some(mcp) => TaskExecutor::with_mcp(agent_registry, llm_client, workspace, mcp),
84 None => TaskExecutor::new(agent_registry, llm_client, workspace),
85 });
86 registry.register_builtin(Arc::new(TaskTool::new(Arc::clone(&executor))));
87 registry.register_builtin(Arc::new(ParallelTaskTool::new(executor)));
88}