use std::collections::HashMap;
use std::sync::Arc;
use super::registry::RegistryBundle;
use super::AgentDefinition;
use super::AgentOsWiringError;
use crate::contracts::runtime::tool_call::Tool;
use crate::contracts::runtime::AgentBehavior;
pub trait SystemWiring: Send + Sync {
fn id(&self) -> &str;
fn reserved_behavior_ids(&self) -> &[&'static str] {
&[]
}
fn wire(
&self,
ctx: &WiringContext<'_>,
) -> Result<Vec<Arc<dyn RegistryBundle>>, AgentOsWiringError>;
}
pub struct WiringContext<'a> {
pub resolved_behaviors: &'a [Arc<dyn AgentBehavior>],
pub existing_tools: &'a HashMap<String, Arc<dyn Tool>>,
pub agent_definition: &'a AgentDefinition,
}