claude-git-hooks 2.4.1 → 2.6.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 +364 -150
- package/README.md +128 -40
- package/bin/claude-hooks +436 -2
- package/lib/config.js +29 -0
- package/lib/hooks/pre-commit.js +2 -6
- package/lib/hooks/prepare-commit-msg.js +27 -4
- package/lib/utils/claude-client.js +261 -136
- package/lib/utils/file-operations.js +0 -102
- package/lib/utils/github-api.js +641 -0
- package/lib/utils/github-client.js +770 -0
- package/lib/utils/interactive-ui.js +314 -0
- package/lib/utils/mcp-setup.js +342 -0
- package/lib/utils/sanitize.js +180 -0
- package/lib/utils/task-id.js +441 -0
- package/lib/utils/which-command.js +225 -0
- package/package.json +10 -1
- package/templates/CREATE_GITHUB_PR.md +32 -0
- package/templates/config.github.example.json +51 -0
- package/templates/presets/ai/PRE_COMMIT_GUIDELINES.md +18 -1
- package/templates/presets/ai/preset.json +37 -37
- package/templates/settings.local.example.json +4 -0
package/README.md
CHANGED
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
## 🎯 Características principales
|
|
16
16
|
|
|
17
17
|
- 🔍 **Análisis de código pre-commit**: Detecta issues críticos antes de que lleguen al repo
|
|
18
|
-
- 💬 **Mensajes de commit automáticos**: Escribe "auto" y Claude genera el mensaje
|
|
19
|
-
- 📋 **Generación de PRs**:
|
|
18
|
+
- 💬 **Mensajes de commit automáticos**: Escribe "auto" y Claude genera el mensaje con task-id (Jira, GitHub, Linear)
|
|
19
|
+
- 📋 **Generación de PRs**: Análisis de diff y metadata automática con un comando
|
|
20
|
+
- 🔗 **Creación de PRs en GitHub**: Claude genera metadata, Octokit crea el PR (determinista) - v2.5.0+
|
|
20
21
|
- 🎯 **Presets por tech-stack**: 6 configuraciones optimizadas (backend, frontend, fullstack, database, ai, default) - v2.3.0+
|
|
21
|
-
- ⚠️ **Skip inteligente** (EXPERIMENTAL/BROKEN): Exclusión de código con comentarios SKIP_ANALYSIS - no funciona correctamente con git diff
|
|
22
22
|
- 🚀 **Parallel Analysis**: Multiple Claude CLI processes analyzing file batches simultaneously (v2.2.0+)
|
|
23
23
|
- 🔄 **Auto-actualización**: Se mantiene actualizado automáticamente
|
|
24
24
|
- 🌍 **Cross-platform**: Windows, WSL, macOS, Linux sin configuración especial
|
|
@@ -37,6 +37,12 @@ claude-hooks analyze-diff
|
|
|
37
37
|
# Analizar diferencias para PR (comparar con origin/develop)
|
|
38
38
|
claude-hooks analyze-diff develop
|
|
39
39
|
|
|
40
|
+
# Crear PR en GitHub con metadata automática (v2.5.0+)
|
|
41
|
+
claude-hooks create-pr develop
|
|
42
|
+
|
|
43
|
+
# Configurar token de GitHub para PRs (v2.5.0+)
|
|
44
|
+
claude-hooks setup-github
|
|
45
|
+
|
|
40
46
|
# Reinstalar durante desarrollo (después de npm link)
|
|
41
47
|
claude-hooks install --force --skip-auth
|
|
42
48
|
|
|
@@ -92,8 +98,14 @@ claude-hooks enable
|
|
|
92
98
|
# Commit con análisis de código
|
|
93
99
|
git commit -m "feat: nueva funcionalidad"
|
|
94
100
|
|
|
95
|
-
# Generar mensaje
|
|
101
|
+
# Generar mensaje automático con task-id (v2.5.0+)
|
|
102
|
+
# Branch: feature/IX-123-add-auth → detecta IX-123
|
|
103
|
+
git commit -m "auto"
|
|
104
|
+
# Resultado: [IX-123] feat: add user authentication
|
|
105
|
+
|
|
106
|
+
# Branch: feature/471459f-test → NO detecta (hash, no task-id)
|
|
96
107
|
git commit -m "auto"
|
|
108
|
+
# Resultado: feat: add test feature (sin task-id)
|
|
97
109
|
|
|
98
110
|
# Saltar análisis (emergencias)
|
|
99
111
|
git commit --no-verify -m "hotfix: corrección urgente"
|
|
@@ -102,27 +114,93 @@ git commit --no-verify -m "hotfix: corrección urgente"
|
|
|
102
114
|
git commit --amend
|
|
103
115
|
```
|
|
104
116
|
|
|
105
|
-
##
|
|
117
|
+
## 🚀 Quick Setup: GitHub PR Creation
|
|
106
118
|
|
|
107
|
-
|
|
119
|
+
Para usar `create-pr` necesitas configurar autenticación con GitHub:
|
|
120
|
+
|
|
121
|
+
### 1. Ejecuta el setup wizard
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
claude-hooks setup-github
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
El comando verificará tu token o te guiará a configurarlo.
|
|
128
|
+
|
|
129
|
+
### 2. Opciones de configuración del token
|
|
130
|
+
|
|
131
|
+
**Opción A - Settings local (recomendado):**
|
|
108
132
|
|
|
109
|
-
|
|
133
|
+
```bash
|
|
134
|
+
# Crear .claude/settings.local.json
|
|
135
|
+
cat > .claude/settings.local.json << 'EOF'
|
|
136
|
+
{
|
|
137
|
+
"githubToken": "ghp_tu_token_aqui"
|
|
138
|
+
}
|
|
139
|
+
EOF
|
|
140
|
+
```
|
|
110
141
|
|
|
111
|
-
|
|
112
|
-
// NOTA: Este feature NO funciona correctamente
|
|
113
|
-
// Los marcadores no son detectados si fueron agregados en commits anteriores
|
|
142
|
+
**Opción B - Variable de entorno:**
|
|
114
143
|
|
|
115
|
-
|
|
116
|
-
|
|
144
|
+
```bash
|
|
145
|
+
export GITHUB_TOKEN="ghp_tu_token_aqui"
|
|
146
|
+
# o
|
|
147
|
+
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_tu_token_aqui"
|
|
148
|
+
```
|
|
117
149
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
150
|
+
**Opción C - Claude Desktop config** (auto-detectado si existe)
|
|
151
|
+
|
|
152
|
+
### 3. Crear GitHub token
|
|
153
|
+
|
|
154
|
+
1. Ir a https://github.com/settings/tokens
|
|
155
|
+
2. "Generate new token (classic)"
|
|
156
|
+
3. Scopes requeridos: **repo** (all) + **read:org**
|
|
157
|
+
4. Copiar token (empieza con `ghp_`)
|
|
158
|
+
|
|
159
|
+
### 4. Configurar reviewers y labels (opcional)
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Ver templates/config.github.example.json para formato completo
|
|
163
|
+
cat > .claude/config.json << 'EOF'
|
|
164
|
+
{
|
|
165
|
+
"github": {
|
|
166
|
+
"pr": {
|
|
167
|
+
"defaultBase": "develop",
|
|
168
|
+
"reviewers": ["tu-usuario-github", "teammate"],
|
|
169
|
+
"labelRules": {
|
|
170
|
+
"backend": ["backend", "java"],
|
|
171
|
+
"frontend": ["frontend", "react"]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
122
175
|
}
|
|
123
|
-
|
|
176
|
+
EOF
|
|
124
177
|
```
|
|
125
178
|
|
|
179
|
+
**Nota:** Los reviewers también se detectan automáticamente desde CODEOWNERS si existe.
|
|
180
|
+
|
|
181
|
+
### 5. Crear tu primer PR
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
git checkout -b feature/mi-feature
|
|
185
|
+
# ... hacer cambios ...
|
|
186
|
+
git add .
|
|
187
|
+
git commit -m "feat: nueva funcionalidad"
|
|
188
|
+
git push -u origin feature/mi-feature
|
|
189
|
+
|
|
190
|
+
# Crear PR
|
|
191
|
+
claude-hooks create-pr develop
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Arquitectura:** Claude analiza el diff y genera metadata (título, descripción, reviewers, labels) → Octokit crea el PR de forma determinista.
|
|
195
|
+
|
|
196
|
+
Ver `templates/config.github.example.json` para configuración avanzada (reviewer rules por path, custom labels, etc.).
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 📆 Próximos Desarrollos
|
|
201
|
+
|
|
202
|
+
Toda idea es bienvenida, aunque parezca espantosa. Si hay bugs, incluirlos también. Dónde? en https://github.com/mscope-S-L/git-hooks/issues/new.
|
|
203
|
+
|
|
126
204
|
### 🔧 Configuración Avanzada (v2.2.0+)
|
|
127
205
|
|
|
128
206
|
```bash
|
|
@@ -143,7 +221,8 @@ cat > .claude/config.json << 'EOF'
|
|
|
143
221
|
},
|
|
144
222
|
"commitMessage": {
|
|
145
223
|
"autoKeyword": "auto",
|
|
146
|
-
"timeout": 180000
|
|
224
|
+
"timeout": 180000,
|
|
225
|
+
"taskIdPattern": "([A-Z]{1,3}[-\\s]\\d{3,5})"
|
|
147
226
|
},
|
|
148
227
|
"subagents": {
|
|
149
228
|
"enabled": true,
|
|
@@ -155,6 +234,11 @@ cat > .claude/config.json << 'EOF'
|
|
|
155
234
|
}
|
|
156
235
|
}
|
|
157
236
|
EOF
|
|
237
|
+
|
|
238
|
+
# Personalizar patrón de task-id
|
|
239
|
+
# Default: 1-3 letras + separador + 3-5 dígitos
|
|
240
|
+
# Ejemplos válidos: ABC-12345, IX-123, DE 4567
|
|
241
|
+
# No detecta: 471459f (hash), ABCD-123 (4 letras), IX-12 (2 dígitos)
|
|
158
242
|
```
|
|
159
243
|
|
|
160
244
|
#### 🎯 Presets Disponibles
|
|
@@ -267,12 +351,13 @@ git commit -m "fix: resolver issues"
|
|
|
267
351
|
|
|
268
352
|
### ⚡ Tips y Trucos
|
|
269
353
|
|
|
270
|
-
1. **Mensaje automático**: Usa `"auto"` como mensaje para que Claude lo genere
|
|
271
|
-
2. **
|
|
272
|
-
3. **
|
|
273
|
-
4. **
|
|
274
|
-
5. **
|
|
275
|
-
6. **
|
|
354
|
+
1. **Mensaje automático**: Usa `"auto"` como mensaje para que Claude lo genere con task-id automático
|
|
355
|
+
2. **Task-ID pattern**: Default 1-3 letras + separador + 3-5 dígitos (ABC-12345, IX-123). Configurable en `.claude/config.json` → `commitMessage.taskIdPattern`
|
|
356
|
+
3. **Skip auth**: Usa `--skip-auth` en CI/CD o desarrollo local
|
|
357
|
+
4. **Force install**: Usa `--force` para reinstalar sin confirmación
|
|
358
|
+
5. **Debug**: Activa con `claude-hooks --debug true` o en `.claude/config.json`: `{"system": {"debug": true}}`
|
|
359
|
+
6. **Archivos grandes**: Se omiten automáticamente archivos > 1MB
|
|
360
|
+
7. **Límite de archivos**: Máximo 30 archivos por commit (configurable)
|
|
276
361
|
|
|
277
362
|
### 🚀 Parallel Analysis (v2.2.0+)
|
|
278
363
|
|
|
@@ -362,6 +447,8 @@ vim .claude/CLAUDE_PRE_COMMIT_SONAR.md # Agregar reglas API REST/Spring Boot
|
|
|
362
447
|
- **Git** configurado
|
|
363
448
|
- **Claude CLI** instalado y autenticado
|
|
364
449
|
|
|
450
|
+
🆕 **v2.6.0+**: Totalmente compatible con Node.js 24
|
|
451
|
+
|
|
365
452
|
### Credenciales Git
|
|
366
453
|
|
|
367
454
|
Si es tu primera vez configurando git en esta terminal, configura tus credenciales:
|
|
@@ -488,25 +575,12 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
488
575
|
- ⚠️ Indicador de breaking changes
|
|
489
576
|
- 🧪 Notas de testing recomendado
|
|
490
577
|
- 📝 Archivo `.claude-pr-analysis.json`
|
|
578
|
+
- **Creación de PRs en GitHub (v2.5.0+)**: `claude-hooks create-pr [branch]` crea pull requests directamente en GitHub vía MCP. Extrae task-id de branch, genera metadata con Claude, detecta reviewers desde CODEOWNERS o config, aplica labels por preset, y muestra preview interactivo antes de crear
|
|
491
579
|
- **Auto-actualización**: Verificación automática de versiones antes de cada commit con prompt interactivo para actualizar
|
|
492
580
|
- **Comando update**: `claude-hooks update` para actualizar manualmente a la última versión
|
|
493
581
|
- **Modo debug**: `claude-hooks --debug true` activa logging detallado para troubleshooting
|
|
494
582
|
- **Análisis de PR**: Nuevo comando `analyze-diff` para generar información de Pull Requests
|
|
495
583
|
- **Validación de dependencias**: Verifica que Claude CLI esté autenticado antes de ejecutar
|
|
496
|
-
- **⚠️ 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.
|
|
497
|
-
|
|
498
|
-
```java
|
|
499
|
-
// NOTA: Este feature actualmente NO funciona de forma confiable
|
|
500
|
-
// SKIP_ANALYSIS_LINE
|
|
501
|
-
@Autowired private LegacyService legacyService;
|
|
502
|
-
|
|
503
|
-
// SKIP_ANALYSIS_BLOCK
|
|
504
|
-
@Deprecated
|
|
505
|
-
public void methodWithKnownIssues() {
|
|
506
|
-
System.out.println("Legacy code");
|
|
507
|
-
}
|
|
508
|
-
// SKIP_ANALYSIS_BLOCK
|
|
509
|
-
```
|
|
510
584
|
|
|
511
585
|
### Desactivar/Activar hooks
|
|
512
586
|
|
|
@@ -588,14 +662,23 @@ claude-git-hooks/
|
|
|
588
662
|
│ ├── resolution-prompt.js # Generador de resolution prompts
|
|
589
663
|
│ ├── preset-loader.js # Cargador de presets
|
|
590
664
|
│ ├── installation-diagnostics.js # Diagnósticos de instalación
|
|
591
|
-
│
|
|
665
|
+
│ ├── claude-diagnostics.js # Diagnósticos de errores Claude CLI
|
|
666
|
+
│ ├── github-api.js # 🆕 Integración Octokit (determinista)
|
|
667
|
+
│ ├── github-client.js # Cliente GitHub (CODEOWNERS, reviewers)
|
|
668
|
+
│ ├── task-id.js # Extracción task-id (Jira, GitHub, Linear)
|
|
669
|
+
│ ├── interactive-ui.js # UI interactiva CLI (preview, prompts)
|
|
670
|
+
│ └── mcp-setup.js # Setup y detección MCP
|
|
592
671
|
├── templates/
|
|
593
672
|
│ ├── pre-commit # Bash wrapper (llama a lib/hooks/pre-commit.js)
|
|
594
673
|
│ ├── prepare-commit-msg # Bash wrapper (llama a lib/hooks/prepare-commit-msg.js)
|
|
595
674
|
│ ├── check-version.sh # Script de verificación de versión
|
|
596
675
|
│ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube
|
|
597
676
|
│ ├── CLAUDE_ANALYSIS_PROMPT_SONAR.md # Template de prompt para análisis
|
|
598
|
-
│
|
|
677
|
+
│ ├── CLAUDE_RESOLUTION_PROMPT.md # Template para resolución de issues
|
|
678
|
+
│ ├── ANALYZE_DIFF.md # Template para análisis de diff (PR metadata)
|
|
679
|
+
│ ├── CREATE_GITHUB_PR.md # Template para creación de PR
|
|
680
|
+
│ ├── config.github.example.json # 🆕 Ejemplo configuración GitHub
|
|
681
|
+
│ └── settings.local.example.json # 🆕 Ejemplo token local (gitignored)
|
|
599
682
|
├── test/ # 🆕 Tests unitarios con Jest
|
|
600
683
|
│ └── unit/
|
|
601
684
|
│ └── logger.test.js # Tests del logger
|
|
@@ -629,6 +712,11 @@ claude-git-hooks/
|
|
|
629
712
|
| **`resolution-prompt.js`** | Issue resolution prompts | `generateResolutionPrompt()` | AI-friendly error remediation prompts |
|
|
630
713
|
| **`installation-diagnostics.js`** | Installation error diagnostics | `formatError()`, `getInstallationDiagnostics()` | Installation error formatting with remediation |
|
|
631
714
|
| **`claude-diagnostics.js`** | Claude CLI error diagnostics | `detectClaudeError()`, `formatClaudeError()` | Rate limit, auth, network error detection |
|
|
715
|
+
| **`github-api.js`** | Octokit GitHub integration | `createPullRequest()`, `readCodeowners()` | Deterministic PR creation, token resolution |
|
|
716
|
+
| **`github-client.js`** | GitHub operations | `getReviewersForFiles()`, `parseGitHubRepo()` | CODEOWNERS parsing, reviewer detection |
|
|
717
|
+
| **`task-id.js`** | Task ID extraction | `getOrPromptTaskId()`, `formatWithTaskId()` | Jira, GitHub, Linear task-id extraction |
|
|
718
|
+
| **`interactive-ui.js`** | Interactive CLI components | `showPRPreview()`, `promptConfirmation()` | Terminal UI helpers (spinners, menus) |
|
|
719
|
+
| **`mcp-setup.js`** | MCP detection and setup | `findGitHubTokenInDesktopConfig()` | Claude Desktop config token resolution |
|
|
632
720
|
|
|
633
721
|
#### Using Utilities in Other Claude Instances
|
|
634
722
|
|