Skip to content

Vue d'ensemble de l'architecture pi

源码版本v0.73.1

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

Paquetnom npmRôle
ai@mariozechner/pi-aiAPI LLM unifiée, 9 provider intégrés, découverte auto des modèles
agent@mariozechner/pi-agent-coreAgent générique, boucle while double + exécution d'outils
coding-agent@mariozechner/pi-coding-agentCLI d'assistant de codage, outils read/bash/edit/write + gestion de session
tui@mariozechner/pi-tuiBibliothèque UI terminal, rendu différentiel (differential rendering) + sortie synchronisée
web-ui@mariozechner/pi-web-uiComposants 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 par model.api via un registre (registry). Voir Façade de streaming stream.
  • pi-agent-core : la classe Agent porte l'état, runLoop gè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 Agent dans AgentSession, 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, enveloppent streamSimple via createStreamFn avec 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-agent est l'application au sommet; en dessous, pi-ai et pi-agent-core sont 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.streamFn pour 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.