claude-git-hooks 1.5.5 → 2.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/CHANGELOG.md CHANGED
@@ -5,6 +5,93 @@ Todos los cambios notables en este proyecto se documentarán en este archivo.
5
5
  El formato está basado en [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  y este proyecto adhiere a [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.1.0] - 2025-11-04
9
+
10
+ ### Changed
11
+
12
+ - 🔄 Renombrado marcador de exclusión de línea única: `// SKIP-ANALYSIS` → `// SKIP_ANALYSIS_LINE` para consistencia de nomenclatura
13
+ - 🐛 Corregido bug crítico en orden de detección de patrones que impedía funcionamiento de `SKIP_ANALYSIS_BLOCK`
14
+
15
+ ### Known Issues
16
+
17
+ - ⚠️ **SKIP_ANALYSIS marcado como EXPERIMENTAL/BROKEN**: Los marcadores de exclusión no funcionan correctamente porque el análisis se realiza sobre git diff en lugar del archivo completo. Marcadores agregados en commits anteriores no son detectados en cambios subsecuentes.
18
+
19
+ ### Migration Guide
20
+
21
+ Si utilizabas `// SKIP-ANALYSIS` en tu código, reemplázalo por `// SKIP_ANALYSIS_LINE`:
22
+
23
+ ```java
24
+ // Antes (deprecated):
25
+ // SKIP-ANALYSIS
26
+ private String legacyCode;
27
+
28
+ // Ahora:
29
+ // SKIP_ANALYSIS_LINE
30
+ private String legacyCode;
31
+ ```
32
+
33
+ El marcador de bloque `// SKIP_ANALYSIS_BLOCK` permanece sin cambios.
34
+
35
+ ## [2.0.1] - 2025-11-04
36
+
37
+ ### Fixed
38
+
39
+ - 🔧 Compatibilidad completa en Windows: corregidos line endings CRLF, validación WSL, y comparación de versiones sin dependencia bash
40
+ - 🔧 Operaciones de rutas utilizan módulo `path` nativo para mejor portabilidad multiplataforma
41
+
42
+ ## [2.0.0] - 2025-10-30
43
+
44
+ ### 🚀 BREAKING CHANGE: Migration from Bash to Node.js Hooks
45
+
46
+ **Why this change?**
47
+ The bash-based hooks created fundamental incompatibilities with Windows Git and IDE workflows (VSCode, IntelliJ), causing:
48
+ - Git worktree path conflicts (Windows paths incompatible with WSL)
49
+ - IDE commit failures when using Windows Git
50
+ - Developers forced to use WSL terminal exclusively, abandoning IDE Git features
51
+
52
+ ### ✅ Advantages
53
+
54
+ **Cross-Platform Native Support**
55
+ - ✅ Works with Windows Git, WSL, and Bash
56
+ - ✅ No more worktree path issues
57
+ - ✅ Single codebase for all platforms
58
+
59
+ **Dramatically Improved Maintainability**
60
+ - ✅ JavaScript/Node.js: ~60-70% of developers proficient vs ~1-2% with bash/jq/sed/awk
61
+ - ✅ Modern tooling: ESLint, Prettier, Jest testing framework
62
+ - ✅ VS Code debugging support vs echo statements
63
+
64
+ **Professional Development Practices**
65
+ - ✅ Unit and integration testing with Jest
66
+ - ✅ Type safety optional (TypeScript)
67
+ - ✅ Consistent error handling patterns
68
+
69
+ ### ⚠️ Disadvantages
70
+
71
+ - ⚠️ Initial migration effort
72
+ - ⚠️ Startup performance: +40-90ms overhead (~1% of total execution time)
73
+
74
+ ### 🏆 Industry Success Cases
75
+
76
+ **Node.js Git Hooks - Proven Track Record:**
77
+ - **Husky**: 43k GitHub stars, 500+ contributors, 7M+ weekly npm downloads
78
+ - **lint-staged**: 12k stars, 200+ contributors
79
+ - **Commitizen**: 16k stars, industry standard
80
+ - **simple-git-hooks**: Fast, minimal, 1M+ weekly downloads
81
+
82
+ ### Changed
83
+
84
+ - 🔄 **Migrated from Bash to Node.js with ES6 modules** - Hooks now in `lib/hooks/*.js` with bash wrappers, removing jq/sed/awk dependencies
85
+ - 🌐 **Cross-platform support enabled** - Works on Windows Git Bash, WSL, Linux, and macOS with automatic Claude detection
86
+ - 🔧 **Platform compatibility** - CRLF-to-LF conversion during install, Windows path support (C:\ to /c/) in bash wrappers
87
+
88
+ ### Migration Guide
89
+
90
+ Existing installations will continue working. To upgrade:
91
+ 1. Run `claude-hooks update` to get v2.0.0
92
+ 2. Run `claude-hooks install --force` to reinstall with Node.js hooks
93
+ 3. No configuration changes needed - works transparently
94
+
8
95
  ## [1.5.5] - 2025-10-29
9
96
 
10
97
  ### Added
package/README.md CHANGED
@@ -2,14 +2,24 @@
2
2
 
3
3
  🚀 **Transforma tu flujo de desarrollo con IA**: análisis de código instantáneo, mensajes de commit automáticos y generación de PRs perfectas. Claude revisa tu código antes de cada commit, detecta issues críticos al estilo SonarQube, y genera toda la documentación que necesitas. ¿Lo mejor? Se ejecuta localmente sin contaminar tu CI/CD.
4
4
 
5
+ ## ✨ Novedad v2.0.0 - Ahora Cross-Platform
6
+
7
+ **¡Nueva arquitectura!** Migración completa a Node.js con ES6 modules para soporte más universal:
8
+ - ✅ **Windows** - Git en Bash y Powershell
9
+ - ✅ **WSL** - Subsistema de Linux
10
+ - ✅ **Linux** - Funcionamiento nativo
11
+ - ✅ **Worktrees** - Compatible con git worktrees en cualquier entorno
12
+ - ✅ **IDEs** - Compatible con git manager de IntelliJ and VSCode -> mensaje de commit "auto" committea (y pushea si se quiere) con mensaje automático. Si el commit tiene problemas, se bloquea.
13
+
5
14
  ## 🎯 Características principales
6
15
 
7
16
  - 🔍 **Análisis de código pre-commit**: Detecta issues críticos antes de que lleguen al repo
8
- - 💬 **Mensajes de commit automáticos**: Escribe "auto" y Claude genera el mensaje perfecto
17
+ - 💬 **Mensajes de commit automáticos**: Escribe "auto" y Claude genera el mensaje
9
18
  - 📋 **Generación de PRs**: Título, descripción y tests sugeridos con un solo comando
10
- - 🎨 **Modo SonarQube**: Métricas de calidad y Quality Gate integrados
11
- - 🚫 **Skip inteligente**: Excluye código legacy con comentarios SKIP-ANALYSIS
19
+ - ⚠️ **Skip inteligente** (EXPERIMENTAL/BROKEN): Exclusión de código con comentarios SKIP_ANALYSIS - no funciona correctamente con git diff
20
+ - 🕵️‍♂️ **Paralelización**: Análisis asincrónico de archivos con sub agentes
12
21
  - 🔄 **Auto-actualización**: Se mantiene actualizado automáticamente
22
+ - 🌍 **Cross-platform**: Windows, WSL, macOS, Linux sin configuración especial
13
23
 
14
24
  ## 📋 CHEATSHEET
15
25
 
@@ -31,15 +41,15 @@ claude-hooks install --force --skip-auth
31
41
 
32
42
  ### 📦 Instalación y Gestión
33
43
 
34
- ⚠️ **IMPORTANTE**: Todo debe ejecutarse desde consola WSL/Ubuntu (no PowerShell ni CMD). Ver [Configuración Previa](#-configuración-previa-importante) antes de comenzar.
44
+ **v2.0.0+**: Funciona terminales WSL y Bash.
35
45
 
36
46
  Se debe instalar el paquete globalmente, para luego gestionarlo localmente en cada repositorio.
37
47
 
38
48
  ```bash
39
- # En consola WSL/Ubuntu - Instalar globalmente
49
+ # Instalar globalmente (desde cualquier terminal)
40
50
  npm install -g claude-git-hooks
41
51
 
42
- # Luego en cada proyecto (también desde WSL/Ubuntu)
52
+ # Luego en cada proyecto
43
53
  cd /tu/proyecto
44
54
  claude-hooks install
45
55
 
@@ -75,10 +85,13 @@ git commit --no-verify -m "hotfix: corrección urgente"
75
85
  git commit --amend
76
86
  ```
77
87
 
78
- ### 🚫 Exclusión de Código del Análisis
88
+ ### ⚠️ Exclusión de Código del Análisis (EXPERIMENTAL/BROKEN)
79
89
 
80
90
  ```java
81
- // SKIP-ANALYSIS
91
+ // NOTA: Este feature NO funciona correctamente
92
+ // Los marcadores no son detectados si fueron agregados en commits anteriores
93
+
94
+ // SKIP_ANALYSIS_LINE
82
95
  private String legacyCode = "no analizar siguiente línea";
83
96
 
84
97
  // SKIP_ANALYSIS_BLOCK
@@ -174,25 +187,50 @@ git commit -m "feat: implement multiple features"
174
187
 
175
188
  **Best for:** Large commits (3+ files), refactoring tasks, feature branches
176
189
 
190
+ ### 🎨 Personalización y Customización
191
+
192
+ **Archivos clave para modificar:**
193
+ - `.claude/CLAUDE_PRE_COMMIT_SONAR.md` - Criterios (backend/frontend/data/db)
194
+ - `.claude/CLAUDE_ANALYSIS_PROMPT_SONAR.md` - Template del prompt
195
+ - `lib/hooks/pre-commit.js` - CONFIG object (extensiones, límites, umbrales)
196
+
197
+ **Subagents (v1.5.5+)** - Para commits multi-archivo (3+), reduce análisis 60-70%:
198
+ ```bash
199
+ export CLAUDE_USE_SUBAGENTS=true # Activar paralelo
200
+ export CLAUDE_SUBAGENT_MODEL=haiku # haiku/sonnet/opus
201
+ export CLAUDE_SUBAGENT_BATCH_SIZE=3 # Archivos simultáneos
202
+ ```
203
+
204
+ **Ejemplo:**
205
+ ```bash
206
+ vim .claude/CLAUDE_PRE_COMMIT_SONAR.md # Agregar reglas API REST/Spring Boot
207
+ ```
208
+
177
209
  ## 🔧 Configuración Previa Importante
178
210
 
179
- ### Credenciales Git en WSL
211
+ ### Requisitos del Sistema
212
+
213
+ ✨ **v2.0.0+**: Los hooks funcionan en cualquier terminal donde tengas:
214
+
215
+ - **Node.js** >= 16.9.0
216
+ - **Git** configurado
217
+ - **Claude CLI** instalado y autenticado
180
218
 
181
- Debes configurar tus credenciales de git nuevamente en WSL:
219
+ ### Credenciales Git
220
+
221
+ Si es tu primera vez configurando git en esta terminal, configura tus credenciales:
182
222
 
183
223
  ```bash
184
- # En WSL
185
224
  git config --global user.name "Tu Nombre"
186
225
  git config --global user.email "tu.email@ejemplo.com"
187
226
 
188
- # Si usas AWS CodeCommit o similar, reconfigura las credenciales
227
+ # Si usas credential helper (opcional)
189
228
  git config --global credential.helper store
190
- # O configura tu credential helper específico
191
229
  ```
192
230
 
193
231
  ## 🚀 Instalación
194
232
 
195
- **IMPORTANTE**: Claude CLI corre en WSL, por lo que toda la instalación y uso de git debe hacerse desde la terminal WSL.
233
+ **v2.0.0+**: Instalación cross-platform. Funciona en PowerShell, CMD, WSL, macOS Terminal, Linux shell.
196
234
 
197
235
  ```bash
198
236
  # Instalar el paquete globalmente
@@ -203,15 +241,18 @@ cd tu-proyecto
203
241
  claude-hooks install
204
242
  ```
205
243
 
206
- El comando `claude-hooks install` ahora incluye:
244
+ El comando `claude-hooks install` incluye:
207
245
 
208
- - ✅ Verificación completa de dependencias del sistema
209
- - ✅ Instalación automática de paquetes faltantes (jq, curl)
210
- - ✅ Configuración de Git (line endings WSL/Windows)
246
+ - ✅ Verificación completa de dependencias del sistema (Node.js, Git, Claude CLI)
211
247
  - ✅ Verificación de autenticación Claude con entretenimiento (omitible con `--skip-auth`)
212
- - ✅ Instalación de hooks y archivos de pautas
248
+ - ✅ Instalación de hooks con arquitectura bash wrapper + Node.js
249
+ - ✅ Instalación de archivos de pautas y templates
213
250
  - ✅ Actualización automática de .gitignore con archivos de Claude
214
251
 
252
+ **Nuevo en v2.0.0 - Soporte Cross-Platform:**
253
+
254
+ Auto-detecta plataforma, convierte CRLF→LF en install, busca Claude en WSL (Windows), instala bash wrappers que convierten rutas C:\ a /c/
255
+
215
256
  **Opciones de instalación:**
216
257
 
217
258
  - `--force`: Reinstala aunque los hooks ya existan
@@ -255,7 +296,7 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
255
296
 
256
297
  ### Hook pre-commit (Análisis de código)
257
298
 
258
- 1. **Intercepta cada intento de commit** (en WSL)
299
+ 1. **Intercepta cada intento de commit**
259
300
  2. **Extrae y filtra archivos modificados**:
260
301
  - Solo analiza: Java, XML, properties, yml, yaml
261
302
  - Omite archivos mayores a 100KB
@@ -309,21 +350,19 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
309
350
  - **Modo debug**: `DEBUG=1 git commit` guarda respuestas en `debug-claude-response.json`
310
351
  - **Análisis de PR**: Nuevo comando `analyze-diff` para generar información de Pull Requests
311
352
  - **Validación de dependencias**: Verifica que Claude CLI esté autenticado antes de ejecutar
312
- - **Exclusión de código del análisis con SKIP-ANALYSIS**: Puedes excluir código específico del análisis usando comentarios `// SKIP-ANALYSIS`:
353
+ - **⚠️ Exclusión de código del análisis (EXPERIMENTAL/BROKEN)**: Los marcadores `// SKIP_ANALYSIS_LINE` y `// SKIP_ANALYSIS_BLOCK` no funcionan correctamente. El hook analiza git diff en lugar del archivo completo, por lo que marcadores agregados en commits anteriores no son detectados en cambios subsecuentes.
313
354
 
314
355
  ```java
315
- // Excluir una sola línea
316
- // SKIP-ANALYSIS
317
- @Autowired private LegacyService legacyService; // Esta línea no será analizada
356
+ // NOTA: Este feature actualmente NO funciona de forma confiable
357
+ // SKIP_ANALYSIS_LINE
358
+ @Autowired private LegacyService legacyService;
318
359
 
319
- // Excluir un bloque de código
320
- // SKIP-ANALYSIS_BLOCK
360
+ // SKIP_ANALYSIS_BLOCK
321
361
  @Deprecated
322
362
  public void methodWithKnownIssues() {
323
- // Código legacy que no queremos que sea analizado
324
- System.out.println("Debug temporal");
363
+ System.out.println("Legacy code");
325
364
  }
326
- // SKIP-ANALYSIS_BLOCK
365
+ // SKIP_ANALYSIS_BLOCK
327
366
  ```
328
367
 
329
368
  ### Desactivar/Activar hooks
@@ -351,17 +390,17 @@ claude-hooks status
351
390
 
352
391
  ### Scripts
353
392
 
354
- En el archivo `pre-commit`:
393
+ **v2.0.0+**: Configuración en archivos Node.js dentro de `lib/hooks/`.
394
+
395
+ En `lib/hooks/pre-commit.js`:
355
396
 
356
397
  - **`MAX_FILE_SIZE`**: Tamaño máximo de archivo a analizar (default: 100KB)
357
398
  - **`MAX_FILES`**: Número máximo de archivos por commit (default: 10)
358
- - **`CLAUDE_CLI`**: Comando de Claude CLI (default: "claude")
359
- - **`GUIDELINES_FILE`**: Archivo de pautas (default: ".claude/CLAUDE_PRE_COMMIT_SONAR.md")
399
+ - **`ALLOWED_EXTENSIONS`**: Extensiones permitidas (default: .java, .xml, .properties, .yml, .yaml)
360
400
 
361
- En el archivo `prepare-commit-msg`:
401
+ En `lib/hooks/prepare-commit-msg.js`:
362
402
 
363
403
  - **`MAX_FILE_SIZE`**: Tamaño máximo para incluir diff completo (default: 100KB)
364
- - **`CLAUDE_CLI`**: Comando de Claude CLI (default: "claude")
365
404
 
366
405
  ### Pautas de Evaluación
367
406
 
@@ -386,27 +425,42 @@ No hay... esto es la perfección hecha código.
386
425
 
387
426
  ### Estructura del Proyecto
388
427
 
428
+ ✨ **v2.0.0+**: Nueva arquitectura modular con ES6 modules.
429
+
389
430
  ```
390
431
  claude-git-hooks/
391
432
  ├── bin/
392
- │ └── claude-hooks # CLI principal con verificación completa
433
+ │ └── claude-hooks # CLI principal (ES6 modules)
434
+ ├── lib/ # 🆕 Código Node.js modular
435
+ │ ├── hooks/
436
+ │ │ ├── pre-commit.js # Hook de análisis (Node.js)
437
+ │ │ └── prepare-commit-msg.js # Hook de mensajes (Node.js)
438
+ │ └── utils/
439
+ │ ├── logger.js # Sistema de logging centralizado
440
+ │ ├── git-operations.js # Operaciones git abstractas
441
+ │ ├── file-operations.js # I/O con filtro SKIP_ANALYSIS_LINE
442
+ │ ├── claude-client.js # Cliente Claude CLI
443
+ │ ├── prompt-builder.js # Constructor de prompts
444
+ │ └── resolution-prompt.js # Generador de resolution prompts
393
445
  ├── templates/
394
- │ ├── pre-commit # Hook de análisis de código
395
- │ ├── prepare-commit-msg # Hook de generación de mensajes
446
+ │ ├── pre-commit # Bash wrapper (llama a lib/hooks/pre-commit.js)
447
+ │ ├── prepare-commit-msg # Bash wrapper (llama a lib/hooks/prepare-commit-msg.js)
396
448
  │ ├── check-version.sh # Script de verificación de versión
397
- │ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube para pre commit
449
+ │ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube
398
450
  │ ├── CLAUDE_ANALYSIS_PROMPT_SONAR.md # Template de prompt para análisis
399
451
  │ └── CLAUDE_RESOLUTION_PROMPT.md # Template para resolución de issues
452
+ ├── test/ # 🆕 Tests unitarios con Jest
453
+ │ └── unit/
454
+ │ └── logger.test.js # Tests del logger
400
455
  ├── .claude/ # Directorio de configuración local (gitignore)
401
456
  │ └── settings.local.json # Configuración local del usuario
402
- ├── package.json # Configuración NPM
457
+ ├── jest.config.js # 🆕 Configuración Jest para ES6
458
+ ├── .eslintrc.json # 🆕 Configuración ESLint
459
+ ├── .prettierrc.json # 🆕 Configuración Prettier
460
+ ├── package.json # Configuración NPM (type: "module")
403
461
  ├── package-lock.json # Lock file de NPM
404
462
  ├── README.md # Este archivo
405
- ├── README-NPM.md # Documentación para publicación NPM
406
463
  ├── CHANGELOG.md # Historial de versiones
407
- ├── PUBLISH.md # Guía de publicación
408
- ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas de evaluación (legacy)
409
- ├── pre-commit # Hook principal (legacy)
410
464
  └── .gitignore # Archivos ignorados por git
411
465
  ```
412
466
 
@@ -432,10 +486,12 @@ claude-hooks install
432
486
 
433
487
  #### 1. Modificar Hooks
434
488
 
435
- Los hooks están en `templates/`:
489
+ **v2.0.0+**: La lógica de los hooks está en `lib/hooks/`:
436
490
 
437
- - `templates/pre-commit` - Lógica de análisis de código
438
- - `templates/prepare-commit-msg` - Lógica de generación de mensajes
491
+ - `lib/hooks/pre-commit.js` - Lógica de análisis de código (Node.js ES6)
492
+ - `lib/hooks/prepare-commit-msg.js` - Lógica de generación de mensajes (Node.js ES6)
493
+ - `templates/pre-commit` - Bash wrapper que llama al script Node.js
494
+ - `templates/prepare-commit-msg` - Bash wrapper que llama al script Node.js
439
495
 
440
496
  #### 2. Probar Localmente
441
497