import uuid from datetime import datetime from typing import Any from pydantic import BaseModel, ConfigDict, Field class CatalogCreate(BaseModel): domain: str capability_type: str title: str description: str | None = None keywords: list[str] = Field(default_factory=list) repo_slug: str | None = None class CatalogPatch(BaseModel): repo_slug: str | None = None description: str | None = None keywords: list[str] | None = None status: str | None = None class CatalogRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID domain_slug: str repo_id: uuid.UUID | None = None repo_slug: str | None = None capability_type: str title: str description: str | None = None keywords: list[str] = Field(default_factory=list) status: str created_at: datetime updated_at: datetime class CapabilityRequestCreate(BaseModel): title: str description: str | None = None capability_type: str priority: str = "medium" requesting_domain: str requesting_agent: str request_context: dict[str, Any] | None = None catalog_entry_id: uuid.UUID | None = None class CapabilityRequestAccept(BaseModel): fulfilling_agent: str fulfillment_context: dict[str, Any] | None = None class CapabilityRequestStatusPatch(BaseModel): status: str note: str | None = None class CapabilityRequestPatch(BaseModel): catalog_entry_id: uuid.UUID | None = None priority: str | None = None request_context: dict[str, Any] | None = None fulfillment_context: dict[str, Any] | None = None class CapabilityRequestDispute(BaseModel): reason: str disputed_by: str suggested_domain: str | None = None class CapabilityRequestRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID title: str description: str | None = None capability_type: str priority: str status: str requesting_domain_slug: str requesting_agent: str request_context: dict[str, Any] | None = None fulfilling_domain_slug: str | None = None fulfilling_agent: str | None = None fulfillment_context: dict[str, Any] | None = None catalog_entry_id: uuid.UUID | None = None resolution_note: str | None = None routing_note: str | None = None dispute_reason: str | None = None disputed_by: str | None = None dispute_suggested_domain: str | None = None disputed_at: datetime | None = None accepted_at: datetime | None = None completed_at: datetime | None = None created_at: datetime updated_at: datetime