vtcode_acp/
tooling_provider.rs1use 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}