steer_cli/commands/session/
create.rs1use async_trait::async_trait;
2use eyre::{Result, eyre};
3
4use super::super::Command;
5use crate::session_config::{SessionConfigLoader, SessionConfigOverrides};
6use steer_core::api::Model;
7use steer_core::app::AppConfig;
8use steer_core::session::{SessionManager, SessionManagerConfig};
9use steer_core::utils::session::{create_session_store_with_config, resolve_session_store_config};
10
11pub struct CreateSessionCommand {
12 pub session_config: Option<std::path::PathBuf>,
13 pub metadata: Option<String>,
14 pub remote: Option<String>,
15 pub system_prompt: Option<String>,
16 pub session_db: Option<std::path::PathBuf>,
17}
18
19#[async_trait]
20impl Command for CreateSessionCommand {
21 async fn execute(&self) -> Result<()> {
22 let overrides = SessionConfigOverrides {
24 system_prompt: self.system_prompt.clone(),
25 metadata: self.metadata.clone(),
26 };
27
28 let loader =
29 SessionConfigLoader::new(self.session_config.clone()).with_overrides(overrides);
30
31 let session_config = loader.load().await?;
32
33 if let Some(remote_addr) = &self.remote {
35 println!("Creating remote session at {remote_addr}");
36
37 return Err(eyre!(
40 "Remote session creation with TUI is not available in this command. Use the steer-tui binary instead."
41 ));
42 }
43
44 let store_config = resolve_session_store_config(self.session_db.clone())?;
46 let session_store = create_session_store_with_config(store_config).await?;
47 let session_manager_config = SessionManagerConfig {
48 max_concurrent_sessions: 10,
49 default_model: Model::default(),
50 auto_persist: true,
51 };
52
53 let session_manager = SessionManager::new(session_store, session_manager_config);
54
55 let auth_storage = std::sync::Arc::new(
56 steer_core::auth::DefaultAuthStorage::new()
57 .map_err(|e| eyre!("Failed to create auth storage: {}", e))?,
58 );
59 let llm_config_provider = steer_core::config::LlmConfigProvider::new(auth_storage);
60 let app_config = AppConfig {
61 llm_config_provider,
62 };
63
64 let (session_id, _) = session_manager
65 .create_session(session_config, app_config)
66 .await
67 .map_err(|e| eyre!("Failed to create session: {}", e))?;
68
69 println!("Created session: {}", session_id);
70 Ok(())
71 }
72}