Register all baseline built-in tools with the registry, gated by workspace capabilities. Tools whose required capability is missing are not registered, so the model never sees a tool the backend cannot service. `web_fetch` and `web_search` have no workspace capability and are always registered. Note: `batch` is NOT registered here — it requires an `Arc ` and must be registered after
(
registry: &ToolRegistry,
capabilities: &crate::workspace::WorkspaceCapabilities,
)
| 30 | /// Note: `batch` is NOT registered here — it requires an `Arc<ToolRegistry>` |
| 31 | /// and must be registered after the registry is wrapped in an Arc. |
| 32 | pub fn register_builtins( |
| 33 | registry: &ToolRegistry, |
| 34 | capabilities: &crate::workspace::WorkspaceCapabilities, |
| 35 | ) { |
| 36 | if capabilities.read { |
| 37 | registry.register_builtin(Arc::new(read::ReadTool)); |
| 38 | registry.register_builtin(Arc::new(ls::LsTool)); |
| 39 | } |
| 40 | if capabilities.write { |
| 41 | registry.register_builtin(Arc::new(write::WriteTool)); |
| 42 | } |
| 43 | if capabilities.read && capabilities.write { |
| 44 | registry.register_builtin(Arc::new(edit::EditTool)); |
| 45 | registry.register_builtin(Arc::new(patch::PatchTool)); |
| 46 | } |
| 47 | if capabilities.exec { |
| 48 | registry.register_builtin(Arc::new(bash::BashTool)); |
| 49 | } |
| 50 | if capabilities.search { |
| 51 | registry.register_builtin(Arc::new(grep::GrepTool)); |
| 52 | registry.register_builtin(Arc::new(glob_tool::GlobTool)); |
| 53 | } |
| 54 | if capabilities.git { |
| 55 | registry.register_builtin(Arc::new(git::GitTool)); |
| 56 | } |
| 57 | registry.register_builtin(Arc::new(web_fetch::WebFetchTool)); |
| 58 | registry.register_builtin(Arc::new(web_search::WebSearchTool::new())); |
| 59 | } |
| 60 | |
| 61 | /// Register the batch tool. Must be called after the registry is wrapped in Arc. |
| 62 | pub fn register_batch(registry: &Arc<ToolRegistry>) { |