"""Task Center visualization model.""" from __future__ import annotations from typing import Any class TaskDashboardView: def build(self, tasks: list[dict[str, Any]] | None = None) -> dict[str, Any]: tasks = tasks or [] return { "module": "task-center", "route": "/admin/ai-evolution/tasks", "title": "AIOS Task Center", "views": { "kanban": self._kanban(tasks), "timeline": self._timeline(tasks), "flow": self._flow(tasks), "statistics": self._statistics(tasks), }, "tasks": [self._task_card(task) for task in tasks], } def _task_card(self, task: dict[str, Any]) -> dict[str, Any]: return { "task_id": task.get("task_id"), "title": task.get("title"), "assigned_by": task.get("assigned_by"), "executor": task.get("executor"), "status": task.get("status"), "progress": task.get("progress", {}), "elapsed_seconds": task.get("elapsed_seconds", 0), "remaining_steps": task.get("progress", {}).get("remaining_steps", []), "notification": task.get("notification", {}), "actions": [ "start", "update_progress", "block", "request_approval", "approve", "reject", "retry", "complete", "notify", "close", ], } def _kanban(self, tasks): columns = {"pending": [], "running": [], "blocked": [], "waiting_approval": [], "completed": []} for task in tasks: columns.setdefault(task.get("status", "pending"), []).append(task.get("task_id")) return columns def _timeline(self, tasks): return [ { "task_id": task.get("task_id"), "updated_at": task.get("updated_at"), "status": task.get("status"), } for task in tasks ] def _flow(self, tasks): return { "nodes": ["created", "assigned", "running", "blocked", "approval", "completed", "closed"], "task_count": len(tasks), } def _statistics(self, tasks): return { "total": len(tasks), "running": len([t for t in tasks if t.get("status") == "running"]), "blocked": len([t for t in tasks if t.get("status") == "blocked"]), "waiting_approval": len([t for t in tasks if t.get("status") == "waiting_approval"]), "completed": len([t for t in tasks if t.get("status") == "completed"]), } __all__ = ["TaskDashboardView"]