{epic.title}
-+ {epic.title} +
+- Timeline -
-Epics
-+ Loop Monitor +
-
- {epics.map((epic) => {
- const StatusIcon = statusIcons[epic.status] ?? statusIcons.open;
+
-
-
-
- - +- ---- {epic.title} -
---- -- {formatStatusLabel(epic.status)} - - -- {epic.completed_count} of {epic.task_count} tasks - completed -
-- + navigate(href('/epics/:epicId', { epicId: epic.id })) + } + className="min-h-[var(--space-12)] w-full" + aria-label={`${epic.title}, ${epic.completed_count} of ${epic.task_count} tasks`} + />
);
})}
diff --git a/apps/ralph-monitoring/app/routes/epics.tsx b/apps/ralph-monitoring/app/routes/epics.tsx
index 9b2b7b54..2e64c317 100644
--- a/apps/ralph-monitoring/app/routes/epics.tsx
+++ b/apps/ralph-monitoring/app/routes/epics.tsx
@@ -1,5 +1,20 @@
-import { Outlet } from 'react-router';
+import { Outlet, useNavigation } from 'react-router';
export default function EpicsLayout() {
- return
-
+ {sortedEpics.map((epic) => {
+ const currentTaskLine =
+ epic.current_task_title &&
+ (epic.current_task_agent
+ ? `${epic.current_task_title} · ${epic.current_task_agent}`
+ : epic.current_task_title);
+
return (