42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
"""Task Center action API model for Web UI buttons."""
|
|
|
|
from typing import Any
|
|
|
|
try:
|
|
from fastapi import APIRouter
|
|
except Exception:
|
|
APIRouter = None
|
|
|
|
from .task_lifecycle import TaskLifecycle
|
|
|
|
|
|
lifecycle = TaskLifecycle()
|
|
|
|
|
|
def get_task_actions(task: dict[str, Any], role: str) -> dict[str, Any]:
|
|
return {
|
|
"task_id": task.get("task_id"),
|
|
"actions": lifecycle.available_actions(task, role),
|
|
}
|
|
|
|
|
|
def execute_task_action(task: dict[str, Any], action: str, role: str, reason: str | None = None):
|
|
return lifecycle.transition(task, action, role, reason)
|
|
|
|
|
|
def build_router():
|
|
if APIRouter is None:
|
|
return None
|
|
router = APIRouter(prefix="/admin/ai-evolution/tasks", tags=["task-actions"])
|
|
|
|
@router.post("/{task_id}/actions/{action}", operation_id="executeTaskAction")
|
|
def action(task_id: str, action: str, payload: dict[str, Any]):
|
|
return execute_task_action(payload.get("task", {}), action, payload.get("role", "user"), payload.get("reason"))
|
|
|
|
return router
|
|
|
|
|
|
router = build_router()
|
|
|
|
__all__ = ["router", "get_task_actions", "execute_task_action"]
|