From dbe2b82d2f53761d9504fb4e5cf37f64a2000b7a Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Thu, 27 Nov 2025 09:59:42 -0500 Subject: Show activity timeline on task detail page in web UI All builds pass. Here's a summary of the changes I made: **Omni/Task/Core.hs:** - Added `getActivitiesForTask` function to query task_activity table for **Omni/Jr/Web.hs:** - Added `Data.Time` import for timestamp formatting - Updated `TaskDetailPage` type to include `[TaskCore.TaskActivity]` - Updated `taskDetailHandler` to fetch activities for the task - Added activity timeline rendering in `toHtml` instance for InProgress - Added helper functions: `renderActivity`, `stageClass`, `stageIcon`, ` **Omni/Jr/Web/Style.hs:** - Added `activityTimelineStyles` function with vertical timeline CSS - Added stage-specific colors (claiming=blue, running=yellow, reviewing= - Added dark mode styles for the activity timeline Task-Id: t-148.3 --- Omni/Task/Core.hs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Omni/Task/Core.hs') diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs index d9ea98c..bd70fde 100644 --- a/Omni/Task/Core.hs +++ b/Omni/Task/Core.hs @@ -1014,3 +1014,19 @@ logActivity tid stage metadata = conn "INSERT INTO task_activity (task_id, stage, message, metadata) VALUES (?, ?, ?, ?)" (tid, show stage, Nothing :: Maybe Text, metadata) + +-- | Get all activities for a task, ordered by timestamp descending +getActivitiesForTask :: Text -> IO [TaskActivity] +getActivitiesForTask tid = + withDb <| \conn -> do + rows <- + SQL.query + conn + "SELECT id, task_id, timestamp, stage, message, metadata \ + \FROM task_activity WHERE task_id = ? ORDER BY timestamp DESC" + (SQL.Only tid) :: + IO [(Int, Text, UTCTime, Text, Maybe Text, Maybe Text)] + pure [TaskActivity (Just i) taskId ts (readStage stg) msg meta | (i, taskId, ts, stg, msg, meta) <- rows] + where + readStage :: Text -> ActivityStage + readStage s = fromMaybe Claiming (readMaybe (T.unpack s)) -- cgit v1.2.3