claude-git-hooks 2.0.0 → 2.3.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 +212 -0
- package/README.md +217 -92
- package/bin/claude-hooks +311 -149
- package/lib/config.js +163 -0
- package/lib/hooks/pre-commit.js +180 -68
- package/lib/hooks/prepare-commit-msg.js +47 -41
- package/lib/utils/claude-client.js +93 -11
- package/lib/utils/file-operations.js +23 -74
- package/lib/utils/file-utils.js +65 -0
- package/lib/utils/package-info.js +75 -0
- package/lib/utils/preset-loader.js +209 -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/SUBAGENT_INSTRUCTION.md +1 -0
- package/templates/config.example.json +41 -0
- 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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,218 @@ 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.3.0] - 2025-11-11
|
|
9
|
+
|
|
10
|
+
### ✨ Added
|
|
11
|
+
|
|
12
|
+
- **Preset System (Phase 3)**
|
|
13
|
+
- 🎯 6 built-in presets: `backend`, `frontend`, `fullstack`, `database`, `ai`, `default`
|
|
14
|
+
- 📦 Self-contained preset packages with custom prompts and configurations
|
|
15
|
+
- 🔍 Smart file filtering per preset (`.java` for backend, `.tsx` for frontend, etc.)
|
|
16
|
+
- 🎨 Rich metadata: tech stack, focus areas, file extensions, display names
|
|
17
|
+
- 🔌 Template inheritance with placeholder replacement ({{TECH_STACK}}, {{FOCUS_AREAS}})
|
|
18
|
+
- 🛠️ Manual preset selection via CLI: `claude-hooks --set-preset <name>`
|
|
19
|
+
- 📋 Preset management commands: `presets`, `preset current`, `--set-preset`
|
|
20
|
+
- 📖 See `next-steps/V2.3.0_PHASE3_PRESETS_FINAL.md` for full specification
|
|
21
|
+
|
|
22
|
+
- **CLI Enhancements**
|
|
23
|
+
- 🏷️ Added `--version`, `-v`, and `version` commands to display current version
|
|
24
|
+
- 📊 Version check on install with interactive update prompt (skippable with `--skip-auth` or `--force`)
|
|
25
|
+
|
|
26
|
+
### 🐛 Fixed
|
|
27
|
+
|
|
28
|
+
- **Critical Bug**: `prepare-commit-msg` now properly loads merged config (preset + user overrides)
|
|
29
|
+
- Was using sync default import instead of async `getConfig()`
|
|
30
|
+
- Preset settings were being ignored in commit message generation
|
|
31
|
+
- **Template Name Mismatch**: Fixed config.js template paths
|
|
32
|
+
- `COMMIT_MESSAGE.md` (was `CLAUDE_COMMIT_MESSAGE.md`)
|
|
33
|
+
- `ANALYZE_DIFF.md` (was `CLAUDE_ANALYZE_DIFF.md`)
|
|
34
|
+
- **Missing Auto-Update**: `checkVersionAndPromptUpdate()` now called during install
|
|
35
|
+
|
|
36
|
+
### 🗑️ Removed
|
|
37
|
+
|
|
38
|
+
- ❌ Deleted `readPassword()` function (24 lines) - unused since v2.0.0 sudo removal
|
|
39
|
+
- ❌ Deleted `setMode()` function (5 lines) - empty implementation, never used
|
|
40
|
+
- ❌ Deleted `readMultipleFiles()` function (62 lines) - exported but never imported
|
|
41
|
+
- ❌ Removed `"main": "lib/index.js"` from package.json - CLI-only package
|
|
42
|
+
- ❌ Deleted obsolete root template `CLAUDE_PRE_COMMIT_SONAR.md`
|
|
43
|
+
|
|
44
|
+
### 🔄 Changed
|
|
45
|
+
|
|
46
|
+
- **Commit Message Timeout**: Increased from 120s to 180s for complex analysis
|
|
47
|
+
- **Config Loading**: All hooks now use async `getConfig()` for proper preset merging
|
|
48
|
+
|
|
49
|
+
### 📚 Documentation
|
|
50
|
+
|
|
51
|
+
- 📖 Updated CHANGELOG with v2.3.0 release notes
|
|
52
|
+
- 📝 Marked Phase 3 preset system as IMPLEMENTED in spec
|
|
53
|
+
|
|
54
|
+
### 🎯 Preset Examples
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# List available presets
|
|
58
|
+
claude-hooks presets
|
|
59
|
+
|
|
60
|
+
# Set backend preset (filters to .java, .xml, .yml files)
|
|
61
|
+
claude-hooks --set-preset backend
|
|
62
|
+
|
|
63
|
+
# Check active preset
|
|
64
|
+
claude-hooks preset current
|
|
65
|
+
|
|
66
|
+
# All presets installed during: claude-hooks install
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 📦 Available Presets
|
|
70
|
+
|
|
71
|
+
1. **backend** - Spring Boot + SQL Server (Java, XML, YAML)
|
|
72
|
+
2. **frontend** - React + Material-UI (JS, JSX, TS, TSX, CSS)
|
|
73
|
+
3. **fullstack** - Backend + Frontend + DB with consistency checks
|
|
74
|
+
4. **database** - SQL Server migrations and procedures
|
|
75
|
+
5. **ai** - Node.js + Claude CLI integration
|
|
76
|
+
6. **default** - General-purpose scripting
|
|
77
|
+
|
|
78
|
+
### 📋 Migration from v2.2.0
|
|
79
|
+
|
|
80
|
+
No breaking changes. Presets are opt-in:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Continue using defaults (no preset)
|
|
84
|
+
git commit -m "message"
|
|
85
|
+
|
|
86
|
+
# Or activate a preset
|
|
87
|
+
claude-hooks --set-preset backend
|
|
88
|
+
git commit -m "message" # Now filters to .java, .xml, .yml only
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## [2.2.0] - 2025-11-04
|
|
92
|
+
|
|
93
|
+
### ✨ Added
|
|
94
|
+
|
|
95
|
+
- **Configuration Centralization (Phase 1)**
|
|
96
|
+
- 📁 Created `lib/config.js` - single source of truth for all configurable values
|
|
97
|
+
- 🔧 User override support via `.claude/config.json` with deep merge
|
|
98
|
+
- 📊 Structured config: analysis, commitMessage, subagents, templates, output, system, git
|
|
99
|
+
- 🚫 Eliminated environment variables (except OS for platform detection)
|
|
100
|
+
- 📖 See `next-steps/V2.2.0_CONFIG_CENTRALIZATION.md` for details
|
|
101
|
+
|
|
102
|
+
- **Prompt Externalization (Phase 2)**
|
|
103
|
+
- 📝 Extracted ALL embedded prompts to external .md template files
|
|
104
|
+
- 🔌 Created `loadPrompt()` utility - combines load + variable replacement
|
|
105
|
+
- 📄 New templates: `COMMIT_MESSAGE.md`, `ANALYZE_DIFF.md`
|
|
106
|
+
- 🎯 JavaScript is now completely "prompt-agnostic"
|
|
107
|
+
- 📖 See `next-steps/V2.2.0_PHASE2_PROMPTS.md` for details
|
|
108
|
+
|
|
109
|
+
- **Parallel Analysis**
|
|
110
|
+
- 🚀 True OS-level parallel execution using multiple Claude CLI processes simultaneously
|
|
111
|
+
- ⚡ `analyzeCodeParallel()` function runs batches via Node.js `Promise.all()`
|
|
112
|
+
- 📊 Configurable `batchSize` for optimal speed/cost balance (default: 2)
|
|
113
|
+
- 🔀 Automatic result consolidation with worst-case quality gate logic
|
|
114
|
+
- 📈 Real-time console output showing parallel batch launches and completion
|
|
115
|
+
- 🎯 Enabled by default for commits with 3+ files
|
|
116
|
+
- ⏱️ Speed improvement: up to 4x faster with `batchSize: 1`
|
|
117
|
+
|
|
118
|
+
### 🔄 Changed
|
|
119
|
+
|
|
120
|
+
- **Configuration Migration**
|
|
121
|
+
- ♻️ Migrated `lib/hooks/pre-commit.js` to use centralized config
|
|
122
|
+
- ♻️ Migrated `lib/hooks/prepare-commit-msg.js` to use centralized config
|
|
123
|
+
- ♻️ Migrated `lib/utils/claude-client.js` to use centralized config
|
|
124
|
+
- 🔧 `process.env.DEBUG` → `config.system.debug`
|
|
125
|
+
- 🔧 All hardcoded timeouts now configurable
|
|
126
|
+
|
|
127
|
+
- **Prompt Migration**
|
|
128
|
+
- ♻️ `prepare-commit-msg.js`: 40 lines → 15 lines (62% reduction)
|
|
129
|
+
- ♻️ `bin/claude-hooks`: 30 lines → 10 lines (67% reduction)
|
|
130
|
+
- 🎨 Prompts now editable without touching JavaScript code
|
|
131
|
+
|
|
132
|
+
- **Template Loading**
|
|
133
|
+
- 📂 Enhanced `loadTemplate()` with fallback: `.claude/` → `templates/`
|
|
134
|
+
- 🔀 Enables per-project customization of prompts
|
|
135
|
+
|
|
136
|
+
### 🗑️ Removed
|
|
137
|
+
|
|
138
|
+
- ❌ Deleted `buildCommitMessagePrompt()` - unused legacy code
|
|
139
|
+
- ❌ Removed all `process.env` references except OS check
|
|
140
|
+
|
|
141
|
+
### 📚 Documentation
|
|
142
|
+
|
|
143
|
+
- 📖 Added `next-steps/V2.2.0_CONFIG_CENTRALIZATION.md`
|
|
144
|
+
- 📖 Added `next-steps/V2.2.0_PHASE2_PROMPTS.md`
|
|
145
|
+
- 📝 Updated configuration examples and customization guides
|
|
146
|
+
|
|
147
|
+
### 🎯 Benefits
|
|
148
|
+
|
|
149
|
+
- **Maintainability:** Prompts editable by non-developers
|
|
150
|
+
- **Flexibility:** Easy A/B testing of prompt styles
|
|
151
|
+
- **Customization:** Per-project overrides via `.claude/config.json`
|
|
152
|
+
- **Simplicity:** Clear separation of concerns (JS = logic, .md = content)
|
|
153
|
+
|
|
154
|
+
### 📋 Migration Guide
|
|
155
|
+
|
|
156
|
+
No breaking changes. All defaults match previous behavior.
|
|
157
|
+
|
|
158
|
+
**Optional: Customize configuration**
|
|
159
|
+
```bash
|
|
160
|
+
# Create project config
|
|
161
|
+
mkdir -p .claude
|
|
162
|
+
cat > .claude/config.json << 'EOF'
|
|
163
|
+
{
|
|
164
|
+
"analysis": {
|
|
165
|
+
"maxFileSize": 200000,
|
|
166
|
+
"maxFiles": 15
|
|
167
|
+
},
|
|
168
|
+
"subagents": {
|
|
169
|
+
"enabled": true,
|
|
170
|
+
"model": "sonnet"
|
|
171
|
+
},
|
|
172
|
+
"system": {
|
|
173
|
+
"debug": true
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
EOF
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Optional: Customize prompts**
|
|
180
|
+
```bash
|
|
181
|
+
# Override commit message prompt
|
|
182
|
+
cp templates/COMMIT_MESSAGE.md .claude/
|
|
183
|
+
# Edit .claude/COMMIT_MESSAGE.md as needed
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## [2.1.0] - 2025-11-04
|
|
187
|
+
|
|
188
|
+
### Changed
|
|
189
|
+
|
|
190
|
+
- 🔄 Renombrado marcador de exclusión de línea única: `// SKIP-ANALYSIS` → `// SKIP_ANALYSIS_LINE` para consistencia de nomenclatura
|
|
191
|
+
- 🐛 Corregido bug crítico en orden de detección de patrones que impedía funcionamiento de `SKIP_ANALYSIS_BLOCK`
|
|
192
|
+
|
|
193
|
+
### Known Issues
|
|
194
|
+
|
|
195
|
+
- ⚠️ **SKIP_ANALYSIS marcado como EXPERIMENTAL/BROKEN**: Los marcadores de exclusión no funcionan correctamente porque el análisis se realiza sobre git diff en lugar del archivo completo. Marcadores agregados en commits anteriores no son detectados en cambios subsecuentes.
|
|
196
|
+
|
|
197
|
+
### Migration Guide
|
|
198
|
+
|
|
199
|
+
Si utilizabas `// SKIP-ANALYSIS` en tu código, reemplázalo por `// SKIP_ANALYSIS_LINE`:
|
|
200
|
+
|
|
201
|
+
```java
|
|
202
|
+
// Antes (deprecated):
|
|
203
|
+
// SKIP-ANALYSIS
|
|
204
|
+
private String legacyCode;
|
|
205
|
+
|
|
206
|
+
// Ahora:
|
|
207
|
+
// SKIP_ANALYSIS_LINE
|
|
208
|
+
private String legacyCode;
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
El marcador de bloque `// SKIP_ANALYSIS_BLOCK` permanece sin cambios.
|
|
212
|
+
|
|
213
|
+
## [2.0.1] - 2025-11-04
|
|
214
|
+
|
|
215
|
+
### Fixed
|
|
216
|
+
|
|
217
|
+
- 🔧 Compatibilidad completa en Windows: corregidos line endings CRLF, validación WSL, y comparación de versiones sin dependencia bash
|
|
218
|
+
- 🔧 Operaciones de rutas utilizan módulo `path` nativo para mejor portabilidad multiplataforma
|
|
219
|
+
|
|
8
220
|
## [2.0.0] - 2025-10-30
|
|
9
221
|
|
|
10
222
|
### 🚀 BREAKING CHANGE: Migration from Bash to Node.js Hooks
|
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
|
|
19
|
-
-
|
|
20
|
-
-
|
|
20
|
+
- 🎯 **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
|
+
- 🚀 **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
|
|
@@ -85,10 +96,13 @@ git commit --no-verify -m "hotfix: corrección urgente"
|
|
|
85
96
|
git commit --amend
|
|
86
97
|
```
|
|
87
98
|
|
|
88
|
-
###
|
|
99
|
+
### ⚠️ Exclusión de Código del Análisis (EXPERIMENTAL/BROKEN)
|
|
89
100
|
|
|
90
101
|
```java
|
|
91
|
-
//
|
|
102
|
+
// NOTA: Este feature NO funciona correctamente
|
|
103
|
+
// Los marcadores no son detectados si fueron agregados en commits anteriores
|
|
104
|
+
|
|
105
|
+
// SKIP_ANALYSIS_LINE
|
|
92
106
|
private String legacyCode = "no analizar siguiente línea";
|
|
93
107
|
|
|
94
108
|
// SKIP_ANALYSIS_BLOCK
|
|
@@ -99,25 +113,124 @@ public void methodToIgnore() {
|
|
|
99
113
|
// SKIP_ANALYSIS_BLOCK
|
|
100
114
|
```
|
|
101
115
|
|
|
102
|
-
### 🔧 Configuración Avanzada
|
|
116
|
+
### 🔧 Configuración Avanzada (v2.2.0+)
|
|
103
117
|
|
|
104
118
|
```bash
|
|
105
|
-
#
|
|
119
|
+
# Configuración vía .claude/config.json
|
|
106
120
|
.claude/
|
|
107
|
-
├──
|
|
108
|
-
├──
|
|
109
|
-
└──
|
|
110
|
-
|
|
111
|
-
#
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|
119
148
|
```
|
|
120
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
|
+
preset config (templates/presets/backend/config.json)
|
|
228
|
+
↓
|
|
229
|
+
user config (.claude/config.json) ← MÁXIMA PRIORIDAD
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Nota v2.2.0+:** Variables de entorno ya NO son soportadas. Usar `.claude/config.json` en su lugar.
|
|
233
|
+
|
|
121
234
|
### 🎯 Casos de Uso Específicos
|
|
122
235
|
|
|
123
236
|
```bash
|
|
@@ -145,60 +258,74 @@ git commit -m "fix: resolver issues"
|
|
|
145
258
|
1. **Mensaje automático**: Usa `"auto"` como mensaje para que Claude lo genere
|
|
146
259
|
2. **Skip auth**: Usa `--skip-auth` en CI/CD o desarrollo local
|
|
147
260
|
3. **Force install**: Usa `--force` para reinstalar sin confirmación
|
|
148
|
-
4. **Debug**: Activa
|
|
261
|
+
4. **Debug**: Activa en `.claude/config.json`: `{"system": {"debug": true}}`
|
|
149
262
|
5. **Archivos grandes**: Se omiten automáticamente archivos > 100KB
|
|
150
|
-
6. **Límite de archivos**: Máximo 10 archivos por commit
|
|
263
|
+
6. **Límite de archivos**: Máximo 10 archivos por commit (configurable)
|
|
151
264
|
|
|
152
|
-
### 🚀 Parallel Analysis
|
|
265
|
+
### 🚀 Parallel Analysis (v2.2.0+)
|
|
153
266
|
|
|
154
|
-
**When analyzing 3+ files**,
|
|
267
|
+
**When analyzing 3+ files**, parallel execution runs multiple Claude CLI processes simultaneously for faster analysis:
|
|
155
268
|
|
|
156
269
|
```bash
|
|
157
|
-
#
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
270
|
+
# Configure in .claude/config.json
|
|
271
|
+
{
|
|
272
|
+
"subagents": {
|
|
273
|
+
"enabled": true,
|
|
274
|
+
"model": "haiku",
|
|
275
|
+
"batchSize": 2
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
164
279
|
|
|
165
|
-
|
|
166
|
-
export CLAUDE_SUBAGENT_BATCH_SIZE=3
|
|
280
|
+
**Model options:**
|
|
167
281
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
282
|
+
- `haiku` - Fast & cheap (default, recommended)
|
|
283
|
+
- `sonnet` - Balanced quality/speed
|
|
284
|
+
- `opus` - Maximum quality (slower)
|
|
171
285
|
|
|
172
286
|
**How batching works:**
|
|
173
|
-
- `BATCH_SIZE=1` with 4 files → 4 sequential batches (1 subagent each)
|
|
174
|
-
- `BATCH_SIZE=3` with 4 files → 2 batches (3 parallel, then 1)
|
|
175
|
-
- `BATCH_SIZE=4` with 4 files → 1 batch (all 4 in parallel)
|
|
176
|
-
- Batch size is validated automatically (minimum: 1)
|
|
177
287
|
|
|
178
|
-
|
|
179
|
-
- Each
|
|
180
|
-
-
|
|
181
|
-
- Results are consolidated automatically
|
|
182
|
-
|
|
183
|
-
|
|
288
|
+
- Files are split into batches of size `batchSize`
|
|
289
|
+
- Each batch runs in a separate Claude CLI process
|
|
290
|
+
- All batches execute in parallel (true OS-level parallelism)
|
|
291
|
+
- Results are consolidated automatically
|
|
292
|
+
|
|
293
|
+
**Examples with 4 files:**
|
|
294
|
+
|
|
295
|
+
- `batchSize: 1` → 4 parallel Claude processes (1 file each) - **fastest**
|
|
296
|
+
- `batchSize: 2` → 2 parallel Claude processes (2 files each) - **balanced**
|
|
297
|
+
- `batchSize: 4` → 1 process (all files) - no parallelization
|
|
298
|
+
|
|
299
|
+
**Speed improvement:**
|
|
300
|
+
|
|
301
|
+
- Sequential: 60s per file × 4 = 240s total
|
|
302
|
+
- Parallel (batch=1): max(60s) = 60s total ✅ **4x faster**
|
|
184
303
|
|
|
185
|
-
**
|
|
304
|
+
**Console output:**
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
🚀 PARALLEL EXECUTION: 4 Claude processes
|
|
308
|
+
⚡ Launching batch 1/4...
|
|
309
|
+
⚡ Launching batch 2/4...
|
|
310
|
+
⚡ Launching batch 3/4...
|
|
311
|
+
⚡ Launching batch 4/4...
|
|
312
|
+
⏳ Waiting for all batches to complete...
|
|
313
|
+
|
|
314
|
+
✅ PARALLEL EXECUTION COMPLETE: 4 results in 62.5s
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**Best for:** Large commits (3+ files), refactoring, multi-file features
|
|
186
318
|
|
|
187
319
|
### 🎨 Personalización y Customización
|
|
188
320
|
|
|
189
321
|
**Archivos clave para modificar:**
|
|
322
|
+
|
|
323
|
+
- `.claude/config.json` - Configuración principal (v2.2.0+)
|
|
190
324
|
- `.claude/CLAUDE_PRE_COMMIT_SONAR.md` - Criterios (backend/frontend/data/db)
|
|
191
325
|
- `.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
326
|
|
|
201
327
|
**Ejemplo:**
|
|
328
|
+
|
|
202
329
|
```bash
|
|
203
330
|
vim .claude/CLAUDE_PRE_COMMIT_SONAR.md # Agregar reglas API REST/Spring Boot
|
|
204
331
|
```
|
|
@@ -265,9 +392,9 @@ El comando `claude-hooks install` crea los siguientes archivos y directorios:
|
|
|
265
392
|
2. **`.git/hooks/prepare-commit-msg`** - Hook de generación de mensajes
|
|
266
393
|
3. **`.git/hooks/check-version.sh`** - Script de verificación de versión
|
|
267
394
|
4. **`.claude/`** - Directorio para archivos de configuración
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
395
|
+
- `CLAUDE_PRE_COMMIT_SONAR.md` - Pautas de evaluación SonarQube
|
|
396
|
+
- `CLAUDE_ANALYSIS_PROMPT_SONAR.md` - Template de prompt para análisis SonarQube
|
|
397
|
+
- `CLAUDE_RESOLUTION_PROMPT.md` - Template para prompt de resolución AI
|
|
271
398
|
|
|
272
399
|
### Actualización automática de .gitignore
|
|
273
400
|
|
|
@@ -295,21 +422,21 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
295
422
|
|
|
296
423
|
1. **Intercepta cada intento de commit**
|
|
297
424
|
2. **Extrae y filtra archivos modificados**:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
425
|
+
- Solo analiza: Java, XML, properties, yml, yaml
|
|
426
|
+
- Omite archivos mayores a 100KB
|
|
427
|
+
- Límite de 10 archivos por commit
|
|
301
428
|
3. **Construye prompt inteligente**:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
429
|
+
- Usa template de prompt desde `.claude/CLAUDE_ANALYSIS_PROMPT*.md`
|
|
430
|
+
- Lee las pautas desde `.claude/CLAUDE_PRE_COMMIT*.md`
|
|
431
|
+
- Incluye el diff completo para archivos nuevos
|
|
432
|
+
- Muestra solo cambios para archivos existentes
|
|
306
433
|
4. **Envía a Claude CLI para revisión**
|
|
307
434
|
5. **Procesa respuesta JSON estructurada**:
|
|
308
|
-
|
|
309
|
-
|
|
435
|
+
- blockingIssues siempre como objetos con localización precisa
|
|
436
|
+
- verifica `QUALITY_GATE`, muestra métricas y issues por severidad
|
|
310
437
|
6. **Decisión final**:
|
|
311
|
-
|
|
312
|
-
|
|
438
|
+
- Si hay problemas críticos → genera prompt AI de resolución y bloquea commit
|
|
439
|
+
- Si todo está bien → commit procede
|
|
313
440
|
7. **Generación de Prompt de Resolución AI** (opcional): Cuando se detectan problemas críticos:
|
|
314
441
|
|
|
315
442
|
- Se genera automáticamente un archivo `claude_resolution_prompt.md`
|
|
@@ -320,48 +447,46 @@ Si no existe un `.gitignore`, se creará uno nuevo. Si ya existe, las entradas s
|
|
|
320
447
|
### Hook prepare-commit-msg (Generación automática de mensajes)
|
|
321
448
|
|
|
322
449
|
1. **Se activa cuando el mensaje es**:
|
|
323
|
-
|
|
450
|
+
- `"auto"`
|
|
324
451
|
2. **Analiza los cambios del staging area**:
|
|
325
|
-
|
|
326
|
-
|
|
452
|
+
- Lista archivos modificados con estadísticas
|
|
453
|
+
- Incluye diffs completos para archivos < 100KB
|
|
327
454
|
3. **Genera mensaje en formato Conventional Commits**:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
455
|
+
- Determina tipo: feat, fix, docs, style, refactor, test, chore
|
|
456
|
+
- Crea título conciso y descriptivo
|
|
457
|
+
- Añade body con detalles si es necesario
|
|
331
458
|
4. **Manejo de errores**:
|
|
332
|
-
|
|
333
|
-
|
|
459
|
+
- Si falla la generación → cancela el commit completamente
|
|
460
|
+
- No usa mensajes genéricos de fallback
|
|
334
461
|
|
|
335
462
|
### Características adicionales
|
|
336
463
|
|
|
337
464
|
- **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:
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
465
|
+
- 📝 Título de PR conciso (máx. 72 caracteres)
|
|
466
|
+
- 📄 Descripción detallada con markdown
|
|
467
|
+
- 🌿 Nombre de rama sugerido (formato: tipo/descripcion)
|
|
468
|
+
- 📋 Tipo de cambio (feature/fix/refactor/docs/test/chore)
|
|
469
|
+
- ⚠️ Indicador de breaking changes
|
|
470
|
+
- 🧪 Notas de testing recomendado
|
|
471
|
+
- 📝 Archivo `.claude-pr-analysis.json`
|
|
345
472
|
- **Auto-actualización**: Verificación automática de versiones antes de cada commit con prompt interactivo para actualizar
|
|
346
473
|
- **Comando update**: `claude-hooks update` para actualizar manualmente a la última versión
|
|
347
474
|
- **Modo debug**: `DEBUG=1 git commit` guarda respuestas en `debug-claude-response.json`
|
|
348
475
|
- **Análisis de PR**: Nuevo comando `analyze-diff` para generar información de Pull Requests
|
|
349
476
|
- **Validación de dependencias**: Verifica que Claude CLI esté autenticado antes de ejecutar
|
|
350
|
-
-
|
|
477
|
+
- **⚠️ 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.
|
|
351
478
|
|
|
352
479
|
```java
|
|
353
|
-
//
|
|
354
|
-
//
|
|
355
|
-
@Autowired private LegacyService legacyService;
|
|
480
|
+
// NOTA: Este feature actualmente NO funciona de forma confiable
|
|
481
|
+
// SKIP_ANALYSIS_LINE
|
|
482
|
+
@Autowired private LegacyService legacyService;
|
|
356
483
|
|
|
357
|
-
//
|
|
358
|
-
// SKIP-ANALYSIS_BLOCK
|
|
484
|
+
// SKIP_ANALYSIS_BLOCK
|
|
359
485
|
@Deprecated
|
|
360
486
|
public void methodWithKnownIssues() {
|
|
361
|
-
|
|
362
|
-
System.out.println("Debug temporal");
|
|
487
|
+
System.out.println("Legacy code");
|
|
363
488
|
}
|
|
364
|
-
//
|
|
489
|
+
// SKIP_ANALYSIS_BLOCK
|
|
365
490
|
```
|
|
366
491
|
|
|
367
492
|
### Desactivar/Activar hooks
|
|
@@ -437,7 +562,7 @@ claude-git-hooks/
|
|
|
437
562
|
│ └── utils/
|
|
438
563
|
│ ├── logger.js # Sistema de logging centralizado
|
|
439
564
|
│ ├── git-operations.js # Operaciones git abstractas
|
|
440
|
-
│ ├── file-operations.js # I/O con filtro
|
|
565
|
+
│ ├── file-operations.js # I/O con filtro SKIP_ANALYSIS_LINE
|
|
441
566
|
│ ├── claude-client.js # Cliente Claude CLI
|
|
442
567
|
│ ├── prompt-builder.js # Constructor de prompts
|
|
443
568
|
│ └── resolution-prompt.js # Generador de resolution prompts
|