aether_core/core/
agent_deps.rs1use crate::core::AgentRegistry;
2use crate::events::{AgentObserver, DynObserverFactory, TraceContext};
3use aether_auth::{OAuthCredentialStorage, SigV4Signers};
4use llm::CodexProvider;
5use llm::parser::ModelProviderParser;
6use std::sync::Arc;
7
8#[derive(Clone, Default)]
12pub struct AgentDeps {
13 oauth_credential_store: Option<Arc<dyn OAuthCredentialStorage>>,
14 codex: Option<CodexProvider>,
15 model_providers: Arc<ModelProviderParser>,
16 pub sigv4_signers: SigV4Signers,
17 pub observer_factory: Option<DynObserverFactory>,
18 pub parent_trace_context: Option<TraceContext>,
21 pub agent_registry: AgentRegistry,
22 pub session_affinity_key: Option<String>,
23}
24
25impl AgentDeps {
26 pub fn new(
27 oauth_credential_store: Arc<dyn OAuthCredentialStorage>,
28 observer_factory: Option<DynObserverFactory>,
29 ) -> Self {
30 let codex = CodexProvider::new(Arc::clone(&oauth_credential_store));
31 Self {
32 oauth_credential_store: Some(oauth_credential_store),
33 model_providers: Arc::new(ModelProviderParser::default().with_codex_provider(codex.clone())),
34 codex: Some(codex),
35 observer_factory,
36 ..Self::default()
37 }
38 }
39
40 pub fn with_parent_trace_context(mut self, parent: Option<TraceContext>) -> Self {
42 self.parent_trace_context = parent;
43 self
44 }
45
46 pub fn with_agent_registry(mut self, registry: AgentRegistry) -> Self {
47 self.agent_registry = registry;
48 self
49 }
50
51 pub fn with_session_affinity_key(mut self, key: impl Into<String>) -> Self {
52 self.session_affinity_key = Some(key.into());
53 self
54 }
55
56 pub fn oauth_credential_store(&self) -> Option<&Arc<dyn OAuthCredentialStorage>> {
57 self.oauth_credential_store.as_ref()
58 }
59
60 pub fn model_providers(&self) -> &ModelProviderParser {
61 &self.model_providers
62 }
63
64 pub async fn forget_cached_credentials(&self) {
65 if let Some(codex) = &self.codex {
66 codex.forget_cached_token().await;
67 }
68 }
69
70 pub fn observer(&self, agent_name: &str) -> Option<Box<dyn AgentObserver>> {
72 self.observer_factory
73 .as_ref()
74 .map(|factory| factory.agent(Some(agent_name), self.parent_trace_context.as_ref()))
75 }
76}