Files
le-mystere-professeur-zacus/hardware/firmware/data/story/runtime3/DEFAULT.json
T
L'électron rare 20aed903ba feat: AI integration — voice pipeline, hints engine, MCP server, analytics, security
- Voice pipeline: ESP32 WebSocket client → voice bridge → LLM → Piper TTS (Tower :8001)
- Hints engine: 3 puzzles (LA_440, LEFOU_PIANO, QR_FINALE), anti-cheat, 3 hint levels
- MCP hardware server: 6 tools (puzzle, audio, LED, camera, scenario, status), stdio transport
- Analytics: ESP32 module + 6 web endpoints + Dashboard UI with chat interface
- Security: auth middleware (Bearer NVS), rate limiting, input validation on 30 endpoints
- Frontend: code-split (1.1MB → 210KB initial), ErrorBoundary, API timeout, WS reconnect
- Tests: 24 Python + 38 TypeScript + 18 MCP = 80 project tests (+ 19 mascarade)
- Specs: AI_INTEGRATION_SPEC, MCP_HARDWARE_SERVER_SPEC, QA_TEST_MATRIX_SPEC
- Docs: SECURITY, DEPLOYMENT_RUNBOOK, voice pipeline guide, AI architecture map
- 6 AI agent definitions (.github/agents/ai_*.md)
- TUI orchestration script (tools/dev/zacus_tui.py)
- Docker compose TTS for Tower + KXKM-AI
- CHANGELOG, README, mkdocs.yml updated
- Cycle detection (DFS) in runtime3 validator
- Sprint plan: plans/SPRINT_AI_INTEGRATION.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 13:52:45 +01:00

162 lines
4.7 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schema_version": "zacus.runtime3.v1",
"scenario": {
"id": "ZACUS_V2",
"version": 3,
"title": "Le mystère du Professeur Zacus — Version Réelle (U-SON, piano LEFOU, QR WIN)",
"entry_step_id": "STEP_U_SON_PROTO",
"source_kind": "yaml"
},
"steps": [
{
"id": "STEP_U_SON_PROTO",
"scene_id": "SCENE_U_SON_PROTO",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "serial",
"event_name": "BTN_NEXT",
"target_step_id": "STEP_LA_DETECTOR",
"priority": 100,
"after_ms": 0
}
],
"narrative": "Boot radio. Transmission tronquée. Zacus annonce que U-SON dérive et quil faut une référence stable pour recaler le système.\n"
},
{
"id": "STEP_LA_DETECTOR",
"scene_id": "SCENE_LA_DETECTOR",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "unlock",
"event_name": "UNLOCK_LA_440",
"target_step_id": "STEP_RTC_ESP_ETAPE1",
"priority": 120,
"after_ms": 0
}
],
"narrative": "Atelier des Ondes. Objectif : produire un LA 440 stable. Le groupe sorganise : une personne fait le son, dautres surveillent le feedback.\n"
},
{
"id": "STEP_RTC_ESP_ETAPE1",
"scene_id": "SCENE_WIN_ETAPE1",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "espnow",
"event_name": "ACK_WIN1",
"target_step_id": "STEP_WIN_ETAPE1",
"priority": 130,
"after_ms": 0
}
],
"narrative": "Transmission distante (ESP-NOW). LACK confirme la validation Étape 1.\n"
},
{
"id": "STEP_WIN_ETAPE1",
"scene_id": "SCENE_WIN_ETAPE1",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "audio_done",
"event_name": "AUDIO_DONE",
"target_step_id": "STEP_WARNING",
"priority": 110,
"after_ms": 0
}
],
"narrative": "Victoire 1. Puis le campus bascule en WARNING : direction Zone 4.\n"
},
{
"id": "STEP_WARNING",
"scene_id": "SCENE_WARNING",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "serial",
"event_name": "BTN_NEXT",
"target_step_id": "STEP_LEFOU_DETECTOR",
"priority": 100,
"after_ms": 0
}
],
"narrative": "Alerte rouge. Message clair : Zone 4, linstallation de l’Électron Fou. Le système annonce quun code musical (5 lettres) sera requis.\n"
},
{
"id": "STEP_LEFOU_DETECTOR",
"scene_id": "SCENE_LEFOU_DETECTOR",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "unlock",
"event_name": "UNLOCK_PIANO_LEFOU",
"target_step_id": "STEP_RTC_ESP_ETAPE2",
"priority": 120,
"after_ms": 0
}
],
"narrative": "Zone 4. Piano-alphabet : les lettres sont sur les touches blanches. L’équipe doit jouer LEFOU (L-E-F-O-U) pour prouver quelle a compris la règle.\n"
},
{
"id": "STEP_RTC_ESP_ETAPE2",
"scene_id": "SCENE_WIN_ETAPE2",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "espnow",
"event_name": "ACK_WIN2",
"target_step_id": "STEP_QR_DETECTOR",
"priority": 130,
"after_ms": 0
}
],
"narrative": "Confirmation Étape 2. Le système donne la destination finale : les Archives, et révèle que la clé est derrière le portrait.\n"
},
{
"id": "STEP_QR_DETECTOR",
"scene_id": "SCENE_QR_DETECTOR",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [
{
"event_type": "unlock",
"event_name": "UNLOCK_QR",
"target_step_id": "STEP_FINAL_WIN",
"priority": 140,
"after_ms": 0
}
],
"narrative": "Aux Archives : chercher derrière le portrait, récupérer le QR, et le scanner. QR “WIN” valide laccès final.\n"
},
{
"id": "STEP_FINAL_WIN",
"scene_id": "SCENE_FINAL_WIN",
"audio_pack_id": "",
"actions": [],
"apps": [],
"transitions": [],
"narrative": "Victoire + révélation. Récompense : bascule vers le Media Hub, et boot persistant après QR validé.\n"
}
],
"metadata": {
"migration_mode": "firmware_import",
"generated_by": "tools/scenario/compile_runtime3.py"
}
}