fix(install): enlazar hooks y CLAUDE.md, reparar symlinks rotos

install.sh ahora gestiona los hooks goal_*.sh y CLAUDE.md ademas de
skills/agents/commands/settings. Antes quedaban fuera del script, por lo
que al mover repo_Claude de ~/DataProyects a fn_registry/external los
symlinks de hooks/ quedaban colgando y los hooks goal_* fallaban con
"not found".

Cambios:
- Enlace simbolico por archivo de todos los hooks .sh del repo.
- Enlace simbolico de CLAUDE.md (preferencias globales).
- statusline.sh pasa de copia a symlink (elimina backups basura por corrida).
- Logica de relink idempotente: symlink roto o mal-apuntado se borra y
  recrea; solo los archivos reales se respaldan en backup.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 21:12:56 +02:00
parent 393a77b597
commit 963b3bd7e1
+77 -9
View File
@@ -54,20 +54,26 @@ done
echo ""
echo "=== Instalando archivos de configuración ==="
# 1. Status Line Script
# 1. Status Line Script (enlace simbólico)
STATUSLINE_SOURCE="$REPO_DIR/.claude/statusline.sh"
STATUSLINE_TARGET="$CLAUDE_DIR/statusline.sh"
if [ -f "$STATUSLINE_SOURCE" ]; then
if [ -f "$STATUSLINE_TARGET" ]; then
BACKUP="$STATUSLINE_TARGET.backup.$(date +%Y%m%d_%H%M%S)"
echo "Backup: statusline.sh -> $BACKUP"
mv "$STATUSLINE_TARGET" "$BACKUP"
chmod +x "$STATUSLINE_SOURCE"
if [ -L "$STATUSLINE_TARGET" ] && [ "$(readlink "$STATUSLINE_TARGET")" = "$STATUSLINE_SOURCE" ]; then
echo "OK: statusline.sh ya está enlazado correctamente"
else
# Symlink (roto o apuntando mal): borrar; archivo real: backup
if [ -L "$STATUSLINE_TARGET" ]; then
rm -f "$STATUSLINE_TARGET"
elif [ -e "$STATUSLINE_TARGET" ]; then
BACKUP="$STATUSLINE_TARGET.backup.$(date +%Y%m%d_%H%M%S)"
echo "Backup: statusline.sh -> $BACKUP"
mv "$STATUSLINE_TARGET" "$BACKUP"
fi
ln -s "$STATUSLINE_SOURCE" "$STATUSLINE_TARGET"
echo "Enlazado: statusline.sh -> $STATUSLINE_SOURCE"
fi
cp "$STATUSLINE_SOURCE" "$STATUSLINE_TARGET"
chmod +x "$STATUSLINE_TARGET"
echo "Copiado: statusline.sh (ejecutable)"
else
echo "WARN: statusline.sh no encontrado en el repo"
fi
@@ -96,6 +102,66 @@ else
echo "WARN: settings.json no encontrado en el repo"
fi
# 3. CLAUDE.md (enlace simbólico - preferencias globales)
CLAUDEMD_SOURCE="$REPO_DIR/.claude/CLAUDE.md"
CLAUDEMD_TARGET="$CLAUDE_DIR/CLAUDE.md"
if [ -f "$CLAUDEMD_SOURCE" ]; then
if [ -L "$CLAUDEMD_TARGET" ] && [ "$(readlink "$CLAUDEMD_TARGET")" = "$CLAUDEMD_SOURCE" ]; then
echo "OK: CLAUDE.md ya está enlazado correctamente"
else
# Symlink (roto o apuntando mal): borrar; archivo real: backup
if [ -L "$CLAUDEMD_TARGET" ]; then
rm -f "$CLAUDEMD_TARGET"
elif [ -e "$CLAUDEMD_TARGET" ]; then
BACKUP="$CLAUDEMD_TARGET.backup.$(date +%Y%m%d_%H%M%S)"
echo "Backup: CLAUDE.md -> $BACKUP"
mv "$CLAUDEMD_TARGET" "$BACKUP"
fi
ln -s "$CLAUDEMD_SOURCE" "$CLAUDEMD_TARGET"
echo "Enlazado: CLAUDE.md -> $CLAUDEMD_SOURCE"
fi
else
echo "WARN: CLAUDE.md no encontrado en el repo"
fi
# === Instalando hooks (enlace simbólico por archivo) ===
echo ""
echo "=== Instalando hooks ==="
HOOKS_SOURCE_DIR="$REPO_DIR/.claude/hooks"
HOOKS_TARGET_DIR="$CLAUDE_DIR/hooks"
if [ -d "$HOOKS_SOURCE_DIR" ]; then
mkdir -p "$HOOKS_TARGET_DIR"
for hook in "$HOOKS_SOURCE_DIR"/*.sh; do
[ -e "$hook" ] || continue
chmod +x "$hook"
HOOK_NAME="$(basename "$hook")"
HOOK_TARGET="$HOOKS_TARGET_DIR/$HOOK_NAME"
# Si ya es symlink correcto, saltar
if [ -L "$HOOK_TARGET" ] && [ "$(readlink "$HOOK_TARGET")" = "$hook" ]; then
echo "OK: hooks/$HOOK_NAME ya está enlazado correctamente"
continue
fi
# Symlink (roto o apuntando mal): borrar sin backup; archivo real: backup
if [ -L "$HOOK_TARGET" ]; then
rm -f "$HOOK_TARGET"
elif [ -e "$HOOK_TARGET" ]; then
BACKUP="$HOOK_TARGET.backup.$(date +%Y%m%d_%H%M%S)"
echo "Backup: hooks/$HOOK_NAME -> $BACKUP"
mv "$HOOK_TARGET" "$BACKUP"
fi
ln -s "$hook" "$HOOK_TARGET"
echo "Enlazado: hooks/$HOOK_NAME -> $hook"
done
else
echo "WARN: $HOOKS_SOURCE_DIR no existe, saltando hooks"
fi
# === Limpieza de configuración que no debe cambiar ===
echo ""
echo "=== Limpiando configuración inmutable ==="
@@ -189,6 +255,8 @@ echo "Tus comandos y configuración ahora están sincronizados con el repositori
echo ""
echo "Configuración instalada:"
echo " • Skills, Agents y Commands enlazados simbólicamente"
echo " • Hooks (goal_*.sh) enlazados simbólicamente"
echo " • CLAUDE.md (preferencias globales) enlazado"
echo " • Status Line configurada con vibecoding setup"
echo " • Settings.json enlazado (compartido entre repos)"
echo " • Backups viejos limpiados (>7 días)"