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

@hablala/cli

v0.4.0

Published

CLI de Workspace as Code de Hablalá — configura un workspace completo (ontología, workflows, agentes) desde archivos declarativos con el ciclo plan/apply.

Readme

@hablala/cli

CLI de Workspace as Code de Hablalá: configura un workspace completo de la plataforma (modelo de datos, workflows, agentes) desde archivos declarativos versionables, con el ciclo estándar de la infraestructura declarativa: plan (diff, sin tocar nada) → apply (reconciliación transaccional). Pensado para que un agente de código (Claude Code o equivalente) deje un negocio operando en minutos escribiendo archivos — su medio nativo.

npx @hablala/cli --help

Ciclo

hablala login          # inicia sesión por el navegador (OAuth) y guarda la credencial
hablala init           # scaffold (CLAUDE.md, hablala.yaml) + pull del estado actual
# … el agente edita objects/, workflows/, agents/ …
hablala plan           # diff declarado vs. real (dry-run; detección de drift)
hablala apply          # reconcilia contra el workspace (crear/actualizar/archivar)
hablala pull           # re-sincroniza los archivos con lo cambiado por otras vías

hablala codegen        # tipos TS por tenant para @hablala/client (storefront token)

Es el CLI de la plataforma (un solo bin de marca con subcomandos, como prisma o supabase): los comandos de Workspace as Code usan un access token hpat_…; codegen usa un storefront token sfpk_…/sfpr_… (HABLALA_STOREFRONT_TOKEN) porque introspecciona el recorte publicado que el SDK lee.

El manifiesto

mi-negocio/
├── hablala.yaml              # metadatos del workspace (informativo)
├── objects/
│   └── vestido.yaml          # un objeto por archivo; sus relationships van dentro
├── workflows/
│   └── al_devolver.yaml
├── agents/
│   └── recepcionista.yaml
└── CLAUDE.md                 # generado por `init`: vocabulario + árbol de decisión

Reglas:

  • Cada directorio presente es autoritativo: lo que existe en el workspace y no está declarado se archiva al aplicar (nunca se borra; plan siempre lo muestra antes). Un directorio ausente no se gestiona.
  • El slug/handle del contenido es la identidad; el nombre de archivo es convención.
  • Mismo manifiesto aplicado dos veces = no-op (idempotencia estructural).
  • Validación local en milisegundos (claves conocidas, enums, identificadores) antes de tocar la red; la validación profunda la hace el servidor en el mismo plan.

Autenticación

hablala login usa los dos flujos OAuth estándar para CLIs nativos:

  • Por defecto — navegador (Authorization Code + PKCE con loopback, RFC 8252): el CLI abre la web, apruebas eligiendo organización/workspace/permisos, y la credencial vuelve sola por 127.0.0.1. Nada que copiar.
  • --device — sin navegador local (Device Authorization Grant, RFC 8628; se autodetecta bajo SSH): el CLI muestra un código corto (BDWP-HQPK) y la URL de verificación, y espera tu aprobación.

Ambos emiten el mismo access token de máquina (hpat_…) que se puede crear/revocar a mano en Configuración → Conexiones. La credencial es la identidad completa: organización y workspace se infieren del token. En CI, sáltate el navegador con --token hpat_….

Precedencia: --token > HABLALA_ACCESS_TOKEN > ~/.config/hablala/credentials.json (escrito por hablala login, modo 0600). Endpoint: --endpoint > HABLALA_ENDPOINT > default. Los endpoints OAuth se descubren por RFC 8414 (/.well-known/oauth-authorization-server).

Diseño

Capa fina sobre el endpoint declarativo del backend (GET/PUT /v1/workspace-config): auth + leer archivos + validación local + una llamada. El diff, la reconciliación y la idempotencia viven en el servidor. Ver apps/api/WORKSPACE_AS_CODE.md en el monorepo.