use std::path::Path;
use std::sync::Arc;
use oxi_agent::{
tools::browse::{BrowseConfig, BrowseExtractTool, BrowseTool, BrowserEngine},
tools::{EditTool, LsTool, ReadTool, WriteTool},
ToolRegistry,
};
pub fn coding_tools(cwd: &Path) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(ReadTool::with_cwd(cwd.to_path_buf()));
registry.register(WriteTool::with_cwd(cwd.to_path_buf()));
registry.register(EditTool::with_cwd(cwd.to_path_buf()));
registry.register(LsTool::with_cwd(cwd.to_path_buf()));
Arc::new(registry)
}
pub fn readonly_tools(cwd: &Path) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(ReadTool::with_cwd(cwd.to_path_buf()));
registry.register(LsTool::with_cwd(cwd.to_path_buf()));
Arc::new(registry)
}
pub fn browsing_tools(engine: Arc<dyn BrowserEngine>) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(BrowseTool::new(Arc::clone(&engine)));
registry.register(BrowseExtractTool::new(engine));
Arc::new(registry)
}
pub fn browsing_tools_with_config(
engine: Arc<dyn BrowserEngine>,
config: BrowseConfig,
) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(BrowseTool::with_config(Arc::clone(&engine), config.clone()));
registry.register(BrowseExtractTool::with_config(engine, config));
Arc::new(registry)
}
pub fn full_tools(cwd: &Path, engine: Arc<dyn BrowserEngine>) -> Arc<ToolRegistry> {
let registry = ToolRegistry::new();
registry.register(ReadTool::with_cwd(cwd.to_path_buf()));
registry.register(WriteTool::with_cwd(cwd.to_path_buf()));
registry.register(EditTool::with_cwd(cwd.to_path_buf()));
registry.register(LsTool::with_cwd(cwd.to_path_buf()));
registry.register(BrowseTool::new(Arc::clone(&engine)));
registry.register(BrowseExtractTool::new(engine));
Arc::new(registry)
}
#[cfg(feature = "native-browser")]
#[cfg_attr(docsrs, doc(cfg(feature = "native-browser")))]
pub async fn native_browser_tools() -> anyhow::Result<Arc<ToolRegistry>> {
let engine = oxi_agent::tools::browse::OxiBrowserEngine::new().await?;
Ok(browsing_tools(Arc::new(engine)))
}
#[cfg(feature = "native-browser")]
#[cfg_attr(docsrs, doc(cfg(feature = "native-browser")))]
pub async fn native_browser_tools_with_config(
config: BrowseConfig,
) -> anyhow::Result<Arc<ToolRegistry>> {
let engine = oxi_agent::tools::browse::OxiBrowserEngine::with_config(config.clone()).await?;
Ok(browsing_tools_with_config(Arc::new(engine), config))
}
#[cfg(feature = "native-browser")]
#[cfg_attr(docsrs, doc(cfg(feature = "native-browser")))]
pub fn browsing_tools_with_session(engine: Arc<dyn BrowserEngine>) -> Arc<ToolRegistry> {
use oxi_agent::tools::browse::{BrowseScriptTool, BrowseSessionTool};
let registry = ToolRegistry::new();
registry.register(BrowseTool::new(Arc::clone(&engine)));
registry.register(BrowseExtractTool::new(Arc::clone(&engine)));
registry.register(BrowseScriptTool::new(Arc::clone(&engine)));
registry.register(BrowseSessionTool::new(engine));
Arc::new(registry)
}