claude-git-hooks 1.4.0 → 1.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-git-hooks",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Git hooks con Claude CLI para análisis de código y generación automática de mensajes de commit",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -38,4 +38,4 @@
38
38
  "CHANGELOG.md",
39
39
  "LICENSE"
40
40
  ]
41
- }
41
+ }
@@ -76,6 +76,9 @@ generate_resolution_prompt() {
76
76
  local ISSUES_FORMATTED=""
77
77
  local issue_num=1
78
78
 
79
+ # Usar un archivo temporal para acumular los issues
80
+ local TEMP_ISSUES=$(mktemp)
81
+
79
82
  # Parsear cada blocking issue como objeto JSON
80
83
  echo "$JSON_RESPONSE" | jq -c '.blockingIssues[]?' 2>/dev/null | while IFS= read -r issue; do
81
84
  if [ -n "$issue" ]; then
@@ -85,40 +88,59 @@ generate_resolution_prompt() {
85
88
  local method=$(echo "$issue" | jq -r '.method')
86
89
  local severity=$(echo "$issue" | jq -r '.severity')
87
90
 
88
- ISSUES_FORMATTED="${ISSUES_FORMATTED}### Issue #${issue_num} [${severity^^}]\n"
89
- ISSUES_FORMATTED="${ISSUES_FORMATTED}**Description:** ${desc}\n"
90
- ISSUES_FORMATTED="${ISSUES_FORMATTED}**Location:** ${file}:${line}\n"
91
- ISSUES_FORMATTED="${ISSUES_FORMATTED}**Method/Class:** ${method}\n\n"
91
+ echo "### Issue #${issue_num} [${severity^^}]" >> "$TEMP_ISSUES"
92
+ echo "**Description:** ${desc}" >> "$TEMP_ISSUES"
93
+ echo "**Location:** ${file}:${line}" >> "$TEMP_ISSUES"
94
+ echo "**Method/Class:** ${method}" >> "$TEMP_ISSUES"
95
+ echo "" >> "$TEMP_ISSUES"
92
96
  issue_num=$((issue_num + 1))
93
97
  fi
94
98
  done
95
99
 
100
+ # Leer el contenido acumulado
101
+ ISSUES_FORMATTED=$(cat "$TEMP_ISSUES")
102
+ rm -f "$TEMP_ISSUES"
103
+
96
104
  # Generar el prompt desde el template
97
105
  cp "$RESOLUTION_TEMPLATE" "$RESOLUTION_FILE"
98
106
 
99
- # Reemplazar placeholders
100
- sed -i "s|{{REPO_NAME}}|$REPO_NAME|g" "$RESOLUTION_FILE"
101
- sed -i "s|{{BRANCH_NAME}}|$BRANCH_NAME|g" "$RESOLUTION_FILE"
102
- sed -i "s|{{COMMIT_SHA}}|$COMMIT_SHA|g" "$RESOLUTION_FILE"
103
- sed -i "s|{{FILE_COUNT}}|$FILE_COUNT|g" "$RESOLUTION_FILE"
104
- sed -i "s|{{ANALYSIS_MODE}}|$ANALYSIS_MODE|g" "$RESOLUTION_FILE"
107
+ # Reemplazar placeholders - usar comillas dobles y escapar caracteres especiales
108
+ sed -i "s|{{REPO_NAME}}|${REPO_NAME}|g" "$RESOLUTION_FILE"
109
+ sed -i "s|{{BRANCH_NAME}}|${BRANCH_NAME}|g" "$RESOLUTION_FILE"
110
+ sed -i "s|{{COMMIT_SHA}}|${COMMIT_SHA}|g" "$RESOLUTION_FILE"
111
+ sed -i "s|{{FILE_COUNT}}|${FILE_COUNT}|g" "$RESOLUTION_FILE"
112
+ sed -i "s|{{ANALYSIS_MODE}}|${ANALYSIS_MODE:-standard}|g" "$RESOLUTION_FILE"
113
+
114
+ # Crear archivo temporal para issues formateados
115
+ local TEMP_ISSUES_FILE=$(mktemp)
116
+ echo "$ISSUES_FORMATTED" > "$TEMP_ISSUES_FILE"
105
117
 
106
- # Agregar los issues formateados
107
- sed -i "/{{BLOCKING_ISSUES}}/r /dev/stdin" "$RESOLUTION_FILE" <<< "$ISSUES_FORMATTED"
118
+ # Reemplazar {{BLOCKING_ISSUES}} con el contenido
119
+ if [ -n "$ISSUES_FORMATTED" ]; then
120
+ sed -i "/{{BLOCKING_ISSUES}}/r $TEMP_ISSUES_FILE" "$RESOLUTION_FILE"
121
+ fi
108
122
  sed -i "s|{{BLOCKING_ISSUES}}||g" "$RESOLUTION_FILE"
123
+ rm -f "$TEMP_ISSUES_FILE"
109
124
 
110
125
  # Agregar contenido de archivos afectados
111
- local FILES_CONTENT=""
126
+ local TEMP_FILES=$(mktemp)
112
127
  echo "$JSON_RESPONSE" | jq -r '.blockingIssues[].file' 2>/dev/null | sort -u | while IFS= read -r file; do
113
128
  if [ -f "$file" ]; then
114
- FILES_CONTENT="${FILES_CONTENT}### File: $file\n\n\`\`\`\n"
115
- FILES_CONTENT="${FILES_CONTENT}$(cat "$file")\n"
116
- FILES_CONTENT="${FILES_CONTENT}\`\`\`\n\n"
129
+ echo "### File: $file" >> "$TEMP_FILES"
130
+ echo "" >> "$TEMP_FILES"
131
+ echo '```' >> "$TEMP_FILES"
132
+ cat "$file" >> "$TEMP_FILES"
133
+ echo '```' >> "$TEMP_FILES"
134
+ echo "" >> "$TEMP_FILES"
117
135
  fi
118
136
  done
119
137
 
120
- sed -i "/{{FILE_CONTENTS}}/r /dev/stdin" "$RESOLUTION_FILE" <<< "$FILES_CONTENT"
138
+ # Reemplazar {{FILE_CONTENTS}} con el contenido
139
+ if [ -s "$TEMP_FILES" ]; then
140
+ sed -i "/{{FILE_CONTENTS}}/r $TEMP_FILES" "$RESOLUTION_FILE"
141
+ fi
121
142
  sed -i "s|{{FILE_CONTENTS}}||g" "$RESOLUTION_FILE"
143
+ rm -f "$TEMP_FILES"
122
144
 
123
145
  echo
124
146
  echo -e "${YELLOW}=== PROMPT DE RESOLUCIÓN AI GENERADO ===${NC}"