Skip to main content

vtcode_acp/
tooling_provider.rs

1use serde_json::Value;
2use vtcode_core::llm::provider::ToolDefinition;
3
4use crate::tooling::{AcpToolRegistry, SupportedTool, ToolDescriptor};
5
6pub trait ToolRegistryProvider {
7    fn registered_tools(&self) -> Vec<SupportedTool>;
8
9    fn definitions_for(&self, enabled_tools: &[SupportedTool], include_local: bool) -> Vec<ToolDefinition>;
10
11    fn render_title(&self, descriptor: ToolDescriptor, function_name: &str, args: &Value) -> String;
12
13    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor>;
14
15    fn has_local_tools(&self) -> bool;
16}
17
18impl ToolRegistryProvider for AcpToolRegistry {
19    fn registered_tools(&self) -> Vec<SupportedTool> {
20        AcpToolRegistry::registered_tools(self)
21    }
22
23    fn definitions_for(&self, enabled_tools: &[SupportedTool], include_local: bool) -> Vec<ToolDefinition> {
24        AcpToolRegistry::definitions_for(self, enabled_tools, include_local)
25    }
26
27    fn render_title(&self, descriptor: ToolDescriptor, function_name: &str, args: &Value) -> String {
28        AcpToolRegistry::render_title(self, descriptor, function_name, args)
29    }
30
31    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor> {
32        AcpToolRegistry::lookup(self, function_name)
33    }
34
35    fn has_local_tools(&self) -> bool {
36        AcpToolRegistry::has_local_tools(self)
37    }
38}
39
40impl<T> ToolRegistryProvider for std::sync::Arc<T>
41where
42    T: ToolRegistryProvider,
43{
44    fn registered_tools(&self) -> Vec<SupportedTool> {
45        <T as ToolRegistryProvider>::registered_tools(&**self)
46    }
47
48    fn definitions_for(&self, enabled_tools: &[SupportedTool], include_local: bool) -> Vec<ToolDefinition> {
49        <T as ToolRegistryProvider>::definitions_for(&**self, enabled_tools, include_local)
50    }
51
52    fn render_title(&self, descriptor: ToolDescriptor, function_name: &str, args: &Value) -> String {
53        <T as ToolRegistryProvider>::render_title(&**self, descriptor, function_name, args)
54    }
55
56    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor> {
57        <T as ToolRegistryProvider>::lookup(&**self, function_name)
58    }
59
60    fn has_local_tools(&self) -> bool {
61        <T as ToolRegistryProvider>::has_local_tools(&**self)
62    }
63}