BurningTimesAi/scripts/live_inject.sh

57 lines
1.8 KiB
Bash

#!/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