All checks were successful
mode séance, battlemaps multiples et export Foundry ciblé
- Quêtes (Niveau 1) : entité Quest orthogonale à l'arbre, rattachée à un arc HUB
ou libre (migrations V9-V12, V18, V20 ; réconciliation des jumeaux V10).
Fusion quête/conteneur dans la sidebar, progression par partie (statuts
disponible/en cours/terminée), et quêtes libres avec espace de scènes créé
automatiquement (arc technique « Quêtes libres », V21 : levée de la
contrainte arcs.type héritée du baseline).
- Guidage (Pilier B) : bilan de préparation 100 % dérivé (règles arc/chapitre/
scène/quête), panneau « Prochaines étapes » avec boutons « Corriger », et
pastilles détaillées (tooltip des manques) dans l'arbre.
- Assistant IA (Pilier A) : étoffage champ par champ (scène, chapitre, arc) et
brouillons de scènes en propose→applique (brain : narrative-fields,
scene-drafts).
- Horloges & menaces (V15-V17) : clocks à segments avec déclencheurs, fronts.
- Mode séance : préparation de séance (readiness + quêtes dispo), scène
épinglée (V19), récap « précédemment » (brain : session-recap), onglet
« Partie » du panneau de référence, graphe amélioré (pan/zoom, éditeur de
liens).
- Perf : endpoint agrégé GET /api/campaigns/{id}/tree — la sidebar charge en
1 requête au lieu de ~15.
- Battlemaps multiples par scène (variantes jour/nuit, étages…) : liste JSON
étiquetée (V22, reprise automatique de la carte existante), rendu PDF avec
légendes, export/import rétro-compatible.
- Export Foundry ciblé : modale de périmètre (cartes+ennemis / journaux /
tables), bundle filtré côté serveur (zip allégé), module Foundry à jour
(respect du périmètre + une Scene Foundry par variante de carte,
rétro-compatible anciens bundles).
26 lines
1.3 KiB
Python
26 lines
1.3 KiB
Python
"""Prompt du récap « précédemment dans… » (mode séance).
|
|
|
|
Le Core envoie le journal chronologique de la séance PRÉCÉDENTE ; le modèle rédige un
|
|
récapitulatif court, à lire aux joueurs à l'ouverture de la séance suivante. Texte libre
|
|
(pas de JSON) : c'est de la narration.
|
|
"""
|
|
from app.core.language import language_name
|
|
|
|
|
|
def session_recap_prompt(transcript: str, context: str, language: str) -> str:
|
|
context_block = f"\n{context.strip()}\n" if context and context.strip() else ""
|
|
return (
|
|
"Tu es le Maître du Jeu. Voici le journal de la SÉANCE PRÉCÉDENTE de ta table "
|
|
"(entrées chronologiques : notes, évènements, jets de dés, actions des joueurs).\n"
|
|
f"{context_block}\n"
|
|
"Journal :\n"
|
|
f"{transcript.strip()}\n\n"
|
|
"Rédige un récapitulatif « Précédemment… » à LIRE AUX JOUEURS pour ouvrir la "
|
|
"nouvelle séance :\n"
|
|
"- 4 à 8 phrases, ton narratif et vivant, au passé.\n"
|
|
"- Uniquement ce qui s'est réellement passé dans le journal — n'invente RIEN, "
|
|
"ne révèle aucun secret du MJ.\n"
|
|
"- Termine sur la situation où les joueurs se sont arrêtés (le « cliffhanger »).\n"
|
|
f"- Rédige en {language_name(language)}. Pas de préambule ni de méta : juste le récit."
|
|
)
|