+
    Wj  c                      ^ RI t^ RIHu Ht ^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt  ! R R]P,                  4      t ! R R]P,                  4      t]R	8X  d   ]P4                  ! 4        R# R# )
    N)
HTTPServer)patch)attention_hookc                   2   a  ] tR t^t o R tR tR tRtV tR# )AttentionHookTestsc           	        \         P                  ! R RRRRRR/4      pV P                  VR,          R 4       V P                  VR,          R4       V P                  VR,          R4       V P                  VR,          R4       R	# )
Codexhook_event_namePermissionRequest
session_idzsession-123cwd)/Users/jameslopez/projects/CodexBar-ESP32providereventNr   build_attention_payloadassertEqualselfpayloads   & F/Users/jameslopez/projects/CodexBar-ESP32/tests/test_attention_hook.py,test_build_payload_uses_standard_hook_fields?AttentionHookTests.test_build_payload_uses_standard_hook_fields   s     88!#6mB
 	,g6)+>?.>)TU    c                >   \         P                  ! R RRRRRRRR/4      pV P                  VR	,          R 4       V P                  VR
,          R4       V P                  VR,          R4       V P                  VR,          R4       V P                  VR,          R4       R# )ClaudehookEventNameSessionStart	sessionIdzsession-abcr   z/tmp/projectlastAssistantMessagezDone.r   r   r   last_assistant_messageNr   r   s   & r   0test_build_payload_supports_camel_case_fallbacksCAttentionHookTests.test_build_payload_supports_camel_case_fallbacks   s     88]~&	
 	,h7)>:.>8!9:GDr   c                   \         P                  ! \        R RR7      ;_uu_ 4        \        P                  ! RRR/4      pRRR4       V P                  XR,          R4       V P                  VR,          R4       R#   + '       g   i     LD; i)getcwdz/tmp/fallback)return_valuer   r   StopNr   )r   objectosr   r   r   r   s   & r   0test_build_payload_uses_process_cwd_when_missingCAttentionHookTests.test_build_payload_uses_process_cwd_when_missing0   sh    \\"h_EE$<<WwPVFWXG F 	)629	 FEs   A<<B	 N)	__name__
__module____qualname____firstlineno__r   r!   r)   __static_attributes____classdictcell____classdict__s   @r   r   r      s     VE": :r   r   c                   2   a  ] tR t^8t o R tR tR tRtV tR# )AttentionHookIntegrationTestsc                   R \         n        \         P                  ;_uu_ 4        \         P                  P	                  4        ^ \         n        RRR4       \         P                  ! 4        \        R\         P                  4      V n	        V P                  P                  ^,          V n        \        P                  ! V P                  P                  RR7      V n        V P                  P!                  4        R#   + '       g   i     L; i) NT)targetdaemon)z	127.0.0.1r   )server
NTFY_TOPIC_attention_lock_attention_recordsclear_attention_seq_invalidate_usage_cacher   Handlerhttpdserver_addressport	threadingThreadserve_foreverthreadstartr   s   &r   setUp#AttentionHookIntegrationTests.setUp9   s    ###%%++-$%F! $ 	&&( 0&..A
JJ--a0	&&djj.F.FtT $#s   *C99D		c                    V P                   P                  4        V P                   P                  4        V P                  P	                  ^R7       R# )   timeoutN)rB   shutdownserver_closerH   joinrJ   s   &r   tearDown&AttentionHookIntegrationTests.tearDownD   s7    



!#r   c           	        \         P                  ! R RRRRR/4      p\        P                  P	                  4       pRV P
                   R2VR&   \        P                  ! \        P                  R	R
.VRR^VR7      pV P                  VP                  ^ 4       \        P                  P                  RV P
                   R2^R7      ;_uu_ 4       p\         P                  ! VP!                  4       4      pRRR4       XR,          ^,          R,          pV P                  VR,          R4       V P                  VR,          R4       R#   + '       g   i     L[; i)r	   r
   r   zsubprocess-sessionr   r   zhttp://127.0.0.1:z
/attentionCODEXBAR_ATTENTION_URLzcompanion/attention_hook.pyr   T)inputtextcapture_outputrP   envz/statusrO   N	providers	attentionstate
needs_userprimary_projectzCodexBar-ESP32)jsondumpsr(   environcopyrD   
subprocessrunsys
executabler   
returncodeurllibrequesturlopenloadsread)r   
hook_inputr[   resultrespbodycodexs   &      r   ,test_hook_script_posts_to_companion_endpointJAttentionHookIntegrationTests.test_hook_script_posts_to_companion_endpointI   s$   ZZ2.>!
 

 jjoo*;DII;j(Q$%^^:GD
 	**A.^^##&7		{'$JTU#VVZ^::diik*D W[!!$[1w6013CD	 WVs   %EE	)rB   rD   rH   N)	r,   r-   r.   r/   rK   rT   rt   r0   r1   r2   s   @r   r5   r5   8   s     	$
E Er   r5   __main__)builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr(   ra   re   rg   rE   unittesturllib.requestrj   http.serverr   unittest.mockr   	companionr   companion.serverr:   TestCaser   r5   r,   mainr+   r   r   <module>r      sj      	   
    "  $ !&:** &:R(EH$5$5 (EV zMMO r   