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:
parent
a556d6a01f
commit
9a6ef2fab0
|
|
@ -80,6 +80,10 @@
|
||||||
{
|
{
|
||||||
"type": "command",
|
"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"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -80,6 +80,10 @@
|
||||||
{
|
{
|
||||||
"type": "command",
|
"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"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,10 @@
|
||||||
{
|
{
|
||||||
"type": "command",
|
"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"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue