karajan-code 1.37.0 → 1.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -8
- package/docs/README.es.md +245 -34
- package/package.json +1 -1
- package/src/agents/resolve-bin.js +26 -14
- package/src/commands/code.js +3 -1
- package/src/commands/init.js +6 -4
- package/src/config.js +2 -2
- package/src/hu/store.js +57 -0
- package/src/mcp/server-handlers.js +3 -1
- package/src/orchestrator/hu-sub-pipeline.js +166 -0
- package/src/orchestrator/pre-loop-stages.js +120 -24
- package/src/orchestrator.js +94 -10
- package/src/planning-game/pipeline-adapter.js +37 -0
- package/src/prompts/hu-reviewer.js +55 -0
- package/src/prompts/triage.js +4 -2
- package/src/utils/os-detect.js +17 -8
- package/src/utils/process.js +7 -4
package/README.md
CHANGED
|
@@ -154,7 +154,7 @@ kj-tail --help # Full options
|
|
|
154
154
|
|
|
155
155
|
┌─ Terminal 2: kj-tail ────────────────────────────────────────────────────────┐
|
|
156
156
|
│ │
|
|
157
|
-
│ kj-tail v1.
|
|
157
|
+
│ kj-tail v1.38.0 — .kj/run.log │
|
|
158
158
|
│ │
|
|
159
159
|
│ ├─ 📋 Triage: medium (sw) — enabling researcher, architect, planner │
|
|
160
160
|
│ ├─ ⚙️ Preflight passed — all checks OK │
|
|
@@ -205,7 +205,7 @@ hu-reviewer? → triage → discover? → architect? → planner? → coder →
|
|
|
205
205
|
|
|
206
206
|
| Role | What it does | Default |
|
|
207
207
|
|------|-------------|---------|
|
|
208
|
-
| **hu-reviewer** | Certifies user stories before coding (6 dimensions, 7 antipatterns) |
|
|
208
|
+
| **hu-reviewer** | Certifies user stories before coding (6 dimensions, 7 antipatterns) | Auto (medium/complex) |
|
|
209
209
|
| **triage** | Classifies complexity, activates roles, auto-simplifies for trivial tasks | **On** |
|
|
210
210
|
| **discover** | Detects gaps in requirements (Mom Test, Wendel, JTBD) | Off |
|
|
211
211
|
| **architect** | Designs solution architecture before planning | Off |
|
|
@@ -274,16 +274,15 @@ Karajan auto-detects and auto-configures everything it can:
|
|
|
274
274
|
- **Pipeline complexity**: Triage classifies task → trivial tasks skip reviewer loop
|
|
275
275
|
- **Provider outages**: Retries on 500/502/503/504 with backoff (same as rate limits)
|
|
276
276
|
- **Coverage**: Coverage-only quality gate failures treated as advisory
|
|
277
|
+
- **HU Manager**: Complex tasks auto-decompose into formal user stories with dependencies. Each HU runs as its own sub-pipeline with state tracking visible in the HU Board
|
|
277
278
|
|
|
278
279
|
No per-project configuration required. If you want to customize, config is layered: session > project > global.
|
|
279
280
|
|
|
280
281
|
## Why vanilla JavaScript?
|
|
281
282
|
|
|
282
|
-
|
|
283
|
+
Not nostalgia, not stubbornness. I've been using JavaScript since 1997, when Brendan Eich created it in a week and changed the lives of everyone building for the web. I know its guts, its bugs, its quirks. And I know that whoever truly understands JS turns those bugs into features. TypeScript exists so that developers used to strongly-typed languages don't panic when they see JS. I respect that. But I don't need it. Tests are my type safety. JSDoc and a good IDE are my intellisense. And not having a compiler between the code and me is what lets me ship 57 releases in 45 days without fear.
|
|
283
284
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
This is a deliberate choice, not a limitation. The tests are the type safety. The legibility is a feature. 57 releases in 45 days. That velocity is possible precisely because vanilla JS with good tests lets you move fast without fear.
|
|
285
|
+
[Why vanilla JavaScript: the long version](docs/why-vanilla-js.md)
|
|
287
286
|
|
|
288
287
|
## Recommended companions
|
|
289
288
|
|
|
@@ -300,7 +299,7 @@ This is a deliberate choice, not a limitation. The tests are the type safety. Th
|
|
|
300
299
|
git clone https://github.com/manufosela/karajan-code.git
|
|
301
300
|
cd karajan-code
|
|
302
301
|
npm install
|
|
303
|
-
npm test # Run
|
|
302
|
+
npm test # Run 2093 tests with Vitest
|
|
304
303
|
npm run validate # Lint + test
|
|
305
304
|
```
|
|
306
305
|
|
|
@@ -316,4 +315,4 @@ Issues and pull requests welcome. If something doesn't work as documented, [open
|
|
|
316
315
|
|
|
317
316
|
---
|
|
318
317
|
|
|
319
|
-
Built by [@manufosela](https://github.com/manufosela). Head of Engineering at Geniova Technologies, co-organizer of NodeJS Madrid, author of [Liderazgo Afectivo](https://www.
|
|
318
|
+
Built by [@manufosela](https://github.com/manufosela). Head of Engineering at Geniova Technologies, co-organizer of NodeJS Madrid, author of [Liderazgo Afectivo](https://www.liderazgoafectivo.com). 90+ npm packages published.
|
package/docs/README.es.md
CHANGED
|
@@ -1,62 +1,78 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
+
<<<<<<< HEAD
|
|
2
3
|
<img src="karajan-code-logo-small.png" alt="Karajan Code" width="200">
|
|
4
|
+
=======
|
|
5
|
+
<img src="karajan-code-logo-small.png" alt="Karajan Code" width="180">
|
|
6
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
3
7
|
</p>
|
|
4
8
|
|
|
5
9
|
<h1 align="center">Karajan Code</h1>
|
|
6
10
|
|
|
7
11
|
<p align="center">
|
|
12
|
+
<<<<<<< HEAD
|
|
8
13
|
Orquestador local multi-agente con TDD, SonarQube y revision de codigo automatizada.
|
|
14
|
+
=======
|
|
15
|
+
Orquestador local multi-agente. TDD-first, basado en MCP, JavaScript vanilla.
|
|
16
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
9
17
|
</p>
|
|
10
18
|
|
|
11
19
|
<p align="center">
|
|
12
20
|
<a href="https://www.npmjs.com/package/karajan-code"><img src="https://img.shields.io/npm/v/karajan-code.svg" alt="npm version"></a>
|
|
21
|
+
<<<<<<< HEAD
|
|
22
|
+
=======
|
|
23
|
+
<a href="https://www.npmjs.com/package/karajan-code"><img src="https://img.shields.io/npm/dw/karajan-code.svg" alt="npm downloads"></a>
|
|
24
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
13
25
|
<a href="https://github.com/manufosela/karajan-code/actions"><img src="https://github.com/manufosela/karajan-code/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
14
26
|
<a href="https://www.gnu.org/licenses/agpl-3.0"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="License"></a>
|
|
15
27
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg" alt="Node.js"></a>
|
|
16
28
|
</p>
|
|
17
29
|
|
|
18
30
|
<p align="center">
|
|
31
|
+
<<<<<<< HEAD
|
|
19
32
|
<a href="../README.md">Read in English</a>
|
|
33
|
+
=======
|
|
34
|
+
<a href="../README.md">Read in English</a> · <a href="https://karajancode.com">Documentacion</a>
|
|
35
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
20
36
|
</p>
|
|
21
37
|
|
|
22
38
|
---
|
|
23
39
|
|
|
40
|
+
<<<<<<< HEAD
|
|
24
41
|
## Que es Karajan Code?
|
|
25
42
|
|
|
26
|
-
Karajan Code (`kj`) orquesta multiples agentes de IA a traves de un pipeline automatizado: generacion de codigo, analisis estatico, revision de codigo, testing y auditorias de seguridad
|
|
43
|
+
Karajan Code (`kj`) orquesta multiples agentes de IA a traves de un pipeline automatizado: generacion de codigo, analisis estatico, revision de codigo, testing y auditorias de seguridad — todo en un solo comando.
|
|
27
44
|
|
|
28
45
|
En lugar de ejecutar un agente de IA y revisar manualmente su output, `kj` encadena agentes con quality gates. El coder escribe codigo, SonarQube lo analiza, el reviewer lo revisa, y si hay problemas, el coder recibe otra oportunidad. Este bucle se repite hasta que el codigo es aprobado o se alcanza el limite de iteraciones.
|
|
29
46
|
|
|
30
47
|
**Caracteristicas principales:**
|
|
31
48
|
- **Pipeline multi-agente** con 11 roles configurables
|
|
32
49
|
- **5 agentes de IA soportados**: Claude, Codex, Gemini, Aider, OpenCode
|
|
33
|
-
- **Servidor MCP** con 20 herramientas
|
|
34
|
-
- **Bootstrap obligatorio
|
|
35
|
-
- **
|
|
36
|
-
- **
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
41
|
-
- **
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
- **
|
|
45
|
-
- **
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
50
|
-
- **
|
|
51
|
-
- **
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
> **Mejor con MCP.** Karajan Code esta disenado para usarse como servidor MCP dentro de tu agente de IA (Claude, Codex, etc.). El agente envia tareas a `kj_run`, recibe notificaciones de progreso en tiempo real, y obtiene resultados estructurados. Sin copiar y pegar.
|
|
50
|
+
- **Servidor MCP** con 20 herramientas — usa `kj` desde Claude, Codex o cualquier host compatible con MCP sin salir de tu agente. [Ver configuracion MCP](#servidor-mcp)
|
|
51
|
+
- **Bootstrap obligatorio** — valida prerequisitos del entorno (git, remote, config, agentes, SonarQube) antes de cada ejecucion. Si algo falta, para con instrucciones claras
|
|
52
|
+
- **TDD obligatorio** — se exigen cambios en tests cuando se modifican ficheros fuente
|
|
53
|
+
- **Integracion con SonarQube** — analisis estatico con quality gates (requiere [Docker](#requisitos))
|
|
54
|
+
- **Perfiles de revision** — standard, strict, relaxed, paranoid
|
|
55
|
+
- **Tracking de presupuesto** — monitorizacion de tokens y costes por sesion con `--trace`
|
|
56
|
+
- **Automatizacion Git** — auto-commit, auto-push, auto-PR tras aprobacion
|
|
57
|
+
- **Gestion de sesiones** — pausa/reanudacion con deteccion fail-fast y limpieza automatica de sesiones expiradas
|
|
58
|
+
- **Sistema de plugins** — extiende con agentes custom via `.karajan/plugins/`
|
|
59
|
+
- **Checkpoints interactivos** — en lugar de matar tareas largas, pausa cada 5 minutos con un informe de progreso y te deja decidir: continuar, parar o ajustar el tiempo
|
|
60
|
+
- **Descomposicion de tareas** — triage detecta cuando una tarea debe dividirse y recomienda subtareas; con integracion Planning Game, crea cards vinculadas con bloqueo secuencial
|
|
61
|
+
- **Retry con backoff** — recuperacion automatica ante errores transitorios de API (429, 5xx) con backoff exponencial y jitter
|
|
62
|
+
- **Pipeline stage tracker** — vista de progreso acumulativo durante `kj_run` mostrando que stages estan completadas, en ejecucion o pendientes — tanto en CLI como via eventos MCP para renderizado en tiempo real en el host
|
|
63
|
+
- **Guardarrailes de observabilidad del planner** — telemetria continua de heartbeat/stall, proteccion configurable por silencio maximo (`session.max_agent_silence_minutes`) y limite duro de ejecucion (`session.max_planner_minutes`) para evitar bloqueos prolongados en `kj_plan`/planner
|
|
64
|
+
- **Standby por rate-limit** — cuando un agente alcanza limites de uso, Karajan parsea el tiempo de espera, espera con backoff exponencial y reanuda automaticamente en vez de fallar
|
|
65
|
+
- **Preflight handshake** — `kj_preflight` requiere confirmacion humana de la configuracion de agentes antes de ejecutar, previniendo que la IA cambie asignaciones silenciosamente
|
|
66
|
+
- **Config de 3 niveles** — sesion > proyecto > global con scoping de `kj_agents`
|
|
67
|
+
- **Mediacion inteligente del reviewer** — el scope filter difiere automaticamente issues del reviewer fuera de scope (ficheros no presentes en el diff) como deuda tecnica rastreada en vez de bloquear; Solomon media reviews estancados; el contexto diferido se inyecta en el prompt del coder
|
|
68
|
+
- **Integracion con Planning Game** — combina opcionalmente con [Planning Game](https://github.com/AgenteIA-Geniova/planning-game) para gestion agil de proyectos (tareas, sprints, estimacion) — como Jira, pero open-source y nativo XP
|
|
69
|
+
|
|
70
|
+
> **Mejor con MCP** — Karajan Code esta disenado para usarse como servidor MCP dentro de tu agente de IA (Claude, Codex, etc.). El agente envia tareas a `kj_run`, recibe notificaciones de progreso en tiempo real, y obtiene resultados estructurados — sin copiar y pegar.
|
|
55
71
|
|
|
56
72
|
## Requisitos
|
|
57
73
|
|
|
58
74
|
- **Node.js** >= 18
|
|
59
|
-
- **Docker**
|
|
75
|
+
- **Docker** — necesario para el analisis estatico con SonarQube. Si no tienes Docker o no necesitas SonarQube, desactivalo con `--no-sonar` o `sonarqube.enabled: false` en la config
|
|
60
76
|
- Al menos un agente de IA instalado: Claude, Codex, Gemini o Aider
|
|
61
77
|
|
|
62
78
|
## Pipeline
|
|
@@ -67,7 +83,7 @@ triage? ─> researcher? ─> planner? ─> coder ─> refactorer? ─> sonar?
|
|
|
67
83
|
|
|
68
84
|
| Rol | Descripcion | Por defecto |
|
|
69
85
|
|-----|-------------|-------------|
|
|
70
|
-
| **triage** | Director de pipeline
|
|
86
|
+
| **triage** | Director de pipeline — analiza la complejidad y activa roles dinamicamente | **On** |
|
|
71
87
|
| **researcher** | Investiga el contexto del codebase antes de planificar | Off |
|
|
72
88
|
| **planner** | Genera planes de implementacion estructurados | Off |
|
|
73
89
|
| **coder** | Escribe codigo y tests siguiendo metodologia TDD | **Siempre activo** |
|
|
@@ -76,7 +92,7 @@ triage? ─> researcher? ─> planner? ─> coder ─> refactorer? ─> sonar?
|
|
|
76
92
|
| **reviewer** | Revision de codigo con perfiles de exigencia configurables | **Siempre activo** |
|
|
77
93
|
| **tester** | Quality gate de tests y verificacion de cobertura | **On** |
|
|
78
94
|
| **security** | Auditoria de seguridad OWASP | **On** |
|
|
79
|
-
| **solomon** | Supervisor de sesion
|
|
95
|
+
| **solomon** | Supervisor de sesion — monitoriza salud de iteraciones con 5 reglas (incl. reviewer overreach), media reviews estancados, escala ante anomalias | **On** |
|
|
80
96
|
| **commiter** | Automatizacion de git commit, push y PR tras aprobacion | Off |
|
|
81
97
|
|
|
82
98
|
Los roles marcados con `?` son opcionales y se pueden activar por ejecucion o via config.
|
|
@@ -129,12 +145,49 @@ Guias completas: [`docs/multi-instance.md`](multi-instance.md) | [`docs/install-
|
|
|
129
145
|
| **Aider** | `aider` | `pipx install aider-chat` (o `pip3 install aider-chat`) |
|
|
130
146
|
|
|
131
147
|
`kj init` auto-detecta los agentes instalados. Si solo hay uno disponible, se asigna a todos los roles automaticamente.
|
|
148
|
+
=======
|
|
149
|
+
Tu describes lo que quieres construir. Karajan orquesta multiples agentes de IA para planificarlo, implementarlo, testearlo, revisarlo con SonarQube e iterar. Sin que tengas que supervisar cada paso.
|
|
150
|
+
|
|
151
|
+
## Que es Karajan?
|
|
152
|
+
|
|
153
|
+
Karajan es un orquestador de codigo local. Corre en tu maquina, usa tus proveedores de IA existentes (Claude, Codex, Gemini, Aider, OpenCode) y coordina un pipeline de agentes especializados que trabajan juntos en tu codigo.
|
|
154
|
+
|
|
155
|
+
No es un servicio en la nube. No es una extension de VS Code. Es una herramienta que instalas una vez y usas desde la terminal o como servidor MCP dentro de tu agente de IA.
|
|
156
|
+
|
|
157
|
+
El nombre viene de Herbert von Karajan, el director de orquesta que creia que las mejores orquestas estan formadas por grandes musicos independientes que saben exactamente cuando tocar y cuando escuchar. La misma idea, aplicada a agentes de IA.
|
|
158
|
+
|
|
159
|
+
## Por que no usar solo Claude Code?
|
|
160
|
+
|
|
161
|
+
Claude Code es excelente. Usalo para codificacion interactiva basada en sesiones.
|
|
162
|
+
|
|
163
|
+
Usa Karajan cuando quieras:
|
|
164
|
+
|
|
165
|
+
- **TDD por defecto.** Los tests se escriben antes de la implementacion, no despues
|
|
166
|
+
- **Integracion con SonarQube.** Quality gates como parte del flujo, no como algo secundario
|
|
167
|
+
- **Solomon como jefe del pipeline.** Cada rechazo del reviewer es evaluado por un supervisor que decide si es valido o solo ruido de estilo
|
|
168
|
+
- **Enrutamiento multi-proveedor.** Claude como coder, Codex como reviewer, o cualquier combinacion
|
|
169
|
+
- **Operacion zero-config.** Auto-detecta frameworks de test, arranca SonarQube, simplifica el pipeline para tareas triviales
|
|
170
|
+
- **Arquitectura de roles composable.** Comportamientos de agente definidos como ficheros markdown que viajan con tu proyecto
|
|
171
|
+
- **Local-first.** Tu codigo, tus claves, tu maquina. Ningun dato sale salvo que tu lo digas
|
|
172
|
+
- **Zero costes de API.** Karajan usa CLIs de agentes de IA (Claude Code, Codex, Gemini CLI), no APIs. Pagas tu suscripcion existente (Claude Pro, ChatGPT Plus), no tarifas por token
|
|
173
|
+
|
|
174
|
+
Si Claude Code es un programador de pares inteligente, Karajan es el pipeline CI/CD para desarrollo asistido por IA. Funcionan genial juntos: Karajan esta disenado para usarse como servidor MCP dentro de Claude Code.
|
|
175
|
+
|
|
176
|
+
## Instalacion
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npm install -g karajan-code
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Eso es todo. No requiere Docker (SonarQube usa Docker, pero Karajan lo gestiona automaticamente). Sin ficheros de configuracion que copiar. `kj init` auto-detecta tus agentes instalados.
|
|
183
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
132
184
|
|
|
133
185
|
## Tres formas de usar Karajan
|
|
134
186
|
|
|
135
187
|
Karajan instala **tres comandos**: `kj`, `kj-tail` y `karajan-mcp`.
|
|
136
188
|
|
|
137
|
-
|
|
189
|
+
<<<<<<< HEAD
|
|
190
|
+
### 1. CLI — Directamente desde terminal
|
|
138
191
|
|
|
139
192
|
```bash
|
|
140
193
|
kj run "Implementar autenticacion de usuario con JWT"
|
|
@@ -143,27 +196,60 @@ kj review "Revisar los cambios de autenticacion"
|
|
|
143
196
|
kj plan "Refactorizar la capa de base de datos"
|
|
144
197
|
```
|
|
145
198
|
|
|
146
|
-
### 2. MCP
|
|
199
|
+
### 2. MCP — Dentro de tu agente de IA
|
|
147
200
|
|
|
148
201
|
El caso de uso principal. Karajan corre como servidor MCP dentro de Claude Code, Codex o Gemini. El agente tiene acceso a 20 herramientas (`kj_run`, `kj_code`, `kj_review`, etc.) y delega el trabajo pesado al pipeline de Karajan.
|
|
202
|
+
=======
|
|
203
|
+
### 1. CLI: directamente desde terminal
|
|
204
|
+
|
|
205
|
+
Ejecuta Karajan directamente. Ves la salida completa del pipeline en tiempo real.
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
kj run "Crea una utilidad que valide numeros de DNI español, con tests"
|
|
209
|
+
kj code "Añade validacion de inputs al formulario de registro" # Solo coder
|
|
210
|
+
kj review "Revisa los cambios de autenticacion" # Revisar diff actual
|
|
211
|
+
kj audit "Analisis completo de salud de este codebase" # Auditoria solo-lectura
|
|
212
|
+
kj plan "Refactorizar la capa de base de datos" # Planificar sin codificar
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 2. MCP: dentro de tu agente de IA
|
|
216
|
+
|
|
217
|
+
Este es el caso de uso principal. Karajan corre como servidor MCP dentro de Claude Code, Codex o Gemini. Le pides algo a tu agente de IA y el delega el trabajo pesado al pipeline de Karajan.
|
|
218
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
149
219
|
|
|
150
220
|
```
|
|
151
221
|
Tu → Claude Code → kj_run (via MCP) → triage → coder → sonar → reviewer → tester → security
|
|
152
222
|
```
|
|
153
223
|
|
|
224
|
+
<<<<<<< HEAD
|
|
154
225
|
**El problema**: cuando Karajan corre dentro de un agente de IA, pierdes visibilidad. El agente te muestra el resultado final, pero no las etapas del pipeline, iteraciones o decisiones de Solomon en tiempo real.
|
|
155
226
|
|
|
156
|
-
### 3. kj-tail
|
|
227
|
+
### 3. kj-tail — Monitorizar desde otro terminal
|
|
157
228
|
|
|
158
229
|
**La herramienta companera.** Abre un segundo terminal en el **mismo directorio del proyecto** donde esta trabajando tu agente de IA:
|
|
230
|
+
=======
|
|
231
|
+
El servidor MCP se auto-registra durante `npm install`. Tu agente de IA ve 20 herramientas (`kj_run`, `kj_code`, `kj_review`, etc.) y las usa segun necesite.
|
|
232
|
+
|
|
233
|
+
**El problema**: cuando Karajan corre dentro de un agente de IA, pierdes visibilidad. El agente te muestra el resultado final, pero no las etapas del pipeline, iteraciones o decisiones de Solomon en tiempo real.
|
|
234
|
+
|
|
235
|
+
### 3. kj-tail: monitorizar desde otro terminal
|
|
236
|
+
|
|
237
|
+
**La herramienta compañera.** Abre un segundo terminal en el **mismo directorio del proyecto** donde esta trabajando tu agente de IA:
|
|
238
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
159
239
|
|
|
160
240
|
```bash
|
|
161
241
|
kj-tail
|
|
162
242
|
```
|
|
163
243
|
|
|
164
|
-
|
|
244
|
+
<<<<<<< HEAD
|
|
245
|
+
Veras la salida del pipeline en vivo — etapas, resultados, iteraciones, errores — tal como ocurren.
|
|
165
246
|
|
|
166
247
|
```bash
|
|
248
|
+
=======
|
|
249
|
+
Veras la salida del pipeline en vivo (etapas, resultados, iteraciones, errores) tal como ocurren. La misma vista que ejecutar `kj run` directamente.
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
167
253
|
kj-tail # Seguir pipeline en tiempo real (por defecto)
|
|
168
254
|
kj-tail -v # Verbose: incluir heartbeats de agente y presupuesto
|
|
169
255
|
kj-tail -t # Mostrar timestamps
|
|
@@ -186,7 +272,11 @@ kj-tail --help # Todas las opciones
|
|
|
186
272
|
│ prioritaria │ │ ├─ 🔬 Researcher ✅ │
|
|
187
273
|
│ │ │ ├─ 🧠 Planner ✅ │
|
|
188
274
|
│ (Claude llama a kj_run │ │ ├─ 🔨 Coder ✅ │
|
|
275
|
+
<<<<<<< HEAD
|
|
276
|
+
│ via MCP — solo ves │ │ ├─ 🔍 Sonar: OK │
|
|
277
|
+
=======
|
|
189
278
|
│ via MCP, solo ves │ │ ├─ 🔍 Sonar: OK │
|
|
279
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
190
280
|
│ el resultado final) │ │ ├─ 👁️ Reviewer ❌ │
|
|
191
281
|
│ │ │ ├─ ⚖️ Solomon: 2 cond. │
|
|
192
282
|
│ │ │ ├─ 🔨 Coder (iter 2) ✅ │
|
|
@@ -196,7 +286,8 @@ kj-tail --help # Todas las opciones
|
|
|
196
286
|
└──────────────────────────┘ └──────────────────────────┘
|
|
197
287
|
```
|
|
198
288
|
|
|
199
|
-
|
|
289
|
+
<<<<<<< HEAD
|
|
290
|
+
**Ejemplo con pipeline completo** — tarea compleja con todos los roles:
|
|
200
291
|
|
|
201
292
|
```
|
|
202
293
|
┌─ Terminal 1 ─────────────────────────────────────────────────────────────────┐
|
|
@@ -222,7 +313,7 @@ kj-tail --help # Todas las opciones
|
|
|
222
313
|
|
|
223
314
|
┌─ Terminal 2: kj-tail ────────────────────────────────────────────────────────┐
|
|
224
315
|
│ │
|
|
225
|
-
│ kj-tail v1.
|
|
316
|
+
│ kj-tail v1.36.1 — .kj/run.log │
|
|
226
317
|
│ │
|
|
227
318
|
│ ├─ 📋 Triage: medium (sw) — activando researcher, architect, planner │
|
|
228
319
|
│ ├─ ⚙️ Preflight passed — all checks OK │
|
|
@@ -333,7 +424,108 @@ Cada rol tiene un template `.md` con instrucciones que el agente de IA sigue. Lo
|
|
|
333
424
|
|
|
334
425
|
Usa `kj roles show <rol>` para inspeccionar cualquier template. Crea un override de proyecto para personalizar el comportamiento por proyecto.
|
|
335
426
|
|
|
336
|
-
**Variantes de revision**: `reviewer-strict`, `reviewer-relaxed`, `reviewer-paranoid
|
|
427
|
+
**Variantes de revision**: `reviewer-strict`, `reviewer-relaxed`, `reviewer-paranoid` — seleccionables via flag `--mode` o config `review_mode`.
|
|
428
|
+
=======
|
|
429
|
+
[**Ver la demo completa del pipeline**](https://karajancode.com#demo): triage, arquitectura, TDD, SonarQube, code review, arbitraje de Solomon, auditoria de seguridad.
|
|
430
|
+
|
|
431
|
+
## El pipeline
|
|
432
|
+
|
|
433
|
+
```
|
|
434
|
+
hu-reviewer? → triage → discover? → architect? → planner? → coder → sonar? → impeccable? → reviewer → tester? → security? → solomon → commiter?
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**15 roles**, cada uno ejecutado por el agente de IA que elijas:
|
|
438
|
+
|
|
439
|
+
| Rol | Que hace | Por defecto |
|
|
440
|
+
|-----|----------|-------------|
|
|
441
|
+
| **hu-reviewer** | Certifica historias de usuario antes de codificar (6 dimensiones, 7 antipatrones) | Auto (media/compleja) |
|
|
442
|
+
| **triage** | Clasifica complejidad, activa roles, auto-simplifica para tareas triviales | **On** |
|
|
443
|
+
| **discover** | Detecta huecos en requisitos (Mom Test, Wendel, JTBD) | Off |
|
|
444
|
+
| **architect** | Disena la arquitectura de la solucion antes de planificar | Off |
|
|
445
|
+
| **planner** | Genera planes de implementacion estructurados | Off |
|
|
446
|
+
| **coder** | Escribe codigo y tests siguiendo metodologia TDD | **Siempre on** |
|
|
447
|
+
| **refactorer** | Mejora la claridad del codigo sin cambiar comportamiento | Off |
|
|
448
|
+
| **sonar** | Analisis estatico SonarQube con quality gate enforcement | On (auto-gestionado) |
|
|
449
|
+
| **impeccable** | Auditoria UI/UX para tareas frontend (a11y, rendimiento, theming) | Auto (frontend) |
|
|
450
|
+
| **reviewer** | Code review con perfiles de exigencia configurables | **Siempre on** |
|
|
451
|
+
| **tester** | Quality gate de tests y verificacion de cobertura | **On** |
|
|
452
|
+
| **security** | Auditoria de seguridad OWASP | **On** |
|
|
453
|
+
| **solomon** | Jefe del pipeline: evalua cada rechazo, anula bloqueos solo de estilo | **On** |
|
|
454
|
+
| **commiter** | Automatizacion de git commit, push y PR tras aprobacion | Off |
|
|
455
|
+
| **audit** | Analisis de salud del codebase solo-lectura (5 dimensiones, scores A-F) | Standalone |
|
|
456
|
+
|
|
457
|
+
## 5 agentes de IA soportados
|
|
458
|
+
|
|
459
|
+
| Agente | CLI | Instalacion |
|
|
460
|
+
|--------|-----|-------------|
|
|
461
|
+
| **Claude** | `claude` | `npm install -g @anthropic-ai/claude-code` |
|
|
462
|
+
| **Codex** | `codex` | `npm install -g @openai/codex` |
|
|
463
|
+
| **Gemini** | `gemini` | Ver [Gemini CLI docs](https://github.com/google-gemini/gemini-cli) |
|
|
464
|
+
| **Aider** | `aider` | `pipx install aider-chat` (o `pip3 install aider-chat`) |
|
|
465
|
+
| **OpenCode** | `opencode` | Ver [OpenCode docs](https://github.com/nicepkg/opencode) |
|
|
466
|
+
|
|
467
|
+
Mezcla y combina. Usa Claude como coder y Codex como reviewer. Karajan auto-detecta agentes instalados durante `kj init`.
|
|
468
|
+
|
|
469
|
+
## Servidor MCP (20 herramientas)
|
|
470
|
+
|
|
471
|
+
Tras `npm install -g karajan-code`, el servidor MCP se auto-registra en Claude y Codex. Config manual si es necesario:
|
|
472
|
+
|
|
473
|
+
```bash
|
|
474
|
+
# Claude: anadir a ~/.claude.json → "mcpServers":
|
|
475
|
+
# { "karajan-mcp": { "command": "karajan-mcp" } }
|
|
476
|
+
|
|
477
|
+
# Codex: anadir a ~/.codex/config.toml → [mcp_servers."karajan-mcp"]
|
|
478
|
+
# command = "karajan-mcp"
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**20 herramientas** disponibles: `kj_run`, `kj_code`, `kj_review`, `kj_plan`, `kj_audit`, `kj_scan`, `kj_doctor`, `kj_config`, `kj_report`, `kj_resume`, `kj_roles`, `kj_agents`, `kj_preflight`, `kj_status`, `kj_init`, `kj_discover`, `kj_triage`, `kj_researcher`, `kj_architect`, `kj_impeccable`.
|
|
482
|
+
|
|
483
|
+
Usa `kj-tail` en un terminal separado para ver lo que el pipeline esta haciendo en tiempo real (ver [Tres formas de usar Karajan](#tres-formas-de-usar-karajan)).
|
|
484
|
+
|
|
485
|
+
## La arquitectura de roles
|
|
486
|
+
|
|
487
|
+
Cada rol en Karajan esta definido por un fichero markdown: un documento plano que describe como debe comportarse el agente, que revisar y como es un buen output.
|
|
488
|
+
|
|
489
|
+
```
|
|
490
|
+
.karajan/roles/ # Overrides de proyecto (opcional)
|
|
491
|
+
~/.karajan/roles/ # Overrides globales (opcional)
|
|
492
|
+
templates/roles/ # Defaults built-in (incluidos en el paquete)
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Puedes sobreescribir cualquier rol built-in o crear nuevos. Sin codigo. Los agentes leen los ficheros de rol y adaptan su comportamiento. Codifica las convenciones de tu equipo, reglas de dominio y estandares de calidad, y cada ejecucion de Karajan los aplica automaticamente.
|
|
496
|
+
|
|
497
|
+
Usa `kj roles show <rol>` para inspeccionar cualquier template.
|
|
498
|
+
|
|
499
|
+
## Zero-config por diseño
|
|
500
|
+
|
|
501
|
+
Karajan auto-detecta y auto-configura todo lo que puede:
|
|
502
|
+
|
|
503
|
+
- **TDD**: Detecta framework de tests (vitest, jest, mocha) y auto-activa TDD
|
|
504
|
+
- **Bootstrap gate**: Valida todos los prerequisitos (repo git, remote, config, agentes, SonarQube) antes de ejecutar. Falla con instrucciones claras, nunca degrada silenciosamente
|
|
505
|
+
- **Injection guard**: Escanea diffs en busca de prompt injection antes del review de IA. Detecta directivas de override, Unicode invisible, payloads en comentarios sobredimensionados. Tambien como GitHub Action en cada PR
|
|
506
|
+
- **SonarQube**: Auto-arranca contenedor Docker, genera config si falta
|
|
507
|
+
- **Complejidad del pipeline**: Triage clasifica la tarea, las triviales saltan el loop del reviewer
|
|
508
|
+
- **Caidas de proveedor**: Reintentos en 500/502/503/504 con backoff (igual que rate limits)
|
|
509
|
+
- **Cobertura**: Fallos de quality gate solo por cobertura se tratan como advisory
|
|
510
|
+
- **HU Manager**: Las tareas complejas se descomponen automaticamente en historias de usuario formales con dependencias. Cada HU se ejecuta como su propio sub-pipeline con seguimiento de estado visible en el HU Board
|
|
511
|
+
|
|
512
|
+
Sin configuracion por proyecto requerida. Si quieres personalizar, la config se apila: sesion > proyecto > global.
|
|
513
|
+
|
|
514
|
+
## Por qué JavaScript vanilla?
|
|
515
|
+
|
|
516
|
+
No es nostalgia ni cabezonería. Es que llevo usando JavaScript desde 1997, cuando Brendan Eich lo creó en una semana y nos cambió la vida a los que hacíamos webs. Conozco sus tripas, sus bugs, sus rarezas. Y sé que quien conoce JS de verdad convierte esos bugs en features. TypeScript existe para que developers acostumbrados a lenguajes fuertemente tipados no entren en pánico al ver JS. Respeto eso. Pero yo no lo necesito. Los tests son mi seguridad de tipos. JSDoc y un buen IDE son mi intellisense. Y no tener un compilador entre el código y yo es lo que me permite moverme a 57 releases en 45 días sin miedo.
|
|
517
|
+
|
|
518
|
+
[Por qué JavaScript vanilla: la versión larga](why-vanilla-js.md)
|
|
519
|
+
|
|
520
|
+
## Compañeros recomendados
|
|
521
|
+
|
|
522
|
+
| Herramienta | Por que |
|
|
523
|
+
|-------------|---------|
|
|
524
|
+
| [**RTK**](https://github.com/rtk-ai/rtk) | Reduce consumo de tokens 60-90% en salidas de comandos Bash |
|
|
525
|
+
| [**Planning Game MCP**](https://github.com/AgenteIA-Geniova/planning-game-mcp) | Gestion agil de proyectos (tareas, sprints, estimacion), nativo XP |
|
|
526
|
+
| [**GitHub MCP**](https://github.com/modelcontextprotocol/servers/tree/main/src/github) | Crear PRs, gestionar issues directamente desde el agente |
|
|
527
|
+
| [**Chrome DevTools MCP**](https://github.com/anthropics/anthropic-quickstarts/tree/main/chrome-devtools-mcp) | Verificar cambios de UI visualmente tras modificar frontend |
|
|
528
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
337
529
|
|
|
338
530
|
## Contribuir
|
|
339
531
|
|
|
@@ -341,7 +533,8 @@ Usa `kj roles show <rol>` para inspeccionar cualquier template. Crea un override
|
|
|
341
533
|
git clone https://github.com/manufosela/karajan-code.git
|
|
342
534
|
cd karajan-code
|
|
343
535
|
npm install
|
|
344
|
-
|
|
536
|
+
<<<<<<< HEAD
|
|
537
|
+
npm test # Ejecutar 1040+ tests con Vitest
|
|
345
538
|
npm run test:watch # Modo watch
|
|
346
539
|
npm run validate # Lint + test
|
|
347
540
|
```
|
|
@@ -349,11 +542,29 @@ npm run validate # Lint + test
|
|
|
349
542
|
- Tests: [Vitest](https://vitest.dev/)
|
|
350
543
|
- Commits: [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `refactor:`, `test:`, `chore:`)
|
|
351
544
|
- PRs: un solo proposito por PR, < 300 lineas cambiadas
|
|
545
|
+
=======
|
|
546
|
+
npm test # Ejecutar 2093 tests con Vitest
|
|
547
|
+
npm run validate # Lint + test
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
Issues y pull requests bienvenidos. Si algo no funciona como esta documentado, [abre un issue](https://github.com/manufosela/karajan-code/issues). Es la contribucion mas util en esta fase.
|
|
551
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
352
552
|
|
|
353
553
|
## Enlaces
|
|
354
554
|
|
|
355
555
|
- [Web](https://karajancode.com) (tambien [kj-code.com](https://kj-code.com))
|
|
556
|
+
<<<<<<< HEAD
|
|
356
557
|
- [Changelog](../CHANGELOG.md)
|
|
357
558
|
- [Politica de seguridad](../SECURITY.md)
|
|
358
559
|
- [Licencia (AGPL-3.0)](../LICENSE)
|
|
359
560
|
- [Issues](https://github.com/manufosela/karajan-code/issues)
|
|
561
|
+
=======
|
|
562
|
+
- [Documentacion completa](https://karajancode.com/docs/)
|
|
563
|
+
- [Changelog](../CHANGELOG.md)
|
|
564
|
+
- [Politica de seguridad](../SECURITY.md)
|
|
565
|
+
- [Licencia (AGPL-3.0)](../LICENSE)
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
Construido por [@manufosela](https://github.com/manufosela). Head of Engineering en Geniova Technologies, co-organizador de NodeJS Madrid, autor de [Liderazgo Afectivo](https://www.liderazgoafectivo.com). 90+ paquetes npm publicados.
|
|
570
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
package/package.json
CHANGED
|
@@ -5,13 +5,21 @@ import { execFileSync } from "node:child_process";
|
|
|
5
5
|
|
|
6
6
|
const cache = new Map();
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
const isWin = process.platform === "win32";
|
|
9
|
+
|
|
10
|
+
const SEARCH_DIRS = isWin
|
|
11
|
+
? [
|
|
12
|
+
path.join(os.homedir(), "AppData", "Roaming", "npm"),
|
|
13
|
+
path.join(os.homedir(), "AppData", "Local", "npm"),
|
|
14
|
+
path.join(os.homedir(), ".opencode", "bin"),
|
|
15
|
+
]
|
|
16
|
+
: [
|
|
17
|
+
"/opt/node/bin",
|
|
18
|
+
path.join(os.homedir(), ".npm-global", "bin"),
|
|
19
|
+
"/usr/local/bin",
|
|
20
|
+
path.join(os.homedir(), ".local", "bin"),
|
|
21
|
+
path.join(os.homedir(), ".opencode", "bin"),
|
|
22
|
+
];
|
|
15
23
|
|
|
16
24
|
function getNvmDirs() {
|
|
17
25
|
const nvmDir = process.env.NVM_DIR || path.join(os.homedir(), ".nvm");
|
|
@@ -26,13 +34,14 @@ function getNvmDirs() {
|
|
|
26
34
|
export function resolveBin(name) {
|
|
27
35
|
if (cache.has(name)) return cache.get(name);
|
|
28
36
|
|
|
29
|
-
// 1. Try system PATH via `which`
|
|
37
|
+
// 1. Try system PATH via `which` (Unix) or `where` (Windows)
|
|
30
38
|
try {
|
|
31
|
-
const
|
|
39
|
+
const whichCmd = isWin ? "where" : "which";
|
|
40
|
+
const resolved = execFileSync(whichCmd, [name], {
|
|
32
41
|
encoding: "utf8",
|
|
33
42
|
timeout: 3000,
|
|
34
43
|
stdio: ["pipe", "pipe", "pipe"],
|
|
35
|
-
}).trim();
|
|
44
|
+
}).trim().split(/\r?\n/)[0];
|
|
36
45
|
if (resolved) {
|
|
37
46
|
cache.set(name, resolved);
|
|
38
47
|
return resolved;
|
|
@@ -43,11 +52,14 @@ export function resolveBin(name) {
|
|
|
43
52
|
|
|
44
53
|
// 2. Search known directories
|
|
45
54
|
const dirs = [...SEARCH_DIRS, ...getNvmDirs()];
|
|
55
|
+
const extensions = isWin ? ["", ".cmd", ".exe", ".bat"] : [""];
|
|
46
56
|
for (const dir of dirs) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
for (const ext of extensions) {
|
|
58
|
+
const candidate = path.join(dir, name + ext);
|
|
59
|
+
if (existsSync(candidate)) {
|
|
60
|
+
cache.set(name, candidate);
|
|
61
|
+
return candidate;
|
|
62
|
+
}
|
|
51
63
|
}
|
|
52
64
|
}
|
|
53
65
|
|
package/src/commands/code.js
CHANGED
|
@@ -13,7 +13,9 @@ export async function codeCommand({ task, config, logger }) {
|
|
|
13
13
|
if (config.coder_rules) {
|
|
14
14
|
try {
|
|
15
15
|
coderRules = await fs.readFile(config.coder_rules, "utf8");
|
|
16
|
-
} catch {
|
|
16
|
+
} catch {
|
|
17
|
+
try { coderRules = await fs.readFile("coder-rules.md", "utf8"); } catch { /* no coder rules file */ }
|
|
18
|
+
}
|
|
17
19
|
}
|
|
18
20
|
const prompt = buildCoderPrompt({ task, coderRules, methodology: config.development?.methodology || "tdd" });
|
|
19
21
|
const onOutput = ({ line }) => process.stdout.write(`${line}\n`);
|
package/src/commands/init.js
CHANGED
|
@@ -128,7 +128,7 @@ async function ensureReviewRules(reviewRulesPath, logger) {
|
|
|
128
128
|
"# Review Rules\n\n- Focus on security, correctness, and test coverage.\n",
|
|
129
129
|
"utf8"
|
|
130
130
|
);
|
|
131
|
-
logger.info("Created review-rules.md");
|
|
131
|
+
logger.info("Created .karajan/review-rules.md");
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
async function ensureCoderRules(coderRulesPath, logger) {
|
|
@@ -150,7 +150,7 @@ async function ensureCoderRules(coderRulesPath, logger) {
|
|
|
150
150
|
].join("\n");
|
|
151
151
|
}
|
|
152
152
|
await fs.writeFile(coderRulesPath, content, "utf8");
|
|
153
|
-
logger.info("Created coder-rules.md");
|
|
153
|
+
logger.info("Created .karajan/coder-rules.md");
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
async function setupSonarQube(config, logger) {
|
|
@@ -271,8 +271,10 @@ export async function initCommand({ logger, flags = {} }) {
|
|
|
271
271
|
logger.info(`Ensured ${karajanHome} exists`);
|
|
272
272
|
|
|
273
273
|
const configPath = getConfigPath();
|
|
274
|
-
const
|
|
275
|
-
|
|
274
|
+
const karajanDir = path.join(process.cwd(), ".karajan");
|
|
275
|
+
await ensureDir(karajanDir);
|
|
276
|
+
const reviewRulesPath = path.resolve(karajanDir, "review-rules.md");
|
|
277
|
+
const coderRulesPath = path.resolve(karajanDir, "coder-rules.md");
|
|
276
278
|
|
|
277
279
|
const { config, exists: configExists } = await loadConfig();
|
|
278
280
|
const interactive = flags.noInteractive !== true && isTTY();
|
package/src/config.js
CHANGED
|
@@ -39,8 +39,8 @@ const DEFAULTS = {
|
|
|
39
39
|
review_mode: "standard",
|
|
40
40
|
max_iterations: 5,
|
|
41
41
|
max_budget_usd: null,
|
|
42
|
-
review_rules: "
|
|
43
|
-
coder_rules: "
|
|
42
|
+
review_rules: "./.karajan/review-rules.md",
|
|
43
|
+
coder_rules: "./.karajan/coder-rules.md",
|
|
44
44
|
base_branch: "main",
|
|
45
45
|
coder_options: { model: null, auto_approve: true, fallback_coder: null },
|
|
46
46
|
reviewer_options: {
|