From 6dbb77b5e7525d0b38434267ca97fdbe16b8ef84 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sun, 9 Nov 2025 08:17:45 -0500 Subject: Add enhanced filtering to task list command Implement --status and --namespace filters for task list: New filters: - --status: Filter by open, in-progress, or done - --namespace: Filter by namespace (e.g., Omni/Task) All filters can be combined: - task list --parent=t-abc123 --status=open - task list --type=epic --status=done - task list --namespace="Omni/Task" --status=open Updated listTasks signature to accept all filter parameters and apply them in sequence. Updated AGENTS.md with examples. Closes task t-PpZGVf --- Omni/Task/Core.hs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Omni/Task/Core.hs') diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs index 6285ef7..140d7dc 100644 --- a/Omni/Task/Core.hs +++ b/Omni/Task/Core.hs @@ -5,7 +5,6 @@ module Omni.Task.Core where import Alpha -import Control.Monad ((>>=)) import Data.Aeson (FromJSON, ToJSON, decode, encode) import qualified Data.Aeson as Aeson import qualified Data.Aeson.KeyMap as KM @@ -210,20 +209,26 @@ updateTaskStatus tid newStatus = do TIO.writeFile tasksFile "" traverse_ saveTask updatedTasks --- List tasks, optionally filtered by type or parent -listTasks :: Maybe TaskType -> Maybe Text -> IO [Task] -listTasks maybeType maybeParent = do +-- List tasks, optionally filtered by type, parent, status, or namespace +listTasks :: Maybe TaskType -> Maybe Text -> Maybe Status -> Maybe Text -> IO [Task] +listTasks maybeType maybeParent maybeStatus maybeNamespace = do tasks <- loadTasks let filtered = tasks |> filterByType maybeType |> filterByParent maybeParent + |> filterByStatus maybeStatus + |> filterByNamespace maybeNamespace pure filtered where filterByType Nothing ts = ts filterByType (Just typ) ts = filter (\t -> taskType t == typ) ts filterByParent Nothing ts = ts filterByParent (Just pid) ts = filter (\t -> taskParent t == Just pid) ts + filterByStatus Nothing ts = ts + filterByStatus (Just status) ts = filter (\t -> taskStatus t == status) ts + filterByNamespace Nothing ts = ts + filterByNamespace (Just ns) ts = filter (\t -> taskNamespace t == Just ns) ts -- Get ready tasks (not blocked by dependencies) getReadyTasks :: IO [Task] -- cgit v1.2.3