Ë
    Ü$Ýj™  ã                   óî   — 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 d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZ d	„ Z G d
„ dej2                  «      Zedk(  r ej8                  «        yy)é    N)ÚPath)Údecode_eventsÚMAX_OUTPUT_BYTES)ÚResultStatus)ÚCodexAdapter)ÚConfigurationErrorÚparse_gateway_config)Ú
MockRunnerÚRunSpec)ÚGuardedSubprocessRunnerÚAdapterHarnessÚconfig_dictÚfake_codex_templatec                  óT   — dj                  d„ | D «       «      dz   j                  «       S )Nú
c              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­w)N)ÚjsonÚdumps)Ú.0Úxs     ú:/home/aria/aria-v3-dev/python/tests/test_hardened_codex.pyú	<genexpr>zevents.<locals>.<genexpr>   s   è ø€ Ò3¨”d—j‘j —mÑ3ùs   ‚!)ÚjoinÚencode)Úitemss    r   Úeventsr      s%   € Ø�I‰IÑ3¨UÔ3Ó3°dÑ:×BÑBÓDÐDó    c                   óZ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚHardenedCodexTestsc           	      ó²   — t        t        ddiddddœdœddi«      «      }| j                  |j                  «       | j	                  |j
                  d«       y )	NÚtypeúturn.startedúitem.completedÚagent_messageÚOK©r!   Útext©r!   Úitemúturn.completed)r   r   Ú
assertTrueÚsuccessÚassertEqualÚoutput©ÚselfÚrs     r   Útest_successzHardenedCodexTests.test_success   sd   € Üœ& &¨Ð!8ÐBRÐbqÐy}ÑZ~Ñ:ð  CIð  JZð  B[ó  \ó  ]ˆØ�‰˜Ÿ	™	Ô"Ø×Ñ˜Ÿ™ 4Õ(r   c           	      ó|   — t        t        ddiddddœdœddi«      «      }| j                  |j                  d	«       y )
Nr!   r"   úitem.startedÚcommand_executionÚid©r!   Úcommandr(   r*   ÚTOOL_EVENT_SEEN©r   r   r-   Ú
error_coder/   s     r   Útest_tool_event_rejectedz+HardenedCodexTests.test_tool_event_rejected   s_   € Üœ& &¨Ð!8À.Ð`sð  Cñ  YDñ  ;Eð  HNð  O_ð  G`ó  aó  bˆØ×Ñ˜Ÿ™Ð'8Õ9r   c                 óà   — t        t        ddiddddœdœddddœdœdd	d
dœdœddi«      d¬«      }| j                  |j                  |j                  |j
                  |j                  fd«       y )Nr!   r"   r4   r5   r6   r7   r(   r#   r$   r%   r&   r*   T©Úallow_tools)Tr%   Té   )r   r   r-   r,   r.   Ú	tool_seenÚtool_eventsr/   s     r   Ú5test_tool_events_allowed_and_counted_with_allow_toolszHHardenedCodexTests.test_tool_events_allowed_and_counted_with_allow_tools   sƒ   € Üœ& &¨Ð!8Ø)7ÐGZÐeiÑ?jÑ!kØ)9ÐI\ÐgkÑAlÑ!mØ)9ÈÐ`dÑAeÑ!fØ"(Ð)9Ð!:ó	<ð JNô	Oˆð
 	×Ñ˜!Ÿ)™) Q§X¡X¨q¯{©{¸A¿M¹MÐJÐLaÕbr   c           	      óü   — t        t        ddiddddœdœddi«      d	¬
«      }| j                  |j                  d«       t        t        ddiddddœdœddi«      d	¬
«      }| j                  |j                  d«       y )Nr!   r"   r#   r5   r6   r7   r(   úturn.failedTr>   ÚMODEL_FAILEDr*   ÚEMPTY_RESPONSEr:   r/   s     r   Ú$test_allow_tools_keeps_failure_rulesz7HardenedCodexTests.test_allow_tools_keeps_failure_rules$   s–   € Üœ& &¨Ð!8Ø)9ÐI\ÐgkÑAlÑ!mØ"(¨Ð!7ó9àFJôLˆð 	×Ñ˜Ÿ™ ~Ô6Üœ& &¨Ð!8Ø)9ÐI\ÐgkÑAlÑ!mØ"(Ð)9Ð!:ó<àIMôOˆð 	×Ñ˜Ÿ™Ð'7Õ8r   c                 ót   — t        t        ddiddiddi«      «      }| j                  |j                  d«       y )Nr!   r"   rE   r*   rF   r:   r/   s     r   Útest_failed_even_if_completedz0HardenedCodexTests.test_failed_even_if_completed.   s:   € Üœ& &¨Ð!8¸6À-Ð:PÐSYÐZjÐRkÓlÓmˆØ×Ñ˜Ÿ™ ~Õ6r   c                 ód   — | j                  t        t        ddi«      «      j                  d«       y )Nr!   r*   ÚINCOMPLETE_TURN)r-   r   r   r;   ©r0   s    r   Útest_no_turn_startedz'HardenedCodexTests.test_no_turn_started2   s)   € Ø×Ñœ¤v¨vÐ6FÐ.GÓ'HÓI×TÑTÐVgÕhr   c                 ób   — | j                  t        dt        dz   z  «      j                  d«       y )Nó    r@   ÚOUTPUT_LIMIT)r-   r   r   r;   rM   s    r   Útest_output_limitz$HardenedCodexTests.test_output_limit5   s)   € Ø×Ñœ tÔ/?À!Ñ/CÑ'DÓE×PÑPÐR`Õar   c                 óN   — | j                  t        d«      j                  d«       y )Nó   ÿÚINVALID_UTF8©r-   r   r;   rM   s    r   Útest_bad_utf8z HardenedCodexTests.test_bad_utf88   s   € Ø×Ñœ wÓ/×:Ñ:¸NÕKr   c                 óN   — | j                  t        d«      j                  d«       y )Ns   []
ÚINVALID_EVENTrV   rM   s    r   Útest_invalid_eventz%HardenedCodexTests.test_invalid_event;   s   € Ø×Ñœ wÓ/×:Ñ:¸OÕLr   c                 ót  — t        j                  «       5 }t        t        t	        d«      «      dddid«      }t        t        |«      «      j                  |«      }| j                  |j                  «       | j                  t        |j                  «      j                  d«       d d d «       y # 1 sw Y   y xY w)Nr,   ó   testÚPATHú/usr/bin:/biné   ÚMOCK_OK)ÚtempfileÚTemporaryDirectoryr   Útupler   r   r   Úrunr+   Úokr-   r   Ústdoutr.   ©r0   ÚdÚspecr1   s       r   Útest_runner_mockz#HardenedCodexTests.test_runner_mock@   s“   € Ü×(Ñ(Ó*ð 	H¨aÜœ5Ô!4°YÓ!?Ó@À'ÈFÐTcÐKdÐfgÓhˆDÜ'¬¨Q«Ó0×4Ñ4°TÓ:ˆAØ�O‰O˜AŸD™DÔ!Ø×Ñœ]¨1¯8©8Ó4×;Ñ;¸YÔG÷		H÷ 	Hñ 	Hús   •BB.Â.B7c           	      ó  — t        j                  «       5 }t        t        t	        dd«      «      dddid«      }t        t        |«      «      j                  |«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)NÚsleepÚ10r\   r]   r^   r@   ÚTIMEOUT)
ra   rb   r   rc   r   r   r   rd   r-   r;   rg   s       r   Útest_runner_timeoutz&HardenedCodexTests.test_runner_timeoutG   sw   € Ü×(Ñ(Ó*ð 	6¨aÜœ5Ô!4°W¸dÓ!CÓDÀgÐPVÐXgÐOhÐjkÓlˆDÜ'¬¨Q«Ó0×4Ñ4°TÓ:ˆAØ×Ñ˜QŸ\™\¨9Ô5÷	6÷ 	6ñ 	6ús   •A#BÂB
c           
      óî   — t        j                  «       5 }| j                  t        «      5  t	        t        t        |«      dddii«      «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NÚcodexÚtimeout_secondsr   )ra   rb   ÚassertRaisesr   r	   r   r   )r0   rh   s     r   Útest_invalid_timeoutz'HardenedCodexTests.test_invalid_timeoutM   sv   € Ü×(Ñ(Ó*ð 	^¨aØ×"Ñ"Ô#5Ó6ñ ^Ü$¤[´°a³¸7ÐEVÐXYÐDZÐ:[Ó%\Ô]÷^÷	^ð 	^÷^ð ^ú÷	^ð 	^ús"   •A+«#AÁA+ÁA(	Á$A+Á+A4c                 óÆ  — t        j                  «       5 }t        t        |«      «      }t	        «       }t        |j                  |t        «       ¬«      }|j                  ddz  «      }|j                  d |«      }| j                  |j                  |j                  ft        j                  df«       | j                  |j                  g «       d d d «       y # 1 sw Y   y xY w)N)ÚrunnerÚcommand_templater   ià" ÚPROMPT_LIMIT)ra   rb   r   r   r
   r   Úverifierr   ÚjobÚexecuter-   Ústatusr;   r   ÚBLOCKEDÚcalls)r0   rh   Úharnessrv   Úadapterrz   r1   s          r   Útest_prompt_limitz$HardenedCodexTests.test_prompt_limitR   s°   € Ü×(Ñ(Ó*ð 	/¨aÜ$¤T¨!£WÓ-ˆGÜ“\ˆFÜ" 7×#3Ñ#3¸FÔUhÓUjÔkˆGØ—+‘+˜c F™lÓ+ˆCØ—‘  cÓ*ˆAØ×Ñ˜aŸh™h¨¯©Ð5¼×8LÑ8LÈnÐ7]Ô^Ø×Ñ˜VŸ\™\¨2Ô.÷	/÷ 	/ñ 	/ús   •B9CÃC N)Ú__name__Ú
__module__Ú__qualname__r2   r<   rC   rH   rJ   rN   rR   rW   rZ   rj   ro   rt   r�   © r   r   r   r      sJ   „ ò)ò
:òcò9ò7òiòbòLòMò
Hò6ò^ó
/r   r   Ú__main__)r   Úsysra   ÚunittestÚpathlibr   Úaria_router.hardened_codexr   r   Úaria_router.adapter_contractr   Úaria_router.codex_adapterr   Úaria_router.configr   r	   Úaria_router.runnerr
   r   Útests.helpersr   r   r   r   r   ÚTestCaser   r‚   Úmainr…   r   r   ú<module>r’      s^   ðÛ Û 
Û Û Ý ß FÝ 5Ý 2ß Gß 2ß cÓ còEôH/˜×*Ñ*ô H/ðT ˆzÒØ€H‡M�M…Oð r   