# Tipos: Context (modelo unificado de contexto)

Fuente conceptual: OpenViking `openviking/core/context.py` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Tipos a implementar

### 1. ResourceContentType (enum/sum)

- **Dominio:** core
- **Lang:** Python
- **Algebraic:** sum
- **Definicion:**
  ```python
  class ResourceContentType(str, Enum):
      TEXT = "text"
      IMAGE = "image"
      VIDEO = "video"
      AUDIO = "audio"
      BINARY = "binary"
  ```

### 2. ContextLevel (enum/sum)

- **Dominio:** core
- **Lang:** Python
- **Algebraic:** sum
- **Definicion:**
  ```python
  class ContextLevel(int, Enum):
      ABSTRACT = 0    # L0: resumen corto (~256 chars)
      OVERVIEW = 1    # L1: overview (~4000 chars)
      DETAIL = 2      # L2: contenido completo
  ```
- **Descripcion:** Nivel de detalle de un contexto para indexacion vectorial y retrieval jerarquico. El retriever primero busca en L0 (rapido, barato), luego refina con L1/L2.

### 3. Context (product)

- **Dominio:** core
- **Lang:** Python
- **Algebraic:** product
- **Definicion:**
  ```python
  @dataclass
  class Context:
      id: str                                     # UUID
      uri: str                                    # identificador unico del recurso
      parent_uri: str | None = None               # URI del padre (directorio)
      is_leaf: bool = False                       # True si es nodo hoja (archivo)
      abstract: str = ""                          # L0 resumen
      context_type: str = "resource"              # "memory" | "resource" | "skill"
      category: str = ""                          # subcategoria
      level: int | None = None                    # ContextLevel
      created_at: datetime | None = None
      updated_at: datetime | None = None
      active_count: int = 0                       # veces accedido (para hotness)
      related_uri: list[str] = field(default_factory=list)  # URIs relacionados
      meta: dict[str, Any] = field(default_factory=dict)
  ```
- **Metodos:**
  - `to_dict() -> dict` — serializacion
  - `from_dict(data: dict) -> Context` (classmethod) — deserializacion
- **Descripcion:** Modelo unificado de contexto que representa cualquier recurso (documento, memoria, skill) indexable y buscable. Combina metadata, jerarquia (parent/children via URI), conteo de accesos (para hotness scoring), y relaciones.
- **Uso:** Almacenado en vector DB con su embedding. El retriever busca por similitud vectorial y luego usa `active_count` + `updated_at` para hotness scoring.
- **Notas:**
  - `uri` sigue un esquema tipo filesystem: `viking://resources/docs/readme.md`
  - `parent_uri` permite reconstruir la jerarquia de directorios
  - `active_count` se incrementa cada vez que el contexto se retrieva — usado por `hotness_score()`
  - `related_uri` permite grafos de relaciones entre contextos
