#!/usr/bin/env bash
# 봇 세션이 오너 PAT 로 GitHub 쓰기 작업을 하는 것을 차단한다.
#
# 배경(2026-08-20 실증):
#   봇이 `gh` 를 토큰 주입 없이 호출 → ~/.config/gh/hosts.yml 의 오너 개인 PAT 가 잡힘
#   → PR 작성자·merged_by 가 오너 이름으로 찍혀 **감사 기록이 오염**됨.
#   누가 무엇을 했는지 사후 추적 불가. 봇 무단 머지 2회의 책임 소재도 흐려졌다.
#
# 핵심(2026-08-21 ANU 실측): BOT_GITHUB_TOKEN 은 이미 존재하고 유효하다(ghs_, 자동 갱신).
#   "토큰이 없어서"가 아니라 "주입하지 않아서" 생긴 문제다. 그래서 인프라가 아니라 경로 강제로 푼다.
#
# 차단 대상: 쓰기성 gh 명령(pr create/merge/review/edit, api -X PUT/POST/PATCH/DELETE)
#   중 GH_TOKEN 주입이 없는 것.
# 비대상: 조회성 명령(gh pr view/list/checks, gh api GET) — 오너 PAT 로 읽어도 기록이 남지 않는다.
IN=$(cat)
CMD=$(printf '%s' "$IN" | jq -r '.tool_input.command // ""' 2>/dev/null)

printf '%s' "$CMD" | grep -q '<<' && exit 0                       # heredoc 오발화 차단
printf '%s' "$CMD" | grep -qE '\bgh\b' || exit 0                  # gh 호출 아니면 통과
printf '%s' "$CMD" | grep -q 'gh-token-guard' && exit 0           # 자기 갱신 교착 방지

# 쓰기성 판별
WRITE=0
printf '%s' "$CMD" | grep -qE 'gh +(pr|issue|release) +(create|merge|edit|close|review|comment)' && WRITE=1
printf '%s' "$CMD" | grep -qE 'gh +api +.*-X +(PUT|POST|PATCH|DELETE)' && WRITE=1
[ "$WRITE" -eq 0 ] && exit 0

# 토큰 주입 여부
printf '%s' "$CMD" | grep -qE 'GH_TOKEN=|GITHUB_TOKEN=' && exit 0

jq -n --arg r "GitHub 쓰기 작업에 봇 토큰이 주입되지 않았다.

토큰 없이 gh 를 호출하면 ~/.config/gh/hosts.yml 의 **회장님 개인 PAT** 가 사용된다.
그러면 PR 작성자·merged_by 가 회장님 이름으로 찍혀 **감사 기록이 오염**되고,
누가 무엇을 했는지 사후 추적이 불가능해진다(2026-08-20 실제 사고).

올바른 형태:
  set -a; source /home/jay/workspace/.env.keys; set +a
  GH_TOKEN=\"\$BOT_GITHUB_TOKEN\" gh api -X PUT ...

BOT_GITHUB_TOKEN 은 이미 존재하고 유효하다(ghs_, 자동 갱신). 주입만 하면 된다.
조회성 명령(gh pr view/list/checks, gh api GET)은 이 제한을 받지 않는다." '{
  hookSpecificOutput: {
    hookEventName: "PreToolUse",
    permissionDecision: "deny",
    permissionDecisionReason: $r
  },
  systemMessage: "gh 쓰기 작업에 봇 토큰 미주입 — 차단됨"
}'
exit 0
