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

keel-spring

v0.1.5

Published

Generador Spring Boot para diseños Keel: valida el diseño agnóstico y genera services/<servicio>-spring/ con el scaffolding transversal al stack más el conocimiento del agente; los adaptadores de infraestructura y la lógica de negocio los completa el agen

Readme

keel-spring

Generador Spring Boot para diseños Keel. Es un paquete independiente con CLI propia que reparte el trabajo en dos fases, separadas por un cd: build —ejecutado en el workspace de diseño— valida el diseño, pregunta el stack al diseñador y genera de forma determinista, dentro de services/<servicio>-spring/, el scaffolding transversal al stack — todo lo necesario para levantar el proyecto con arquitectura hexagonal + CQRS (Gradle con las dependencias del stack elegido y springdoc, perfiles local/develop/production/test, dominio puro + espejo de persistencia con puerto/adaptador —XxxJpa con base relacional, XxxDocument con base documental, según el persistence.default.model que declara el diseño, no el stack—, commands/queries + handlers stub vía UseCaseMediator, controllers V1, jerarquía de errores con @RestControllerAdvice, puertos de publicación de eventos con stub) — más el conocimiento del agente (skill propia, agentes, conventions y las skills por tecnología del stack), proyectado a cada harness soportado —Claude Code y opencode— desde una fuente única y neutral, y un snapshot del diseño en specs/. En el workspace de diseño no se instala nada: el conocimiento del generador vive solo dentro del proyecto que produce. El código que depende de la infraestructura elegida (publishers/listeners del broker, adaptador de storage) y la lógica de negocio los completa el agente (Claude Code) ejecutando /keel-generate-spring dentro del proyecto, que orquesta cinco subagentes instalados por build: keel-spring-code (código, sin pruebas unitarias, guiado por las skills keel-spring-<tech> instaladas en el proyecto según keel-stack.json) en paralelo con keel-spring-infra (levanta la infraestructura de prueba de infra/ con docker o podman) y con keel-spring-tests (traduce una vez los escenarios FL-* de validation-scenarios.md a pruebas de integración JUnit en src/integrationTest/, en caja negra y sin leer src/main/java — el source set deja main fuera de su compileClasspath, así que compilan en paralelo con el código y la caja negra es estructural), después la puntuación de escenarios, que no es un agente: el orquestador ejecuta infra/score-scenarios.sh (corre ./gradlew integrationTest —la app la arranca JUnit, con reset de datos por flujo vía infra/reset-db.sh— y compone la matriz desde el XML de JUnit, con la salida de Gradle al log para no cargarle el contexto), y solo si sale algo en rojo invoca keel-spring-validate, que arbitra cada fallo en culprit: code | test | harness | design; al final keel-spring-quality (pase de calidad no-conductual, los escenarios como no-regresión propia, más el esquema, que cambia con el modelo de persistencia: con base relacional redacta el baseline de migraciones —build deja el mecanismo Flyway con db/migration/ vacío; el agente lo exporta de las entidades finales con infra/export-schema.sh y lo doble-checkea en estático, y la prueba en vivo es del diseñador porque exigiría borrar el volumen de la misma base sobre la que corre su no-regresión—; con base documental no hay baseline que redactar y lo que hace es verificar los índices vivos con infra/export-indexes.sh, que solo lee). El criterio de terminado es ./gradlew build -x test en verde más ./gradlew integrationTest con el 100% de los escenarios end-to-end en OK; la suite de pruebas unitarias es un proceso independiente y posterior a que el diseñador valide el servidor. Cada subagente reporta con un bloque estructurado (status/blockers/failures) sobre el que la skill orquestadora decide avances y relanzamientos.

Uso

npm i -g keel-spring

# 1) en un workspace Keel (keel init), con el diseño terminado:
keel-spring build specs/<servicio>
# → comprueba la compatibilidad DSL y ejecuta la validación (schemas + referencias cruzadas)
# → cuestionario de stack (BD/broker/auth/cache/storage, solo lo que el diseño necesita) → keel-stack.json
# → genera services/<servicio>-spring/: scaffolding transversal al stack estilo Spring Initializr
#   (wrapper de Gradle incluido + infraestructura de prueba en infra/; compila y arranca tal cual),
#   más el conocimiento del agente (skill, agentes, conventions, skills del stack), proyectado
#   a cada harness soportado, y snapshots de specs/ y docs/
# → el workspace de diseño no recibe ningún archivo

# 2) dentro del proyecto generado:
cd services/<servicio>-spring

# y en Claude Code, abierto en esa raíz:
#   /keel-generate-spring   → sin argumentos; orquesta código + infraestructura + validación funcional

Para arrancarlo a mano en cualquier momento: docker compose -f infra/docker-compose.yaml up -d && ./gradlew bootRun.

build --defaults (o sin terminal interactiva) omite el cuestionario con los defaults (PostgreSQL, Kafka, Keycloak, Redis). build es idempotente y de regeneración segura: no sobrescribe el código ya implementado por el agente salvo con --force; el stack persistido en keel-stack.json se reutiliza sin repreguntar, y los snapshots de specs/ y docs/ se refrescan siempre.

Evolucionar un proyecto ya generado

Si el diseño cambia después de terminar la generación (/keel-evolve en el workspace), no se regenera desde cero:

keel-spring build specs/<servicio> --refresh --prune   # desde el workspace
cd services/<servicio>-spring
/keel-generate-spring                                  # entra en modo evolución

--refresh pone al día lo que build generó y nadie tocó. Lo que el agente tocó y el generador cambió (un conflicto) no se pisa: su versión nueva queda en build/keel-refresh/ y la ruta entra en pendingMerge de keel-generated.json. --prune borra lo que build ya no emite, solo si nadie lo tocó. Si el diseño empieza a pedir una categoría nueva del stack (p. ej. un broker), build la pregunta, y solo esa. El resultado es build/keel-refresh/EVOLUTION.md, con el delta del diseño, los escenarios afectados, las fusiones y los huérfanos que el agente tiene que retirar; con él la skill trabaja sobre lo que cambió y puntúa la suite completa como no-regresión. --check sale en rojo mientras quede una evolución o una fusión pendiente.

Compatibilidad

| Paquete | DSL Keel | |---------|----------| | keel-spring 0.1.x | keel: "2.13" |

Una sola versión, en espejo de lo que acepta keel validate: los schemas del DSL no gatean primitivos por versión, así que aceptar las anteriores haría que el campo keel de un manifiesto declarase una intención que nada comprueba. El razonamiento completo, en docs/dsl-reference.md § Historial de versiones.

El contrato completo del generador está en assets/generators/spring/README.md. Para crear un generador de otra tecnología con este mismo patrón: docs/building-a-generator.md del workspace (o packages/keel-core/assets/core/docs/building-a-generator.md en el monorepo).