Skip to content

Commit 162fc81

Browse files
authored
Merge pull request #34 from shuyhere/fix/resume-session-model-and-thinking
fix(cli): resume model and thinking from existing session
2 parents 402960e + 1913d9f commit 162fc81

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

crates/cli/src/session_bootstrap.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use anyhow::Result;
22
use bb_core::agent::{self, DEFAULT_SYSTEM_PROMPT};
33
use bb_core::agent_session::{ModelRef, ThinkingLevel, parse_model_arg};
4+
use bb_core::types::SessionContext;
45

56
use crate::agents_md::load_agents_md;
67
use 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+
108120
pub(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

Comments
 (0)