Bootstrap ZIP — Código embebido que no descarta PyInstaller
Descripción
El bootstrap del Agente carga su código desde un paquete ZIP embebido (app-VER.zip) en lugar de .py sueltos en agent_modules. Resuelve el bug que rompía en 2.14.0: PyInstaller analiza módulos y descarta los .py que colisionan con sus análisis internos (app_main.py) → el fallback embebido fallaba con “no encontrado”.
Raíz: Los 2 builds fallidos de 2.14.0 (07-07) se debían a que PyInstaller dejaba fuera app_main.py cuando iba como --add-data suelto → tras un swap limpio el bootstrap rompía.
Solución implementada
build_agent.bat: generaapp-VER.zipANTES de llamar a PyInstaller.- PyInstaller
--add-data app-VER.zip: embebe el zip (no colisiona). bootstrap._embedded_source(): extrae y verifica el zip embebido en fallback.- Mismo mecanismo que un paquete descargado.
- Se ejecuta si
current.txtapunta a embebido oprevious.txtno existe.
Testing
- 3 tests nuevos de
_embedded_sourceentests/agent/test_agent_launcher.py. - Self-test forzado con
CREARACK_FORCE_EMBEDDED=1→ ejercita el camino embebido (antes, el self-test pasaba pese al.exeroto porque usabacurrent.txtcon versión anterior intacta). - Suite agente: 26/26 verde.
Impacto
- 2.14.1: Primera release entregada como paquete firmado sin recompilar el
.exe. - Cadena de fallback completa:
current → previous → embebidoahora funciona en ambos extremos (código suelto descartado). - Cierre de carrera antivirus sobre el binario: el swap de actualización ya no crea un nuevo
.exe→ no hay ventana donde el AV bloquea la extracción de un onefile no-reputado.
Archivo modificado
scripts/agent/build_app_package.py: genera y embebe el ZIP.terminal/agent/bootstrap/_embedded_source(): función nueva de extracción.build_agent.bat: orquesta la generación del ZIP.- Tests:
tests/agent/test_agent_launcher.py(+3 test casos).
Véase también
- [[feature—agent-lanzador—paquete-firmado-ed25519]]
- [[decision—20260707—netbird-ssh-apex]]
- [[concept—agent-lanzador—cadena-fallback]]
- [[incident—20260707—bootstrap-2-14-0-roto]]
- [[concept—agent-lanzador—pyinstaller]]