use std::sync::Arc;
use crate::core::{Async, CancelToken};
use crate::generative_model;
pub mod bash_service;
pub use bash_service::BashService;
pub mod text_editor_service;
pub use text_editor_service::TextEditorService;
pub mod manual_service;
pub use manual_service::ManualService;
pub mod memory_service;
pub use memory_service::MemoryService;
pub mod meta_tool_service;
pub use meta_tool_service::SessionMetaTool;
pub mod session_history_service;
pub use session_history_service::SessionHistoryTool;
pub mod browser_service;
pub use browser_service::BrowserService;
pub mod text_search_tool_service;
pub use text_search_tool_service::TextSearchToolService;
#[derive(Clone)]
pub struct HostDispatchContext {
pub agent_id: uuid::Uuid,
pub cancel: CancelToken,
pub agent_root: Option<Arc<dyn std::any::Any + Send + Sync>>,
}
impl HostDispatchContext {
pub fn bare(agent_id: uuid::Uuid, cancel: CancelToken) -> Self {
Self {
agent_id,
cancel,
agent_root: None,
}
}
}
pub trait ToolService: Send + Sync + 'static {
fn tool_specs(&self) -> Vec<generative_model::ToolSpec>;
fn dispatch_tool_use(
self: Arc<Self>,
tool_use: generative_model::ToolUse,
ctx: HostDispatchContext,
) -> Async<generative_model::ToolResult>;
fn on_agent_finished(&self, _agent_id: uuid::Uuid) {}
}