pub mod audit;
pub mod capability;
pub mod guard;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ShellStance {
    Allow,
    Track,
    Sandbox,
    Deny,
}

#[derive(Debug, Clone)]
pub struct AgentPolicy {
    pub shell_stance: ShellStance,
    pub token_ceiling: u64,
    pub cost_ceiling_usd: f64,
    pub allowed_skills: Vec<String>,
}

impl AgentPolicy {
    pub fn permissive() -> Self {
        Self {
            shell_stance: ShellStance::Allow,
            token_ceiling: 1_000_000,
            cost_ceiling_usd: 100.0,
            allowed_skills: Vec::new(),
        }
    }

    pub fn restrictive() -> Self {
        Self {
            shell_stance: ShellStance::Sandbox,
            token_ceiling: 10_000,
            cost_ceiling_usd: 1.0,
            allowed_skills: vec!["sieve".into(), "compass".into()],
        }
    }
}
