from __future__ import annotations from django.db import models from control_plane.common import TimestampedModel class EventType(models.TextChoices): PROJECT_CREATED = "PROJECT_CREATED" PLAN_APPROVED = "PLAN_APPROVED" MILESTONE_CREATED = "MILESTONE_CREATED" TASK_CREATED = "TASK_CREATED" TASK_READY = "TASK_READY" TASK_STARTED = "TASK_STARTED" TASK_COMPLETED = "TASK_COMPLETED" TASK_FAILED = "TASK_FAILED" TEST_FAILED = "TEST_FAILED" REVIEW_FAILED = "REVIEW_FAILED" COMMIT_CREATED = "COMMIT_CREATED" MILESTONE_VERIFIED = "MILESTONE_VERIFIED" PROJECT_BLOCKED = "PROJECT_BLOCKED" PROJECT_PAUSED = "PROJECT_PAUSED" PROJECT_RESUMED = "PROJECT_RESUMED" PROJECT_FINISHED = "PROJECT_FINISHED" AGENT_CREATED = "AGENT_CREATED" AGENT_PROMOTED = "AGENT_PROMOTED" class Event(TimestampedModel): event_type = models.CharField(max_length=80, choices=EventType.choices) project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, null=True, blank=True) task = models.ForeignKey("projects.Task", on_delete=models.CASCADE, null=True, blank=True) agent_version = models.ForeignKey("agents.AgentVersion", on_delete=models.SET_NULL, null=True, blank=True) actor = models.CharField(max_length=120, default="system") payload = models.JSONField(default=dict, blank=True) class Meta: indexes = [models.Index(fields=["event_type", "created_at"]), models.Index(fields=["project", "created_at"])]