Skip to main content

vtcode_acp/tooling/
mod.rs

1mod 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 =
48            registry.definitions_for(&[SupportedTool::ReadFile, SupportedTool::SwitchMode], true);
49        let names = definitions
50            .into_iter()
51            .map(|definition| definition.function_name().to_string())
52            .collect::<Vec<_>>();
53
54        assert_eq!(
55            names,
56            vec![
57                tools::READ_FILE.to_string(),
58                "switch_mode".to_string(),
59                tools::UNIFIED_FILE.to_string(),
60                tools::UNIFIED_EXEC.to_string(),
61                tools::UNIFIED_SEARCH.to_string(),
62            ]
63        );
64    }
65
66    #[test]
67    fn lookup_checks_native_map_before_local_membership() {
68        let registry = AcpToolRegistry::new(
69            Path::new("/tmp/workspace"),
70            true,
71            false,
72            vec![local_definition(tools::UNIFIED_SEARCH)],
73        );
74
75        assert_eq!(
76            registry.lookup(tools::READ_FILE),
77            Some(ToolDescriptor::Acp(SupportedTool::ReadFile))
78        );
79        assert_eq!(
80            registry.lookup(tools::UNIFIED_SEARCH),
81            Some(ToolDescriptor::Local)
82        );
83        assert_eq!(registry.lookup("unknown_tool"), None);
84    }
85}