Sistema de prompts dinámicos: prompts editables desde Settings + tabla Dexie + fallback a defaults
- prompts-db.ts: CRUD de prompts con 5 tipos (transcription, project_gap, session, qa, chat)
- db.ts: schema v9 con tabla prompts (&key)
- App.vue: initPrompts() al arrancar la app
- Servicios AI modificados: usan getPrompt(key) con fallback a default hardcodeado
- AiProjectChat.vue: prompt con {{variables}} reemplazadas por datos reales
- SettingsView: editor de prompts con textarea + guardar/restaurar
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { callAI } from '@/services/ai'
|
||||
import { getPrompt } from '@/services/prompts-db'
|
||||
import { getSessionsByProject, getSessionSummary, getProjectState } from '@/services/transcriptions-db'
|
||||
import { saveDraft, createDraftId } from '@/services/hu-drafts-db'
|
||||
import { generateAndSavePlan } from '@/services/qa-analyzer'
|
||||
@@ -25,40 +26,6 @@ interface AnalysisResult {
|
||||
summary: string
|
||||
}
|
||||
|
||||
const ANALYSIS_SYSTEM_PROMPT = `Eres un analista funcional experto. Tu tarea es analizar TODO el contexto de un proyecto y generar las Épicas e Historias de Usuario (HUs) que faltan.
|
||||
|
||||
Reglas:
|
||||
1. Analizá TODA la información disponible: sesiones, resúmenes, estado del proyecto, HUs existentes
|
||||
2. Identificá requisitos, funcionalidades, mejoras o bugs que NO estén cubiertos
|
||||
3. Agrupá HUs relacionadas en Épicas. Cada épica agrupa funcionalidades de un mismo tema
|
||||
4. Cada HU debe tener: título claro, descripción, criterios de aceptación verificables
|
||||
5. No generes duplicados. Compará con la lista existente
|
||||
6. Priorizá según urgencia implícita (Alta/Media/Baja)
|
||||
7. Si todo ya está cubierto, devolvé arreglos vacíos
|
||||
8. Respondé SOLO con JSON válido
|
||||
|
||||
Formato de respuesta:
|
||||
{
|
||||
"epics": [
|
||||
{
|
||||
"name": "Nombre de la Épica",
|
||||
"description": "Descripción de la épica",
|
||||
"linkedHuTitles": ["Título HU 1", "Título HU 2"],
|
||||
"estimatedStart": "YYYY-MM-DD",
|
||||
"estimatedEnd": "YYYY-MM-DD"
|
||||
}
|
||||
],
|
||||
"hus": [
|
||||
{
|
||||
"title": "Título de la HU",
|
||||
"description": "Descripción detallada",
|
||||
"acceptance_criteria": ["Criterio 1", "Criterio 2"],
|
||||
"priority": "Alta|Media|Baja"
|
||||
}
|
||||
],
|
||||
"summary": "Resumen del análisis"
|
||||
}`
|
||||
|
||||
export async function analyzeProject(
|
||||
projectId: number,
|
||||
projectName: string,
|
||||
@@ -96,8 +63,9 @@ export async function analyzeProject(
|
||||
|
||||
console.log(`[Alpha] Project analysis — ${projectId}, ${existingHUs.length} HUs existentes, ${sessions.length} sesiones`)
|
||||
|
||||
const systemPrompt = await getPrompt('project_gap')
|
||||
const content = await callAI(
|
||||
[{ role: 'system', content: ANALYSIS_SYSTEM_PROMPT }, { role: 'user', content: userContent }],
|
||||
[{ role: 'system', content: systemPrompt }, { role: 'user', content: userContent }],
|
||||
0.3, 8192, signal,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user