6 gaps identifiés entre l'état actuel et l'archi Ports & Adapters cible. Stratégie de correction en 5 phases. Le StreamProcessor est la pièce centrale manquante.
complete() → LlmResult bufferisé ✅stream() → tool_use jamais exposéssend_streaming(AsyncIterator[str]) — text seulementcomplete() → LlmResult · stream() → AsyncIter[LlmEvent]AsyncIterator[RenderEvent] · throttle · route par platformcomplete() qui bufferise tout. Les tool_use events ne sont jamais exposés à l'appelant.TextLlmEvent, ToolUseLlmEvent, ResultLlmEvent. Requis avant G1 et G3.TextRenderEvent ni ToolSummaryRenderEvent. Requis avant d'adapter les outbound adapters.ChannelAdapter.send_streaming(AsyncIterator[str]) doit devenir AsyncIterator[RenderEvent]. Telegram et Discord à mettre à jour.names_threshold=3, group_threshold=3, throttle_ms et les flags show.* n'ont nulle part où vivre.P1+P2 parallèles (aucune dépendance) · P3 bloqué par P1+P2 · P4 bloqué par P3 · P5 indépendante (peut partir en parallèle)
files[path]. Si len(edits) > names_threshold → bascule en mode count. Si len(files) >= group_threshold → groupage. Émet ToolSummaryRenderEvent
show.bash=true : ajoute command tronquée à bash_max_len. Émet ToolSummaryRenderEvent
silent_counts++ (si show.read=false) · comptés en footer uniquement