vtcode_acp/tooling/
mod.rs1mod catalog;
2mod schemas;
3mod titles;
4
5pub use super::tooling_provider::ToolRegistryProvider;
6pub use catalog::{AcpToolRegistry, SupportedTool, ToolDescriptor};
7pub use schemas::{
8 TOOL_LIST_FILES_CASE_SENSITIVE_ARG, TOOL_LIST_FILES_CONTENT_PATTERN_ARG,
9 TOOL_LIST_FILES_DESCRIPTION, TOOL_LIST_FILES_FILE_EXTENSIONS_ARG,
10 TOOL_LIST_FILES_INCLUDE_HIDDEN_ARG, TOOL_LIST_FILES_ITEMS_KEY, TOOL_LIST_FILES_MAX_ITEMS_ARG,
11 TOOL_LIST_FILES_MESSAGE_KEY, TOOL_LIST_FILES_MODE_ARG, TOOL_LIST_FILES_NAME_PATTERN_ARG,
12 TOOL_LIST_FILES_PAGE_ARG, TOOL_LIST_FILES_PATH_ARG, TOOL_LIST_FILES_PER_PAGE_ARG,
13 TOOL_LIST_FILES_RESPONSE_FORMAT_ARG, TOOL_LIST_FILES_RESULT_KEY,
14 TOOL_LIST_FILES_SUMMARY_MAX_ITEMS, TOOL_LIST_FILES_URI_ARG, TOOL_READ_FILE_DESCRIPTION,
15 TOOL_READ_FILE_LIMIT_ARG, TOOL_READ_FILE_LINE_ARG, TOOL_READ_FILE_PATH_ARG,
16 TOOL_READ_FILE_URI_ARG,
17};
18
19#[cfg(test)]
20mod tests {
21 use std::path::Path;
22
23 use serde_json::json;
24 use vtcode_core::config::constants::tools;
25 use vtcode_core::llm::provider::ToolDefinition;
26
27 use super::{AcpToolRegistry, SupportedTool, ToolDescriptor};
28
29 fn local_definition(name: &str) -> ToolDefinition {
30 ToolDefinition::function(
31 name.to_string(),
32 format!("{name} description"),
33 json!({"type": "object"}),
34 )
35 }
36
37 #[test]
38 fn definitions_for_preserve_core_local_tool_order() {
39 let local_definitions = vec![
40 local_definition(tools::UNIFIED_FILE),
41 local_definition(tools::UNIFIED_EXEC),
42 local_definition(tools::UNIFIED_SEARCH),
43 ];
44 let registry =
45 AcpToolRegistry::new(Path::new("/tmp/workspace"), true, true, local_definitions);
46
47 let definitions = registry.definitions_for(&[SupportedTool::ReadFile], true);
48 let names = definitions
49 .into_iter()
50 .map(|definition| definition.function_name().to_string())
51 .collect::<Vec<_>>();
52
53 assert_eq!(
54 names,
55 vec![
56 tools::READ_FILE.to_string(),
57 tools::UNIFIED_FILE.to_string(),
58 tools::UNIFIED_EXEC.to_string(),
59 tools::UNIFIED_SEARCH.to_string(),
60 ]
61 );
62 }
63
64 #[test]
65 fn lookup_checks_native_map_before_local_membership() {
66 let registry = AcpToolRegistry::new(
67 Path::new("/tmp/workspace"),
68 true,
69 false,
70 vec![local_definition(tools::UNIFIED_SEARCH)],
71 );
72
73 assert_eq!(
74 registry.lookup(tools::READ_FILE),
75 Some(ToolDescriptor::Acp(SupportedTool::ReadFile))
76 );
77 assert_eq!(
78 registry.lookup(tools::UNIFIED_SEARCH),
79 Some(ToolDescriptor::Local)
80 );
81 assert_eq!(registry.lookup("unknown_tool"), None);
82 }
83}