Metadata-Version: 2.4
Name: cof-cli
Version: 1.0.0
Summary: COF — Character Open File: validate, pack, unpack and convert .cof character containers
Author: Yann Souetre
License-Expression: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: jsonschema>=4.20
Provides-Extra: tokens
Requires-Dist: tiktoken>=0.7; extra == "tokens"
Provides-Extra: png
Requires-Dist: Pillow>=10; extra == "png"
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: Pillow>=10; extra == "dev"

# cof-cli

Outil de référence pour COF (Character Open File) : validation, empaquetage, conversions.

```bash
pip install -e ".[dev]"          # depuis le dossier cli/
cof validate spec/examples/01-clara-text-only      # dossier ou fichier .cof
cof pack spec/examples/01-clara-text-only -o clara.cof   # recalcule hashes + complétude
cof info clara.cof
cof unpack clara.cof -o clara/
cof tokens clara.cof
cof import carte.png -o perso/ --age 30 --lang fr --keep-png   # carte PNG CCv2/V3 → dossier COF
cof export clara.cof --format png -o clara.png                     # → PNG avec chunks chara + ccv3
cof export clara.cof --format soul -o ./agent/                   # → SOUL.md + IDENTITY.md (OpenClaw)
cof export clara.cof --format card -o clara.card.json
cof export clara.cof --format soul --preset young -o ./agent/        # export depuis un autre preset
cof migrate dossier-v0.2/                                      # v0.2 → v0.3 (elements / presets)
```

Ce que `validate` vérifie (v0.3) : résolution des presets (slots, `extends`, `derives_from`), identifiants d'assets, dérivés hors des images de base, poids avec modèle de base, règles d'âge sur l'**âge le plus bas** (manifeste et `age_override`), styles mélangés dans un preset ; schéma du manifeste, sentinelle `mimetype`, chemins sûrs (pas de `..`, pas de symlink), absence de chiffrement, taux de compression, hashes SHA-256 et tailles des assets, cohérence âge ↔ corps, bloc intime interdit si mineur, consentement si personne réelle, transcriptions des échantillons de voix, contenu exécutable non déclaré, renvois `expresses` vers `psyche.json`, doublons textuels, budgets de tokens ; puis recalcule le KPI de complétude et les cibles prêtes.

Tests : `pytest` (dossier `cli/`). Tokens : installer `tiktoken` pour un comptage exact (sinon heuristique par caractères).
