Conversations persistantes Phase 1
Date: 13/02/2026
Status: TERMINE
Projets: ulias-org, ulias-org-web
Objectif
Ajouter la persistance des conversations dans ulias-org pour que les messages (user, assistant, events) soient sauvegardes en DB et restaures au rechargement de page. Sidebar laterale style ChatGPT/Claude.
Changements
Backend (ulias-org) - commit df49fce
-
Schema SQL (db/schema.sql):
- Table
agents.conversations: id, user_id, title, status, message_count, last_message_at
- Table
agents.chat_messages: id, conversation_id, user_id, role, content, event_type, event_data, objective_id
- 2 indexes sur user_id et conversation_id
-
DB layer (db/index.ts):
- Interfaces
DBConversation, DBChatMessage
- 7 methodes CRUD: createConversation, getConversations, getConversation, updateConversation, deleteConversation, saveChatMessage, getChatMessages
-
REST endpoints (index.ts):
- GET /api/conversations — liste sidebar
- POST /api/conversations — creer
- PATCH /api/conversations/:id — renommer/archiver
- DELETE /api/conversations/:id — supprimer
- GET /api/conversations/:id/messages — messages pagines
-
WS persistence (index.ts):
- Nouveau type WS
set_conversation pour definir la conversation active
- Auto-creation de conversation au 1er message (titre = 80 premiers chars)
- Persistance user messages, assistant responses, events milestones
- Set PERSIST_EVENT_TYPES: objective_created, routing, complete, objective_completed, objective_failed, briefing_question, briefing_summary, subtask_started, subtask_completed
Frontend (ulias-org-web) - commit f18ba42
- ConversationSidebar.tsx (nouveau): sidebar retractable avec liste, renommage, suppression, bouton "+"
- layout.tsx: layout 2 colonnes, chargement derniere conversation au startup, switch via events
- ChatMessages.tsx: ecoute ulias:load-history et ulias:clear-chat
- ws-manager.ts: methode setConversation()
- types.ts: types APIConversation, APIChatMessage, ConversationCreatedEvent, ConversationSetEvent
Tests
- REST CRUD: tous OK (GET, POST, PATCH, DELETE, GET messages)
- WS: conversation_created recu, messages user + event objective_created persistes en DB
- Pipelines CI/CD: les 2 en success