use crate::server::tool_definitions_extended;
use std::collections::HashMap;
#[path = "builder.rs"]
mod builder;
#[path = "builder_core.rs"]
mod builder_core;
use builder::create_additional_extended_tools;
use builder_core::create_core_tools;
pub fn create_default_registry() -> super::ToolRegistry {
let core_tools = create_core_tools();
let extended_defs = tool_definitions_extended::create_extended_tools();
let mut extended_tools = HashMap::new();
for tool in extended_defs {
if !core_tools.iter().any(|t| t.name == tool.name) {
extended_tools.insert(tool.name.clone(), tool);
}
}
let additional_tools = create_additional_extended_tools();
for tool in additional_tools {
if !core_tools.iter().any(|t| t.name == tool.name) &&
!extended_tools.contains_key(&tool.name)
{
extended_tools.insert(tool.name.clone(), tool);
}
}
super::ToolRegistry::new(core_tools, extended_tools)
}
#[cfg(test)]
mod tests {
use super::create_default_registry;
#[test]
fn default_registry_has_expected_core_tools() {
let registry = create_default_registry();
let core_names: Vec<String> = registry
.get_core_tools()
.into_iter()
.map(|tool| tool.name)
.collect();
assert!(core_names.iter().any(|name| name == "query_memory"));
assert!(core_names.iter().any(|name| name == "health_check"));
assert!(core_names.iter().any(|name| name == "get_metrics"));
assert!(core_names.iter().any(|name| name == "analyze_patterns"));
assert!(core_names.iter().any(|name| name == "create_episode"));
}
#[test]
fn default_registry_includes_extended_tools() {
let registry = create_default_registry();
assert!(registry.tool_exists("search_patterns"));
assert!(registry.tool_exists("recommend_patterns"));
assert!(registry.total_tool_count() > registry.get_core_tools().len());
}
#[test]
fn overlapping_tools_are_identical_across_registries() {
let default_tools = crate::server::tool_definitions::create_default_tools();
let extended_tools = super::builder::create_additional_extended_tools();
for default in &default_tools {
if let Some(extended) = extended_tools.iter().find(|t| t.name == default.name) {
assert_eq!(
extended.name, default.name,
"overlapping tool name mismatch"
);
assert_eq!(
extended.description, default.description,
"overlapping tool '{}' description diverged between registries",
default.name
);
assert_eq!(
extended.input_schema, default.input_schema,
"overlapping tool '{}' input_schema diverged between registries",
default.name
);
}
}
for name in ["recommend_patterns", "recommend_playbook"] {
assert!(
default_tools.iter().any(|t| t.name == name),
"'{name}' missing from create_default_tools()"
);
assert!(
extended_tools.iter().any(|t| t.name == name),
"'{name}' missing from create_additional_extended_tools()"
);
}
}
}