Metadata-Version: 2.4
Name: memoraeu
Version: 0.1.1
Summary: Couche mémoire persistante zero-knowledge pour LLMs — client Python
Project-URL: Homepage, https://memoraeu.com
Project-URL: Repository, https://github.com/pquattro/memoraeu
Project-URL: Documentation, https://docs.memoraeu.com
License: MIT
Requires-Python: >=3.11
Requires-Dist: cryptography>=42.0
Requires-Dist: httpx>=0.27
Description-Content-Type: text/markdown

# MemoraEU SDK — Python

Couche mémoire persistante **zero-knowledge** pour LLMs.  
Compatible avec n'importe quel projet Python — sync ou async.

## Installation

```bash
pip install memoraeu
```

## Démarrage rapide

### 1. Obtenir vos clés

1. Créez un compte sur [app.memoraeu.com](https://app.memoraeu.com)
2. **Paramètres → Clés de chiffrement** → copiez `MEMORAEU_SALT`
3. **Paramètres → Clés API** → créez une clé → copiez `MEMORAEU_API_KEY` (`meu-sk-…`)
4. `secret` = votre mot de passe de connexion MemoraEU

### 2. Client sync

```python
from memoraeu import MemoraEU

client = MemoraEU(
    api_url="https://api.memoraeu.com",
    api_key="meu-sk-...",        # clé API (authentification HTTP)
    secret="votre-mot-de-passe", # mot de passe MemoraEU (dérivation de clé locale)
    salt="votre-kdf-salt",       # salt unique à votre compte (depuis les Paramètres)
)

# Mémoriser
memory = client.remember(
    "Philippe préfère Python et FastAPI",
    category="prefs",
    tags=["python", "stack"]
)

# Rechercher
results = client.recall("préférences tech", limit=3)
for r in results:
    print(f"[{round(r.score*100)}%] {r.memory.content}")

# Supprimer
client.forget(memory.id)
```

### 3. Client async

```python
from memoraeu import AsyncMemoraEU

async with AsyncMemoraEU(
    api_url="https://api.memoraeu.com",
    api_key="meu-sk-...",
    secret="votre-mot-de-passe",
    salt="votre-kdf-salt",
) as client:
    memory = await client.remember("...")
    results = await client.recall("...")
```

## Comprendre les paramètres

| Paramètre | Rôle |
|---|---|
| `api_key` | Authentification HTTP — Bearer token envoyé à chaque requête (`meu-sk-…`) |
| `secret` | Votre mot de passe MemoraEU — utilisé comme entrée PBKDF2 pour dériver la clé de chiffrement localement |
| `salt` | Salt KDF unique à votre compte, généré par le serveur — combiné avec `secret` pour produire la clé AES |

> **Zero-knowledge** : la clé de chiffrement est dérivée sur votre machine avec `PBKDF2(secret, salt, 210 000 itérations)`. Le serveur reçoit uniquement le contenu chiffré — il ne peut pas le lire même s'il est compromis.
>
> ⚠️ Si vous perdez votre `secret` ou votre `salt`, vos mémoires chiffrées sont irrécupérables.

## Référence

| Méthode | Description |
|---------|-------------|
| `remember(content, category?, tags?, scope?)` | Mémorise une information |
| `recall(query, limit=3, category?, scope?)` | Recherche sémantique |
| `forget(memory_id)` | Supprime une mémoire |
| `list_memories(category?, limit=20, scope?)` | Liste les mémoires |
| `list_categories()` | Catégories triées par usage |

## Gestion des erreurs

```python
from memoraeu import APIError, CryptoError, ConnectionError

try:
    client.remember("...")
except APIError as e:
    print(e.status_code, str(e))  # ex: 401, 409
except CryptoError as e:
    print("Problème de chiffrement", e)
except ConnectionError as e:
    print("API inaccessible", e)
```

## Auto-hébergement

```python
client = MemoraEU(
    api_url="http://localhost:8000",
    api_key="meu-sk-...",
    secret="...",
    salt="...",
)
```

## Licence

MIT © MemoraEU
