- Add setup.md command to install SessionEnd and PreCompact hooks - Add install-hooks.sh script for automatic hook installation to ~/.claude/settings.json - Hooks remind user to run /learn:analyze before session end or auto-compact - Bump version to 2.1.2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
114 lines
3.6 KiB
Bash
Executable File
114 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# Claude Learn - Install Hooks
|
||
# Adaugă hooks-urile Learn în ~/.claude/settings.json
|
||
|
||
SETTINGS_FILE="$HOME/.claude/settings.json"
|
||
|
||
# Colors
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
CYAN='\033[0;36m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m'
|
||
|
||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||
echo -e "${CYAN} Claude Learn - Hook Installation${NC}"
|
||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||
|
||
# Check if settings file exists
|
||
if [ ! -f "$SETTINGS_FILE" ]; then
|
||
echo -e "${RED}Error: $SETTINGS_FILE not found${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# Backup
|
||
cp "$SETTINGS_FILE" "$SETTINGS_FILE.backup"
|
||
echo -e "${GREEN}✓${NC} Backup created: settings.json.backup"
|
||
|
||
# Check if hooks already exist
|
||
if python3 -c "import json; d=json.load(open('$SETTINGS_FILE')); exit(0 if 'hooks' in d else 1)" 2>/dev/null; then
|
||
echo -e "${YELLOW}⚠${NC} Hooks section already exists in settings.json"
|
||
echo -e " Checking for Learn hooks..."
|
||
|
||
# Check if SessionEnd already has our hook
|
||
HAS_LEARN=$(python3 -c "
|
||
import json
|
||
d = json.load(open('$SETTINGS_FILE'))
|
||
hooks = d.get('hooks', {})
|
||
session_end = hooks.get('SessionEnd', [])
|
||
for h in session_end:
|
||
cmd = h.get('command', '')
|
||
if 'learn:analyze' in cmd:
|
||
print('yes')
|
||
exit(0)
|
||
print('no')
|
||
" 2>/dev/null)
|
||
|
||
if [ "$HAS_LEARN" = "yes" ]; then
|
||
echo -e "${GREEN}✓${NC} Learn hooks already installed!"
|
||
exit 0
|
||
fi
|
||
fi
|
||
|
||
# Add hooks using Python
|
||
python3 << 'PYTHON_SCRIPT'
|
||
import json
|
||
import os
|
||
|
||
settings_file = os.path.expanduser("~/.claude/settings.json")
|
||
|
||
with open(settings_file, 'r') as f:
|
||
settings = json.load(f)
|
||
|
||
# Define Learn hooks
|
||
learn_session_end = {
|
||
"type": "command",
|
||
"command": "echo '\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n💡 Tip: Rulează /learn:analyze pentru a captura lecțiile din sesiune\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'",
|
||
"timeout": 5
|
||
}
|
||
|
||
learn_pre_compact = {
|
||
"matcher": "auto",
|
||
"hooks": [
|
||
{
|
||
"type": "command",
|
||
"command": "echo '\n⚠️ Context plin! Rulează /learn:analyze ACUM pentru a salva lecțiile înainte de compact!\n'",
|
||
"timeout": 5
|
||
}
|
||
]
|
||
}
|
||
|
||
# Initialize hooks if not exists
|
||
if 'hooks' not in settings:
|
||
settings['hooks'] = {}
|
||
|
||
# Add SessionEnd hook
|
||
if 'SessionEnd' not in settings['hooks']:
|
||
settings['hooks']['SessionEnd'] = []
|
||
settings['hooks']['SessionEnd'].append(learn_session_end)
|
||
|
||
# Add PreCompact hook
|
||
if 'PreCompact' not in settings['hooks']:
|
||
settings['hooks']['PreCompact'] = []
|
||
settings['hooks']['PreCompact'].append(learn_pre_compact)
|
||
|
||
# Write back
|
||
with open(settings_file, 'w') as f:
|
||
json.dump(settings, f, indent=2)
|
||
|
||
print("Hooks added successfully!")
|
||
PYTHON_SCRIPT
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✓${NC} SessionEnd hook installed"
|
||
echo -e "${GREEN}✓${NC} PreCompact hook installed"
|
||
echo ""
|
||
echo -e "${CYAN}Hooks-urile vor fi active din următoarea sesiune Claude Code.${NC}"
|
||
echo -e "Verifică cu: ${YELLOW}/hooks${NC}"
|
||
else
|
||
echo -e "${RED}Error installing hooks${NC}"
|
||
# Restore backup
|
||
mv "$SETTINGS_FILE.backup" "$SETTINGS_FILE"
|
||
exit 1
|
||
fi
|