commit c9eb433821b39b90c376bb37d9ae28e7916136e5
Author: Coder Agent <coder@agents.omni>
Date: Mon Feb 16 17:16:07 2026
Expose Task Web at /tasks via Ava web server
Task-Id: t-609
Task-Id: t-610
diff --git a/Omni/Ava/Web.hs b/Omni/Ava/Web.hs
index 3d1efe0b..a9aada05 100644
--- a/Omni/Ava/Web.hs
+++ b/Omni/Ava/Web.hs
@@ -46,6 +46,9 @@ import qualified Network.HTTP.Simple as HTTP
import qualified Network.Wai.Handler.Warp as Warp
import qualified Omni.Agent.Trace.Storage as Trace
import qualified Omni.Ava.Agent.Backend as Agent
+import qualified Omni.Task.Web.Handlers as TaskWeb
+import Omni.Task.Web.Pages ()
+import Omni.Task.Web.Partials ()
import Servant
import qualified Servant.HTML.Lucid as Lucid
import qualified System.Environment as Env
@@ -68,7 +71,9 @@ startWebServer port dbPath = do
-- API Type
-- -----------------------------------------------------------------------------
-type API =
+type API = TaskWeb.API :<|> AvaAPI
+
+type AvaAPI =
-- Trace viewer endpoints
"trace" :> Capture "id" Text :> Get '[Lucid.HTML] TracePage
:<|> "api" :> "trace" :> Capture "id" Text :> Get '[JSON] Aeson.Value
@@ -89,10 +94,10 @@ api :: Proxy API
api = Proxy
app :: FilePath -> Application
-app dbPath = serve api (server dbPath)
+app dbPath = serve api (TaskWeb.server :<|> avaServer dbPath)
-server :: FilePath -> Server API
-server dbPath =
+avaServer :: FilePath -> Server AvaAPI
+avaServer dbPath =
tracePageHandler dbPath
:<|> traceJsonHandler dbPath
:<|> agentDashboardHandler dbPath
diff --git a/Omni/Task/Web/Components.hs b/Omni/Task/Web/Components.hs
index 7be4a35c..364f5235 100644
--- a/Omni/Task/Web/Components.hs
+++ b/Omni/Task/Web/Components.hs
@@ -148,8 +148,8 @@ import Data.Time (NominalDiffTime, UTCTime, defaultTimeLocale, diffUTCTime, form
import qualified Lucid
import qualified Lucid.Base as Lucid
import Numeric (showFFloat)
-import Omni.Task.Web.Types (SortOrder (..), sortOrderLabel, sortOrderToParam)
import qualified Omni.Task.Core as TaskCore
+import Omni.Task.Web.Types (SortOrder (..), sortOrderLabel, sortOrderToParam)
-- * Time formatting
@@ -593,7 +593,9 @@ statusBadge status =
TaskCore.Open -> ("badge badge-open", "Open")
TaskCore.InProgress -> ("badge badge-inprogress", "In Progress")
TaskCore.Review -> ("badge badge-review", "Review")
+ TaskCore.ReviewInProgress -> ("badge badge-review", "Review In Progress")
TaskCore.Approved -> ("badge badge-approved", "Approved")
+ TaskCore.Integrating -> ("badge badge-inprogress", "Integrating")
TaskCore.Done -> ("badge badge-done", "Done")
TaskCore.NeedsHelp -> ("badge badge-needshelp", "Needs Help")
in Lucid.span_ [Lucid.class_ cls] label
@@ -729,7 +731,9 @@ clickableBadge status _tid =
TaskCore.Open -> ("badge badge-open status-badge-clickable", "Open")
TaskCore.InProgress -> ("badge badge-inprogress status-badge-clickable", "In Progress")
TaskCore.Review -> ("badge badge-review status-badge-clickable", "Review")
+ TaskCore.ReviewInProgress -> ("badge badge-review status-badge-clickable", "Review In Progress")
TaskCore.Approved -> ("badge badge-approved status-badge-clickable", "Approved")
+ TaskCore.Integrating -> ("badge badge-inprogress status-badge-clickable", "Integrating")
TaskCore.Done -> ("badge badge-done status-badge-clickable", "Done")
TaskCore.NeedsHelp -> ("badge badge-needshelp status-badge-clickable", "Needs Help")
in Lucid.span_
@@ -757,7 +761,9 @@ statusDropdownOptions currentStatus tid =
statusOption TaskCore.Open currentStatus tid
statusOption TaskCore.InProgress currentStatus tid
statusOption TaskCore.Review currentStatus tid
+ statusOption TaskCore.ReviewInProgress currentStatus tid
statusOption TaskCore.Approved currentStatus tid
+ statusOption TaskCore.Integrating currentStatus tid
statusOption TaskCore.Done currentStatus tid
statusOption TaskCore.NeedsHelp currentStatus tid
@@ -768,7 +774,9 @@ statusOption opt currentStatus tid =
TaskCore.Open -> ("badge badge-open", "Open")
TaskCore.InProgress -> ("badge badge-inprogress", "In Progress")
TaskCore.Review -> ("badge badge-review", "Review")
+ TaskCore.ReviewInProgress -> ("badge badge-review", "Review In Progress")
TaskCore.Approved -> ("badge badge-approved", "Approved")
+ TaskCore.Integrating -> ("badge badge-inprogress", "Integrating")
TaskCore.Done -> ("badge badge-done", "Done")
TaskCore.NeedsHelp -> ("badge badge-needshelp", "Needs Help")
isSelected = opt == currentStatus