#!/bin/bash # UserPromptSubmit hook — .claude/live/ 증분 읽기 + 컨텍스트 주입 # 세션 중 반영 불가 파일의 변경분을 실시간 주입 # 증분 방식: 마지막 읽은 줄 이후 추가분만 출력 REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) [ -z "$REPO_ROOT" ] && exit 0 LIVE_DIR="$REPO_ROOT/.live" [ ! -d "$LIVE_DIR" ] && exit 0 THROTTLE_DIR="$HOME/.claude/.burningtimes_throttle" mkdir -p "$THROTTLE_DIR" 2>/dev/null OUTPUT="" TOTAL_CHARS=0 MAX_CHARS=8000 # 10,000자 한도에서 기존 hook 여유분 확보 for LIVE_FILE in "$LIVE_DIR"/*.md "$LIVE_DIR"/*.json; do [ ! -f "$LIVE_FILE" ] && continue BASENAME=$(basename "$LIVE_FILE") [ "$BASENAME" = "README.md" ] && continue # README는 스킵 # 파일별 마지막 읽은 줄 번호 추적 FILE_HASH=$(echo "$LIVE_FILE" | sha1sum 2>/dev/null | cut -d' ' -f1) LAST_LINE_FILE="$THROTTLE_DIR/live_lastline_$FILE_HASH" LAST_LINE=$(cat "$LAST_LINE_FILE" 2>/dev/null || echo 0) TOTAL_LINES=$(wc -l < "$LIVE_FILE" 2>/dev/null || echo 0) # 새 줄이 추가된 경우에만 출력 if [ "$TOTAL_LINES" -gt "$LAST_LINE" ]; then NEW_CONTENT=$(tail -n +$((LAST_LINE + 1)) "$LIVE_FILE" 2>/dev/null) NEW_CHARS=${#NEW_CONTENT} # 한도 체크 if [ $((TOTAL_CHARS + NEW_CHARS)) -lt $MAX_CHARS ]; then OUTPUT="$OUTPUT [LIVE:$BASENAME] 변경분 (${LAST_LINE}줄 이후): $NEW_CONTENT " TOTAL_CHARS=$((TOTAL_CHARS + NEW_CHARS + 50)) # 헤더 여유 echo "$TOTAL_LINES" > "$LAST_LINE_FILE" else OUTPUT="$OUTPUT [LIVE:$BASENAME] ⚠️ 증분 크기 초과 — Read 도구로 직접 확인 필요 " fi fi done # 출력이 있을 때만 주입 if [ -n "$OUTPUT" ] && [ "$TOTAL_CHARS" -gt 0 ]; then echo "📝 [Live 증분 동기화]$OUTPUT" fi exit 0