edda 0.2.1

Decision memory for coding agents — CLI and TUI
use edda_core::event::new_rebuild_event;
use edda_derive::{rebuild_all, rebuild_branch};
use edda_ledger::lock::WorkspaceLock;
use edda_ledger::Ledger;
use std::path::Path;

pub fn execute(
    repo_root: &Path,
    branch: Option<&str>,
    all: bool,
    reason: &str,
) -> anyhow::Result<()> {
    let ledger = Ledger::open(repo_root)?;
    let _lock = WorkspaceLock::acquire(&ledger.paths)?;

    let head = ledger.head_branch()?;
    let parent_hash = ledger.last_event_hash()?;

    if all {
        let event = new_rebuild_event(&head, parent_hash.as_deref(), "all", None, reason)?;
        ledger.append_event(&event)?;

        let snaps = rebuild_all(&ledger)?;
        println!("Rebuilt views for all branches ({} branches).", snaps.len());
    } else {
        let target = branch.unwrap_or(&head);
        let event = new_rebuild_event(
            &head,
            parent_hash.as_deref(),
            "branch",
            Some(target),
            reason,
        )?;
        ledger.append_event(&event)?;

        rebuild_branch(&ledger, target)?;
        println!("Rebuilt views for {target}.");
    }

    Ok(())
}