Skip to main content

agentic_forge_core/bridges/
mod.rs

1//! Bridge traits for sister integration.
2
3pub trait ForgeBridge: Send + Sync {
4    fn forge_version(&self) -> &str {
5        "0.1.0"
6    }
7    fn generate_blueprint(&self, _intent: &str) -> Result<String, String> {
8        Ok(String::new())
9    }
10    fn validate_blueprint(&self, _blueprint_json: &str) -> Result<bool, String> {
11        Ok(true)
12    }
13    fn export_blueprint(&self, _blueprint_id: &str, _format: &str) -> Result<Vec<u8>, String> {
14        Ok(vec![])
15    }
16}
17
18pub trait AegisBridge: Send + Sync {
19    fn check_security(&self, _blueprint_json: &str) -> Result<Vec<String>, String> {
20        Ok(vec![])
21    }
22    fn apply_security_policy(&self, _policy: &str) -> Result<(), String> {
23        Ok(())
24    }
25    fn audit_blueprint(&self, _blueprint_id: &str) -> Result<String, String> {
26        Ok("pass".into())
27    }
28}
29
30pub trait EvolveBridge: Send + Sync {
31    fn track_evolution(&self, _blueprint_id: &str, _change: &str) -> Result<(), String> {
32        Ok(())
33    }
34    fn get_evolution_history(&self, _blueprint_id: &str) -> Result<Vec<String>, String> {
35        Ok(vec![])
36    }
37    fn suggest_improvements(&self, _blueprint_json: &str) -> Result<Vec<String>, String> {
38        Ok(vec![])
39    }
40}
41
42pub trait VeritasBridge: Send + Sync {
43    fn verify_blueprint(&self, _blueprint_json: &str) -> Result<bool, String> {
44        Ok(true)
45    }
46    fn check_consistency(&self, _blueprint_id: &str) -> Result<Vec<String>, String> {
47        Ok(vec![])
48    }
49    fn validate_contracts(&self, _contracts: &str) -> Result<bool, String> {
50        Ok(true)
51    }
52}
53
54pub trait MemoryBridge: Send + Sync {
55    fn store_blueprint_memory(&self, _blueprint_id: &str, _data: &str) -> Result<(), String> {
56        Ok(())
57    }
58    fn recall_blueprint(&self, _query: &str) -> Result<Option<String>, String> {
59        Ok(None)
60    }
61    fn link_memory(&self, _blueprint_id: &str, _memory_id: &str) -> Result<(), String> {
62        Ok(())
63    }
64}
65
66pub trait IdentityBridge: Send + Sync {
67    fn authenticate(&self, _token: &str) -> Result<bool, String> {
68        Ok(true)
69    }
70    fn authorize(&self, _action: &str, _resource: &str) -> Result<bool, String> {
71        Ok(true)
72    }
73}
74
75pub trait TimeBridge: Send + Sync {
76    fn link_deadline(&self, _blueprint_id: &str, _deadline_id: &str) -> Result<(), String> {
77        Ok(())
78    }
79    fn temporal_context(&self, _topic: &str) -> Vec<String> {
80        vec![]
81    }
82}
83
84pub trait CognitionBridge: Send + Sync {
85    fn analyze_intent(&self, _description: &str) -> Result<String, String> {
86        Ok(String::new())
87    }
88    fn suggest_architecture(&self, _domain: &str) -> Result<String, String> {
89        Ok(String::new())
90    }
91}
92
93pub trait CommBridge: Send + Sync {
94    fn notify_blueprint_created(&self, _blueprint_id: &str) -> Result<(), String> {
95        Ok(())
96    }
97    fn broadcast_update(&self, _event: &str) -> Result<(), String> {
98        Ok(())
99    }
100}
101
102pub trait PlanningBridge: Send + Sync {
103    fn link_plan(&self, _blueprint_id: &str, _plan_id: &str) -> Result<(), String> {
104        Ok(())
105    }
106    fn get_plan_status(&self, _plan_id: &str) -> Result<String, String> {
107        Ok("unknown".into())
108    }
109}
110
111pub trait RealityBridge: Send + Sync {
112    fn ground_blueprint(&self, _blueprint_id: &str) -> Result<(), String> {
113        Ok(())
114    }
115    fn check_feasibility(&self, _constraints: &str) -> Result<bool, String> {
116        Ok(true)
117    }
118}
119
120#[derive(Debug, Clone, Default)]
121pub struct NoOpBridges;
122
123impl ForgeBridge for NoOpBridges {}
124impl AegisBridge for NoOpBridges {}
125impl EvolveBridge for NoOpBridges {}
126impl VeritasBridge for NoOpBridges {}
127impl MemoryBridge for NoOpBridges {}
128impl IdentityBridge for NoOpBridges {}
129impl TimeBridge for NoOpBridges {}
130impl CognitionBridge for NoOpBridges {}
131impl CommBridge for NoOpBridges {}
132impl PlanningBridge for NoOpBridges {}
133impl RealityBridge for NoOpBridges {}
134
135pub trait HydraAdapter: Send + Sync {
136    fn register_with_hydra(&self) -> Result<(), String> {
137        Ok(())
138    }
139    fn report_health(&self) -> Result<String, String> {
140        Ok("healthy".to_string())
141    }
142    fn accept_command(&self, _command: &str) -> Result<String, String> {
143        Ok(String::new())
144    }
145}
146
147impl HydraAdapter for NoOpBridges {}
148
149#[derive(Debug, Clone, Default)]
150pub struct BridgeConfig {
151    pub aegis_enabled: bool,
152    pub evolve_enabled: bool,
153    pub veritas_enabled: bool,
154    pub memory_enabled: bool,
155    pub identity_enabled: bool,
156    pub time_enabled: bool,
157    pub cognition_enabled: bool,
158    pub comm_enabled: bool,
159    pub planning_enabled: bool,
160    pub reality_enabled: bool,
161}
162
163#[cfg(test)]
164mod tests {
165    use super::*;
166
167    #[test]
168    fn test_noop_forge_bridge() {
169        let noop = NoOpBridges;
170        assert_eq!(noop.forge_version(), "0.1.0");
171        assert!(noop.generate_blueprint("test").unwrap().is_empty());
172        assert!(noop.validate_blueprint("{}").unwrap());
173    }
174
175    #[test]
176    fn test_noop_aegis_bridge() {
177        let noop = NoOpBridges;
178        assert!(noop.check_security("{}").unwrap().is_empty());
179        assert!(noop.apply_security_policy("strict").is_ok());
180        assert_eq!(noop.audit_blueprint("bp-1").unwrap(), "pass");
181    }
182
183    #[test]
184    fn test_noop_evolve_bridge() {
185        let noop = NoOpBridges;
186        assert!(noop.track_evolution("bp-1", "change").is_ok());
187        assert!(noop.get_evolution_history("bp-1").unwrap().is_empty());
188        assert!(noop.suggest_improvements("{}").unwrap().is_empty());
189    }
190
191    #[test]
192    fn test_noop_veritas_bridge() {
193        let noop = NoOpBridges;
194        assert!(noop.verify_blueprint("{}").unwrap());
195        assert!(noop.check_consistency("bp-1").unwrap().is_empty());
196    }
197
198    #[test]
199    fn test_noop_memory_bridge() {
200        let noop = NoOpBridges;
201        assert!(noop.store_blueprint_memory("bp-1", "data").is_ok());
202        assert!(noop.recall_blueprint("query").unwrap().is_none());
203    }
204
205    #[test]
206    fn test_noop_identity_bridge() {
207        let noop = NoOpBridges;
208        assert!(noop.authenticate("token").unwrap());
209        assert!(noop.authorize("read", "blueprint").unwrap());
210    }
211
212    #[test]
213    fn test_noop_time_bridge() {
214        let noop = NoOpBridges;
215        assert!(noop.link_deadline("bp-1", "d-1").is_ok());
216        assert!(noop.temporal_context("topic").is_empty());
217    }
218
219    #[test]
220    fn test_noop_cognition_bridge() {
221        let noop = NoOpBridges;
222        assert!(noop.analyze_intent("desc").unwrap().is_empty());
223    }
224
225    #[test]
226    fn test_noop_comm_bridge() {
227        let noop = NoOpBridges;
228        assert!(noop.notify_blueprint_created("bp-1").is_ok());
229        assert!(noop.broadcast_update("event").is_ok());
230    }
231
232    #[test]
233    fn test_noop_planning_bridge() {
234        let noop = NoOpBridges;
235        assert!(noop.link_plan("bp-1", "p-1").is_ok());
236        assert_eq!(noop.get_plan_status("p-1").unwrap(), "unknown");
237    }
238
239    #[test]
240    fn test_noop_reality_bridge() {
241        let noop = NoOpBridges;
242        assert!(noop.ground_blueprint("bp-1").is_ok());
243        assert!(noop.check_feasibility("constraints").unwrap());
244    }
245
246    #[test]
247    fn test_hydra_adapter() {
248        let noop = NoOpBridges;
249        assert!(noop.register_with_hydra().is_ok());
250        assert_eq!(noop.report_health().unwrap(), "healthy");
251        assert!(noop.accept_command("test").unwrap().is_empty());
252    }
253
254    #[test]
255    fn test_bridge_config_default() {
256        let config = BridgeConfig::default();
257        assert!(!config.aegis_enabled);
258        assert!(!config.memory_enabled);
259    }
260
261    #[test]
262    fn test_noop_send_sync() {
263        fn assert_send_sync<T: Send + Sync>() {}
264        assert_send_sync::<NoOpBridges>();
265    }
266
267    #[test]
268    fn test_noop_bridges_as_trait_objects() {
269        let noop = NoOpBridges;
270        let _: &dyn ForgeBridge = &noop;
271        let _: &dyn AegisBridge = &noop;
272        let _: &dyn EvolveBridge = &noop;
273        let _: &dyn VeritasBridge = &noop;
274        let _: &dyn MemoryBridge = &noop;
275        let _: &dyn IdentityBridge = &noop;
276        let _: &dyn TimeBridge = &noop;
277        let _: &dyn CognitionBridge = &noop;
278        let _: &dyn CommBridge = &noop;
279        let _: &dyn PlanningBridge = &noop;
280        let _: &dyn RealityBridge = &noop;
281        let _: &dyn HydraAdapter = &noop;
282    }
283}