hehe-tools 0.0.1

Tool system and built-in tools for hehe AI Agent framework
Documentation
pub mod error;
pub mod traits;
pub mod registry;
pub mod executor;
#[cfg(feature = "builtin")]
pub mod builtin;
pub mod sandbox;

pub use error::{Result, ToolError};
pub use traits::{Artifact, ArtifactData, Tool, ToolOutput};
pub use registry::ToolRegistry;
pub use executor::ToolExecutor;
pub use sandbox::{NativeSandbox, Sandbox, SandboxConfig};

#[cfg(feature = "builtin")]
pub use builtin::{
    create_default_registry, register_all, 
    ListDirectoryTool, ReadFileTool, SearchFilesTool, WriteFileTool,
    GetSystemInfoTool,
};

#[cfg(all(feature = "builtin", feature = "shell"))]
pub use builtin::ExecuteShellTool;

#[cfg(all(feature = "builtin", feature = "http"))]
pub use builtin::HttpRequestTool;

pub mod prelude {
    pub use crate::error::{Result, ToolError};
    pub use crate::traits::{Artifact, ArtifactData, Tool, ToolOutput};
    pub use crate::registry::ToolRegistry;
    pub use crate::executor::ToolExecutor;
    pub use crate::sandbox::{NativeSandbox, Sandbox, SandboxConfig};

    #[cfg(feature = "builtin")]
    pub use crate::builtin::{
        create_default_registry, register_all,
        ListDirectoryTool, ReadFileTool, SearchFilesTool, WriteFileTool,
        GetSystemInfoTool,
    };

    #[cfg(all(feature = "builtin", feature = "shell"))]
    pub use crate::builtin::ExecuteShellTool;

    #[cfg(all(feature = "builtin", feature = "http"))]
    pub use crate::builtin::HttpRequestTool;
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::sync::Arc;

    #[cfg(feature = "builtin")]
    #[test]
    fn test_create_default_registry() {
        let registry = create_default_registry();
        assert!(registry.contains("read_file"));
        assert!(registry.contains("write_file"));
        assert!(registry.contains("list_directory"));
        assert!(registry.contains("search_files"));
        assert!(registry.contains("get_system_info"));
    }

    #[cfg(all(feature = "builtin", feature = "shell"))]
    #[test]
    fn test_registry_with_shell() {
        let registry = create_default_registry();
        assert!(registry.contains("execute_shell"));
        assert!(registry.dangerous_tools().contains(&"execute_shell"));
    }

    #[cfg(feature = "builtin")]
    #[tokio::test]
    async fn test_executor_with_builtin() {
        use hehe_core::Context;

        let registry = Arc::new(create_default_registry());
        let executor = ToolExecutor::new(registry);
        let ctx = Context::new();

        let output = executor
            .execute(&ctx, "get_system_info", serde_json::Value::Null)
            .await
            .unwrap();

        assert!(!output.is_error);
        assert!(output.content.contains("os"));
    }
}