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_llm::{Config, LLMProvider, ProviderRegistry};
21use bamboo_storage::LockedSessionStore;
22
23use super::AppState;
24
25#[async_trait]
26impl AgentSessionContext for AppState {
27    fn sessions(&self) -> &bamboo_engine::SessionCache {
28        &self.sessions
29    }
30
31    fn storage(&self) -> &Arc<dyn Storage> {
32        &self.storage
33    }
34
35    fn persistence(&self) -> &Arc<LockedSessionStore> {
36        &self.persistence
37    }
38
39    fn agent_runners(&self) -> &Arc<RwLock<HashMap<String, AgentRunner>>> {
40        &self.agent_runners
41    }
42
43    fn account_sink(&self) -> &Arc<AccountEventSink> {
44        &self.account_sink
45    }
46
47    fn config(&self) -> &Arc<RwLock<Config>> {
48        &self.config
49    }
50
51    fn provider_registry(&self) -> &Arc<ProviderRegistry> {
52        &self.provider_registry
53    }
54
55    async fn get_session_event_sender(&self, session_id: &str) -> broadcast::Sender<AgentEvent> {
56        AppState::get_session_event_sender(self, session_id).await
57    }
58
59    async fn load_session_merged(&self, session_id: &str) -> Option<Session> {
60        AppState::load_session_merged(self, session_id).await
61    }
62
63    async fn save_and_cache_session(&self, session: &mut Session) {
64        AppState::save_and_cache_session(self, session).await
65    }
66
67    async fn get_provider(&self) -> Arc<dyn LLMProvider> {
68        AppState::get_provider(self).await
69    }
70
71    fn get_provider_for_model_ref(
72        &self,
73        target: &ProviderModelRef,
74    ) -> Option<Arc<dyn LLMProvider>> {
75        AppState::get_provider_for_model_ref(self, target).ok()
76    }
77
78    async fn get_provider_for_endpoint(&self, provider_name: &str) -> Option<Arc<dyn LLMProvider>> {
79        AppState::get_provider_for_endpoint(self, provider_name)
80            .await
81            .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}