repl_core/
runtime_bridge.rs1use std::sync::{Arc, Mutex};
2use symbi_runtime::context::manager::{ContextManagerConfig, StandardContextManager};
3use symbi_runtime::integrations::policy_engine::engine::{
4 OpaPolicyEngine, PolicyDecision, PolicyEngine,
5};
6use symbi_runtime::lifecycle::{DefaultLifecycleController, LifecycleConfig, LifecycleController};
7use symbi_runtime::types::agent::AgentConfig;
8use symbi_runtime::types::security::Capability;
9use symbi_runtime::types::AgentId;
10
11pub struct RuntimeBridge {
13 lifecycle_controller: Arc<Mutex<Option<Arc<DefaultLifecycleController>>>>,
14 context_manager: Arc<Mutex<Option<Arc<StandardContextManager>>>>,
15 policy_engine: Arc<Mutex<OpaPolicyEngine>>,
16 }
18
19impl Default for RuntimeBridge {
20 fn default() -> Self {
21 Self::new()
22 }
23}
24
25impl RuntimeBridge {
26 pub fn new() -> Self {
27 let lifecycle_controller = Arc::new(Mutex::new(None));
29 let context_manager = Arc::new(Mutex::new(None));
30 let policy_engine = Arc::new(Mutex::new(OpaPolicyEngine::new()));
31
32 Self {
33 lifecycle_controller,
34 context_manager,
35 policy_engine,
36 }
37 }
38
39 pub async fn initialize(&self) -> Result<(), String> {
41 let lifecycle_config = LifecycleConfig::default();
43 let lifecycle_controller = Arc::new(
44 DefaultLifecycleController::new(lifecycle_config)
45 .await
46 .map_err(|e| format!("Failed to create lifecycle controller: {}", e))?,
47 );
48
49 let context_config = ContextManagerConfig::default();
51 let context_manager = Arc::new(
52 StandardContextManager::new(context_config, "runtime_bridge")
53 .await
54 .map_err(|e| format!("Failed to create context manager: {}", e))?,
55 );
56
57 context_manager
59 .initialize()
60 .await
61 .map_err(|e| format!("Failed to initialize context manager: {}", e))?;
62
63 *self.lifecycle_controller.lock().unwrap() = Some(lifecycle_controller);
65 *self.context_manager.lock().unwrap() = Some(context_manager);
66
67 Ok(())
68 }
69
70 pub async fn initialize_agent(&self, config: AgentConfig) -> Result<AgentId, String> {
71 let controller = {
72 let controller_guard = self.lifecycle_controller.lock().unwrap();
73 controller_guard.clone()
74 };
75
76 if let Some(controller) = controller {
77 controller
78 .initialize_agent(config)
79 .await
80 .map_err(|e| e.to_string())
81 } else {
82 Err("Lifecycle controller not initialized".to_string())
83 }
84 }
85
86 pub async fn check_capability(
88 &self,
89 agent_id: &str,
90 capability: &Capability,
91 ) -> Result<PolicyDecision, String> {
92 let engine = {
94 let engine_guard = self.policy_engine.lock().unwrap();
95 engine_guard.clone()
96 };
97 engine
98 .check_capability(agent_id, capability)
99 .await
100 .map_err(|e| e.to_string())
101 }
102
103 pub async fn register_event_handler(
105 &self,
106 agent_id: &str,
107 event_name: &str,
108 _event_type: &str,
109 ) -> Result<(), String> {
110 tracing::info!(
111 "Registered event handler '{}' for agent {}",
112 event_name,
113 agent_id
114 );
115 Ok(())
116 }
117
118 pub async fn emit_event(
120 &self,
121 agent_id: &str,
122 event_name: &str,
123 _data: &serde_json::Value,
124 ) -> Result<(), String> {
125 tracing::info!("Agent {} emitted event: {}", agent_id, event_name);
126 Ok(())
127 }
128}