use crate::{errors::BoxedError, AgentTool};
use futures::future::BoxFuture;
use std::sync::Arc;
pub trait Toolkit<TCtx>: Send + Sync {
fn create_session<'a>(
&'a self,
context: &'a TCtx,
) -> BoxFuture<'a, Result<Box<dyn ToolkitSession<TCtx> + Send + Sync>, BoxedError>>;
}
pub trait ToolkitSession<TCtx>: Send + Sync {
fn system_prompt(&self) -> Option<String>;
fn tools(&self) -> Vec<Arc<dyn AgentTool<TCtx>>>;
fn close(self: Box<Self>) -> BoxFuture<'static, Result<(), BoxedError>>;
}