#!/bin/bash
# claude_p_guard.sh — claude -p / Agent SDK 残存 能動検出（2026-06-06新設）
# ============================================================================
# 目的: 6/15 Agent SDK課金分割（REMINDER #55）対応。
#   「使ってないはず」の記憶に依存せず、起動シーケンスで毎回 全コードを能動grep。
#   2026-06-06 auditor の claude -p 見落とし事案（ユーザー指摘で初発見）の再発防止。
#   教訓: feedback_grep_whole_repo_not_file_scope.md（ファイル単位でなくrepo全体grep）
#
# 判定: [1][3] が空 = 実行される claude -p ゼロ（OK）。
#        ヒットしたら各箇所が raise/コメントで無効化済か必ず目視。
# ============================================================================
set -uo pipefail

FLEET="$HOME/jarvis-dashboard"
DRIVE="/Users/rk/Library/CloudStorage/GoogleDrive-ritsuha1021@gmail.com/マイドライブ/起業フォルダー"

echo "=== 🔴 claude -p / Agent SDK guard ($(date '+%Y-%m-%d %H:%M')) ==="

# 🔁 2026-06-30 本丸化: ハードコード4ファイル列挙をやめ、起業フォルダー全体 + dashboard を
#   repo全体 grep -rn で走査（auditor/ 含む・_backup/_archive/node_modules/.git 除外）。
#   除外: 自分自身（claude_p_guard）/ docstring到達不能は ファイル単位ガード判定で吸収。
EXCLUDE='node_modules|/_backup|/_archive|/\.git/|claude_p_guard|/tunnel_logs/'
SCAN_ROOTS=("$DRIVE" "$FLEET")

echo "--- [1] claude -p / --print を subprocess実行するファイル → ガード有無を自動判定 ---"
# 「claude -p / --print の実行パターンを含むファイル」を repo全体から抽出（auditor/ 含む）。
CP_FILES=$(grep -rln --include="*.py" --include="*.sh" \
  -E '\["claude",[[:space:]]*"(-p|--print)"|claude[[:space:]]+(--dangerously-skip-permissions[[:space:]]+)?(-p|--print)[[:space:]]' \
  "${SCAN_ROOTS[@]}" 2>/dev/null | grep -vE "$EXCLUDE")
if [ -z "$CP_FILES" ]; then
  echo "  ✅ claude -p を実行するコードを含むファイル：ゼロ"
else
  UNGUARDED=0
  for f in $CP_FILES; do
    # ガード判定: 「REMINDER #55」or「GUARD」印 or 先頭付近の exit 0 / raise SystemExit
    if grep -qE 'REMINDER #55|\[GUARD\]' "$f" \
       || head -14 "$f" | grep -qE '^[[:space:]]*(exit 0|raise SystemExit)'; then
      echo "  ✅ ガード済: ${f##*起業フォルダー/}"
    else
      echo "  🔴 未ガード(要TUI化/raise): $f"
      UNGUARDED=$((UNGUARDED + 1))
    fi
  done
  if [ "$UNGUARDED" -eq 0 ]; then
    echo "  → 全ファイル raise/exit 0 でガード済 ＝ 実行される claude -p ゼロ ✅"
  else
    echo "  → 🔴 未ガード ${UNGUARDED}件・即 raise ガード化 or TUI化（REMINDER #55）"
  fi
fi

echo "--- [2] anthropic SDK import / 生HTTP直叩き（api.anthropic.com）→ ガード有無を自動判定 ---"
# SDK import に加え、生HTTP直叩き（urllib/requests で api.anthropic.com / v1/messages）も検出。
API_FILES=$(grep -rln --include="*.py" --include="*.sh" --include="*.js" --include="*.ts" \
  -E 'import anthropic|from anthropic|@anthropic-ai/sdk|api\.anthropic\.com|urllib.*v1/messages|requests\.[a-z]+\(.*anthropic' \
  "${SCAN_ROOTS[@]}" 2>/dev/null | grep -vE "$EXCLUDE")
if [ -z "$API_FILES" ]; then
  echo "  ✅ anthropic SDK/生API直叩きコード：ゼロ"
else
  API_UNGUARDED=0
  for f in $API_FILES; do
    if grep -qE 'REMINDER #55|\[GUARD\]' "$f" \
       || head -25 "$f" | grep -qE '^[[:space:]]*(exit 0|raise SystemExit)'; then
      echo "  ✅ ガード済: ${f##*起業フォルダー/}"
    else
      echo "  🟡 要確認(未稼働なら可・稼働なら即TUI/別経路化): ${f##*起業フォルダー/}"
      API_UNGUARDED=$((API_UNGUARDED + 1))
    fi
  done
  [ "$API_UNGUARDED" -eq 0 ] && echo "  → 全ファイル ガード済 ✅" \
    || echo "  → 🟡 未ガード ${API_UNGUARDED}件・稼働状況を目視（jarvis.py等 未稼働なら可・起動禁止）"
fi

echo "--- [3] 稼働中の claude -p / anthropic SDK プロセス ---"
ps aux | grep -iE 'claude[^a-z]+(-p|--print)|python.*anthropic' | grep -v grep \
  | grep -vE 'output-format stream-json' | awk '{print $2,$11,$12,$13}' | head

echo "--- [4] GitHub Actions workflow（別課金対象）---"
ls "$DRIVE"/.github/workflows/ 2>/dev/null && echo "  ⚠️ workflows存在=要確認" || echo "  なし=OK"

echo "=== guard end: [1][3]空=実行されるclaude -pゼロ / [2]はjarvis.py等(未稼働なら可・起動禁止) ==="
