use crate::agent::coder::CoderAgent;
use crate::agent::{Agent, AgentResult};
use crate::config::AgentConfig;
use crate::llm::{LlmProvider, Message};
use crate::tools::{ToolContext, ToolRegistry};
use anyhow::Result;
pub struct Director {
pub config: AgentConfig,
}
impl Director {
pub fn new(config: AgentConfig) -> Self {
Director { config }
}
pub async fn execute(
&self,
messages: &mut Vec<Message>,
tools: &ToolRegistry,
llm: &dyn LlmProvider,
ctx: &ToolContext,
) -> Result<AgentResult> {
let coder = CoderAgent::new(self.config.clone());
coder.run(messages, tools, llm, ctx).await
}
}