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:
+77
-9
@@ -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)"
|
||||
|
||||
Reference in New Issue
Block a user