# Contribuir JARVIS es software libre (GPL-3.0) y se agradecen los commits. Esta guía dice cómo está montado, cómo probarlo y cómo añadir lo más común. Las ideas acotadas están en [ROADMAP.md](ROADMAP.md). ## Cómo está montado ``` nucleo/jarvis.py el bucle: oír → pensar → hacer → hablar nucleo/oido/ whisper.cpp (STT) y la captura del micrófono nucleo/cerebro/ Ollama, tool-calling, el RAG y la elección de modelo nucleo/boca/ Piper / voz clonada (TTS) nucleo/manos/ las acciones, el diario, el sudo, la fonética nucleo/cara/ el panel web (servidor WebSocket + HUD en cara/hud/) nucleo/saber/ el RAG: indexa, busca, y enriquece/ para mejorarlo config/ scripts: modelo, voz, whisper, ventanas ``` Nada de esto necesita compilar: es Python, bash y una página web. Se edita y se prueba en el sitio. ## Probarlo ```bash ./install.sh # entorno, modelo de Ollama, lanzador de escritorio ./nucleo/arranca.sh # el asistente y el panel en 127.0.0.1 ``` El panel se puede abrir **sin arrancar nada**, para trabajar el diseño: `nucleo/cara/hud/index.html` en un navegador se llena solo con datos de ejemplo. Hay dos suites de comprobaciones (`nucleo/pruebas/`) y un eval del RAG (`nucleo/saber/enriquece/evalua.py`, mide `hit@k`). Si tocas el RAG, corre el eval y pon los números en el commit. ## Añadir una acción Una acción es una entrada en `nucleo/datos/acciones.json`: ```json { "id": "brillo_sube", "grupo": "sistema", "frases": ["sube el brillo", "más brillo", "más luz"], "acuse": "Voy, señor.", "comando": "brightnessctl set +10%", "host": true, "respuesta": "Brillo al {campo1}, señor.", "confirmar": false, "captura": false } ``` - `frases`: cómo se dice, con variantes. Se emparejan ANTES de llamar al modelo, así que una acción del catálogo es instantánea. - `comando`: shell. `{campoN}` en `respuesta` es el enésimo campo de la salida. - `confirmar: true` para lo que borra o cambia; `captura: true` si necesita un argumento hablado ("busca el fichero **X**"). Si el comando depende de una herramienta que puede no estar, que degrade con gracia (mira `config/ventanas.sh`). ## Probar con otro modelo ```bash JARVIS_MODELO=qwen3.5:9b ./nucleo/arranca.sh ``` O, en marcha, dile a JARVIS "usa un modelo más potente" (usa la herramienta `elegir_modelo`). Para medir si un modelo hace bien el tool-calling, mira el patrón del eval del RAG y adáptalo. ## Un backend de ventanas nuevo (Wayland u otro) `config/ventanas-wayland.sh` es el ejemplo: detecta el compositor y traduce los verbos (maximiza, izquierda, centro...) a sus órdenes. Para KDE, GNOME Wayland u otro, se copia el patrón. Actúa sobre la ventana ACTIVA (en Wayland no se mueven ventanas ajenas). Prueba cada orden en tu compositor antes del commit. ## Estilo - Registro técnico y conciso, en castellano. Los comentarios explican el **porqué**, no el qué. - Los commits describen la decisión, no solo el cambio. - Sin datos personales en el repo: los apuntes indexados, el diario y la voz de referencia son del usuario (ver [PRIVACIDAD.md](PRIVACIDAD.md)).