feat: complete Phase 1 MVP - add agent executor and WebSocket real-time updates
Agent Executor Service: - BaseAgent class with LLM integration via LiteLLM proxy - AgentExecutor service that processes pending executions every 5 seconds - Action execution: create_subtask, update_status, send_notification, add_comment - Approval workflow: CxO level agents require user approval before execution - Telegram notifications for approvals and completions - Error handling and execution status tracking WebSocket Real-Time Updates: - WebSocket endpoint at /ws/opc for real-time task updates - ConnectionManager for broadcasting to all connected clients - Frontend WebSocket client with auto-reconnect - Live updates for task create/update/move/delete actions - Agent execution status broadcasts Integration: - Agent executor starts on dashboard startup - Task router broadcasts WebSocket updates on all mutations - Frontend OPC page subscribes to WebSocket and updates UI in real-time - Agents (PM, CTO, COO) can now execute tasks autonomously Phase 1 MVP Complete: ✅ PostgreSQL database with full schema ✅ Task CRUD API with automatic time tracking ✅ Kanban board with drag-and-drop ✅ Agent executor service with LLM integration ✅ WebSocket real-time updates ✅ 3 core agents ready to execute Next: Agent panel UI, email notifications, PDF invoicing
This commit is contained in:
@@ -7,6 +7,7 @@ from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
from db import opc_db
|
||||
from rbac import require_page, User, _inject_user
|
||||
from routers import opc_ws
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -97,6 +98,9 @@ async def create_task(
|
||||
actor=user.username
|
||||
)
|
||||
|
||||
# Broadcast WebSocket update
|
||||
await opc_ws.broadcast_task_update(created_task["id"], "created", created_task)
|
||||
|
||||
return created_task
|
||||
|
||||
|
||||
@@ -153,6 +157,10 @@ async def update_task(
|
||||
updates=updates,
|
||||
actor=user.username
|
||||
)
|
||||
|
||||
# Broadcast WebSocket update
|
||||
await opc_ws.broadcast_task_update(task_id, "updated", updated_task)
|
||||
|
||||
return updated_task
|
||||
|
||||
|
||||
@@ -163,6 +171,10 @@ async def delete_task(
|
||||
):
|
||||
"""Delete a task"""
|
||||
await opc_db.delete_task(task_id=task_id, actor=user.username)
|
||||
|
||||
# Broadcast WebSocket update
|
||||
await opc_ws.broadcast_task_update(task_id, "deleted", {"id": task_id})
|
||||
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user