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(
10        &self,
11        enabled_tools: &[SupportedTool],
12        include_local: bool,
13    ) -> Vec<ToolDefinition>;
14
15    fn render_title(&self, descriptor: ToolDescriptor, function_name: &str, args: &Value)
16    -> String;
17
18    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor>;
19
20    fn has_local_tools(&self) -> bool;
21}
22
23impl ToolRegistryProvider for AcpToolRegistry {
24    fn registered_tools(&self) -> Vec<SupportedTool> {
25        AcpToolRegistry::registered_tools(self)
26    }
27
28    fn definitions_for(
29        &self,
30        enabled_tools: &[SupportedTool],
31        include_local: bool,
32    ) -> Vec<ToolDefinition> {
33        AcpToolRegistry::definitions_for(self, enabled_tools, include_local)
34    }
35
36    fn render_title(
37        &self,
38        descriptor: ToolDescriptor,
39        function_name: &str,
40        args: &Value,
41    ) -> String {
42        AcpToolRegistry::render_title(self, descriptor, function_name, args)
43    }
44
45    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor> {
46        AcpToolRegistry::lookup(self, function_name)
47    }
48
49    fn has_local_tools(&self) -> bool {
50        AcpToolRegistry::has_local_tools(self)
51    }
52}
53
54impl<T> ToolRegistryProvider for std::rc::Rc<T>
55where
56    T: ToolRegistryProvider,
57{
58    fn registered_tools(&self) -> Vec<SupportedTool> {
59        <T as ToolRegistryProvider>::registered_tools(&**self)
60    }
61
62    fn definitions_for(
63        &self,
64        enabled_tools: &[SupportedTool],
65        include_local: bool,
66    ) -> Vec<ToolDefinition> {
67        <T as ToolRegistryProvider>::definitions_for(&**self, enabled_tools, include_local)
68    }
69
70    fn render_title(
71        &self,
72        descriptor: ToolDescriptor,
73        function_name: &str,
74        args: &Value,
75    ) -> String {
76        <T as ToolRegistryProvider>::render_title(&**self, descriptor, function_name, args)
77    }
78
79    fn lookup(&self, function_name: &str) -> Option<ToolDescriptor> {
80        <T as ToolRegistryProvider>::lookup(&**self, function_name)
81    }
82
83    fn has_local_tools(&self) -> bool {
84        <T as ToolRegistryProvider>::has_local_tools(&**self)
85    }
86}