wsb 0.88.382266

Workspace - A tool suite for file operations, version management, and development workflow automation
Documentation
diff --git a/src/web/handlers/version.rs b/src/web/handlers/version.rs
index 92da95c..af1cd65 100644
--- a/src/web/handlers/version.rs
+++ b/src/web/handlers/version.rs
@@ -1,18 +1,29 @@
-use axum::Json;
+use axum::{http::StatusCode, Json};
 
 use crate::fleet::git::GitOps;
 
-pub async fn get_version() -> Json<serde_json::Value> {
-    let workspace_root = std::env::current_dir()
-        .ok()
-        .and_then(|cwd| GitOps::discover_repo_root(&cwd).ok())
-        .map(|path| path.display().to_string());
+pub async fn get_version() -> Result<Json<serde_json::Value>, (StatusCode, Json<serde_json::Value>)> {
+    let cwd = std::env::current_dir().map_err(|error| internal_error(error.into()))?;
+    let workspace_root = GitOps::discover_repo_root(&cwd).map_err(|error| internal_error(error.into()))?;
+    let workspace_version = crate::state::calculate_workspace_version_async(&workspace_root)
+        .await
+        .map_err(internal_error)?;
 
-    Json(serde_json::json!({
+    Ok(Json(serde_json::json!({
         "version": crate::get_version(),
         "commit": "",
         "build_date": "",
         "read_only": false,
-        "workspace_root": workspace_root
-    }))
+        "workspace_root": workspace_root.display().to_string(),
+        "workspace_version": workspace_version.full_version
+    })))
+}
+
+fn internal_error(error: anyhow::Error) -> (StatusCode, Json<serde_json::Value>) {
+    (
+        StatusCode::INTERNAL_SERVER_ERROR,
+        Json(serde_json::json!({
+            "error": error.to_string()
+        })),
+    )
 }