Skip to content

[F2-02] Prompts: renderizado seguro, instrucciones en inglés y salida multilingüe #30

Open

Description

@JCCG-code

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).

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions