npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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

Readme

ventaibot

CLI para instalar productos VentAI en la infraestructura del cliente, en un comando.

npx ventaibot init

El 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.ps1

Levanta 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 --version

Desarrollo

node --test              # 6 tests, cero dependencias (node:test)
node bin/cli.js ayuda

Control 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-ventai

Decisiones de empaquetado

Tres reglas que hacen que npx ventaibot sea instantáneo y seguro de instalar:

  1. Cero dependencias. Todo el CLI es un archivo. No hay árbol transitivo que envenenar más adelante.
  2. Cero scripts de ciclo de vida. No hay preinstall, install, postinstall ni prepare. Instalar este paquete no ejecuta nada — ese es el vector número uno de los ataques de supply chain en npm. El único script es test, que solo corre a mano.
  3. files: ["bin", "NOTICE"]. Solo viaja lo necesario. Verifica siempre con npm pack --dry-run antes 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