---
name: messenger-orchestrator
description: >
  GUARDiA Messenger 모바일 앱(C:\GUARDiA\app) 전체 개발·빌드·스토어 등록·문서화 워크플로우 조율.
  에이전트 팀: rn-developer, eas-engineer, store-publisher, doc-writer, feature-developer.
  트리거: '화면 추가', '기능 구현', 'EAS 빌드', 'APK 빌드', 'Play Store 등록', 'App Store 제출',
  '가이드 작성', 'PDF 생성', 'PPTX 생성', '다시 실행', '재실행', '업데이트', '수정', '보완',
  'DR 모니터링', '네트워크 화면', 'CSAP 화면', '생체인증', '오프라인 모드', 'Kanban 보드',
  '다크모드', '멀티기관', '인시던트 화면', '신규 탭 추가', 'GUARDiA Messenger 개발', '모바일 앱' 관련 모든 요청.
---

# GUARDiA Messenger 오케스트레이터

**실행 모드**: 하이브리드 (Phase별 전환)

## Phase 0: 컨텍스트 확인

`_workspace/` 존재 여부로 실행 모드 결정:
- **없음** → 초기 실행 (Phase 1부터)
- **있음 + 부분 수정 요청** → 해당 에이전트만 재호출
- **있음 + 새 요청** → `_workspace/`를 `_workspace_prev/`로 이동 후 재실행

## Phase 1: 요청 분석 (오케스트레이터 직접)

요청 유형 판별:
```
A. 화면/기능 개발 → rn-developer 주도
B. 빌드/배포 → eas-engineer 주도
C. 스토어 등록 → store-publisher 주도
D. 문서화 → doc-writer 주도
E. 전체 파이프라인 → A→B→C→D 순서
```

**반드시 확인할 빌드 금기사항** (rn-developer에게 전달):
1. `android/`, `ios/` 폴더 로컬 생성 금지
2. `expo-notifications` 플러그인 금지
3. `expo-router/babel` babel plugin 금지
4. `enablePngCrunchInReleaseBuilds` 반드시 false

## Phase 2: 병렬 개발 (팀 모드)
**실행 모드: 에이전트 팀**

```
TeamCreate("messenger-team", [rn-developer, eas-engineer])
TaskCreate("화면 구현", assignee=rn-developer)
TaskCreate("빌드 설정 검증", assignee=eas-engineer, blockedBy=[화면 구현])
```

## Phase 3: 빌드 (서브 에이전트)
**실행 모드: 서브 에이전트**

```
Agent(eas-engineer, prompt="Android preview 빌드 실행")
```

빌드 성공 확인 후 다음 Phase 진행.

## Phase 4: 문서화 (서브 에이전트)
**실행 모드: 서브 에이전트**

병렬 실행:
```
Agent(doc-writer, "개발 가이드 + PDF + PPTX 생성", run_in_background=true)
Agent(store-publisher, "스토어 메타데이터 준비", run_in_background=true)
```

## 에러 핸들링

| 에러 | 대응 |
|------|------|
| Gradle UNKNOWN 에러 | `android/` 폴더 삭제 + .easignore 확인 |
| AAPT2 PNG 에러 | `withGradleProps.js` enablePngCrunchInReleaseBuilds=false 확인 |
| EAS 401 | `npx eas-cli login` 재실행 안내 |
| 타입 오류 | `services/api.ts` 타입 정의 확인 |

## 테스트 시나리오

**정상 흐름**: 새 SR 상세 화면 추가 → rn-developer 구현 → eas-engineer 빌드 → APK URL 확인

**에러 흐름**: Gradle 실패 → 로그 URL 추출 → `withGradleProps.js` 수정 → 재빌드
