use crate::llm::{LlmProvider, Message};
use crate::tools::{ToolContext, ToolRegistry};
use crate::tracking::SessionTracker;
use anyhow::Result;
use async_trait::async_trait;
pub mod agents_md;
pub mod coder;
pub mod context_manager;
pub mod director;
pub mod orchestrator;
#[async_trait]
#[allow(dead_code)] pub trait Agent: Send + Sync {
fn name(&self) -> &str;
fn system_prompt(&self) -> String;
async fn run(
&self,
messages: &mut Vec<Message>,
tools: &ToolRegistry,
llm: &dyn LlmProvider,
ctx: &ToolContext,
) -> Result<AgentResult>;
}
#[derive(Debug, Clone)]
pub struct AgentResult {
pub final_message: String,
pub iterations: u32,
pub tool_calls_total: u32,
pub auto_continues: u32,
pub tracker: SessionTracker,
}