Skip to main content

zeroclaw_tools/
lib.rs

1//! Tool implementations for agent-callable capabilities.
2
3pub 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
78/// Canonical names of the long-term-memory tools. This is the single source
79/// of truth for "which tools touch the persistent memory store" — surfaces
80/// that need to strip memory access (e.g. ACP/Code sessions) consult this
81/// rather than re-listing tool names. Keep in sync with the `Tool::name()`
82/// each memory tool returns; the guard test `memory_tool_names_match_tools`
83/// fails if a memory tool is added or renamed without updating this list.
84pub 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}