Gestion de Estado y Memoria
Persistencia respaldada por SQLite con memoria de trabajo en memoria, busqueda semantica via embeddings y recuperacion tri-hibrida.
ActualizaciΓ³n v0.9.x
La persistencia principal de conversaciones ahora usa la tabla
events. Los datos antiguos de messages se migran a events durante la actualizaciΓ³n.Esquema de Base de Datos
Tabla messages
| Key | Type | Default | Description |
|---|---|---|---|
id | TEXT PK | β | Clave primaria UUID |
session_id | TEXT | β | Identificador de sesion (indexado) |
role | TEXT | β | user, assistant o tool |
content | TEXT | null | Contenido de texto del mensaje |
tool_call_id | TEXT | null | ID para mensajes de resultado de herramienta |
tool_name | TEXT | null | Nombre de herramienta para mensajes de herramienta |
tool_calls_json | TEXT | null | Array JSON de llamadas a herramientas |
created_at | TEXT | β | Marca de tiempo RFC3339 |
importance | REAL | 0.5 | Puntuacion de importancia (0.0β1.0) |
embedding | BLOB | null | Embedding codificado en JSON Vec<f32> |
embedding_error | TEXT | null | Mensaje de error si el embedding fallo |
consolidated_at | TEXT | null | Marca de tiempo de consolidacion de memoria |
Tabla facts
| Key | Type | Default | Description |
|---|---|---|---|
id | INTEGER PK | auto | Clave primaria auto-incremental |
category | TEXT | β | Categoria de agrupacion |
key | TEXT | β | Clave del hecho (unica por categoria) |
value | TEXT | β | Contenido del hecho |
source | TEXT | "" | Quien lo almaceno: "agent" o "user" |
created_at | TEXT | β | Marca de tiempo RFC3339 |
updated_at | TEXT | β | Marca de tiempo RFC3339 |
Tabla macros
| Key | Type | Default | Description |
|---|---|---|---|
id | INTEGER PK | auto | Clave primaria auto-incremental |
trigger_tool | TEXT | — | Herramienta que activa la macro |
trigger_args_pattern | TEXT | null | Patron de argumentos a coincidir |
next_tool | TEXT | — | Herramienta a encadenar a continuacion |
next_args | TEXT | — | Argumentos para la herramienta encadenada |
confidence | REAL | 0.0 | Puntuacion de confianza de la macro |
used_count | INTEGER | 0 | Numero de veces que se ha usado la macro |
created_at | TEXT | — | Marca de tiempo RFC3339 |
updated_at | TEXT | — | Marca de tiempo RFC3339 |
Tabla scheduled_tasks
| Key | Type | Default | Description |
|---|---|---|---|
id | TEXT PK | β | Clave primaria UUID |
name | TEXT | β | Etiqueta legible de la tarea |
cron_expr | TEXT | β | Expresion cron de 5 campos calculada |
original_schedule | TEXT | β | Entrada del usuario (lenguaje natural o cron) |
prompt | TEXT | β | Prompt del agente a ejecutar segun programacion |
source | TEXT | β | "tool" (creada via herramienta) o "config" (desde config.toml) |
is_oneshot | INTEGER | 0 | Ejecutar una vez y luego auto-eliminar |
is_paused | INTEGER | 0 | Las tareas pausadas no se ejecutan |
is_trusted | INTEGER | 0 | Las tareas trusted omiten la aprobacion de terminal |
next_run_at | TEXT | β | Marca de tiempo RFC3339 de la proxima ejecucion programada |
last_run_at | TEXT | null | Marca de tiempo RFC3339 de la ultima ejecucion |
created_at | TEXT | β | Marca de tiempo RFC3339 |
updated_at | TEXT | β | Marca de tiempo RFC3339 |
Tabla terminal_allowed_prefixes
| Key | Type | Default | Description |
|---|---|---|---|
prefix | TEXT PK | β | Prefijo de comando persistido desde aprobaciones "Permitir Siempre" |
Memoria de Trabajo
Un HashMap<String, VecDeque<Message>> en memoria por sesion, limitado a working_memory_cap (por defecto 50). Evita consultas a la base de datos para el historial de conversacion reciente.
Recuperacion Tri-Hibrida
El metodo get_context combina tres estrategias de recuperacion:
| Estrategia | Fuente | Limite | Proposito |
|---|---|---|---|
| Recencia | Ultimos N mensajes | 10 | Continuidad conversacional |
| Relevancia | importance ≥ 0.8 | 5 | Memorias criticas marcadas |
| Similitud | Similitud vectorial > 0.65 | 5 | Busqueda semantica via embeddings |
Los resultados se deduplican por ID de mensaje antes de incluirse en el contexto.
Servicio de Embeddings
- Modelo: AllMiniLML6V2 (via fastembed)
- Se ejecuta en segundo plano β genera embeddings de nuevos mensajes despues de agregarlos
- Habilita la rama de similitud de la recuperacion tri-hibrida
Consolidacion de Memoria
Una tarea en segundo plano se ejecuta cada consolidation_interval_hours (por defecto 6). Comprime conversaciones antiguas en resumenes usando el modelo rapido, reduciendo almacenamiento y uso de ventana de contexto.
Puntuacion de Importancia
| Rol | Puntuacion por Defecto |
|---|---|
| Mensaje de usuario | 0.5 |
| Respuesta del asistente | 0.5 |
| Salida de herramienta | 0.3 |
| Mensaje del sistema | 0.1 |
Pool de Conexiones
- Pool SQLite: maximo 5 conexiones
- Modo de journal: WAL (Write-Ahead Logging) para lecturas concurrentes
- Crea automaticamente la base de datos y las tablas si no existen