Skip to main content

Sauvegarde & restauration

Exportez vos mémoires pour sauvegarde, migrez entre minds, restaurez après une perte de données.


Sauvegarde & restauration

Synapse fournit un export/import complet pour la sauvegarde de mémoire, la migration et la reprise après sinistre. Ce guide couvre les opérations essentielles.

Export

Export complet du mind

Exportez toutes les mémoires d'un mind en JSON :

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/memory/mind-export > backup.json

Format de réponse :

{
  "mind_id": "m_xyz789",
  "mind_name": "Work Mind",
  "exported_at": "2026-06-27T...",
  "memory_count": 142,
  "memories": [
    {
      "id": "mem_001",
      "category": "identity",
      "key": "user_name",
      "content": "Michael Schäfer",
      "tags": ["person", "identity"],
      "priority": "critical",
      "source": "user",
      "verified": true,
      "created_at": "2026-06-15T...",
      "updated_at": "2026-06-27T..."
    }
  ]
}

Export incrémental (diff)

Exportez uniquement les mémoires modifiées depuis un horodatage :

SINCE=$(date -d "2026-06-01" +%s)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/diff?since=$SINCE" > incremental.json

Réponse :

{
  "added": [...],
  "updated": [...],
  "deleted": [...]
}

Sauvegardes automatisées

Planifiez des sauvegardes quotidiennes via cron :

curl -X POST https://synapse.schaefer.zone/cron \
  -H "Authorization: Bearer YOUR_MIND_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "0 2 * * *",
    "endpoint": "https://synapse.schaefer.zone/memory/mind-export",
    "method": "GET",
    "headers": {"Authorization": "Bearer YOUR_MIND_KEY"}
  }'
L'endpoint cron reçoit la réponse mais ne la stocke pas. Pour de vraies sauvegardes, pointez le cron vers votre propre serveur de sauvegarde qui enregistre la réponse.

Mieux : script de sauvegarde externe

#!/bin/bash
# backup-synapse.sh
MIND_KEY="${SYNAPSE_MIND_KEY}"
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/synapse"

mkdir -p "$BACKUP_DIR"

curl -s -H "Authorization: Bearer $MIND_KEY" \
     https://synapse.schaefer.zone/memory/mind-export \
     > "$BACKUP_DIR/synapse-$DATE.json"

# Conserver les 30 derniers jours
find "$BACKUP_DIR" -name "synapse-*.json" -mtime +30 -delete

echo "Backup saved: $BACKUP_DIR/synapse-$DATE.json"

Ajoutez à crontab :

0 2 * * * /usr/local/bin/backup-synapse.sh

Restauration

Restaurer vers le même mind

# Analyser la sauvegarde et re-POSTer chaque mémoire
jq -c '.memories[]' backup.json | while read mem; do
  curl -X POST https://synapse.schaefer.zone/memory \
    -H "Authorization: Bearer YOUR_MIND_KEY" \
    -H "Content-Type: application/json" \
    -d "$(echo "$mem" | jq '{category, key, content, tags, priority}')"
done

Restaurer vers un nouveau mind

# 1. Créer un nouveau mind
NEW_KEY=$(curl -s -X POST https://synapse.schaefer.zone/minds \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{"name":"Restored Mind","description":"Restore from backup"}' \
  | jq -r .mind_key)

# 2. Importer les mémoires vers le nouveau mind
jq -c '.memories[]' backup.json | while read mem; do
  curl -X POST https://synapse.schaefer.zone/memory \
    -H "Authorization: Bearer $NEW_KEY" \
    -H "Content-Type: application/json" \
    -d "$(echo "$mem" | jq '{category, key, content, tags, priority}')"
done

Script de restauration Python

import json
import requests

URL = "https://synapse.schaefer.zone"
MIND_KEY = "mk_..."

def restore(backup_file):
    with open(backup_file) as f:
        data = json.load(f)
    
    for mem in data["memories"]:
        requests.post(
            f"{URL}/memory",
            headers={
                "Authorization": f"Bearer {MIND_KEY}",
                "Content-Type": "application/json"
            },
            json={
                "category": mem["category"],
                "key": mem["key"],
                "content": mem["content"],
                "tags": mem.get("tags", []),
                "priority": mem.get("priority", "normal")
            }
        )
    
    print(f"Restored {len(data['memories'])} memories")

restore("backup.json")

Migration entre minds

def migrate_memories(source_key, target_key):
    """Migrate all memories from source mind to target mind."""
    # Export depuis la source
    r = requests.get(
        f"{URL}/memory/mind-export",
        headers={"Authorization": f"Bearer {source_key}"}
    )
    data = r.json()
    
    # Import vers la cible
    for mem in data["memories"]:
        requests.post(
            f"{URL}/memory",
            headers={
                "Authorization": f"Bearer {target_key}",
                "Content-Type": "application/json"
            },
            json={
                "category": mem["category"],
                "key": mem["key"],
                "content": mem["content"],
                "tags": mem.get("tags", []),
                "priority": mem.get("priority", "normal")
            }
        )
    
    print(f"Migrated {len(data['memories'])} memories")

Sauvegarder d'autres données

N'oubliez pas de sauvegarder :

Type de données Endpoint
Mémoires GET /memory/mind-export
Tâches GET /mind/tasks
Scripts GET /scripts
Webhooks GET /webhooks
Tâches cron GET /cron
Variables GET /var
Historique chat GET /chat/history?limit=10000

Vérification

Après restauration, vérifiez :

# Compter les mémoires
curl -s -H "Authorization: Bearer $KEY" \
     https://synapse.schaefer.zone/memory/stats | jq .total

# Comparer avec la sauvegarde
jq .memory_count backup.json

Bonnes pratiques

Prochaines étapes