+
    „WÝj!  ã                  óL  a € 0 t $ R t^ RIHt ^ RIt^ RIHt ^ RIHtH	t	 ^ RI
HtHtHtHt ]P                  ! ]4      tRtRtRtR	tR
tRt]]]]0tR]R&   ] ! R R4      4       tR R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R lt" ! R  R!]#4      t$R" R# lt%R# )$zèHermes middleware contract helpers.

Observer hooks report what happened. Middleware can change what happens by rewriting a request or
wrapping the actual execution callback. Agent-loop call sites and plugins share this vocabulary.
)ÚannotationsN)Údeepcopy)Ú	dataclassÚfield)ÚAnyÚCallableÚDictÚListzhermes.observer.v1zhermes.middleware.v1Útool_requestÚtool_executionÚllm_requestÚllm_executionzset[str]ÚVALID_MIDDLEWAREc                  óZ   € ] tR t^t$ RtR]R&   R]R&   RtR]R&   ]! ]R7      t	R	]R
&   Rt
R# )ÚRequestMiddlewareResultz;Result of applying request middleware to a mutable payload.r   ÚpayloadÚoriginal_payloadFÚboolÚchanged)Údefault_factoryúlist[dict[str, Any]]Útrace© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   Úlistr   Ú__static_attributes__r   ó    ÚIC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\middleware.pyr   r      s*   ‡ áEàƒLØÓØ€GˆTÓÙ"'¸Ô"=€EÐ×=r!   r   c               ó    € V ^8„  d   QhRRRR/# ©é   Úkwargsr   Úreturnúdict[str, Any]r   )Úformats   "r"   Ú__annotate__r*   '   s   € ÷ ñ ˜sð  ~ñ r!   c                 ó2   € V P                  R \        4       V # )Útelemetry_schema_version)Ú
setdefaultÚOBSERVER_SCHEMA_VERSION©r&   s   ,r"   Úobserver_payloadr0   '   s   € Ø
×ÑÐ0Ô2IÔJØ€Mr!   c               ó    € V ^8„  d   QhRRRR/# r$   r   )r)   s   "r"   r*   r*   ,   s   € ÷ ñ  ð ¨ñ r!   c                 ó^   € V P                  R \        4       V P                  R\        4       V # )r,   Úmiddleware_schema_version)r-   r.   ÚMIDDLEWARE_SCHEMA_VERSIONr/   s   ,r"   Úmiddleware_payloadr5   ,   s+   € Ø
×ÑÐ0Ô2IÔJØ
×ÑÐ1Ô3LÔMØ€Mr!   c               ó    € V ^8„  d   QhRRRR/# )r%   r   r   r'   r   )r)   s   "r"   r*   r*   2   s   € ÷ 
Gñ 
G˜ð 
G ñ 
Gr!   c                ó¼   €  \        V 4      #   \         dD   p\        P                  RT4       \	        T \
        4      '       d   \        T 4      MT u Rp?# Rp?ii ; i)zÑDeep-copy a request payload, tolerating non-deepcopyable members.

An LLM request can carry clients/callbacks/file handles; a hard ``deepcopy`` failure would
otherwise abort the whole request-middleware pass.
z<deepcopy failed for request payload (%s); using shallow copyN)r   Ú	ExceptionÚloggerÚdebugÚ
isinstanceÚdict)r   Úexcs   & r"   Ú
_safe_copyr>   2   sM   € ðGÜ˜Ó Ð øÜô GÜ�‰ÐSÐUXÔYÜ *¨7´D× 9Ò 9Œt�GŒ}¸wÕFûðGús   ‚
 �A˜8AÁAÁAc               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r%   ÚkindÚstrÚpayload_keyr   r   Úoriginalr   r&   r'   r   r   )r)   s   "r"   r*   r*   ?   s<   € ÷ ñ Ø
ðØðØ(<ðØHKðØWZðàñr!   c           	     óæ  € ^ RI Hp WA,          pV! V 3RV/\        R/ VB B  F°  p\        V\        4      '       g   K  VP                  V4      p\        V\        4      '       g   KD  \        V4      pR U	u/ uF8  p	\        VP                  V	4      ;p
\        4      '       g   K,  V
'       g   K6  WšbK:  	  pp	TP                  T;'       g    RR/4       K²  	  \        Wc\        V4      VR7      # u up	i )ziFeed ``kwargs[payload_key]`` through every ``kind`` middleware; each may return ``{payload_key: {...}}``.)Úinvoke_middlewareÚ_payload_keyÚsourceÚplugin©r   r   r   r   r   )rG   ÚreasonÚname)Úhermes_cli.pluginsrE   r5   r;   r<   Úgetr>   rA   Úappendr   r   )r@   rB   r   rC   r&   rE   ÚcurrentÚresultÚnext_payloadÚkeyÚvalueÚentrys   &&&&,       r"   Ú_apply_request_chainrU   ?   sê   € õ 5àÕ!€GÙ# DÑc°{ÐcÔFXÑFbÐ[aÑFbÔcˆÜ˜&¤$×'Ò'ÙØ—z‘z +Ó.ˆÜ˜,¬×-Ò-ÙÜ˜\Ó*ˆñ 4ó
á3�Ü 6§:¡:¨c£?Ð2˜%´C×8ô ä=Bô ˆCŠJÙ3ð 	ð 
ð
 	�‰�U×2Ð2˜x¨Ð2Ö3ñ dô #Ø¼DÀ»KÈuôð ùò
s   Á6)C.Â$C.Â.C.c               ó$   € V ^8„  d   QhRRRRRR/# )r%   Úrequestr(   Úcontextr   r'   r   r   )r)   s   "r"   r*   r*   X   s"   € ÷ ñ ¨.ð ÀSð ÐMdñ r!   c                ó    € ^ RI Hp V! \        4      '       g   \        W R7      # \	        V 4      p\        \        R. V3R\	        V4      RV/VB # )z]Apply registered LLM request middleware; ``{"request": {...}}`` replaces the provider kwargs.©Úhas_middleware)r   r   rW   Úoriginal_request)rL   r[   ÚLLM_REQUEST_MIDDLEWAREr   r>   rU   )rW   rX   r[   r\   s   &,  r"   Úapply_llm_request_middlewarer^   X   s\   € å1áÔ0×1Ò1Ü&¨wÔQÐQä! 'Ó*ÐÜÜ 	¨2Ð/?ñäÐ+Ó,ðà?OðàSZñð r!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   Ú	tool_namerA   Úargsr(   rX   r   r'   r   r   )r)   s   "r"   r*   r*   f   s,   € ÷ ñ ØðØ(ðØ58ðàñr!   c           	     óî  € \        V4      p\        V4      p. p\        VP                  R4      ;'       g    R4      p\        VP	                  RR4      4      pV'       dF   V'       g>   ^ RIHp VP                  W`VR7      p	W”8w  d   \        V	4      pVP                  RR/4       ^ R	I	H
p
 V
! \        4      '       g#   \        V'       g   TMTV\        V4      VR
7      # \        \        RWS3RV RVRV/VB # )z Apply registered tool request middleware; ``{"args": {...}}`` replaces the effective tool
arguments before hooks, guardrails, approvals, and execution see them.Ú
session_idÚ Ú
skip_relayF)Úrelay_runtime)rc   r`   ra   rG   Ú
nemo_relayrZ   rI   ra   r`   Úoriginal_args)r>   rA   rM   r   ÚpopÚagentrf   Úapply_tool_request_interceptsrN   rL   r[   ÚTOOL_REQUEST_MIDDLEWAREr   rU   )r`   ra   rX   rh   Úcurrent_argsr   rc   re   rf   Ú
relay_argsr[   s   &&,        r"   Úapply_tool_request_middlewarero   f   sö   € ô
 ˜tÓ$€MÜ˜mÓ,€LØ"$€Eä�W—[‘[ Ó.×4Ð4°"Ó5€JÜ�g—k‘k ,°Ó6Ó7€JßŸ*Ý'à"×@Ñ@Ø!¸\ð Aó Kˆ
àÔ%Ü% jÓ1ˆLØ�L‰L˜( LÐ1Ô2å1áÔ1×2Ò2Ü&ß %‘D¨<È$Ü˜“K uô
ð 	
ô  Ü ¨ñàðà".ðà>KðàOVñð r!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   rW   r(   Ú	next_callúCallable[[dict[str, Any]], Any]rX   r   r'   r   )r)   s   "r"   r*   r*   ‡   s2   € ÷ _ñ _Øð_Ø(Gð_ØTWð_Ø\_ñ_r!   c           
     óL   € \        \        V3RV RVP                  RV 4      /VB # )zCRun provider execution through registered LLM execution middleware.rW   r\   )Ú_run_execution_chainÚLLM_EXECUTION_MIDDLEWAREri   )rW   rq   rX   s   &&,r"   Úrun_llm_execution_middlewarerv   ‡   s?   € ô  Ü  )ñ_àð_à*1¯+©+Ð6HÈ'Ó*Rð_àV]ñ_ð _r!   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r%   r`   rA   ra   r(   rq   rr   rX   r   r'   r   )r)   s   "r"   r*   r*   �   s;   € ÷ eñ eØðeØ(ðeØ5TðeØadðeàñer!   c                óP   € \        \        V3RV RVRVP                  RV4      /VB # )z@Run tool execution through registered tool execution middleware.r`   ra   rh   )rt   ÚTOOL_EXECUTION_MIDDLEWAREri   )r`   ra   rq   rX   s   &&&,r"   Úrun_tool_execution_middlewarerz   �   sH   € ô  Ü! 9ñeàðeà"&ðeà6=·k±kÀ/ÐSWÓ6Xðeà\cñeð er!   c                  ó2   a € ] tR t^˜tRtR V 3R lltRtV ;t# )Ú_DownstreamExecutionErrorz~Marks an exception raised BELOW a middleware frame so the frame's own failure handling
(skip-and-continue) doesn't swallow it.c               ó    € V ^8„  d   QhRRRR/# )r%   rC   ÚBaseExceptionr'   ÚNoner   )r)   s   "r"   r*   Ú&_DownstreamExecutionError.__annotate__œ   s   € ÷ !ñ ! ð !°4ñ !r!   c                	óD   <€ \         SV `  \        V4      4       Wn        R # ©N)ÚsuperÚ__init__rA   rC   )ÚselfrC   Ú	__class__s   &&€r"   r„   Ú"_DownstreamExecutionError.__init__œ   s   ø€ Ü‰Ñœ˜X›Ô'Ø Žr!   )rC   )r   r   r   r   r   r„   r    Ú__classcell__)r†   s   @r"   r|   r|   ˜   s   ø† ñ/÷!ö !r!   r|   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   r@   rA   Úterminal_callzCallable[[Any], Any]r&   r   r'   r   )r)   s   "r"   r*   r*   ¡   s+   € ÷ 5+ñ 5+˜sð 5+Ð3Gð 5+ÐSVð 5+Ð[^ñ 5+r!   c                óö   a aaaaaa€ ^ RI Hp RS9   d   RMRoV! 4       o\        SP                  P	                  S . 4      4      oS'       g   S! SS,          4      # R VVV VVVV3R lloS! ^ SS,          4      # )é    )Ú_delivery_managerrW   ra   c               ó$   € V ^8„  d   QhRRRRRR/# )r%   ÚindexÚintr   r   r'   r   )r)   s   "r"   r*   Ú*_run_execution_chain.<locals>.__annotate__ª   s!   € ÷ */ñ */�sð */ Sð */¨Sñ */r!   c           
     óš  <a aaaaa€ S \        S
4      8¼  d	   S! S4      # S
S ,          oR oR oRoRR V	VV VVVVV3R lllp\        R/ SB pSVS&   W#R&    S! R/ VB #   \         d   pTP                  hRp?i\         dH   pSP                  SSY4RR7       S'       d   Su Rp?# S'       d   h S	! S ^,           S4      u Rp?# Rp?ii ; i)	FNc               ó    € V ^8„  d   QhRRRR/# )r%   rQ   r   r'   r   )r)   s   "r"   r*   Ú;_run_execution_chain.<locals>.call_at.<locals>.__annotate__³   s   € ÷ 	>ñ 	> Cð 	>°3ñ 	>r!   c                óØ   <€ S'       d'   \        R S R\        SR\        S4      4       R24      hRo S! S^,           V f   S	MT 4      oRoS#   \         d   p\	        T4      ThRp?ii ; i)zMiddleware 'z' callback r   zF called next_call() more than once; downstream execution is single-useTN)ÚRuntimeErrorÚgetattrÚreprr8   r|   )
rQ   r=   Úcall_atÚcallbackr�   r@   Únext_calledÚnext_resultÚnext_succeededr   s
   & €€€€€€€€r"   rq   Ú8_run_execution_chain.<locals>.call_at.<locals>.next_call³   sŠ   ø€ ÷ Ü"Ø" 4 &¨Ü˜x¨´T¸(³^ÓDÐEð FUðUóð ð
 ˆKð>Ù% e¨a¥i¸LÒ<P±ÐVbÓc�Ø!%�Ø"Ð"øÜô >Ü/°Ó4¸#Ð=ûð>ús   ³A ÁA)ÁA$Á$A)rq   Ú
Middleware)Úsurfacer‚   r   )Úlenr5   r|   rC   r8   Ú_report_hook_failure)r�   r   rq   Úcall_kwargsr=   rš   r›   rœ   r�   r™   Ú	callbacksr@   r&   ÚmanagerrB   rŠ   s   ff   @@@@€€€€€€€r"   r™   Ú%_run_execution_chain.<locals>.call_atª   sÓ   þ€ Ø”C˜	“NÔ"Ù  Ó)Ð)à˜UÕ#ˆØˆØˆØˆ÷	>÷ 	>ñ 	>ô$ )Ñ2¨6Ñ2ˆØ#*ˆ�KÑ Ø#,�KÑ ð	/ÙÑ*˜kÑ*Ð*øÜ(ô 	Ø—,‘,ÐûÜô 	/ð ×(Ñ(¨¨x¸ÐS_Ð(Ô`ßØ"Õ"ßØÙ˜5 1�9 gÓ.Õ.ûð	/úsB   ÁA ÁC
Á)A5Á5C
ÂC
ÂCÂ!C
Â'CÂ/CÂ?C
ÃC
)rL   r�   r   Ú_middlewarerM   )r@   rŠ   r&   r�   r™   r¤   r¥   rB   s   ffl @@@@r"   rt   rt   ¡   sk   þ€ Ý4à(¨FÔ2‘)¸€KÙÓ!€GÜ�W×(Ñ(×,Ñ,¨T°2Ó6Ó7€IßÙ˜V KÕ0Ó1Ð1÷*/ö */ñX �1�f˜[Õ)Ó*Ð*r!   )&Ú__conditional_annotations__r   Ú
__future__r   ÚloggingÚcopyr   Údataclassesr   r   Útypingr   r   r   r	   Ú	getLoggerr   r9   r.   r4   rl   ry   r]   ru   r   r   r   r0   r5   r>   rU   r^   ro   rv   rz   r8   r|   rt   )r¨   s   @r"   Ú<module>r¯      sÆ   øðôõ #ã Ý ß (ß ,Ó ,à	×	Ò	˜8Ó	$€à.Ð Ø2Ð à(Ð Ø,Ð Ø&Ð Ø*Ð ð Ð6Ð8NÐPhðÐ �(ó ð
 ÷>ð >ó ð>õõ
õ
Gõõ2õõB_õeô! 	ô !÷5+r!   