use anyhow::Result;
use async_trait::async_trait;
use super::history::EvolutionHistory;
use super::trial::TrialRunner;
use super::types::{Observation, StepResult};
use super::workspace::AgentWorkspace;
#[async_trait]
pub trait EvolutionEngine: Send + Sync {
async fn step(
&mut self,
workspace: &AgentWorkspace,
observations: &[Observation],
history: &EvolutionHistory,
trial: &TrialRunner,
) -> Result<StepResult>;
fn on_cycle_end(&mut self, _accepted: bool, _score: f64) {}
fn name(&self) -> &str;
}