feat: persist GooseMode per-session via session DB (#7854)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -128,14 +128,19 @@ impl GatewayHandler {
|
||||
user.display_name.as_deref().unwrap_or(&user.user_id)
|
||||
);
|
||||
|
||||
let config = Config::global();
|
||||
let session = self
|
||||
.agent_manager
|
||||
.session_manager()
|
||||
.create_session(working_dir, session_name, SessionType::Gateway)
|
||||
.create_session(
|
||||
working_dir,
|
||||
session_name,
|
||||
SessionType::Gateway,
|
||||
config.get_goose_mode().unwrap_or_default(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
let manager = self.agent_manager.session_manager();
|
||||
let config = Config::global();
|
||||
|
||||
// Store the current provider and model config on the session so the agent
|
||||
// can be restored after LRU eviction, matching the start_agent flow.
|
||||
@@ -197,6 +202,7 @@ impl GatewayHandler {
|
||||
let current_provider = config.get_goose_provider().ok();
|
||||
let current_model_name = config.get_goose_model().ok();
|
||||
let current_extensions = get_enabled_extensions();
|
||||
let current_mode = config.get_goose_mode().unwrap_or_default();
|
||||
|
||||
// --- what the session has ---
|
||||
let session_extensions: Vec<ExtensionConfig> =
|
||||
@@ -208,8 +214,9 @@ impl GatewayHandler {
|
||||
let model_changed = current_model_name.as_deref()
|
||||
!= session.model_config.as_ref().map(|m| m.model_name.as_str());
|
||||
let extensions_changed = current_extensions != session_extensions;
|
||||
let mode_changed = current_mode != session.goose_mode;
|
||||
|
||||
if !provider_changed && !model_changed && !extensions_changed {
|
||||
if !provider_changed && !model_changed && !extensions_changed && !mode_changed {
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
@@ -218,6 +225,7 @@ impl GatewayHandler {
|
||||
provider_changed,
|
||||
model_changed,
|
||||
extensions_changed,
|
||||
mode_changed,
|
||||
"syncing gateway session with current config"
|
||||
);
|
||||
|
||||
@@ -242,6 +250,10 @@ impl GatewayHandler {
|
||||
}
|
||||
}
|
||||
|
||||
if mode_changed {
|
||||
update = update.goose_mode(current_mode);
|
||||
}
|
||||
|
||||
update.apply().await?;
|
||||
Ok(extensions_changed)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user