#!/usr/bin/env bash # Install session-log hook for Claude Code # Usage: curl -fsSL https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/session-log/install.sh | bash set -euo pipefail HOOK_DIR="${HOME}/.claude/hooks" HOOK_FILE="${HOOK_DIR}/session-log.sh" SETTINGS="${HOME}/.claude/settings.json" LOG_DIR="${HOME}/.claude/session-logs" echo "Installing session-log hook..." # Check python3 (needed for settings.json management) if ! command -v python3 >/dev/null 2>&1; then echo "Error: python3 not found. Install Python 3 and try again." >&2 exit 1 fi # Create directories mkdir -p "$HOOK_DIR" "$LOG_DIR" # Download hook script HOOK_URL="https://raw.githubusercontent.com/Bande-a-Bonnot/Boucle-framework/main/tools/session-log/hook.sh" if command -v curl >/dev/null 2>&1; then curl -fsSL "$HOOK_URL" -o "$HOOK_FILE" elif command -v wget >/dev/null 2>&1; then wget -q "$HOOK_URL" -O "$HOOK_FILE" else echo "Error: curl or wget required" >&2 exit 1 fi chmod +x "$HOOK_FILE" # Verify download is not empty if [ ! -s "$HOOK_FILE" ]; then echo "Error: downloaded file is empty. The URL may have changed." >&2 exit 1 fi # Add to Claude Code settings if [ ! -f "$SETTINGS" ]; then echo '{}' > "$SETTINGS" fi # Handle JSONC comments in settings.json (prevents silent failures) if ! python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$SETTINGS" 2>/dev/null; then python3 - "$SETTINGS" << 'JSONC_FIX' import json, sys, shutil path = sys.argv[1] with open(path) as f: raw = f.read() o, i, n, q = [], 0, len(raw), False while i < n: if q: if raw[i] == '\\' and i+1