
    '<i                        U d Z ddlZddlZddlmZ ddlmZmZ ej                  j                  dd      Z
ddlmZ ddlmZ  ej"                         Zej                  j                  d	      xs ej'                  d
      Zej                  j                  dd      ZddlmZmZmZ defdZdddddddddddddddddddddddd dd!d"dd#dd$d%dd&dd'd(d)d*dd+d+d,d-dd.d.d/d0dd1d2d3d4dd5d6d7d8dd9d:d;d<dd=Zg d>g d?g d@g dAg dBg dCg dDg dEdFZdGdGdHdIdGdJdKdIidIdLdMdLdIdNdKdLidKdLidKdGidOdP	ZdefdQZi Z e!e"dR<   dSede!fdTZ#dUee   defdVZ$defdWZ%dSedefdXZ&	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdaZ'	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdbZ(	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdcZ)	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defddZ*	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdeZ+dfZ,dgdhddiZ-djede.fdkZ/djedlee.   defdmZ0	 	 	 	 	 d}dSedZedned\edUee   d`ee   doedpedefdqZ1	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdrZ2	 	 d|dYe!dSedZedned\ed]ed^ed_edUee   d`ee   defdsZ3	 	 d|dYe!dSedZed[ed\ed]ed^ed_edUee   d`ee   defdtZ4dZed\edefduZ5d~d\edZedefdvZ6	 	 ddwee   dZedned\edUee   defdxZ7dwee   dye!dze8dZed[ed\edUee   defd{Z9y)u  
팀별 프롬프트 생성 공통 모듈 (team_prompts.py)

dispatch.py와 orchestrator.py에서 공통으로 사용하는 프롬프트 생성 로직.
dev1-team/dev2-team(direct): Opus 팀장 직접 코딩
dev3-team(direct): 켈트 신화 팀, Opus 팀장 직접 코딩
dev4-team(direct): 비슈누 팀장, 직접 코딩
dev8-team(glm): 라 팀장, GLM-5 위임

Usage:
    from prompts.team_prompts import build_prompt, TEAM_INFO
    prompt = build_prompt("dev1-team", "task-1.1", "API 서버 개발")
    N)Path)ListOptionalWORKSPACE_ROOTz/home/jay/workspace)ConfigManager)format_for_promptCOKACDIR_CHAT_IDchat_idCOKACDIR_KEY_ANU )COMPOSITE_ALLOWED_TEAMSDEFAULT_HANDOFF_FIELDSHANDOFF_REQUIRED_FIELDSreturnc                  0    t         st        d      t         S )uH   ANU_KEY를 반환. 없으면 EnvironmentError (사용 시점 fail-fast).u>   COKACDIR_KEY_ANU 환경변수가 설정되지 않았습니다.)ANU_KEYEnvironmentError     E/home/jay/workspace/.worktrees/task-2057-dev2/prompts/team_prompts.py_get_anu_keyr   "   s    _``Nr   u   헤르메스 (Hermes)u   개발1팀장directuX   불칸(백엔드), 이리스(프론트엔드), 아테나(UX/UI), 아르고스(테스터))leaderroletypemembersu   오딘 (Odin)u   개발2팀장uX   토르(백엔드), 프레이야(프론트엔드), 미미르(UX/UI), 헤임달(테스터)u   다그다 (Dagda)u   개발3팀장um   루(Lugh, 백엔드), 브리짓(Brigid, 프론트엔드), 아네(Aine, UX/UI), 모리건(Morrigan, 테스터)u   비슈누 (Vishnu)u   개발4팀장ud   카르티케야(백엔드), 사라스바티(프론트엔드), 락슈미(UX/UI), 하누만(테스터)u   마르둑 (Marduk)u   개발5팀장uX   엔키(백엔드), 이쉬타르(프론트엔드), 나부(UX/UI), 닌기르수(테스터)u   페룬 (Perun)u   개발6팀장uX   스바로그(백엔드), 라다(프론트엔드), 모코시(UX/UI), 벨레스(테스터)u   이참나 (Itzamna)u   개발7팀장u[   쿠쿨칸(백엔드), 이쉬첼(프론트엔드), 아쿠인(UX/UI), 카마소츠(테스터)u   라 (Ra)u   개발8팀장mcpu^   아누비스(백엔드), 호루스(프론트엔드), 바스테트(UX/UI), 소베크(테스터)u   마케팅 팀장	marketingu   아폴론(콘텐츠 프로듀서/블로그 작성), 페이토(카피라이터), 에이레네(SEO & 리서치 전략가/블로그 발행)u   컨설팅 팀장
consultinguQ   아스클레피오스(보장분석/진단), 테미스(약관비교/규정 검토)u   토트 (Thoth)u   출판 센터장
publishingu   칼리오페(구성/아웃라인), 에라토(초안), 클리오(팩트검증), 테르프시코레(퇴고/편집), 폴리뮤니아(마무리/카피), 세쉬아트(DOCX 편집)u   아마테라스 (Amaterasu)u   디자인 팀장designud   벤자이텐(템플릿 디자인), 이나리(하이브리드 이미지), 카구야(아트 디자인)u   아폴론 (Apollo)u   콘텐츠 팀 리드contentu   아폴론(콘텐츠 프로듀서/팀 리드), 페이토(CRO 카피라이터/30% 겸임), 에이레네(SEO 자문), 벤자이텐(카드뉴스), 라타토스크(배포), 에코(데이터 수집))	dev1-team	dev2-team	dev3-team	dev4-team	dev5-team	dev6-team	dev7-team	dev8-teamr   r   r    r!   r"   ))u   불칸	   백엔드%   백엔드 로직/API/데이터 처리)u	   이리스   프론트엔드   UI/프론트엔드 구현)u	   아테나UX/UI$   UX 설계 및 스타일/레이아웃)u   아르고스	   테스터"   테스트 코드 작성 및 검증))u   토르r+   r,   )u   프레이야r-   r.   )u	   미미르r/   r0   )u	   헤임달r1   r2   ))u   루r+   r,   )u	   브리짓r-   r.   )u   아네r/   r0   )u	   모리건r1   r2   ))u   카르티케야r+   r,   )u   사라스바티r-   r.   )u	   락슈미r/   r0   )u	   하누만r1   r2   ))u   엔키r+   r,   )u   이쉬타르r-   r.   )u   나부r/   r0   )u   닌기르수r1   r2   ))u   스바로그r+   r,   )u   라다r-   r.   )u	   모코시r/   r0   )u	   벨레스r1   r2   ))u	   쿠쿨칸r+   r,   )u	   이쉬첼r-   r.   )u	   아쿠인r/   r0   )u   카마소츠r1   r2   ))u   아누비스r+   r,   )u	   호루스r-   r.   )u   바스테트r/   r0   )u	   소베크r1   r2   )r#   r$   r%   r&   r'   r(   r)   r*   opus)defaultu   설계sonnet)r4   u   아키텍처r4   haiku)r4   u   에셋생성)r4   u   테스트설계z
2026-03-31)	u   팀장r+   r-   r/   r1   QCgitu   보안리뷰_updatedc            	      |   ddl } ddlm}m} d}t        j	                         D ]  \  }}|j                  d      r|j                  dd      }|j	                         D ci c]  \  }}|dk7  s|| }	}}|	r6dj                  d	 |	j	                         D              }
|d
| d| d|
 dz  }|d
| d| dz  } t        j                  dd      }|rR	 |j                  t        |      d      }|j                         |z
  j                  }|dkD  r| j                  d|       |S |S c c}}w # t        $ r Y |S w xY w)u:   MODEL_MAP 기반 모델 가이드 텍스트 자동 생성.r   N)datetime	timedeltau   [모델 가이드]
_r4   r5   , c              3   0   K   | ]  \  }}| d |   yw): Nr   ).0kvs      r   	<genexpr>z%_build_model_guide.<locals>.<genexpr>   s     !I$!QQCr!+!Is   - r@    ()

r9   r   z%Y-%m-%d   uY   [WARNING] MODEL_MAP이 %d일 경과했습니다. 최신 모델 정책을 확인하세요.)loggingr;   r<   	MODEL_MAPitems
startswithgetjoinstrptimestrnowdayswarning
ValueError)rJ   r;   r<   linesr   configdefault_modelrB   rC   extras	extra_strupdated_strupdated_datedays_elapseds                 r   _build_model_guider^      sM   ,"E!) 	4f??3

9h7#)<<>D41aQ)^!Q$DD		!I&,,.!IIIr$r-9+SAAEr$r-33E	4 --
B/K		#,,S-=zJL$LLN\9??Lao  L5L+ E$  	L	s    D(.D(AD. .	D;:D;_TEAM_AGENT_CACHEteam_idc                 h   | t         v r	t         |    S t        t              dz  dz  |  dz  }|j                         r8t	        |dd      5 }t        j                  |      }|t         | <   |cddd       S dt        j                  | i       j                  dd	      i}|t         | <   |S # 1 sw Y   <xY w)
u   org-details JSON에서 팀 에이전트 정보 로드 (캐시 포함).

    Args:
        team_id: 논리적 팀 ID (예: "marketing", "design")

    Returns:
        팀 에이전트 정보 딕셔너리
    memoryzorg-detailsz
-team.jsonrutf-8encodingNr   r   )	r_   r   r   existsopenjsonload	TEAM_INFOrN   )r`   detail_pathfresultfallbacks        r   _load_logical_team_agentsrp      s     ## ))~&1MAwizDZZK+sW5 	YYq\F)/g&	 	
 9=="599)RHIH!)gO	 	s    B((B1
project_idc                 z    | yt        t              dz  dz  |  dz  }|j                         sydt         d|  dS )u^   project-map 파일이 존재하면 참조 경로 섹션 반환, 없으면 빈 문자열 반환r   rb   zproject-maps.mduq   ## 프로젝트 구조 맵
작업 시작 전 프로젝트 구조 맵을 먼저 읽고 작업을 시작하세요: z/memory/project-maps/z.md

)r   r   rg   )rq   map_paths     r   _build_project_map_sectionru      sl    N#h.?ZLPSBTTH??aao`p  qF  GQ  FR  RY	Zr   c                      t        t              dz  dz  } 	 t        | d      5 }t        j                  |      }ddd       j                  di       }|j                  dd      }|j                  d	d
      }|j                  dd      }|j                  dd      }|j                  dd      }d| d| d| dt         dt         d| d| dS # 1 sw Y   xY w# t        t        j                  t        f$ r i }Y w xY w)u   세션 토큰 모니터링 지시 섹션 생성.

    봇 세션이 길어질 때 자동 압축 및 요약/재시작을 안내한다.
    임계값은 constants.json의 session_monitoring 섹션에서 로드.
    rW   zconstants.jsonrd   re   Nsession_monitoringwarning_pctF   critical_pctU   
resume_pctZ   tool_call_compact_threshold2   time_compact_minutes   ul   
## 세션 모니터링 (자동 압축)
세션이 길어지면 아래 기준에 따라 대응하세요:
- **u<   % 도달**: `/compact` 실행하여 컨텍스트 압축
- **uK   % 도달**: 즉시 중간 체크포인트 저장 후 `/compact` 실행
- **ub   % 초과**: 세션 요약 파일 저장 → 새 세션에서 이어서 작업
  - 요약 저장: `u   /memory/sessions/summary-{task_id}-{timestamp}.md`
  - 요약 내용: 현재 진행 상태, 수정 파일 목록, 남은 작업, 에러 목록
- 관련 모듈: `u*   /utils/session_auto_compress.py`
- 도구 u   회 호출 or u(   분 경과 시 `/compact` 실행 권장
)	r   r   rh   ri   rj   rN   FileNotFoundErrorJSONDecodeErrorKeyError)	config_pathrm   datasmrx   rz   r|   tool_thresholdtime_minutess	            r   !_build_session_monitoring_sectionr     s&    ~&14DDK+0 	 A99Q<D	 XX*B/ &&+K66."-Lb)JVV92>N660"5Lm n l -. /+, -"#>,?h	j
	  	  t33X> s'   C CC CC  C=<C=c           	         t         j                  | g       }d}|D ]  \  }}}|d| d| d| dz  } |dz  }t        j                  j	                  t
        dd      }d	}	 t        |d
d      5 }t        j                  |      }	ddd       	j                  di       j                  dd	      }|r|dt                dz  }n|dz  }|dt
         dz  }|S # 1 sw Y   SxY w# t        t        j                  f$ r Y Ow xY w)u.   팀원 코워크 섹션 생성 (팀별 동적)u  ## 팀원 코워크 (Task tool 사용)
Claude Code의 Task tool을 사용하여 팀원 역할을 병렬로 수행하세요.
작업을 서브태스크로 분해한 뒤, 독립적인 서브태스크는 단일 메시지에 여러 Task tool 호출로 병렬 실행합니다:
- **rF   z$)**: subagent_type=general-purpose, rH   u  
**★ 팀장 역할 원칙 (Opus 토큰 절감):**
- 팀장(Opus)은 직접 코딩하지 않는다. 설계/분배/검토/통합만 수행.
- 모든 코딩은 팀원(Sonnet/Haiku)에게 Task tool로 위임.
- Sonnet이 3회 실패한 경우에만 팀장이 직접 코딩 개입 허용.

z.claudezfeature_flags.jsonFrc   rd   re   Nflagsmodel_map_enabledz**z**
u   **모델 선택 가이드:**
- 단순 코딩/유틸리티/테스트 → model="haiku" (비용 절감)
- 일반 코딩/로직 구현 → model="sonnet" (기본값, 대부분의 코딩)
- ⚠️ 팀장(Opus)이 직접 코딩하지 마세요.

u  **마이크로태스크 분해 규칙 (Lv.2+ 작업):**
- 각 서브태스크를 2~5분 단위 마이크로태스크로 분해
- 각 마이크로태스크에 명시할 항목: (1) 대상 파일 (2) 변경 내용 (3) 테스트 방법 (4) 커밋 메시지
- 팀원에게 할당 시 마이크로태스크 단위로 분배
- Lv.1 단순 수정은 이미 파일/라인이 특정되므로 분해 불필요

**테스터 Evidence Collector 규칙:**
- 기본값 = NEEDS WORK. 증거로 뒤집어야 PASS
- Zero Issue = Red Flag (첫 구현에서 이슈 0건은 비현실적, 최소 3개 발견 필수)
- 스크린샷/로그 등 증거 필수 (browser.py 활용)
- 상세: u3   /memory/specs/retry-escalation-protocol.md 참조

)TEAM_MEMBER_ROLESrN   ospathrO   r   rh   ri   rj   r   r   r^   )
r`   r   rV   namer   desc_ff_path_mm_enabled_f_ff_datas
             r   _build_cowork_sectionr   (  sN   ##GR0G_ 

 $ SdD4vRv%I$rRRS	]E ww||NI7KLHK(C'2 	%byy}H	%ll7B/334GO 2(*+400J	
 
	 $$$Y		[E L9	% 	% t334 s*    C" .C*C" CC" "C>=C>teamtask_idtask_file_pathleveltimer_start	timer_endreport_pathchain_idc
                 v    | |||||	f}
|}d| d| d| dt          d| d}d| d| d	t          d
t          d| dS )uC   마케팅 팀 프롬프트 생성 (경량화: 파일 참조 패턴)- task_id: 
- team_id: 
- team_short: 
- WORKSPACE_ROOT: 
- report_path: rH   up   당신은 마케팅 팀장입니다. 다음 마케팅 작업을 수행하세요.

## 작업 지시
- 작업 ID:    
- 작업 상세는 6   를 읽고 파악하세요.

## 팀 구성 및 스킬
uK   /prompts/teams/marketing.md를 읽고 파악하세요.

## 워크플로우
o   /prompts/LOGICAL-TEAM-WORKFLOW.md를 읽고 따르세요.
아래 값을 워크플로우에서 사용하세요:
N  
## 서브에이전트(Task tool) 결과 규칙
- 상세 결과는 파일로 저장하고, Task tool 반환값은 요약만 포함 (500자 이내)
- 요약 필수 포함: 성공/실패 여부, FAIL 항목 수/코드/사유 (있는 경우), 산출물 파일 경로
"FAIL 존재 시 반드시 FAIL 코드와 사유를 요약에 포함"
r   r   r`   r   r   r   r   r   r   rq   r   r=   
team_shortplaceholder_liness                r   _build_marketing_promptr   \       
uk9j(CAJ
gY Y # %+, -%b		* y !,- .%
 
 A
R	Sr   c
                 t    | |||||	f}
|}d| d| d| dt          d| d}d| d| d	t          d
t          d| 
S )uC   컨설팅 팀 프롬프트 생성 (경량화: 파일 참조 패턴)r   r   r   r   r   rH   uw   당신은 컨설팅 팀장입니다. 보험 컨설팅 관련 작업을 수행하세요.

## 작업 지시
- 작업 ID: r   r   uL   /prompts/teams/consulting.md를 읽고 파악하세요.

## 워크플로우
r   r   r   s                r   _build_consulting_promptr          
uk9j(CAJ
gY Y # %+, -%b		* y !,- .%
 
 A
		r   c
                 t    | |||||	f}
|}d| d| d| dt          d| d}d| d| d	t          d
t          d| 
S )u?   출판팀 프롬프트 생성 (경량화: 파일 참조 패턴)r   r   r   r   r   rH   u{   당신은 토트(Thoth), 출판 센터장입니다. 집필 프로젝트를 총괄하세요.

## 작업 지시
- 작업 ID: r   r   uL   /prompts/teams/publishing.md를 읽고 파악하세요.

## 워크플로우
r   r   r   s                r   _build_publishing_promptr     r   r   c
                 v    | |||||	f}
|}d| d| d| dt          d| d}d| d| d	t          d
t          d| dS )uC   디자인 팀 프롬프트 생성 (경량화: 파일 참조 패턴)r   r   r   r   r   rH   u   당신은 아마테라스(Amaterasu), 디자인 팀장입니다. 이미지 생성 작업 전문팀을 이끌고 비주얼 디자인 작업을 수행하세요.

## 작업 지시
- 작업 ID: r   r   uH   /prompts/teams/design.md를 읽고 파악하세요.

## 워크플로우
r   r   r   r   s                r   _build_design_promptr     r   r   c
                 t    | |||||	f}
|}d| d| d| dt          d| d}d| d| d	t          d
t          d| 
S )uC   콘텐츠 팀 프롬프트 생성 (경량화: 파일 참조 패턴)r   r   r   r   r   rH   u   당신은 콘텐츠 팀 리드(아폴론)입니다. 스레드/인스타 콘텐츠 작업을 수행하세요.

## 작업 지시
- 작업 ID: r   r   uI   /prompts/teams/content.md를 읽고 파악하세요.

## 워크플로우
r   r   r   s                r   _build_content_promptr     r   r   up  [CRITICAL - 항상 준수]
- 금지행위: 다른 팀 디렉토리 수정 금지, 승인 없는 프로덕션 배포 금지, 보안 키/토큰 하드코딩 금지
- QC 의무: 셀프 QC 8항목 체크, qc_verify.py 자동 검증 실행, 테스트 회귀 방지
- 보고 형식: SCQA 프레임워크, 보고서 파일 저장 필수, .done 이벤트 파일 생성 필수
iX  i  )summarystandardfulltextc                 L    t        t        | j                               dz        S )u2   토큰 수 추정. len(text.split()) * 1.3 사용.?)intlensplit)r   s    r   _count_tokensr   '  s    s4::< 3&''r   limitc                     || S t        |       }||k  r| S | j                         }t        |dz        }dj                  |d|       S )uD   텍스트를 토큰 한도 내로 자른다. CRITICAL_SET은 보존.Nr    )r   r   r   rO   )r   r   currentwordstarget_wordss        r   _truncate_to_token_limitr   ,  sR    }D!G%JJLEus{#L88E-<())r   	task_desc	task_typedisclosure_phasec                 p   ddl m}  |       }	|	j                  d      }
t        j	                  |       }|st        d|        t         d| d}t        |      }|j                  j                  dd       |j                  |d	
       |dd }dt         d| d|  d| d	}dt         d| }t         d| d}|d   dk(  rt        || ||||||||
      }n|d   dk(  rt        || ||||||||
      }n|d   dk(  rt        || ||||||||
      }n|d   dk(  rt        || ||||||||
      }no|d   dk(  rt        || ||||||||
      }nQ|d   dk(  rt!        || ||||||||
      }n3|d   dk(  rt#        || ||||||||
      }nt%        || ||||||||
      }|dz  }|dz  }|t'        ||      z  }|dk(  r|t)        ||      z  }|d k(  rd!|z   }n
|d"k(  rd#|z   }|
rP|d$k(  rt*        d%z   |z   }|S t,        j	                  |      }|&t*        d%z   t/        ||t1        t*              z
        z   }|S )&u   팀별 dispatch 프롬프트 생성 (공통 진입점)

    목차→요약→상세 원칙 적용:
    - 프롬프트 본문(목차): task_id + 핵심 지시 + 작업 파일 경로만 전달
    - 파일(요약): task_desc를 memory/tasks/<task_id>.md에 자동 저장
    - 상세: 팀장이 코드/스펙 파일을 직접 Read하여 확인

    Args:
        team_id: 팀 ID (dev1-team ~ dev8-team)
        task_id: 작업 ID (예: task-1.1)
        task_desc: 작업 설명 (파일에 저장됨)
        level: 검증 레벨 (normal/critical/security)
        project_id: 프로젝트 ID (projects/ 하위 디렉토리명)
        chain_id: 체인 ID (Phase 자동 체이닝용, Optional)
        task_type: 작업 유형 (coding/research/check)
            - coding: QC 검증 섹션 포함 (기본값)
            - research: QC 검증 섹션 제외 (리서치, 분석 작업)
            - check: QC 검증 섹션 제외 (점검, 확인 작업)

    Returns:
        팀장에게 전달할 프롬프트 문자열
    r   )FeatureFlagLoaderprogressive_disclosure_enabledu   알 수 없는 팀 ID: /memory/tasks/rs   Tparentsexist_okrd   re   N   zpython3 z/memory/task-timer.py start z --team z	 --desc ""z/memory/task-timer.py end /memory/reports/r   r   )rq   r   r   r   r    r!   r"   r   u   
## ★ Edit 직후 grep 검증 (필수)
Edit 직후 반드시 grep으로 변경 반영을 확인하세요. grep 0건 = Edit 실패입니다.
planned 항목이 1건이라도 있으면 .done 생성 금지.

uR  
## ★ L1 스모크테스트 (필수 — .done 생성 전)
★ .done 전 L1 스모크테스트 필수: 실제 서버 재시작 + API curl 또는 Playwright 스크린샷 확인
pytest PASS ≠ 실동작 확인. 상세는 DIRECT-WORKFLOW.md Step 4.8 참조.

## ★ L1 스모크테스트 결과 (필수 기록)
보고서에 아래 형식으로 L1 결과를 반드시 기록하세요:
- 서버 재시작: [성공/실패/해당없음]
- API 응답 확인: [curl 결과 또는 해당없음]
- 스크린샷: [경로 또는 해당없음]
이 섹션이 없는 보고서는 불완전 처리됩니다.

codingcriticalm   **[CRITICAL] 이 작업은 중요도 critical입니다. 품질 우선으로 신중하게 작업하세요.**

securitye   **[SECURITY] 이 작업은 보안 중요 작업입니다. 보안 최우선으로 작업하세요.**

r   rH   )utils.feature_flagsr   
is_enabledrk   rN   rU   r   r   parentmkdir
write_text_build_direct_promptr   r   r   r   r   _build_mcp_prompt_build_glm_prompt_build_three_docs_section_build_verification_sectionCRITICAL_SETTOKEN_LIMITSr   r   )r`   r   r   r   rq   r   r   r   r   
_ff_loader_pd_enabledr   r   	task_file
short_descr   r   r   promptr   s                       r   build_promptr   9  s   B 6"$J''(HIK==!D27)<== ''~gYcBN^$I4$7W5 3BJ >"">wi|T[S\\efpeqqrs  >**DWINI#$$4WISAKF|x%!
 
f	$(!
 
f	%)!
 
f	%)!
 
f	!%!
 
f	"&!
 
f	"!
 #!
 	MF 	K
F '77F H-eW== 
 C  FL  L	*	z  ~D  D v%!D(61F M !$$%56E %,/GPUXefrXsPs/ttMr   c
                 $   |j                  dd      }
d| d| d|
 dt         dt         dt                d	}|r	|d
| d	z  }|	r	|d|	 d	z  }t	        |      }d| d    d| d    d| d| d| d| d| d    dt         d| d| dt               z   S )uA   dev1-team, dev2-team: Opus 직접 코딩 프롬프트 (경량화)-teamr   r   r   r   r   
- CHAT_ID: 
- ANU_KEY: rH   - project_id: - chain_id: 
   당신은 r   r>   r   u*   입니다.

## 작업 지시
- 작업 ID:    
- 팀: r      를 읽고 파악하세요.

u   ## 팀원 구성
r   u4  

- ⚠️ **디자인 작업 직접 수행 금지**: 이미지 생성, 배너 디자인 등은 개발팀이 직접 하지 않습니다. 디자인 관련 작업이 있으면 보고서에 "디자인팀 호출 필요"로 명시하고, satori/gemini/hybrid 스킬을 호출하지 마세요.

## 워크플로우
i   /prompts/DIRECT-WORKFLOW.md를 읽고 따르세요.
아래 값을 워크플로우에서 사용하세요:
ut   
## ★ Micro-commit 규칙
팀원이 파일 수정 완료 시 즉시 커밋:
```bash
git add -A && git commit -m "[u(   ] {{팀원명}}: {{작업 요약}}"
```
)replacer   CHAT_IDr   ru   r   )r   r`   r   r   r   r   r   r   rq   r   r   r   project_map_sections                r   r   r   	  s&    "-J
gY Y # %+, -Y "n%R	)  ~j\<<|H:R884Z@ T(^$BtF|n 5y ! ,--L

	?
  
 A
 ) *1	 2!	" 56#	7r   c
                    |dt          d| d}
n
dt          d}
t        |      }t          d| d}|j                  dd	      }d
| d| d| d| dt          dt         dt	                d}|r	|d| dz  }|	r	|d|	 dz  }d|
 d| d| dt          d| d| dt          dt          dt          dt          d| d| d| d S )!u   dev8-team: 오픈클로(GLM-5)에 작업 전달, 라 팀장이 검토

    경량화: 핵심 변수 5개 + 선택 변수만 전달, 나머지는 GLM-WORKFLOW.md에서 유도.
    u,   - **프로젝트 격리**: 모든 코드는 z
/projects/u`   / 하위에만 작성. 다른 프로젝트 디렉토리, 시스템 코드 수정 절대 금지.
u5   - 이 작업은 시스템 작업입니다. 코드는 uy   /teams/dev8/ 또는 작업에서 지시된 경로에 작성하세요. 다른 팀 디렉토리는 건드리지 마세요.
r   rs   r   r   r   r   r   z
- task_file_path: r   r   r   rH   r   r   uK  당신은 라(Ra), 개발8팀장입니다. 아누(개발실장)에게 받은 작업을 오픈클로(GLM-5)에 전달하고, 결과를 검토합니다.

## 중요 규칙
- 절대 직접 코딩하지 마세요! 반드시 openclaw에 위임하세요.
- openclaw/GLM-5가 순차적으로 단독 작업합니다 (spawn 사용 안 함).
u  
- ⚠️ **디자인 작업 직접 수행 금지**: 이미지 생성, 배너 디자인, 광고 소재 제작, 카드뉴스 등 비주얼 디자인 작업은 개발팀이 직접 하지 않습니다. 디자인 관련 작업이 지시에 포함되어 있으면, 보고서에 "디자인팀 호출 필요" 로 명시하고, 직접 이미지를 생성하거나 satori/gemini/hybrid 스킬을 호출하지 마세요.
## 작업 지시
- 작업 ID: r   r   u    .md를 읽고 파악하세요.

u#   ## 코딩 표준
코드 작성 시 u   /teams/shared/CODING-STANDARDS.md를 참조하세요.

## 결과 검토 체크리스트 (GLM 작업 완료 후 필수 확인)
GLM-WORKFLOW.md 섹션 7.1의 필수 체크리스트를 따르세요: `u1   /teams/dev8/GLM-WORKFLOW.md`

## 워크플로우
u   /teams/dev8/GLM-WORKFLOW.md를 읽고 따르세요.
⚠️ openclaw 호출 시 반드시 `run-glm.sh` 래퍼 스크립트를 사용하세요: `bash z/teams/dev8/run-glm.sh r   u7   `
아래 값을 워크플로우에서 사용하세요:
u  
## 세션 경량화 규칙 (필수)
- 도구 50회 호출 or 30분 경과 시 /compact 실행
- 리서치 완료 후 구현 진입 전 /compact 필수
- 성능 저하 징후 감지 시 즉시 /compact
- 중간 체크포인트: memory/checkpoints/{task_id}.md에 진행 상태 저장
)r   ru   r   r   r   )r   r`   r   r   r   r   r   r   rq   r   isolation_ruler   r   r   r   s                  r   r   r   =  s     GGWWablam  nO  PPQ_P`  a[  \4Z@ ''~gYcBN"-J
gY Y # %+, -+, -Y "n%R	)  ~j\<<|H:R88_ 
   y ! ,-^G9Df
+, -RR`Qa b
 kkyjz  {R  SZ  R[  [\  ]k  \l lA
`)	ar   c
                    t        |      }
|j                  dd      }d| d| d| dt         dt         dt	                d	}|r	|d
| d	z  }|	r	|d|	 d	z  }dt         d| d| d| d| d|
 dt         dt               z   S )u
  dev8-team: MCP tool(glm_backend/frontend/uxui/tester)로 팀원 위임, 라 팀장이 검토

    OpenClaw 직접 호출을 MCP tool로 대체한 새 워크플로우.
    팀장(Ra, Sonnet)이 MCP tool을 호출하여 GLM 팀원에게 작업을 위임합니다.
    r   r   r   r   r   r   r   r   rH   r   r   u   당신은 라(Ra), 개발8팀장입니다.

## 팀원 구성
아누비스(백엔드), 호루스(프론트엔드), 바스테트(UX/UI), 소베크(테스터)

## 워크플로우
r   u  
## MCP Tool 기반 팀원 위임
팀원에게 작업을 위임할 때 MCP tool을 사용하세요:
- `glm_backend(task="...")` — 아누비스(백엔드, glm-5)
- `glm_frontend(task="...")` — 호루스(프론트엔드, glm-5)
- `glm_uxui(task="...")` — 바스테트(UX/UI, glm-5)
- `glm_tester(task="...")` — 소베크(테스터, glm-5)
- `glm_code(task="...", role="backend", review_cycles=1)` — 코드 작성 + 자체 리뷰
- `glm_generate(prompt="...", model="glm-5")` — 범용 생성

MCP tool의 결과물은 반드시 검토하고, 필요하면 직접 수정하세요.
GLM 결과물은 무조건 의심하고 검증합니다.

## 작업 지시
- 작업 ID: r   r   r   uB  - ⚠️ **디자인 작업 직접 수행 금지**: 이미지 생성, 배너 디자인 등은 개발팀이 직접 하지 않습니다. 디자인 관련 작업이 있으면 보고서에 "디자인팀 호출 필요"로 명시하고, satori/gemini/hybrid 스킬을 호출하지 마세요.

## 코딩 표준
코드 작성 시 u6   /teams/shared/CODING-STANDARDS.md를 참조하세요.
)ru   r   r   r   r   r   )r   r`   r   r   r   r   r   r   rq   r   r   r   r   s                r   r   r     s   " 5Z@"-J
gY Y # %+, -Y "n%R	)  ~j\<<|H:R88 
 A
   y ! ,--L
+,,c1	e2 ,
-3	.r   c                 $    |dvryd|  d|  d|  dS )uE   3문서 활용 지침 섹션 생성 (Lv.3+ 작업: critical/security))r   r   r   u   
## 3문서 활용 지침 (Lv.3+ 작업)
이 작업에 대한 3문서가 자동 생성되었습니다:
- 계획서: memory/plans/tasks/u,   /plan.md
- 맥락노트: memory/plans/tasks/u8   /context-notes.md
- 체크리스트: memory/plans/tasks/u  /checklist.md

### 팀장 의무:
1. 작업 시작 시 plan.md의 목표/범위 확인 후 팀원에게 공유
2. 주요 결정 시 context-notes.md에 결정 근거 기록
3. 각 단계 완료 시 checklist.md의 해당 항목 [x] 체크
4. 작업 완료 시 3문서 최종 업데이트 (status: draft → completed)

⚠️ 보고서 작성 전 3문서 업데이트를 잊지 마세요:
- plan.md: status → completed (또는 in-progress)
- context-notes.md: 결정 근거 기록
- checklist.md: 완료 항목 [x] 체크

### 3 Step Why 자문 (Lv.3+)
설계 완료 후, 아래 3단계 자문을 수행하세요:
1st Why: "왜 이 설계가 필요한가?" → A 답변
2nd Why: "왜 A가 최선의 접근인가?" → B 답변
3rd Why: "왜 B가 다른 대안보다 나은가?" → C 답변
★ A-B-C 답변이 논리적으로 일관되지 않으면 설계 재검토 필수
결과를 context-notes.md에 기록하세요.
r   )r   r   s     r   r   r     s;    ,,++2) 4..5Y 7118	 :;		<r   c           
          dddd}|j                  | d      }t        |      }dt         d|  d}| dk(  r|d	z  }n
| d
k(  r|dz  }|r|d| d| dz  }|dk\  r|dt         d| dt         d| d	z  }|dz  }|S )u1   QC 규칙 파일 참조 + 게이트 지시 삽입         )normalr   r   u4   

## 보고서 작성 전 셀프 QC + 자동 검증
uC   /teams/shared/QC-RULES.md를 읽고 따르세요.
- 검증 레벨: rH   r   u!   - 마아트 독립 검증 필수
r   u8   - 마아트 독립 검증 + 로키 보안 감사 필수
u   
## 게이트 지시 (Lv.rG   u/   
## Codex 사전 검증 (Lv.3+ 필수)
python3 z'/scripts/codex_gate_check.py --task-id z --task-file r   uC   .md
결과가 FAIL이면 설계 수정 후 재실행. PASS 필요.
u  
## ⚠️ Sanitize 게이트 (Lv.3+)
외부 AI(Codex/Gemini) 호출 전 반드시 sanitize 검사를 수행하세요:
- 대상: affected_files의 코드 + 설계 문서
- 마스킹 항목: 주민등록번호, 연락처, API 키, 계좌번호, 보험 증권번호
- 방법: `from utils.sanitize_gate import sanitize_text` 사용
- PII가 마스킹된 코드만 외부 AI에 전달할 것
)rN   _format_gate_instructionsr   )r   r   _level_to_int
gate_level	gate_textbases         r   r   r     s      !aQ?M""5!,J)*5I B
 !7"	& 	
 
45	*	KL,ZLI;bIIQ%&&MgYVcdrcs  tB  CJ  BK KOP	

 	K	
 Kr   composite_teamsc           	         | D ]  }|t         vst        d|        t        |       dk  rt        d      t         d| d}t	        |      j
                  j                  dd       t	        |      j                  |d	       | D ci c]  }|t        |       }}t        |       }	t        j                  |	t              }
t        | ||
||||      }|d
k(  rd|z   }|S |dk(  rd|z   }|S c c}w )u  복합업무 임시팀 프롬프트 생성 (독립 진입점).

    Defense in Depth: 내부에서 composite_teams 재검증.

    Args:
        composite_teams: 논리적 팀 ID 리스트 (예: ["marketing", "design"])
        task_id: 작업 ID
        task_desc: 작업 설명
        level: 검증 레벨
        project_id: 프로젝트 ID (Optional)

    Returns:
        복합업무 임시팀장에게 전달할 프롬프트 문자열
    u4   build_composite_prompt: 허용되지 않은 팀 ID: r  u1   build_composite_prompt: 2개 이상의 팀 필요r   rs   Tr   rd   re   r   r   r   r   )r   rU   r   r   r   r   r   r   rp   	frozensetr   rN   r   _assemble_composite_prompt)r
  r   r   r   rq   tr   r   team_agentsteam_sethandoff_fieldsr   s               r   build_composite_promptr    sH   ,  Y++STUSVWXXY ?aLMM ''~gYcBN%%dT%B##I#@ FUUT42488UKU )H,00;QRN (F 
 C  FL  L M 
*	z  ~D  DM/ Vs   	C,r  r  c           	      \   dj                  |       }dj                  d | D              }t         d| d}	d| d}
d| d	| d
}d}| D ]  }|j                  |i       }|d| dz  }|j                  d|j                  di             }t        |t              r~|j                         D ]j  \  }}|j                  d|      }|j                  dd      }|j                  dd      }|j                  dd      }|d| d| d| z  }|r|d| z  }|dz  }l t        |t              s|d| dz  } |dz  }d}dt         d| d|	 d}dj                  d  |D              }d!t         d| d"| d#}d$}d%|	 d&}d'}d(}d)t         d*| d+| d,}|
|z   |z   |z   |z   |z   |z   |z   |z   |z   |z   S )-u  복합업무 프롬프트 조립.

    9개 섹션 구조:
    1. 임시팀장 페르소나 (고정 템플릿)
    2. 작업 지시
    3. 팀별 에이전트 목록 + 스킬
    3b. 횡단조직 소환 가능 멤버
    4. Phase 관리 프로토콜
    5. 핸드오프 규격
    6. Quality Gate 규칙
    7. 보고서 규칙 (2레이어)
    8. 토큰 관리 지시
    9. 완료 마무리

    토큰 예산: 2팀 ~1,860 토큰 / 3팀 ~2,400 토큰 (4,000 상한 이내)
    r>   +c              3   @   K   | ]  }|j                  d d        yw)r   r   N)r   )rA   r  s     r   rD   z-_assemble_composite_prompt.<locals>.<genexpr>Z  s     JQ!))GR0Js   r   rs   r   u    복합업무 임시팀장입니다.
여러 논리적 팀의 역량을 Phase별로 조율하여 하나의 복합업무를 완수합니다.

u   ## 작업 지시
- 작업 ID: r   r   u   ## 팀별 에이전트
z
### rH   members_detailr   r   r   r   modelr5   mapped_skillr   z** (z	): model=z, skill=rE   u  ## 횡단조직 (소환 가능)

아래 멤버들은 팀 소속이 아니지만, QC/보안 등 특수 역할로 Task tool을 통해 소환할 수 있습니다.

- **마아트 (Ma'at)** — QC센터 팀장. 독립 품질 검증. 3자 평가 시 반드시 소환.
  model: claude-sonnet-4-6
  역할: 기획 QC, 디자인 QC, 카피 QC 등 제3자 품질 평가

- **로키 (Loki)** — 보안팀(레드팀) 팀장. Devil's Advocate. 모든 미팅/QC에 필수 참석.
  model: claude-opus-4-6
  역할: 기획/디자인의 약점 공격, 비판적 시각 제공, 디자인 퀄리티(DQ) 평가

### 소환 규칙
- 지시서에 "마아트 역할" / "로키 역할"이라고 되어 있으면, 자기 팀원이 역할극하지 말고 **위의 마아트/로키를 Task tool로 직접 소환**할 것
- 마아트/로키는 **만든 팀과 다른 3자**여야 의미가 있음 — 자기 팀원이 대체하면 3자 평가가 아님

u   ## Phase 관리 프로토콜

### Phase 0: 계획 수립 (FYI — 감사 추적용)
1. task.md를 분석하여 Phase 계획을 수립하세요.
2. Phase 계획을 `r   ue  -phase-plan.md`에 저장하세요.
3. 각 Phase에 어떤 팀이 어떤 순서로 작업하는지 명시하세요.
4. Phase 계획 파일에 shell 명령, 파일 삭제, 시스템 경로 변경 지시를 포함하지 마세요.
5. 계획 수립 후 즉시 Phase 1을 시작하세요 (한정승인).

### Phase N (1~M): 순차 실행
1. 해당 Phase 팀의 에이전트만 활성화 (Task tool 사용)
2. 산출물을 파일로 저장
3. Quality Gate 검증 (아래 규칙 참조)
4. 핸드오프 문서 작성 (아래 규격 참조)

### Phase Final: 통합 보고서
모든 Phase 완료 후 통합 보고서를 u   에 작성하세요.

c              3   (   K   | ]
  }d | d  yw)z- [u   ]: (해당 내용 기재)Nr   )rA   rm   s     r   rD   z-_assemble_composite_prompt.<locals>.<genexpr>  s     V!S#<=Vs   u7   ## Phase 간 핸드오프 규격
각 Phase 완료 시 `u   -handoff-{N}.md`를 작성하세요:

```markdown
## 핵심 요약 (200자 이내)
(다음 Phase 팀이 이 요약만 읽어도 작업 가능하도록 핵심만 기재)

## 산출물 파일
- (파일 경로): (설명)

## 필수 전달 사항
u?   

## 다음 Phase 요구사항
- (구체적 요구사항)
```

u8  ## Quality Gate 규칙
- 각 Phase 산출물에 대해 품질 검증을 수행하세요.
- 미충족 시 재작업 지시 (최대 2회)
- 2회 재작업 후에도 미충족 시:
  1. 이슈를 보고서에 기록
  2. 다음 Phase로 진행
  3. 이 상황은 반드시 보고서의 Executive Summary에 명시

u3   ## 보고서 규칙 (2레이어)
보고서 경로: uQ  

### 구조:
1. **Executive Summary** (최상단, 300자 이내)
   - 전체 결과: 성공/부분성공/실패
   - QG 실패 건수 및 Phase
   - 최종 산출물 파일 경로
   - 후속 조치 필요 여부

2. **Phase별 상세**
   - 각 Phase: S(상황), C(문제), Q(질문), A(답변)
   - Quality Gate 통과/실패 이력

u  ## 토큰 관리
- Phase 전환 시 이전 Phase 산출물 전문을 컨텍스트에 올리지 마세요.
- 핸드오프 파일의 '핵심 요약' 섹션만 참조하세요.
- 상세 내용이 필요하면 파일 경로를 기록하고 필요 시에만 Read하세요.

uP  ## 서브에이전트(Task tool) 결과 규칙
- 상세 결과는 파일로 저장하고, Task tool 반환값은 요약만 포함 (500자 이내)
- 요약 필수 포함: 성공/실패 여부, FAIL 항목 수/코드/사유 (있는 경우), 산출물 파일 경로
- "FAIL 존재 시 반드시 FAIL 코드와 사유를 요약에 포함"

uH   ## 완료 마무리
모든 Phase 완료 및 보고서 작성 후:
`bash z/scripts/finish-task.sh r   u    {project_path}`
- finish-task.sh가 QC → 머지 → .done → timer end → notify를 순차 수행
- QC FAIL 시: .failed 생성 + 수정 → finish-task.sh 재실행
- project_path가 없는 시스템 작업은 인자 생략 가능
)rO   r   rN   
isinstancedictrL   rQ   )r
  r  r  r   r   r   rq   	teams_strr   r   s1s2s3r`   infor   midminfor   r   r  skills3bs4
fields_strs5s6s7s8s8bs9s                                  r   r  r  @  s   2 		/*IJ/JJJ#$$4WISAK YK  t 	u  /wi7PQ_P``  
AB 
$B" #w+
wir""((+TXXi-DEgt$%mmo 
Uyy-yy,		'84		."5TF$tfIeW==HUG,,Bd
 %Bwir""B#  $JB
Q    ..nWI 
F7 8CmC[	] $ V~VVJ!!/ 0wi H$ , 	 "T (M 	*5
	6  l V   8	:, ON	O  7R<#"R'",r1B6<rAAr   )NN)r  NNr   r   )r   )r  N):__doc__ri   r   pathlibr   typingr   r   environrN   r   config.loaderr   _CfgMgrprompts.gate_instructionsr   r  get_instance_cfg_tpget_constantr   r   utils.composite_constantsr   r   r   rQ   r   rk   r   rK   r^   r_   r  __annotations__rp   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  listr  r   r   r   <module>r:     sE    	  ! 02GH 2 T
'


 
**..+
,
O0D0DY0O
**..+R
0 c  *m	 "m	 & C	 'y	 'm	 #m	 (p	 s	 %" ^	 %"f	 #" D	 0"y	 '& V	SO	fW1 j !F3%v>!8,!7;$Bg
w'
	C D  4 s t .
8C= 
S 
3 D13 13 1z !%"%
%% % 	%
 % % % % % sm% 	%b !%"!
!! ! 	!
 ! ! ! ! ! sm! 	!Z !%"!
!! ! 	!
 ! ! ! ! ! sm! 	!Z !%"%
%% % 	%
 % % % % % sm% 	%b !%"!
!! ! 	!
 ! ! ! ! ! sm! 	!L ( ( (

*3 
*x} 
* 
*"  $""MMM M 	M
 M smM M M 	Mr !%"1
11 1 	1
 1 1 1 1 1 sm1 	1z !%"B
BB B 	B
 B B B B B smB 	B\ !%"<
<< < 	<
 < < < < < sm< 	<~s 3 3 :#s #S ## #T  $9#Y99 9 	9
 9 	9x`B#Y`B`B `B 	`B
 `B `B `B 	`Br   