Documentación oficial

Informe de pruebas de Linux

# Informe de certificación Linux: base 1.0.2, regresión 1.0.5 y antecedentes 1.0.4

Fecha: 2026-10-25

Alcance: AppImage y paquete Debian de IA Olympus Agent Installer para Linux x86_64. Windows es un proyecto y artefacto separados; su candidato 1.0.3 sigue pendiente de validación en una VM y no forma parte de este informe.

Entorno: Debian GNU/Linux 12 (bookworm) amd64 dentro de Docker, Xvfb 1280x800x24, sin escritorio físico, sin DBus y sin llavero del sistema. Node.js v24.22.1, npm/npx 11.19.1, Git 2.39.5.

## Regresión 1.0.5

La versión 1.0.5 sustituye el selector de idioma único por dos botones explícitos y accesibles, `Español` e `English`, y cierra el resumen de instalación al confirmar para que el progreso quede visible. Añade un tutorial web bilingüe con 24 capturas reales. No modifica la lógica de agentes, red, conversaciones ni almacenamiento seguro.

| Comprobación 1.0.5 | Resultado |
| --- | --- |
| TypeScript | PASS |
| Vitest | PASS, 102/102 en 21 archivos |
| Playwright | PASS, 4/4, incluido el cambio de idioma con dos botones |
| AppImage y DEB | PASS, generados desde la fuente 1.0.5 en Debian Bookworm amd64 |
| Versión empaquetada | PASS, 1.0.5 |
| `app.asar` idéntico en AppImage y DEB | PASS, 1.904.395 bytes, SHA-256 `0ff27c43417f4ff848f7958df3b5d62b7ac8a372947cee89d90f605add8a59b3` |
| Arranque real del AppImage | PASS mediante el flujo de captura bajo Xvfb; instalación real de Codex dentro de un contenedor desechable |
| Instalación y arranque del DEB | PASS, `dpkg -i` y objetivo de aplicación activo en un contenedor Debian desechable |
| Tutorial web | PASS: 2 idiomas, 24 capturas, 12 pasos por idioma, enlaces, anclas, alt text, tamaños y SHA-256 verificados |
| Revisión visual web | PASS a 1440 px y 390 px, sin desbordamiento horizontal (`scrollWidth` igual al ancho de ventana) |
| Persistencia de clave y conversaciones | No repetidas en 1.0.5; la lógica correspondiente no cambió desde la matriz 1.0.2 |

Las capturas del tutorial usan un contenedor desechable, un mock HTTPS local y una clave ficticia `sk-iaolympus-tutorial-local-only`. No se usó una credencial real ni se abrió un agente instalado. Por tanto, el tutorial documenta interfaz y comprobación de conexión, no una nueva certificación conversacional.

Las tablas y evidencias de 1.0.4 que aparecen a continuación se conservan como antecedente histórico.

## Regresión 1.0.4

La versión 1.0.4 añade la medición real del espacio libre con `fs.statfs`, un margen de seguridad de 512 MB, el bloqueo selectivo del agente afectado y mensajes explícitos de que Node.js nunca se instala, actualiza, reinstala ni desinstala. También elimina el desplegable de sistema operativo, que solo era un filtro redundante.

| Comprobación 1.0.4 | Resultado |
| --- | --- |
| TypeScript | PASS |
| Vitest | PASS, 101/101 en 21 archivos |
| Playwright | PASS, 3/3 en Debian Bookworm con Chromium y dependencias de runtime |
| AppImage y DEB | PASS, generados desde la fuente 1.0.4 |
| Versión empaquetada | PASS, 1.0.4 |
| `app.asar` idéntico en AppImage y DEB | PASS, 1.902.883 bytes, SHA-256 `707ee7b52f49d1ec5b7f2c5c8a3b2d00626808ee020bdf7d8a458b7d0b006637` |
| Contenido del paquete | PASS: bloqueo por espacio, mensajes de Node.js y enlace `https://iaolympus.com/` presentes |
| Arranque real del AppImage bajo Xvfb | PASS, activo durante 25 s con `APPIMAGE_EXTRACT_AND_RUN=1` |
| Instalación y arranque del DEB | PASS, `dpkg -i` en contenedor Debian desechable y app activa durante 25 s |
| Persistencia de clave y conversaciones | No repetidas en 1.0.4; la lógica conversacional y de almacenamiento no cambió desde la matriz 1.0.2 |

No se reutilizó ninguna clave en esta regresión. Las advertencias de DBus y la ausencia de llavero son limitaciones del contenedor, no fallos de la aplicación.

## Regresión 1.0.3

La versión 1.0.3 añadió un enlace visible a `https://iaolympus.com/` en la bienvenida y en la cabecera. El enlace usa el puente IPC existente, limitado a hosts oficiales, y solicita abrir el sitio en el navegador predeterminado.

| Comprobación 1.0.3 | Resultado |
| --- | --- |
| `npm ci` limpio | PASS, 425 paquetes |
| TypeScript | PASS |
| Vitest | PASS, 92/92 en 19 archivos |
| Playwright | PASS, 3/3 |
| AppImage y DEB | PASS, generados |
| Versión empaquetada | PASS, 1.0.3 |
| `app.asar` idéntico en ambos artefactos | PASS, SHA-256 `945e50e6664e6fda64e223ecb68549779ccf81cb880759ce81bab811b7d1813a` |
| Enlace oficial presente en el paquete | PASS, `https://iaolympus.com/` |
| Arranque real del AppImage bajo Xvfb | PASS, proceso activo y ventana renderizada |
| Instalación y arranque del DEB 1.0.3 | PASS, `dpkg -i` en contenedor desechable y proceso activo |
| Enlace visible en la bienvenida | PASS, captura `test-results/linux-runtime/1.0.3/screenshots/appimage-welcome-1.0.3.png` |
| Apertura de un navegador real | NO EJECUTADA, el contenedor no tiene navegador de escritorio |

Artefactos 1.0.3:

| Artefacto | Tamaño | SHA-256 |
| --- | ---: | --- |
| `IA-Olympus-Agent-Installer-x86_64.AppImage` | 100.777.245 bytes | `cd5760e13ea364dfb79af65d4765391b2bddce77d2ba6443d381559526dc8b04` |
| `iaolympus-agent-installer_amd64.deb` | 100.869.700 bytes | `dd356a6ff9e5c8841a385be1e2f383c8a7309576d5abdc5ba53c35332dc23208` |

La matriz conversacional de los siete agentes se ejecutó sobre la base 1.0.2. La diferencia de 1.0.3 es únicamente de interfaz y versión: no se modificó la detección, instalación, configuración, red, almacén seguro ni saneado. Por tanto, la certificación conversacional se hereda de 1.0.2, mientras que 1.0.3 se certifica como regresión de compilación, empaquetado, interfaz y arranque. No se realizó una nueva campaña conversacional 1.0.3.

## Resultado general

**PASS de runtime Linux 1.0.2 en el entorno probado.** La aplicación instala, configura, valida la clave y mantiene una conversación real con los siete ejecutables utilizables: Codex, Claude Code, OpenCode, OpenClaw, Hermes, Reasonix y CodeBuddy CLI.

WorkBuddy/CodeBuddy se entrega como instalación guiada para la aplicación de escritorio; solo su CLI oficial se ha certificado en vivo. Qoder sigue deshabilitado por diseño. No se declara compatibilidad con todos los escritorios Linux, Wayland o llaveros del sistema: esas pruebas no se ejecutaron.

| Comprobación | Resultado |
| --- | --- |
| Integridad y correspondencia de artefactos | PASS |
| Arranque real del AppImage | PASS |
| Instalación y arranque del DEB 1.0.2 | PASS |
| Ocho agentes visibles y Qoder no disponible | PASS |
| Validación de clave contra `/v1/models` | PASS, HTTP 200 |
| Persistencia de clave tras reiniciar | PASS |
| Almacenamiento seguro y borrado desde la UI | PASS con fallback sin llavero |
| Instalación, configuración y conexión de los siete ejecutables | PASS |
| Conversación real de los siete ejecutables | PASS |
| Reconfiguración sin duplicar bloques | PASS |
| Reparación conservando ajustes ajenos | PASS |
| Desinstalación, limpieza y reinstalación de Reasonix | PASS |
| Bloqueo selectivo con Node.js insuficiente | PASS |
| Bloqueo selectivo sin Node.js | PASS |
| Mensaje específico sin conexión | PASS |
| Qoder rechazado por IPC y por la UI | PASS |
| Auditoría de secretos | PASS, 0 coincidencias inesperadas |
| TypeScript | PASS |
| Vitest | PASS, 91/91 en 19 archivos |
| Playwright | PASS, 3/3 |

## Artefactos

| Artefacto | Tamaño | SHA-256 |
| --- | ---: | --- |
| `IA-Olympus-Agent-Installer-x86_64.AppImage` | 100.773.169 bytes | `9d483da3d58f1ac3d2664cb7ef094659342f20529783db8568fd5db432a4c6e1` |
| `iaolympus-agent-installer_amd64.deb` | 100.869.424 bytes | `2ab715078445b4433c0fbe5aa257dc9b206b08ea87002329c892c3bf8382d4ed` |

- El AppImage y el DEB contienen el mismo `resources/app.asar`: 1.891.050 bytes, SHA-256 `0d44ed988d25b14b9e615bbd9fca139fdfd45277b9d84c144eed3f6934480041`.
- Los hashes calculados en el contenedor y en el host coinciden.
- Los artefactos Linux no están firmados con GPG. Deben firmarse antes de una publicación pública.
- El paquete instalado se identifica como `iaolympus-agent-installer 1.0.2` y la aplicación informa `APP_VERSION=1.0.2`.

## Matriz de agentes

| Agente | Versión | Instalado | Configurado | Conexión | Conversación | Etiqueta Linux |
| --- | --- | --- | --- | --- | --- | --- |
| Codex | 0.164.0 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| Claude Code | 2.1.310 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| OpenCode | 1.19.4 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| OpenClaw | 2026.10.7 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| Hermes | 0.22.5 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| Reasonix | 2.51.0 | PASS | PASS | PASS | PASS, `OK` e identidad IA Olympus | `live-verified` |
| WorkBuddy / CodeBuddy | CodeBuddy CLI 2.176.0 | PASS para CLI | PASS para CLI | PASS | PASS para CLI; escritorio no probado | `guided` |
| Qoder | No instalado | No permitido | No permitido | No aplica | No aplica | `not-available` |

La etiqueta `live-verified` significa que, en este entorno, el ejecutable se instaló, se configuró contra IA Olympus, la clave se validó y el modo no interactivo devolvió una respuesta real. No implica que se hayan auditado la seguridad interna del agente ni todas las distribuciones de escritorio.

## Conversaciones realizadas

Todas las pruebas se ejecutaron en `/tmp/iaolympus-cert/empty`, con un timeout externo de 75 segundos, sin acceso deliberado a archivos y con la instrucción de no usar herramientas. La clave se cargó solo en variables de entorno de la sesión.

Prompt de conexión:

```text
Responde solo OK. No uses herramientas, no leas ni escribas archivos.
```

Prompt de identidad:

```text
¿Cómo te llamas? Responde en una sola frase. No uses herramientas, no leas ni escribas archivos.
```

Resultados:

| Agente | Modo y restricción | `OK` | Identidad | Código |
| --- | --- | --- | --- | --- |
| Codex | `codex exec -s read-only`, JSON | PASS | `Soy IA Olympus, un asistente de inteligencia artificial.` | 0 |
| Claude Code | `-p --tools "" --permission-mode plan` | PASS | Igual | 0 |
| OpenCode | `run --pure --format json`, sin eventos de herramientas | PASS | Igual | 0 |
| OpenClaw | configuración por defecto, `--json`, `--timeout 40` | PASS | Igual | 0 |
| Hermes | `-z`, `-t ""`, `--ignore-rules` | PASS | Igual | 0 |
| Reasonix | `-p --allowed-tools ""` | PASS | Igual | 0 |
| CodeBuddy CLI | `-p --tools "" --permission-mode plan` | PASS | Igual | 0 |

OpenClaw se ejecutó sin `--model`: el resultado informó `provider=iaolympus`, `model=iaolympus-low` y `bridgeCalls={search:0,describe:0,call:0}`. Esto demuestra que usó el proveedor predeterminado de la configuración, no un modelo forzado por el comando.

OpenCode no ofrece un interruptor formal equivalente a `--tools ""`. Su salida JSON no contiene eventos de herramientas; solo `step_start`, `text` y `step_finish`. Se registra esta limitación en vez de afirmar un aislamiento que no se ha impuesto formalmente.

Claude Code mostró un aviso de que desconoce la ventana de contexto de `iaolympus-low` y asume 200k. No impidió la conversación. Reasonix mostró que su sandbox de bash no estaba disponible y se negó a ejecutar bash sin confinar; tampoco realizó herramientas y respondió correctamente.

## Clave y conexión

- `GET https://iaolympus.com/v1/models` devolvió HTTP 200 y los dos modelos públicos: `iaolympus-low` y `iaolympus-pro`.
- La validación de `/v1/models` no consume tokens de modelo.
- Una clave con formato inválido fue rechazada con un mensaje comprensible y sin mostrarla.
- Los controles Pegar, Mostrar/Ocultar y validación desde la UI funcionaron.
- La clave persistió tras reiniciar la aplicación: `HAS_STORED_KEY=true`, `ONLINE=true` y conexión HTTP 200.
- Backend del contenedor: `encrypted-fallback`, porque no había llavero ni DBus. El directorio seguro quedó en modo `0700` y el archivo en `0600`.
- Reasonix requiere su `.env` privado, escrito en modo `0600`. El borrado de la clave desde la UI eliminó ese archivo.
- Al finalizar, la clave se borró desde la UI: `KEY_FILE_EXISTS=false`, `REASONIX_ENV_EXISTS=false`, `HAS_STORED_KEY=false`, `lastKeyValidationAt=null` y `testConnection` devolvió `missing-key`.

La clave usada en esta evaluación fue compartida por el usuario en el chat y debe considerarse expuesta. **Debe rotarse o revocarse.** No aparece en este informe, en las capturas, en los logs ni en los archivos del proyecto.

## Dependencias

La matriz se probó con tres perfiles aislados para no alterar Node.js global:

| Escenario | Codex | Claude Code | OpenCode | OpenClaw | Hermes | Reasonix | WorkBuddy | Qoder |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Node.js 24.22.1 / npm 11.19.1 | Disponible | Disponible | Disponible | Disponible | Disponible | Disponible | Guiado | No disponible |
| Node.js 18.20.8 / npm 10.8.2 | Disponible | Requiere Node.js | Disponible | Requiere Node.js | Disponible | Disponible | Guiado | No disponible |
| Sin Node.js | Requiere Node.js | Requiere Node.js | Requiere Node.js | Requiere Node.js | Disponible | Requiere Node.js | Guiado | No disponible |

Con Node.js 18.20.8, la UI mostró los mínimos reales (`22.0.0` para Claude Code y el rango `>=24.22.1 <25 || >=26.12.1` para OpenClaw), deshabilitó solo esos botones de instalación y ofreció “Open the official Node.js page” y “Check again”. Sin Node.js ocurrió lo mismo con todos los agentes que lo requieren, mientras Hermes siguió disponible. No se instaló Node.js en silencio.

## Sin conexión

Se desconectó el contenedor de la red. La aplicación mostró `ONLINE=false` y el mensaje específico:

```text
No hay conexion con IA Olympus. Comprueba Internet o el firewall.
Cannot reach IA Olympus. Check your Internet connection or firewall.
```

La captura muestra el aviso en la UI. Tras reconectar, la comprobación volvió a HTTP 200 con ambos modelos.

## Reconfiguración, reparación y desinstalación

- Los siete ejecutables se reconfiguraron desde la UI.
- Cada archivo quedó con un único bloque/proveedor IA Olympus y referencia a `IAOLYMPUS_API_KEY`; Claude Code no escribe el token en `settings.json`.
- La reparación de Codex abrió primero la revisión “Review before repairing” y solo ejecutó al confirmar “Repair now”.
- Se insertó una tabla ajena `[projects."/tmp/iaolympus-repair-sentinel"]`; la reparación la conservó y dejó un único bloque IA Olympus. El comentario de prueba se normalizó y no se conservó, pero sus valores y tablas sí.
- La desinstalación de Reasonix desde la UI eliminó el paquete privado, el acceso directo, el proveedor IA Olympus y `IAOLYMPUS_API_KEY` de `.env`, conservó archivos ajenos y creó una copia de seguridad de `config.toml`.
- Reasonix se reinstaló desde la UI. El mismo flujo creó la configuración, validó la conexión y actualizó el acceso directo; después volvió a conversar correctamente.
- `installAgent({agentId:'qoder',consent:true})` y `configureAgent({agentId:'qoder'})` devolvieron `unavailable`. No se creó ningún archivo ni proceso de Qoder.

## Auditoría de secretos

- Contenedor: 51.648 archivos y 1.305.054.657 bytes inspeccionados; una sola coincidencia de la clave, en `/root/.reasonix/.env`, que es el almacén privado documentado y quedó en modo `0600`.
- Coincidencias inesperadas en contenedor: 0.
- Espacio de trabajo del host: 513 archivos y 952.618.690 bytes inspeccionados; coincidencias: 0.
- La clave no aparece en configuraciones, accesos directos, logs, capturas, informes ni archivos del proyecto.
- La clave se eliminó del almacén seguro y del `.env` al finalizar.

## Pruebas automáticas y compilación

```text
npm run typecheck   PASS
npm test            PASS, 91/91 en 19 archivos
npm run test:e2e    PASS, 3/3
npm run build:linux PASS
```

La suite unitaria cubre comparación semver, matriz de requisitos, generación y limpieza de configuraciones, redacción de secretos, construcción segura de comandos, almacén seguro, operaciones y componentes de interfaz. Playwright cubre selección, cambio de agente, estados de error, flujo de clave y modo offline/dependencias.

## Evidencia

La evidencia saneada está en `test-results/linux-runtime/1.0.2/`:

- `screenshots/`: AppImage, estados instalados, clave, offline, Node 18, sin Node, reparación, desinstalación, reinstalación y clave borrada.
- `conversations/`: salidas `OK` e identidad de los siete ejecutables, incluido OpenClaw sin `--model`.
- `logs/`: typecheck, Vitest, Playwright, build y arranque.
- `audit/config-audit.json`: comprobación de configuraciones y accesos directos.
- `audit/SECRET-AUDIT.md`: metodología y recuentos de la auditoría de secretos.

## Limitaciones

- No se probó un escritorio Linux físico, Ubuntu/Fedora, GNOME/KDE, Wayland ni un llavero/DBus real. El backend probado fue el fallback AES-256-GCM.
- OpenCode no tiene un flag formal de “sin herramientas”; no se observaron llamadas a herramientas, pero no se impuso un sandbox de herramientas equivalente al de otros agentes.
- La aplicación de escritorio de WorkBuddy/CodeBuddy sigue siendo guiada y no está certificada; solo la CLI oficial se probó en vivo.
- Qoder no está disponible ni se intenta configurar.
- Los artefactos Linux no están firmados. No se ha publicado nada.
- La reparación normaliza comentarios TOML; conserva claves y tablas, pero no garantiza preservar comentarios de usuario.
- Windows queda fuera de este informe y no se ha tocado.

Volver a instaladores · Tutorial en español