bamboo_server/app_state/
agent_session_context.rs1use 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}