Date : 14/02/2026 Status : EN ATTENTE VALIDATION
Fichier : director/index.ts
Lignes : 117-126, 196-208
Le bug : Quand un objectif declenche un briefing :
handleMessage() cree l'objectif #1 en DB (status: pending) → ligne 199handleBriefingMessage() ligne 126 appelle handleMessage(enrichedPrompt, onEvent, { skipBriefing: true })completed)pending pour toujours → orphelinFix : Stocker le objectiveDbId original dans le briefing session. Quand handleBriefingMessage confirme, passer cet ID via opts.reuseObjectiveId pour que handleMessage le reutilise au lieu d'en creer un nouveau.
Fichiers modifies : director/index.ts (opts, createObjective conditionnel, stockage dans briefing)
Fichier : director/index.ts
Lignes : 452-461
Le bug : Dans handleMultiStep, le previous_result de la sous-tache 1 est passe a la sous-tache 2 comme texte brut tronque a 4000 chars. Problemes :
task.description (ligne 467) dit juste "Part 1/2 of: ..." sans expliciter que le previous_result contient les donnees a utiliserFix :
task.description avec des instructions explicites : "Utilise les donnees ci-dessous (previous_result) pour accomplir ta tache."Fichiers modifies : director/index.ts (handleMultiStep description enrichie)
Fichier : ulias-org-web/src/components/chat/EventCard.tsx
Lignes : 269, 332, 338
Le bug : Les events thinking, tool_call, tool_result sont rendus avec :
opacity-60 sur le conteneur → quasi-invisible (ligne 269)opacity-70 text-xs sur le texte → minuscule et transparent (ligne 332)opacity-60 sur les arguments d'outils (ligne 338)L'utilisateur ne voit strictement rien pendant que l'agent travaille, puis la reponse finale apparait d'un coup.
Fix :
opacity-60 du conteneur des events progressopacity-70 text-xs en opacity-90 text-sm (meme taille que le reste)opacity-60 des arguments d'outilsFichiers modifies : EventCard.tsx (3 lignes de CSS)
Fichier : ulias-org-web/src/components/chat/ChatMessages.tsx
Lignes : 234-238
Le bug : Pendant l'execution, le seul feedback est un texte statique "Reflexion en cours..." qui ne change jamais. L'utilisateur ne sait pas :
Fix : Rendre l'indicateur de streaming dynamique en trackant le dernier event recu. Afficher un message contextuel :
thinking → "Reflexion en cours... (iteration X/Y)"tool_call → "Appel outil: nomDeLoutil..."subtask_started → "Etape X/Y : description..."routing → "Routage vers agent..."Fichiers modifies : ChatMessages.tsx (signal lastEvent + affichage dynamique)
Fichiers : agents/interpreter.ts, director/index.ts
Le probleme fondamental : Le routing est hardcode. Exemples :
connector → sendEmail (Mailjet). Mais Gmail aussi peut envoyer des mails.Le systeme ne sait pas quelles instances le user a et ce qu'elles peuvent faire.
Le fix architectural :
buildRoutingPrompt() recoit les instances du user et genere un prompt qui liste les capacites reelles.Aujourd'hui dans interpreter.ts:
buildRoutingPrompt() ← statique, hardcode
Apres fix:
buildRoutingPrompt(userInstances) ← dynamique, base sur les instances
L'interpreter recoit le UserContext : route(message) → route(message, userCtx) pour acceder aux instances.
Le prompt genere une section "CAPABILITIES" dynamique :
AVAILABLE CAPABILITIES (based on user's connected instances):
- Email: Mailjet (transactionnel, no-reply@gouroubleu84.com), Gmail (personnel, OAuth)
- Storage: Nextcloud, User Storage (interne), Google Drive
- Media: Jellyfin (local, films/series)
- Git: GitLab-33800 (local CI/CD)
- AI: AI Orchestrator (Ollama, GPU local)
- DB: Supabase
- Notifications: ntfy (push)
- Logs: Loki/Grafana
When multiple instances can fulfill a request, choose the most appropriate:
- Email formal/transactionnel → Mailjet
- Email personnel → Gmail
- Video locale → Jellyfin
- If ambiguous, prefer the most specific instance for the task.
COMMUNICATION ROUTING, SPECIALIST ROUTING etc. sont generees a partir des tags des instances (mail, storage, media, etc.) et des outils disponibles des agents.Impact :
Fichiers modifies :
interpreter.ts : route() recoit userCtx, buildRoutingPrompt() dynamiquedirector/index.ts : passe userCtx a interpreter.route()| Ordre | Fix | Fichier(s) | Risque |
|---|---|---|---|
| 1 | P3 - Events invisibles | EventCard.tsx | Nul (CSS) |
| 2 | P4 - Streaming dynamique | ChatMessages.tsx | Faible |
| 3 | P1 - Objectif orphelin | director/index.ts | Moyen |
| 4 | P2 - Multi-step contexte | director/index.ts | Moyen |
| 5 | P5 - Routing instance-aware | interpreter.ts, director/index.ts | Moyen |
Projets impactes : ulias-org (backend), ulias-org-web (frontend) Commits : 1 par projet Deploy : CI/CD automatique apres push
Apres deploy, tester via WebSocket :
completed, pas d'orphelinGET /api/capabilities doit montrer les capabilities detectees depuis les instances du user| Projet | Fichier | Changements |
|---|---|---|
| ulias-org-web | components/chat/EventCard.tsx |
Retirer opacity-60/70 des events progress |
| ulias-org-web | components/chat/ChatMessages.tsx |
Streaming indicator dynamique |
| ulias-org | director/index.ts |
Fix objectif orphelin + contexte multi-step + passer userCtx a interpreter |
| ulias-org | agents/interpreter.ts |
Routing dynamique base sur instances user |