Skip to main content

bamboo_server/app_state/
agent_session_context.rs

1//! `AgentSessionContext` implementation for `AppState`.
2//!
3//! Bridges the engine's dependency-inversion trait (used by the
4//! agent-session-orchestration cluster: events, session_app, title_gen,
5//! gold_auto_answer) to the server's concrete `AppState`. Every method is a
6//! thin delegation to an existing field or method.
7
8use std::collections::HashMap;
9use std::sync::Arc;
10
11use async_trait::async_trait;
12use tokio::sync::{broadcast, RwLock};
13
14use bamboo_agent_core::storage::Storage;
15use bamboo_agent_core::{AgentEvent, Session};
16use bamboo_domain::ProviderModelRef;
17use bamboo_engine::app_context::AgentSessionContext;
18use bamboo_engine::events::AccountEventSink;
19use bamboo_engine::runtime::execution::runner_state::AgentRunner;
20use bamboo_infrastructure::{Config, LLMProvider, LockedSessionStore, ProviderRegistry};
21
22use super::AppState;
23
24#[async_trait]
25impl AgentSessionContext for AppState {
26    fn sessions(&self) -> &Arc<RwLock<HashMap<String, Session>>> {
27        &self.sessions
28    }
29
30    fn storage(&self) -> &Arc<dyn Storage> {
31        &self.storage
32    }
33
34    fn persistence(&self) -> &Arc<LockedSessionStore> {
35        &self.persistence
36    }
37
38    fn agent_runners(&self) -> &Arc<RwLock<HashMap<String, AgentRunner>>> {
39        &self.agent_runners
40    }
41
42    fn account_sink(&self) -> &Arc<AccountEventSink> {
43        &self.account_sink
44    }
45
46    fn config(&self) -> &Arc<RwLock<Config>> {
47        &self.config
48    }
49
50    fn provider_registry(&self) -> &Arc<ProviderRegistry> {
51        &self.provider_registry
52    }
53
54    async fn get_session_event_sender(&self, session_id: &str) -> broadcast::Sender<AgentEvent> {
55        AppState::get_session_event_sender(self, session_id).await
56    }
57
58    async fn load_session_merged(&self, session_id: &str) -> Option<Session> {
59        AppState::load_session_merged(self, session_id).await
60    }
61
62    async fn save_and_cache_session(&self, session: &mut Session) {
63        AppState::save_and_cache_session(self, session).await
64    }
65
66    async fn get_provider(&self) -> Arc<dyn LLMProvider> {
67        AppState::get_provider(self).await
68    }
69
70    fn get_provider_for_model_ref(
71        &self,
72        target: &ProviderModelRef,
73    ) -> Option<Arc<dyn LLMProvider>> {
74        AppState::get_provider_for_model_ref(self, target).ok()
75    }
76
77    async fn get_provider_for_endpoint(
78        &self,
79        provider_name: &str,
80    ) -> Option<Arc<dyn LLMProvider>> {
81        AppState::get_provider_for_endpoint(self, provider_name).await.ok()
82    }
83
84    fn title_gen_acquire(&self, session_id: &str) -> bool {
85        AppState::title_gen_acquire(self, session_id)
86    }
87
88    fn title_gen_release(&self, session_id: &str) {
89        AppState::title_gen_release(self, session_id)
90    }
91}