claude-git-hooks 2.4.1 → 2.5.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 +250 -150
- package/README.md +126 -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 +108 -5
- 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 +425 -0
- package/package.json +4 -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:
|
|
108
120
|
|
|
109
|
-
###
|
|
121
|
+
### 1. Ejecuta el setup wizard
|
|
110
122
|
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
|
|
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
|
|
114
130
|
|
|
115
|
-
|
|
116
|
-
private String legacyCode = "no analizar siguiente línea";
|
|
131
|
+
**Opción A - Settings local (recomendado):**
|
|
117
132
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
133
|
+
```bash
|
|
134
|
+
# Crear .claude/settings.local.json
|
|
135
|
+
cat > .claude/settings.local.json << 'EOF'
|
|
136
|
+
{
|
|
137
|
+
"githubToken": "ghp_tu_token_aqui"
|
|
122
138
|
}
|
|
123
|
-
|
|
139
|
+
EOF
|
|
124
140
|
```
|
|
125
141
|
|
|
142
|
+
**Opción B - Variable de entorno:**
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
export GITHUB_TOKEN="ghp_tu_token_aqui"
|
|
146
|
+
# o
|
|
147
|
+
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_tu_token_aqui"
|
|
148
|
+
```
|
|
149
|
+
|
|
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
|
+
}
|
|
175
|
+
}
|
|
176
|
+
EOF
|
|
177
|
+
```
|
|
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
|
|
|
@@ -488,25 +573,12 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
488
573
|
- ⚠️ Indicador de breaking changes
|
|
489
574
|
- 🧪 Notas de testing recomendado
|
|
490
575
|
- 📝 Archivo `.claude-pr-analysis.json`
|
|
576
|
+
- **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
577
|
- **Auto-actualización**: Verificación automática de versiones antes de cada commit con prompt interactivo para actualizar
|
|
492
578
|
- **Comando update**: `claude-hooks update` para actualizar manualmente a la última versión
|
|
493
579
|
- **Modo debug**: `claude-hooks --debug true` activa logging detallado para troubleshooting
|
|
494
580
|
- **Análisis de PR**: Nuevo comando `analyze-diff` para generar información de Pull Requests
|
|
495
581
|
- **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
582
|
|
|
511
583
|
### Desactivar/Activar hooks
|
|
512
584
|
|
|
@@ -588,14 +660,23 @@ claude-git-hooks/
|
|
|
588
660
|
│ ├── resolution-prompt.js # Generador de resolution prompts
|
|
589
661
|
│ ├── preset-loader.js # Cargador de presets
|
|
590
662
|
│ ├── installation-diagnostics.js # Diagnósticos de instalación
|
|
591
|
-
│
|
|
663
|
+
│ ├── claude-diagnostics.js # Diagnósticos de errores Claude CLI
|
|
664
|
+
│ ├── github-api.js # 🆕 Integración Octokit (determinista)
|
|
665
|
+
│ ├── github-client.js # Cliente GitHub (CODEOWNERS, reviewers)
|
|
666
|
+
│ ├── task-id.js # Extracción task-id (Jira, GitHub, Linear)
|
|
667
|
+
│ ├── interactive-ui.js # UI interactiva CLI (preview, prompts)
|
|
668
|
+
│ └── mcp-setup.js # Setup y detección MCP
|
|
592
669
|
├── templates/
|
|
593
670
|
│ ├── pre-commit # Bash wrapper (llama a lib/hooks/pre-commit.js)
|
|
594
671
|
│ ├── prepare-commit-msg # Bash wrapper (llama a lib/hooks/prepare-commit-msg.js)
|
|
595
672
|
│ ├── check-version.sh # Script de verificación de versión
|
|
596
673
|
│ ├── CLAUDE_PRE_COMMIT_SONAR.md # Pautas SonarQube
|
|
597
674
|
│ ├── CLAUDE_ANALYSIS_PROMPT_SONAR.md # Template de prompt para análisis
|
|
598
|
-
│
|
|
675
|
+
│ ├── CLAUDE_RESOLUTION_PROMPT.md # Template para resolución de issues
|
|
676
|
+
│ ├── ANALYZE_DIFF.md # Template para análisis de diff (PR metadata)
|
|
677
|
+
│ ├── CREATE_GITHUB_PR.md # Template para creación de PR
|
|
678
|
+
│ ├── config.github.example.json # 🆕 Ejemplo configuración GitHub
|
|
679
|
+
│ └── settings.local.example.json # 🆕 Ejemplo token local (gitignored)
|
|
599
680
|
├── test/ # 🆕 Tests unitarios con Jest
|
|
600
681
|
│ └── unit/
|
|
601
682
|
│ └── logger.test.js # Tests del logger
|
|
@@ -629,6 +710,11 @@ claude-git-hooks/
|
|
|
629
710
|
| **`resolution-prompt.js`** | Issue resolution prompts | `generateResolutionPrompt()` | AI-friendly error remediation prompts |
|
|
630
711
|
| **`installation-diagnostics.js`** | Installation error diagnostics | `formatError()`, `getInstallationDiagnostics()` | Installation error formatting with remediation |
|
|
631
712
|
| **`claude-diagnostics.js`** | Claude CLI error diagnostics | `detectClaudeError()`, `formatClaudeError()` | Rate limit, auth, network error detection |
|
|
713
|
+
| **`github-api.js`** | Octokit GitHub integration | `createPullRequest()`, `readCodeowners()` | Deterministic PR creation, token resolution |
|
|
714
|
+
| **`github-client.js`** | GitHub operations | `getReviewersForFiles()`, `parseGitHubRepo()` | CODEOWNERS parsing, reviewer detection |
|
|
715
|
+
| **`task-id.js`** | Task ID extraction | `getOrPromptTaskId()`, `formatWithTaskId()` | Jira, GitHub, Linear task-id extraction |
|
|
716
|
+
| **`interactive-ui.js`** | Interactive CLI components | `showPRPreview()`, `promptConfirmation()` | Terminal UI helpers (spinners, menus) |
|
|
717
|
+
| **`mcp-setup.js`** | MCP detection and setup | `findGitHubTokenInDesktopConfig()` | Claude Desktop config token resolution |
|
|
632
718
|
|
|
633
719
|
#### Using Utilities in Other Claude Instances
|
|
634
720
|
|