11use anyhow:: Result ;
22use bb_core:: agent:: { self , DEFAULT_SYSTEM_PROMPT } ;
33use bb_core:: agent_session:: { ModelRef , ThinkingLevel , parse_model_arg} ;
4+ use bb_core:: types:: SessionContext ;
45
56use crate :: agents_md:: load_agents_md;
67use bb_core:: agent_session_runtime:: {
@@ -105,6 +106,17 @@ pub struct SessionRuntimeSetup {
105106 pub extension_bootstrap : ExtensionBootstrap ,
106107}
107108
109+ fn load_resumed_session_context (
110+ conn : & rusqlite:: Connection ,
111+ session_id : & str ,
112+ session_created : bool ,
113+ ) -> Option < SessionContext > {
114+ if !session_created {
115+ return None ;
116+ }
117+ bb_session:: context:: build_context ( conn, session_id) . ok ( )
118+ }
119+
108120pub ( crate ) async fn prepare_session_runtime (
109121 entry : SessionBootstrapOptions ,
110122) -> Result < (
@@ -123,14 +135,20 @@ pub(crate) async fn prepare_session_runtime(
123135 let settings = Settings :: load_merged ( & cwd) ;
124136 let execution_policy = ExecutionPolicy :: from ( settings. resolved_execution_mode ( ) ) ;
125137 let startup_fallback = crate :: login:: preferred_startup_provider_and_model ( & settings) ;
138+ let resumed_session_context = load_resumed_session_context ( & conn, & session_id, session_created) ;
139+ let resumed_model = resumed_session_context
140+ . as_ref ( )
141+ . and_then ( |ctx| ctx. model . as_ref ( ) ) ;
126142 let model_input = entry
127143 . model
128144 . as_deref ( )
145+ . or ( resumed_model. map ( |model| model. model_id . as_str ( ) ) )
129146 . or ( startup_fallback. as_ref ( ) . map ( |( _, model) | model. as_str ( ) ) )
130147 . or ( settings. default_model . as_deref ( ) ) ;
131148 let provider_input = entry
132149 . provider
133150 . as_deref ( )
151+ . or ( resumed_model. map ( |model| model. provider . as_str ( ) ) )
134152 . or ( startup_fallback
135153 . as_ref ( )
136154 . map ( |( provider, _) | provider. as_str ( ) ) )
@@ -140,6 +158,9 @@ pub(crate) async fn prepare_session_runtime(
140158 let requested_thinking = thinking_override
141159 . as_deref ( )
142160 . or ( entry. thinking . as_deref ( ) )
161+ . or ( resumed_session_context
162+ . as_ref ( )
163+ . map ( |ctx| ctx. thinking_level . as_str ( ) ) )
143164 . unwrap_or ( "medium" ) ;
144165 let thinking_level = ThinkingLevel :: parse ( requested_thinking) . unwrap_or ( ThinkingLevel :: Medium ) ;
145166 let thinking_str = thinking_level. as_str ( ) ;
0 commit comments