feat(hook): Phase 2 inbox_scan.sh + SessionStart 자동 알림 (PD님 직접 지시)

- 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) <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-04-15 21:21:33 +09:00
parent a556d6a01f
commit 9a6ef2fab0
4 changed files with 69 additions and 0 deletions

View File

@ -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"
}
]
}

57
scripts/inbox_scan.sh Normal file
View File

@ -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

View File

@ -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"
}
]
}

View File

@ -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"
}
]
}