EN
Intégrations

Flux NDJSON v1

Lire les événements de session Palabre sur stdout et construire une interface robuste.

--renderer ndjson écrit un objet JSON valide par ligne sur stdout. Chaque événement contient v: 1 et un champ type.

TypeUsage
startMode, sujet, agents, contexte et options.
notice, warningInformations ordonnées dans le flux.
thinking-start, thinking-endÉtat d'attente d'un agent.
turn-start, messageTour et réponse Débat.
ask-response-start, ask-responseRéponse Ask.
summary-start, summary-messageSynthèse.
dry-runPrévisualisation résolue sans appel d'agent ni export.
errorÉchec structuré.
doneFin métier et chemin d'export, éventuellement nul.

Chat ajoute chat-agents, chat-user-message, chat-message, chat-consultation-start, chat-consultation et chat-agent-changed. Ses commandes sont envoyées sur stdin, une ligne à la fois. Pour une intégration, chaque commande Chat doit être un objet JSON v1 sur une seule ligne :

CommandeUsage
chat-sendEnvoyer content à l'agent actif.
chat-consultDemander un avis ponctuel à agent sans changer l'agent actif.
chat-useChoisir agent comme interlocuteur actif pour les prochains messages.
chat-agentsRedemander la liste des agents disponibles.
chat-endTerminer la conversation et produire l'export .chat.md.
{"v":1,"type":"chat-send","content":"Analyse cette approche"}
{"v":1,"type":"chat-consult","agent":"vibe"}
{"v":1,"type":"chat-use","agent":"vibe"}
{"v":1,"type":"chat-end"}

Les commandes texte historiques restent acceptées pour les usages humains. Une intégration doit utiliser les objets JSON afin que le contenu d'un message ne puisse pas être confondu avec une commande.

Fin d'une session Chat :

  • une ligne vide ou composée d'espaces est ignorée et ne ferme pas Chat ;
  • chat-end (ou /end) écrit l'export, puis émet done avec son chemin ;
  • /exit, /quit, /home et la fin de stdin terminent sans export : done porte outputPath: null ;
  • une erreur d'agent émet error, puis Palabre écrit l'export partiel et émet done avec son chemin, ou null si cet export échoue. Le code de sortie vaut 1. Les commandes suivantes ne sont pas traitées ;
  • une annulation (Ctrl+C) termine Chat de la même façon, y compris pendant l'attente d'un message : error avec kind: "cancelled", puis done, et code de sortie 130. Au repos, l'erreur ne porte ni action ni agent. Sans aucun message échangé, aucun export n'est écrit et done porte null.

Après start, Chat émet donc toujours exactement un done. L'événement error de Chat porte phase: "chat", action (send, consult ou end), agent et role quand ils sont connus, ainsi que kind, message et les champs optionnels retryAfter et details, comme pour Débat et Ask.

{"v":1,"type":"error","phase":"chat","action":"consult","agent":"vibe","role":"critic","kind":"non-zero-exit","message":"..."}
{"v":1,"type":"done","outputPath":".palabre/palabre-subject-2026-01-01T00-00-00-000Z.chat.md"}

--dry-run n'existe pas pour Chat : la commande est refusée avant tout événement, sans appel d'agent ni export.

Extrait Débat minimal, après start :

{"v":1,"type":"turn-start","turn":1,"totalTurns":4,"agent":"codex","role":"implementer"}
{"v":1,"type":"thinking-start","agent":"codex","role":"implementer"}
{"v":1,"type":"thinking-end"}
{"v":1,"type":"message","turn":1,"agent":"codex","role":"implementer","content":"..."}
{"v":1,"type":"done","outputPath":".palabre/palabre-subject-2026-01-01T00-00-00-000Z.debate.md"}

stdout appartient au NDJSON. stderr peut contenir les diagnostics et la progression Ollama. Conservez l'ordre, ignorez les types inconnus, attendez le code de sortie et rendez le contenu agent comme texte non fiable, jamais comme HTML exécutable.

Portée et erreurs

Relay et son option Mission utilisent --json, pas NDJSON. Les événements error des sessions portent phase (debate, ask, summary, chat), kind, message, puis selon le cas agent, role, turn ou action, retryAfter, details. Après une erreur de session commencée, PALABRE tente l'export partiel puis émet done ; une erreur de validation avant démarrage peut ne produire aucun flux.