From 9a6ef2fab04428797297bce9a3448d6feac3df70 Mon Sep 17 00:00:00 2001 From: swrring Date: Wed, 15 Apr 2026 21:21:33 +0900 Subject: [PATCH] =?UTF-8?q?feat(hook):=20Phase=202=20inbox=5Fscan.sh=20+?= =?UTF-8?q?=20SessionStart=20=EC=9E=90=EB=8F=99=20=EC=95=8C=EB=A6=BC=20(PD?= =?UTF-8?q?=EB=8B=98=20=EC=A7=81=EC=A0=91=20=EC=A7=80=EC=8B=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scripts/inbox_scan.sh: cwd 기반 부서 판단 후 자기 수신 inbox 2개 자동 스캔 - 루트·개발실·기획실 settings.json 모두 SessionStart hook에 inbox_scan 추가 - YAML status !=완료 파일만 보고 (from/subject/priority 추출) - 동작 검증 완료: 개발실 컨텍스트에서 REQ001~003 정확 감지 Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/settings.json | 4 +++ scripts/inbox_scan.sh | 57 ++++++++++++++++++++++++++++++++++++ 개발실/.claude/settings.json | 4 +++ 기획실/.claude/settings.json | 4 +++ 4 files changed, 69 insertions(+) create mode 100644 scripts/inbox_scan.sh diff --git a/.claude/settings.json b/.claude/settings.json index 6657bc1..8250926 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -80,6 +80,10 @@ { "type": "command", "command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi" + }, + { + "type": "command", + "command": "bash scripts/inbox_scan.sh 2>/dev/null || true" } ] } diff --git a/scripts/inbox_scan.sh b/scripts/inbox_scan.sh new file mode 100644 index 0000000..a8b2177 --- /dev/null +++ b/scripts/inbox_scan.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# SessionStart hook 확장: 자기 inbox 신규·미처리 파일 자동 알림 +# Phase 2 (2026-04-15 PD님 승인) — 공유/소통/ 6축 통신 허브 연동 +# +# 부서 판단 규칙 (cwd 기반): +# - /기획실/ 경로 포함 → 기획실 +# - /개발실/ 경로 포함 → 개발실 +# - 그 외 → PM (루트) +# 각 부서는 자기 수신 inbox 2개를 스캔하며, YAML `status: 완료` 가 아닌 파일만 보고한다. + +REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) +[ -z "$REPO_ROOT" ] && exit 0 + +CWD=$(pwd -W 2>/dev/null || pwd) + +if [[ "$CWD" == *"/기획실/"* ]] || [[ "$CWD" == *"/기획실" ]]; then + ROLE="기획실" + INBOXES=("$REPO_ROOT/공유/소통/PM→기획실" "$REPO_ROOT/공유/소통/개발실→기획실") +elif [[ "$CWD" == *"/개발실/"* ]] || [[ "$CWD" == *"/개발실" ]]; then + ROLE="개발실" + INBOXES=("$REPO_ROOT/공유/소통/PM→개발실" "$REPO_ROOT/공유/소통/기획실→개발실") +else + ROLE="PM" + INBOXES=("$REPO_ROOT/공유/소통/개발실→PM" "$REPO_ROOT/공유/소통/기획실→PM") +fi + +TOTAL=0 +LINES="" + +for INBOX in "${INBOXES[@]}"; do + [ ! -d "$INBOX" ] && continue + CHANNEL=$(basename "$INBOX") + for f in "$INBOX"/*.md; do + [ -e "$f" ] || continue + STATUS=$(grep -m1 "^status:" "$f" 2>/dev/null | sed 's/status:[[:space:]]*//;s/[[:space:]]*$//') + [ "$STATUS" = "완료" ] && continue + SUBJECT=$(grep -m1 "^subject:" "$f" 2>/dev/null | sed 's/subject:[[:space:]]*//;s/[[:space:]]*$//') + FROM=$(grep -m1 "^from:" "$f" 2>/dev/null | sed 's/from:[[:space:]]*//;s/[[:space:]]*$//') + PRIORITY=$(grep -m1 "^priority:" "$f" 2>/dev/null | sed 's/priority:[[:space:]]*//;s/[[:space:]]*$//') + BASENAME=$(basename "$f") + [ -z "$SUBJECT" ] && SUBJECT="(제목 없음)" + [ -z "$FROM" ] && FROM="(발신자 없음)" + [ -z "$PRIORITY" ] && PRIORITY="normal" + [ -z "$STATUS" ] && STATUS="대기" + LINES+=" • [$CHANNEL] $FROM → $SUBJECT (prio:$PRIORITY, status:$STATUS) — $BASENAME +" + TOTAL=$((TOTAL + 1)) + done +done + +if [ $TOTAL -gt 0 ]; then + echo "📬 [Inbox:$ROLE] 미처리 통신 $TOTAL 건 (공유/소통/):" + printf "%b" "$LINES" + echo "→ 처리 후 status: 완료 갱신 + git mv 공유/소통/완료/ + commit·push" +else + echo "📭 [Inbox:$ROLE] 미처리 통신 없음" +fi diff --git a/개발실/.claude/settings.json b/개발실/.claude/settings.json index 6657bc1..8250926 100644 --- a/개발실/.claude/settings.json +++ b/개발실/.claude/settings.json @@ -80,6 +80,10 @@ { "type": "command", "command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi" + }, + { + "type": "command", + "command": "bash scripts/inbox_scan.sh 2>/dev/null || true" } ] } diff --git a/기획실/.claude/settings.json b/기획실/.claude/settings.json index 6657bc1..8250926 100644 --- a/기획실/.claude/settings.json +++ b/기획실/.claude/settings.json @@ -80,6 +80,10 @@ { "type": "command", "command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출:'; echo \"$CHANGES\"; echo '→ 권장: git merge origin/main --no-edit'; else echo '✅ [SessionStart] main 동기화 상태'; fi" + }, + { + "type": "command", + "command": "bash scripts/inbox_scan.sh 2>/dev/null || true" } ] }