Files
CrazyClaude/update_crazyclaude.sh

84 lines
2.3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Met à jour .claude depuis CrazyClaude et llm-functions depuis upstream,
# puis reconstruit les outils aichat.
#
# Usage : bash .claude/update_crazyclaude.sh [--dry-run]
set -euo pipefail
CLAUDE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LLM_DIR="$CLAUDE_DIR/llm-functions"
# Bootstrap : si on lance depuis le repo CrazyClaude lui-même (pas depuis .claude/)
# on recopie les fichiers sources vers .claude/ puis on rebuild les outils
if [[ "$(basename "$CLAUDE_DIR")" != ".claude" ]]; then
TARGET="${1:-$(pwd)/.claude}"
echo "==> Bootstrap : synchronisation de $CLAUDE_DIR$TARGET"
rsync -a --exclude='.git' --exclude='llm-functions' --exclude='venv' \
"$CLAUDE_DIR/" "$TARGET/"
echo "==> Rebuild des outils"
exec env CRAZYCLAUDE_BOOTSTRAP=1 bash "$TARGET/update_crazyclaude.sh" "${@:2}"
fi
# On est maintenant dans .claude/, on peut continuer normalement
dry_run=0
[[ "${1:-}" == "--dry-run" ]] && dry_run=1
run() {
if [[ "$dry_run" -eq 1 ]]; then
echo "[dry-run] $*"
else
echo "» $*"
"$@"
fi
}
require() {
command -v "$1" &>/dev/null || { echo "ERREUR : '$1' introuvable dans le PATH" >&2; exit 1; }
}
require git
require argc
require jq
if [[ "${CRAZYCLAUDE_BOOTSTRAP:-0}" == "1" ]]; then
echo "=== Mode bootstrap — git pull ignoré ==="
else
echo "=== Mise à jour de .claude (CrazyClaude) ==="
run git -C "$CLAUDE_DIR" pull --ff-only
echo ""
echo "=== Mise à jour de .claude/llm-functions ==="
run git -C "$LLM_DIR" pull --ff-only
fi
echo ""
echo "=== Reconstruction des outils llm-functions ==="
if [[ "$dry_run" -eq 1 ]]; then
echo "[dry-run] argc build (dans $LLM_DIR)"
else
(cd "$LLM_DIR" && argc build)
fi
echo ""
echo "=== Application des overrides locaux ==="
LOCAL_TOOLS_DIR="$CLAUDE_DIR/tools-local"
if [[ -d "$LOCAL_TOOLS_DIR" ]]; then
count=0
for src in "$LOCAL_TOOLS_DIR"/*; do
[[ -f "$src" && -x "$src" ]] || continue
name="$(basename "$src")"
dest="$CLAUDE_DIR/llm-functions/bin/$name"
cp "$src" "$dest"
chmod +x "$dest"
count=$((count + 1))
done
echo " $count override(s) appliqué(s)"
else
echo " (aucun répertoire tools-local/)"
fi
echo ""
echo "OK — outils reconstruits dans $LLM_DIR/bin/"