generated from coulomb/repo-seed
110 lines
2.7 KiB
Python
110 lines
2.7 KiB
Python
import uuid
|
|
from datetime import date, datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class RepoCreate(BaseModel):
|
|
domain_slug: str
|
|
slug: str
|
|
name: str
|
|
local_path: str | None = None
|
|
remote_url: str | None = None
|
|
git_fingerprint: str | None = None
|
|
description: str | None = None
|
|
topic_id: uuid.UUID | None = None
|
|
|
|
|
|
class RepoUpdate(BaseModel):
|
|
name: str | None = None
|
|
local_path: str | None = None
|
|
remote_url: str | None = None
|
|
git_fingerprint: str | None = None
|
|
description: str | None = None
|
|
topic_id: uuid.UUID | None = None
|
|
last_state_synced_at: datetime | None = None
|
|
|
|
|
|
class RepoPathRegister(BaseModel):
|
|
"""Register a machine-local path for a repo on a specific host."""
|
|
host: str
|
|
path: str
|
|
|
|
|
|
class RepoRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: uuid.UUID
|
|
domain_id: uuid.UUID
|
|
domain_slug: str # derived from domain relationship
|
|
slug: str
|
|
name: str
|
|
local_path: str | None = None
|
|
host_paths: dict = {}
|
|
remote_url: str | None = None
|
|
git_fingerprint: str | None = None
|
|
description: str | None = None
|
|
status: str
|
|
topic_id: uuid.UUID | None = None
|
|
sbom_source: str | None = None
|
|
last_sbom_at: datetime | None = None
|
|
last_state_synced_at: datetime | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class DispatchTask(BaseModel):
|
|
id: uuid.UUID
|
|
title: str
|
|
priority: str
|
|
status: str
|
|
needs_human: bool
|
|
|
|
|
|
class DispatchWorkstream(BaseModel):
|
|
id: uuid.UUID
|
|
title: str
|
|
status: str
|
|
pending_tasks: list[DispatchTask]
|
|
|
|
|
|
class PendingInterfaceChange(BaseModel):
|
|
id: uuid.UUID
|
|
title: str
|
|
change_type: str
|
|
interface_type: str
|
|
origin_repo_slug: str
|
|
affected_paths: list[str]
|
|
planned_for: date | None
|
|
published_at: datetime | None
|
|
|
|
|
|
class ScopeIssueDetail(BaseModel):
|
|
id: str
|
|
label: str
|
|
status: str
|
|
detail: str
|
|
missing_sections: list[str] = Field(default_factory=list)
|
|
invalid_capability_blocks: list[dict[str, Any]] = Field(default_factory=list)
|
|
needs_refresh_sections: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class RepoDispatch(BaseModel):
|
|
repo_slug: str
|
|
active_goal: dict[str, Any] | None
|
|
active_workstreams: list[DispatchWorkstream]
|
|
human_interventions: list[DispatchTask]
|
|
pending_interface_changes: list[PendingInterfaceChange]
|
|
scope_needs_review: bool
|
|
scope_issue_details: list[ScopeIssueDetail]
|
|
last_state_synced_at: datetime | None
|
|
|
|
|
|
class RepoScopeHealth(BaseModel):
|
|
repo_slug: str
|
|
domain_slug: str | None = None
|
|
local_path: str | None = None
|
|
path_available: bool
|
|
scope_needs_review: bool
|
|
scope_issue_details: list[ScopeIssueDetail]
|