1pub mod attribution;
4pub mod microsoft365;
5pub mod util_helpers;
6
7pub mod ask_user;
8pub mod backup_tool;
9pub mod browser;
10pub mod browser_delegate;
11pub mod browser_open;
12pub mod calculator;
13pub mod canvas;
14pub mod claude_code;
15pub mod claude_code_runner;
16pub mod cli_discovery;
17pub mod cloud_ops;
18pub mod cloud_patterns;
19pub mod codex_cli;
20pub mod composio;
21pub mod content_search;
22pub mod data_management;
23pub mod discord_search;
24pub mod escalate;
25pub mod file_download;
26pub mod file_edit;
27pub mod file_upload;
28pub mod file_upload_bundle;
29pub mod file_write;
30pub mod gemini_cli;
31pub mod git_operations;
32pub mod glob_search;
33pub mod google_workspace;
34pub mod hardware_board_info;
35pub mod hardware_memory_map;
36pub mod hardware_memory_read;
37pub mod http_request;
38pub mod image_gen;
39pub mod image_info;
40pub mod jira_tool;
41pub mod knowledge_tool;
42pub mod linkedin;
43pub mod linkedin_client;
44pub mod llm_task;
45pub mod mcp_client;
46pub mod mcp_deferred;
47pub mod mcp_protocol;
48pub mod mcp_tool;
49pub mod mcp_transport;
50pub mod memory_export;
51pub mod memory_forget;
52pub mod memory_purge;
53pub mod memory_recall;
54pub mod memory_store;
55pub mod model_routing_config;
56pub mod node_capabilities;
57pub mod notion_tool;
58pub mod opencode_cli;
59pub mod pdf_read;
60pub mod pipeline;
61pub mod poll;
62pub mod project_intel;
63pub mod proxy_config;
64pub mod pushover;
65pub mod reaction;
66pub mod report_template_tool;
67pub mod report_templates;
68pub mod screenshot;
69pub mod sessions;
70pub mod text_browser;
71pub mod tool_search;
72pub mod weather_tool;
73pub mod web_fetch;
74pub mod web_search_provider_routing;
75pub mod web_search_tool;
76pub mod wrappers;
77
78pub const MEMORY_TOOL_NAMES: &[&str] = &[
85 "memory_store",
86 "memory_recall",
87 "memory_forget",
88 "memory_export",
89 "memory_purge",
90];
91
92#[cfg(test)]
93mod memory_tool_names_guard {
94 use super::*;
95 use std::collections::BTreeSet;
96 use std::sync::Arc;
97 use zeroclaw_api::tool::Tool;
98 use zeroclaw_config::policy::SecurityPolicy;
99 use zeroclaw_memory::NoneMemory;
100
101 #[test]
102 fn memory_tool_names_match_tools() {
103 let memory = Arc::new(NoneMemory::new("none"));
104 let security = Arc::new(SecurityPolicy::default());
105 let tools: Vec<Box<dyn Tool>> = vec![
106 Box::new(memory_store::MemoryStoreTool::new(
107 memory.clone(),
108 security.clone(),
109 )),
110 Box::new(memory_recall::MemoryRecallTool::new(memory.clone())),
111 Box::new(memory_forget::MemoryForgetTool::new(
112 memory.clone(),
113 security.clone(),
114 )),
115 Box::new(memory_export::MemoryExportTool::new(memory.clone())),
116 Box::new(memory_purge::MemoryPurgeTool::new(
117 memory.clone(),
118 security.clone(),
119 )),
120 ];
121 let actual: BTreeSet<&str> = tools.iter().map(|t| t.name()).collect();
122 let listed: BTreeSet<&str> = MEMORY_TOOL_NAMES.iter().copied().collect();
123 assert_eq!(
124 actual, listed,
125 "MEMORY_TOOL_NAMES is out of sync with the constructed memory tools — \
126 update the const in zeroclaw-tools/src/lib.rs"
127 );
128 }
129}