Ë
    ªÞjL  ã                  óf   — d Z ddlmZ ddlZddlmZ dZ ed¬«       G d„ d	«      «       Zd
dœdd„Zy)u`  Der einzige Codex-Ergebnisparser (JSONL von `codex exec --json`).

Streng: turn.started und turn.completed sind Pflicht, turn.failed/error
fÃ¼hren zu MODEL_FAILED, jedes Item auÃŸer agent_message/reasoning zÃ¤hlt als
Tool-Ereignis (TOOL_EVENT_SEEN). GrÃ¶ÃŸen- und UTF-8-PrÃ¼fung vor dem Parsen.
Nur mit allow_tools=True (KÃ¤fig-Profil tools, E2b) sind Tool-Ereignisse
erlaubt; sie werden dann gezÃ¤hlt statt abgelehnt.

Hinweis: Die Tool-Erkennung ist eine nachtrÃ¤gliche PrÃ¼fung, KEINE
Verhinderung. Die Prozess-Isolation muss das Betriebssystem leisten
(runner.py + Wrapper-PrÃ¤fix in der Konfiguration).
é    )ÚannotationsN)Ú	dataclassi    T)Úfrozenc                  ól   — e Zd ZU ded<   dZded<   dZded<   dZd	ed
<   dZded<   dZded<   dZ	ded<   y)ÚProcessOutcomeÚboolÚsuccessÚ ÚstrÚoutputNz
str | NoneÚ
error_codez
int | NoneÚ	exit_codeFÚ	tool_seenr   ÚintÚtool_eventsÚlast_message)
Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   r   r   r   © ó    ú7/home/aria/aria-v3/python/aria_router/hardened_codex.pyr   r      sC   … àƒMØ€FˆCÓØ!€J�
Ó!Ø €IˆzÓ Ø€IˆtÓØ€K�ÓØ€L�#Ôr   r   F)Úallow_toolsc               ó‚  — t        | «      t        kD  rt        dd¬«      S 	 | j                  dd¬«      }g }d}d}d}d}|j                  «       D �]<  }|j                  «       sŒ	 t        j                  |«      }	t        |	t        «      rt        |	j                  d
«      t        «      st        dd¬«      c S |	d
   }
|
dk(  rd}|
dv rt        dd¬«      c S |
dk(  s
|
dk(  s|
dk(  r�|	j                  di «      }t        |t        «      st        dd¬«      c S |j                  d
«      }|dvrd}|
dk(  r|dz  }|
dk(  rF|dk(  rA|j                  d«      }t        |t        «      st        dd¬«      c S |j                  |«       |
dk(  s�Œ;d}�Œ? |r|st        ddd¬«      S |r|st        dd¬«      S |rdj!                  |«      j                  «       st        dd¬«      S t        ddj!                  |«      |||d   ¬«      S # t        $ r t        dd¬«      cY S w xY w# t        t        f$ r t        dd	¬«      cY c S w xY w) NFÚOUTPUT_LIMIT)r   zutf-8Ústrict)ÚerrorsÚINVALID_UTF8r   ÚINVALID_JSONLÚtypeÚINVALID_EVENTzturn.startedT>   úturn.failedÚerrorÚMODEL_FAILEDzitem.startedzitem.updatedzitem.completedÚitem>   Ú	reasoningÚagent_messageé   r(   Útextzturn.completedÚTOOL_EVENT_SEEN)r   r   ÚINCOMPLETE_TURNú
ÚEMPTY_RESPONSEéÿÿÿÿ)r   r   r   r   )ÚlenÚMAX_OUTPUT_BYTESr   ÚdecodeÚUnicodeDecodeErrorÚ
splitlinesÚstripÚjsonÚloadsÚ
ValueErrorÚ	TypeErrorÚ
isinstanceÚdictÚgetr   ÚappendÚjoin)Úrawr   r*   ÚmessagesÚ	completedr   r   ÚstartedÚlineÚeventÚkindr&   Ú	item_typeÚmessages                 r   Údecode_eventsrH       sR  € Ü
ˆ3ƒxÔ"Ò"Ü˜e°Ô?Ð?ð@Ø�z‰z˜'¨(ˆzÓ3ˆð €HØ€IØ€IØ€KØ€GØ—‘Ó!ó ˆØ�z‰zŒ|Øð	EÜ—J‘J˜tÓ$ˆEô ˜%¤Ô&¬j¸¿¹À6Ó9JÌCÔ.PÜ! %°OÔDÒDØ�V‰}ˆØ�>Ò!ØˆGØÐ+Ñ+Ü! %°NÔCÒCØ�>Ò! T¨^Ò%;¸tÐGWÒ?WØ—9‘9˜V RÓ(ˆDÜ˜d¤DÔ)Ü% e¸ÔHÒHØŸ™ Ó(ˆIØÐ >Ñ>Ø �	ØÐ+Ò+Ø 1Ñ$�KØÐ'Ò'¨I¸Ò,HØŸ(™( 6Ó*�Ü! '¬3Ô/Ü)¨%¸OÔLÒLØ—‘ Ô(ØÐ#Ô#ØŠIð;ñ< ™Ü˜eÐ0AÈTÔRÐRÙ™)Ü˜eÐ0AÔBÐBÙ˜4Ÿ9™9 XÓ.×4Ñ4Ô6Ü˜eÐ0@ÔAÐAÜ˜$ t§y¡y°Ó':ÀiÐ]hØ'/°¡|ô5ð 5øôW ò @Ü˜e°Ô?Ò?ð@ûô œIÐ&ò 	EÜ! %°OÔDÔDð	Eús#   ¡H Á$HÈHÈHÈH>È=H>)r?   Úbytesr   r   Úreturnr   )	Ú__doc__Ú
__future__r   r6   Údataclassesr   r1   r   rH   r   r   r   ú<module>rN      sC   ðñõ #ã Ý !à"Ð ñ �$Ô÷ð ó ðð 6;ö 15r   