ventaibot
v0.2.0
Published
VentAI — instala productos de IA para tu negocio en tu propia infraestructura, en un comando. Por Rafael Fuentes.
Downloads
332
Maintainers
Readme
ventaibot
CLI para instalar productos VentAI en la infraestructura del cliente, en un comando.
npx ventaibot initEl cliente no clona un repo ni pelea con Docker: corre un comando, responde unas preguntas y queda con el código configurado y un script de despliegue listo para su VPS.
Probarlo entero (un comando)
powershell -ExecutionPolicy Bypass -File probar.ps1Levanta el control plane, publica un producto, lo instala como si fueras un cliente, simula que el cliente edita su configuración, publica una versión nueva, actualiza, y verifica que la config del cliente sobrevivió. Al final apaga todo solo.
Lo único que necesita: control-plane\.env con tu DATABASE_URL de Neon (copia
control-plane\.env.example). Es repetible — puedes correrlo las veces que quieras.
Si todo va bien termina con TODO OK y código de salida 0. La instalación de prueba
queda en .demo\lignus por si quieres mirarla por dentro.
Cómo funciona (la arquitectura, que es lo que vale)
Son cinco piezas. Entendidas por separado, el modelo se replica para cualquier producto.
1. Control plane
Un backend Express + Neon que sabe tres cosas: quién tiene licencia, qué puede
descargar, y dónde está desplegado. Vive en control-plane/.
| Endpoint | Para qué |
|---|---|
| POST /v1/validate | ¿La licencia sirve? Registra la activación y aplica el límite del plan. |
| POST /v1/claim | Emite una licencia gratis sin pedir correo. Un fingerprint = una licencia. |
| GET /v1/catalog | Qué productos ve este plan. |
| GET /v1/download/:slug | Entrega el .tgz, gated por licencia y plan. |
| POST /v1/instalaciones/registrar | Vincula un despliegue con el panel (pair). |
| GET /v1/me | De quién es la sesión del CLI. |
2. Licencia + fingerprint
El CLI guarda un randomUUID() en ~/.ventaibot/config.json. Ese es el fingerprint:
aleatorio, no derivado del hardware. Permite contar activaciones sin hacer
fingerprinting del equipo del cliente. La distinción importa legalmente y es gratis.
3. Descarga verificada
El control plane manda X-Artifact-SHA256; el CLI verifica el hash antes de extraer
y aborta si no coincide o si falta. Sin esto, cualquiera que controle el servidor mete
código arbitrario en la máquina del cliente y nadie se entera. Es el eslabón que decide
si el modelo es vendible a una empresa seria.
El hash lo genera control-plane/publicar.js desde el mismo artefacto que se sirve —
si el hash y el .tgz nacen en lugares distintos, la verificación es decorativa.
4. Extracción que preserva la configuración del cliente
Esta es la pieza que hace posible vender actualizaciones. update extrae encima de la
instalación existente, pero excluye todo lo que el cliente edita:
const CLIENTE_FILES = [
"./cliente/config.local.js", "./cliente/kb", "./.env", "./.env.*",
"./docker-compose.override.yml", "./Caddyfile.local", `./${MARKER}`,
];Si agregas un archivo que el cliente edita, súmalo a esa lista o se lo pisas en la próxima actualización. Es el error que rompe la confianza y no se nota hasta que ya pasó.
Antes de extraer se listan las entradas del tar y se rechazan rutas absolutas
(/etc/…, C:/…) y traversal (../) — protección contra zip-slip.
5. Despliegue sin tocar el VPS
El CLI no se conecta por SSH. Genera un deploy-cliente.sh revisable que el cliente
o su agente ejecuta. Menos superficie de ataque, menos credenciales en tránsito, y el
cliente ve exactamente qué se va a correr antes de correrlo.
Uso
# Instalación interactiva
npx ventaibot init
# Modo no-interactivo (para agentes: no pueden navegar menús)
npx ventaibot init --yes --producto nucleo \
--negocio "Constructora Lignus" --que "constructora" \
--horario "L-V 9-18" --telefono "+56 9 ..." \
--tono formal --cerebro claude --dominio panel.lignus.cl
npx ventaibot list # catálogo según tu plan
npx ventaibot update # actualiza conservando cliente/ y .env
npx ventaibot doctor # diagnostica una instalación
npx ventaibot login # OAuth por navegador, callback en 127.0.0.1
npx ventaibot pair --url https://panel.lignus.cl
npx ventaibot --versionDesarrollo
node --test # 6 tests, cero dependencias (node:test)
node bin/cli.js ayudaControl plane
cd control-plane
cp .env.example .env # llena DATABASE_URL de Neon
npm install
psql "$DATABASE_URL" -f schema.sql
npm start
# Publicar un producto (empaqueta, hashea y registra)
node publicar.js nucleo 0.1.0 ../../panel-ventaiDecisiones de empaquetado
Tres reglas que hacen que npx ventaibot sea instantáneo y seguro de instalar:
- Cero dependencias. Todo el CLI es un archivo. No hay árbol transitivo que envenenar más adelante.
- Cero scripts de ciclo de vida. No hay
preinstall,install,postinstallniprepare. Instalar este paquete no ejecuta nada — ese es el vector número uno de los ataques de supply chain en npm. El único script estest, que solo corre a mano. files: ["bin", "NOTICE"]. Solo viaja lo necesario. Verifica siempre connpm pack --dry-runantes de publicar.
Nunca se usa exec con shell: solo execFileSync con argv explícito, así que ningún
argumento puede inyectar comandos.
Crédito
El diseño está inspirado en forjabot
(MIT © 2026 Horizontes IA). No se copió su código fuente. Ver NOTICE.
Diferencias deliberadas:
| | forjabot | ventaibot |
|---|---|---|
| Integridad del artefacto | sin verificar | SHA-256 verificado antes de extraer |
| Rutas del tar | sin validar | absolutas y ../ rechazadas |
| --version | no implementado | sí |
| Skill del agente | se instala siempre, trigger genérico | opt-in (--con-skill), trigger específico |
| Despliegue | Cloudflare Workers | VPS con Docker + Caddy |
Licencia
MIT © 2026 Rafael Fuentes
