use super::*;
pub(super) const DEFAULT_WORKSPACE_NAME: &str = "default";
pub(super) async fn list_workspaces(
State(state): State<ServerState>,
) -> Result<Json<WorkspaceListResponse>, ApiFailure> {
Ok(Json(WorkspaceListResponse {
workspaces: backend(&state)?.list_workspaces().await?,
}))
}
pub(super) async fn create_workspace(
State(state): State<ServerState>,
Json(request): Json<CreateWorkspaceRequest>,
) -> Result<Json<CreateWorkspaceResponse>, ApiFailure> {
let (name, _) = mj_core::workspace::normalize_workspace_name(&request.name)
.map_err(|error| ApiFailure::bad_request(format!("{error:#}")))?;
Ok(Json(CreateWorkspaceResponse {
workspace: backend(&state)?.create_workspace(name).await?,
}))
}
pub(super) async fn workspace_for_new_session(
backend: &Arc<dyn SubagentBackend>,
requested: Option<String>,
) -> Result<String, ApiFailure> {
if let Some(requested) = requested {
return Ok(requested);
}
if !backend.list_workspaces().await?.is_empty() {
return Ok(String::new());
}
Ok(backend
.create_workspace(DEFAULT_WORKSPACE_NAME.to_owned())
.await?
.id)
}