Memoria De Proyecto Y Asistente

Estado: contrato DB/API inicial

Fecha: 2026-05-28

Tarea: #1163

Objetivo

Dar al asistente una memoria operativa por proyecto antes de ampliar la UI. El asistente debe poder recuperar contexto, decisiones, conversaciones, ejecuciones y evidencias sin depender de un transcript local en el navegador.

Principios

  • La memoria pertenece a un workspace y a un proyecto.
  • El asistente no mezcla contexto entre proyectos.
  • Las conversaciones pueden apuntar a proyecto, tarea, decision, ejecucion o soporte.
  • Cada respuesta o ejecucion de IA puede registrarse como assistant_run con modelo, runtime, perfil y estado.
  • El resumen vivo del proyecto se guarda separado del historial bruto.
  • Las mutaciones requieren rol operator o superior.
  • El backend valida workspace, proyecto, tarea y conversacion antes de escribir.

Tablas

project_memories

Resumen vivo del proyecto.

Campos principales:

  • workspace_id
  • project_id
  • summary_md
  • decisions
  • open_questions
  • risks
  • links
  • metadata
  • updated_by

Uso esperado:

  • mostrar contexto corto en cockpit;
  • alimentar el asistente con memoria compacta;
  • conservar decisiones y riesgos importantes sin cargar todo el chat.

project_conversations

Hilos persistentes por proyecto.

Campos principales:

  • workspace_id
  • project_id
  • task_id
  • title
  • kind: project, task, decision, run, support
  • status: open, summarized, archived
  • summary_md
  • metadata

Uso esperado:

  • guardar conversaciones por proyecto;
  • enlazar conversaciones a tareas;
  • resumir y archivar hilos antiguos;
  • recuperar "que decidimos" desde el cockpit.

project_conversation_messages

Mensajes de cada hilo.

Campos principales:

  • workspace_id
  • conversation_id
  • role: system, user, assistant, tool
  • body
  • model
  • runtime
  • metadata

Uso esperado:

  • persistir turnos importantes;
  • saber que modelo/runtime participo;
  • separar mensajes de usuario, asistente y herramientas.

assistant_runs

Ledger de ejecuciones o razonamientos del asistente.

Campos principales:

  • workspace_id
  • project_id
  • task_id
  • conversation_id
  • prompt_summary
  • response_summary
  • model
  • runtime
  • profile_slug
  • status: planned, running, succeeded, failed, blocked
  • input_tokens
  • output_tokens
  • cost_estimate
  • duration_ms
  • metadata

Uso esperado:

  • auditar que modelo se uso;
  • medir coste/tiempo;
  • explicar resultados del asistente;
  • conectar memoria, tarea y runtime local/remoto.

API

Memoria

  • GET /api/projects/:id/memory
  • PUT /api/projects/:id/memory

PUT reemplaza el resumen vivo y listas estructuradas.

Conversaciones

  • GET /api/projects/:id/conversations
  • POST /api/projects/:id/conversations
  • GET /api/project-conversations/:id
  • PATCH /api/project-conversations/:id
  • GET /api/project-conversations/:id/messages
  • POST /api/project-conversations/:id/messages

Filtros iniciales:

  • status
  • task_id
  • limit

Assistant runs

  • GET /api/projects/:id/assistant-runs
  • POST /api/projects/:id/assistant-runs

Filtros iniciales:

  • task_id
  • limit

Flujo objetivo

  1. Usuario abre proyecto.
  2. UI carga project_memory.
  3. UI lista conversaciones abiertas o recientes.
  4. Usuario habla con asistente dentro del contexto del proyecto.
  5. Cada turno importante se guarda como mensaje.
  6. Cada llamada a modelo se registra como assistant_run.
  7. Al cerrar una decision o tarea, el asistente propone actualizar project_memory.
  8. La siguiente sesion arranca con resumen vivo, no con chat infinito.

Criterios Para #1164

La siguiente tarea puede construir UI sobre este contrato:

  • mostrar memoria en cockpit;
  • abrir historial de conversaciones por proyecto;
  • crear hilo automatico cuando se usa el asistente en un proyecto;
  • mostrar modelo/runtime usado;
  • resumir y archivar hilos.

Limites Actuales

  • No hay generacion automatica de resumen todavia.
  • No hay UI de historial todavia.
  • No hay endpoint de razonamiento conectado a modelo en esta fase.
  • No se decide todavia retention ni pruning de mensajes largos.
  • No se automatiza el merge de conversaciones antiguas en memoria viva.