
    mVjw	                         d Z ddlZddlZddlZddlZddlmZ  ed      Zdee	e
f   fdZdee	e
f   ddfdZde
fd	Zed
k(  r ej                   e              yy)a  Iteration-Limit-Hook gegen Endlos-Validator-Loops.

Wird als pre-tool-use oder pre-validator Hook aufgerufen. Zaehlt pro
Session+Validator wie oft schon ausgeloest, blockt nach N Iterationen.

State in /root/aria/state/validator-iterations.json:
  {"<session-id>:<validator-name>": <count>}

Usage:
    iteration_limit.py --session-id $CLAUDE_SESSION_ID --validator markdown_frontmatter --max 3

Exit-Codes:
    0 = under limit, OK to proceed
    2 = limit exceeded (block)
    N)Pathz*/home/aria/state/validator-iterations.jsonreturnc                      t         j                         si S 	 t        j                  t         j	                  d            S # t
        t        j                  f$ r i cY S w xY w)Nutf-8encoding)
STATE_FILEis_filejsonloads	read_textOSErrorJSONDecodeError     6/home/aria/.claude/hooks/validators/iteration_limit.py
load_stater      sT    	zz*...@AAT))* 	s   (A AAstatec                     t         j                  j                  dd       t         j                  t	        j
                  | d      d       y )NT)parentsexist_ok   indentr   r   )r	   parentmkdir
write_textr   dumps)r   s    r   
save_stater   $   s9    D48$**U15Hr   c                     t        j                         } | j                  dt        j                  j                  dd             | j                  dd       | j                  dt        d	
       | j                  ddd       | j                         }|j                   d|j                   }t               }|j                  r?|j                  |d        t        |       t        t        j                   d|d             y|j                  |d      dz   }|||<   t        |       ||j"                  kD  rt$        j&                  j)                  t        j                   d|j                  ||j"                  d|j                   d| d|j"                   ddd             t$        j&                  j)                  d       yt        t        j                   d|j                  ||j"                  d             y)Nz--session-idCLAUDE_SESSION_IDunknown)defaultz--validatorT)requiredz--max   )typer#   z--reset
store_truez(Reset counter for this session+validator)actionhelp:reset)statuskeyr      blockzValidator 'z' lief u   x in Session — Limit z. ueberschritten. Eskaliere an Kais oder pause.)r,   	validator
iterationsmaxmessager   r   
ok)r,   r0   r1   r2   )argparseArgumentParseradd_argumentosenvirongetint
parse_args
session_idr0   r   r+   popr   printr   r   r2   sysstderrwrite)apargsr-   r   currents        r   mainrG   )   s   		 	 	"BOONBJJNN;NPY,ZO[OOMDO1OOG#qO1OOIlC  E==?D__Qt~~.
/CLEzz		#t5djjGC89:iiQ!#GE#Ju

!88$T^^$4GG9D[\`\d\d[e  fT  U%
  	 	

	$**4>>QXaeaiaij
klr   __main__)__doc__r6   r   r9   rA   pathlibr   r	   dictstrr<   r   r   rG   __name__exitr   r   r   <module>rO      s      	 
  >?
DcN Id38n I I
"c "J zCHHTV r   