Skip to main content

aether_core/core/
agent_deps.rs

1use crate::core::AgentRegistry;
2use crate::events::{AgentObserver, DynObserverFactory, TraceContext};
3use aether_auth::OAuthCredentialStorage;
4use std::sync::Arc;
5
6/// Cross-cutting dependencies threaded to every agent a run spawns — the root
7/// agent and any sub-agents created by in-memory MCP servers. Bundling them
8/// keeps the plumbing through builders and servers a single value.
9#[derive(Clone, Default)]
10pub struct AgentDeps {
11    pub oauth_credential_store: Option<Arc<dyn OAuthCredentialStorage>>,
12    pub observer_factory: Option<DynObserverFactory>,
13    /// Remote trace these agents continue, set by whoever handled the request
14    /// that spawned them.
15    pub parent_trace_context: Option<TraceContext>,
16    pub agent_registry: AgentRegistry,
17    pub session_affinity_key: Option<String>,
18}
19
20impl AgentDeps {
21    pub fn new(
22        oauth_credential_store: Arc<dyn OAuthCredentialStorage>,
23        observer_factory: Option<DynObserverFactory>,
24    ) -> Self {
25        Self { oauth_credential_store: Some(oauth_credential_store), observer_factory, ..Self::default() }
26    }
27
28    /// Continue `parent`'s trace in every agent built from these deps.
29    pub fn with_parent_trace_context(mut self, parent: Option<TraceContext>) -> Self {
30        self.parent_trace_context = parent;
31        self
32    }
33
34    pub fn with_agent_registry(mut self, registry: AgentRegistry) -> Self {
35        self.agent_registry = registry;
36        self
37    }
38
39    pub fn with_session_affinity_key(mut self, key: impl Into<String>) -> Self {
40        self.session_affinity_key = Some(key.into());
41        self
42    }
43
44    /// A fresh observer isolated to one agent, if a factory is configured.
45    pub fn observer(&self, agent_name: &str) -> Option<Box<dyn AgentObserver>> {
46        self.observer_factory
47            .as_ref()
48            .map(|factory| factory.agent(Some(agent_name), self.parent_trace_context.as_ref()))
49    }
50}