pub async fn run_evolution<L: EvolutionLlm>(
chat_root: &Path,
skills_root: Option<&Path>,
llm: &L,
api_base: &str,
api_key: &str,
model: &str,
force: bool,
) -> Result<EvolutionRunResult>Expand description
Run a full evolution cycle.
Returns EvolutionRunResult: SkippedBusy if another run in progress, NoScope if nothing to evolve, Completed(txn_id) otherwise. When force=true (manual trigger), bypass decision thresholds. skills_root: project-level dir (workspace/.skills). When None, skips skill evolution.