1pub use steer_workspace::{
3 EnvironmentInfo, RemoteAuth, Workspace, WorkspaceConfig, WorkspaceMetadata, WorkspaceType,
4};
5
6use crate::error::{Result, WorkspaceError};
8use std::sync::Arc;
9
10pub async fn create_workspace(
12 config: &steer_workspace::WorkspaceConfig,
13) -> Result<Arc<dyn Workspace>> {
14 match config {
15 steer_workspace::WorkspaceConfig::Local { path } => {
16 let workspace = steer_workspace::local::LocalWorkspace::with_path(path.clone())
17 .await
18 .map_err(|e| WorkspaceError::NotSupported(e.to_string()))?;
19 Ok(Arc::new(workspace))
20 }
21 steer_workspace::WorkspaceConfig::Remote { address, auth } => {
22 let workspace =
23 steer_workspace_client::RemoteWorkspace::new(address.clone(), auth.clone())
24 .await
25 .map_err(|e| WorkspaceError::NotSupported(e.to_string()))?;
26 Ok(Arc::new(workspace))
27 }
28 steer_workspace::WorkspaceConfig::Container { .. } => Err(WorkspaceError::NotSupported(
29 "Container workspaces are not yet supported.".to_string(),
30 )
31 .into()),
32 }
33}
34
35pub async fn create_workspace_from_session_config(
38 config: &crate::session::state::WorkspaceConfig,
39) -> Result<Arc<dyn Workspace>> {
40 use steer_workspace::WorkspaceConfig as WsConfig;
41
42 let ws_config = match config {
43 crate::session::state::WorkspaceConfig::Local { path } => {
44 WsConfig::Local { path: path.clone() }
45 }
46 crate::session::state::WorkspaceConfig::Remote {
47 agent_address,
48 auth,
49 } => {
50 let ws_auth = auth.as_ref().map(|a| match a {
51 crate::session::state::RemoteAuth::Bearer { token } => {
52 steer_workspace::RemoteAuth::BearerToken(token.clone())
53 }
54 crate::session::state::RemoteAuth::ApiKey { key } => {
55 steer_workspace::RemoteAuth::ApiKey(key.clone())
56 }
57 });
58 WsConfig::Remote {
59 address: agent_address.clone(),
60 auth: ws_auth,
61 }
62 }
63 crate::session::state::WorkspaceConfig::Container { .. } => {
64 return Err(WorkspaceError::NotSupported(
65 "Container workspaces are not yet supported.".to_string(),
66 )
67 .into());
68 }
69 };
70
71 create_workspace(&ws_config)
72 .await
73 .map_err(|e| WorkspaceError::NotSupported(e.to_string()).into())
74}