alf
783bca1ba4
feat(voice): UI panneau voix + fix dérivation dossier omnivoice
...
- web : bouton "🎙 Voix" + vue par tablette : déclencheur auto (armer/désarmer +
delete_source + statut), voix admin à enrôler (nom/scope/propriétaire/statut/
consentement + bouton "Synchroniser"), voix déployées (statut/verrou/profils +
verrouiller/déverrouiller).
- fix : list_voices et enroll_deploy dérivaient le dossier omnivoice depuis
/voices.wav_path (VIDE post-migration → chemin relatif → 502/échec). Passent
désormais par _patient_omnivoice_dir (env → wav_path legacy → sonde MODELS_DIR).
- 46/46 ; vérifié live : /voices/{serial} et /admin répondent 200, UI servie.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 11:35:38 +02:00
alf
4b38efca4f
feat(fleet): fan-out parc — vue d'ensemble + OTA groupé, rapport par device
...
- fleet.py : fan_out() séquentiel isolant les échecs par tablette (§9), et
device_overview() (résumé santé partiel, sous-requêtes isolées).
- API : GET /api/fleet/overview (enrichi des labels), POST /api/fleet/update-check,
POST /api/fleet/update-install (audité).
- UI : bouton « Vue parc » → tableau d'ensemble (état, RAM, MAJ, RAG, profils,
sessions, crashes) + vérification OTA sur tout le parc.
- tests : +6 (isolation des échecs, overview partiel, endpoint). 25/25.
- validé live : overview + update-check sur tablette réelle (parse_call_bundle OK).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:52:11 +02:00
alf
7f999a06f0
feat(store): branchement API — déverrouillage opérateur, labels patients, audit
...
- API : /api/lock-status, /api/unlock, /api/lock, PUT /api/devices/{serial}/label,
/api/audit ; /api/devices enrichi du label patient quand le store est déverrouillé.
- db.py thread-safe (check_same_thread=False + RLock) pour le threadpool FastAPI ;
ajout lock(), device_labels().
- UI : barre de déverrouillage opérateur, affichage 👤 label, édition ✎ du nom.
- Sécurité : labels chiffrés (jamais en clair en base ni dans l'audit), opérations
journalisées, store re-verrouillable.
- tests : +5 intégration API↔store (dont non-fuite PII dans l'audit). 19/19.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:49:43 +02:00
alf
465ddd4e7a
feat: store chiffré, dashboard web flotte, accès réseau + durcissements
...
- store/ : archive clinique chiffrée (sqlite3 + PyNaCl SecretBox/Argon2id),
mapping serial→label patient, audit. Choix sqlite+PyNaCl plutôt que SQLCipher
(wheels Linux-only) pour rester facilement installable Mac/Win.
- web/ + montage StaticFiles : dashboard flotte en lecture (état, profils,
sessions, RAG, updates, crashes), HTML+JS vanilla sans build.
- __main__.py : `python -m kazeia_central`, host/port via env + auth HTTP Basic
optionnelle (KAZEIA_USER/PASS) pour exposition réseau (0.0.0.0).
- adb : devices() robuste au bruit daemon, réveil/retry du provider (§3.5).
- models : champs non-clés optionnels (résilience flotte hétérogène).
- spec : RAG à plat (miroir ConfigStore.toJson), ajout rag_dump_json, note PIN.
- tests : 14/14 (parsing adb + store chiffré).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:41:55 +02:00