82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
"""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"]
|