Source code for pjkm.core.models.task
"""Task system models: phases, definitions, results, and events."""
from __future__ import annotations
from enum import IntEnum
from typing import Literal
from pydantic import BaseModel, Field
[docs]
class Phase(IntEnum):
"""Execution phases in strict order."""
[docs]
class TaskDefinition(BaseModel):
"""Metadata describing a registered task."""
[docs]
depends_on: list[str] = Field(default_factory=list)
[docs]
class TaskResult(BaseModel):
"""Outcome of executing a single task."""
[docs]
files_created: list[str] = Field(default_factory=list)
[docs]
files_modified: list[str] = Field(default_factory=list)
[docs]
duration_ms: float = 0.0
[docs]
class TaskStarted(BaseModel):
"""Emitted when a task begins execution."""
[docs]
kind: Literal["task_started"] = "task_started"
[docs]
class TaskProgress(BaseModel):
"""Emitted for intermediate task status updates."""
[docs]
kind: Literal["task_progress"] = "task_progress"
[docs]
class TaskCompleted(BaseModel):
"""Emitted when a task finishes."""
[docs]
kind: Literal["task_completed"] = "task_completed"
[docs]
class PhaseStarted(BaseModel):
"""Emitted when a phase begins."""
[docs]
kind: Literal["phase_started"] = "phase_started"
[docs]
class PhaseCompleted(BaseModel):
"""Emitted when all tasks in a phase have finished."""
[docs]
kind: Literal["phase_completed"] = "phase_completed"
[docs]
TaskEvent = TaskStarted | TaskProgress | TaskCompleted | PhaseStarted | PhaseCompleted