Visión general

Memento Cloud Sync te permite hacer push y pull de observaciones entre tu base de datos local y la nube. Esto permite colaboración en equipo y memoria entre dispositivos.

┌──────────┐     push      ┌──────────┐
│  Local   │ ─────────────▶│  Nube    │
│  DB      │ ◀─────────────│  Server  │
└──────────┘     pull      └──────────┘
                                  │
                          ┌───────┴───────┐
                          │               │
                     ┌────▼────┐   ┌──────▼──┐
                     │ Miembro │   │ Miembro │
                     │ A       │   │ B       │
                     └─────────┘   └─────────┘

Comandos

Push

Subir observaciones locales a la nube.

memento sync push
memento sync push --project mi-app

Pull

Descargar observaciones de la nube a la base de datos local.

memento sync pull
memento sync pull --project mi-app

Sync basado en cursores

Cada operación de sync usa un cursor — un timestamp que rastrea la última sincronización exitosa.

Cursor local: 2025-01-15T10:30:00Z

Push: Enviar todas las observaciones donde updated_at > cursor
Pull: Recibir todas las observaciones donde updated_at > cursor del servidor

Resolución de conflictos

Cuando la misma observación es modificada localmente y remotamente:

Estrategia Comportamiento
Last Write Wins updated_at más reciente tiene precedencia
Merge Combinar campos no superpuestos
Manual Ambas versiones se preservan, el usuario decide

Default: Last Write Wins. Configurable por proyecto.

Deduplicación

Durante el pull, Memento deduplica observaciones usando:

  1. Match exacto: Mismo topic_key + hash de contenido → skip
  2. Match por similitud: Similitud Jaccard > 0.85 → auto-merge
  3. Sin match: Insertar como nueva observación

Endpoints de API

Push

POST /api/sync/push
{
  "cursor": "2025-01-15T10:30:00Z",
  "observations": [
    { "id": 42, "title": "...", "type": "decision", "content": "..." }
  ]
}

Pull

POST /api/sync/pull
{
  "cursor": "2025-01-15T09:45:00Z",
  "project_id": "mi-app"
}

Configuración

Configuración de sync en .memento/config.json:

{
  "sync": {
    "enabled": true,
    "server_url": "https://api.memento.dev",
    "conflict_strategy": "last_write_wins",
    "auto_pull": true,
    "pull_interval_seconds": 300
  }
}