57 lines
1.8 KiB
Bash
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/.claude/live"
|
|
[ ! -d "$LIVE_DIR" ] && exit 0
|
|
|
|
THROTTLE_DIR="$HOME/.claude/.nerdnavis_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
|