+
    iHàjº ã                  ó®  a € 0 t $ R t^ RI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t^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IH t H!t! ]PD                  ! ]#4      t$R
t%Rt&Rt'Rt(Rt)Rt*Rt+/ t,R]-R&   Rt. ! R R4      t/R R lt0]/! ]04      t1]1Pd                  t3R R lt4R€R R llt5RRRR/R R  llt6R!RR"RR#R/R$ R% llt7R!RR"R/R& R' llt8R( R) lt9R* R+ lt:]! R,R-4      t; ! R. R/]<4      t=R0 R1 lt>R2 R3 lt?R4 R5 lt@] ! R6 R74      4       tAR8 R9 ltB]/! ]B4      tC]CPd                  tD]CPŠ                  tF ! R: R;4      tG ! R< R=4      tH]H! 4       tI]P”                  ! ]IP–                  4        ! R> R?4      tL]! R@RA7       ! RB RC4      4       tM]L]M,          tN ! RD RE4      tO]O! 4       tP] ! RF RG4      4       tQ] ! RH RI4      4       tR]P¦                  ! RJRRK7      tTRL]-RM&   ]P¦                  ! RN^ RK7      tURO]-RP&   ]P¬                  RQ 4       tWRR RS ltXRT RU ltYRV RW ltZ ! RX RY4      t[][! 4       t\RZ R[ lt]R\ R] lt^R€R^ R_ llt_R` Ra lt`Rb Rc ltaRd Re ltbRfR@RgR/Rh Ri lltcRj Rk ltdRl Rm lteRn Ro ltfRp Rq ltg]! R@RA7       ! Rr Rs4      4       thR€Rt Ru llti]j! RvRw04      tkRx Ry ltlRz R{ ltmR| R} ltnR~ R ltoR# )�zBProfile-scoped NeMo Relay runtimes owned by the Hermes agent core.)ÚannotationsN)ÚTimeoutError)Ú	dataclassÚfield)ÚEnum)ÚPath)ÚAnyÚCallable)Úget_hermes_home)ÚRELAY_PLUGINS_CONFIG_ENVÚ configured_legacy_relay_env_varszhermes.sessionzhermes.turnzhermes.logical_llm_callzhermes.relay.schema_versionzhermes.relay.runtime.v1zhermes.relay.runtime_instancezhermes.nemo_relay.pluginsúdict[str, str]Ú_PROFILE_KEY_CACHEg      $@c                  ó>   € ] tR t^+tRtR R ltR R ltR R ltRtR	# )
Ú_LazyzNDouble-checked, thread-safe once-only factory; ``reset()`` re-arms it (tests).c               ó    € V ^8„  d   QhRRRR/# )é   ÚfactoryúCallable[[], Any]ÚreturnÚNone© )Úformats   "Ú8/home/ubuntu/.hermes/hermes-agent/agent/relay_runtime.pyÚ__annotate__Ú_Lazy.__annotate__.   s   € ÷ Qñ QÐ 1ð Q°dñ Qó    c                	óX   € VR \         P                  ! 4       uV n        V n        V n        R # ©N)Ú	threadingÚLockÚ_factoryÚ_valueÚ_lock)Úselfr   s   &&r   Ú__init__Ú_Lazy.__init__.   s   € Ø18¸$Ä	ÇÂÓ@PÐ.ˆŒ�t”{ D¦Jr   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r   1   s   € ÷ ñ �Sñ r   c                	ó
  € V P                   fM   V P                  ;_uu_ 4        V P                   f   V P                  4       V n         R R R 4       V P                   # V P                   #   + '       g   i     T P                   # ; ir   )r"   r#   r!   ©r$   s   &r   ÚgetÚ	_Lazy.get1   sZ   € Ø�;‰;ÒØ——“Ø—;‘;Ò&Ø"&§-¡-£/�D”K÷ ð �{‰{Ðˆt�{‰{Ð÷ –ð �{‰{Ðús   £$A'Á'B	c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r   8   s   € ÷ ñ �tñ r   c                	ó   € R V n         R # r   )r"   r*   s   &r   ÚresetÚ_Lazy.reset8   s	   € ØˆŽr   )r!   r#   r"   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r+   r0   Ú__static_attributes__r   r   r   r   r   +   s   † ÙXõQõ÷ñ r   r   c               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   r   <   s   € ÷ Xñ X ñ Xr   c                 ó"   € ^ RI Hp  V ! ^RR7      # )é    ©ÚDaemonThreadPoolExecutorzrelay-scope-op)Úmax_workersÚthread_name_prefix)Útools.daemon_poolr<   r;   s    r   Ú_new_scope_op_executorr@   <   s   € õ ;Ù#°ÐFVÔWÐWr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
runtime_idÚstrÚextrar   r   údict[str, Any]r   )r   s   "r   r   r   G   s&   € ÷ cñ c ð c¨sð c°~ñ cr   c                ó*   € \         \        \        V /VC# )zEReturn the scope metadata that stamps every Hermes-owned Relay scope.)ÚRUNTIME_SCHEMA_KEYÚRUNTIME_SCHEMA_VERSIONÚRUNTIME_INSTANCE_KEY)rB   rD   s   &,r   Úruntime_metadatarJ   G   s   € äÔ 6Ô8LÈjÐbÐ\aÐbÐbr   c               ó    € V ^8„  d   QhRRRR/# )r   Úcwdr   r   r   r   )r   s   "r   r   r   L   s   € ÷ Pñ P�cð P ^ñ Pr   c                ó‚   € \        V \        4      '       d)   V P                  4       '       d   RV P                  4       /# / # )z?Return Relay scope input for a known logical working directory.rL   )Ú
isinstancerC   Ústrip)rL   s   &r   Ú_scope_inputrP   L   s.   € ä#-¨c´3×#7Ò#7¸C¿I¹I¿KºKˆE�3—9‘9“;ÐÐOÈRÐOr   ÚtimeoutÚtimeout_messageÚ c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Úfnr   ÚnamerC   rQ   úfloat | NonerR   r   r   r   )r   s   "r   r   r   Q   s4   € ÷ !ñ !Øð!Ø$'ð!Ø2>ð!ØX[ð!àñ!r   c               ó  a a€ / oR V V3R llp\         P                  ! VRVR7      pVP                  4        VP                  V4       VP	                  4       '       d   \        V4      hRS9   d
   SR,          hSP                  R4      # )zµRun ``fn`` on a fresh daemon thread; re-raise its error or return its result.
With ``timeout`` a still-running worker is abandoned with ``TimeoutError`` (daemon: cannot block exit).c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   Ú+_run_on_daemon_thread.<locals>.__annotate__X   s   € ÷ #ñ #�Tñ #r   c                 óZ   <€  S! 4       SR &   R#   \          d   p T SR&    Rp ? R# Rp ? ii ; i)ÚresultÚerrorN)ÚBaseException)ÚexcrU   Úoutcomes    €€r   Ú_targetÚ&_run_on_daemon_thread.<locals>._targetX   s.   ø€ ð	#Ù "£ˆG�HÓøÜô 	#Ø"ˆG�G×ûð	#ús   ƒ
 �*š%¥*T)ÚtargetÚdaemonrV   r]   r\   )r   ÚThreadÚstartÚjoinÚis_aliver   r+   )rU   rV   rQ   rR   ra   Úworkerr`   s   f$$$  @r   Ú_run_on_daemon_threadrj   Q   sy   ù€ ð
 !€G÷#ñ #ô ×Ò W°TÀÔE€FØ
‡L�L„NØ
‡K�K�ÔØ‡�×ÒÜ˜?Ó+Ð+Ø�'ÔØ�gÕÐØ�;‰;�xÓ Ð r   ÚoutputÚmetadataÚ	timestampc               ó0   € V ^8„  d   QhRRRRRRRRRRRR/# )r   Úrelayr   Úhandlerk   rl   rm   r   r   )r   s   "r   r   r   h   s8   € ÷ !ñ !˜3ð !¨ð !¸ð !Ècð !Ðehð !Ðtwñ !r   c               ó&  € V P                   P                  pRV3RV3RV33 UUu/ uF  w  rgVf   K  WgbK  	  ppp \        P                  ! V4      P                  p	V	'       d‚   \        ;QJ d*    R V	P                  4        4       F  '       g   K   RM	  RM! R V	P                  4        4       4      '       g,   VP                  4        U
Uu/ uF  w  r«W©9   g   K  W«bK  	  pp
pV! V3/ VB # u uppi   \
        \        3 d    / p	 L­i ; iu upp
i )z›Pop a Relay scope, forwarding only the kwargs the live binding accepts.
``scope.pop`` gained ``metadata`` in nemo-relay 0.4+; older wheels raise TypeError.rk   rl   rm   c              3  ón   "  € T F+  qP                   \        P                  P                  8H  x € K-  	  R # 5ir   )ÚkindÚinspectÚ	ParameterÚVAR_KEYWORD)Ú.0Úparams   & r   Ú	<genexpr>Ú"pop_relay_scope.<locals>.<genexpr>q   s%   é € ÐcÑSbÈ%Ÿ*™*¬×(9Ñ(9×(EÑ(EÖEÓSbùs   ‚35TF)
ÚscopeÚpoprt   Ú	signatureÚ
parametersÚ	TypeErrorÚ
ValueErrorÚanyÚvaluesÚitems)ro   rp   rk   rl   rm   r|   ÚkÚvÚkwargsÚparamsÚkeyÚvalues   &&$$$       r   Úpop_relay_scoperŠ   h   sõ   € ð �+‰+�/‰/€CØ!)¨6Ð 2°ZÀÐ4JÈ[ÐZcÐLdÑeÔwÑe‘t�qÐijŒdˆaŠdÑe€FÑwðÜ×"Ò" 3Ó'×2Ñ2ˆ÷ —c“cÑcÐSY×S`ÑS`ÔSbÓc—c—c’cÑcÐSY×S`ÑS`ÔSbÓc×cÒcØ/5¯|©|¬~ÔO©~¡ ÀÁ”*�#’*©~ˆÑOÙˆvÑ ˜Ñ Ð ùó xøô ”zÐ"ô ØŠðüó Ps'   ¥C.²C.¼ C4 Ã
DÃDÃ4D
Ä	D
c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   ro   r   rp   rk   rl   r   Úboolr   )r   s   "r   r   r   v   s1   € ÷ ñ  #ð ¨sð ¸sð ÐUXð Ðdhñ r   c               ód   € \        V 4      pVe   \        WA4      '       g   R# \        WW#R7       R# )aê  Pop ``handle`` only while it is the top of the scope stack; return whether it was popped.

Two concurrent Hermes turns in one session share a physical stack, so the first turn to
finish may find the sibling's live scope above its own. Popping through it would close the
sibling's scope and letting the binding raise ("scope handle is not at the top of the
stack") logs a traceback per overlap (#115471). The skipped scope is reclaimed by the
session-close drain in ``_close_scope_handle``.
F©rk   rl   T)Ú_current_topÚ_same_handlerŠ   )ro   rp   rk   rl   Útops   &&$$ r   Úpop_relay_scope_if_topr’   v   s-   € ô �uÓ
€CØ
‚œ|¨C×8Ò8ÙÜ�E¨&ÕDÙr   c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   r   )r   s   "r   r   r   †   s   € ÷ 	Hñ 	H˜ð 	H ñ 	Hr   c                óX  € \        \        V RR4      RR4      p\        V4      '       d5   \        P                  ! \        4      ;_uu_ 4        V! 4       uuRRR4       # V P                  4       p\        V\        4      '       d   V'       d
   VR,          # R# T#   + '       g   i     LK; i)z6Return the current top-of-stack scope handle, or None.r{   NÚ
get_handleéÿÿÿÿ)ÚgetattrÚcallableÚ
contextlibÚsuppressÚ	ExceptionÚget_scope_stackrN   Úlist)ro   r•   r‘   s   &  r   r�   r�   †   s}   € ô œ ¨°Ó6¸ÀdÓK€JÜ�
×ÒÜ× Ò ¤×+Õ+Ù“<÷ ,Ò+à
×
Ñ
Ó
!€Cä)3°C¼×)>Ò)>—sˆC��GÐG ÐGÀCÐG÷	 ,×+ús   ÁBÂB)	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úar   Úbr   rŒ   r   )r   s   "r   r   r   ’   s&   € ÷ [ñ [�Cð [˜Cð [ Dñ [r   c                ó˜   € V e   Vf   WJ # \        V RR 4      pWJ ;'       g)    W8H  ;'       g    VR J;'       d    V\        VRR 4      8H  # )NÚuuid)r—   )rŸ   r    Úa_uuids   && r   r�   r�   ’   sV   € à‚y�A’IØˆvˆÜ�Q˜ Ó%€FØˆ6×ZÐZ�Q‘V×ZÐZ ¨dÐ 2× YÐ Y°vÄÈÈFÐTXÓAYÑ7YÐZr   Ú_RelayPluginConfigurationStatez,UNINITIALIZED DISABLED ACTIVE FOREIGN FAILEDc                  ó   € ] tR t^ tRtRtR# )Ú"_RelayPluginConfigurationLoadErrorzFAn explicitly selected Relay plugin configuration could not be loaded.r   N)r2   r3   r4   r5   r6   r7   r   r   r   r¦   r¦       s   † ÝPr   r¦   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
activationr   r   rŒ   r   )r   s   "r   r   r   ¤   s   € ÷ 6ñ 6°sð 6¸tñ 6r   c                óZ   €  \        V RR4      p\        V4      #   \         d    Rp Li ; i)zEReturn whether Relay activated any static or dynamic plugin behavior.ÚreportN)r—   r›   Ú"_report_requires_managed_execution)r¨   rª   s   & r   Ú&_activation_requires_managed_executionr¬   ¤   s8   € ðÜ˜ X¨tÓ4ˆô .¨fÓ5Ð5øô ô ØŠðús   ‚ š*©*c               ó    € V ^8„  d   QhRRRR/# )r   r¨   r   r   z	list[str]r   )r   s   "r   r   r   ­   s   € ÷ Lñ L¨ð L°ñ Lr   c                óÒ   €  \        V R/ 4      P                  R4      p\        T\        4      '       d   T Uu. uF  p\        T4      NK  	  up# . #   \         d    . u # i ; iu upi )zLReturn the plugins.toml files an activation loaded, lowest precedence first.rª   Úconfig_paths)r—   r+   r›   rN   r�   rC   )r¨   ÚpathsÚpaths   &  r   Ú_activation_config_pathsr²   ­   sd   € ðÜ˜
 H¨bÓ1×5Ñ5°nÓEˆô -7°u¼d×,CÒ,C¡%Ó(¡%˜$ŒC�ŽI¡%Ñ(ÐKÈÐKøô ô ØŠ	ðüâ(s   ‚A ¸A$ÁA!Á A!c               ó    € V ^8„  d   QhRRRR/# )r   rª   r   r   rŒ   r   )r   s   "r   r   r   ¶   s   € ÷ 'ñ '¨sð '°tñ 'r   c                óÜ  € R R lp\        V \        4      '       g   V! 4       # V P                  R4      pV P                  R4      p\        V\        4      '       d   \        V\        4      '       g   V! 4       # VP                  R4      p\        V\        4      '       g   V! 4       # V F]  p\        V\        4      '       g
   V! 4       u # VP                  R4      p\        V\        4      '       g
   V! 4       u # V'       g   K\   R# 	  V F\  p\        V\        4      '       d   RV9  d
   V! 4       u # VR,          p\        V\        4      '       g
   V! 4       u # V'       g   K[   R# 	  R	# )
zãReturn whether a Relay plugin-host report enables any static or dynamic plugin.

Relay owns the report contract. An unfamiliar report stays fail-safe by
retaining Hermes managed execution instead of silently bypassing plugins.
c               ó   € V ^8„  d   QhRR/# ©r   r   rŒ   r   )r   s   "r   r   Ú8_report_requires_managed_execution.<locals>.__annotate__½   s   € ÷ ñ ˜$ñ r   c                 ó0   € \         P                  R 4       R# )zmHermes could not determine whether the Relay plugin configuration is empty; keeping managed execution enabledT)ÚloggerÚwarningr   r   r   Úkeep_enabledÚ8_report_requires_managed_execution.<locals>.keep_enabled½   s   € Ü�‰ð ô	
ñ r   Úresolved_configÚdynamic_pluginsÚ
componentsÚenabledTÚselectedF)rN   Údictr+   r�   rŒ   )	rª   r»   Úresolvedr¾   r¿   Ú	componentrÀ   ÚpluginrÁ   s	   &        r   r«   r«   ¶   s  € õô �fœd×#Ò#Ù‹~ÐØ�z‰zÐ+Ó,€HØ—j‘jÐ!2Ó3€OÜ�h¤×%Ò%¬Z¸Ì×-NÒ-NÙ‹~ÐØ—‘˜lÓ+€JÜ�j¤$×'Ò'Ù‹~ÐÛˆ	Ü˜)¤T×*Ò*Ù“>Ò!Ø—-‘- 	Ó*ˆÜ˜'¤4×(Ò(Ù“>Ò!ß‰7Úñ  ó "ˆÜ˜&¤$×'Ò'¨:¸VÔ+CÙ“>Ò!Ø˜*Õ%ˆÜ˜(¤D×)Ò)Ù“>Ò!ß‰8Úñ "ñ r   c                  óÖ   € ] tR t^àt$ RtR]R&   RtR]R&   ]! ]P                  RR7      t
R]R	&   RtR
]R&   RtR]R&   RtR]R&   ^ tR]R&   ^ tR]R&   RtR
]R&   RtR
]R&   RtR]R&   RtR# )ÚRelaySessionz9One isolated Relay scope stack owned by a Hermes session.rC   Ú
session_idrS   Úparent_session_idF©Údefault_factoryÚreprúthreading.RLockÚlockrŒ   ÚclosingNr   rp   zcontextvars.Context | NoneÚcontextÚintÚsegmentÚsegment_turnsÚrotate_pendingÚclose_pendingrL   r   )r2   r3   r4   r5   r6   Ú__annotations__rÉ   r   r   ÚRLockrÎ   rÏ   rp   rÐ   rÒ   rÓ   rÔ   rÕ   rL   r7   r   r   r   rÇ   rÇ   à   s|   ‡ áCàƒOØÐ�sÓÙ!°)·/±/ÈÔN€Dˆ/ÓNØ€GˆTÓØ€FˆCÓØ*.€GÐ'Ó.ð €GˆSÓØ€M�3ÓØ €N�DÓ Ø€M�4ÓØ€Cˆ‡Mr   rÇ   c               ó   € V ^8„  d   QhRR/# )r   r   rE   r   )r   s   "r   r   r   ó   s   € ÷ Dñ D˜~ñ Dr   c            	     ó¶  € Rp ^ p ^ RI Hp V! 4       P                  R4      ;'       g    / P                  R4      ;'       g    / pVP                  R4      ;'       g    / p\        VP                  RR4      4      p  \	        ^ \        VP                  R^ 4      ;'       g    ^ 4      4      pRT RT/#   \        \        3 d    ^ p Li ; i  \         d     L,i ; i)zNgateway.telemetry.session_segments; both defaults OFF => rotation never fires.F)Úload_user_config_effectiveÚgatewayÚ	telemetryÚsession_segmentsÚon_compactionÚ	max_turns)	Úhermes_cli.config_effectiverÚ   r+   rŒ   ÚmaxrÑ   r   r€   r›   )rÞ   rß   rÚ   rÜ   Úsegmentss        r   Ú_load_segments_configrã   ó   sØ   € à€MØ€Iðõ 	Ká/Ó1×5Ñ5°iÓ@×FÐFÀB×KÑKÈKÓX×^Ð^Ð\^ˆ	Ø—=‘=Ð!3Ó4×:Ð:¸ˆÜ˜XŸ\™\¨/¸5ÓAÓBˆð	Ü˜Aœs 8§<¡<°¸QÓ#?×#DÐ#DÀ1ÓEÓFˆIð
 ˜]¨K¸ÐCÐCøô	 œ:Ð&ô 	ØŠIð	ûäô Ùðús@   †"C
 ©C
 ÁC
 ÁC
 Á</B1 Â1CÃC
 ÃCÃC
 Ã
CÃCc                  ó>   € ] tR tRtRtR R ltR R ltR R ltR	tR
# )ÚRelayOperationLeasei  zBKeep process-wide Relay plugins alive across a deferred operation.c               ó    € V ^8„  d   QhRRRR/# )r   ÚruntimeÚRelayRuntimer   r   r   )r   s   "r   r   Ú RelayOperationLease.__annotate__  s   € ÷ >ñ > ð >°ñ >r   c                	óJ   € \         P                  ! 4       VuV n        V n        R # r   )r   r    r#   Ú_runtime©r$   rç   s   &&r   r%   ÚRelayOperationLease.__init__  s   € Ü$-§N¢NÓ$4°gÐ!ˆŒ
�D–Mr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   ÚsessionrÇ   ÚcallbackúCallable[..., Any]Úargsr   r†   r   r   )r   s   "r   r   ré     s:   € ÷ _ñ _ lð _Ð>Pð _ÐY\ð _Ðhkð _Ðpsñ _r   c                óÚ   € V P                   ;_uu_ 4        V P                  f   \        R4      hV P                  P                  ! W.VO5/ VB uuRRR4       #   + '       g   i     R# ; i)z=Run cleanup while this lease still owns the runtime lifetime.Nz(Hermes Relay operation lease is released)r#   rë   ÚRuntimeErrorÚ_run_in_session_untracked)r$   rï   rð   rò   r†   s   &&&*,r   Úrun_in_sessionÚ"RelayOperationLease.run_in_session  sJ   € à�Z�Z‹ZØ�}‰}Ò$Ü"Ð#MÓNÐNØ—=‘=×:Ò:¸7Ð^ÈtÒ^ÐW]Ñ^÷ �Z�Z‹Zús   •9AÁA*	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   ré     s   € ÷ %ñ %˜ñ %r   c                ó¸   € V P                   ;_uu_ 4        V P                  Ruqn        RRR4       Xe   VP                  4        R# R#   + '       g   i     L(; i)z Release this lease exactly once.N)r#   rë   Ú_end_operationrì   s   & r   ÚreleaseÚRelayOperationLease.release  s?   € à�Z�Z‹ZØ%)§]¡]°DÐ"ˆG”]÷ àÒØ×"Ñ"Ö$ñ ÷ �Zús   •A	Á	A	)r#   rë   N)	r2   r3   r4   r5   r6   r%   rö   rû   r7   r   r   r   rå   rå     s   † ÙLõ>õ_÷%ñ %r   rå   c                  ó†   € ] tR tRtR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 ltRtR# )Ú _ProcessRelayPluginConfigurationi#  z?Own one Relay plugin configuration across profile-scoped hosts.c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   Ú-_ProcessRelayPluginConfiguration.__annotate__&  s   € ÷ %ñ %˜$ñ %r   c                	óž   € \         P                  ! 4       V n        \        4       V n        \
        P                  V n        R V n        R V n	        R # r   )
r   r×   r#   ÚsetÚ_ownersr¤   ÚUNINITIALIZEDÚ_stateÚ_relayÚ_activationr*   s   &r   r%   Ú)_ProcessRelayPluginConfiguration.__init__&  s5   € Ü—_’_Ó&ˆŒ
Ü!$£ˆŒÜ4×BÑBˆŒØˆŒØ $ˆÖr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úownerr   ro   r   r¤   r   )r   s   "r   r   r   -  s"   € ÷ ñ ˜Sð ¨ð Ð1Oñ r   c           
     ó
  € V P                   ;_uu_ 4        V P                  '       g�   V P                  V4      ;'       g    V P                  V4      V n        V P                  \
        P                  J dC   \        P                  RRP                  \        V P                  4      4      ;'       g    R4       V P                  P                  \        V4      4       V P                  uuRRR4       #   + '       g   i     R# ; i)zCJoin the process configuration, initializing it for the first host.zThe Relay plugin host is active process-wide and applies to all profiles hosted by this Hermes process. Configuration files: %sz; znone reportedN)r#   r  Ú
_preflightÚ	_activater  r¤   ÚACTIVEr¹   Úinforg   r²   r  ÚaddÚid)r$   r
  ro   s   &&&r   ÚacquireÚ(_ProcessRelayPluginConfiguration.acquire-  s¦   € à�Z�Z‹ZØ—<—<�<à"Ÿo™o¨eÓ4×MÐM¸¿¹ÀuÓ8M�”Ø—;‘;Ô"@×"GÑ"GÓGÜ—K‘KðBàŸ	™	Ô":¸4×;KÑ;KÓ"LÓM×`Ð`ÐQ`ôð
 �L‰L×ÑœR ›YÔ'Ø—;‘;÷ �Z�Z‹Zús   •*C1Á A/C1Â06C1Ã1D	c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   r¤   r   )r   s   "r   r   r   <  s   € ÷ 5ñ 5˜sð 5Ð'Eñ 5r   c                	ó„  €  V P                  V4      '       g   \        P                  #  Yn
        \        P                  #   \         du   pR T n        \        T4      '       d+   \        P                  R4       \        P                  u R p?# \        P                  RTRR7       \        P                  u R p?# R p?ii ; i)Nz²A process-global Relay plugin configuration is already active outside Hermes native ownership; leaving it unchanged and disabling Hermes-managed Relay middleware for this processz-Hermes Relay plugin initialization failed: %sT©Úexc_info)Ú_initializer¤   ÚDISABLEDr›   r  Ú_is_relay_host_conflictr¹   rº   ÚFOREIGNÚFAILEDr  r  )r$   ro   r_   s   && r   r  Ú*_ProcessRelayPluginConfiguration._activate<  s¡   € ð	9Ø×#Ñ# E×*Ò*Ü5×>Ñ>Ð>ð +ð ŒÜ-×4Ñ4Ð4øô ô 		9Ø#ˆDÔÜ& s×+Ò+Ü—‘ðuôô 6×=Ñ=Õ=Ü�N‰NÐJÈCÐZ^ˆNÔ_Ü1×8Ñ8Õ8ûð		9ús.   ‚A  ™A  Á B?Á<B:ÂB?Â'B:Â4B?Â:B?c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   z%_RelayPluginConfigurationState | Noner   )r   s   "r   r   r   M  s   € ÷ ñ  ð Ð(Mñ r   c                ó˜   € V P                   e<   V P                  4       '       g&   \        P                  R4       \        P
                  # R# )zPReturn a terminal state when the process cannot take ownership; None to proceed.NzbHermes Relay plugin cleanup is still pending; refusing to replace the process-global configuration)r  Ú_clear_activer¹   rº   r¤   r  )r$   ro   s   &&r   r  Ú+_ProcessRelayPluginConfiguration._preflightM  s:   € à�;‰;Ò"¨4×+=Ñ+=×+?Ò+?Ü�N‰NØtôô 2×8Ñ8Ð8Ùr   c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   rŒ   r   )r   s   "r   r   r   V  s   € ÷ 	Bñ 	B ð 	B¨ñ 	Br   c                ó®   € \        4       p\        VP                  P                  / VR7      4      pVf   \	        R4      hW0n        Wn        \        V4      # )zWInitialize Relay and report whether the resolved configuration needs managed execution.©Úadditional_plugins_tomlz>NeMo Relay plugin initialization returned no activation handle)Ú_configured_plugin_inputsÚ_resolve_plugin_awaitablerÅ   Ú
initializerô   r  r  r¬   )r$   ro   Úconfig_pathr¨   s   &&  r   r  Ú,_ProcessRelayPluginConfiguration._initializeV  sQ   € ä/Ó1ˆä.¨u¯|©|×/FÑ/FÀrÐcnÐ/FÓ/oÓpˆ
ØÒÜÐ_Ó`Ð`Ø%ÔØŒÜ5°jÓAÐAr   c               ó    € V ^8„  d   QhRRRR/# )r   r
  r   r   r   r   )r   s   "r   r   r   a  s   € ÷ -ñ -˜Sð - Tñ -r   c                ó  € V P                   ;_uu_ 4        \        V4      V P                  9   d5   V P                  P                  \        V4      4       V P	                  4        RRR4       R#   + '       g   i     R# ; i)z<Release one host and clear Relay after the final host exits.N)r#   r  r  ÚremoveÚretry_pending_cleanup)r$   r
  s   &&r   rû   Ú(_ProcessRelayPluginConfiguration.releasea  sI   € à�Z�Z‹ZÜ�%‹y˜DŸL™LÔ(Ø—‘×#Ñ#¤B u£IÔ.Ø×*Ñ*Ô,÷ �Z�ZŠZús   •AA.Á.A?	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   h  s   € ÷ )ñ ) ñ )r   c                ó¼   € V P                   ;_uu_ 4        V P                  P                  4        V P                  4        RRR4       R#   + '       g   i     R# ; i)zCClear process-global state left by directly constructed test hosts.N)r#   r  Úclearr.  r*   s   &r   Úreset_for_testsÚ0_ProcessRelayPluginConfiguration.reset_for_testsh  s3   € à�Z�Z‹ZØ�L‰L×ÑÔ Ø×&Ñ&Ô(÷ �Z�ZŠZús   •+A
Á
A	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   n  s   € ÷ Kñ K tñ Kr   c                óâ   € V P                   ;_uu_ 4        V P                  '       g,   V P                  4       '       d   \        P                  V n        RRR4       R#   + '       g   i     R# ; i)z<Retry a failed final cleanup without disrupting live owners.N)r#   r  r   r¤   r  r  r*   s   &r   r.  Ú6_ProcessRelayPluginConfiguration.retry_pending_cleanupn  s;   € à�Z�Z‹ZØ—<—<�< D×$6Ñ$6×$8Ò$8Ü<×JÑJ�”÷ �Z�ZŠZús   •(A¾AÁA.	c               ó   € V ^8„  d   QhRR/# r¶   r   )r   s   "r   r   r   t  s   € ÷ ñ ˜tñ r   c                	ó  aa€ V P                   V P                  uooSf   R# R V3R llpRV3R l3RV33 F  w  r# V! 4        K  	  R ;V n         V n        R#   \         d    \        P	                  RTRR7         R	# i ; i)
NTc               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   ÚD_ProcessRelayPluginConfiguration._clear_active.<locals>.__annotate__y  s   € ÷ 	Sñ 	S Sñ 	Sr   c                 óv   <€ \        \        SR R4      ;p 4      '       d   \        V ! 4       4      # \        R4      h)ÚcloseNz0NeMo Relay plugin activation has no close method)r˜   r—   r'  rô   )r=  r¨   s    €r   Úclose_configurationÚK_ProcessRelayPluginConfiguration._clear_active.<locals>.close_configurationy  s5   ø€ Ü¤¨°W¸dÓ!CÐC˜×DÒDÜ0±³Ó9Ð9ÜÐQÓRÐRr   zsubscriber flushc                 óJ   <€ \        S P                  P                  4       4      # r   )r'  ÚsubscribersÚflush_async)ro   s   €r   Ú<lambda>Ú@_ProcessRelayPluginConfiguration._clear_active.<locals>.<lambda>  s   ø€ Ô)BÀ5×CTÑCT×C`ÑC`ÓCbÔ)cr   zconfiguration cleanupzHermes Relay plugin %s failedr  F)r  r  r›   r¹   rº   )r$   r>  ÚwhatÚstepr¨   ro   s   &   @@r   r   Ú._ProcessRelayPluginConfiguration._clear_activet  s”   ù€ Ø ŸK™K¨×)9Ñ)9ÐˆˆzØŠ=Ù÷	Sð 	Sð  Ô!cÐdØ$Ð&9Ð:ó
‰JˆDðÙ–ñ
ð *.Ð-ˆŒ�dÔ&Ùøô	 ô Ü—‘Ð>ÀÈt�ÔTÛðús   ½AÁ#B Á?B )r  r#   r  r  r  N)r2   r3   r4   r5   r6   r%   r  r  r  r  rû   r3  r.  r   r7   r   r   r   rþ   rþ   #  s9   † ÙIõ%õõ5õ"õ	Bõ-õ)õK÷ñ r   rþ   c            
      ó  € ] tR tRtRtRMRR/R R ll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/R R lltRRRRRR/R R lltR R ltRRRR/R R lltR  R! ltR" R# ltR$ R% ltR& R' ltR( R) ltR*RR+R/R, R- lltR*RR+R/R. R/ lltR*R/R0 R1 lltR2 R3 ltR4 R5 lt]P6                  R6 4       tR7 R8 ltR9 R: ltR; R< ltR=RR*RR>R?R@^ RAR/RB RC llt RD RE lt!RF RG lt"RH RI lt#RJ RK lt$RLt%R# )Nrè   i�  z>Own Relay session scopes and the process plugin configuration.NÚprofile_keyc               ó$   € V ^8„  d   QhRRRRRR/# )r   ro   r   rI  ú
str | Noner   r   r   )r   s   "r   r   ÚRelayRuntime.__annotate__’  s"   € ÷ 'ñ '˜cð '¸*ð 'ÐPTñ 'r   c               	óZ  € T;'       g    \        4       V n        T;'       g    \        4       V n        \        P
                  ! 4       P                  V n        \        P                  ! 4       \        P                  ! 4       uV n
        V n        / V n        / V n        / V n        \        4       V n        / V n        \        P$                  ! 4       V n        R ;V n        V n        \        P,                  ! 4       \        P,                  ! 4       uV n        V n        V P0                  P                  4        ^ V n        \4        P7                  W P                  4      V n        RV n        V P=                  4       '       d   V P?                  \@        4       \B        PD                  ! V PF                  4       R# )FTN)$Ú_load_nemo_relayro   Úcurrent_profile_keyrI  r¢   Úuuid4ÚhexrB   r   r×   Ú_sessions_lockÚ_execution_consumers_lockÚ	_sessionsÚ_subagent_parentsÚ_subagent_parent_handlesr  Ú_execution_consumersÚ_deferred_scope_outputsr    Ú_deferred_scope_outputs_lockÚ_closingÚ_shutdown_startedÚEventÚ_shutdown_completeÚ_operations_idleÚ_active_operationsÚ_PLUGIN_CONFIGURATIONr  Ú_plugin_configuration_stateÚ _plugin_configuration_registeredÚ_plugins_activeÚretain_managed_executionÚ RELAY_PLUGINS_EXECUTION_CONSUMERÚatexitÚregisterÚshutdown)r$   ro   rI  s   &&$r   r%   ÚRelayRuntime.__init__’  s1  € Ø×0Ð0Ô.Ó0ˆŒ
Ø&×?Ð?Ô*=Ó*?ˆÔÜŸ*š*›,×*Ñ*ˆŒÜ>G¿oºoÓ>OÔQZ×Q`ÒQ`ÓQbÐ;ˆÔ˜TÔ;Ø24ˆŒØ13ˆÔØ8:ˆÔ%Ü.1«eˆÔ!ð CEˆÔ$Ü,5¯NªNÓ,<ˆÔ)Ø16Ð6ˆŒ˜Ô.Ü9B¿ºÓ9JÌIÏOÊOÓL]Ð6ˆÔ Ô!6Ø×Ñ×!Ñ!Ô#Ø"#ˆÔÜ+@×+HÑ+HÈÏzÉzÓ+ZˆÔ(à04ˆÔ-Ø×Ñ×!Ò!Ø×)Ñ)Ô*JÔKÜ�Š˜Ÿ™Ö&r   c               ó   € V ^8„  d   QhRR/# r¶   r   )r   s   "r   r   rL  ª  s   € ÷ Yñ Y ñ Yr   c                	ó:   € V P                   \        P                  J # r   )ra  r¤   r  r*   s   &r   rc  ÚRelayRuntime._plugins_activeª  s   € Ø×/Ñ/Ô3Q×3XÑ3XÐXÐXr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rp   r   rk   rE   r   r   r   )r   s   "r   r   rL  ­  s&   € ÷ @ñ @¨ð @°nð @Èñ @r   c                ó¼   € \        VRR4      pVe7   V P                  ;_uu_ 4        W P                  \        V4      &   RRR4       R# R#   + '       g   i     R# ; i)z�Keep the real output of a finished scope that could not be popped yet because a
concurrent scope sits above it; the orphan drain closes it with this instead.r¢   N)r—   rY  rX  rC   )r$   rp   rk   rˆ   s   &&& r   Údefer_scope_outputÚRelayRuntime.defer_scope_output­  sL   € ô �f˜f dÓ+ˆØŠ?Ø×2×2Ó2Ø9?×,Ñ,¬S°«XÑ6÷ 3Ñ2ñ ß2×2Ð2ús   ¦A
Á
A	c               ó    € V ^8„  d   QhRRRR/# )r   rp   r   r   údict[str, Any] | Noner   )r   s   "r   r   rL  µ  s   € ÷ Dñ D°#ð DÐ:Oñ Dr   c                	óØ   € \        VR R4      pVf   R# V P                  ;_uu_ 4        V P                  P                  \	        V4      R4      uuRRR4       #   + '       g   i     R# ; i)r¢   N)r—   rY  rX  r|   rC   )r$   rp   rˆ   s   && r   Ú_take_deferred_scope_outputÚ(RelayRuntime._take_deferred_scope_outputµ  sM   € Ü�f˜f dÓ+ˆØŠ;ÙØ×.×.Ó.Ø×/Ñ/×3Ñ3´C¸³H¸dÓC÷ /×.×.Ó.ús   ¨%AÁA)	c               ó    € V ^8„  d   QhRRRR/# ©r   ÚconsumerrC   r   r   r   )r   s   "r   r   rL  ¼  s   € ÷ 4ñ 4°ð 4¸ñ 4r   c                óÄ   € V'       g   \        R4      hV P                  ;_uu_ 4        V P                  P                  V4       RRR4       R#   + '       g   i     R# ; i)z<Keep managed LLM and tool execution active for one consumer.z2Relay managed-execution consumer must not be emptyN)r€   rS  rW  r  ©r$   rx  s   &&r   rd  Ú%RelayRuntime.retain_managed_execution¼  s@   € çÜÐQÓRÐRØ×+×+Ó+Ø×%Ñ%×)Ñ)¨(Ô3÷ ,×+×+Ò+ús   ¨AÁA	c               ó    € V ^8„  d   QhRRRR/# rw  r   )r   s   "r   r   rL  Ã  s   € ÷ 8ñ 8°#ð 8¸$ñ 8r   c                óž   € V P                   ;_uu_ 4        V P                  P                  V4       RRR4       R#   + '       g   i     R# ; i)z3Release a consumer's managed-execution requirement.N)rS  rW  Údiscardrz  s   &&r   Úrelease_managed_executionÚ&RelayRuntime.release_managed_executionÃ  s1   € à×+×+Ó+Ø×%Ñ%×-Ñ-¨hÔ7÷ ,×+×+Ò+ús	   •;»A	c               ó   € V ^8„  d   QhRR/# r¶   r   )r   s   "r   r   rL  È  s   € ÷ 3ñ 3¨4ñ 3r   c                ó’   € V P                   ;_uu_ 4        \        V P                  4      uuRRR4       #   + '       g   i     R# ; i)zBReturn whether a Hermes-managed consumer needs the Relay pipeline.N)rS  rŒ   rW  r*   s   &r   Úmanaged_execution_enabledÚ&RelayRuntime.managed_execution_enabledÈ  s+   € à×+×+Ó+Ü˜×1Ñ1Ó2÷ ,×+×+Ó+ús	   •5µA	Úexit_fallbackFc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r   rï   rÇ   Úscope_metadatarE   Úresolve_parentrŒ   r…  Úpush_kwargsr   r   r   r   )r   s   "r   r   rL  Í  s>   € ÷ "ñ "Ø#ð"Ø5Cð"ØX\ð"àð"à47ð"ð 
ñ"r   c               óL  € RpVP                   '       d�   V P                  ;_uu_ 4        V P                  P                  VP                  4      pRRR4       Vf6   V'       d.   V P                  RVP                   /4      pVe   VP                  pRVR&   \        P                  ! 4       pV P                  P                  P                  \        V P                  P                  P                  3p	VP                  Wb\!        VP"                  4      R7        \%        4       P&                  ! VP(                  .V	O5/ VB p
V
P+                  \,        R7      Vn        W�n        R#   + '       g   i     EL; i  \.         d$    T'       g   h TP(                  ! T	/ TB Tn         LIi ; i)a3  Push a fresh SESSION_SCOPE for ``session`` (bounded by ``SCOPE_OP_TIMEOUT``); record handle + context.
Subagents parent under their spawning turn/session handle (``resolve_parent`` creates the parent when
unknown). ``exit_fallback``: at interpreter shutdown the executor refuses futures; push synchronously.NrÈ   ÚsubagentÚnemo_relay_scope_role)rp   rl   Úinput©rQ   )rÉ   rR  rV  r+   rÈ   Úensure_sessionrp   ÚcontextvarsÚContextro   r{   ÚpushÚSESSION_SCOPEÚ	ScopeTypeÚAgentÚupdaterP   rL   Ú_scope_op_executorÚsubmitÚrunr\   ÚSCOPE_OP_TIMEOUTrô   rÐ   )r$   rï   r‡  rˆ  r…  r‰  Úparent_handleÚparentrÐ   rò   Úfutures   &&&$$,     r   Ú_open_session_scopeÚ RelayRuntime._open_session_scopeÍ  sQ  € ð ˆØ×$×$Ð$Ø×$×$Ó$Ø $× =Ñ =× AÑ AÀ'×BTÑBTÓ U�÷ %àÒ$¯Ø×,Ñ,¨l¸G×<UÑ<UÐ-VÓW�ØÒ%Ø$*§M¡M�MØ6@ˆNÐ2Ñ3Ü×%Ò%Ó'ˆØ—
‘
× Ñ ×%Ñ%¤}°d·j±j×6JÑ6J×6PÑ6PÐQˆØ×Ñ -ÔP\Ð]d×]hÑ]hÓPiÐÔjð		EÜ'Ó)×0Ò0°·±ÐS¸tÒSÀ{ÑSˆFð $Ÿ]™]Ô3C˜]ÓDˆGŒNØ!Ž÷) %×$Ð$ûô ô 	?ß ØØ$Ÿ[š[¨$Ð>°+Ñ>ˆGŽNð	?ús#   ©&E!Ä(E5 Å!E2	Å5F#ÆF#Æ"F#Údatarl   rL   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   ÚeventrE   r   r   rl   rr  rL   rK  r   úRelaySession | Noner   )r   s   "r   r   rL  ì  s<   € ÷ ñ àðð ð	ð
 (ðð ðð 
ñr   c          
     óÞ  € \        V4      pV'       g   R# V P                  ;_uu_ 4        V P                  '       d    RRR4       R# V P                  P	                  V4      pVf5   \        WPP                  P	                  VR4      R7      ;q`P                  V&   RRR4       XP                  ;_uu_ 4        VP                  '       d    RRR4       R# Ve!   \        V4      P	                  RR4      Vn
        VP                  f8   T P                  T/ T;'       g    / C\        V P                  4      CRVRR7       RRR4       V#   + '       g   i     Lµ; i  + '       g   i     T# ; i)z4Return the existing session scope or create it once.NrS   )rÈ   rÉ   rL   T)rˆ  r   r…  )Ú_session_idrR  rZ  rT  r+   rÇ   rU  rÎ   rÏ   rP   rL   rp   rž  rJ   rB   )r$   r¢  r   rl   rL   rÈ   rï   s   &&$$$  r   r�  ÚRelayRuntime.ensure_sessionì  s*  € ô ! Ó'ˆ
ßÙØ× × Ó Ø�}�}ˆ}Ø÷ !Ñ ð —n‘n×(Ñ(¨Ó4ˆGØŠÜ7CØ)×=SÑ=S×=WÑ=WÐXbÐdfÓ=gô8ð �Ÿ.™.¨Ñ4÷ !ð �\�\‹\Ø��ˆØ÷ ‰\ð ŠÜ*¨3Ó/×3Ñ3°E¸2Ó>�”Ø�~‰~Ò%Ø×(Ñ(ØÐV § ¨RÐVÔ4DÀTÇ_Á_Ó4UÐVØ#'¨dÀ$ð )ô ÷ ð ˆ÷% !× ú÷ Ž\ð ˆús+   ªEÁAEÂ7EÃAEÄ!EÅE	ÅE,	c               ó$   € V ^8„  d   QhRRRRRR/# )r   rï   rÇ   ÚreasonrC   r   r   r   )r   s   "r   r   rL    s!   € ÷ ñ ¨Lð ÀSð ÈTñ r   c               ó6  € VP                   ;_uu_ 4        VP                  '       g   VP                  f    RRR4       R# VP                  pV;P                  ^,          un        ^ Vn        RVn         V P                  WP                  P                  P                  VRV/\        V P                  4      \        R7       \        V P                  3/ RVP                  RV/B p V P#                  WRR	7       RRR4       R#   \         d8    \        P                  RTP                   TP                  ^,
          RR7        Lƒi ; i  \         d1    \        P                  R
TP                   TP                  RR7        L‰i ; i  + '       g   i     R# ; i)z¸Close the current session scope and open the next segment (turn boundary ONLY: LIFO).
Bookkeeping advances even when a native call fails so a degraded rotation cannot retry every turn.NFzhermes.session.segment_reason)rk   rl   rQ   zZHermes Relay segment close failed (session=%s segment=%d); abandoning the old segment spanTr  zhermes.session.segment)rˆ  zXHermes Relay segment open failed (session=%s segment=%d); keeping the prior scope handle)rÎ   rÏ   rp   rÒ   rÓ   rÔ   rö   ro   r{   r|   rJ   rB   rš  r›   r¹   rº   rÈ   rž  )r$   rï   r¨  Ú
old_handler‡  s   &&$  r   Úrotate_session_scopeÚ!RelayRuntime.rotate_session_scope  s[  € ð �\�\‹\Ø��ˆ '§.¡.Ò"8Ø÷ ‰\ð !Ÿ™ˆJà�OŠO˜qÕ �OØ$%ˆGÔ!Ø%*ˆGÔ"ð	Ø×#Ñ#ØŸZ™Z×-Ñ-×1Ñ1°:ÐGfÐhnÐFoÜ-¨d¯o©oÓ>ÔHXð $ô ô .Ø—‘ñØ$<¸g¿o¹oÐOnÐpvÐ#wñˆNðØ×(Ñ(¨ÐQVÐ(ÔW÷- ‰\øô ô Ü—‘ØpØ×&Ñ&¨¯©¸!Õ(;Àdð ö ðûô ô Ü—‘ØnØ×&Ñ&¨¯©À$ð ö ðú÷/ �\ˆ\úsT   •"FÁ3FÁ5ADÃ$FÃ'E	Ä?EÅFÅEÅFÅ	8FÆFÆFÆFÆF	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r¢  rE   rl   rr  rL   rK  r   r£  r   )r   s   "r   r   rL  ,  s4   € ÷ añ aØ#ðaØ2Gðaàðað 
ñar   c               ó–  € \        VP                  R4      ;'       g    R4      p\        VP                  R4      ;'       g    R4      pV'       d   V'       d   WE8X  d   R# V P                  RV/4      pVf   RMVP                  p\	        V4      pVe5   VP                  e'   VP
                  P                  V J d   VP                  pV P                  ;_uu_ 4        V P                  '       d    RRR4       R# W@P                  V&   Ve   WpP                  V&   RRR4       V P                  RV/W#R7      #   + '       g   i     L%; i)z@Open a child Agent scope under its spawning turn when available.rÉ   rS   Úchild_session_idNrÈ   ©rl   rL   )rC   r+   r�  rp   Úactive_turnÚleaseÚhostrR  rZ  rU  rV  )	r$   r¢  rl   rL   rÉ   r¯  rœ  r›  Úturns	   &&$$     r   Úregister_subagentÚRelayRuntime.register_subagent,  s  € ô
   §	¡	Ð*=Ó >× DÐ DÀ"ÓEÐÜ˜uŸy™yÐ);Ó<×BÐBÀÓCÐß ×(8Ð<MÔ<aÙØ×$Ñ$ lÐ4EÐ%FÓGˆØ &¢™°F·M±MˆÜÐ,Ó-ˆØÒ §¡Ò 7¸D¿J¹J¿O¹OÈtÓ<SØ ŸK™KˆMØ× × Ó Ø�}�}ˆ}Ø÷ !Ñ ð 8I×"Ñ"Ð#3Ñ4ØÒ(ØBO×-Ñ-Ð.>Ñ?÷ !ð ×"Ñ" LÐ2BÐ#CÈhÐ"Ó`Ð`÷ !× ús   ÃD8Ã; D8Ä8E	c               ó    € V ^8„  d   QhRRRR/# ©r   r¢  rE   r   r   r   )r   s   "r   r   rL  B  s   € ÷ 4ñ 4¨ð 4¸Dñ 4r   c                óª   € \        VP                  R4      ;'       g    R4      pV'       d'   V P                  RV/4       V P                  V4       R# R# )z=Close a delegated session and forget its parent relationship.r¯  rS   rÈ   N)rC   r+   Úclose_sessionÚ_forget_subagent)r$   r¢  r¯  s   && r   Úunregister_subagentÚ RelayRuntime.unregister_subagentB  sJ   € ä˜uŸy™yÐ);Ó<×BÐBÀÓCÐßØ×Ñ Ð.>Ð?Ô@Ø×!Ñ!Ð"2Ö3ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   rÈ   rC   r   r   r   )r   s   "r   r   rL  I  s   € ÷ @ñ @¨3ð @°4ñ @r   c                	óØ   € V P                   ;_uu_ 4        V P                  P                  VR 4       V P                  P                  VR 4       R R R 4       R #   + '       g   i     R # ; ir   )rR  rU  r|   rV  ©r$   rÈ   s   &&r   r»  ÚRelayRuntime._forget_subagentI  sI   € Ø× × Ó Ø×"Ñ"×&Ñ& z°4Ô8Ø×)Ñ)×-Ñ-¨j¸$Ô?÷ !× × Ò ús   •9AÁA)	c               ó    € V ^8„  d   QhRRRR/# ©r   rÈ   rC   r   r£  r   )r   s   "r   r   rL  N  s   € ÷ 2ñ 2 #ð 2Ð*=ñ 2r   c                óž   € V P                   ;_uu_ 4        V P                  P                  V4      uuRRR4       #   + '       g   i     R# ; i)zARegistry lookup (closing sessions included) without creating one.N)rR  rT  r+   rÀ  s   &&r   Ú_lookupÚRelayRuntime._lookupN  s/   € à× × Ó Ø—>‘>×%Ñ% jÓ1÷ !× × Ó ús	   •;»A	c               ó    € V ^8„  d   QhRRRR/# rÃ  r   )r   s   "r   r   rL  S  s   € ÷ 8ñ 8 cð 8Ð.Añ 8r   c                ó„  € V P                   ;_uu_ 4        V P                  '       d   RM-V P                  P                  \	        T;'       g    R4      4      pRRR4       Xf   R# VP
                  ;_uu_ 4        VP                  '       d   RMTuuRRR4       #   + '       g   i     LK; i  + '       g   i     R# ; i)z;Return an active Hermes Relay session without creating one.NrS   )rR  rZ  rT  r+   rC   rÎ   rÏ   )r$   rÈ   rï   s   && r   Úget_sessionÚRelayRuntime.get_sessionS  sw   € à× × Ó Ø"ŸmŸm˜m‘d°·±×1CÑ1CÄCÈ
×HXÐHXÐVXÓDYÓ1ZˆG÷ !àŠ?ÙØ�\�\‹\Ø"Ÿ?Ÿ?˜?‘4°÷ Š\÷	 !× ú÷ �\ˆ\ús   •7BÁBÁ:B.ÂB+	Â.B?	c               ó$   € V ^8„  d   QhRRRRRR/# )r   rï   rÇ   Úallow_closingrŒ   r   zcontextvars.Contextr   )r   s   "r   r   rL  \  s"   € ÷ ñ ¨ð Èð ÐQdñ r   c               óÆ  € VP                   ;_uu_ 4        VP                  '       d   V'       g   \        R4      hVP                  e   VP                  f   \        R4      hVP                  P                  4       pRRR4       \        P                  ! 4       pXP                  4        F!  w  rVVP                  VP                  V4       K#  	  V#   + '       g   i     L\; i)zhCopy the current context and overlay the session's saved Relay vars (a copy: re-entrant from callbacks).zHermes Relay session is closingNz+Hermes Relay session context is unavailable)rÎ   rÏ   rô   rÐ   rp   Úcopyr�  Úcopy_contextrƒ   r™  r  )r$   rï   rÌ  Úrelay_contextrÐ   Úvariabler‰   s   &&$    r   Ú_session_contextÚRelayRuntime._session_context\  sœ   € à�\�\‹\Ø��ˆ§}Ü"Ð#DÓEÐEØ�‰Ò&¨'¯.©.Ò*@Ü"Ð#PÓQÐQØ#ŸO™O×0Ñ0Ó2ˆM÷ ô ×*Ò*Ó,ˆØ,×2Ñ2Ö4‰OˆHØ�K‰K˜Ÿ™ eÖ,ñ  5àˆ÷ �\ús   •C°ACÃC 	rÌ  rQ   c               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# ©r   rï   rÇ   rð   rñ   rò   r   rÌ  rŒ   rQ   rW   r†   r   r   )r   s   "r   r   rL  i  sF   € ÷ 
ñ 
Ø#ð
Ø/Að
ØJMð
àð
à.:ð
àMPð
ð 
ñ
r   c          	     ó¤   € V P                  4       ;_uu_ 4        V P                  ! W.VO5RVRV/VB uuRRR4       #   + '       g   i     R# ; i)zÿRun a Relay operation against a session's isolated scope stack.
``timeout`` bounds the native call on the daemon executor (``TimeoutError`` on breach); ``None``
runs synchronously. Lifecycle ops pass ``SCOPE_OP_TIMEOUT``: a wedged pipeline costs one span.rÌ  rQ   N)Ú
_operationrõ   )r$   rï   rð   rÌ  rQ   rò   r†   s   &&&$$*,r   rö   ÚRelayRuntime.run_in_sessioni  sQ   € ð �_‰_×ÕØ×1Ò1ØðØ$(òØ8EðØOVðØZ`ñ÷ ××Óús	   ™>¾A	c               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# rÕ  r   )r   s   "r   r   rL  u  sF   € ÷ ñ Ø#ðØ/AðØJMðàðà.:ðàMPðð 
ñr   c               óž  a aaaa
a€ S P                  WR7      o
R VVVV 3R lloVf   S
P                  S4      # RV R2p \        4       P                  S
P                  S4      p TP                  TR7      #   \         d    \        T
T3R lRTT R	2R
7      u # i ; i  \         d"   p	\        T RTP                   R24      T	hRp	?	ii ; i)z?Run inside a session whose host-level lifetime is already held.©rÌ  c               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   Ú<RelayRuntime._run_in_session_untracked.<locals>.__annotate__|  s   € ÷ 	-ñ 	-˜ñ 	-r   c                 óH   <€ SP                   P                  4        S! S / SB # r   )ro   rœ   )rò   rð   r†   r$   s   €€€€r   ÚinvokeÚ6RelayRuntime._run_in_session_untracked.<locals>.invoke|  s#   ø€ Ø�J‰J×&Ñ&Ô(Ù˜TÐ, VÑ,Ð,r   NzRelay scope operation exceeded Úsc                 ó&   <€ S P                  S4      # r   )r™  )rÐ   rß  s   €€r   rC  Ú8RelayRuntime._run_in_session_untracked.<locals>.<lambda>‰  s   ø€ ˜Ÿ™ FÔ+r   zrelay-scope-op-exitzT during interpreter shutdown; abandoning the native call so process exit can proceed)rV   rQ   rR   rŽ  z
 (session=u[   ); abandoning the native call so the agent can continue â€” the span for this scope is lost)
rÒ  r™  r—  r˜  rô   rj   r\   ÚFuturesTimeoutErrorr   rÈ   )r$   rï   rð   rÌ  rQ   rò   r†   Úexceededr�  r_   rÐ   rß  s   f&f$$jl   @@r   rõ   Ú&RelayRuntime._run_in_session_untrackedu  só   ý€ ð
 ×'Ñ'¨Ð'ÓMˆ÷	-ó 	-ð Š?Ø—;‘;˜vÓ&Ð&Ø4°W°I¸QÐ?ˆð		Ü'Ó)×0Ñ0°·±¸fÓEˆFð	Ø—=‘=¨�=Ó1Ð1øô ô 	ô )Ý+Ð2GÐQXØ#+ *ð -3ð !3ôò ð	ûô #ô 	ÜØ�*˜J w×'9Ñ'9Ð&:ð ;Pð Póð ðûð	ús*   Á$A8 Á&B  Á8"BÂBÂ CÂ+CÃCc               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r   rï   rÇ   rð   rñ   rò   r   rÌ  rŒ   r†   r   r   )r   s   "r   r   rL  •  sF   € ÷ Dñ DØ#ðDØ/AðDØJMðDàðDà/2ðDð 
ñDr   c             �  ó  a aaa"  € S P                  4       ;_uu_ 4        S P                  WR7      pR VVVV 3R llpVP                  \        P                  V! 4       4      G Rj  x€L
 uuRRR4       #  L  + '       g   i     R# ; i5i)zACreate and await an operation inside the session's saved context.rÛ  c               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   Ú7RelayRuntime.run_in_session_async.<locals>.__annotate__�  s   € ÷ Oñ O #ñ Or   c               “  ó¤   <"  € SP                   P                  4        S! S/ SB p \        P                  ! V 4      '       d   V G R j  x€L
 # T #  L5ir   )ro   rœ   rt   Úisawaitable)r\   rò   rð   r†   r$   s    €€€€r   rß  Ú1RelayRuntime.run_in_session_async.<locals>.invoke�  sD   øé € Ø—
‘
×*Ñ*Ô,Ù! 4Ð2¨6Ñ2�Ü'.×':Ò':¸6×'BÒ'B˜V—|ÐNÈÐN‘|ùs   ƒAAÁAÁAN)r×  rÒ  r™  ÚasyncioÚcreate_task)r$   rï   rð   rÌ  rò   r†   rÐ   rß  s   f&f$jl  r   Úrun_in_session_asyncÚ!RelayRuntime.run_in_session_async•  sh   ûé € ð
 �_‰_×ÕØ×+Ñ+¨GÐ+ÓQˆG÷Oó Oð
 !Ÿ™¤W×%8Ñ%8¹&»(ÓC×C÷ Òñ D÷ ×Ðüs/   †BŸAA7Á&A5Á'A7Á*BÁ5A7Á7B	Â	Bc               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   rL  ¤  s   € ÷ *ñ * $ñ *r   c                ó  € V P                   ;_uu_ 4        V P                  '       d   \        R4      hV ;P                  ^,          un        V P                  P                  4        RRR4       R#   + '       g   i     R# ; i)z9Admit one Relay call while keeping process plugins alive.z%Hermes Relay runtime is shutting downN)rR  rZ  rô   r_  r^  r2  r*   s   &r   Ú_begin_operationÚRelayRuntime._begin_operation¤  sU   € à× × Ó Ø�}�}ˆ}Ü"Ð#JÓKÐKØ×#Ò# qÕ(Õ#Ø×!Ñ!×'Ñ'Ô)÷	 !× × Ò ús   •AA0Á0B	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   rL  ¬  s   € ÷ ,ñ , ñ ,r   c                	óð   € V P                   ;_uu_ 4        V ;P                  ^,          un        V P                  ^ 8X  d   V P                  P                  4        RRR4       R#   + '       g   i     R# ; i)é   N)rR  r_  r^  r  r*   s   &r   rú   ÚRelayRuntime._end_operation¬  sN   € Ø× × Ó Ø×#Ò# qÕ(Õ#Ø×&Ñ&¨!Ô+Ø×%Ñ%×)Ñ)Ô+÷ !× × Ò ús   •AA$Á$A5	c              #  ó‚   "  € V P                  4         Rx € V P                  4        R#   T P                  4        i ; i5i)zH``_begin_operation`` / ``_end_operation`` around one tracked Relay call.N)rô  rú   r*   s   &r   r×  ÚRelayRuntime._operation²  s3   é € ð 	×ÑÔð	"Ûà×ÑÖ!øˆD×ÑÕ!üs   ‚?”* ˜?ª<¼?c               ó   € V ^8„  d   QhRR/# )r   r   rå   r   )r   s   "r   r   rL  »  s   € ÷ )ñ )Ð)<ñ )r   c                ó8   € V P                  4        \        V 4      # )z>Retain plugin lifetime for work that outlives one Relay await.)rô  rå   r*   s   &r   Úacquire_operation_leaseÚ$RelayRuntime.acquire_operation_lease»  s   € à×ÑÔÜ" 4Ó(Ð(r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   rÈ   rC   Ú	tool_namerò   rE   r   r   )r   s   "r   r   rL  À  s*   € ÷ <ñ <¸3ð <È3ð <ÐVdð <Ðiwñ <r   c               ó*  € \        \        V P                  RR4      RR4      pV P                  4       ;'       d    \        V4      pV'       d   V P	                  RV/4      MRpVf   V# V P                  WdW#4      p\        V\        4      '       d   V# T# )zCApply Relay request rewriting before Hermes authorizes a tool call.ÚtoolsNÚrequest_interceptsrÈ   )r—   ro   rƒ  r˜   r�  rö   rN   rÂ   )r$   rÈ   r  rò   r  Úmanagedrï   r\   s   &$$$    r   Úapply_tool_request_interceptsÚ*RelayRuntime.apply_tool_request_interceptsÀ  s‰   € ä$¤W¨T¯Z©Z¸À$Ó%GÐI]Ð_cÓdÐØ×0Ñ0Ó2×SÐS´xÐ@RÓ7SˆßEL�$×%Ñ% |°ZÐ&@ÔAÐRVˆØŠ?ØˆKØ×$Ñ$ WÀ)ÓRˆÜ# F¬D×1Ò1ˆvÐ;°tÐ;r   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   rp   r   rk   rE   rl   Úsession_rootÚdrain_limitrÑ   r   zBaseException | Noner   )r   s   "r   r   rL  Ê  s<   € ÷ ñ ØðØ&4ðØ@NðØ^aðØpsðà	ñr   c          	     óæ  € \         P                  ! \        4      ;_uu_ 4        \        V P                  WVR7        RRR4       R#   + '       g   i     M; i^ p\        T4       Fµ  p\        T P                  4      pTe   \        Y�4      '       d    MŠTe   \        Y„4      '       d   YJd    Mn T P                  T4      ;'       g    RRRR/p	\        T P                  Y‰TR7       T^,          pKŽ    \         d    \        P                  RRR7         Mi ; i	  T'       d   \        P                  R	Ya4        \        T P                  YTR7       R#   \         d   p
T
u Rp
?
# Rp
?
ii ; i)
zºPop ``handle``; if that fails, drain orphans above it and retry once; return the retry's error.
Must run inside ONE ``run_in_session`` callback so ContextVar stack views stay consistent.rŽ   Nr`   Ú	cancelledzhermes.orphan_drainTz(Hermes Relay orphaned scope drain failedr  z;Hermes Relay drained %d orphaned scope(s) before closing %s)r™   rš   r›   rŠ   ro   Úranger�   r�   rt  r¹   rº   )r$   rp   rk   rl   r
  r  ÚdrainedÚ_r‘   Úorphan_outputÚ	retry_excs   &&$$$$     r   Ú_pop_with_drainÚRelayRuntime._pop_with_drainÊ  s8  € ô
 × Ò ¤×+Õ+Ü˜DŸJ™J¨ÈÕQØ÷ ,×+×+Ñ+úð ˆÜ�{Ö#ˆAÜ˜tŸz™zÓ*ˆCØŠ{œl¨3×7Ò7ÙàÒ'¬L¸×,KÒ,KÐPVÓPjÙðØ $× @Ñ @ÀÓ E÷ !ð !Ø˜{Ð,AÀ4ðJ�ô   §
¡
¨CÐPXÕYØ˜1•’øÜô Ü—‘ÐIÐTX�ÔYÚðúñ $÷  Ü�N‰NÐXÐZaÔjð	Ü˜DŸJ™J¨ÈÕQÙøÜô 	ØÕûð	úsA   £AÁA	Â3C5Ã(C5Ã5"DÄDÄ?E ÅE0Å$E+Å%E0Å+E0rk   Úfailure_labelzscope close failedr  Úoperation_already_heldc               ó8   € V ^8„  d   QhRRRRRRRRR	R
RRRRRR/# )r   rï   rÇ   rp   r   rk   rr  rÌ  rŒ   r  rC   r  rÑ   r  r   rK  r   )r   s   "r   r   rL  ë  sX   € ÷ Jñ JØ#ðJØ-0ðJØ=RðJØjnðJàðJà@CðJàbfðJð 
ñJr   c               ó$  € Vf   R# V'       d   V P                   MV P                  p T! YP                  Y#;'       g    / \        V P                  4      VP
                  Wd\        R7	      p	V	f   R# V RV	 2#   \         d   p
T
p	 Rp
?
LRp
?
ii ; i)a  Pop ``handle``, draining orphaned children in the same session context; failure string or None.
Relay scopes are strict LIFO; empty-stream retries + interrupt can abandon a physical LLM scope
above TURN/SESSION. Drain+close is bounded so a wedged pipeline never blocks completion.N)rk   rl   r
  r  rÌ  rQ   ú: )rõ   rö   r  rJ   rB   rp   rš  r›   )r$   rï   rp   rk   rÌ  r  r  r  rö   Úfailurer_   s   &&&$$$$$   r   Ú_close_scope_handleÚ RelayRuntime._close_scope_handleë  s�   € ð Š>Ùß<R˜$×8Ò8ÐX\×XkÑXkˆð	Ù$Ø×-Ñ-¨v¿l¸lÈÜ)¨$¯/©/Ó:ÈÏÉØ'ÔN^ôˆGð ’ˆtÐI¨}¨o¸RÀ¸yÐ,IÐIøô ô 	Ø�Gûð	ús   ¨A8 ¾-A8 Á8BÂB
Â
Bc               ó    € V ^8„  d   QhRRRR/# r¸  r   )r   s   "r   r   rL  ÿ  s   € ÷ 'ñ ' >ð '°dñ 'r   c           	     ó  € \         P                  ! \        4      ;_uu_ 4        V P                  4       ;_uu_ 4        V P	                  V4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)zXClose one session scope and remove it from the core registry (no-op once shutting down).N)r™   rš   rô   r×  Ú_close_session)r$   r¢  s   &&r   rº  ÚRelayRuntime.close_sessionÿ  sJ   € ä× Ò ¤×.Õ.°·±×0AÕ0AØ×Ñ Ô&÷ 1B×.Ñ.×0A×0Aú×.×.Ð.ús"   £A3¼A 	ÁA3Á A0Á+A3Á3B	c               ó    € V ^8„  d   QhRRRR/# r¸  r   )r   s   "r   r   rL    s   € ÷ bñ b Nð b°tñ br   c                óŽ  € \        V4      pV P                  V4      pVf   V P                  V4       R# RpVP                  ;_uu_ 4        VP                  '       d    RRR4       R# RVn        VP
                  e!   V P                  W3P
                  / RRRR7      pRRR4       V P                  ;_uu_ 4        V P                  P                  V4      VJ d   V P                  V V P                  V4       RRR4       V'       d   \        P                  RW$4       R# R#   + '       g   i     LŒ; i  + '       g   i     LE; i)z>Close one session already admitted by the host lifecycle gate.NTzsession scope close failed)rk   rÌ  r  r  z.Hermes Relay session %s closed with errors: %s)r¥  rÅ  r»  rÎ   rÏ   rp   r  rR  rT  r+   r¹   rº   )r$   r¢  rÈ   rï   r  s   &&   r   r  ÚRelayRuntime._close_session  sý   € ä  Ó'ˆ
Ø—,‘,˜zÓ*ˆØŠ?Ø×!Ñ! *Ô-ÙØˆØ�\�\‹\Ø��ˆØ÷ ‰\ð #ˆGŒOØ�~‰~Ò)Ø×2Ñ2ØŸ^™^°BÀdØ">ÐW[ð 3ó �÷ ð × × Ó Ø�~‰~×!Ñ! *Ó-°Ó8Ø—N‘N :Ð.Ø×!Ñ! *Ô-÷ !÷ Ü�N‰NÐKÈZÖañ ÷ �\ú÷ !× ús   Á
D!Á(5D!Â9>D4Ä!D1	Ä4E	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   rL    s   € ÷ \ñ \˜$ñ \r   c                óV  a € S P                   ;_uu_ 4        S P                  '       d    RRR4       R# R;S n        S n        S P                  ^ 8„  pRRR4       X'       g   S P	                  4        R# \
        P                  ! V 3R lRS P                  R,           2RR7      p VP                  4        R#   + '       g   i     Ln; i  \         dT    S P                   ;_uu_ 4        RS n        RRR4       M  + '       g   i     M; i\        P                  RRR	7        R# i ; i)
z;Close core scopes and release process plugin configuration.NTc                 óX   <€ S P                   P                  4       S P                  4       3# r   )r^  ÚwaitÚ_finish_shutdownr*   s   €r   rC  Ú'RelayRuntime.shutdown.<locals>.<lambda>)  s"   ø€ ˜D×1Ñ1×6Ñ6Ó8¸$×:OÑ:OÓ:QÑRr   zhermes-nemo-relay-shutdown-:Né   N)rc   rV   rd   Fz.Hermes Relay deferred shutdown could not startr  )rR  r[  rZ  r_  r(  r   re   rB   rf   r›   r¹   rº   )r$   Úhas_active_operationsÚthreads   f  r   rh  ÚRelayRuntime.shutdown  sé   ø€ à× × Ó Ø×%×%Ð%Ø÷ !Ñ ð 6:Ð9ˆDÔ" T¤]Ø$(×$;Ñ$;¸aÑ$?Ð!÷	 !÷
 %Ø×!Ñ!Ô#ÙÜ×!Ò!ÜRØ.¨t¯©¸rÕ/BÐ.CÐDÈTô
ˆð	\Ø�L‰LŽN÷ !× ûô ô 	\Ø×$×$Ó$Ø).�Ô&÷ %×$×$Ð$úä�N‰NÐKÐVZˆN×[ð	\ús:   –B7´B7Â%C
 Â7C	Ã
D(Ã)C:Ã1	D(Ã:D
ÄD(Ä'D(c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   rL  3  s   € ÷ *ñ * $ñ *r   c                	ó¢  €  V P                   ;_uu_ 4        \        V P                  4      pR R R 4       X F  p\        RV P                  RV/4       K  	  V P
                  '       d”   V P                  4       '       d   V P                  \        4       \        P                  V 4       RV n        \        P                  ! \        4      ;_uu_ 4        \        P                  ! V P                   4       R R R 4       M V P                   ;_uu_ 4        V P(                  P+                  4        R R R 4       R #   + '       g   i     EL; i  + '       g   i     L]; i  \         dT    T P                   ;_uu_ 4        RT n        R R R 4       M  + '       g   i     M; i\$        P'                  RRR7        R # i ; i  + '       g   i     R # ; i)Nzruntime operationrÈ   FzHermes Relay shutdown failedTr  )rR  r�   rT  Ú_warn_on_errorr  rb  rc  r  re  r`  rû   r™   rš   r›   rf  Ú
unregisterrh  r[  r¹   rº   r]  r  )r$   Úsession_idsrÈ   s   &  r   r(  ÚRelayRuntime._finish_shutdown3  sG  € ð	Ø×$×$Ó$Ü" 4§>¡>Ó2�÷ %ã)�
ÜÐ2°D×4GÑ4GÈ,ÐXbÐIcÖdñ *à×4×4Ð4Ø×'Ñ'×)Ò)Ø×2Ñ2Ô3SÔTÜ%×-Ñ-¨dÔ3Ø8=�Ô5Ü×(Ò(¬×3Õ3Ü×%Ò% d§m¡mÔ4÷ 4Ð3ð 5ð × × Ó Ø×#Ñ#×'Ñ'Ô)÷ !Ñ ÷! %×$Ð$ú÷ 4×3ûäô 	Ø×$×$Ó$Ø).�Ô&÷ %×$×$Ð$úä�N‰NÐ9ÀDˆNÔIÚð		ú÷
 !× Ð úsv   ‚E –D5¬;E Á(E Á>AE Ã!E	Ã2E ÄF=Ä5E	Å 	E Å	E	ÅE ÅE ÅF:Å;FÆ	F:ÆFÆF:Æ9F:Æ=G	)r_  rZ  rX  rY  rW  rS  r^  rb  ra  rT  rR  r]  r[  rV  rU  rI  ro   rB   r   )&r2   r3   r4   r5   r6   r%   rc  ro  rt  rd  r  rƒ  rž  r�  r«  rµ  r¼  r»  rÅ  rÉ  rÒ  rö   rõ   rð  rô  rú   r™   Úcontextmanagerr×  rþ  r  r  r  rº  r  rh  r(  r7   r   r   r   rè   rè   �  s\  † ÙHñ'Àt÷ 'ð 'õ0Yõ@õDõ4õ8õ
3ð
"à#÷"ð>ð ð	ð
 +/ðð ÷õ@ð@aØJNðaà÷aõ,4õ@õ
2õ
8õð
à#ð
à=A÷
ðà#ðà=A÷ð@Dà#÷Dõ*õ,ð ×Ññ"ó ð"õ)õ
<õðBJØUYðJØqvðJà1ðJàFHðJàin÷Jõ('õ
bõ4\÷**ñ *r   rè   T)Úfrozenc                  óz   € ] tR tRt$ RtR]R&   R]R&   R R lt]R R	 l4       t]t	]! R
 4      t
]! R 4      tRtR# )ÚNoopRelayRuntimeiI  zDExplicit reduced-capability host for platforms without Relay wheels.rC   rI  r¨  c               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   ÚNoopRelayRuntime.__annotate__P  s*   € ÷ ñ ¸3ð È3ð ÐVdð Ðiwñ r   c               	ó   € V# r   r   )r$   rÈ   r  rò   s   &$$$r   r  Ú.NoopRelayRuntime.apply_tool_request_interceptsP  s   € Øˆr   c               ó    € V ^8„  d   QhRRRR/# rw  r   )r   s   "r   r   r9  T  s   € ÷ ñ ¨3ð °4ñ r   c                	ó   € R # r   r   )rx  s   &r   rd  Ú)NoopRelayRuntime.retain_managed_executionS  s   € ár   c                 	ó   € R # )Fr   r   r   r   rC  ÚNoopRelayRuntime.<lambda>X  s   € ±Ur   c                 	ó   € R # r   r   r   r   r   rC  r@  Y  s   € ¡Dr   r   N)r2   r3   r4   r5   r6   rÖ   r  Ústaticmethodrd  r  rƒ  rh  r7   r   r   r   r7  r7  I  sF   ‡ áNàÓØƒKõð ôó ðð !9ÐÙ ,©]Ó ;ÐÙ™LÓ)„Hr   r7  c                  óJ   € ] tR tRtRtR R ltRRR/R R	 llltR
 R ltRtR# )ÚRelayHostRegistryi_  z=Own exactly one Relay host for each canonical Hermes profile.c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   ÚRelayHostRegistry.__annotate__b  s   € ÷ /ñ /˜$ñ /r   c                	óH   € \         P                  ! 4       V n        / V n        R # r   )r   r×   r#   Ú_hostsr*   s   &r   r%   ÚRelayHostRegistry.__init__b  s   € Ü—_’_Ó&ˆŒ
Ø,.ˆŽr   NÚcreateTc               ó$   € V ^8„  d   QhRRRRRR/# )r   rI  rK  rJ  rŒ   r   zRelayHost | Noner   )r   s   "r   r   rF  f  s"   € ÷ ñ  zð ÀTð ÐUeñ r   c          	     	óº  € T;'       g    \        4       pV P                  ;_uu_ 4        V P                  P                  V4      pVf	   V'       g   VuuR R R 4       #  \	        VR7      pW@P                  V&   VuuR R R 4       #   \
         d8   p\        P                  RRR7       \        T\        T4      R7      p R p?LWR p?ii ; i  + '       g   i     R # ; i)N)rI  z*Hermes Relay runtime initialization failedTr  )rI  r¨  )
rO  r#   rH  r+   rè   r›   r¹   rº   r7  rC   )r$   rI  rJ  rˆ   r³  r_   s   &&$   r   Úfor_profileÚRelayHostRegistry.for_profilef  s¨   € Ø×2Ð2Ô0Ó2ˆØ�Z�Z‹ZØ—;‘;—?‘? 3Ó'ˆDØÒ§vØ÷ ŠZðJÜ#°Ô4�ð  $�K‰K˜ÑØ÷ ŠZøô ô JÜ—‘ÐKÐVZ�Ô[Ü'°CÄÀCÃÔI•ûðJú÷ �ZˆZús;   ©'C	ÁC	ÁBÁ*C	ÂCÂ-CÂ<C	ÃCÃC	Ã	C	c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   rF  t  s   € ÷ ñ ˜dñ r   c                	óì   € V P                   ;_uu_ 4        \        V P                  P                  4       4      / uqn        R R R 4       X F  pVP	                  4        K  	  R #   + '       g   i     L+; ir   )r#   r�   rH  r‚   rh  )r$   Úhostsr³  s   &  r   Úshutdown_allÚRelayHostRegistry.shutdown_allt  sI   € Ø�Z�Z‹ZÜ!% d§k¡k×&8Ñ&8Ó&:Ó!;¸RÐˆE”;÷ ãˆDØ�M‰MŽOó ÷ �Zús   •+A#Á#A3	)rH  r#   r   )	r2   r3   r4   r5   r6   r%   rM  rR  r7   r   r   r   rD  rD  _  s%   † ÙGõ/ñÈD÷ ð ÷ñ r   rD  c                  ó„   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	]R
&   RtR]R&   RtR]R&   RtR]R&   R R lt	Rt
R# )ÚConversationLeasei~  z?A resumable reference to one profile-scoped conversation scope.rC   rI  rÈ   ÚplatformÚ	RelayHostr³  r£  rï   rS   rÉ   FrŒ   ÚreleasedÚturn_cwdc               ó   € V ^8„  d   QhRR/# )r   r   úRelayRuntime | Noner   )r   s   "r   r   ÚConversationLease.__annotate__‹  s   € ÷ gñ gÐ1ñ gr   c                óz   € \        V P                  \        4      '       d   V P                  e   V P                  # R# )z@Return the real Relay host when this lease owns an open session.N)rN   r³  rè   rï   r*   s   &r   Úlive_runtimeÚConversationLease.live_runtime‹  s+   € ä& t§y¡y´,×?Ò?ÀDÇLÁLÒD\ˆt�y‰yÐfÐbfÐfr   r   N)r2   r3   r4   r5   r6   rÖ   rÉ   rX  rY  r^  r7   r   r   r   rU  rU  ~  sK   ‡ áIàÓØƒOØƒMØ
ƒOØ Ó ØÐ�sÓØ€HˆdÓØ€HˆcÓ÷gñ gr   rU  c                  ó"  € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	]R
&   ]! ]RR7      t	R]R&   ]! ]
P                  RR7      tR]R&   ]! ]
P                  RR7      tR]R&   ]! RRR7      tR]R&   ]! RRR7      tR]R&   RtR]R&   RtR]R&   RtR# )ÚRelayTurnContexti�  z;Runtime-only context for one Hermes turn or top-level task.rU  r²  rC   Úturn_idÚtask_idNr   rp   FrÊ   rE   Úlogical_llm_callsrÍ   Úlogical_llm_lockÚfinalize_lock)ÚdefaultrÌ   úRelayTurnContext | NoneÚ_previous_turnrŒ   Ú_active_registeredTÚrelay_enabledÚclosedr   )r2   r3   r4   r5   r6   rÖ   rp   r   rÂ   rd  r   r×   re  rf  ri  rj  rk  rl  r7   r   r   r   ra  ra  �  s–   ‡ áEàÓØƒLØƒLØ€FˆCÓÙ(-¸dÈÔ(OÐ�~ÓOÙ(-¸i¿o¹oÐTYÔ(ZÐ�oÓZÙ%*¸9¿?¹?ÐQVÔ%W€M�?ÓWÙ.3¸DÀuÔ.M€NÐ+ÓMÙ$¨U¸Ô?Ð˜Ó?Ø€M�4ÓØ€FˆD×r   ra  Úhermes_relay_turn)rg  z/contextvars.ContextVar[RelayTurnContext | None]Ú_CURRENT_TURNÚ#hermes_relay_managed_callback_depthzcontextvars.ContextVar[int]Ú_MANAGED_CALLBACK_DEPTHc               #  óÒ   "  € \         P                  \         P                  4       ^,           4      p  Rx € \         P                  V 4       R#   \         P                  T 4       i ; i5i)z­Mark the current context as inside a managed Relay callback: everything the wrapped ``invoke()``
transitively calls (incl. work forwarded via copy_context()) runs unmanaged.N)rp  r  r+   r0   )Útokens    r   Úmanaged_callback_guardrs  ®  sK   é € ô $×'Ñ'Ô(?×(CÑ(CÓ(EÈÕ(IÓJ€Eð-Ûä×%Ñ% eÖ,øÔ×%Ñ% eÕ,üs   ‚/A'²A ¶A'ÁA$Á$A'c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rE  rC   rð   rñ   rò   r   r†   r   r   )r   s   "r   r   r   ¹  s2   € ÷ ñ ˜ð Ð(:ð À3ð ÐRUð ÐZ]ñ r   c                óh   €  V! V/ VB #   \          d    \        P                  RT RR7        R# i ; i)zZRun fail-open telemetry work: log ``Hermes Relay <what> failed`` and return None on error.zHermes Relay %s failedTr  N)r›   r¹   rº   )rE  rð   rò   r†   s   &&*,r   r0  r0  ¹  s<   € ðÙ˜Ð( Ñ(Ð(øÜô Ü�‰Ð/°ÀˆÔEÚðús   ‚
 Š#1°1c               ó    € V ^8„  d   QhRRRR/# )r   rE  rC   r   z2Callable[[Callable[..., Any]], Callable[..., Any]]r   )r   s   "r   r   r   Â  s   € ÷ ñ �Sð ÐOñ r   c                ó   a € R V 3R llpV# )zZDecorator form of ``_warn_on_error`` for telemetry hooks that must never block the caller.c               ó    € V ^8„  d   QhRRRR/# )r   rU   rñ   r   r   )r   s   "r   r   Ú _fail_open.<locals>.__annotate__Ä  s   € ÷ ñ Ð#ð Ð(:ñ r   c                óP   <a € \         P                  ! S 4      R  V V3R ll4       pV# )c               ó$   € V ^8„  d   QhRRRRRR/# )r   rò   r   r†   r   r   )r   s   "r   r   Ú._fail_open.<locals>.wrap.<locals>.__annotate__Æ  s!   € ÷ 	=ñ 	=˜3ð 	=¨#ð 	=°#ñ 	=r   c                 ó$   <€ \        SS.V O5/ VB # r   )r0  )rò   r†   rU   rE  s   *,€€r   ÚguardedÚ)_fail_open.<locals>.wrap.<locals>.guardedÅ  s   ø€ ä! $¨Ð<¨TÒ<°VÑ<Ð<r   )Ú	functoolsÚwraps)rU   r~  rE  s   f €r   ÚwrapÚ_fail_open.<locals>.wrapÄ  s(   ù€ Ü	�Š˜Ó	÷	=ð 	=ó 
ð	=àˆr   r   )rE  r‚  s   f r   Ú
_fail_openr„  Â  s   ø€ ÷ð ð
 €Kr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rï   rÇ   ÚflagrC   r   r   r   )r   s   "r   r   r   Ì  s!   € ÷ )ñ ) ð )°Cð )¸Dñ )r   c                ó¤   € V P                   ;_uu_ 4        V P                  '       g   \        WR4       RRR4       R#   + '       g   i     R# ; i)zHSet a pending-rotation/close flag unless the session is already closing.TN)rÎ   rÏ   Úsetattr)rï   r†  s   &&r   Ú_flag_open_sessionr‰  Ì  s*   € à	��‹Ø��ˆÜ�G 4Ô(÷ 
��Šús	   •>¾A	c                  óp  € ] tR tRtRt]3R R lltR R ltR R ltR	R
RR
RRRR/R R llt	R R lt
RR/R R llt]R R l4       tR R ltR R lt]! R4      R R l4       t]! R4      R R
/R! R" ll4       tR# R$ ltR% R& ltR' R( lt]R) R* l4       t]R+ R, l4       t]R- R. l4       tR/ R0 ltR1tR# )2ÚRelaySessionCoordinatoriÓ  z=Own semantic conversation and turn lifetimes for Hermes core.c               ó    € V ^8„  d   QhRRRR/# )r   ÚregistryrD  r   r   r   )r   s   "r   r   Ú$RelaySessionCoordinator.__annotate__Ö  s   € ÷ Añ AÐ!2ð AÀtñ Ar   c                	ó–   € Wn         \        P                  ! 4       V n        / V n        \        P                  ! 4       V n        / V n        R # r   )r�  r   r×   Ú_initializer_lockÚ_session_initializersÚ_active_turns_lockÚ_active_turns)r$   r�  s   &&r   r%   Ú RelaySessionCoordinator.__init__Ö  s5   € Ø ŒÜ!*§¢Ó!2ˆÔØ`bˆÔ"Ü"+§/¢/Ó"3ˆÔØ>@ˆÖr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rV   rC   rð   z.Callable[[RelayRuntime, dict[str, Any]], None]r   r   r   )r   s   "r   r   rŽ  Ý  s#   € ÷ 8ñ 8°ð 8Ð@nð 8Ðswñ 8r   c                ó„   € V P                   ;_uu_ 4        W P                  V&   RRR4       R#   + '       g   i     R# ; i)zFRegister idempotent profile/session preparation before scope creation.N)r�  r‘  )r$   rV   rð   s   &&&r   Úregister_session_initializerÚ4RelaySessionCoordinator.register_session_initializerÝ  s+   € à×#×#Ó#Ø/7×&Ñ& tÑ,÷ $×#×#Ò#ús   •.®?	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r³  rè   rÐ   rE   r   r   r   )r   s   "r   r   rŽ  â  s&   € ÷ cñ c \ð c¸Nð cÈtñ cr   c                	ó(  € V P                   ;_uu_ 4        \        V P                  P                  4       4      pR R R 4       X F  w  rE V! W4       K  	  R #   + '       g   i     L&; i  \         d    \
        P                  RTRR7        KM  i ; i)Nz+Hermes Relay session initializer failed: %sTr  )r�  r�   r‘  rƒ   r›   r¹   rº   )r$   r³  rÐ   ÚinitializersrV   rð   s   &&&   r   Ú_prepare_sessionÚ(RelaySessionCoordinator._prepare_sessionâ  su   € Ø×#×#Ó#Ü × :Ñ :× @Ñ @Ó BÓCˆL÷ $ã*‰NˆDðcÙ˜Ö'ó +÷ $×#ûô
 ô cÜ—‘ÐLÈdÐ]a�×bðcús   •$AÁ	A*ÁA'	Á*#BÂBrÉ   rS   ÚmodelÚsession_cwdNrY  c               ó8   € V ^8„  d   QhRRRRRRRRRRRRR	RR
R/# )r   rI  rC   rÈ   rV  rÉ   rž  rŸ  rK  rY  r   rU  r   )r   s   "r   r   rŽ  ë  s\   € ÷ 
ñ 
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð  ð
ð ð
ð 
ñ
r   c               	óþ  € V P                   P                  V4      ;'       g    \        VR 4      pRp	\        V\        4      '       d&   RVRVRVRVRVRV/p
\        RV P                  WŠ4      p	Ve   \        V4      P                  RR	4      pMPVe   \        V4      P                  RR	4      pM0V	e+   V	P                  ;_uu_ 4        V	P                  pRRR4       MR	p\        WW8W”XR
7      #   + '       g   i     L; i)z Relay host creation was disabledNrI  rÈ   rV  rÉ   rž  rL   zconversation initializationrS   )rI  rÈ   rV  r³  rï   rÉ   rY  )r�  rM  r7  rN   rè   r0  Ú_open_conversation_sessionrP   r+   rÎ   rL   rU  )r$   rI  rÈ   rV  rÉ   rž  rŸ  rY  r³  rï   rÐ   Úeffective_turn_cwds   &$$$$$$$    r   Úacquire_conversationÚ,RelaySessionCoordinator.acquire_conversationë  sú   € ð �}‰}×(Ñ(¨Ó5×zÐzÔ9IÈ+ÐWyÓ9zˆØˆÜ�dœL×)Ò)à˜{¨L¸*ÀjÐRZØ#Ð%6¸ÀÈÈ{ðˆGô %Ð%BÀD×DcÑDcÐeiÓsˆGØÒÜ!-¨hÓ!7×!;Ñ!;¸EÀ2Ó!FÑØÒ$Ü!-¨kÓ!:×!>Ñ!>¸uÀbÓ!IÑØÒ Ø——“Ø%,§[¡[Ð"÷ �ð "$ÐÜ Ø#ÀXØÐK]ô
ð 	
÷	 —ús   ÃC,Ã,C<	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r³  rè   rÐ   rE   r   r£  r   )r   s   "r   r   rŽ    s'   € ÷ [ñ [¨|ð [Ànð [ÐYlñ [r   c                	ó
  € V P                  W4       VR ,          VR,          rCRVR,          ;'       g    R/pVP                  R4      pV'       d    WC8w  d   RVRV/pVP                  WuVR7      # VP                  R V/WVR7      # )rÈ   rÉ   úhermes.execution_surfacerV  ÚunknownrL   r¯  r°  )rœ  r+   rµ  r�  )r$   r³  rÐ   rÈ   rÉ   rl   rL   r¢  s   &&&     r   r¢  Ú2RelaySessionCoordinator._open_conversation_session  s“   € Ø×Ñ˜dÔ,Ø(/°Õ(=¸wÐGZÕ?[Ð%Ø.°¸
Õ0C×0PÐ0PÀyÐQˆØ�k‰k˜%Ó ˆßÐ!2Ô!@Ø(Ð*;Ð=OÐQ[Ð\ˆEØ×)Ñ)¨%ÈÐ)ÓLÐLØ×"Ñ" L°*Ð#=ÈÐ"ÓZÐZr   rl   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r²  rU  rb  rC   rc  rl   rr  r   ra  r   )r   s   "r   r   rŽ    s<   € ÷ +ñ +à ð+ð ð	+ð
 ð+ð (ð+ð 
ñ+r   c               	ó€  € VP                   '       d   \        R 4      h\        WVR7      pVP                  VP                  3pV P
                  ;_uu_ 4        V P                  P                  V4      '       d)   RVn        \        P                  RW!P                  4       M \        V4      0V P                  V&   RVn        RRR4       VP                  '       d   VP                  4       MRpVEe   \        RV P                  WqP                   4       \#        T;'       g    / 4      pTP%                  \'        VP(                  3/ RVP*                  ;'       g    R/B 4       \        R	VP,                  VP                   VP.                  P0                  P2                  \4        VP.                  P6                  P8                  VP                   P:                  \=        VP>                  4      V\@        R
7
      Vn        \B        P                  4       Vn"        \B        PG                  V4       V#   + '       g   i     ELt; i)z+Hermes Relay conversation lease is released)r²  rb  rc  FzJSkipping Relay instrumentation for concurrent Hermes turn %s in session %sTNzsegment rotationr¨  r©  zturn initialization)rp   r�  rl   rQ   )$rX  rô   ra  rI  rÈ   r’  r“  r+   rk  r¹   rº   r  rj  r^  r0  Ú_maybe_rotate_segmentrï   rÂ   r–  rJ   rB   rV  rö   ro   r{   r’  Ú
TURN_SCOPEr”  ÚFunctionrp   rP   rY  rš  rn  ri  r  )	r$   r²  rb  rc  rl   r´  rˆ   r³  Úturn_metadatas	   &&$$$    r   Ú
begin_turnÚ"RelaySessionCoordinator.begin_turn  s»  € ð �>�>ˆ>ÜÐLÓMÐMÜ eÀgÔNˆØ× Ñ  %×"2Ñ"2Ð3ˆØ×$×$Ó$Ø×!Ñ!×%Ñ% c×*Ò*à%*�Ô"Ü—‘Ø`Ø×-Ñ-õô
 ,.¨d«8¨*�×"Ñ" 3Ñ'Ø*.�Ô'÷ %ð (,×'9×'9Ð'9ˆu×!Ñ!Ô#¸tˆØÓäÐ-¨t×/IÑ/IÈ4×Q^ÑQ^Ô_Ü  § ¨RÓ0ˆMØ× Ñ Ü Ø—O‘Oñà1°5·>±>×3NÐ3NÀYÐOñôô )Ø% t×':Ñ':¸E¿M¹MÈ4Ï:É:×K[ÑK[×K`ÑK`Ü˜DŸJ™J×0Ñ0×9Ñ9À%Ç-Á-×BVÑBVÜ" 5§>¡>Ó2Ø&Ü(ôˆDŒKô ,×/Ñ/Ó1ˆÔÜ×Ñ˜$ÔØˆ÷? %×$Ð$ús   ÁA*H,È,H=	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r³  rè   rï   rÇ   r   r   r   )r   s   "r   r   rŽ  D  s&   € ÷ cñ c Lð c¸<ð cÈDñ cr   c                óæ   € \        4       pVR,          pVR,          ;'       d    VP                  pV'       g   V^ 8”  d2   VP                  V8¼  d   T P                  Y'       d   RMRR7       R# R# R# )zKRotate the session scope when compaction flagged it or the turn cap is hit.rß   rÞ   Ú
compaction)r¨  N)Ú_segments_configrÔ   rÓ   r«  )r³  rï   ÚconfigÚcaprµ  s   &&   r   r­  Ú-RelaySessionCoordinator._maybe_rotate_segmentC  sd   € ô "Ó#ˆØ�[Õ!ˆØ˜OÕ,×GÐG°×1GÑ1Gˆ
ß˜# œ' g×&;Ñ&;¸sÔ&BØ×%Ñ% gÆj±lÐVaÐ%Öbñ 'C™'r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r´  ra  r`   rC   r   r   r   )r   s   "r   r   rŽ  L  s"   € ÷ 4ñ 4Ð-ð 4¸3ð 4À4ñ 4r   c               	óø  € VP                   ;_uu_ 4        VP                  '       d   V P                  V4        R R R 4       R # RVn        VP                  pVP	                  4       p Ve   V P                  WAVR7       VP                  '       dz   Vev   \        P                  ! \        4      ;_uu_ 4        VP                  P                  ;_uu_ 4        VP                  ;P                  ^,          un        R R R 4       R R R 4        VP                  '       dN   \        VP                  \         4      '       d.   \#        RVP                  P$                  RVP&                  /4       V P)                  V4       V P                  V4       V P+                  V4        R R R 4       R #   + '       g   i     L¶; i  + '       g   i     LÁ; i  T P)                  T4       T P                  T4       i ; i  TP                  '       d¢   Tež   \        P                  ! \        4      ;_uu_ 4        TP                  P                  ;_uu_ 4        TP                  ;P                  ^,          un        R R R 4       M  + '       g   i     M; iR R R 4       M  + '       g   i     M; i TP                  '       dN   \        TP                  \         4      '       d.   \#        RTP                  P$                  RTP&                  /4       T P)                  T4       T P                  T4       M'  T P)                  T4       T P                  T4       i ; iT P+                  T4       i ; i  + '       g   i     R # ; i)NT©r`   zchild conversation finalizationr¯  )rf  rl  Ú_reset_turn_contextr²  r^  Ú_close_turn_scoperj  r™   rš   r›   rï   rÎ   rÓ   rÉ   rN   r³  rè   r0  r¼  rÈ   Ú_unregister_active_turnÚ_consume_deferred_close)r$   r´  r`   r²  r³  s   &&$  r   Úend_turnÚ RelaySessionCoordinator.end_turnL  so  € Ø××ÓØ�{�{ˆ{Ø×(Ñ(¨Ô.Ø÷  Ñð ˆDŒKØ—J‘JˆEØ×%Ñ%Ó'ˆDð4ØÒ#Ø×*Ñ*¨4¸wÐ*ÔGà×*×*Ð*¨tÒ/?Ü#×,Ò,¬Y×7Õ7¸¿¹×9K×9KÓ9KØŸ™×3Ò3°qÕ8Õ3÷ :L×7ð
3ð ×.×.Ð.´:¸e¿j¹jÌ,×3WÒ3WÜ&Ø=¸u¿z¹z×?]Ñ?]Ø/°×1AÑ1AÐBôð
 ×0Ñ0°Ô6Ø×,Ñ,¨TÔ2Ø×,Ñ,¨UÕ3÷3  Ñ÷ :L×9Kú×7×7ûð ×0Ñ0°Ô6Ø×,Ñ,¨TÕ2ûð ×*×*Ð*¨tÒ/?Ü#×,Ò,¬Y×7Õ7¸¿¹×9K×9KÓ9KØŸ™×3Ò3°qÕ8Õ3÷ :L×9K×9KÐ9Kú×7×7×7Ð7úð
3ð ×.×.Ð.´:¸e¿j¹jÌ,×3WÒ3WÜ&Ø=¸u¿z¹z×?]Ñ?]Ø/°×1AÑ1AÐBôð
 ×0Ñ0°Ô6Ø×,Ñ,¨TÕ2øð ×0Ñ0°Ô6Ø×,Ñ,¨TÕ2úØ×,Ñ,¨UÕ3ú÷3  ×ÐúsÇ   •%M(Á#M(Á(G5Á?8M(Â7F;	Ã$F(Ã:F;	ÄM(ÄGÄAGÅ*3M(Æ(F8Æ3F;	Æ;GÇM(Ç$G2Ç2M(Ç59M%È.JÉ$I:É1	JÉ:J
ÊJÊ	M%ÊJ&Ê!M%Ê*L,Ê<AL,Ì	#M%Ì,$MÍM%Í%M(Í(M9	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r³  rè   r´  ra  r`   rC   r   r   r   )r   s   "r   r   rŽ  h  s1   € ÷ Qñ Q lð QÐ:Jð QÐX[ð QÐ`dñ Qr   c               óÔ   € V P                  W#R7       VP                  VP                  P                  VP                  RV/RR7      pV'       d   \
        P                  RV4       R# R# )zGPop the turn's logical LLM children, then the turn scope itself (LIFO).r½  r`   zturn scope close failed©rk   r  z)Hermes Relay turn finalization failed: %sN)Ú_finish_logical_callsr  r²  rï   rp   r¹   rº   )r$   r³  r´  r`   r  s   &&&$ r   r¿  Ú)RelaySessionCoordinator._close_turn_scopeh  s^   € à×"Ñ" 4Ð"Ô9Ø×*Ñ*Ø�J‰J×Ñ §¡°YÀÐ4HÐXqð +ó 
ˆ÷ Ü�N‰NÐFÈÖPñ r   zdeferred session closec               ó    € V ^8„  d   QhRRRR/# ©r   r²  rU  r   r   r   )r   s   "r   r   rŽ  r  s   € ÷ 	Añ 	AÐ->ð 	AÀ4ñ 	Ar   c                óÄ  € VP                  4       pVf   R# VP                  P                  ;_uu_ 4        VP                  P                  ;'       d    VP                  P                  '       * pRRR4       X'       dO   V P                  VP                  VP                  R7      '       g    VP                  RVP                  /4       R# R# R#   + '       g   i     Lh; i)z®Close a session whose rotating-compaction close was deferred (``close_pending``).
The last live turn consumes it after its own scope popped and it left the active-turn table.N©rI  rÈ   rÈ   )	r^  rï   rÎ   rÕ   rÏ   Úhas_active_turnrI  rÈ   rº  )r$   r²  r³  Úpendings   &&  r   rÁ  Ú/RelaySessionCoordinator._consume_deferred_closeq  s¢   € ð ×!Ñ!Ó#ˆØŠ<ÙØ�]‰]××ÓØ—m‘m×1Ñ1×OÐO¸%¿-¹-×:OÑ:OÔ6OˆG÷  ç˜4×/Ñ/¸E×<MÑ<MÐZ_×ZjÑZjÐ/×kÒkØ×Ñ ¨e×.>Ñ.>Ð?Ö@ñ l‰7÷  ×ús   µ:CÃC	zcompaction notificationÚold_session_idc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rI  rC   rÈ   rÐ  r   r   r   )r   s   "r   r   rŽ  ~  s*   € ÷ :ñ :°sð :Èð :Ð]`ð :Ðjnñ :r   c               ó   € \        4       R,          '       g   R# V P                  P                  V4      p\        V\        4      '       g   R# V'       dW   W28w  dQ   VP                  V4      pVe'   V P                  WR7      '       d   \        VR4       R# VP                  RV/4       R# VP                  V4      pVe   \        VR4       R# R# )uŠ  React to a completed compaction, per compaction mode; unknown sessions / disabled config are no-ops.
In-place (``old_session_id`` empty/equal): flag rotation for the next turn boundary â€” never rotate
immediately, a live turn under it breaks LIFO. Rotating (ids differ): the next turn gets a fresh
session under the new id, so close the OLD session now or its scope stays an unexported orphan.rÞ   NrÌ  rÕ   rÈ   rÔ   )	r¶  r�  rM  rN   rè   rÅ  rÍ  r‰  rº  )r$   rI  rÈ   rÐ  r³  Úold_sessionrï   s   &$$$   r   Únotify_session_compactedÚ0RelaySessionCoordinator.notify_session_compacted}  s³   € ô  Ó! /×2Ô2ÙØ�}‰}×(Ñ(¨Ó5ˆÜ˜$¤×-Ò-Ùß˜nÔ:àŸ,™, ~Ó6ˆKØÒ&¨4×+?Ñ+?ÈKÐ+?×+sÒ+sÜ" ;°Ô@ñ ð ×"Ñ" L°.Ð#AÔBÙØ—,‘,˜zÓ*ˆØÒÜ˜wÐ(8Ö9ñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rI  rC   rÈ   r   rŒ   r   )r   s   "r   r   rŽ  ”  s&   € ÷ Kñ K¨cð K¸sð KÀtñ Kr   c               ó²   € V P                   ;_uu_ 4        \        V P                  P                  W34      4      uuRRR4       #   + '       g   i     R# ; i)z?Return whether a turn is still running for one profile/session.N)r’  rŒ   r“  r+   )r$   rI  rÈ   s   &$$r   rÍ  Ú'RelaySessionCoordinator.has_active_turn”  s9   € à×$×$Ó$Ü˜×*Ñ*×.Ñ.°Ð/HÓIÓJ÷ %×$×$Ó$ús   •%AÁA	c               ó    € V ^8„  d   QhRRRR/# ©r   r´  ra  r   r   r   )r   s   "r   r   rŽ  ™  s   € ÷ 
,ñ 
,Ð,<ð 
,Àñ 
,r   c                	ó’  € VP                   '       g   R # VP                  P                  VP                  P                  3pV P                  ;_uu_ 4        V P
                  P                  V4      pVe0   VP                  \        V4      4       V'       g   V P
                  V RVn         R R R 4       R #   + '       g   i     R # ; i)NF)	rj  r²  rI  rÈ   r’  r“  r+   r~  r  )r$   r´  rˆ   Úactives   &&  r   rÀ  Ú/RelaySessionCoordinator._unregister_active_turn™  s�   € Ø×&×&Ð&ÙØ�z‰z×%Ñ% t§z¡z×'<Ñ'<Ð=ˆØ×$×$Ó$Ø×'Ñ'×+Ñ+¨CÓ0ˆFØÒ!Ø—‘œr $›xÔ(ßØ×*Ñ*¨3Ð/Ø&+ˆDÔ#÷ %×$×$Ò$ús   ÁAB5Â5C	c               ó$   € V ^8„  d   QhRRRRRR/# r»  r   )r   s   "r   r   rŽ  ¥  s'   € ÷ Bñ BÐ)9ð BÀsð BÈtñ Br   c               ó°   € VP                   ;_uu_ 4        VP                  '       g   V P                  WR7       RRR4       R#   + '       g   i     R# ; i)zBClose logical LLM children before sibling task aggregation scopes.r½  N)rf  rl  rÇ  )r$   r´  r`   s   &&$r   Úfinish_logical_callsÚ,RelaySessionCoordinator.finish_logical_calls¥  s7   € à××ÓØ—;—;�;Ø×*Ñ*¨4Ð*ÔA÷  ××Òús   •%AÁA	c               ó$   € V ^8„  d   QhRRRRRR/# r»  r   )r   s   "r   r   rŽ  ¬  s"   € ÷ ñ Ð$4ð À#ð È$ñ r   c               	ó”  € V P                   pVP                  4       pVf   R # V P                  ;_uu_ 4        \        V P                  P                  4       4      pV P                  P                  4        R R R 4       X'       dž   VR,          w  rVVP                  VP                  VRV/RR7      pVf   VP                  4        KJ  V P                  ;_uu_ 4        V F   w  r‰V P                  P                  W‰4       K"  	  R R R 4       \        P                  RV4       R # R #   + '       g   i     L·; i  + '       g   i     L=; i)Nr`   zlogical LLM scope close failedrÆ  z0Hermes Relay logical LLM finalization failed: %sr–   )r²  r^  re  r�   rd  rƒ   r2  r  rï   r|   Ú
setdefaultr¹   rº   )
r´  r`   r²  r³  Úlogical_callsÚ_request_idÚlogical_handler  Úpending_request_idÚpending_handles
   &$        r   rÇ  Ú-RelaySessionCoordinator._finish_logical_calls«  s  € à—
‘
ˆØ×!Ñ!Ó#ˆØŠ<ÙØ×"×"Ó"Ü  ×!7Ñ!7×!=Ñ!=Ó!?Ó@ˆMØ×"Ñ"×(Ñ(Ô*÷ #÷ Ø*7¸Õ*;Ñ'ˆKØ×.Ñ.Ø—‘˜~°yÀ'Ð6JØ>ð /ó ˆGð ŠØ×!Ñ!Ô#ÙØ×&×&Ó&ã:GÑ6Ð&Ø×*Ñ*×5Ñ5Ð6HÖYñ ;H÷ 'ô �N‰NÐMÈwÔWÙñ ÷ #×"ú÷ '×&ús   ·>D$Ã'D7Ä$D4	Ä7E	c               ó    € V ^8„  d   QhRRRR/# rÚ  r   )r   s   "r   r   rŽ  Å  s   € ÷ 
$ñ 
$Ð"2ð 
$°tñ 
$r   c                ó^  € \         P                  4       V Jd   R# V P                  \        V 4      0r!VeK   VP                  '       d9   \        V4      V9  d)   VP                  \        V4      4       VP                  pKN  Ve   VP                  '       d   Rp\         P                  V4       R# )z>Unwind ``turn`` without disturbing a newer context-local turn.N)rn  r+   ri  r  rl  r  r  )r´  ÚpreviousÚseens   &  r   r¾  Ú+RelaySessionCoordinator._reset_turn_contextÄ  s€   € ô ×ÑÓ dÓ*ÙØ×,Ñ,¬r°$«x¨j�$ØÒ" x§§ ¼2¸h»<ÈtÔ;SØ�H‰H”R˜“\Ô"Ø×.Ñ.ŠHØÒ H§O§O OØˆHÜ×Ñ˜(Ö#r   c               ó    € V ^8„  d   QhRRRR/# rÊ  r   )r   s   "r   r   rŽ  Ò  s   € ÷ ñ Ð$5ð ¸$ñ r   c                ó   € RV n         R# )z@Release a caller lease without closing a resumable conversation.TN)rX  )r²  s   &r   Úrelease_conversationÚ,RelaySessionCoordinator.release_conversationÑ  s   € ð ˆŽr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rI  rC   rÈ   r   r   r   )r   s   "r   r   rŽ  Ö  s!   € ÷ ;ñ ;°Cð ;ÀSð ;ÈTñ ;r   c               	ó–   € V P                   P                  VR R7      p\        V\        4      '       d   VP	                  RV/4       R# R# )F©rJ  rÈ   N)r�  rM  rN   rè   rº  )r$   rI  rÈ   r³  s   &$$ r   Úfinalize_conversationÚ-RelaySessionCoordinator.finalize_conversationÖ  s@   € Ø�}‰}×(Ñ(¨¸UÐ(ÓCˆÜ�dœL×)Ò)Ø×Ñ ¨jÐ9Ö:ñ *r   )r“  r’  r�  r‘  r�  )r2   r3   r4   r5   r6   ÚHOST_REGISTRYr%   r—  rœ  r¤  r¢  r±  rB  r­  rÂ  r¿  r„  rÁ  rÔ  rÍ  rÀ  rà  rÇ  r¾  rò  r÷  r7   r   r   r   r‹  r‹  Ó  s  † ÙGà5B÷ Aõ8õ
cð
ð "$ð
ð ð
ð #'ð
ð  $÷
õB[ð+ð +/÷+ðZ ôcó ðcõ4õ8Qñ Ð(Ó)ô	Aó *ð	Añ Ð)Ó*ð:Ðceö :ó +ð:õ,Kõ

,õBð ôó ðð0 ô
$ó ð
$ð ôó ð÷;ñ ;r   r‹  c               ó   € V ^8„  d   QhRR/# )r   r   rh  r   )r   s   "r   r   r   ß  s   € ÷ ñ Ð-ñ r   c                 ó*   € \         P                  4       # )zCReturn the turn context inherited by current async and thread work.)rn  r+   r   r   r   Úcurrent_turnrü  ß  s   € ä×ÑÓÐr   c               ó   € V ^8„  d   QhRR/# r¶   r   )r   s   "r   r   r   ä  s   € ÷ Dñ D tñ Dr   c                 óx   € \        4       p V RJ ;'       g&    V P                  ;'       d    V P                  '       * # )zDReturn whether this inherited turn may create Relay instrumentation.N)rü  rk  rl  )r´  s    r   Úrelay_instrumentation_enabledrÿ  ä  s/   € ä‹>€DØ�4ˆ<×CÐC˜D×.Ñ.×BÐB°t·{±{´?ÐCr   c               ó    € V ^8„  d   QhRRRR/# )r   rÈ   rK  r   rh  r   )r   s   "r   r   r   ê  s   € ÷ ñ ˜Jð Ð2Iñ r   c                óä  € \        4       pVeA   VP                  '       d/   VP                  '       g   VP                  P                  '       d   R# VP                  pVP
                  \        4       8w  g   V e   VP                  V 8w  d   R# \        VP                  \        4      '       dD   VP                  e4   VP                  P                  VP                  4      VP                  Jd   R# V# )zFReturn a live turn only when it belongs to the active profile/session.N)rü  rk  rl  r²  rX  rI  rO  rÈ   rN   r³  rè   rï   rÉ  )rÈ   r´  r²  s   &  r   r±  r±  ê  s«   € ä‹>€DØ‚|˜4×-×-Ð-°··°ÀÇ
Á
×@S×@SÐ@SÙØ�J‰J€EØ×ÑÔ/Ó1Ô1°jÒ6LÐQV×QaÑQaÐeoÔQoÙÜ�%—*‘*œl×+Ò+Ø�‰Ò §¡×!7Ñ!7¸×8HÑ8HÓ!IÐQV×Q^ÑQ^Ó!^áØ€Kr   c               ó    € V ^8„  d   QhRRRR/# )r   rÈ   rC   r   z4tuple[RelayRuntime | None, RelaySession | None, Any]r   )r   s   "r   r   r   ù  s   € ÷ Iñ I¨#ð IÐ2fñ Ir   c                óø  € \         P                  4       ^ 8”  g   \        4       '       g   R# \        V 4      pVe   VP                  P                  4       MRpVe9   VP                  P                  pY#VP                  ;'       g    VP                  3# \        RR7      pVe   VP                  4       '       g   R# VP                  V 4      ;'       g    VP                  RV /4      pYCVf   R3# VP                  3# )zCResolve one active turn/session parent for managed Relay execution.NFrö  rÈ   )NNN)rp  r+   rÿ  r±  r²  r^  rï   rp   Úget_runtimerƒ  rÉ  r�  )rÈ   r´  r³  rï   rç   s   &    r   Úresolve_execution_contextr  ù  sâ   € ô ×"Ñ"Ó$ qÔ(Ô0M×0OÒ0Oð  ÐÜ�zÓ"€DØ(,Ò(8ˆ4�:‰:×"Ñ"Ô$¸d€DØÒØ—*‘*×$Ñ$ˆØ˜dŸk™k×;Ð;¨W¯^©^Ð;Ð;ô  Ô'€GØ‚˜g×?Ñ?×AÒAØÐØ×!Ñ! *Ó-×cÐc°×1GÑ1GÈÐWaÐHbÓ1c€GØ W¢_˜TÐHÐH¸'¿.¹.ÐHÐHr   c               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r     s/   € ÷ hñ h°ð hÀð hÈNð hÐ_mñ hr   c                ó`   € V '       d   \        RR7      MRpVf   V# VP                  WVR7      # )zDReturn Relay-rewritten arguments at Hermes's authorization boundary.Frö  N)rÈ   r  rò   )r  r  )rÈ   r  rò   rç   s   $$$ r   r  r    s1   € ç+5Œk Õ'¸4€GØ‚ØˆØ×0Ñ0¸JÐbfÐ0ÓgÐgr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úrelay_errorr^   Úcallback_errorr   rŒ   r   )r   s   "r   r   r     s(   € ÷ pñ p°-ð pÐQ^ð pÐcgñ pr   c                ó8  a a€ S SJ d   R# \        S \        4      '       g   R# \        S4      pVP                  VP                  VP
                   RVP                   20p\        ;QJ d     VV 3R lV 4       F  '       g   K   R# 	  R# ! VV 3R lV 4       4      # )zDMatch Relay's native callback wrapper without masking policy errors.TFÚ.c              3  ód   <"  € T F%  p\        S4      P                  R V RS 24      x € K'  	  R# 5i)zinternal error: r  N)rC   Ú
startswith)rw   rV   r
  r	  s   & €€r   ry   Ú3_is_relay_wrapped_callback_error.<locals>.<genexpr>$  s6   øé € ÐoÑdnÐ\`Œs�;Ó×*Ñ*Ð-=¸d¸VÀ2ÀnÐEUÐ+V×WÐWÓdnùs   ƒ-0)rN   rô   Útyper2   r4   r3   r�   )r	  r
  rs   Ú
type_namess   ff  r   Ú _is_relay_wrapped_callback_errorr    s€   ù€ à�nÓ$ÙÜ�k¤<×0Ò0ÙÜ�Ó€DØ—-‘- ×!2Ñ!2°t·±Ð6GÀqÈ×IZÑIZÐH[Ð4\Ð]€Jß‹3ÕoÑdnÓo�3Œ3ÐoŠ3Ðoˆ3ÕoÑdnÓoÓoÐor   rJ  rI  c               ó$   € V ^8„  d   QhRRRRRR/# )r   rJ  rŒ   rI  rK  r   r[  r   )r   s   "r   r   r   '  s"   € ÷ <ñ <˜4ð <°Zð <ÐK^ñ <r   c                ób   € \         P                  WR7      p\        V\        4      '       d   V# R# )z4Return the Relay host for the active Hermes profile.rö  N)rù  rM  rN   rè   )rJ  rI  r³  s   $$ r   r  r  '  s,   € ä×$Ñ$ [Ð$Ó@€DÜ˜d¤L×1Ò1ˆ4Ð;°tÐ;r   c               ó   € V ^8„  d   QhRR/# )r   r   rC   r   )r   s   "r   r   r   -  s   € ÷ nñ n˜Sñ nr   c                 óH  € \        4       P                  4       p V P                  4       '       g   \        V P	                  4       4      # \
        P                  \        V 4      4      ;'       g7    \
        P                  \        V 4      \        V P	                  4       4      4      # )zAReturn the canonical profile identity used for runtime isolation.)r
   Ú
expanduserÚis_absoluterC   Úresolver   r+   rä  )Úhomes    r   rO  rO  -  ss   € äÓ×'Ñ'Ó)€DØ×Ñ×ÒÜ�4—<‘<“>Ó"Ð"Ü×!Ñ!¤# d£)Ó,×mÐmÔ0B×0MÑ0MÌcÐRVËiÔY\Ð]a×]iÑ]iÓ]kÓYlÓ0mÐmr   c               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   r   5  s   € ÷ 1ñ 1˜#ñ 1r   c                 ó.   € \         P                  ! R4      # )z>Load the binding only when a producer or consumer needs Relay.Ú
nemo_relay)Ú	importlibÚimport_moduler   r   r   rN  rN  5  s   € ä×"Ò" <Ó0Ð0r   c               ó   € V ^8„  d   QhRR/# ©r   r   zPath | Noner   )r   s   "r   r   r   :  s   € ÷ ñ  ;ñ r   c                 óØ   € \        4       p V f\   \        \        P                  4      ;p'       d;   \        P                  R\        RP                  V4      \        4       R,          4       V # )zKReturn the parseable explicit override, or ``None`` to use Relay discovery.a  Legacy NeMo Relay exporter variables are set but no %s was provided. %s no longer configure Relay exporters; any standard user or system plugins.toml still applies. Run `hermes migrate relay` (or `hermes update`, which runs it for every profile) to generate %s and select it in .env.z, zrelay-plugins.toml)	Ú_explicit_plugins_tomlr   ÚosÚenvironr¹   rº   r   rg   r
   )r)  Úlegacy_varss     r   r&  r&  :  s^   € ä(Ó*€KØÒÔ/OÔPR×PZÑPZÓ/[Ð [ Ö [Ü�‰ðqô %Ø�I‰I�kÓ"ÜÓÐ 4Õ4ô	
ð Ðr   c               ó   € V ^8„  d   QhRR/# r!  r   )r   s   "r   r   r   I  s   € ÷ ñ  ñ r   c                 ó²  € \         P                  P                  \        R4      P	                  4       p V '       g   R# \        V 4      P                  4       p VP                  R4      ;_uu_ 4       p\        P                  ! V4      pRRR4       RX9   d   \        R4      hV#   + '       g   i     L$; i  \         d   p\        RT R24      ThRp?ii ; i)z]Return the file selected by ``HERMES_NEMO_RELAY_PLUGINS_TOML`` after checking that it parses.rS   NÚrbr¾   zYHermes [[dynamic_plugins]] records are unsupported; use Relay [[plugins.dynamic]] recordsz;Hermes Relay plugin configuration could not be loaded from z"; continuing without Relay plugins)r$  r%  r+   r   rO   r   r  ÚopenÚtomllibÚloadr€   r›   r¦   )Ú
configuredr)  Úconfig_filer·  r_   s        r   r#  r#  I  sµ   € ä—‘—‘Ô 8¸"Ó=×CÑCÓE€JßÙÜ�zÓ"×-Ñ-Ó/€Kð	Ø×Ñ˜d×#Ô# {Ü—\’\ +Ó.ˆF÷ $à Ô&ÜÐxÓyÐyØÐ÷	 $×#ûô
 ô Ü0ØIÈ+ÈÐVxÐyó
àð	ûðús0   ÁB6 Á0B#ÂB6 Â#B3	Â.B6 Â6CÃCÃCc                  óD   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	tR
# )ÚRelayPluginSourcesi[  zVThe plugin configuration Relay resolves for this process, as its validator reports it.ztuple[str, ...]r¯   rŒ   rÀ   ÚerrorsÚwarningsr   N)r2   r3   r4   r5   r6   rÖ   r7   r   r   r   r0  r0  [  s   ‡ á`à!Ó!ØƒMØÓØ×r   r0  c               ó    € V ^8„  d   QhRRRR/# )r   ro   r   r   r0  r   )r   s   "r   r   r   e  s   € ÷ ñ  #ð Ð1Cñ r   c           	     óÎ  € T ;'       g    \        4       p V P                  P                  / \        4       R7      pVP	                  R4      ;'       g    / P	                  R4      ;'       g    .  Uu. uF  p\        V\        4      '       g   K  VNK  	  pp\        \        ;QJ d-    . R VP	                  R4      ;'       g    .  4       F  NK  	  5M&! R VP	                  R4      ;'       g    .  4       4      \        V4      \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      \        ;QJ d    . R V 4       F  NK  	  5R7      # ! R V 4       4      R7      # u upi )	zçResolve the plugins.toml layers this process would load, without loading plugin code.

Relay's validator reads the same layers as initialization but does not take the process-wide host.
Raises when a file cannot be read or parsed.
r$  r·  Údiagnosticsc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir   )rC   )rw   r±   s   & r   ry   Ú)resolve_plugin_sources.<locals>.<genexpr>o  s   é € ÐRÑ1Q¨œ3˜tŸ9˜9Ó1Qùs   ‚r¯   c              3  ó„   "  € T F6  qP                  R 4      R8X  g   K  \        VP                  R4      4      x € K8  	  R# 5i)Úlevelr]   ÚmessageN©r+   rC   ©rw   Úds   & r   ry   r7  q  s2   é € Ð]±K¨qÇ5Á5ÈÃ>ÐU\ÑC\Ô*”S˜Ÿ™˜yÓ)×*Ð*³Kùs
   ‚A ž"A c              3  ó¶   "  € T FO  pVP                  R 4      R8X  g   K  VP                  R4      R8w  g   K3  \        VP                  R4      4      x € KQ  	  R# 5i)r9  rº   Úcodezplugin.configuration_inheritedr:  Nr;  r<  s   & r   ry   r7  s  sO   é € ð 
Ù+6 aØ�u‰u�W‹~ Ñ*ô "Ø/0¯u©u°V«}Ð@`Ñ/`ô "ŒC�—‘�iÓ ×!Ð!«;ùs   ‚AŸA·"A)r¯   rÀ   r1  r2  )
rN  rÅ   Úvalidater#  r+   rN   rÂ   r0  Útupler«   )ro   rª   r=  r5  s   &   r   Úresolve_plugin_sourcesrB  e  s.  € ð ×'Ð'Ô%Ó'€EØ�\‰\×"Ñ" 2Ô?UÓ?WÐ"ÓX€FØ%Ÿz™z¨(Ó3×9Ð9°r×>Ñ>¸}ÓM×SÐSÐQSÐSÓkÑS˜ÔWaÐbcÔei×Wj—1�1ÑS€KÐkÜß”UÑR°·±¸NÓ1K×1QÐ1QÈrÐ1QÓR—U‘UÑR°·±¸NÓ1K×1QÐ1QÈrÐ1QÓRÓRÜ2°6Ó:ßŒuÑ]±KÓ]�u‰uÑ]±KÓ]Ó]ç”ñ 
Ù+6ó
—ô	ð 	ð
 ñ 
Ù+6ó
ó 
ô	ð 	ùò ls   Á0E"ÂE"zÛconflict: a static plugin configuration is already active; to combine static and dynamic plugins, provide the static components as the base configuration to dynamic plugin activation before calling plugin initializationzHconflict: plugin configuration is owned by an active dynamic plugin hostc               ó    € V ^8„  d   QhRRRR/# )r   r_   r^   r   rŒ   r   )r   s   "r   r   r   …  s   € ÷ Wñ W ð W°4ñ Wr   c                óV   € \        V \        4      ;'       d    \        V 4      \        9   # r   )rN   rô   rC   Ú_RELAY_HOST_CONFLICT_MESSAGES)r_   s   &r   r  r  …  s!   € Ü�cœ<Ó(×VÐV¬S°«XÔ9VÑ-VÐVr   c               ó    € V ^8„  d   QhRRRR/# )r   r‰   r   r   r   )r   s   "r   r   r   ‰  s   € ÷ 
hñ 
h Sð 
h¨Sñ 
hr   c                óÜ   a € \         P                  ! S 4      '       g   S #  \        P                  ! 4        \        T 3R lRR7      #   \         d    \        P
                  ! S 4      u # i ; i)zDResolve Relay's async plugin API from synchronous host construction.c                 ó0   <€ \         P                  ! S 4      # r   )rî  r™  ©r‰   s   €r   rC  Ú+_resolve_plugin_awaitable.<locals>.<lambda>“  s   ø€ ¬¯ª°UÔ);r   z"hermes-nemo-relay-plugin-lifecycle)rV   )rt   rì  rî  Úget_running_looprô   r™  rj   rI  s   fr   r'  r'  ‰  s[   ø€ ä×Ò˜u×%Ò%Øˆð"Ü× Ò Ô"ô !Ô!;ÐBfÔgÐgøô ô "Ü�{Š{˜5Ó!Ò!ð"ús   ¡A Á!A+Á*A+c               ó    € V ^8„  d   QhRRRR/# )r   r¢  rE   r   rC   r   )r   s   "r   r   r   –  s   € ÷ .ñ .�~ð .¨#ñ .r   c                óJ   € \        V P                  R 4      ;'       g    R4      # )rÈ   rS   )rC   r+   )r¢  s   &r   r¥  r¥  –  s   € Üˆu�y‰y˜Ó&×,Ð,¨"Ó-Ð-r   c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   š  s   € ÷ ñ ˜$ñ r   c                 ó"  € \         P                  ;_uu_ 4        \         P                  P                  4        RRR4       \        P                  4        \        P                  4        \        P                  4        R#   + '       g   i     LN; i)z8Reset all profile-scoped Relay hosts for isolated tests.N)	ÚSESSION_COORDINATORr’  r“  r2  rù  rR  r`  r3  r   r   r   r   Ú_reset_for_testsrQ  š  sR   € ä	×	/×	/Ó	/Ü×)Ñ)×/Ñ/Ô1÷ 
0ä×ÑÔ Ü×)Ñ)Ô+Ü×ÑÖ÷	 
0×	/ús   ™A>Á>B	r   )pÚ__conditional_annotations__r6   Ú
__future__r   rf  rî  r™   r�  r€  r  rt   Úloggingr$  r   r+  r¢   Úconcurrent.futuresr   rä  Údataclassesr   r   Úenumr   Úpathlibr   Útypingr   r	   Úhermes_constantsr
   Úhermes_cli.relay_plugin_cutoverr   r   Ú	getLoggerr2   r¹   r“  r®  ÚLOGICAL_LLM_SCOPErG   rH   rI   re  r   rÖ   rš  r   r@   Ú_SCOPE_OP_EXECUTORr+   r—  rJ   rP   rj   rŠ   r’   r�   r�   r¤   rô   r¦   r¬   r²   r«   rÇ   rã   Ú_SEGMENTS_CONFIGr¶  r0   Ú _reset_segments_config_for_testsrå   rþ   r`  rg  r.  rè   r7  rW  rD  rù  rU  ra  Ú
ContextVarrn  rp  r4  rs  r0  r„  r‰  r‹  rP  rü  rÿ  r±  r  r  r  r  rO  rN  r&  r#  r0  rB  Ú	frozensetrE  r  r'  r¥  rQ  )rR  s   @r   Ú<module>rc     sh  øðÜ Hå "ã Û Û Û Û Û Û Û Û 	Û Û Û Ý Bß (Ý Ý ß  å ,ß hà	×	Ò	˜8Ó	$€à €Ø€
Ø-Ð Ø2Ð Ø2Ð Ø6Ð Ø#>Ð  Ø%'Ð �NÓ 'ð Ð ÷ñ õ"Xñ Ð1Ó2Ð Ø'×+Ñ+Ð õc÷
Pð
!ØAEð!Ø^`÷!ð.!¸dð !ÐTXð !Ðko÷ !ðÀTð Ð[_÷ õ 	Hõ[ñ "&Ø$Ð&Tó"Ð ô
Q¨ô Qõ6õLõ'ðT ÷ð ó ðõ$Dñ, Ð.Ó/Ð Ø#×'Ñ'Ð Ø#3×#9Ñ#9Ð  ÷%ñ %÷*eñ eñP 9Ó:Ð Ø ‡‚Ð%×;Ñ;Ô <÷w*ñ w*ñt �$Ô÷*ð *ó ð*ð$ Ð+Õ+€	÷ñ ñ8 "Ó#€ð ÷gð gó ðgð" ÷ð ó ðð  BM×AWÒAWØ ôB€Ð>ó ð 8C×7MÒ7MØ)°1ô8Ð Ð4ó ð
 ×Ññ-ó ð-õõõ)÷F;ñ F;ñR .Ó/Ð õõ
D÷õIõ6hõpð< $ð <À$÷ <õnõ1õ
õñ$ �$Ô÷ð ó ð÷ñ, !*ð	 ð 	Sð	ó!Ð õWõ
hõ.÷r   