Documentation / Référence

Architecture

Comment Yuli est construit : un moteur natif en Rust, une interface Electron en TypeScript et React, et le modèle de langage comme couche qui raisonne.

Yuli sépare clairement qui fait le travail lourd, qui affiche et qui raisonne.

Couche Technologie Responsabilité
Moteur natif Rust Indexation et analyse sémantique, Git, processus, débogage, base de données, sécurité, qualité et orchestration de l’agent.
Interface Electron, TypeScript et React Affiche uniquement : éditeur, panneaux, diagrammes et aperçus.
Modèle de langage Le fournisseur ou l’agent de votre choix Raisonne : planifie, décide et pilote les services de l’IDE au moyen d’outils contrôlés.

L’application fonctionne sous Windows, macOS et Linux, en 64 bits de bout en bout.

Comment ils communiquent

Interface (Electron + React)
        │  IPC via stdin/stdout
        ▼
Moteur (agent-engine, Rust) ──▶ Git, build, débogueur, base de données, index
        │
        ├──▶ Fournisseur d’IA (Mode Platform)
        │
        └──◀ yuli-mcp ◀── stdio ── Claude Code, Kiro, Codex, Antigravity
              (TCP 127.0.0.1 + token)
  • L’interface lance le moteur comme un processus et communique avec lui via stdin/stdout.
  • L’interface ne touche jamais d’elle-même au disque, à Git ni au réseau de l’agent : tout passe par les contrôleurs du moteur.
  • Les agents externes se connectent via yuli-mcp, qui dialogue avec le moteur par un socket de loopback protégé par jeton. Voir Yuli comme serveur MCP.

Les composants du moteur

Composant Rôle
agent-engine Le binaire principal : services, contrôleurs et orchestration de l’agent.
yuli-mcp Le serveur MCP pour les agents externes, les hooks et le gate.
code-intelligence Le moteur d’intelligence du code : cœur du graphe, Java, autocomplétion, planificateur et frameworks (Struts, JBoss).
java-debug Le client JDWP du débogueur Java.

Le moteur est organisé en couches : domain (types et règles pures), service (logique) et controller (IPC). L’interface ne parle qu’aux contrôleurs.

Intelligence du code

Élément Technologie
Analyse syntaxique Tree-sitter (Java et TypeScript)
Graphe de symboles petgraph, avec des nœuds (classes, méthodes, champs, beans Spring) et des arêtes (appelle, étend, implémente, injecte)
Persistance SQLite dans .ai/codebase/, par projet
Invalidation Un graphe de dépendances entre fichiers : modifier un fichier ne réanalyse que ce qui en dépend
Résolution des types Le compilateur Java
Planification Des files de priorité pour que ce que vous regardez soit résolu en premier

Pour répondre aux questions sur le projet, l’agent reçoit un sous-graphe délimité plutôt que des fichiers entiers. Ainsi, ni la fenêtre de contexte ni le coût en tokens ne s’épuisent.

Où se trouve chaque chose

Emplacement Contenu
.ai/ dans votre projet Contrat, missions, mémoire, règles et index. Voir Le dossier .ai.
%APPDATA%\.yulicode (Windows) Paramètres, prompts, skills et hooks personnels, historique du chat.
%LOCALAPPDATA%\.yulicode (Windows) Runtimes, index, caches et journaux. Peut être supprimé.
Trousseau du système Clés API, mots de passe et jetons.

Sous macOS et Linux, la même répartition s’applique dans les dossiers standard de chaque système.

Règles déterministes

Les limites de sécurité et de qualité résident dans le moteur, pas dans le prompt :

  • Le sandbox du projet et les chemins protégés.
  • L’évaluation du risque de chaque action.
  • Le masquage des secrets avant qu’ils ne quittent la machine.
  • La politique d’accès à chaque base de données.
  • Le gate de qualité, identique pour les personnes, les agents, les hooks Git et la CI.

Un modèle ne peut pas contourner une règle en se convainquant lui-même.

Extensions

Les plugins se chargent sans recompilation, s’exécutent de manière isolée (une défaillance n’affecte pas l’IDE) et déclarent leurs permissions dans un manifeste. Ils peuvent ajouter des commandes et des panneaux, des inspections, des entrées de menu et de barre d’état, leurs propres paramètres, des données pour l’agent et leurs propres traductions.