
    qi                         d 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  ed      Zej                  dd       edz  Z
d	Zd
ZdZdefdZdedefdZdedefdZd Zedk(  r e        yy)u:  
Genesis Context Tracker - PostToolUse Hook (Layer 2 of 4)
Reads context state from StatusLine state file and injects warnings.

Thresholds (Kinan Directive 2026-02-25):
  50% → CTM checkpoint (save to supermemory)
  65% → CTM + RESPAWN (wrap up + respawn)
  70% → HARD CTM + FORCED RESPAWN (immediate stop)
    N)Path)datetimetimezonez(/mnt/e/genesis-system/data/context_stateT)parentsexist_okzctm_triggers.jsonl2   A   F   returnc                      t         dz  } | j                         r,	 t        | d      5 }t        j                  |      cddd       S i S # 1 sw Y   i S xY w# t
        $ r Y i S w xY w)z2Read context state from statusline-generated file.zcurrent.jsonrN)	STATE_DIRexistsopenjsonload	Exception)
state_filefs     6/mnt/e/genesis-system/.claude/hooks/context_tracker.pyget_context_from_state_filer      so    ^+J	j#& $!yy|$ $ I	$ I  	I	s-   A A	A AA A 	A"!A"pctc                 n   t         j                         sy	 t        t         d      5 }|D ]e  }t        j                  |j                               }|j                  d      dk(  s;t        |j                  dd      | z
        dk  s] ddd       y	 	 ddd       y# 1 sw Y   yxY w# t        $ r Y yw xY w)
z:Check if CTM was already triggered at this threshold band.Fr   eventctm_trigger
percentager   
   NT)	CTM_LOGr   r   r   loadsstripgetabsr   )r   r   lineentrys       r   already_triggered_ctmr%   &   s    >>'3 	 1  

4::<0IIg&-7EIIlA6<=B	  	  	  	    sF   B( =B%!BBB( BB( B%!B( %B( (	B43B4sourcec                 <   	 t        j                  t        j                        j	                         dt        | d      |d}t        t        d      5 }|j                  t        j                  |      dz          ddd       y# 1 sw Y   yxY w# t        $ r Y yw xY w)zLog CTM trigger event.r      )	timestampr   r   r&   a
N)r   nowr   utc	isoformatroundr   r   writer   dumpsr   )r   r&   r   r   s       r   log_ctm_triggerr2   6   s    
!hll3==?"Q-	
 '3 	.1GGDJJu%,-	. 	. 	. s0   AB (B:B BB B 	BBc                  2   	 t        j                  t        j                  j	                               } t               }|j                  dd      }|j                  dd      }d }|t        k\  rd|dd|dd}n<|t        k\  rd	|dd|dd
}n'|t        k\  rt        |      st        |d       d|dd}i }|r||d<   t        t        j                  |             y # t         j
                  t        f$ r! t        t        j                  i              Y y w xY w)Nused_percentager   actual_freed   zCRITICAL CONTEXT WARNING: z.0fz% used, z% actual free. Context compaction is imminent. IMMEDIATELY: 1) Save all progress to supermemory, 2) Update MEMORY.md with war room status, 3) Run /compact with preservation instructions.zCONTEXT WARNING: zE% actual free. Begin wrapping up current task. Run CTM protocol soon.post_tool_usezCTM CHECKPOINT: Context at z%. Per Immortal Session Protocol: Save mission state, decisions, and blockers to supermemory genesis-kinan. Update MEMORY.md with critical context.additionalContext)r   r   sysstdinreadJSONDecodeErrorr   printr1   r   r!   CRITICAL_THRESHOLDWARNING_THRESHOLDCTM_THRESHOLDr%   r2   )
hook_inputstater   r5   additional_contextresults         r   mainrE   E   s5   ZZ		 01

 ()E
))%q
)C))M3/K
  (S	+c9J K> > 	 
!	!CyS0A BE E 	 
	$S)C1-c#Y 7: :  F&8"#	$**V
K   ), djjns   1C 7DD__main__)__doc__r9   r   ospathlibr   r   r   r   mkdirr   r@   r?   r>   dictr   floatboolr%   strr2   rE   __name__     r   <module>rR      s      	  ';<	 	t ,
*
*  	T 	u     (V zF rQ   