1use steer_workspace::WorkspaceError;
2pub use steer_workspace::{
3 CreateWorkspaceRequest, DeleteWorkspaceRequest, EnvironmentId, EnvironmentInfo,
4 ListWorkspacesRequest, LlmStatus, LocalWorkspaceManager, RemoteAuth, RepoId, RepoInfo,
5 RepoManager, RepoRef, VcsInfo, VcsKind, VcsStatus, Workspace, WorkspaceConfig,
6 WorkspaceCreateStrategy, WorkspaceId, WorkspaceInfo, WorkspaceManager, WorkspaceMetadata,
7 WorkspaceRef, WorkspaceStatus, WorkspaceType,
8};
9
10use crate::error::Result;
11use std::sync::Arc;
12
13pub async fn create_workspace(
15 config: &steer_workspace::WorkspaceConfig,
16) -> Result<Arc<dyn Workspace>> {
17 match config {
18 steer_workspace::WorkspaceConfig::Local { path } => {
19 let workspace = steer_workspace::local::LocalWorkspace::with_path(path.clone())
20 .await
21 .map_err(|e| WorkspaceError::NotSupported(e.to_string()))?;
22 Ok(Arc::new(workspace))
23 }
24 steer_workspace::WorkspaceConfig::Remote { address, auth } => {
25 let workspace =
26 steer_workspace_client::RemoteWorkspace::new(address.clone(), auth.clone())
27 .await
28 .map_err(|e| WorkspaceError::NotSupported(e.to_string()))?;
29 Ok(Arc::new(workspace))
30 }
31 }
32}
33
34pub async fn create_workspace_from_session_config(
37 config: &crate::session::state::WorkspaceConfig,
38) -> Result<Arc<dyn Workspace>> {
39 use steer_workspace::WorkspaceConfig as WsConfig;
40
41 let ws_config = match config {
42 crate::session::state::WorkspaceConfig::Local { path } => {
43 WsConfig::Local { path: path.clone() }
44 }
45 crate::session::state::WorkspaceConfig::Remote {
46 agent_address,
47 auth,
48 } => {
49 let ws_auth = auth.as_ref().map(|a| match a {
50 crate::session::state::RemoteAuth::Bearer { token } => {
51 steer_workspace::RemoteAuth::BearerToken(token.clone())
52 }
53 crate::session::state::RemoteAuth::ApiKey { key } => {
54 steer_workspace::RemoteAuth::ApiKey(key.clone())
55 }
56 });
57 WsConfig::Remote {
58 address: agent_address.clone(),
59 auth: ws_auth,
60 }
61 }
62 };
63
64 create_workspace(&ws_config)
65 .await
66 .map_err(|e| WorkspaceError::NotSupported(e.to_string()).into())
67}