80 lines
2.1 KiB
Python
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
|