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/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**: Título, descripción y tests sugeridos con un solo comando
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 de commit automático
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
- ## 📆 Próximos Desarrollos
117
+ ## 🚀 Quick Setup: GitHub PR Creation
106
118
 
107
- 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.
119
+ Para usar `create-pr` necesitas configurar autenticación con GitHub:
108
120
 
109
- ### ⚠️ Exclusión de Código del Análisis (EXPERIMENTAL/BROKEN)
121
+ ### 1. Ejecuta el setup wizard
110
122
 
111
- ```java
112
- // NOTA: Este feature NO funciona correctamente
113
- // Los marcadores no son detectados si fueron agregados en commits anteriores
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
- // SKIP_ANALYSIS_LINE
116
- private String legacyCode = "no analizar siguiente línea";
131
+ **Opción A - Settings local (recomendado):**
117
132
 
118
- // SKIP_ANALYSIS_BLOCK
119
- public void methodToIgnore() {
120
- // Todo este bloque será ignorado
121
- String oldCode = "legacy";
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
- // SKIP_ANALYSIS_BLOCK
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. **Skip auth**: Usa `--skip-auth` en CI/CD o desarrollo local
272
- 3. **Force install**: Usa `--force` para reinstalar sin confirmación
273
- 4. **Debug**: Activa con `claude-hooks --debug true` o en `.claude/config.json`: `{"system": {"debug": true}}`
274
- 5. **Archivos grandes**: Se omiten automáticamente archivos > 1MB
275
- 6. **Límite de archivos**: Máximo 30 archivos por commit (configurable)
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
- └── claude-diagnostics.js # Diagnósticos de errores Claude CLI
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
- └── CLAUDE_RESOLUTION_PROMPT.md # Template para resolución de issues
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