
    j                        d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZ dZdZdZd	Zd
ZdZddZddZddZddZdddZddZedk(  r e e             y)u  hooks/user_prompt_submit_hook_callback_inbox.py — 이중 안전망 (STAGED · live 미적용).

task-2644 ANU_CALLBACK_COLLECTOR_CONTROL_PLANE (회장 verbatim 우선순위 7).
spec: memory/specs/system_anu_callback_collector_control_plane_spec_260524.md
spec sha256: b27da557d4245bce476cd63f4ab174aefc8a25d2da07ec2c8d2c83b01ee96153

★ 본 hook 은 staged template only · ~/.claude/settings.json 에 등록되지 않은 상태.
★ ANCHOR-7: "본 ANU 대화 세션 hook = 이중 안전망 · 주 경로 아님".
★ 주 경로 = cokacdir 가 spawn 하는 별도 collector 세션 (SessionStart hook).

목적:
    cokacdir 가 spawn 한 collector 세션이 동작하지 못한 경우 (envelope 누락 / spawn
    실패 / 시간 초과 등), 회장-facing ANU 본 세션에 회장이 user prompt 를 보내는
    시점에 inbox 의 .callback 파일을 감지하여 처리 의무를 prompt 에 주입한다.

Claude Code UserPromptSubmit hook 계약:
    - stdin: {"session_id":..., "prompt":..., "hook_event_name":"UserPromptSubmit"}
    - stdout: 단순 텍스트 출력 → additional context 로 prompt 앞에 주입됨
    - exit 0: continue · non-zero 2: block + stderr 로 회장에게 사유 표시
    )annotationsN)Path)AnyDictListOptionalz/hooks.user_prompt_submit_hook_callback_inbox.v1ANU_CALLBACK_INBOX_DIRzmemory/system/.callback_inboxANU_WORKSPACE_ROOTz/home/jay/workspaceiX  c                     	 t         j                  j                         ri S t         j                  j                         } | j	                         si S t        j                  |       S # t        $ r i cY S w xY wN)sysstdinisattyreadstripjsonloads	Exception)raws    /hooks/user_prompt_submit_hook_callback_inbox.py_read_stdinr   )   s\    99Iiinnyy{Izz# 	s   A' /A' A' 'A54A5c                     t         j                  j                  t              } | rt	        |       S t         j                  j                  t
        t              }t	        |      t        z  S r   )osenvirongetINBOX_DIR_ENVr   WORKSPACE_ROOT_ENVWORKSPACE_ROOT_DEFAULTINBOX_DIR_DEFAULT)explicitroots     r   _resolve_inboxr"   5   sG    zz~~m,HH~::>>,.DED:)))    c                   | j                         sg S g }t        j                         }t        | j                  d            D ]  }	 |j	                         j
                  }t        j                  |j                  d            }|j                  t        |      |j                  d      |j                  d      t        ||z
        ||z
  t        kD  d        |S # t        $ r$ |j                  t        |      d d d ddd       Y w xY w)	Nz
*.callbackzutf-8)encodingcallback_idtask_id)pathr&   r'   age_secondsstaleT)r(   r&   r'   r)   r*   parse_error)is_dirtimesortedglobstatst_mtimer   r   	read_textappendstrr   intSTALE_THRESHOLD_SECONDSr   )inboxitemsnowfmtimepayloads         r   _scan_inboxr=   =   s    <<>	"$E
))+CEJJ|,- 	FFH%%Ejjg!>?GLLF#*;;}#=&{{95#&sU{#3!Ek-DD	0 L  
	LLF#'##'!#'	
	s   BC*D
Dc                L   | syg }|j                  d       |j                  d       |j                  d       |j                  d       | D ]  }|j                  d      rdnd}|j                  d      xs d}|j                  d      xs d}|j                  d	      }|j                  d
| d| d| d|        |j                  d|j                  d       d        |j                  d       |j                  d       |j                  d       dj                  |      S )N uJ   # ⚠ ANU_CALLBACK_INBOX — 미처리 .callback 감지 (이중 안전망)u   주 경로 (cokacdir SessionStart hook spawned collector) 가 미동작 · 회장 본 세션에서 처리 요청. ★ 단, source attribution = `CALLBACK_LEDGER_RECONCILED` (post-hoc) 명시 필수. `RECEIVED_INBOUND_THIS_SESSION` 표현 금지.r*   u	    ⚠STALEr&   z	<missing>r'   r)   z- callback_id=`z` task=`z` age=sz  - path: `r(   `u,   ## 의무 7 단계 (Stop hook 검증 대상)u   envelope parse → context recovery → terminal_state classify → next_action decide → auto/chair/noop → ledger write → source attribution + exit
)r3   r   join)r8   linesitwarncbtkages          r   build_injectionrJ   ]   s   E	LL]^	LL	LL	9 
LL 6 ffWo{2VVM"1kVVI-+ff]#rd(2$fSE4&IJ{266&>"2!456 
LL	LL?@	LL	$
 99Ur#   c           	         | | n	t               }t               }t        |      }t        |      }t        t        |      t        |      t        d |D              ||d|r|nd ddS )Nc              3  D   K   | ]  }|j                  d       sd  yw)r*      N)r   ).0rE   s     r   	<genexpr>zrun.<locals>.<genexpr>   s     @w1@s     UserPromptSubmit)hookEventNameadditionalContext)schema
inbox_pathpending_countstale_countr8   	injectionhookSpecificOutput)r   r"   r=   rJ   SCHEMAr4   lensum)stdin_payload_r7   r8   rW   s        r   runr^   {   sj    &2AEE&I%jU@u@@/.7T
 r#   c                 0   	 t               } t        j
                  j	                  t        j                  | d             t        j
                  j                          y# t        $ r-}t        j                  j	                  d| d       Y d }~yd }~ww xY w)Nz0[user_prompt_submit_hook_callback_inbox] error: rB   r   F)ensure_ascii)	r^   r   r   stderrwritestdoutr   dumpsflush)resultexcs     r   mainrh      sr    
 JJTZZU;<JJ  

KC5PRSTs   
A 	B(#BB__main__)returnDict[str, Any])rj   r   )r7   r   rj   List[Dict[str, Any]])r8   rl   rj   r4   r   )r\   zOptional[Dict[str, Any]]rj   rk   )rj   r5   )__doc__
__future__r   r   r   r   r-   pathlibr   typingr   r   r   r   rY   r   r   r   r   r6   r   r"   r=   rJ   r^   rh   __name__
SystemExit r#   r   <module>rt      s   ( #  	 
   , , 
;(3 ) .  	*@<&	 z
TV
 r#   