claude-git-hooks 1.5.5 → 2.0.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,59 @@ 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.0.0] - 2025-10-30
9
+
10
+ ### 🚀 BREAKING CHANGE: Migration from Bash to Node.js Hooks
11
+
12
+ **Why this change?**
13
+ The bash-based hooks created fundamental incompatibilities with Windows Git and IDE workflows (VSCode, IntelliJ), causing:
14
+ - Git worktree path conflicts (Windows paths incompatible with WSL)
15
+ - IDE commit failures when using Windows Git
16
+ - Developers forced to use WSL terminal exclusively, abandoning IDE Git features
17
+
18
+ ### ✅ Advantages
19
+
20
+ **Cross-Platform Native Support**
21
+ - ✅ Works with Windows Git, WSL, and Bash
22
+ - ✅ No more worktree path issues
23
+ - ✅ Single codebase for all platforms
24
+
25
+ **Dramatically Improved Maintainability**
26
+ - ✅ JavaScript/Node.js: ~60-70% of developers proficient vs ~1-2% with bash/jq/sed/awk
27
+ - ✅ Modern tooling: ESLint, Prettier, Jest testing framework
28
+ - ✅ VS Code debugging support vs echo statements
29
+
30
+ **Professional Development Practices**
31
+ - ✅ Unit and integration testing with Jest
32
+ - ✅ Type safety optional (TypeScript)
33
+ - ✅ Consistent error handling patterns
34
+
35
+ ### ⚠️ Disadvantages
36
+
37
+ - ⚠️ Initial migration effort
38
+ - ⚠️ Startup performance: +40-90ms overhead (~1% of total execution time)
39
+
40
+ ### 🏆 Industry Success Cases
41
+
42
+ **Node.js Git Hooks - Proven Track Record:**
43
+ - **Husky**: 43k GitHub stars, 500+ contributors, 7M+ weekly npm downloads
44
+ - **lint-staged**: 12k stars, 200+ contributors
45
+ - **Commitizen**: 16k stars, industry standard
46
+ - **simple-git-hooks**: Fast, minimal, 1M+ weekly downloads
47
+
48
+ ### Changed
49
+
50
+ - 🔄 **Migrated from Bash to Node.js with ES6 modules** - Hooks now in `lib/hooks/*.js` with bash wrappers, removing jq/sed/awk dependencies
51
+ - 🌐 **Cross-platform support enabled** - Works on Windows Git Bash, WSL, Linux, and macOS with automatic Claude detection
52
+ - 🔧 **Platform compatibility** - CRLF-to-LF conversion during install, Windows path support (C:\ to /c/) in bash wrappers
53
+
54
+ ### Migration Guide
55
+
56
+ Existing installations will continue working. To upgrade:
57
+ 1. Run `claude-hooks update` to get v2.0.0
58
+ 2. Run `claude-hooks install --force` to reinstall with Node.js hooks
59
+ 3. No configuration changes needed - works transparently
60
+
8
61
  ## [1.5.5] - 2025-10-29
9
62
 
10
63
  ### 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**: Excluye código con comentarios SKIP-ANALYSIS
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
 
@@ -174,25 +184,50 @@ git commit -m "feat: implement multiple features"
174
184
 
175
185
  **Best for:** Large commits (3+ files), refactoring tasks, feature branches
176
186
 
187
+ ### 🎨 Personalización y Customización
188
+
189
+ **Archivos clave para modificar:**
190
+ - `.claude/CLAUDE_PRE_COMMIT_SONAR.md` - Criterios (backend/frontend/data/db)
191
+ - `.claude/CLAUDE_ANALYSIS_PROMPT_SONAR.md` - Template del prompt
192
+ - `lib/hooks/pre-commit.js` - CONFIG object (extensiones, límites, umbrales)
193
+
194
+ **Subagents (v1.5.5+)** - Para commits multi-archivo (3+), reduce análisis 60-70%:
195
+ ```bash
196
+ export CLAUDE_USE_SUBAGENTS=true # Activar paralelo
197
+ export CLAUDE_SUBAGENT_MODEL=haiku # haiku/sonnet/opus
198
+ export CLAUDE_SUBAGENT_BATCH_SIZE=3 # Archivos simultáneos
199
+ ```
200
+
201
+ **Ejemplo:**
202
+ ```bash
203
+ vim .claude/CLAUDE_PRE_COMMIT_SONAR.md # Agregar reglas API REST/Spring Boot
204
+ ```
205
+
177
206
  ## 🔧 Configuración Previa Importante
178
207
 
179
- ### Credenciales Git en WSL
208
+ ### Requisitos del Sistema
209
+
210
+ ✨ **v2.0.0+**: Los hooks funcionan en cualquier terminal donde tengas:
211
+
212
+ - **Node.js** >= 16.9.0
213
+ - **Git** configurado
214
+ - **Claude CLI** instalado y autenticado
215
+
216
+ ### Credenciales Git
180
217
 
181
- Debes configurar tus credenciales de git nuevamente en WSL:
218
+ Si es tu primera vez configurando git en esta terminal, configura tus credenciales:
182
219
 
183
220
  ```bash
184
- # En WSL
185
221
  git config --global user.name "Tu Nombre"
186
222
  git config --global user.email "tu.email@ejemplo.com"
187
223
 
188
- # Si usas AWS CodeCommit o similar, reconfigura las credenciales
224
+ # Si usas credential helper (opcional)
189
225
  git config --global credential.helper store
190
- # O configura tu credential helper específico
191
226
  ```
192
227
 
193
228
  ## 🚀 Instalación
194
229
 
195
- **IMPORTANTE**: Claude CLI corre en WSL, por lo que toda la instalación y uso de git debe hacerse desde la terminal WSL.
230
+ **v2.0.0+**: Instalación cross-platform. Funciona en PowerShell, CMD, WSL, macOS Terminal, Linux shell.
196
231
 
197
232
  ```bash
198
233
  # Instalar el paquete globalmente
@@ -203,15 +238,18 @@ cd tu-proyecto
203
238
  claude-hooks install
204
239
  ```
205
240
 
206
- El comando `claude-hooks install` ahora incluye:
241
+ El comando `claude-hooks install` incluye:
207
242
 
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)
243
+ - ✅ Verificación completa de dependencias del sistema (Node.js, Git, Claude CLI)
211
244
  - ✅ Verificación de autenticación Claude con entretenimiento (omitible con `--skip-auth`)
212
- - ✅ Instalación de hooks y archivos de pautas
245
+ - ✅ Instalación de hooks con arquitectura bash wrapper + Node.js
246
+ - ✅ Instalación de archivos de pautas y templates
213
247
  - ✅ Actualización automática de .gitignore con archivos de Claude
214
248
 
249
+ **Nuevo en v2.0.0 - Soporte Cross-Platform:**
250
+
251
+ Auto-detecta plataforma, convierte CRLF→LF en install, busca Claude en WSL (Windows), instala bash wrappers que convierten rutas C:\ a /c/
252
+
215
253
  **Opciones de instalación:**
216
254
 
217
255
  - `--force`: Reinstala aunque los hooks ya existan
@@ -255,7 +293,7 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
255
293
 
256
294
  ### Hook pre-commit (Análisis de código)
257
295
 
258
- 1. **Intercepta cada intento de commit** (en WSL)
296
+ 1. **Intercepta cada intento de commit**
259
297
  2. **Extrae y filtra archivos modificados**:
260
298
  - Solo analiza: Java, XML, properties, yml, yaml
261
299
  - Omite archivos mayores a 100KB
@@ -351,17 +389,17 @@ claude-hooks status
351
389
 
352
390
  ### Scripts
353
391
 
354
- En el archivo `pre-commit`:
392
+ **v2.0.0+**: Configuración en archivos Node.js dentro de `lib/hooks/`.
393
+
394
+ En `lib/hooks/pre-commit.js`:
355
395
 
356
396
  - **`MAX_FILE_SIZE`**: Tamaño máximo de archivo a analizar (default: 100KB)
357
397
  - **`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")
398
+ - **`ALLOWED_EXTENSIONS`**: Extensiones permitidas (default: .java, .xml, .properties, .yml, .yaml)
360
399
 
361
- En el archivo `prepare-commit-msg`:
400
+ En `lib/hooks/prepare-commit-msg.js`:
362
401
 
363
402
  - **`MAX_FILE_SIZE`**: Tamaño máximo para incluir diff completo (default: 100KB)
364
- - **`CLAUDE_CLI`**: Comando de Claude CLI (default: "claude")
365
403
 
366
404
  ### Pautas de Evaluación
367
405
 
@@ -386,27 +424,42 @@ No hay... esto es la perfección hecha código.
386
424
 
387
425
  ### Estructura del Proyecto
388
426
 
427
+ ✨ **v2.0.0+**: Nueva arquitectura modular con ES6 modules.
428
+
389
429
  ```
390
430
  claude-git-hooks/
391
431
  ├── bin/
392
- │ └── claude-hooks # CLI principal con verificación completa
432
+ │ └── claude-hooks # CLI principal (ES6 modules)
433
+ ├── lib/ # 🆕 Código Node.js modular
434
+ │ ├── hooks/
435
+ │ │ ├── pre-commit.js # Hook de análisis (Node.js)
436
+ │ │ └── prepare-commit-msg.js # Hook de mensajes (Node.js)
437
+ │ └── utils/
438
+ │ ├── logger.js # Sistema de logging centralizado
439
+ │ ├── git-operations.js # Operaciones git abstractas
440
+ │ ├── file-operations.js # I/O con filtro SKIP-ANALYSIS
441
+ │ ├── claude-client.js # Cliente Claude CLI
442
+ │ ├── prompt-builder.js # Constructor de prompts
443
+ │ └── resolution-prompt.js # Generador de resolution prompts
393
444
  ├── templates/
394
- │ ├── pre-commit # Hook de análisis de código
395
- │ ├── prepare-commit-msg # Hook de generación de mensajes
445
+ │ ├── pre-commit # Bash wrapper (llama a lib/hooks/pre-commit.js)
446
+ │ ├── prepare-commit-msg # Bash wrapper (llama a lib/hooks/prepare-commit-msg.js)
396
447
  │ ├── check-version.sh # Script de verificación de versión
397
- │ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube para pre commit
448
+ │ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube
398
449
  │ ├── CLAUDE_ANALYSIS_PROMPT_SONAR.md # Template de prompt para análisis
399
450
  │ └── CLAUDE_RESOLUTION_PROMPT.md # Template para resolución de issues
451
+ ├── test/ # 🆕 Tests unitarios con Jest
452
+ │ └── unit/
453
+ │ └── logger.test.js # Tests del logger
400
454
  ├── .claude/ # Directorio de configuración local (gitignore)
401
455
  │ └── settings.local.json # Configuración local del usuario
402
- ├── package.json # Configuración NPM
456
+ ├── jest.config.js # 🆕 Configuración Jest para ES6
457
+ ├── .eslintrc.json # 🆕 Configuración ESLint
458
+ ├── .prettierrc.json # 🆕 Configuración Prettier
459
+ ├── package.json # Configuración NPM (type: "module")
403
460
  ├── package-lock.json # Lock file de NPM
404
461
  ├── README.md # Este archivo
405
- ├── README-NPM.md # Documentación para publicación NPM
406
462
  ├── 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
463
  └── .gitignore # Archivos ignorados por git
411
464
  ```
412
465
 
@@ -432,10 +485,12 @@ claude-hooks install
432
485
 
433
486
  #### 1. Modificar Hooks
434
487
 
435
- Los hooks están en `templates/`:
488
+ **v2.0.0+**: La lógica de los hooks está en `lib/hooks/`:
436
489
 
437
- - `templates/pre-commit` - Lógica de análisis de código
438
- - `templates/prepare-commit-msg` - Lógica de generación de mensajes
490
+ - `lib/hooks/pre-commit.js` - Lógica de análisis de código (Node.js ES6)
491
+ - `lib/hooks/prepare-commit-msg.js` - Lógica de generación de mensajes (Node.js ES6)
492
+ - `templates/pre-commit` - Bash wrapper que llama al script Node.js
493
+ - `templates/prepare-commit-msg` - Bash wrapper que llama al script Node.js
439
494
 
440
495
  #### 2. Probar Localmente
441
496