From 1a922d4171fe291569b4ede91ceddcb793d79819 Mon Sep 17 00:00:00 2001
From: Fusion
Date: Wed, 20 May 2026 14:49:30 +0200
Subject: [PATCH] fix(sessions): correct session state categorization
- Backend now returns stopped and error sessions too
- Active sessions include running/building/pending
- Recent sessions show stopped/error only
- Status badge shows actual status (running/building/pending)
---
apps/api/src/api/tool_instances.py | 2 +-
apps/web/src/pages/sessions.tsx | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/apps/api/src/api/tool_instances.py b/apps/api/src/api/tool_instances.py
index dbedef5..899b173 100644
--- a/apps/api/src/api/tool_instances.py
+++ b/apps/api/src/api/tool_instances.py
@@ -827,7 +827,7 @@ async def get_user_sessions(
result = await session.execute(
select(ToolInstance)
.where(ToolInstance.owner_id == user_id)
- .where(ToolInstance.status.in_(["running", "building", "pending"]))
+ .where(ToolInstance.status.in_(["running", "building", "pending", "stopped", "error"]))
.order_by(ToolInstance.created_at.desc())
)
instances = result.scalars().all()
diff --git a/apps/web/src/pages/sessions.tsx b/apps/web/src/pages/sessions.tsx
index dee1979..fc19378 100644
--- a/apps/web/src/pages/sessions.tsx
+++ b/apps/web/src/pages/sessions.tsx
@@ -92,12 +92,12 @@ export const SessionsPage = () => {
}, [selectedProject]);
const activeSessions = useMemo(
- () => sessions.filter((s) => s.status === "running"),
+ () => sessions.filter((s) => ["running", "building", "pending"].includes(s.status)),
[sessions]
);
const recentSessions = useMemo(
- () => sessions.filter((s) => s.status !== "running").slice(0, 5),
+ () => sessions.filter((s) => ["stopped", "error"].includes(s.status)).slice(0, 5),
[sessions]
);
@@ -259,7 +259,7 @@ export const SessionsPage = () => {
)}
- running
+ {session.status}
{session.url ? (