use crate::{Context, EventEngine, EventExt, EventOnceExt};
use std::fmt::Debug;
use std::sync::LazyLock;
use wd_tools::AsBytes;
pub type AgentEngine = EventEngine;
pub static AGENT_ENGINE: LazyLock<AgentEngine> = LazyLock::new(EventEngine::default);
pub fn agent_engine() -> &'static AgentEngine {
&AGENT_ENGINE
}
pub async fn register_event<T, I, E>(trigger: T, event: E)
where
T: AsBytes,
I: Debug + Sync + Send + 'static,
E: EventExt<I> + Send + 'static,
{
AGENT_ENGINE.register_event(trigger, event).await;
}
pub fn register_event_once<T, I, E>(trigger: T, event: E)
where
T: AsBytes,
I: Debug + Sync + Send + 'static,
E: EventOnceExt<I> + Send + 'static,
{
AGENT_ENGINE.register_event_once(trigger, event);
}
pub async fn invoke<T, V>(trigger: T, input: V) -> anyhow::Result<Context>
where
T: AsBytes,
V: Debug + Sync + Send + 'static,
{
AGENT_ENGINE.invoke(trigger, input).await
}
pub async fn launch<T, V>(trigger: T, input: V)
where
T: AsBytes + Send + 'static,
V: Debug + Sync + Send + 'static,
{
AGENT_ENGINE.launch(trigger, input).await;
}