claude-git-hooks 1.0.0 → 1.1.0
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 +232 -36
- package/bin/claude-hooks +53 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,10 +49,47 @@ git config --global credential.helper store
|
|
|
49
49
|
# O configura tu credential helper específico
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
## 🚀 Instalación
|
|
52
|
+
## 🚀 Instalación
|
|
53
|
+
|
|
54
|
+
### Opción 1: Paquete NPM Global (Recomendado)
|
|
53
55
|
|
|
54
56
|
**IMPORTANTE**: Claude CLI corre en WSL, por lo que toda la instalación y uso de git debe hacerse desde la terminal WSL.
|
|
55
57
|
|
|
58
|
+
#### Instalación Global
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Instalar el paquete globalmente
|
|
62
|
+
sudo npm install -g claude-git-hooks
|
|
63
|
+
|
|
64
|
+
# En cualquier repositorio, instalar los hooks
|
|
65
|
+
cd tu-proyecto
|
|
66
|
+
claude-hooks install
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### Añadir como Dependencia de Desarrollo
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Instalar como devDependency
|
|
73
|
+
npm install --save-dev claude-git-hooks
|
|
74
|
+
|
|
75
|
+
# Añadir script al package.json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Luego añade esto a tu `package.json`:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"scripts": {
|
|
83
|
+
"postinstall": "claude-hooks install"
|
|
84
|
+
},
|
|
85
|
+
"devDependencies": {
|
|
86
|
+
"claude-git-hooks": "^1.0.0"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Opción 2: Instalación Local con Scripts
|
|
92
|
+
|
|
56
93
|
```bash
|
|
57
94
|
# Desde WSL - Instalación completa
|
|
58
95
|
./git-hooks/setup-wsl.sh
|
|
@@ -70,14 +107,15 @@ git config --global credential.helper store
|
|
|
70
107
|
./git-hooks/setup-wsl.sh --disable-hooks prepare-commit-msg # Deshabilita solo prepare-commit-msg
|
|
71
108
|
```
|
|
72
109
|
|
|
110
|
+
## 🤖 Características
|
|
111
|
+
|
|
73
112
|
**✨ Auto-actualización incorporada**: Los hooks se actualizan automáticamente en cada commit.
|
|
74
113
|
|
|
75
|
-
|
|
114
|
+
**Hooks disponibles**:
|
|
76
115
|
|
|
77
116
|
- `pre-commit`: Análisis de código con Claude (solo archivos Java/config)
|
|
78
117
|
- `prepare-commit-msg`: Generación automática de mensajes de commit
|
|
79
118
|
|
|
80
|
-
|
|
81
119
|
## 🎯 Funcionamiento
|
|
82
120
|
|
|
83
121
|
### Hook pre-commit (Análisis de código)
|
|
@@ -105,10 +143,7 @@ git config --global credential.helper store
|
|
|
105
143
|
### Hook prepare-commit-msg (Generación automática de mensajes)
|
|
106
144
|
|
|
107
145
|
1. **Se activa cuando el mensaje es**:
|
|
108
|
-
- Vacío (`""`)
|
|
109
146
|
- `"auto"`
|
|
110
|
-
- `"--"`
|
|
111
|
-
- `"tmp"`
|
|
112
147
|
2. **Analiza los cambios del staging area**:
|
|
113
148
|
- Lista archivos modificados con estadísticas
|
|
114
149
|
- Incluye diffs completos para archivos < 100KB
|
|
@@ -151,48 +186,54 @@ Claude analizará los cambios y generará un mensaje de commit siguiendo las con
|
|
|
151
186
|
|
|
152
187
|
**⚠️ Si la generación automática falla**: El commit se cancelará completamente. Simplemente ejecuta `git commit -m "tu mensaje"` manualmente.
|
|
153
188
|
|
|
154
|
-
###
|
|
189
|
+
### Modos de análisis 📊
|
|
155
190
|
|
|
156
|
-
|
|
191
|
+
Puedes elegir entre dos formatos de análisis:
|
|
192
|
+
|
|
193
|
+
#### 🎯 Configurar Modo (Recomendado)
|
|
157
194
|
|
|
158
195
|
```bash
|
|
159
|
-
#
|
|
160
|
-
|
|
161
|
-
git commit -m "mensaje"
|
|
196
|
+
# Cambiar a modo SonarQube (métricas y quality gate)
|
|
197
|
+
claude-hooks set-mode sonar
|
|
162
198
|
|
|
163
|
-
#
|
|
164
|
-
|
|
165
|
-
|
|
199
|
+
# Cambiar a modo estándar (score y recomendaciones)
|
|
200
|
+
claude-hooks set-mode standard
|
|
201
|
+
|
|
202
|
+
# Ver modo actual
|
|
203
|
+
claude-hooks status
|
|
166
204
|
```
|
|
167
205
|
|
|
168
|
-
|
|
206
|
+
#### 🔧 Variable de Entorno (Temporal)
|
|
169
207
|
|
|
170
208
|
```bash
|
|
209
|
+
# Sobrescribir temporalmente el modo configurado
|
|
210
|
+
export CLAUDE_ANALYSIS_MODE=sonar
|
|
171
211
|
git commit -m "mensaje"
|
|
172
|
-
|
|
173
|
-
#
|
|
174
|
-
|
|
212
|
+
|
|
213
|
+
# Volver al modo configurado
|
|
214
|
+
unset CLAUDE_ANALYSIS_MODE
|
|
175
215
|
```
|
|
176
216
|
|
|
177
|
-
|
|
217
|
+
#### 📋 Diferencias entre Modos
|
|
178
218
|
|
|
179
|
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
219
|
+
**Modo Estándar**:
|
|
220
|
+
- Análisis con puntuación del 1-10
|
|
221
|
+
- Recomendaciones detalladas por categoría
|
|
222
|
+
- Formato tradicional fácil de leer
|
|
183
223
|
|
|
184
|
-
|
|
224
|
+
**Modo SonarQube**:
|
|
225
|
+
- Quality Gate (PASSED/FAILED)
|
|
226
|
+
- Métricas: Reliability, Security, Maintainability
|
|
227
|
+
- Issues clasificados por severidad (Blocker, Critical, Major, Minor, Info)
|
|
228
|
+
- Security hotspots
|
|
185
229
|
|
|
186
|
-
|
|
230
|
+
#### 🔄 Cambio de Modo Interactivo
|
|
187
231
|
|
|
188
232
|
```bash
|
|
189
|
-
|
|
233
|
+
# Sin parámetros muestra ayuda interactiva
|
|
234
|
+
claude-hooks set-mode
|
|
190
235
|
```
|
|
191
236
|
|
|
192
|
-
**Formato Estándar**: Análisis tradicional con score, recomendaciones y detalles por categoría.
|
|
193
|
-
|
|
194
|
-
**Formato SonarQube**: Análisis con Quality Gate, métricas (Reliability, Security, Maintainability), clasificación de issues por severidad (Blocker, Critical, Major, Minor, Info), y security hotspots.
|
|
195
|
-
|
|
196
237
|
### Saltar la revisión (usar con precaución)
|
|
197
238
|
|
|
198
239
|
```bash
|
|
@@ -221,18 +262,21 @@ Claude responde con un JSON que incluye:
|
|
|
221
262
|
|
|
222
263
|
```bash
|
|
223
264
|
# Desactivar todos los hooks
|
|
224
|
-
|
|
265
|
+
claude-hooks disable
|
|
225
266
|
|
|
226
267
|
# Desactivar un hook específico
|
|
227
|
-
|
|
228
|
-
|
|
268
|
+
claude-hooks disable pre-commit
|
|
269
|
+
claude-hooks disable prepare-commit-msg
|
|
229
270
|
|
|
230
271
|
# Habilitar todos los hooks
|
|
231
|
-
|
|
272
|
+
claude-hooks enable
|
|
232
273
|
|
|
233
274
|
# Habilitar un hook específico
|
|
234
|
-
|
|
235
|
-
|
|
275
|
+
claude-hooks enable pre-commit
|
|
276
|
+
claude-hooks enable prepare-commit-msg
|
|
277
|
+
|
|
278
|
+
# Ver estado actual
|
|
279
|
+
claude-hooks status
|
|
236
280
|
```
|
|
237
281
|
|
|
238
282
|
## ⚙️ Configuración
|
|
@@ -353,3 +397,155 @@ WSL Terminal
|
|
|
353
397
|
2. **Line Endings**: La configuración de `core.autocrlf` es crítica para evitar problemas entre Windows y Linux
|
|
354
398
|
3. **Credenciales**: Necesitarás reconfigurar tus credenciales git en WSL
|
|
355
399
|
4. **Performance**: La revisión puede tardar unos segundos dependiendo del tamaño de los cambios
|
|
400
|
+
|
|
401
|
+
## 🔧 Desarrollo y Contribución
|
|
402
|
+
|
|
403
|
+
### Estructura del Proyecto
|
|
404
|
+
|
|
405
|
+
```
|
|
406
|
+
claude-git-hooks/
|
|
407
|
+
├── bin/
|
|
408
|
+
│ └── claude-hooks # CLI principal
|
|
409
|
+
├── templates/
|
|
410
|
+
│ ├── pre-commit # Hook de análisis de código
|
|
411
|
+
│ ├── prepare-commit-msg # Hook de generación de mensajes
|
|
412
|
+
│ ├── CLAUDE_PRE_COMMIT.md # Pautas estándar
|
|
413
|
+
│ └── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube
|
|
414
|
+
├── setup-wsl.sh # Script de instalación local (legacy)
|
|
415
|
+
├── package.json # Configuración NPM
|
|
416
|
+
├── README.md # Este archivo
|
|
417
|
+
├── README-NPM.md # Documentación para NPM
|
|
418
|
+
└── PUBLISH.md # Guía de publicación
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
### Configuración del Entorno de Desarrollo
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
# 1. Clonar el repositorio
|
|
425
|
+
git clone https://github.com/pablorovito/claude-git-hooks.git
|
|
426
|
+
cd claude-git-hooks
|
|
427
|
+
|
|
428
|
+
# 2. Instalar dependencias (si las hubiera)
|
|
429
|
+
npm install
|
|
430
|
+
|
|
431
|
+
# 3. Enlazar para desarrollo local
|
|
432
|
+
npm link
|
|
433
|
+
|
|
434
|
+
# 4. Probar en un repositorio de prueba
|
|
435
|
+
cd /path/to/test-repo
|
|
436
|
+
claude-hooks install
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Workflow de Desarrollo
|
|
440
|
+
|
|
441
|
+
#### 1. Modificar Hooks
|
|
442
|
+
|
|
443
|
+
Los hooks están en `templates/`:
|
|
444
|
+
|
|
445
|
+
- `templates/pre-commit` - Lógica de análisis de código
|
|
446
|
+
- `templates/prepare-commit-msg` - Lógica de generación de mensajes
|
|
447
|
+
|
|
448
|
+
#### 2. Probar Localmente
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
# Después de modificar archivos
|
|
452
|
+
npm link
|
|
453
|
+
|
|
454
|
+
# En un repo de prueba
|
|
455
|
+
claude-hooks install --force # Fuerza reinstalación
|
|
456
|
+
|
|
457
|
+
# Probar funcionalidad
|
|
458
|
+
git add .
|
|
459
|
+
git commit -m "auto" # Probar generación automática
|
|
460
|
+
git commit -m "test" # Probar análisis
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
#### 3. Actualizar Documentación
|
|
464
|
+
|
|
465
|
+
- `README.md` - Documentación principal
|
|
466
|
+
- `README-NPM.md` - Para usuarios de NPM
|
|
467
|
+
- `templates/CLAUDE_PRE_COMMIT*.md` - Pautas de evaluación
|
|
468
|
+
|
|
469
|
+
#### 4. Versioning y Publicación
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
# Actualizar versión
|
|
473
|
+
npm version patch # 1.0.0 -> 1.0.1
|
|
474
|
+
npm version minor # 1.0.0 -> 1.1.0
|
|
475
|
+
npm version major # 1.0.0 -> 2.0.0
|
|
476
|
+
|
|
477
|
+
# Publicar nueva versión
|
|
478
|
+
npm publish
|
|
479
|
+
|
|
480
|
+
# Tag en git
|
|
481
|
+
git push --tags
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Debugging
|
|
485
|
+
|
|
486
|
+
#### Modo Debug
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
# Activar debug en hooks
|
|
490
|
+
DEBUG=1 git commit -m "test"
|
|
491
|
+
|
|
492
|
+
# Ver logs del CLI
|
|
493
|
+
claude-hooks install --debug
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
#### Logs Útiles
|
|
497
|
+
|
|
498
|
+
- `debug-claude-response.json` - Respuestas de Claude en modo debug
|
|
499
|
+
- `~/.npm/_logs/` - Logs de npm install
|
|
500
|
+
- `.git/hooks/` - Verificar que hooks están instalados
|
|
501
|
+
|
|
502
|
+
### Testing
|
|
503
|
+
|
|
504
|
+
#### Test Manual
|
|
505
|
+
|
|
506
|
+
```bash
|
|
507
|
+
# 1. Crear repo de prueba
|
|
508
|
+
mkdir test-repo && cd test-repo
|
|
509
|
+
git init
|
|
510
|
+
|
|
511
|
+
# 2. Instalar hooks
|
|
512
|
+
claude-hooks install
|
|
513
|
+
|
|
514
|
+
# 3. Crear archivos de prueba
|
|
515
|
+
echo 'public class Test {}' > Test.java
|
|
516
|
+
git add .
|
|
517
|
+
|
|
518
|
+
# 4. Probar análisis
|
|
519
|
+
git commit -m "test: nueva clase"
|
|
520
|
+
|
|
521
|
+
# 5. Probar generación automática
|
|
522
|
+
echo 'public void newMethod() {}' >> Test.java
|
|
523
|
+
git add .
|
|
524
|
+
git commit -m "auto"
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
#### Casos de Prueba
|
|
528
|
+
|
|
529
|
+
- ✅ Análisis de código Java
|
|
530
|
+
- ✅ Generación automática de mensajes
|
|
531
|
+
- ✅ Modo SonarQube
|
|
532
|
+
- ✅ Archivos grandes (>100KB)
|
|
533
|
+
- ✅ Commits sin archivos Java
|
|
534
|
+
- ✅ Enable/disable hooks
|
|
535
|
+
- ✅ Modo debug
|
|
536
|
+
|
|
537
|
+
### Contribuir
|
|
538
|
+
|
|
539
|
+
1. **Fork** el repositorio
|
|
540
|
+
2. **Crear branch** para tu feature: `git checkout -b feature/nueva-funcionalidad`
|
|
541
|
+
3. **Commit** tus cambios: `git commit -m "feat: nueva funcionalidad"`
|
|
542
|
+
4. **Push** al branch: `git push origin feature/nueva-funcionalidad`
|
|
543
|
+
5. **Abrir Pull Request**
|
|
544
|
+
|
|
545
|
+
### Roadmap
|
|
546
|
+
|
|
547
|
+
- [ ] Soporte para más lenguajes (Python, JavaScript, etc.)
|
|
548
|
+
- [ ] Configuración más granular por proyecto
|
|
549
|
+
- [ ] Integration con IDEs populares
|
|
550
|
+
- [ ] Métricas de uso y performance
|
|
551
|
+
- [ ] Tests automatizados
|
package/bin/claude-hooks
CHANGED
|
@@ -224,6 +224,18 @@ function status() {
|
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
+
// Verificar modo de análisis actual
|
|
228
|
+
console.log('\nModo de análisis:');
|
|
229
|
+
const analysisMode = fs.existsSync('.claude-analysis-mode')
|
|
230
|
+
? fs.readFileSync('.claude-analysis-mode', 'utf8').trim()
|
|
231
|
+
: 'standard (por defecto)';
|
|
232
|
+
|
|
233
|
+
if (analysisMode === 'sonar') {
|
|
234
|
+
info(`Modo actual: SonarQube`);
|
|
235
|
+
} else {
|
|
236
|
+
info(`Modo actual: Estándar`);
|
|
237
|
+
}
|
|
238
|
+
|
|
227
239
|
// Verificar archivos de pautas
|
|
228
240
|
console.log('\nArchivos de pautas:');
|
|
229
241
|
const guidelines = ['CLAUDE_PRE_COMMIT.md', 'CLAUDE_PRE_COMMIT_SONAR.md'];
|
|
@@ -236,6 +248,40 @@ function status() {
|
|
|
236
248
|
});
|
|
237
249
|
}
|
|
238
250
|
|
|
251
|
+
// Comando set-mode
|
|
252
|
+
function setMode(mode) {
|
|
253
|
+
if (!checkGitRepo()) {
|
|
254
|
+
error('No estás en un repositorio Git.');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const validModes = ['standard', 'sonar'];
|
|
258
|
+
|
|
259
|
+
if (!mode) {
|
|
260
|
+
// Modo interactivo
|
|
261
|
+
console.log('\nSelecciona el modo de análisis:');
|
|
262
|
+
console.log('1) Standard - Formato clásico con score y recomendaciones');
|
|
263
|
+
console.log('2) SonarQube - Formato similar a SonarQube con métricas');
|
|
264
|
+
console.log('\nEjemplo de uso: claude-hooks set-mode standard');
|
|
265
|
+
console.log(' claude-hooks set-mode sonar');
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (!validModes.includes(mode)) {
|
|
270
|
+
error(`Modo inválido: ${mode}. Usa 'standard' o 'sonar'`);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Guardar el modo
|
|
274
|
+
fs.writeFileSync('.claude-analysis-mode', mode);
|
|
275
|
+
|
|
276
|
+
if (mode === 'sonar') {
|
|
277
|
+
success('Modo cambiado a: SonarQube');
|
|
278
|
+
info('Los commits usarán formato SonarQube con métricas y quality gate');
|
|
279
|
+
} else {
|
|
280
|
+
success('Modo cambiado a: Estándar');
|
|
281
|
+
info('Los commits usarán formato clásico con score y recomendaciones');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
239
285
|
// Comando help
|
|
240
286
|
function showHelp() {
|
|
241
287
|
console.log(`
|
|
@@ -248,6 +294,7 @@ Comandos:
|
|
|
248
294
|
uninstall Desinstala los hooks del repositorio
|
|
249
295
|
enable [hook] Habilita hooks (todos o uno específico)
|
|
250
296
|
disable [hook] Deshabilita hooks (todos o uno específico)
|
|
297
|
+
set-mode [standard|sonar] Cambia el modo de análisis
|
|
251
298
|
status Muestra el estado de los hooks
|
|
252
299
|
help Muestra esta ayuda
|
|
253
300
|
|
|
@@ -257,11 +304,13 @@ Hooks disponibles:
|
|
|
257
304
|
|
|
258
305
|
Ejemplos:
|
|
259
306
|
claude-hooks install # Instala todos los hooks
|
|
307
|
+
claude-hooks set-mode sonar # Cambiar a modo SonarQube
|
|
308
|
+
claude-hooks set-mode standard # Cambiar a modo estándar
|
|
260
309
|
claude-hooks disable pre-commit # Deshabilita solo pre-commit
|
|
261
310
|
claude-hooks enable # Habilita todos los hooks
|
|
262
311
|
claude-hooks status # Ver estado actual
|
|
263
312
|
|
|
264
|
-
Más información: https://github.com/
|
|
313
|
+
Más información: https://github.com/pablorovito/claude-git-hooks
|
|
265
314
|
`);
|
|
266
315
|
}
|
|
267
316
|
|
|
@@ -282,6 +331,9 @@ switch (command) {
|
|
|
282
331
|
case 'disable':
|
|
283
332
|
disable(args[1]);
|
|
284
333
|
break;
|
|
334
|
+
case 'set-mode':
|
|
335
|
+
setMode(args[1]);
|
|
336
|
+
break;
|
|
285
337
|
case 'status':
|
|
286
338
|
status();
|
|
287
339
|
break;
|