claude-git-hooks 2.1.0 → 2.3.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/CHANGELOG.md +240 -0
- package/README.md +280 -78
- package/bin/claude-hooks +295 -119
- package/lib/config.js +164 -0
- package/lib/hooks/pre-commit.js +180 -67
- package/lib/hooks/prepare-commit-msg.js +47 -41
- package/lib/utils/claude-client.js +107 -16
- package/lib/utils/claude-diagnostics.js +266 -0
- package/lib/utils/file-operations.js +1 -65
- package/lib/utils/file-utils.js +65 -0
- package/lib/utils/installation-diagnostics.js +145 -0
- package/lib/utils/package-info.js +75 -0
- package/lib/utils/preset-loader.js +214 -0
- package/lib/utils/prompt-builder.js +83 -67
- package/lib/utils/resolution-prompt.js +12 -2
- package/package.json +49 -50
- package/templates/ANALYZE_DIFF.md +33 -0
- package/templates/COMMIT_MESSAGE.md +24 -0
- package/templates/CUSTOMIZATION_GUIDE.md +656 -0
- package/templates/SUBAGENT_INSTRUCTION.md +1 -0
- package/templates/config.example.json +41 -0
- package/templates/pre-commit +40 -2
- package/templates/prepare-commit-msg +40 -2
- package/templates/presets/ai/ANALYSIS_PROMPT.md +133 -0
- package/templates/presets/ai/PRE_COMMIT_GUIDELINES.md +176 -0
- package/templates/presets/ai/config.json +12 -0
- package/templates/presets/ai/preset.json +42 -0
- package/templates/presets/backend/ANALYSIS_PROMPT.md +85 -0
- package/templates/presets/backend/PRE_COMMIT_GUIDELINES.md +87 -0
- package/templates/presets/backend/config.json +12 -0
- package/templates/presets/backend/preset.json +49 -0
- package/templates/presets/database/ANALYSIS_PROMPT.md +114 -0
- package/templates/presets/database/PRE_COMMIT_GUIDELINES.md +143 -0
- package/templates/presets/database/config.json +12 -0
- package/templates/presets/database/preset.json +38 -0
- package/templates/presets/default/config.json +12 -0
- package/templates/presets/default/preset.json +53 -0
- package/templates/presets/frontend/ANALYSIS_PROMPT.md +99 -0
- package/templates/presets/frontend/PRE_COMMIT_GUIDELINES.md +95 -0
- package/templates/presets/frontend/config.json +12 -0
- package/templates/presets/frontend/preset.json +50 -0
- package/templates/presets/fullstack/ANALYSIS_PROMPT.md +107 -0
- package/templates/presets/fullstack/CONSISTENCY_CHECKS.md +147 -0
- package/templates/presets/fullstack/PRE_COMMIT_GUIDELINES.md +125 -0
- package/templates/presets/fullstack/config.json +12 -0
- package/templates/presets/fullstack/preset.json +55 -0
- package/templates/shared/ANALYSIS_PROMPT.md +103 -0
- package/templates/shared/ANALYZE_DIFF.md +33 -0
- package/templates/shared/COMMIT_MESSAGE.md +24 -0
- package/templates/shared/PRE_COMMIT_GUIDELINES.md +145 -0
- package/templates/shared/RESOLUTION_PROMPT.md +32 -0
- package/templates/check-version.sh +0 -266
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
## ✨ Novedad v2.0.0 - Ahora Cross-Platform
|
|
6
6
|
|
|
7
7
|
**¡Nueva arquitectura!** Migración completa a Node.js con ES6 modules para soporte más universal:
|
|
8
|
+
|
|
8
9
|
- ✅ **Windows** - Git en Bash y Powershell
|
|
9
10
|
- ✅ **WSL** - Subsistema de Linux
|
|
10
11
|
- ✅ **Linux** - Funcionamiento nativo
|
|
@@ -16,8 +17,9 @@
|
|
|
16
17
|
- 🔍 **Análisis de código pre-commit**: Detecta issues críticos antes de que lleguen al repo
|
|
17
18
|
- 💬 **Mensajes de commit automáticos**: Escribe "auto" y Claude genera el mensaje
|
|
18
19
|
- 📋 **Generación de PRs**: Título, descripción y tests sugeridos con un solo comando
|
|
20
|
+
- 🎯 **Presets por tech-stack**: 6 configuraciones optimizadas (backend, frontend, fullstack, database, ai, default) - v2.3.0+
|
|
19
21
|
- ⚠️ **Skip inteligente** (EXPERIMENTAL/BROKEN): Exclusión de código con comentarios SKIP_ANALYSIS - no funciona correctamente con git diff
|
|
20
|
-
-
|
|
22
|
+
- 🚀 **Parallel Analysis**: Multiple Claude CLI processes analyzing file batches simultaneously (v2.2.0+)
|
|
21
23
|
- 🔄 **Auto-actualización**: Se mantiene actualizado automáticamente
|
|
22
24
|
- 🌍 **Cross-platform**: Windows, WSL, macOS, Linux sin configuración especial
|
|
23
25
|
|
|
@@ -37,6 +39,15 @@ claude-hooks analyze-diff develop
|
|
|
37
39
|
|
|
38
40
|
# Reinstalar durante desarrollo (después de npm link)
|
|
39
41
|
claude-hooks install --force --skip-auth
|
|
42
|
+
|
|
43
|
+
# Listar presets
|
|
44
|
+
claude-hooks presets
|
|
45
|
+
|
|
46
|
+
# Seleccionar preset
|
|
47
|
+
claude-hooks --set-preset <name>
|
|
48
|
+
|
|
49
|
+
# Mostrar preset actual
|
|
50
|
+
claude-hooks preset current
|
|
40
51
|
```
|
|
41
52
|
|
|
42
53
|
### 📦 Instalación y Gestión
|
|
@@ -102,25 +113,126 @@ public void methodToIgnore() {
|
|
|
102
113
|
// SKIP_ANALYSIS_BLOCK
|
|
103
114
|
```
|
|
104
115
|
|
|
105
|
-
### 🔧 Configuración Avanzada
|
|
116
|
+
### 🔧 Configuración Avanzada (v2.2.0+)
|
|
106
117
|
|
|
107
118
|
```bash
|
|
108
|
-
#
|
|
119
|
+
# Configuración vía .claude/config.json
|
|
109
120
|
.claude/
|
|
110
|
-
├──
|
|
111
|
-
├──
|
|
112
|
-
└──
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
├── config.json # Configuración principal (v2.2.0+)
|
|
122
|
+
├── CLAUDE_PRE_COMMIT_SONAR.md # Personalizar criterios (override)
|
|
123
|
+
└── CLAUDE_ANALYSIS_PROMPT_SONAR.md # Modificar prompt (override)
|
|
124
|
+
|
|
125
|
+
# Ejemplo de config.json (todas las opciones son opcionales)
|
|
126
|
+
cat > .claude/config.json << 'EOF'
|
|
127
|
+
{
|
|
128
|
+
"preset": "backend",
|
|
129
|
+
"analysis": {
|
|
130
|
+
"maxFileSize": 150000,
|
|
131
|
+
"maxFiles": 12,
|
|
132
|
+
"timeout": 150000
|
|
133
|
+
},
|
|
134
|
+
"commitMessage": {
|
|
135
|
+
"autoKeyword": "auto",
|
|
136
|
+
"timeout": 180000
|
|
137
|
+
},
|
|
138
|
+
"subagents": {
|
|
139
|
+
"enabled": true,
|
|
140
|
+
"model": "haiku",
|
|
141
|
+
"batchSize": 3
|
|
142
|
+
},
|
|
143
|
+
"system": {
|
|
144
|
+
"debug": true
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
EOF
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### 🎯 Presets Disponibles
|
|
151
|
+
|
|
152
|
+
| Preset | Extensiones de Archivo | Caso de Uso | Tech Stack |
|
|
153
|
+
| ------------- | -------------------------------------------------------------------------- | ---------------- | ---------------------------- |
|
|
154
|
+
| **backend** | `.java`, `.xml`, `.yml`, `.yaml` | APIs Spring Boot | Spring Boot, JPA, SQL Server |
|
|
155
|
+
| **frontend** | `.js`, `.jsx`, `.ts`, `.tsx`, `.css`, `.scss`, `.html` | Apps React | React, Redux, Material-UI |
|
|
156
|
+
| **fullstack** | Todos backend + frontend | Apps full-stack | Spring Boot + React |
|
|
157
|
+
| **database** | `.sql` | Scripts de BD | SQL Server, T-SQL |
|
|
158
|
+
| **ai** | `.js`, `.json`, `.md`, `.sh` | Herramientas CLI | Node.js, Claude API |
|
|
159
|
+
| **default** | `.js`, `.sh`, `.py`, `.rb`, `.pl`, `.sql`, `.yaml`, `.json`, `.xml`, `.md` | Propósito general| Lenguajes mixtos |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
#### 🔍 Qué Verifica Cada Preset
|
|
164
|
+
|
|
165
|
+
**Backend (Spring Boot + SQL Server)**
|
|
166
|
+
|
|
167
|
+
- ✅ Diseño de API REST y métodos HTTP
|
|
168
|
+
- ✅ Entidades JPA y repositorios
|
|
169
|
+
- ✅ Seguridad (OWASP Top 10)
|
|
170
|
+
- ✅ Prevención de inyección SQL
|
|
171
|
+
- ✅ Gestión de transacciones
|
|
172
|
+
- ✅ Mapeos DTO
|
|
173
|
+
- ✅ Mejores prácticas Spring Security
|
|
174
|
+
|
|
175
|
+
**Frontend (React + Material-UI)**
|
|
176
|
+
|
|
177
|
+
- ✅ Mejores prácticas de hooks React
|
|
178
|
+
- ✅ Diseño de componentes y reusabilidad
|
|
179
|
+
- ✅ Patrones de gestión de estado
|
|
180
|
+
- ✅ Prevención XSS
|
|
181
|
+
- ✅ Optimización de rendimiento
|
|
182
|
+
- ✅ Accesibilidad (a11y)
|
|
183
|
+
- ✅ Error boundaries
|
|
184
|
+
|
|
185
|
+
**Fullstack (Spring Boot + React)**
|
|
186
|
+
|
|
187
|
+
- ✅ **Consistencia de contrato API** (prioridad)
|
|
188
|
+
- ✅ Flujo de datos (BD → API → UI)
|
|
189
|
+
- ✅ Autenticación entre capas
|
|
190
|
+
- ✅ Consistencia en manejo de errores
|
|
191
|
+
- ✅ Todas las verificaciones backend
|
|
192
|
+
- ✅ Todas las verificaciones frontend
|
|
193
|
+
|
|
194
|
+
**Database (SQL Server)**
|
|
195
|
+
|
|
196
|
+
- ✅ Riesgos de inyección SQL
|
|
197
|
+
- ✅ UPDATE/DELETE sin WHERE
|
|
198
|
+
- ✅ Índices faltantes
|
|
199
|
+
- ✅ Rendimiento de consultas
|
|
200
|
+
- ✅ Manejo de transacciones
|
|
201
|
+
- ✅ Restricciones de integridad de datos
|
|
202
|
+
|
|
203
|
+
**AI (Node.js + Claude)**
|
|
204
|
+
|
|
205
|
+
- ✅ Mejores prácticas Claude API
|
|
206
|
+
- ✅ Calidad de ingeniería de prompts
|
|
207
|
+
- ✅ Experiencia de usuario CLI
|
|
208
|
+
- ✅ Seguridad de operaciones Git
|
|
209
|
+
- ✅ Compatibilidad multiplataforma
|
|
210
|
+
- ✅ Protección de API key
|
|
211
|
+
|
|
212
|
+
**Default (Propósito general)**
|
|
213
|
+
|
|
214
|
+
- ✅ Fundamentos de calidad de código
|
|
215
|
+
- ✅ Fundamentos de seguridad
|
|
216
|
+
- ✅ Manejo de errores
|
|
217
|
+
- ✅ Mejores prácticas por lenguaje
|
|
218
|
+
- ✅ Mantenibilidad
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
##### ⚙️ Prioridad de Configuración
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
defaults (lib/config.js)
|
|
226
|
+
↓
|
|
227
|
+
user config (.claude/config.json) ← General preferences
|
|
228
|
+
↓
|
|
229
|
+
preset config (.claude/presets/{name}/config.json) ← MÁXIMA PRIORIDAD (tech-stack specific)
|
|
122
230
|
```
|
|
123
231
|
|
|
232
|
+
**Rationale**: User sets general preferences, preset provides tech-stack-specific overrides.
|
|
233
|
+
|
|
234
|
+
**Nota v2.2.0+:** Variables de entorno ya NO son soportadas. Usar `.claude/config.json` en su lugar.
|
|
235
|
+
|
|
124
236
|
### 🎯 Casos de Uso Específicos
|
|
125
237
|
|
|
126
238
|
```bash
|
|
@@ -148,60 +260,84 @@ git commit -m "fix: resolver issues"
|
|
|
148
260
|
1. **Mensaje automático**: Usa `"auto"` como mensaje para que Claude lo genere
|
|
149
261
|
2. **Skip auth**: Usa `--skip-auth` en CI/CD o desarrollo local
|
|
150
262
|
3. **Force install**: Usa `--force` para reinstalar sin confirmación
|
|
151
|
-
4. **Debug**: Activa
|
|
263
|
+
4. **Debug**: Activa en `.claude/config.json`: `{"system": {"debug": true}}`
|
|
152
264
|
5. **Archivos grandes**: Se omiten automáticamente archivos > 100KB
|
|
153
|
-
6. **Límite de archivos**: Máximo 10 archivos por commit
|
|
265
|
+
6. **Límite de archivos**: Máximo 10 archivos por commit (configurable)
|
|
154
266
|
|
|
155
|
-
### 🚀 Parallel Analysis
|
|
267
|
+
### 🚀 Parallel Analysis (v2.2.0+)
|
|
156
268
|
|
|
157
|
-
**When analyzing 3+ files**,
|
|
269
|
+
**When analyzing 3+ files**, parallel execution runs multiple Claude CLI processes simultaneously for faster analysis:
|
|
158
270
|
|
|
159
271
|
```bash
|
|
160
|
-
#
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
272
|
+
# Configure in .claude/config.json
|
|
273
|
+
{
|
|
274
|
+
"subagents": {
|
|
275
|
+
"enabled": true,
|
|
276
|
+
"model": "haiku",
|
|
277
|
+
"batchSize": 2
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
167
281
|
|
|
168
|
-
|
|
169
|
-
export CLAUDE_SUBAGENT_BATCH_SIZE=3
|
|
282
|
+
**Model options:**
|
|
170
283
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
284
|
+
- `haiku` - Fast & cheap (default, recommended)
|
|
285
|
+
- `sonnet` - Balanced quality/speed
|
|
286
|
+
- `opus` - Maximum quality (slower)
|
|
174
287
|
|
|
175
288
|
**How batching works:**
|
|
176
|
-
- `BATCH_SIZE=1` with 4 files → 4 sequential batches (1 subagent each)
|
|
177
|
-
- `BATCH_SIZE=3` with 4 files → 2 batches (3 parallel, then 1)
|
|
178
|
-
- `BATCH_SIZE=4` with 4 files → 1 batch (all 4 in parallel)
|
|
179
|
-
- Batch size is validated automatically (minimum: 1)
|
|
180
289
|
|
|
181
|
-
|
|
182
|
-
- Each
|
|
183
|
-
-
|
|
184
|
-
- Results are consolidated automatically
|
|
185
|
-
- Shows execution time for all operations
|
|
186
|
-
- Uses one-line prompt injection - no complex architecture changes
|
|
290
|
+
- Files are split into batches of size `batchSize`
|
|
291
|
+
- Each batch runs in a separate Claude CLI process
|
|
292
|
+
- All batches execute in parallel (true OS-level parallelism)
|
|
293
|
+
- Results are consolidated automatically
|
|
187
294
|
|
|
188
|
-
**
|
|
295
|
+
**Examples with 4 files:**
|
|
296
|
+
|
|
297
|
+
- `batchSize: 1` → 4 parallel Claude processes (1 file each) - **fastest**
|
|
298
|
+
- `batchSize: 2` → 2 parallel Claude processes (2 files each) - **balanced**
|
|
299
|
+
- `batchSize: 4` → 1 process (all files) - no parallelization
|
|
300
|
+
|
|
301
|
+
**Speed improvement:**
|
|
302
|
+
|
|
303
|
+
- Sequential: 60s per file × 4 = 240s total
|
|
304
|
+
- Parallel (batch=1): max(60s) = 60s total ✅ **4x faster**
|
|
305
|
+
|
|
306
|
+
**Console output:**
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
🚀 PARALLEL EXECUTION: 4 Claude processes
|
|
310
|
+
⚡ Launching batch 1/4...
|
|
311
|
+
⚡ Launching batch 2/4...
|
|
312
|
+
⚡ Launching batch 3/4...
|
|
313
|
+
⚡ Launching batch 4/4...
|
|
314
|
+
⏳ Waiting for all batches to complete...
|
|
315
|
+
|
|
316
|
+
✅ PARALLEL EXECUTION COMPLETE: 4 results in 62.5s
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Best for:** Large commits (3+ files), refactoring, multi-file features
|
|
189
320
|
|
|
190
321
|
### 🎨 Personalización y Customización
|
|
191
322
|
|
|
192
323
|
**Archivos clave para modificar:**
|
|
324
|
+
|
|
325
|
+
- `.claude/config.json` - Configuración principal (v2.2.0+)
|
|
193
326
|
- `.claude/CLAUDE_PRE_COMMIT_SONAR.md` - Criterios (backend/frontend/data/db)
|
|
194
327
|
- `.claude/CLAUDE_ANALYSIS_PROMPT_SONAR.md` - Template del prompt
|
|
195
|
-
- `lib/hooks/pre-commit.js` - CONFIG object (extensiones, límites, umbrales)
|
|
196
328
|
|
|
197
|
-
**
|
|
329
|
+
**Crear o modificar presets personalizados:**
|
|
330
|
+
|
|
198
331
|
```bash
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
332
|
+
# Ver guía completa de customización
|
|
333
|
+
cat templates/CUSTOMIZATION_GUIDE.md
|
|
334
|
+
|
|
335
|
+
# O en GitHub
|
|
336
|
+
# https://github.com/pablorovito/claude-git-hooks/blob/main/templates/CUSTOMIZATION_GUIDE.md
|
|
202
337
|
```
|
|
203
338
|
|
|
204
339
|
**Ejemplo:**
|
|
340
|
+
|
|
205
341
|
```bash
|
|
206
342
|
vim .claude/CLAUDE_PRE_COMMIT_SONAR.md # Agregar reglas API REST/Spring Boot
|
|
207
343
|
```
|
|
@@ -268,9 +404,9 @@ El comando `claude-hooks install` crea los siguientes archivos y directorios:
|
|
|
268
404
|
2. **`.git/hooks/prepare-commit-msg`** - Hook de generación de mensajes
|
|
269
405
|
3. **`.git/hooks/check-version.sh`** - Script de verificación de versión
|
|
270
406
|
4. **`.claude/`** - Directorio para archivos de configuración
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
407
|
+
- `CLAUDE_PRE_COMMIT_SONAR.md` - Pautas de evaluación SonarQube
|
|
408
|
+
- `CLAUDE_ANALYSIS_PROMPT_SONAR.md` - Template de prompt para análisis SonarQube
|
|
409
|
+
- `CLAUDE_RESOLUTION_PROMPT.md` - Template para prompt de resolución AI
|
|
274
410
|
|
|
275
411
|
### Actualización automática de .gitignore
|
|
276
412
|
|
|
@@ -298,21 +434,21 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
298
434
|
|
|
299
435
|
1. **Intercepta cada intento de commit**
|
|
300
436
|
2. **Extrae y filtra archivos modificados**:
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
437
|
+
- Solo analiza: Java, XML, properties, yml, yaml
|
|
438
|
+
- Omite archivos mayores a 100KB
|
|
439
|
+
- Límite de 10 archivos por commit
|
|
304
440
|
3. **Construye prompt inteligente**:
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
441
|
+
- Usa template de prompt desde `.claude/CLAUDE_ANALYSIS_PROMPT*.md`
|
|
442
|
+
- Lee las pautas desde `.claude/CLAUDE_PRE_COMMIT*.md`
|
|
443
|
+
- Incluye el diff completo para archivos nuevos
|
|
444
|
+
- Muestra solo cambios para archivos existentes
|
|
309
445
|
4. **Envía a Claude CLI para revisión**
|
|
310
446
|
5. **Procesa respuesta JSON estructurada**:
|
|
311
|
-
|
|
312
|
-
|
|
447
|
+
- blockingIssues siempre como objetos con localización precisa
|
|
448
|
+
- verifica `QUALITY_GATE`, muestra métricas y issues por severidad
|
|
313
449
|
6. **Decisión final**:
|
|
314
|
-
|
|
315
|
-
|
|
450
|
+
- Si hay problemas críticos → genera prompt AI de resolución y bloquea commit
|
|
451
|
+
- Si todo está bien → commit procede
|
|
316
452
|
7. **Generación de Prompt de Resolución AI** (opcional): Cuando se detectan problemas críticos:
|
|
317
453
|
|
|
318
454
|
- Se genera automáticamente un archivo `claude_resolution_prompt.md`
|
|
@@ -323,28 +459,28 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
323
459
|
### Hook prepare-commit-msg (Generación automática de mensajes)
|
|
324
460
|
|
|
325
461
|
1. **Se activa cuando el mensaje es**:
|
|
326
|
-
|
|
462
|
+
- `"auto"`
|
|
327
463
|
2. **Analiza los cambios del staging area**:
|
|
328
|
-
|
|
329
|
-
|
|
464
|
+
- Lista archivos modificados con estadísticas
|
|
465
|
+
- Incluye diffs completos para archivos < 100KB
|
|
330
466
|
3. **Genera mensaje en formato Conventional Commits**:
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
467
|
+
- Determina tipo: feat, fix, docs, style, refactor, test, chore
|
|
468
|
+
- Crea título conciso y descriptivo
|
|
469
|
+
- Añade body con detalles si es necesario
|
|
334
470
|
4. **Manejo de errores**:
|
|
335
|
-
|
|
336
|
-
|
|
471
|
+
- Si falla la generación → cancela el commit completamente
|
|
472
|
+
- No usa mensajes genéricos de fallback
|
|
337
473
|
|
|
338
474
|
### Características adicionales
|
|
339
475
|
|
|
340
476
|
- **Generación de información para Pull Requests**: `claude-hooks analyze-diff [branch]` para comparar rama local con rama origin, propone nombre para rama actual, título y detalles para pull request, da tips para verificar trabajo. Si se especifica branch, compara con origin/branch. Si no, compara con origin de la rama actual. Este comando genera automáticamente:
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
477
|
+
- 📝 Título de PR conciso (máx. 72 caracteres)
|
|
478
|
+
- 📄 Descripción detallada con markdown
|
|
479
|
+
- 🌿 Nombre de rama sugerido (formato: tipo/descripcion)
|
|
480
|
+
- 📋 Tipo de cambio (feature/fix/refactor/docs/test/chore)
|
|
481
|
+
- ⚠️ Indicador de breaking changes
|
|
482
|
+
- 🧪 Notas de testing recomendado
|
|
483
|
+
- 📝 Archivo `.claude-pr-analysis.json`
|
|
348
484
|
- **Auto-actualización**: Verificación automática de versiones antes de cada commit con prompt interactivo para actualizar
|
|
349
485
|
- **Comando update**: `claude-hooks update` para actualizar manualmente a la última versión
|
|
350
486
|
- **Modo debug**: `DEBUG=1 git commit` guarda respuestas en `debug-claude-response.json`
|
|
@@ -432,16 +568,20 @@ claude-git-hooks/
|
|
|
432
568
|
├── bin/
|
|
433
569
|
│ └── claude-hooks # CLI principal (ES6 modules)
|
|
434
570
|
├── lib/ # 🆕 Código Node.js modular
|
|
571
|
+
│ ├── config.js # Configuración centralizada con merge
|
|
435
572
|
│ ├── hooks/
|
|
436
573
|
│ │ ├── pre-commit.js # Hook de análisis (Node.js)
|
|
437
574
|
│ │ └── prepare-commit-msg.js # Hook de mensajes (Node.js)
|
|
438
575
|
│ └── utils/
|
|
439
576
|
│ ├── logger.js # Sistema de logging centralizado
|
|
440
577
|
│ ├── git-operations.js # Operaciones git abstractas
|
|
441
|
-
│ ├── file-
|
|
578
|
+
│ ├── file-utils.js # Utilidades de sistema de archivos
|
|
442
579
|
│ ├── claude-client.js # Cliente Claude CLI
|
|
443
580
|
│ ├── prompt-builder.js # Constructor de prompts
|
|
444
|
-
│
|
|
581
|
+
│ ├── resolution-prompt.js # Generador de resolution prompts
|
|
582
|
+
│ ├── preset-loader.js # Cargador de presets
|
|
583
|
+
│ ├── installation-diagnostics.js # Diagnósticos de instalación
|
|
584
|
+
│ └── claude-diagnostics.js # Diagnósticos de errores Claude CLI
|
|
445
585
|
├── templates/
|
|
446
586
|
│ ├── pre-commit # Bash wrapper (llama a lib/hooks/pre-commit.js)
|
|
447
587
|
│ ├── prepare-commit-msg # Bash wrapper (llama a lib/hooks/prepare-commit-msg.js)
|
|
@@ -464,6 +604,68 @@ claude-git-hooks/
|
|
|
464
604
|
└── .gitignore # Archivos ignorados por git
|
|
465
605
|
```
|
|
466
606
|
|
|
607
|
+
### 🔌 Utility Modules Reference
|
|
608
|
+
|
|
609
|
+
**Purpose**: Reusable modules for extending claude-hooks or building similar tools
|
|
610
|
+
|
|
611
|
+
#### Core Utilities
|
|
612
|
+
|
|
613
|
+
| Module | Purpose | Key Exports | Usage Context |
|
|
614
|
+
|--------|---------|-------------|---------------|
|
|
615
|
+
| **`config.js`** | Centralized configuration management | `getConfig()`, `defaults` | Priority merging: defaults < user < preset |
|
|
616
|
+
| **`logger.js`** | Structured logging with debug support | `info()`, `warning()`, `error()`, `debug()` | Console output with context tracking |
|
|
617
|
+
| **`git-operations.js`** | Git command abstractions | `getRepoRoot()`, `getStagedFiles()`, `getDiff()` | Safe git operations with error handling |
|
|
618
|
+
| **`file-utils.js`** | File system operations | `ensureDir()`, `writeFile()` | Repo-root-relative path handling |
|
|
619
|
+
| **`claude-client.js`** | Claude CLI integration | `analyzeCode()`, `analyzeCodeParallel()` | Prompt execution with timeout/retry |
|
|
620
|
+
| **`prompt-builder.js`** | Template-based prompts | `buildAnalysisPrompt()`, `loadTemplate()` | Dynamic prompt construction from .md files |
|
|
621
|
+
| **`preset-loader.js`** | Preset system | `loadPreset()`, `listPresets()`, `loadTemplate()` | Metadata, config, template loading |
|
|
622
|
+
| **`resolution-prompt.js`** | Issue resolution prompts | `generateResolutionPrompt()` | AI-friendly error remediation prompts |
|
|
623
|
+
| **`installation-diagnostics.js`** | Installation error diagnostics | `formatError()`, `getInstallationDiagnostics()` | Installation error formatting with remediation |
|
|
624
|
+
| **`claude-diagnostics.js`** | Claude CLI error diagnostics | `detectClaudeError()`, `formatClaudeError()` | Rate limit, auth, network error detection |
|
|
625
|
+
|
|
626
|
+
#### Using Utilities in Other Claude Instances
|
|
627
|
+
|
|
628
|
+
**Example: Check installation health**
|
|
629
|
+
```javascript
|
|
630
|
+
import { formatError } from './lib/utils/installation-diagnostics.js';
|
|
631
|
+
|
|
632
|
+
try {
|
|
633
|
+
// ... operation that may fail
|
|
634
|
+
} catch (error) {
|
|
635
|
+
console.error(formatError('Operation failed', ['Additional context line']));
|
|
636
|
+
process.exit(1);
|
|
637
|
+
}
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
**Example: Load configuration**
|
|
641
|
+
```javascript
|
|
642
|
+
import { getConfig } from './lib/config.js';
|
|
643
|
+
|
|
644
|
+
const config = await getConfig();
|
|
645
|
+
const maxFiles = config.analysis.maxFiles;
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
**Example: Execute git operations**
|
|
649
|
+
```javascript
|
|
650
|
+
import { getRepoRoot, getStagedFiles } from './lib/utils/git-operations.js';
|
|
651
|
+
|
|
652
|
+
const repoRoot = getRepoRoot();
|
|
653
|
+
const files = getStagedFiles({ extensions: ['.js', '.ts'] });
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
**Example: Build custom prompts**
|
|
657
|
+
```javascript
|
|
658
|
+
import { buildAnalysisPrompt } from './lib/utils/prompt-builder.js';
|
|
659
|
+
|
|
660
|
+
const prompt = await buildAnalysisPrompt({
|
|
661
|
+
templateName: 'CUSTOM_PROMPT.md',
|
|
662
|
+
files: filesData,
|
|
663
|
+
metadata: { REPO_NAME: 'my-repo' }
|
|
664
|
+
});
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
**Note**: All utilities follow single-responsibility principle and include JSDoc documentation inline.
|
|
668
|
+
|
|
467
669
|
### Configuración del Entorno de Desarrollo
|
|
468
670
|
|
|
469
671
|
```bash
|