#!/usr/bin/env bash
# jinhak-harness — session-start hook
# 멀티 AI 호환 부트스트랩: 환경변수로 호스트 도구를 감지해 도구별 JSON 스키마로
# 컨텍스트를 주입한다. (REPORT_06 §3.5 Superpowers 패턴 + ADR-001)

set -eu

# ----------------------------------------------------------------------
# Bootstrap context — 약 500토큰(~2000자) 이하 유지.
# 평문으로 작성하고, 아래 5종 escape 단계에서 JSON 안전 문자열로 변환.
# ----------------------------------------------------------------------
read -r -d '' s <<'CTX' || true
[jinhak-harness] 비개발자 직군 자동화 하니스가 활성화되었습니다.

원칙:
- 한국어 우선, 친절한 실패 리포트(변수 치환 템플릿)
- 기본 프로필=eco · Dry-run 강제 · 외부 전송/삭제는 명시 승인 필요
- 첫 실행이면 `/start`로 5분 직군 인터뷰부터 진행하세요

커맨드: /start /plan /build /autopilot /verify /ship /handoff /create /init /doctor
환경: HARNESS_HOME, AGENTS_SKILLS_HOME 로 데이터 위치 제어 (HARNESS_DEV=1 이면 dev-home 사용)
CTX

# ----------------------------------------------------------------------
# alwaysApply: true 스킬(baseline) 본문 동적 합성 — 청사진 Layer 1 + Karpathy 시맨틱.
# baseline SKILL.md 위치를 우선순위대로 탐색하고, frontmatter를 제거한 본문 일부를
# 부트스트랩 컨텍스트에 합성. 합성 후에도 500토큰(~2000자) 한도를 넘지 않도록 cap.
# ----------------------------------------------------------------------
HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
BASELINE_CANDIDATES=(
  "${AGENTS_SKILLS_HOME:-}/baseline/SKILL.md"
  "${HOOK_DIR}/../templates/.agents/skills/baseline/SKILL.md"
  "${HARNESS_HOME:-$HOME/.harness}/agents/skills/baseline/SKILL.md"
)
for candidate in "${BASELINE_CANDIDATES[@]}"; do
  [ -z "$candidate" ] && continue
  if [ -f "$candidate" ]; then
    # frontmatter 제거: 첫 `---` 줄 ~ 둘째 `---` 줄 사이 스킵, 그 이후 본문
    body=$(awk '/^---$/{c++; next} c==2{print}' "$candidate")
    if [ -n "$body" ]; then
      # 본문 앞 ~800자만 사용 (전체 컨텍스트 cap 보호)
      body=$(printf '%s' "$body" | head -c 800)
      s="$s

--- baseline (alwaysApply) ---
$body"
    fi
    break
  fi
done

# ----------------------------------------------------------------------
# 개인 컨텍스트 주입 (인터뷰모드) — render-digest.js가 프로필을 읽어 합성.
#   · personal-context.md(심화 인터뷰) 있으면 full 모드(전체 컨텍스트)
#   · 없고 user-profile.md(/start)만 있으면 eco 다이제스트
# 실패해도 세션을 막지 않도록 `|| true`. set -eu 안전.
# ----------------------------------------------------------------------
RENDER_DIGEST="${HOOK_DIR}/../bin/render-digest.js"
if command -v node >/dev/null 2>&1 && [ -f "$RENDER_DIGEST" ]; then
  digest="$(node "$RENDER_DIGEST" 2>/dev/null || true)"
  if [ -n "$digest" ]; then
    s="$s

--- 개인 컨텍스트 (인터뷰모드) ---
$digest"
  fi
fi

# ----------------------------------------------------------------------
# REPORT_06 §3.5 — 5종 escape 패턴 (순서 중요: 백슬래시 → 따옴표 → 제어문자)
# ----------------------------------------------------------------------
s="${s//\\/\\\\}"
s="${s//\"/\\\"}"
s="${s//$'\n'/\\n}"
s="${s//$'\r'/\\r}"
s="${s//$'\t'/\\t}"

# ----------------------------------------------------------------------
# 플랫폼별 JSON 스키마 3종 분기 (Cursor / Claude Code / Copilot·SDK)
# ----------------------------------------------------------------------
if [ -n "${CURSOR_PLUGIN_ROOT:-}" ]; then
  printf '{"additional_context": "%s"}' "$s"
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -z "${COPILOT_CLI:-}" ]; then
  printf '{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "%s"}}' "$s"
else
  printf '{"additionalContext": "%s"}' "$s"
fi
