auto-commit-service/src/auto_commit_service/models.py

80 lines
2.1 KiB
Python

"""Pydantic models for requests and responses."""
from datetime import datetime
from enum import Enum
from pydantic import BaseModel, Field
class ProcessStatus(str, Enum):
"""Status of a repository processing result."""
SUCCESS = "success"
COMMITTED = "committed" # Committed locally, not yet pushed
NO_CHANGES = "no_changes"
ERROR = "error"
SKIPPED = "skipped"
RECOVERED = "recovered"
class RepoProcessResult(BaseModel):
"""Result of processing a single repository."""
repo_name: str
status: ProcessStatus
commit_hash: str | None = None
commit_message: str | None = None
files_changed: int = 0
error: str | None = None
recovered_by_claude: bool = False
timestamp: datetime = Field(default_factory=datetime.now)
class CycleResult(BaseModel):
"""Result of a complete commit cycle."""
cycle_id: str
started_at: datetime
completed_at: datetime
repos_processed: int
repos_committed: int
repos_failed: int
results: list[RepoProcessResult]
class DaemonStatus(BaseModel):
"""Current status of the commit daemon."""
running: bool
enabled: bool
cycle_interval_seconds: int
repos: list[str]
last_cycle: CycleResult | None = None
next_cycle_at: datetime | None = None
service_crashed: bool = False
service_health: str | None = None
last_health_check: datetime | None = None
service_restart_attempts: int = 0
service_last_crash_time: datetime | None = None
service_last_successful_restart: datetime | None = None
class HealthResponse(BaseModel):
"""Health check response."""
status: str # ok, degraded, error
daemon_running: bool
llama_service_available: bool
repos_accessible: bool
error: str | None = None
llama_service_crashed: bool = False
llama_service_restart_attempts: int = 0
llama_service_last_crash: datetime | None = None
llama_service_last_successful_restart: datetime | None = None
class TriggerResponse(BaseModel):
"""Response from manual trigger endpoint."""
triggered: bool
message: str
cycle_result: CycleResult | None = None