summaryrefslogtreecommitdiff
path: root/Omni/Task
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2025-11-20 16:23:29 -0500
committerBen Sima <ben@bsima.me>2025-11-20 16:23:29 -0500
commitb6334da771d764b7c29b33522db06b6cc716c6cb (patch)
tree644805fb7f3276ea6a5a8af022f4b1f67c316a6f /Omni/Task
parent9ab85c33379f98229235a30dbf5108ad31a01d1f (diff)
feat: implement multi-agent workflow infrastructure
- Add 'Review' status to Task tool - Add Omni/Agent/ directory with setup and sync scripts - Add WORKER_AGENT_GUIDE.md - Configure custom merge driver for tasks.jsonl
Diffstat (limited to 'Omni/Task')
-rw-r--r--Omni/Task/Core.hs13
1 files changed, 10 insertions, 3 deletions
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index 3da47aa..af105de 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -36,7 +36,7 @@ data Task = Task
data TaskType = Epic | WorkTask
deriving (Show, Eq, Generic)
-data Status = Open | InProgress | Done
+data Status = Open | InProgress | Review | Done
deriving (Show, Eq, Generic)
-- Priority levels (matching beads convention)
@@ -83,9 +83,11 @@ instance FromJSON Task
-- Get the tasks database file path (use test file if TASK_TEST_MODE is set)
getTasksFilePath :: IO FilePath
getTasksFilePath = do
+ customPath <- lookupEnv "TASK_DB_PATH"
testMode <- lookupEnv "TASK_TEST_MODE"
- pure <| case testMode of
- Just "1" -> ".tasks/tasks-test.jsonl"
+ pure <| case (customPath, testMode) of
+ (Just path, _) -> path
+ (_, Just "1") -> ".tasks/tasks-test.jsonl"
_ -> ".tasks/tasks.jsonl"
-- Initialize the task database
@@ -347,6 +349,7 @@ showTaskTree maybeId = do
WorkTask -> case taskStatus task of
Open -> "[ ]"
InProgress -> "[~]"
+ Review -> "[?]"
Done -> "[✓]"
nsStr = case taskNamespace task of
Nothing -> ""
@@ -462,6 +465,7 @@ data TaskStats = TaskStats
{ totalTasks :: Int,
openTasks :: Int,
inProgressTasks :: Int,
+ reviewTasks :: Int,
doneTasks :: Int,
totalEpics :: Int,
readyTasks :: Int,
@@ -483,6 +487,7 @@ getTaskStats = do
let total = length tasks
open = length <| filter (\t -> taskStatus t == Open) tasks
inProg = length <| filter (\t -> taskStatus t == InProgress) tasks
+ review = length <| filter (\t -> taskStatus t == Review) tasks
done = length <| filter (\t -> taskStatus t == Done) tasks
epics = length <| filter (\t -> taskType t == Epic) tasks
readyCount = length ready
@@ -504,6 +509,7 @@ getTaskStats = do
{ totalTasks = total,
openTasks = open,
inProgressTasks = inProg,
+ reviewTasks = review,
doneTasks = done,
totalEpics = epics,
readyTasks = readyCount,
@@ -522,6 +528,7 @@ showTaskStats = do
putText <| "Total tasks: " <> T.pack (show (totalTasks stats))
putText <| " Open: " <> T.pack (show (openTasks stats))
putText <| " In Progress: " <> T.pack (show (inProgressTasks stats))
+ putText <| " Review: " <> T.pack (show (reviewTasks stats))
putText <| " Done: " <> T.pack (show (doneTasks stats))
putText ""
putText <| "Epics: " <> T.pack (show (totalEpics stats))