Documentación / Referencia
Arquitectura
Cómo está construido Yuli: un motor nativo en Rust, una interfaz Electron con TypeScript y React, y el modelo de lenguaje como capa que razona.
Yuli separa con claridad quién hace el trabajo pesado, quién pinta y quién razona.
| Capa | Tecnología | Responsabilidad |
|---|---|---|
| Motor nativo | Rust | Indexado y análisis semántico, Git, procesos, depuración, base de datos, seguridad, calidad y orquestación del agente. |
| Interfaz | Electron, TypeScript y React | Solo pinta: editor, paneles, diagramas y vistas previas. |
| Modelo de lenguaje | El proveedor o agente que elijas | Razona: planea, decide y opera los servicios del IDE mediante herramientas controladas. |
La aplicación corre en Windows, macOS y Linux, en 64 bits de punta a punta.
Cómo se comunican
Interfaz (Electron + React)
│ IPC por stdin/stdout
▼
Motor (agent-engine, Rust) ──▶ Git, build, depurador, base de datos, índice
│
├──▶ Proveedor de IA (Modo Platform)
│
└──◀ yuli-mcp ◀── stdio ── Claude Code, Kiro, Codex, Antigravity
(TCP 127.0.0.1 + token)
- La interfaz arranca el motor como un proceso y le habla por stdin/stdout.
- La interfaz nunca toca el disco, Git ni la red del agente por su cuenta: todo pasa por los controladores del motor.
- Los agentes externos se conectan con
yuli-mcp, que habla con el motor por un socket de loopback con token. Ver Yuli como servidor MCP.
Los componentes del motor
| Componente | Qué hace |
|---|---|
agent-engine |
El binario principal: servicios, controladores y orquestación del agente. |
yuli-mcp |
El servidor MCP para agentes externos, los hooks y el gate. |
code-intelligence |
El motor de inteligencia de código: núcleo del grafo, Java, autocompletado, planificador y frameworks (Struts, JBoss). |
java-debug |
El cliente JDWP del depurador Java. |
El motor se organiza en capas: domain (tipos y reglas puras), service (lógica) y controller (IPC). La interfaz solo habla con los controladores.
Inteligencia de código
| Pieza | Tecnología |
|---|---|
| Análisis sintáctico | Tree-sitter (Java y TypeScript) |
| Grafo de símbolos | petgraph, con nodos (clases, métodos, campos, beans de Spring) y aristas (llama, extiende, implementa, inyecta) |
| Persistencia | SQLite en .ai/codebase/, por proyecto |
| Invalidación | Un grafo de dependencias entre archivos: editar uno solo reanaliza lo que depende de él |
| Resolución de tipos | El compilador de Java |
| Planificación | Colas de prioridad para que lo que miras se resuelva primero |
Para responder preguntas sobre el proyecto, el agente recibe un subgrafo acotado en lugar de archivos enteros. Así no se agota la ventana de contexto ni el costo en tokens.
Dónde vive cada cosa
| Lugar | Contenido |
|---|---|
.ai/ en tu proyecto |
Contrato, misiones, memoria, reglas e índice. Ver La carpeta .ai. |
%APPDATA%\.yulicode (Windows) |
Ajustes, prompts, skills y hooks propios, historial del chat. |
%LOCALAPPDATA%\.yulicode (Windows) |
Runtimes, índices, cachés y registros. Se puede borrar. |
| Llavero del sistema | API keys, contraseñas y tokens. |
En macOS y Linux se usa la misma división en las carpetas estándar de cada sistema.
Reglas deterministas
Los límites de seguridad y calidad viven en el motor, no en el prompt:
- El sandbox del proyecto y las rutas protegidas.
- La evaluación de riesgo de cada acción.
- La redacción de secretos antes de que salgan del equipo.
- La política de acceso a cada base de datos.
- El gate de calidad, el mismo para personas, agentes, hooks de Git y CI.
Un modelo no puede saltarse una regla convenciéndose a sí mismo.
Extensiones
Los plugins se cargan sin recompilar, se ejecutan aislados (un fallo no afecta al IDE) y declaran sus permisos en un manifiesto. Pueden agregar comandos y paneles, inspecciones, entradas de menú y de barra de estado, ajustes propios, datos para el agente y sus propias traducciones.