karajan-code 1.38.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 +5 -4
- package/docs/README.es.md +321 -3
- package/package.json +1 -1
- package/src/commands/code.js +3 -1
- package/src/commands/init.js +6 -4
- package/src/config.js +2 -2
- package/src/mcp/server-handlers.js +3 -1
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,6 +274,7 @@ 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
|
|
|
@@ -298,7 +299,7 @@ Not nostalgia, not stubbornness. I've been using JavaScript since 1997, when Bre
|
|
|
298
299
|
git clone https://github.com/manufosela/karajan-code.git
|
|
299
300
|
cd karajan-code
|
|
300
301
|
npm install
|
|
301
|
-
npm test # Run
|
|
302
|
+
npm test # Run 2093 tests with Vitest
|
|
302
303
|
npm run validate # Lint + test
|
|
303
304
|
```
|
|
304
305
|
|
|
@@ -314,4 +315,4 @@ Issues and pull requests welcome. If something doesn't work as documented, [open
|
|
|
314
315
|
|
|
315
316
|
---
|
|
316
317
|
|
|
317
|
-
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,27 +1,151 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
+
<<<<<<< HEAD
|
|
3
|
+
<img src="karajan-code-logo-small.png" alt="Karajan Code" width="200">
|
|
4
|
+
=======
|
|
2
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
|
|
13
|
+
Orquestador local multi-agente con TDD, SonarQube y revision de codigo automatizada.
|
|
14
|
+
=======
|
|
8
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
|
+
=======
|
|
13
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
|
|
14
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>
|
|
15
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>
|
|
16
27
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg" alt="Node.js"></a>
|
|
17
28
|
</p>
|
|
18
29
|
|
|
19
30
|
<p align="center">
|
|
31
|
+
<<<<<<< HEAD
|
|
32
|
+
<a href="../README.md">Read in English</a>
|
|
33
|
+
=======
|
|
20
34
|
<a href="../README.md">Read in English</a> · <a href="https://karajancode.com">Documentacion</a>
|
|
35
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
21
36
|
</p>
|
|
22
37
|
|
|
23
38
|
---
|
|
24
39
|
|
|
40
|
+
<<<<<<< HEAD
|
|
41
|
+
## Que es Karajan Code?
|
|
42
|
+
|
|
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.
|
|
44
|
+
|
|
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.
|
|
46
|
+
|
|
47
|
+
**Caracteristicas principales:**
|
|
48
|
+
- **Pipeline multi-agente** con 11 roles configurables
|
|
49
|
+
- **5 agentes de IA soportados**: Claude, Codex, Gemini, Aider, OpenCode
|
|
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.
|
|
71
|
+
|
|
72
|
+
## Requisitos
|
|
73
|
+
|
|
74
|
+
- **Node.js** >= 18
|
|
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
|
|
76
|
+
- Al menos un agente de IA instalado: Claude, Codex, Gemini o Aider
|
|
77
|
+
|
|
78
|
+
## Pipeline
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
triage? ─> researcher? ─> planner? ─> coder ─> refactorer? ─> sonar? ─> reviewer ─> tester? ─> security? ─> commiter?
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Rol | Descripcion | Por defecto |
|
|
85
|
+
|-----|-------------|-------------|
|
|
86
|
+
| **triage** | Director de pipeline — analiza la complejidad y activa roles dinamicamente | **On** |
|
|
87
|
+
| **researcher** | Investiga el contexto del codebase antes de planificar | Off |
|
|
88
|
+
| **planner** | Genera planes de implementacion estructurados | Off |
|
|
89
|
+
| **coder** | Escribe codigo y tests siguiendo metodologia TDD | **Siempre activo** |
|
|
90
|
+
| **refactorer** | Mejora la claridad del codigo sin cambiar comportamiento | Off |
|
|
91
|
+
| **sonar** | Ejecuta analisis estatico SonarQube y quality gates | On (si configurado) |
|
|
92
|
+
| **reviewer** | Revision de codigo con perfiles de exigencia configurables | **Siempre activo** |
|
|
93
|
+
| **tester** | Quality gate de tests y verificacion de cobertura | **On** |
|
|
94
|
+
| **security** | Auditoria de seguridad OWASP | **On** |
|
|
95
|
+
| **solomon** | Supervisor de sesion — monitoriza salud de iteraciones con 5 reglas (incl. reviewer overreach), media reviews estancados, escala ante anomalias | **On** |
|
|
96
|
+
| **commiter** | Automatizacion de git commit, push y PR tras aprobacion | Off |
|
|
97
|
+
|
|
98
|
+
Los roles marcados con `?` son opcionales y se pueden activar por ejecucion o via config.
|
|
99
|
+
|
|
100
|
+
## Instalacion
|
|
101
|
+
|
|
102
|
+
### Desde npm (recomendado)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm install -g karajan-code
|
|
106
|
+
kj init
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Desde codigo fuente
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
git clone https://github.com/manufosela/karajan-code.git
|
|
113
|
+
cd karajan-code
|
|
114
|
+
./scripts/install.sh
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Setup no interactivo (CI/automatizacion)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
./scripts/install.sh \
|
|
121
|
+
--non-interactive \
|
|
122
|
+
--kj-home /ruta/a/.karajan \
|
|
123
|
+
--sonar-host http://localhost:9000 \
|
|
124
|
+
--sonar-token "$KJ_SONAR_TOKEN" \
|
|
125
|
+
--coder claude \
|
|
126
|
+
--reviewer codex \
|
|
127
|
+
--run-doctor true
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Setup multi-instancia
|
|
131
|
+
|
|
132
|
+
Guias completas: [`docs/multi-instance.md`](multi-instance.md) | [`docs/install-two-instances.md`](install-two-instances.md)
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
./scripts/setup-multi-instance.sh
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Agentes soportados
|
|
139
|
+
|
|
140
|
+
| Agente | CLI | Instalacion |
|
|
141
|
+
|--------|-----|-------------|
|
|
142
|
+
| **Claude** | `claude` | `npm install -g @anthropic-ai/claude-code` |
|
|
143
|
+
| **Codex** | `codex` | `npm install -g @openai/codex` |
|
|
144
|
+
| **Gemini** | `gemini` | Ver [Gemini CLI docs](https://github.com/google-gemini/gemini-cli) |
|
|
145
|
+
| **Aider** | `aider` | `pipx install aider-chat` (o `pip3 install aider-chat`) |
|
|
146
|
+
|
|
147
|
+
`kj init` auto-detecta los agentes instalados. Si solo hay uno disponible, se asigna a todos los roles automaticamente.
|
|
148
|
+
=======
|
|
25
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.
|
|
26
150
|
|
|
27
151
|
## Que es Karajan?
|
|
@@ -56,11 +180,26 @@ npm install -g karajan-code
|
|
|
56
180
|
```
|
|
57
181
|
|
|
58
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
|
|
59
184
|
|
|
60
185
|
## Tres formas de usar Karajan
|
|
61
186
|
|
|
62
187
|
Karajan instala **tres comandos**: `kj`, `kj-tail` y `karajan-mcp`.
|
|
63
188
|
|
|
189
|
+
<<<<<<< HEAD
|
|
190
|
+
### 1. CLI — Directamente desde terminal
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
kj run "Implementar autenticacion de usuario con JWT"
|
|
194
|
+
kj code "Anadir validacion de inputs al formulario de registro"
|
|
195
|
+
kj review "Revisar los cambios de autenticacion"
|
|
196
|
+
kj plan "Refactorizar la capa de base de datos"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 2. MCP — Dentro de tu agente de IA
|
|
200
|
+
|
|
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
|
+
=======
|
|
64
203
|
### 1. CLI: directamente desde terminal
|
|
65
204
|
|
|
66
205
|
Ejecuta Karajan directamente. Ves la salida completa del pipeline en tiempo real.
|
|
@@ -76,11 +215,19 @@ kj plan "Refactorizar la capa de base de datos" # Planificar
|
|
|
76
215
|
### 2. MCP: dentro de tu agente de IA
|
|
77
216
|
|
|
78
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
|
|
79
219
|
|
|
80
220
|
```
|
|
81
221
|
Tu → Claude Code → kj_run (via MCP) → triage → coder → sonar → reviewer → tester → security
|
|
82
222
|
```
|
|
83
223
|
|
|
224
|
+
<<<<<<< HEAD
|
|
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.
|
|
226
|
+
|
|
227
|
+
### 3. kj-tail — Monitorizar desde otro terminal
|
|
228
|
+
|
|
229
|
+
**La herramienta companera.** Abre un segundo terminal en el **mismo directorio del proyecto** donde esta trabajando tu agente de IA:
|
|
230
|
+
=======
|
|
84
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.
|
|
85
232
|
|
|
86
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.
|
|
@@ -88,14 +235,21 @@ El servidor MCP se auto-registra durante `npm install`. Tu agente de IA ve 20 he
|
|
|
88
235
|
### 3. kj-tail: monitorizar desde otro terminal
|
|
89
236
|
|
|
90
237
|
**La herramienta compañera.** Abre un segundo terminal en el **mismo directorio del proyecto** donde esta trabajando tu agente de IA:
|
|
238
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
91
239
|
|
|
92
240
|
```bash
|
|
93
241
|
kj-tail
|
|
94
242
|
```
|
|
95
243
|
|
|
244
|
+
<<<<<<< HEAD
|
|
245
|
+
Veras la salida del pipeline en vivo — etapas, resultados, iteraciones, errores — tal como ocurren.
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
=======
|
|
96
249
|
Veras la salida del pipeline en vivo (etapas, resultados, iteraciones, errores) tal como ocurren. La misma vista que ejecutar `kj run` directamente.
|
|
97
250
|
|
|
98
251
|
```
|
|
252
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
99
253
|
kj-tail # Seguir pipeline en tiempo real (por defecto)
|
|
100
254
|
kj-tail -v # Verbose: incluir heartbeats de agente y presupuesto
|
|
101
255
|
kj-tail -t # Mostrar timestamps
|
|
@@ -118,7 +272,11 @@ kj-tail --help # Todas las opciones
|
|
|
118
272
|
│ prioritaria │ │ ├─ 🔬 Researcher ✅ │
|
|
119
273
|
│ │ │ ├─ 🧠 Planner ✅ │
|
|
120
274
|
│ (Claude llama a kj_run │ │ ├─ 🔨 Coder ✅ │
|
|
275
|
+
<<<<<<< HEAD
|
|
276
|
+
│ via MCP — solo ves │ │ ├─ 🔍 Sonar: OK │
|
|
277
|
+
=======
|
|
121
278
|
│ via MCP, solo ves │ │ ├─ 🔍 Sonar: OK │
|
|
279
|
+
>>>>>>> 8792e49efcdc75995e024d81339b100c7b253920
|
|
122
280
|
│ el resultado final) │ │ ├─ 👁️ Reviewer ❌ │
|
|
123
281
|
│ │ │ ├─ ⚖️ Solomon: 2 cond. │
|
|
124
282
|
│ │ │ ├─ 🔨 Coder (iter 2) ✅ │
|
|
@@ -128,6 +286,146 @@ kj-tail --help # Todas las opciones
|
|
|
128
286
|
└──────────────────────────┘ └──────────────────────────┘
|
|
129
287
|
```
|
|
130
288
|
|
|
289
|
+
<<<<<<< HEAD
|
|
290
|
+
**Ejemplo con pipeline completo** — tarea compleja con todos los roles:
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
┌─ Terminal 1 ─────────────────────────────────────────────────────────────────┐
|
|
294
|
+
│ │
|
|
295
|
+
│ $ claude │
|
|
296
|
+
│ │
|
|
297
|
+
│ > Construye una API REST para un sistema de reservas. Requisitos: │
|
|
298
|
+
│ > - Express + TypeScript con validacion Zod en cada endpoint │
|
|
299
|
+
│ > - Endpoints: POST /bookings, GET /bookings/:id, │
|
|
300
|
+
│ > PATCH /bookings/:id/cancel │
|
|
301
|
+
│ > - Una reserva tiene: id, guestName, roomType (standard|suite|penthouse), │
|
|
302
|
+
│ > checkIn, checkOut, status (confirmed|cancelled) │
|
|
303
|
+
│ > - Validar: checkOut posterior a checkIn, sin fechas pasadas, │
|
|
304
|
+
│ > roomType debe ser un valor valido del enum │
|
|
305
|
+
│ > - Cancelar devuelve 409 si ya esta cancelada │
|
|
306
|
+
│ > - Usa TDD. Ejecutalo con Karajan con architect y planner activos, │
|
|
307
|
+
│ > modo paranoid. Coder claude, reviewer codex. │
|
|
308
|
+
│ │
|
|
309
|
+
│ Claude llama a kj_run via MCP con: │
|
|
310
|
+
│ --enable-architect --enable-researcher --enable-planner --mode paranoid │
|
|
311
|
+
│ │
|
|
312
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
313
|
+
|
|
314
|
+
┌─ Terminal 2: kj-tail ────────────────────────────────────────────────────────┐
|
|
315
|
+
│ │
|
|
316
|
+
│ kj-tail v1.36.1 — .kj/run.log │
|
|
317
|
+
│ │
|
|
318
|
+
│ ├─ 📋 Triage: medium (sw) — activando researcher, architect, planner │
|
|
319
|
+
│ ├─ ⚙️ Preflight passed — all checks OK │
|
|
320
|
+
│ ├─ 🔬 Researcher: 8 ficheros, 3 patrones, 5 restricciones │
|
|
321
|
+
│ ├─ 🏗️ Architect: diseno 3 capas (routes → service → validators) │
|
|
322
|
+
│ ├─ 🧠 Planner: 6 pasos — tests primero, luego rutas, servicio, validadores │
|
|
323
|
+
│ │ │
|
|
324
|
+
│ ▶ Iteracion 1/5 │
|
|
325
|
+
│ ├─ 🔨 Coder (claude): 3 endpoints + 18 tests │
|
|
326
|
+
│ ├─ 📋 TDD: PASS (3 src, 2 test) │
|
|
327
|
+
│ ├─ 🔍 Sonar: Quality gate OK │
|
|
328
|
+
│ ├─ 👁️ Reviewer (codex): REJECTED (2 blocking) │
|
|
329
|
+
│ │ "Falta 404 para GET booking inexistente" │
|
|
330
|
+
│ │ "Endpoint cancel sin test de idempotencia" │
|
|
331
|
+
│ ├─ ⚖️ Solomon: approve_with_conditions (2 condiciones) │
|
|
332
|
+
│ │ "Anadir respuesta 404 y test para GET /bookings/:id con id desconocido" │
|
|
333
|
+
│ │ "Anadir test: cancelar reserva ya cancelada devuelve 409, no 500" │
|
|
334
|
+
│ │ │
|
|
335
|
+
│ ▶ Iteracion 2/5 │
|
|
336
|
+
│ ├─ 🔨 Coder (claude): corregido — 22 tests │
|
|
337
|
+
│ ├─ 📋 TDD: PASS │
|
|
338
|
+
│ ├─ 🔍 Sonar: OK │
|
|
339
|
+
│ ├─ 👁️ Reviewer (codex): APPROVED │
|
|
340
|
+
│ ├─ 🧪 Tester: passed — cobertura 94%, 22 tests │
|
|
341
|
+
│ ├─ 🔒 Security: passed — 0 criticos, 1 bajo (helmet recomendado) │
|
|
342
|
+
│ ├─ 📊 Audit: CERTIFIED (3 advertencias) │
|
|
343
|
+
│ │ │
|
|
344
|
+
│ 🏁 Resultado: APPROVED │
|
|
345
|
+
│ 🔬 Investigacion: 8 ficheros, 3 patrones │
|
|
346
|
+
│ 🗺 Plan: 6 pasos (tests primero) │
|
|
347
|
+
│ 🧪 Cobertura: 94%, 22 tests │
|
|
348
|
+
│ 🔒 Seguridad: OK │
|
|
349
|
+
│ 🔍 Sonar: OK │
|
|
350
|
+
│ 💰 Presupuesto: $0.42 (claude: $0.38, codex: $0.04) │
|
|
351
|
+
│ │
|
|
352
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
## Comandos CLI
|
|
356
|
+
|
|
357
|
+
Consulta la [documentacion completa de comandos](../README.md#cli-commands) en el README principal (ingles). Resumen:
|
|
358
|
+
|
|
359
|
+
| Comando | Descripcion |
|
|
360
|
+
|---------|-------------|
|
|
361
|
+
| `kj init` | Wizard interactivo de configuracion |
|
|
362
|
+
| `kj run <task>` | Pipeline completo: coder → sonar → reviewer |
|
|
363
|
+
| `kj code <task>` | Solo coder (sin revision) |
|
|
364
|
+
| `kj review <task>` | Solo reviewer (sobre diff actual) |
|
|
365
|
+
| `kj plan <task>` | Generar plan de implementacion |
|
|
366
|
+
| `kj scan` | Ejecutar analisis SonarQube |
|
|
367
|
+
| `kj doctor` | Verificar entorno (git, Docker, agentes, SonarQube) |
|
|
368
|
+
| `kj config` | Mostrar configuracion actual |
|
|
369
|
+
| `kj report` | Informes de sesion con tracking de presupuesto |
|
|
370
|
+
| `kj resume <id>` | Reanudar sesion pausada |
|
|
371
|
+
| `kj roles` | Inspeccionar roles y templates del pipeline |
|
|
372
|
+
| `kj sonar` | Gestionar contenedor Docker de SonarQube |
|
|
373
|
+
|
|
374
|
+
## Servidor MCP
|
|
375
|
+
|
|
376
|
+
Karajan Code expone un servidor MCP para integracion con cualquier host compatible (Claude, Codex, agentes custom).
|
|
377
|
+
|
|
378
|
+
Tras `npm install -g karajan-code`, el servidor MCP se auto-registra en las configs de Claude y Codex. Config manual:
|
|
379
|
+
|
|
380
|
+
```json
|
|
381
|
+
{
|
|
382
|
+
"mcpServers": {
|
|
383
|
+
"karajan-mcp": {
|
|
384
|
+
"command": "karajan-mcp"
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Herramientas MCP
|
|
391
|
+
|
|
392
|
+
| Herramienta | Descripcion |
|
|
393
|
+
|-------------|-------------|
|
|
394
|
+
| `kj_init` | Inicializar config y SonarQube |
|
|
395
|
+
| `kj_doctor` | Verificar dependencias del sistema |
|
|
396
|
+
| `kj_config` | Mostrar configuracion |
|
|
397
|
+
| `kj_scan` | Ejecutar analisis SonarQube |
|
|
398
|
+
| `kj_run` | Ejecutar pipeline completo (con notificaciones de progreso en tiempo real) |
|
|
399
|
+
| `kj_resume` | Reanudar sesion pausada |
|
|
400
|
+
| `kj_report` | Leer informes de sesion (soporta `--trace`) |
|
|
401
|
+
| `kj_roles` | Listar roles o mostrar templates |
|
|
402
|
+
| `kj_code` | Modo solo coder |
|
|
403
|
+
| `kj_review` | Modo solo reviewer |
|
|
404
|
+
| `kj_plan` | Generar plan de implementacion con telemetria heartbeat/stall y diagnostico mas claro |
|
|
405
|
+
|
|
406
|
+
### MCPs complementarios recomendados
|
|
407
|
+
|
|
408
|
+
Karajan Code funciona perfectamente solo, pero combinarlo con estos servidores MCP le da a tu agente un entorno de desarrollo completo:
|
|
409
|
+
|
|
410
|
+
| MCP | Para que | Caso de uso |
|
|
411
|
+
|-----|----------|-------------|
|
|
412
|
+
| [**Planning Game MCP**](https://github.com/AgenteIA-Geniova/planning-game-mcp) | Puente MCP para [Planning Game](https://github.com/AgenteIA-Geniova/planning-game), gestor agil open-source (tareas, sprints, estimacion, XP). Solo necesario si usas Planning Game | `kj_run` con `--pg-task` obtiene contexto completo de la tarea y actualiza el estado al completar |
|
|
413
|
+
| [**GitHub MCP**](https://github.com/modelcontextprotocol/servers/tree/main/src/github) | Crear PRs, gestionar issues, leer repos desde el agente | Combinar con `--auto-push` para flujo completo: codigo → revision → push → PR |
|
|
414
|
+
| [**Serena**](https://github.com/oramasearch/serena) | Navegacion a nivel de simbolo (find references, go-to-definition) para proyectos JS/TS | Activar con `--enable-serena` para inyectar contexto de simbolos en prompts de coder/reviewer |
|
|
415
|
+
| [**Chrome DevTools MCP**](https://github.com/anthropics/anthropic-quickstarts/tree/main/chrome-devtools-mcp) | Automatizacion de navegador, screenshots, inspeccion de consola/red | Verificar cambios de UI visualmente tras modificar codigo frontend |
|
|
416
|
+
|
|
417
|
+
## Templates de roles
|
|
418
|
+
|
|
419
|
+
Cada rol tiene un template `.md` con instrucciones que el agente de IA sigue. Los templates se resuelven en orden de prioridad:
|
|
420
|
+
|
|
421
|
+
1. **Override de proyecto**: `.karajan/roles/<rol>.md` (en la raiz del proyecto)
|
|
422
|
+
2. **Override de usuario**: `$KJ_HOME/roles/<rol>.md`
|
|
423
|
+
3. **Built-in**: `templates/roles/<rol>.md` (incluido en el paquete)
|
|
424
|
+
|
|
425
|
+
Usa `kj roles show <rol>` para inspeccionar cualquier template. Crea un override de proyecto para personalizar el comportamiento por proyecto.
|
|
426
|
+
|
|
427
|
+
**Variantes de revision**: `reviewer-strict`, `reviewer-relaxed`, `reviewer-paranoid` — seleccionables via flag `--mode` o config `review_mode`.
|
|
428
|
+
=======
|
|
131
429
|
[**Ver la demo completa del pipeline**](https://karajancode.com#demo): triage, arquitectura, TDD, SonarQube, code review, arbitraje de Solomon, auditoria de seguridad.
|
|
132
430
|
|
|
133
431
|
## El pipeline
|
|
@@ -140,7 +438,7 @@ hu-reviewer? → triage → discover? → architect? → planner? → coder →
|
|
|
140
438
|
|
|
141
439
|
| Rol | Que hace | Por defecto |
|
|
142
440
|
|-----|----------|-------------|
|
|
143
|
-
| **hu-reviewer** | Certifica historias de usuario antes de codificar (6 dimensiones, 7 antipatrones) |
|
|
441
|
+
| **hu-reviewer** | Certifica historias de usuario antes de codificar (6 dimensiones, 7 antipatrones) | Auto (media/compleja) |
|
|
144
442
|
| **triage** | Clasifica complejidad, activa roles, auto-simplifica para tareas triviales | **On** |
|
|
145
443
|
| **discover** | Detecta huecos en requisitos (Mom Test, Wendel, JTBD) | Off |
|
|
146
444
|
| **architect** | Disena la arquitectura de la solucion antes de planificar | Off |
|
|
@@ -209,6 +507,7 @@ Karajan auto-detecta y auto-configura todo lo que puede:
|
|
|
209
507
|
- **Complejidad del pipeline**: Triage clasifica la tarea, las triviales saltan el loop del reviewer
|
|
210
508
|
- **Caidas de proveedor**: Reintentos en 500/502/503/504 con backoff (igual que rate limits)
|
|
211
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
|
|
212
511
|
|
|
213
512
|
Sin configuracion por proyecto requerida. Si quieres personalizar, la config se apila: sesion > proyecto > global.
|
|
214
513
|
|
|
@@ -226,6 +525,7 @@ No es nostalgia ni cabezonería. Es que llevo usando JavaScript desde 1997, cuan
|
|
|
226
525
|
| [**Planning Game MCP**](https://github.com/AgenteIA-Geniova/planning-game-mcp) | Gestion agil de proyectos (tareas, sprints, estimacion), nativo XP |
|
|
227
526
|
| [**GitHub MCP**](https://github.com/modelcontextprotocol/servers/tree/main/src/github) | Crear PRs, gestionar issues directamente desde el agente |
|
|
228
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
|
|
229
529
|
|
|
230
530
|
## Contribuir
|
|
231
531
|
|
|
@@ -233,15 +533,32 @@ No es nostalgia ni cabezonería. Es que llevo usando JavaScript desde 1997, cuan
|
|
|
233
533
|
git clone https://github.com/manufosela/karajan-code.git
|
|
234
534
|
cd karajan-code
|
|
235
535
|
npm install
|
|
236
|
-
|
|
536
|
+
<<<<<<< HEAD
|
|
537
|
+
npm test # Ejecutar 1040+ tests con Vitest
|
|
538
|
+
npm run test:watch # Modo watch
|
|
539
|
+
npm run validate # Lint + test
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
- Tests: [Vitest](https://vitest.dev/)
|
|
543
|
+
- Commits: [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `refactor:`, `test:`, `chore:`)
|
|
544
|
+
- PRs: un solo proposito por PR, < 300 lineas cambiadas
|
|
545
|
+
=======
|
|
546
|
+
npm test # Ejecutar 2093 tests con Vitest
|
|
237
547
|
npm run validate # Lint + test
|
|
238
548
|
```
|
|
239
549
|
|
|
240
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
|
|
241
552
|
|
|
242
553
|
## Enlaces
|
|
243
554
|
|
|
244
555
|
- [Web](https://karajancode.com) (tambien [kj-code.com](https://kj-code.com))
|
|
556
|
+
<<<<<<< HEAD
|
|
557
|
+
- [Changelog](../CHANGELOG.md)
|
|
558
|
+
- [Politica de seguridad](../SECURITY.md)
|
|
559
|
+
- [Licencia (AGPL-3.0)](../LICENSE)
|
|
560
|
+
- [Issues](https://github.com/manufosela/karajan-code/issues)
|
|
561
|
+
=======
|
|
245
562
|
- [Documentacion completa](https://karajancode.com/docs/)
|
|
246
563
|
- [Changelog](../CHANGELOG.md)
|
|
247
564
|
- [Politica de seguridad](../SECURITY.md)
|
|
@@ -249,4 +566,5 @@ Issues y pull requests bienvenidos. Si algo no funciona como esta documentado, [
|
|
|
249
566
|
|
|
250
567
|
---
|
|
251
568
|
|
|
252
|
-
Construido por [@manufosela](https://github.com/manufosela). Head of Engineering en Geniova Technologies, co-organizador de NodeJS Madrid, autor de [Liderazgo Afectivo](https://www.
|
|
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
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: {
|
|
@@ -482,7 +482,9 @@ export async function handleCodeDirect(a, server, extra) {
|
|
|
482
482
|
if (config.coder_rules) {
|
|
483
483
|
try {
|
|
484
484
|
coderRules = await fs.readFile(config.coder_rules, "utf8");
|
|
485
|
-
} catch {
|
|
485
|
+
} catch {
|
|
486
|
+
try { coderRules = await fs.readFile("coder-rules.md", "utf8"); } catch { /* no coder rules file */ }
|
|
487
|
+
}
|
|
486
488
|
}
|
|
487
489
|
const prompt = buildCoderPrompt({ task: a.task, coderRules, methodology: config.development?.methodology || "tdd" });
|
|
488
490
|
sendTrackerLog(server, "coder", "running", coderRole.provider);
|