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, TOOL_LIST_FILES_DESCRIPTION,
9 TOOL_LIST_FILES_FILE_EXTENSIONS_ARG, TOOL_LIST_FILES_INCLUDE_HIDDEN_ARG, TOOL_LIST_FILES_ITEMS_KEY,
10 TOOL_LIST_FILES_MAX_ITEMS_ARG, TOOL_LIST_FILES_MESSAGE_KEY, TOOL_LIST_FILES_MODE_ARG,
11 TOOL_LIST_FILES_NAME_PATTERN_ARG, TOOL_LIST_FILES_PAGE_ARG, TOOL_LIST_FILES_PATH_ARG, TOOL_LIST_FILES_PER_PAGE_ARG,
12 TOOL_LIST_FILES_RESPONSE_FORMAT_ARG, TOOL_LIST_FILES_RESULT_KEY, TOOL_LIST_FILES_SUMMARY_MAX_ITEMS,
13 TOOL_LIST_FILES_URI_ARG, TOOL_READ_FILE_DESCRIPTION, TOOL_READ_FILE_LIMIT_ARG, TOOL_READ_FILE_LINE_ARG,
14 TOOL_READ_FILE_PATH_ARG, TOOL_READ_FILE_URI_ARG,
15};
16
17#[cfg(test)]
18mod tests {
19 use std::path::Path;
20
21 use serde_json::json;
22 use vtcode_core::config::constants::tools;
23 use vtcode_core::llm::provider::ToolDefinition;
24
25 use super::{AcpToolRegistry, SupportedTool, ToolDescriptor};
26
27 fn local_definition(name: &str) -> ToolDefinition {
28 ToolDefinition::function(name.to_string(), format!("{name} description"), json!({"type": "object"}))
29 }
30
31 #[test]
32 fn definitions_for_preserve_core_local_tool_order() {
33 let local_definitions = vec![
34 local_definition(tools::EXEC_COMMAND),
35 local_definition(tools::WRITE_STDIN),
36 local_definition(tools::APPLY_PATCH),
37 local_definition(tools::CODE_SEARCH),
38 ];
39 let registry = AcpToolRegistry::new(Path::new("/tmp/workspace"), true, true, local_definitions);
40
41 let definitions = registry.definitions_for(&[SupportedTool::ReadFile], true);
42 let names = definitions
43 .into_iter()
44 .map(|definition| definition.function_name().to_string())
45 .collect::<Vec<_>>();
46
47 assert_eq!(
48 names,
49 vec![
50 tools::READ_FILE.to_string(),
51 tools::EXEC_COMMAND.to_string(),
52 tools::WRITE_STDIN.to_string(),
53 tools::APPLY_PATCH.to_string(),
54 tools::CODE_SEARCH.to_string(),
55 ]
56 );
57 }
58
59 #[test]
60 fn lookup_checks_native_map_before_local_membership() {
61 let registry =
62 AcpToolRegistry::new(Path::new("/tmp/workspace"), true, false, vec![local_definition(tools::CODE_SEARCH)]);
63
64 assert_eq!(registry.lookup(tools::READ_FILE), Some(ToolDescriptor::Acp(SupportedTool::ReadFile)));
65 assert_eq!(registry.lookup(tools::CODE_SEARCH), Some(ToolDescriptor::Local));
66 assert_eq!(registry.lookup("unknown_tool"), None);
67 }
68}