from pydantic import BaseModel from datetime import datetime from typing import Optional, List class SkillBase(BaseModel): id: str name: str description: Optional[str] = None category: Optional[str] = None content: str tags: Optional[List[str]] = None class Skill(SkillBase): created_at: datetime updated_at: datetime usage_count: int class Config: from_attributes = True class SnippetBase(BaseModel): id: str name: str language: Optional[str] = None content: str category: Optional[str] = None tags: Optional[List[str]] = None class Snippet(SnippetBase): created_at: datetime class Config: from_attributes = True class ConventionBase(BaseModel): id: str project_path: Optional[str] = None name: str content: str auto_inject: bool = False class Convention(ConventionBase): created_at: datetime class Config: from_attributes = True class CacheBase(BaseModel): hash: str response: str model: Optional[str] = None tokens_in: Optional[int] = None tokens_out: Optional[int] = None expires_at: Optional[datetime] = None class CacheStore(CacheBase): pass class Cache(CacheBase): created_at: datetime class Config: from_attributes = True class MemoryBase(BaseModel): id: str project: str key: str content: str class Memory(MemoryBase): created_at: datetime updated_at: datetime class Config: from_attributes = True class ContextBundle(BaseModel): skills: List[Skill] snippets: List[Snippet] conventions: List[Convention] memories: List[Memory] class CacheLookup(BaseModel): prompt: str model: Optional[str] = None