luinuxscl / prompts
Un paquete Laravel minimalista para gestionar y anidar prompts de texto
1.0.0
2025-07-06 19:58 UTC
Requires
- php: ^8.2
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
This package is auto-updated.
Last update: 2025-07-07 15:39:39 UTC
README
Un paquete Laravel minimalista para gestionar y anidar prompts de texto con soporte para variables.
Características
- Gestión de prompts: Sistema sencillo para almacenar y recuperar plantillas de texto
- Anidamiento de prompts: Capacidad para incluir prompts dentro de otros prompts
- Variables personalizadas: Soporte para variables en formato
::variable::
- Normalización de nombres: Los nombres de prompts se normalizan automáticamente para evitar duplicados
- Prompts de sistema: Soporte para prompts que no se pueden eliminar accidentalmente
- Relaciones avanzadas entre prompts: Un prompt puede tener múltiples padres y/o hijos, permitiendo estructuras complejas y reutilizables.
- Sin interfaz gráfica: Diseñado para uso programático a través de un API simple
- Ligero y eficiente: Implementación minimalista sin dependencias innecesarias
Instalación
composer require luinuxscl/prompts
Publica las migraciones:
php artisan vendor:publish --provider="Luinuxscl\Prompts\PromptsServiceProvider" --tag="migrations"
Ejecuta las migraciones:
php artisan migrate
Opcionalmente, publica el archivo de configuración:
php artisan vendor:publish --provider="Luinuxscl\Prompts\PromptsServiceProvider" --tag="config"
Uso básico
Relaciones avanzadas entre prompts (padres e hijos)
Puedes asociar cualquier prompt a varios padres y/o hijos para crear estructuras complejas y reutilizables. Esto se logra mediante relaciones muchos-a-muchos autoreferenciales.
Ejemplo básico de asociación:
use Luinuxscl\Prompts\Models\Prompt; // Crear prompts $promptA = Prompt::create(['name' => 'A', 'content' => 'Prompt A']); $promptB = Prompt::create(['name' => 'B', 'content' => 'Prompt B']); $promptC = Prompt::create(['name' => 'C', 'content' => 'Prompt C']); // Asociar B y C como hijos de A $promptA->children()->attach([$promptB->id, $promptC->id]); // Asociar B como hijo de C también (B tiene dos padres: A y C) $promptC->children()->attach($promptB->id); // Consultar padres de B $parentsOfB = $promptB->parents; // Collection de prompts // Consultar hijos de A $childrenOfA = $promptA->children; // Collection de prompts
- Puedes usar
attach
,detach
,sync
y demás métodos estándar de relaciones many-to-many de Eloquent. - Las relaciones se gestionan automáticamente mediante la tabla pivote
prompt_relations
. - Puedes anidar y reutilizar prompts en cualquier estructura que requieras.
Crear un prompt
use Luinuxscl\Prompts\Facades\Prompts; // Crear un prompt básico Prompts::create('saludo', 'Hola, bienvenido a nuestra plataforma.'); // Crear un prompt con descripción Prompts::create('despedida', 'Gracias por visitarnos.', 'Mensaje de despedida'); // Crear un prompt de sistema (no se puede eliminar) Prompts::createSystem('terminos_servicio', 'Estos son los términos de servicio...'); // También puedes marcar un prompt como sistema al crearlo Prompts::create('politica_privacidad', 'Nuestra política de privacidad...', null, true);
Anidar prompts
// Crear prompts que se pueden anidar Prompts::create('firma', 'Atentamente, El Equipo'); Prompts::create('email_completo', 'Hola cliente,\n\nGracias por tu mensaje.\n\n{{firma}}'); // Renderizar un prompt con anidamiento $mensaje = Prompts::render('email_completo'); // Resultado: "Hola cliente,\n\nGracias por tu mensaje.\n\nAtentamente, El Equipo"
Uso de variables
// Crear un prompt con variables Prompts::create('saludo_personal', 'Hola, ::nombre::! Bienvenido a ::plataforma::.'); // Renderizar el prompt con variables $mensaje = Prompts::render('saludo_personal', [ 'nombre' => 'Juan', 'plataforma' => 'Mi Aplicación' ]); // Resultado: "Hola, Juan! Bienvenido a Mi Aplicación."
Combinación de variables y anidamiento
// Crear prompts con anidamiento y variables Prompts::create('encabezado', 'AVISO IMPORTANTE DE ::empresa::'); Prompts::create('contenido', '{{encabezado}}\n\nEstimado/a ::cliente::,\n\nLe informamos que su cuenta ha sido activada correctamente.'); // Renderizar combinando ambas funcionalidades $mensaje = Prompts::render('contenido', [ 'empresa' => 'MiEmpresa S.A.', 'cliente' => 'Sr. Pérez' ]); /* Resultado: "AVISO IMPORTANTE DE MiEmpresa S.A. Estimado/a Sr. Pérez, Le informamos que su cuenta ha sido activada correctamente." */
Normalización de nombres
Los nombres de prompts se normalizan automáticamente: se convierten a minúsculas, se reemplazan espacios por guiones bajos y se recortan espacios al inicio y final. Esto hace que las siguientes llamadas sean equivalentes:
Prompts::render('Mi Prompt'); // Se busca como "mi_prompt" Prompts::render('mi_prompt'); // Coincide exactamente Prompts::render(' MI PROMPT '); // También se normaliza a "mi_prompt"
Licencia
MIT