You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[F2-02] Prompts: renderizado seguro, instrucciones en inglés y salida multilingüe #30
Fase: F2 · Tamaño: M · Depende de:#12 (F0-04), #25 (F2-01) Decisiones: D-04, D-15 y D-17 en #1
Objetivo
Conservar el valor de los ~620 líneas de prompts maestros, haciéndolos seguros, independientes del proveedor y capaces de generar la historia en cualquier idioma.
Contexto
Hoy se usa replaceAll encadenado: si el usuario escribe @@story_text en la ambientación, se sustituye (inyección de placeholders).
Las instrucciones están en español y la salida asume español (narrator_tone_es).
Los prompts nombran "Veo 2", "Gemini TTS", "Lyria" y una lista fija de voces de Gemini (Charon, Kore, Orus…).
Alcance
Mover libs/prompts.js a apps/server/src/core/prompts/ (un archivo por prompt, con número de versión).
render(template, vars): una sola pasada con /@@([a-z_]+)/g; lanza si falta una variable o se pasa una que la plantilla no usa.
Reescribir las instrucciones en inglés, conservando la intención y los criterios creativos de cada prompt; la salida se pide en @@language.
Placeholders nuevos: @@language, @@voice_palette (voces del proveedor TTS elegido), @@scene_count/@@target_duration_sec (para el storyboard del slideshow).
Quitar nombres de producto del cuerpo de los prompts. Quitar los prompts exclusivos de vídeo IA (pasan a F7).
Renombrar campos dependientes del idioma (narrator_tone_es → narrator_tone).
Límite de longitud para valores del usuario (ambientación ≤ 200 caracteres; textos editados ≤ 6 000).
Criterios de aceptación
Test: render('@@a', { a: '@@b' }) devuelve '@@b' (no se reinyecta).
Test: render lanza si falta una variable o si sobra una.
grep -riE 'veo|lyria|gemini|charon|kore|_es\b' apps/server/src/core/prompts no devuelve nada.
Prueba manual documentada en el PR: con el proveedor Google, la misma ambientación genera una historia coherente en es, en y pt (se pega la salida).
Activity