Skip to main content

oxios_kernel/tools/kernel/
mod.rs

1//! Kernel tools — AgentTool wrappers for KernelHandle API domains.
2//!
3//! These tools expose kernel system calls to the agent's tool-calling loop.
4//! Each tool wraps a specific domain API and uses an action-based parameter
5//! schema to dispatch operations.
6//!
7//! ## Tools
8//!
9//! - [`SpaceTool`] — Space management (list, get, create, archive, merge, restore)
10//! - [`AgentTool`] — Agent lifecycle (list, kill, budget)
11//! - [`PersonaTool`] — Persona management (list, set_active, get)
12//! - [`CronTool`] — Cron scheduling (list, add, remove, trigger)
13//! - [`SecurityTool`] — Security audit (verify_chain, query_audit, audit_count)
14//! - [`BudgetTool`] — Budget management (check, set, reserve, reset)
15//! - [`ResourceTool`] — Resource monitoring (snapshot, history, overloaded)
16
17pub mod agent_tool;
18pub mod budget_tool;
19pub mod cron_tool;
20pub mod persona_tool;
21pub mod resource_tool;
22pub mod security_tool;
23pub mod space_tool;
24
25pub use agent_tool::AgentTool as KernelAgentTool;
26pub use budget_tool::BudgetTool;
27pub use cron_tool::CronTool;
28pub use persona_tool::PersonaTool;
29pub use resource_tool::ResourceTool;
30pub use security_tool::SecurityTool;
31pub use space_tool::SpaceTool;
32
33use crate::types::AgentId;
34use crate::KernelHandle;
35use oxi_sdk::ToolRegistry;
36
37/// Register all kernel domain tools into the registry.
38///
39/// Called by [`super::kernel_bridge::OxiosKernelBridge`] during agent build.
40/// This is the canonical list of kernel tools available in oxios agents.
41pub fn register_all_kernel_tools(registry: &ToolRegistry, kernel: &KernelHandle, _agent_id: &str) {
42    let agent_uuid = AgentId::new_v4();
43
44    // ExecTool (stores Arc<KernelHandle>)
45    registry.register(crate::tools::ExecTool::from_kernel(kernel));
46
47    // Memory tools (each stores Arc<KernelHandle>)
48    registry.register(crate::tools::MemoryReadTool::from_kernel(kernel));
49    registry.register(crate::tools::MemorySearchTool::from_kernel(kernel));
50    registry.register(crate::tools::MemoryWriteTool::from_kernel(kernel));
51
52    // Kernel domain tools (take &KernelHandle)
53    registry.register(SpaceTool::from_kernel(kernel));
54    registry.register(KernelAgentTool::from_kernel(kernel));
55    registry.register(PersonaTool::from_kernel(kernel));
56    registry.register(CronTool::from_kernel(kernel));
57    registry.register(SecurityTool::from_kernel(kernel));
58    registry.register(BudgetTool::from_kernel(kernel));
59    registry.register(ResourceTool::from_kernel(kernel));
60
61    // A2A tools (each stores Arc<KernelHandle>)
62    registry.register(crate::tools::A2aDelegateTool::from_kernel(
63        kernel, agent_uuid,
64    ));
65    registry.register(crate::tools::A2aSendTool::from_kernel(kernel, agent_uuid));
66    registry.register(crate::tools::A2aQueryTool::from_kernel(kernel));
67
68    // MCP tool wrapper (stores Arc<KernelHandle>)
69    registry.register(crate::tools::McpToolWrapper::from_kernel(
70        kernel,
71        "",
72        "",
73        "MCP tools via bridge".into(),
74        serde_json::json!({"type": "object", "properties": {}}),
75    ));
76
77    // ProgramTool (takes &KernelHandle)
78    registry.register(crate::tools::ProgramTool::from_kernel(kernel));
79
80    // Browser (optional feature, stores Arc<KernelHandle>)
81    #[cfg(feature = "browser")]
82    {
83        registry.register(crate::tools::BrowserTool::from_kernel(kernel));
84    }
85}