agentic-forge-core 0.1.0

Blueprint engine for complete project architecture before code generation
Documentation
//! Bridge traits for sister integration.

pub trait ForgeBridge: Send + Sync {
    fn forge_version(&self) -> &str {
        "0.1.0"
    }
    fn generate_blueprint(&self, _intent: &str) -> Result<String, String> {
        Ok(String::new())
    }
    fn validate_blueprint(&self, _blueprint_json: &str) -> Result<bool, String> {
        Ok(true)
    }
    fn export_blueprint(&self, _blueprint_id: &str, _format: &str) -> Result<Vec<u8>, String> {
        Ok(vec![])
    }
}

pub trait AegisBridge: Send + Sync {
    fn check_security(&self, _blueprint_json: &str) -> Result<Vec<String>, String> {
        Ok(vec![])
    }
    fn apply_security_policy(&self, _policy: &str) -> Result<(), String> {
        Ok(())
    }
    fn audit_blueprint(&self, _blueprint_id: &str) -> Result<String, String> {
        Ok("pass".into())
    }
}

pub trait EvolveBridge: Send + Sync {
    fn track_evolution(&self, _blueprint_id: &str, _change: &str) -> Result<(), String> {
        Ok(())
    }
    fn get_evolution_history(&self, _blueprint_id: &str) -> Result<Vec<String>, String> {
        Ok(vec![])
    }
    fn suggest_improvements(&self, _blueprint_json: &str) -> Result<Vec<String>, String> {
        Ok(vec![])
    }
}

pub trait VeritasBridge: Send + Sync {
    fn verify_blueprint(&self, _blueprint_json: &str) -> Result<bool, String> {
        Ok(true)
    }
    fn check_consistency(&self, _blueprint_id: &str) -> Result<Vec<String>, String> {
        Ok(vec![])
    }
    fn validate_contracts(&self, _contracts: &str) -> Result<bool, String> {
        Ok(true)
    }
}

pub trait MemoryBridge: Send + Sync {
    fn store_blueprint_memory(&self, _blueprint_id: &str, _data: &str) -> Result<(), String> {
        Ok(())
    }
    fn recall_blueprint(&self, _query: &str) -> Result<Option<String>, String> {
        Ok(None)
    }
    fn link_memory(&self, _blueprint_id: &str, _memory_id: &str) -> Result<(), String> {
        Ok(())
    }
}

pub trait IdentityBridge: Send + Sync {
    fn authenticate(&self, _token: &str) -> Result<bool, String> {
        Ok(true)
    }
    fn authorize(&self, _action: &str, _resource: &str) -> Result<bool, String> {
        Ok(true)
    }
}

pub trait TimeBridge: Send + Sync {
    fn link_deadline(&self, _blueprint_id: &str, _deadline_id: &str) -> Result<(), String> {
        Ok(())
    }
    fn temporal_context(&self, _topic: &str) -> Vec<String> {
        vec![]
    }
}

pub trait CognitionBridge: Send + Sync {
    fn analyze_intent(&self, _description: &str) -> Result<String, String> {
        Ok(String::new())
    }
    fn suggest_architecture(&self, _domain: &str) -> Result<String, String> {
        Ok(String::new())
    }
}

pub trait CommBridge: Send + Sync {
    fn notify_blueprint_created(&self, _blueprint_id: &str) -> Result<(), String> {
        Ok(())
    }
    fn broadcast_update(&self, _event: &str) -> Result<(), String> {
        Ok(())
    }
}

pub trait PlanningBridge: Send + Sync {
    fn link_plan(&self, _blueprint_id: &str, _plan_id: &str) -> Result<(), String> {
        Ok(())
    }
    fn get_plan_status(&self, _plan_id: &str) -> Result<String, String> {
        Ok("unknown".into())
    }
}

pub trait RealityBridge: Send + Sync {
    fn ground_blueprint(&self, _blueprint_id: &str) -> Result<(), String> {
        Ok(())
    }
    fn check_feasibility(&self, _constraints: &str) -> Result<bool, String> {
        Ok(true)
    }
}

#[derive(Debug, Clone, Default)]
pub struct NoOpBridges;

impl ForgeBridge for NoOpBridges {}
impl AegisBridge for NoOpBridges {}
impl EvolveBridge for NoOpBridges {}
impl VeritasBridge for NoOpBridges {}
impl MemoryBridge for NoOpBridges {}
impl IdentityBridge for NoOpBridges {}
impl TimeBridge for NoOpBridges {}
impl CognitionBridge for NoOpBridges {}
impl CommBridge for NoOpBridges {}
impl PlanningBridge for NoOpBridges {}
impl RealityBridge for NoOpBridges {}

pub trait HydraAdapter: Send + Sync {
    fn register_with_hydra(&self) -> Result<(), String> {
        Ok(())
    }
    fn report_health(&self) -> Result<String, String> {
        Ok("healthy".to_string())
    }
    fn accept_command(&self, _command: &str) -> Result<String, String> {
        Ok(String::new())
    }
}

impl HydraAdapter for NoOpBridges {}

#[derive(Debug, Clone, Default)]
pub struct BridgeConfig {
    pub aegis_enabled: bool,
    pub evolve_enabled: bool,
    pub veritas_enabled: bool,
    pub memory_enabled: bool,
    pub identity_enabled: bool,
    pub time_enabled: bool,
    pub cognition_enabled: bool,
    pub comm_enabled: bool,
    pub planning_enabled: bool,
    pub reality_enabled: bool,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_noop_forge_bridge() {
        let noop = NoOpBridges;
        assert_eq!(noop.forge_version(), "0.1.0");
        assert!(noop.generate_blueprint("test").unwrap().is_empty());
        assert!(noop.validate_blueprint("{}").unwrap());
    }

    #[test]
    fn test_noop_aegis_bridge() {
        let noop = NoOpBridges;
        assert!(noop.check_security("{}").unwrap().is_empty());
        assert!(noop.apply_security_policy("strict").is_ok());
        assert_eq!(noop.audit_blueprint("bp-1").unwrap(), "pass");
    }

    #[test]
    fn test_noop_evolve_bridge() {
        let noop = NoOpBridges;
        assert!(noop.track_evolution("bp-1", "change").is_ok());
        assert!(noop.get_evolution_history("bp-1").unwrap().is_empty());
        assert!(noop.suggest_improvements("{}").unwrap().is_empty());
    }

    #[test]
    fn test_noop_veritas_bridge() {
        let noop = NoOpBridges;
        assert!(noop.verify_blueprint("{}").unwrap());
        assert!(noop.check_consistency("bp-1").unwrap().is_empty());
    }

    #[test]
    fn test_noop_memory_bridge() {
        let noop = NoOpBridges;
        assert!(noop.store_blueprint_memory("bp-1", "data").is_ok());
        assert!(noop.recall_blueprint("query").unwrap().is_none());
    }

    #[test]
    fn test_noop_identity_bridge() {
        let noop = NoOpBridges;
        assert!(noop.authenticate("token").unwrap());
        assert!(noop.authorize("read", "blueprint").unwrap());
    }

    #[test]
    fn test_noop_time_bridge() {
        let noop = NoOpBridges;
        assert!(noop.link_deadline("bp-1", "d-1").is_ok());
        assert!(noop.temporal_context("topic").is_empty());
    }

    #[test]
    fn test_noop_cognition_bridge() {
        let noop = NoOpBridges;
        assert!(noop.analyze_intent("desc").unwrap().is_empty());
    }

    #[test]
    fn test_noop_comm_bridge() {
        let noop = NoOpBridges;
        assert!(noop.notify_blueprint_created("bp-1").is_ok());
        assert!(noop.broadcast_update("event").is_ok());
    }

    #[test]
    fn test_noop_planning_bridge() {
        let noop = NoOpBridges;
        assert!(noop.link_plan("bp-1", "p-1").is_ok());
        assert_eq!(noop.get_plan_status("p-1").unwrap(), "unknown");
    }

    #[test]
    fn test_noop_reality_bridge() {
        let noop = NoOpBridges;
        assert!(noop.ground_blueprint("bp-1").is_ok());
        assert!(noop.check_feasibility("constraints").unwrap());
    }

    #[test]
    fn test_hydra_adapter() {
        let noop = NoOpBridges;
        assert!(noop.register_with_hydra().is_ok());
        assert_eq!(noop.report_health().unwrap(), "healthy");
        assert!(noop.accept_command("test").unwrap().is_empty());
    }

    #[test]
    fn test_bridge_config_default() {
        let config = BridgeConfig::default();
        assert!(!config.aegis_enabled);
        assert!(!config.memory_enabled);
    }

    #[test]
    fn test_noop_send_sync() {
        fn assert_send_sync<T: Send + Sync>() {}
        assert_send_sync::<NoOpBridges>();
    }

    #[test]
    fn test_noop_bridges_as_trait_objects() {
        let noop = NoOpBridges;
        let _: &dyn ForgeBridge = &noop;
        let _: &dyn AegisBridge = &noop;
        let _: &dyn EvolveBridge = &noop;
        let _: &dyn VeritasBridge = &noop;
        let _: &dyn MemoryBridge = &noop;
        let _: &dyn IdentityBridge = &noop;
        let _: &dyn TimeBridge = &noop;
        let _: &dyn CognitionBridge = &noop;
        let _: &dyn CommBridge = &noop;
        let _: &dyn PlanningBridge = &noop;
        let _: &dyn RealityBridge = &noop;
        let _: &dyn HydraAdapter = &noop;
    }
}