Vue d'ensemble de l'architecture pi
badlogic/pi-mono est un monorepo TypeScript qui empile cinq paquets npm pour bâtir toute la chaîne « API LLM unifiée → Agent générique → assistant de codage → UI terminal/web ». Cette page donne une vue d'ensemble; les suivantes démontent chaque couche.
Les cinq paquets
| Paquet | nom npm | Rôle |
|---|---|---|
ai | @mariozechner/pi-ai | API LLM unifiée, 9 provider intégrés, découverte auto des modèles |
agent | @mariozechner/pi-agent-core | Agent générique, boucle while double + exécution d'outils |
coding-agent | @mariozechner/pi-coding-agent | CLI d'assistant de codage, outils read/bash/edit/write + gestion de session |
tui | @mariozechner/pi-tui | Bibliothèque UI terminal, rendu différentiel (differential rendering) + sortie synchronisée |
web-ui | @mariozechner/pi-web-ui | Composants de chat web, Lit Web Components |
Répertoire source : packages/
Couches
Chaque couche en une phrase
- pi-ai : unifie 9 LLM (Anthropic, OpenAI, Google, Bedrock...) en deux fonctions
stream/streamSimple, dispatchées parmodel.apivia un registre (registry). Voir Façade de streaming stream. - pi-agent-core : la classe
Agentporte l'état,runLoopgère à l'extérieur les interruptions/file d'attente et à l'intérieur les appels d'outils, streaming + boucle d'outils. Voir Boucle principale while double. - pi-coding-agent : enveloppe
AgentdansAgentSession, ajoute outils, system prompt, persistance de session, trois modes d'exécution. Voir Couche d'orchestration AgentSession. - pi-tui : rendu différentiel (differential rendering) + sortie synchronisée DECSET 2026, évite le clignotement terminal. Voir Classe TUI à rendu différentiel.
- pi-web-ui : les composants Lit possèdent leur propre instance
Agent, enveloppentstreamSimpleviacreateStreamFnavec un proxy CORS. Voir AgentInterface hôte de session.
Motivation du découpage en couches
Pourquoi ne pas faire un seul gros paquet ? Parce que les consommateurs diffèrent selon la couche : les composants web ne peuvent pas dépendre du fs de Node, l'UI terminal ne doit pas traîner l'IndexedDB du web, l'agent générique ne doit pas savoir ce qu'est « coder ». Une fois les couches séparées, le web peut prendre directement pi-agent-core + pi-ai et faire tourner son agent, en sautant les outils de l'assistant de codage; le CLI de codage peut permuter d'UI (tui ou mode rpc) sans toucher à l'orchestration. pi-ai est un paquet à part pour que n'importe quel projet puisse utiliser l'API LLM unifiée sans être lié au concept d'agent.
Lectures fréquentes à contresens
- « pi est un coding agent » : inexact.
pi-coding-agentest l'application au sommet; en dessous,pi-aietpi-agent-coresont des briques génériques réutilisables indépendamment. - « La couche UI ne fait que du rendu » : le web comme le terminal participent au streaming—le web remplace
Agent.streamFnpour injecter un proxy CORS, le terminal s'abonne aux événements pour décider quand repeindre.
Ordre de lecture recommandé
D'abord Façade de streaming stream pour comprendre comment on appelle le LLM, puis Boucle principale while double pour voir la boucle d'outils, ensuite Couche d'orchestration AgentSession pour voir comment l'assistant de codage est assemblé, et enfin au choix pi-tui ou pi-web-ui selon ton intérêt.