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(&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}