---
name: memory_type_schema
lang: py
domain: core
version: "1.0.0"
algebraic: product
definition: |
  @dataclass
  class MemoryTypeSchema:
      memory_type: str
      description: str = ""
      fields: list[MemoryField] = field(default_factory=list)
      filename_template: str = ""
      directory: str = ""
      enabled: bool = True
      operation_mode: str = "upsert"
description: "Schema de un tipo de memoria de agente. Define la estructura de los datos, la estrategia de merge por campo y como se organizan en el filesystem. Soporta modos upsert, add_only y update_only."
tags: [memory, schema, agent, dataclass, filesystem]
uses_types: [memory_field_py_core]
file_path: "python/types/core/memory_type_schema.py"
---

## Notas

`operation_mode` controla la semantica de escritura:
- `upsert`: crear si no existe, actualizar si existe (comportamiento default).
- `add_only`: solo crea nuevas entradas; si ya existe una con la misma URI, no la toca.
- `update_only`: solo actualiza entradas existentes; si no existe, descarta la operacion.

`filename_template` puede contener placeholders como `{name}` o `{date}` para generar nombres de archivo dinamicamente.

Categorias de memoria predefinidas recomendadas:
- `profile` — informacion del usuario (nombre, rol, expertise)
- `preferences` — preferencias (idioma, estilo de respuesta)
- `entities` — entidades conocidas (personas, proyectos, tools)
- `events` — eventos ocurridos (reuniones, deployments, incidentes)
- `cases` — casos/precedentes (bugs resueltos, decisiones)
- `patterns` — patrones observados (workflows, preferencias recurrentes)
- `tools` — herramientas conocidas (comandos, APIs, shortcuts)
- `skills` — habilidades/capacidades del agente o del usuario

## Ejemplo

```python
MemoryTypeSchema(
    memory_type="profile",
    description="Informacion persistente del usuario",
    fields=[
        MemoryField("username", FieldType.STRING, "Nombre de usuario", MergeOp.IMMUTABLE),
        MemoryField("role", FieldType.STRING, "Rol en el equipo", MergeOp.PATCH),
        MemoryField("interaction_count", FieldType.INTEGER, "Total de interacciones", MergeOp.SUM),
    ],
    filename_template="{username}.json",
    directory="memory/profile",
    operation_mode="upsert",
)
```
