+
    jHàj«  ã                  óÌ  € R t ^ RIHt ^ RI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Ht ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIH t H!t!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. ^ RIH/t/H0t0H1t1H2t2H3t3H4t4 ^ RI5H6t6 ]'       d   ^ RI7H8t8 ^ RI9H:t: ]Pv                  ! R4      t<RR/R R llt=R t> ! R R4      t?R# )z;Gateway turn prepare phases; inherited by GatewayTurnMixin.)ÚannotationsN)ÚTYPE_CHECKING)Út)Úformat_iteration_progress)ÚnullcontextÚsuppress)Úcopy_context)ÚPlatform)Ú(repair_explicit_computer_use_media_paths)ÚBasePlatformAdapter)ÚMessageEvent)ÚSessionSourceÚ_session_key_namespaceÚbuild_channel_continuity_noteÚbuild_session_context)ÚTranscriptReadError)ÚTurnContext)ÚDEFAULT_LEASE_WAITÚTurnLeaseTimeoutError)Úget_hermes_home_override)ÚPath)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)Úbase_url_hostname)ÚGatewayRunner)Ú
TurnRunnerzgateway.runÚfallbackTc               ó   € V ^8„  d   QhRR/# )é   Úreturnútuple[str, dict]© )Úformats   "Ú=/home/ubuntu/.hermes/hermes-agent/gateway/run_turn_prepare.pyÚ__annotate__r(   *   s   € ÷ 1ñ 1ÐGWñ 1ó    c          
     ó
  € ^ RI Hp ^ RIHp ^ RIHp ^ RIHp V! V 4      pVP                  V4      w  r‰VP                  R4      ;'       g    / P                  R4      p
V! WW”! WqV4      VR7      w  r¼Ve‡   ^ RI
Hp T! T
;'       g    R	T	;'       g    R	VP                  R4      ;'       g    VP                  R4      ;'       g    R
VP                  R4      ;'       g    R4      V n        VR,          V! V4      3# W“! V4      3# )aT  ``_resolve_session_agent_runtime`` for a session bound to a launch policy: the route's FROZEN
config and launch credential, walking its own fallback chain on an AuthError unless
``fallback=False`` (a session control asking which route the session itself runs). Module-level
so tests that bind the method onto bare namespaces still reach it.)Ú_runtime_agent_kwargs)Úroute_launch_key)Úroute_runtime©Úactive_authorityÚmodelÚprovider©r    ©Úpre_agent_fallback_noticeÚ ÚunknownÚdefault)Úgateway.runr+   Úgateway.session_policyr,   Ú gateway.session_worker_constructr-   Úgateway.session_authoritiesr/   Ú	effectiveÚgetÚhermes_cli.fallback_configr4   Ú_pre_agent_fallback_notice)ÚrunnerÚpolicyr    r+   r,   r-   r/   Ú	authorityÚfrozenr0   r1   ÚruntimeÚfallback_entryr4   s   &&$           r'   Ú_resolve_policy_agent_runtimerF   *   sú   € õ
 2Ý7Ý>Ý<Ù  Ó(€Ià×$Ñ$ YÓ/�M€FØ—
‘
˜7Ó#×)Ð) r×.Ñ.¨zÓ:€HÙ+¨F¸EÐCSÐT]ÐgmÓCnØ5=ô?Ñ€GàÒ!ÝHÙ,EØ�NˆN˜˜EŸK˜K RØ�K‰K˜
Ó#×RÐR ~×'9Ñ'9¸*Ó'E×RÐRÈØ×Ñ˜wÓ'×4Ð4¨9ó-6ˆÔ)ð ˜gÕ&Ñ(=¸gÓ(FÐFÐFØÐ'¨Ó0Ð0Ð0r)   c                óä  € V'       g¢   V'       d   V P                  V4      MRpV P                  R4      pV'       d   VP                  P                  MR;'       g!    V'       d   VP                  P                  MRpV'       d$   \        P	                  RT;'       g    RV4       TpV# V'       d    W P                  V4      P                  n        W P                  R4      P                  n        V# )z]Last step of ``_resolve_session_agent_runtime``: remember a good model, recover an empty one.NÚ*r5   u{   Empty model resolved for session=%s â€” recovering last-known-good model %s (config read likely returned empty; see #35314))Ú_peek_session_stateÚconversationÚlast_resolved_modelÚloggerÚwarningÚ_session_state)r@   Úskeyr0   Ú	_lr_stateÚ_lr_starÚ
_recovereds   &&&   r'   Ú_recover_or_remember_modelrS   C   sÉ   € ÷ ß8<�F×.Ñ.¨tÔ4À$ˆ	Ø×-Ñ-¨cÓ2ˆç;DˆY×#Ñ#×7Ò7È"÷ Oð Oß=E�×%Ñ%×9Ò9È2ð 	÷ Ü�N‰Nð%à&*§j j¨b°*ôð
 ˆEð €L÷ ØKP×!Ñ! $Ó'×4Ñ4ÔHØFK×Ñ˜cÓ"×/Ñ/ÔCØ€Lr)   c                  óº   € ] tR t^]tRRRRRRRR/R R lltR	 R
 ltR R ltR tR tR t	R t
R tR tRR ltR t]P                    ! R R4      4       tR tRtR# )ÚGatewayTurnPrepareMixinÚsourceNÚsession_keyÚuser_configr    Tc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r"   rV   zOptional[SessionSource]rW   úOptional[str]rX   zOptional[dict]r    Úboolr#   r$   r%   )r&   s   "r'   r(   Ú$GatewayTurnPrepareMixin.__annotate__^   sD   € ÷ uMñ uMØ0ðuMØFSðuMà#ðuMà6:ðuMð 
ñuMr)   c               óø
  € ^ RI HpHpHpHpHp	 ^ RIHp
 RV n        Ve	   V
! W4      MRpVe   \        WVR7      # V P                  W4      pV! V4      pV'       d   V P                  V4       V'       d   V P                  V4      MRpV'       d   VP                  P                  MRpV'       dð   VP                  RV4      pR Uu/ uF  pVVP                  V4      bK  	  pp\!        VR	,          ;'       g    / 4      VR	&   VP                  R4      '       dd   VP                  R4      f   V! VP                  R4      4      VR&   \"        P%                  R
T;'       g    RVVVP                  R4      4       VV3# \"        P%                  RT;'       g    RVV4       M°\"        P'                  \(        P*                  4      '       dˆ   \"        P%                  RT;'       g    RT\-        V P/                  4       P1                  4       4       UUu. uF"  w  ppVP                  P                  f   K   VNK$  	  uppR,          ;'       g    R4       RRppV'       dC   VP                  R4      '       d,    T	! VR,          VP                  R4      ;'       g    RR7      pVf   V! 4       pVP7                  RR4      V n        VP7                  RR4      pV'       d   \"        P9                  RVV4       TpV'       dN   V P                  '       g<   ^ RIHp V! VR,          VP                  R4      VP                  R4      V4      V n        \?        V RR4      pV'       Ed   VEe   T! TVP@                  VPB                  '       d   \E        VPB                  4      MR\?        VRR4      '       d   \E        VPF                  4      MR\?        VRR4      '       d   \E        VPH                  4      MRR7      pV'       d}   VPJ                  '       d   VPJ                  pVPL                  '       dM   T	! VPL                  T;'       g    RR7      pVP7                  RR4      pV'       d   VPJ                  '       g   TpV'       d   V'       d   V PO                  WÍV4      w  ppV'       gs   VP                  R4      '       d\   \Q        \2        4      ;_uu_ 4        ^ RI)H*p V! VR,          4      pV'       d   \"        P9                  RVVR,          4       RRR4       \W        WV4      V3# u upi u uppi   \2         d0   p\"        P5                  RTR,          TRR7       TRpp Rp?ELÄRp?ii ; i  + '       g   i     Lf; i)u8  Resolve model/runtime for a session.

Priority (highest first): session ``/model`` â†’ ``channel_overrides`` â†’ global config/env
(``_resolve_gateway_model(user_config)`` and default provider resolution). ``fallback=False``
keeps a launch-policy session on its own route (see ``_resolve_policy_agent_runtime``).)Ú_credential_pool_for_providerÚ_get_channel_overrideÚ_resolve_gateway_modelÚ_resolve_runtime_agent_kwargsÚ*_resolve_runtime_agent_kwargs_for_provider)Úpolicy_for_sourceNr2   r0   r1   Úapi_keyÚcredential_poolÚcapabilitieszZSession model override (fast): session=%s config_model=%s -> override_model=%s provider=%sr5   z[Session model override (no api_key, fallback): session=%s config_model=%s override_model=%szFNo session model override: session=%s config_model=%s override_keys=%s:Né   Nz[])Útarget_modelz3Session /model override provider %s unavailable: %sT©Úexc_infoÚ_fallback_noticez;Runtime provider supplied explicit model override: %s -> %sr3   ÚconfigÚ	thread_idÚparent_chat_id)rm   Ú	parent_id)Úget_default_model_for_provideru8   No model configured â€” defaulting to %s for provider %s)	r1   Úrequested_providerrd   Úbase_urlÚapi_modeÚ
max_tokensre   Úrequest_overridesrf   ),r8   r^   r_   r`   ra   rb   r9   rc   r?   rF   Ú_resolve_session_key_or_noneÚ!_rehydrate_session_model_overriderI   rJ   Úmodel_overrider=   ÚdictrL   ÚdebugÚisEnabledForÚloggingÚDEBUGÚlistÚ_sessions_mapÚitemsÚ	ExceptionrM   ÚpopÚinfor>   r4   ÚgetattrÚplatformÚchat_idÚstrrm   rn   r0   r1   Ú_apply_session_model_overrider   Úhermes_cli.modelsrp   rS   )ÚselfrV   rW   rX   r    r^   r_   r`   ra   rb   rc   rA   rO   r0   Ú_override_stateÚoverrideÚoverride_modelÚkÚoverride_runtimeÚ_keyÚ_stÚruntime_kwargsÚunavailable_overrideÚexcÚruntime_modelr4   ÚcfgÚchÚch_runtime_modelrp   s   &$$$$                         r'   Ú_resolve_session_agent_runtimeÚ6GatewayTurnPrepareMixin._resolve_session_agent_runtime^   sÌ  € ÷	
õ 	
õ 	=ð +/ˆÔ'Ø4:Ò4FÑ" 4Ô0ÈDˆØÒÜ0°ÈÔQÐQØ×0Ñ0°ÓEˆÙ& {Ó3ˆßØ×2Ñ2°4Ô8ß<@˜$×2Ñ2°4Ô8ÀdˆßBQ�?×/Ñ/×>Ò>ÐW[ˆßØ%Ÿ\™\¨'°5Ó9ˆNñ-ó ñ- q��8—<‘< “?Ò"ñ -ð ð  ô 04Ð4DÀ^Õ4T×4ZÐ4ZÐXZÓ/[Ð˜^Ñ,Ø×#Ñ# I×.Ò.Ø#×'Ñ'Ð(9Ó:ÒBÙ:WÐX`×XdÑXdÐeoÓXpÓ:qÐ$Ð%6Ñ7Ü—‘ØpØ—J�J˜B  ~Ð7G×7KÑ7KÈJÓ7Wôð &Ð'7Ð7Ð7ô �L‰LØmØ—
�
˜˜E >õô × Ñ ¤§¡×/Ò/ä�L‰LØXØ—
�
˜˜Eä*.¨t×/AÑ/AÓ/C×/IÑ/IÓ/KÔ*LôÙ*L™Y˜T 3Ø×'Ñ'×6Ñ6÷ �DÑ*Lòð õ÷ ð ð ôð 04°TÐ,ˆß˜Ÿ™ Z×0Ò0ð	@Ù!KØ˜ZÕ(°x·|±|ÀGÓ7L×7TÐ7TÐPTô"V�ð Ò!Ù:Ó<ˆNð +9×*<Ñ*<Ð=OÐQUÓ*VˆÔ'Ø&×*Ñ*¨7°DÓ9ˆßÜ�K‰KÐUÐW\Ð^kÔlØ!ˆEß¨×(G×(GÐ(GÝLÙ.GØ$ ZÕ0Ð2F×2JÑ2JÈ7Ó2SÐUc×UgÑUgÐhrÓUsÐuzó/|ˆDÔ+ô �d˜H dÓ+ˆßˆ3�6Ó%Ù&Ø�V—_‘_¸V¿^¿^¸^¤c¨&¯.©.Ô&9ÐQSÜ3:¸6À;ÐPT×3UÒ3Uœ#˜f×.Ñ.Ô/Ð[_Ü8?ÀÐHXÐZ^×8_Ò8_œ#˜f×3Ñ3Ô4ÐeiôˆB÷
 Ø—8—8�8ØŸH™H�EØ—;—;�;Ù%OÐPR×P[ÑP[Ðjo×jwÐjwÐswÔ%x�NØ'5×'9Ñ'9¸'À4Ó'HÐ$ç'°··°Ø 0˜çŸØ$(×$FÑ$FÀtÐTbÓ$cÑ!ˆE�>÷ ˜×+Ñ+¨J×7Ò7Üœ)×$Õ$ÝLÙ6°~ÀjÕ7QÓR�ßÜ—K‘KØRÐTYÐ[iÐjtÕ[uô÷	 %ô *¨$°eÓ<¸nÐLÐLùòs ùó4øô ô @ô —‘ÐTÐV^Ð_iÕVjÐloØ(,ð ô .à19¸4 hÐ$¥hûð@ú÷X %×$ús<   ÃT!ÈT&È0T&É3!T, ÊT, Ó<U)Ô,U&Ô7$U!Õ!U&Õ)U9	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r"   Úuser_messager‡   r0   r’   ry   r#   r%   )r&   s   "r'   r(   r\   Õ   s*   € ÷ %ñ %°sð %À3ð %ÐX\ð %Ðaeñ %r)   c                ó€  € ^ RI Hp ^ RIHp ^ RIHp R Uu/ uF  qwVP                  V4      bK  	  pp\        VR	,          ;'       g    . 4      VR	&   \        VR
,          ;'       g    / 4      VR
&   \        VP                  R4      ;'       g    / 4      p	RVRVRW(R,          VR,          VR,          VR,          VR,          \        VR	,          4      3/p
\        V RR4      pWµ9  d   WšR&   V
#  V! V
R,          VR,          VR,          VR7      pT! Yœ;'       g    / 4      V
R&   V
# u upi   \         d    Rp L+i ; i)zªEffective model/runtime config for one turn. With `/fast` priority on, fast-mode
``request_overrides`` are deep-merged OVER the per-provider ones so both reach the model.)Ú_deep_merge_request_overrides)ÚSTATIC_TIERS)Úresolve_fast_mode_overridesrr   r1   rq   rs   ÚcommandÚargsrf   ru   r0   rD   Ú	signatureÚ_service_tierN)r1   rr   Útier)
rd   rr   r1   rq   rs   r¡   r¢   re   rt   rf   )r8   rž   Úagent.fast_moderŸ   r‰   r    r=   r~   ry   Útupler„   r�   )rŠ   rœ   r0   r’   rž   rŸ   r    rŽ   rD   Úbase_request_overridesÚrouter¥   Ú	overridess   &&&&         r'   Ú_resolve_turn_agent_configÚ2GatewayTurnPrepareMixin._resolve_turn_agent_configÕ   si  € õ 	>Ý0ÝAñ/ó
ñ/¨ˆ~×!Ñ! !Ó$Ò$ñ /ð 	ð 
ô ˜w v�×4Ð4°"Ó5ˆ�‰Ü"& w¨~Õ'>×'DÐ'DÀ"Ó"Eˆ�ÑÜ!% n×&8Ñ&8Ð9LÓ&M×&SÐ&SÐQSÓ!TÐà�UØ�wØØ˜zÕ*¨GÐ4HÕ,IÈ7ÐS]ÕK^Ø˜
Õ# W¨YÕ%7¼¸wÀv½Ó9Oðð
ˆô �t˜_¨dÓ3ˆØÔ#à)?Ð%Ñ&ØˆLð	Ù3Ø�g•¨°Õ)<ÀwÈzÕGZÐaeôˆIñ &CÐCY×[jÐ[jÐhjÓ%kˆÐ!Ñ"Øˆùò=
øô4 ô 	ØŠIð	ús   —D(Ã0!D- Ä-D=Ä<D=c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Ú
session_idr‡   Úagentr   r#   ÚNoner%   )r&   s   "r'   r(   r\   ü   s&   € ÷ #Yñ #Y¸ð #YÀSð #YÈTñ #Yr)   c           	     ó~  a€ V'       d   Ve   V P                   f   R# \        VRR4      pV'       g   R# R Uu/ uF  qD\        W$R4      bK  	  pp\        \        VRR4      4      VR&   VP                  4        UUu/ uF  w  rFVR9  g   K  WFbK  	  ppp V P                   P                  pVP                  V4      pV'       g   R# VP                  R4      p	/ p
\        \        4      ;_uu_ 4        V	'       d   \        P                  ! V	4      M/ p
RRR4       \        V
\        4      '       g   / p
\        V
P                  R4      ;'       g    / 4      oVP                  R4      V8X  d_   \        ;QJ d-    V3R lVP                  4        4       F  '       d   K   RM"	  R	M! V3R lVP                  4        4       4      '       d   R# WZR&   VP                  V\        P                  ! V
4      VR
7       R# u upi u uppi   + '       g   i     Lù; i  \         d    \         P#                  RR	R7        R# i ; i)z÷Persist the runtime model/provider a gateway turn actually used (provider fallback can
switch them after the row was created). Runs in the ``run_sync`` executor thread, so it
uses the sync ``SessionDB`` (``_db``), not the AsyncSessionDB forwarder.Nr0   Ú_fallback_activatedFÚfallback_activeÚmodel_configÚgateway_runtimec              3  óP   <"  € T F  w  rSP                  V4      V8H  x € K  	  R # 5i)N)r=   )Ú.0rŽ   Úvrµ   s   &  €r'   Ú	<genexpr>ÚIGatewayTurnPrepareMixin._sync_session_model_from_agent.<locals>.<genexpr>  s'   øé € Ð0iÑYhÑQUÐQR°×1DÑ1DÀQÓ1GÈ1Ö1LÓYhùs   ƒ#&T)r0   z-Failed to sync gateway session model metadatari   )r1   rr   rs   )Nr5   )Ú_session_dbr„   r[   r€   Ú_dbÚget_sessionr=   r   r�   ÚjsonÚloadsÚ
isinstancery   ÚallÚupdate_session_metaÚdumpsrL   rz   )rŠ   r®   r¯   r0   rŽ   rD   r¸   ÚdbÚrowÚ
raw_configrl   rµ   s   &&&        @r'   Ú_sync_session_model_from_agentÚ6GatewayTurnPrepareMixin._sync_session_model_from_agentü   sÅ  ø€ ÷ ˜Uš]¨d×.>Ñ.>Ò.FÙÜ˜˜w¨Ó-ˆßÙÙ7[Ó\Ñ7[°!”g˜e¨Ó-Ò-Ñ7[ˆÐ\Ü%)¬'°%Ð9NÐPUÓ*VÓ%WˆÐ!Ñ"Ø$+§M¡M¤OÔK¡O™D˜A°qÀ
Ñ7J”4�1’4¡OˆÑKð	YØ×!Ñ!×%Ñ%ˆBØ—.‘. Ó,ˆCßÙð Ÿ™ Ó0ˆJØˆFÜœ)×$Õ$ß3=œŸš JÔ/À2�÷ %ä˜f¤d×+Ò+Ø�Ü" 6§:¡:Ð.?Ó#@×#FÐ#FÀBÓGˆOØ�w‰w�wÓ 5Ô(¯S«SÔ0iÐY`×YfÑYfÔYhÓ0i¯S¯SªSÔ0iÐY`×YfÑYfÔYhÓ0i×-iÒ-iÙØ(/Ð$Ñ%Ø×"Ñ" :¬t¯zªz¸&Ó/AÈÐ"ÖOùò1 ]ùãK÷ %×$ûô ô 	YÜ�L‰LÐHÐSWˆL×Xð	YúsY   ¹G8Á<G=ÂG=Â/H Ã*H Ã1!HÄ<H Å'H Å7"H Æ+H Ç
,H ÈH	ÈH È"H<È;H<c           
   ƒ  óf  "  € \        VRR4      ;'       g    / p\        VP                  R4      ;'       g    R4      P                  4       pV'       g*   \        P
                  ! V P                  V4      G Rj  x€L
 MRpVeu   \        P                  RVP                  VP                  VP                  V4       \        P                  ! W%R7      p\        \        4      ;_uu_ 4        W!n        RRR4       V'       d0   V P#                  V4      pWd8w  d   \        P%                  RWF4       R# \'        VP                  R4      4      p\        VP                  R	4      ;'       g    R4      P                  4       pV'       do   V P(                  P+                  V4      G Rj  x€L
 p	V	e   V'       d   V	P,                  V8w  d.   \        P%                  R
T;'       g    RT;'       g    R4       R# M>V P(                  P/                  V\'        \        VRR4      4      '       * R7      G Rj  x€L
 p	V	P0                  p
\        VRR4      pVeÝ   ^ RIHp V! V 4      Vupw  rïWýP6                  P                  V4      VP8                  P                  V4      39   pV'       dŠ   V	P,                  \        P
                  ! VP:                  P<                  V4      G Rj  x€L
 9  dH   \        P%                  RWéP,                  4       ^ RIH p VP                  4       pVe   RRR. RR/VR&   R# V'       g^   V'       dV   T PC                  Y˜VP                  R4      ;'       g    RVP                  R4      ;'       g    R4      G Rj  x€L
 pVf   R# Tp	V PE                  W¢4       \        P
                  ! V PF                  V4      G Rj  x€L
 '       d   V PI                  W)V
4      G Rj  x€L
 p	^ RI%H&p V! WV	4      G Rj  x€L
 '       g   R# W)V
3#  EL‘  + '       g   i     EL&; i EL€ ELú ELO L© Li LK L65i)z½Resolve ``source`` to its session entry (topic recovery, internal-route guards, Telegram
topic-binding heal). Returns ``(source, session_entry, session_key)`` or ``None`` to drop
the event.ÚmetadataNÚgateway_session_keyr5   z1telegram topic recovery: chat=%s user=%s %r -> %s)rm   zUDropping internally routed event after route recovery: expected session=%s derived=%sÚgateway_session_strictÚgateway_session_idzXDropping internally routed event: expected session id=%s is no longer current for key=%sÚmissingÚinternalF)Útouch_activityÚ_claimed_ownerr.   zLDropping a stopped claimed turn: its route moved from %s to %s before it ran)Úexecution_resultÚfinal_responseÚmessagesÚinterruptedTÚresultÚgateway_proven_session_idÚgateway_completion_ids)Úresolve_heartbeat_ownerr%   )'r„   r‡   r=   ÚstripÚasyncioÚ	to_threadÚ!_recover_telegram_lobby_thread_idrL   rƒ   r†   Úuser_idrm   ÚdataclassesÚreplacer   r�   rV   Ú_session_key_for_sourcerM   r[   Úasync_session_storeÚlookup_by_session_keyr®   Úget_or_create_sessionrW   r;   r/   Úpending_stopsÚdelivered_stopsrÄ   Úget_compression_chainÚgateway.session_resultsrÒ   Ú!_resolve_async_delegation_sessionÚ_cache_session_sourceÚ_is_telegram_topic_laneÚ!_hmwa_heal_telegram_topic_bindingÚ gateway.run_heartbeat_acceptancerÙ   )rŠ   ÚeventrV   Úevent_metadataÚexpected_session_keyÚ	recoveredÚderived_session_keyÚstrict_sessionÚpinned_session_idÚsession_entryrW   Úclaimr/   rB   ÚownerÚ
generationÚstoppedrÒ   ÚcapturedÚresolved_entryrÙ   s   &&&                  r'   Ú_hmwa_resolve_sessionÚ-GatewayTurnPrepareMixin._hmwa_resolve_session!  sæ  é € ô ! ¨
°DÓ9×?Ð?¸RˆÜ" >×#5Ñ#5Ð6KÓ#L×#RÐ#RÐPRÓS×YÑYÓ[Ð÷
 1ô #×,Ò,¨T×-SÑ-SÐU[Ó\×\Ð\Ø6:ð 	àÒ Ü�K‰KØCØ—‘ §¡°×0@Ñ0@À)ôô !×(Ò(¨ÔEˆFÜœ)×$Õ$Ø%”÷ %÷  Ø"&×">Ñ">¸vÓ"FÐØ"Ô:Ü—‘ØkØ(ôñ ä˜n×0Ñ0Ð1IÓJÓKˆÜ × 2Ñ 2Ð3GÓ H× NÐ NÈBÓO×UÑUÓWÐßØ"&×":Ñ":×"PÑ"PÐQeÓ"f×fˆMØÒ$×,=À×AYÑAYÐ]nÔAnÜ—‘ØnØ%×2Ð2¨Ð4H×4UÐ4UÈIôñ ð Boð #'×":Ñ":×"PÑ"PØ¬4´¸¸zÈ5Ó0QÓ+RÔ'Rð #Qó #÷ ˆMð $×/Ñ/ˆÜ˜Ð/°Ó6ˆØÒÝDÙ-=¸dÓ-CÀUÐ*ˆIÑ*˜ð !×%<Ñ%<×%@Ñ%@ÀÓ%GÈ×IbÑIb×IfÑIfÐglÓImÐ$nÑnˆGß˜=×3Ñ3Ä×ARÒARØ—L‘L×6Ñ6¸óB?÷ <?ô ?ô —‘ÐmØ$×&>Ñ&>ô@åDØ+×/Ñ/Ó1�ØÒ'Ø*:¸BÀ
ÈBÐP]Ð_cÐ)d�H˜XÑ&Ùß×"3Ø#'×#IÑ#IÈ-Ðlz×l~Ñl~ð  @[ó  m\÷  mbð  mbð  `bð  dr÷  dvñ  dvð  wOó  dP÷  dVð  dVð  TVó  $W÷  WˆNØÒ%ÙØ*ˆMØ×"Ñ" ;Ô7Ü×"Ò" 4×#?Ñ#?ÀÓH×HÖHØ"&×"HÑ"HÈÐ`kÓ"l×lˆMÝLÙ,¨T¸-ÓH×HÖHÙØ kÐ1Ð1òC ]÷ %×$Ð$úò gòò<?ñ Wñ
 IÙláHùsú   ‚4P1·P1Á$P1Á8P	Á9A/P1Ã(PÃ/P1Ã?A%P1Å%P1ÆP1Æ P Æ!P1Æ1)P1Ç
P1Ç&AP1È)P#È*B-P1ËP&ËAP1Ì/P1Ì7#P1ÍP1Í5
P1Í?P)Î AP1ÏP+Ï	P1ÏP1Ï!P-Ï"P1Ï8P/Ï9	P1ÐP1ÐP	Ð
P1Ð#P1Ð&P1Ð)P1Ð+P1Ð-P1Ð/P1c              ƒ  óV  "  € Rp V P                   '       d\   V P                   P                  \        VP                  4      \        VP                  4      V P                  V4      R7      G Rj  x€L
 pT'       g-    \        P                  ! T P                  Y4      G Rj  x€L
  T# \        TP                  R4      ;'       g    R4      pTpT'       dC   T P                   e5    T P                   P                  T4      G Rj  x€L
 pT'       d	   Yv8w  d   TpT'       dF   YbP                  8w  d6   T P                  P!                  Y6TP                  R
7      G Rj  x€L
 pTe   TpT'       d2   Ye8w  d,   \        P                  ! T P"                  YRR7      G Rj  x€L
  T#  EL1  \         d    \        P                  RRR7        ELTi ; i EL+  \         d    \        P                  RRR7        T# i ; i Lô  \         d    \        P                  R	TRR7       Tp ELi ; i LË LŽ5i)u™   Follow the (chat_id, thread_id) topic binding â€” healed to its compression tip â€” or record
a fresh one. Returns the (possibly switched) session entry.N)r†   rm   Úprofile_namez%Failed to read Telegram topic bindingTri   z'Failed to record Telegram topic bindingr®   r5   z$compression-tip lookup failed for %s)Úexpected_session_idzcompression-tip-walk©Úreason)r»   Úget_telegram_topic_bindingr‡   r†   rm   Ú_telegram_topic_profile_namer�   rL   rz   rÛ   rÜ   Ú_record_telegram_topic_bindingr=   Úget_compression_tipr®   râ   Úswitch_sessionÚ_sync_telegram_topic_binding)	rŠ   rV   rõ   rW   ÚbindingÚstored_session_idÚbound_session_idÚcanonical_session_idÚswitcheds	   &&&&     r'   rì   Ú9GatewayTurnPrepareMixin._hmwa_heal_telegram_topic_bindingo  s  é € ð ˆð	QØ××ÐØ $× 0Ñ 0× KÑ KÜ §¡Ó/¼3¸v×?OÑ?OÓ;PØ!%×!BÑ!BÀ6Ó!Jð !Ló !÷ �÷ ðWÜ×'Ò'¨×(KÑ(KÈVÓc×cÐcð !Ð Ü §¡¨LÓ 9× ?Ð ?¸RÓ@ÐØ,Ð÷
  × 0Ñ 0Ò <ð8Ø-1×-=Ñ-=×-QÑ-QÐRbÓ-c×'cÐ$÷ $Ð(<Ô(PØ#7Ð ßÐ 0×4LÑ4LÔ Lð
 "×5Ñ5×DÑDØÀ=×C[ÑC[ð Eó ÷ ˆHð Ò#Ø (�ßÐ 0Ô Eä×#Ò#Ø×1Ñ1°6ÐQgô÷ ð ð ÐòSøô ô 	QÜ�L‰LÐ@È4ˆL×Pð	Qúò døÜô WÜ—‘ÐFÐQU�ÕVØ Ð ðWúñ (døÜô 8Ü—‘ÐCÐEUÐ`d�ÔeØ'7Ó$ð8úññùsã   ‚H)†A(F" Á.FÁ/F" Á3H)Á<$G Â GÂ!G Â%H)ÃH)ÃH)Ã$G9 ÄG7ÄG9 ÄH)ÄH)Ä:H)ÅH%ÅH)Å,,H)ÆH'ÆH)ÆF" Æ""GÇH)ÇGÇH)ÇG Ç"G4Ç0H)Ç3G4Ç4H)Ç7G9 Ç9%H"ÈH)È!H"È"H)È'H)c              ƒ  ó  "  € \        VRR4      pV'       d,   V P                  VRR7       V P                  V4       RVn        \        VRR4      pVP                  VP
                  8H  ;'       g    T;'       g    TpV'       d   RVn        V'       di   V P                  P                  RRVP                  '       d   VP                  P                  MRR	VP                  R
VP                  RV/4      G Rj  x€L
  WF3#  L5i)zƒConsume auto-reset / fresh-reset flags and emit ``session:start`` for new sessions.
Returns ``(_was_auto_reset, _is_new_session)``.Úwas_auto_resetFÚ
auto_resetr  Úis_fresh_resetzsession:startr…   r5   rÞ   r®   rW   N)r„   Ú_clear_conversation_scopeÚ_evict_cached_agentr  Ú
created_atÚ
updated_atr  ÚhooksÚemitr…   ÚvaluerÞ   r®   )rŠ   rõ   rW   rV   Ú_was_auto_resetÚ_is_fresh_resetÚ_is_new_sessions   &&&&   r'   Ú_hmwa_open_sessionÚ*GatewayTurnPrepareMixin._hmwa_open_session   sì   é € ô
 " -Ð1AÀ5ÓIˆßð ×*Ñ*¨;¸|Ð*ÔLØ×$Ñ$ [Ô1Ø+0ˆMÔ(ä! -Ð1AÀ5ÓIˆØ'×2Ñ2°m×6NÑ6NÑN×tÐtÐRa×tÐtÐetˆçà+0ˆMÔ(ßØ—*‘*—/‘/ /Ø°V·_·_°_˜FŸO™O×1Ò1È"Ø˜6Ÿ>™>Ø˜m×6Ñ6Ø˜{ð	4ó ÷ ð ð Ð/Ð/ñùs0   ‚A-DÁ0	DÁ:
DÂDÂ(DÂ=:DÃ7C?Ã8Dc              ƒ  ó"  "  € ^ RI Hp \        VRR4      ;'       g    RpVP                  WTR,          4      p \	        W4      pV'       d   VR,           V,           pVP                  V4        VR8H  pV'       d   V P                  V4      MRp	V	'       d˜   \        R4      p
\        \
        4      ;_uu_ 4        \        P                  ! V P                  V4      G Rj  x€L
 pV'       d   V
 RV 2p
RRR4       V	P                  VP                  W P                  V4      R7      G Rj  x€L
  RTn        R#   \
         d    Rp ELi ; i Ll  + '       g   i     Lc; i L6  \
         d!   p\         P#                  RT4        Rp?LZRp?ii ; i5i)	zSStage the auto-reset sidecar note for the agent and notify the user (policy-gated).)Ú_AUTO_RESET_CONTEXT_NOTESÚauto_reset_reasonNÚ	suspendedú

z!gateway.session.auto_reset_notice)rÊ   z.Auto-reset notification failed (non-fatal): %s)r8   r   r„   r=   r   r�   ÚappendÚ_delivery_adapter_forr   r   rÛ   rÜ   Ú_reset_notice_session_infoÚsendr†   Ú_thread_metadata_for_sourcerL   rz   r!  )rŠ   rõ   rV   Úturn_sidecar_notesr   Úreset_reasonÚcontext_noteÚcontinuity_noteÚshould_notifyÚadapterÚnoticeÚsession_infoÚes   &&&&         r'   Ú_hmwa_deliver_auto_reset_noticeÚ7GatewayTurnPrepareMixin._hmwa_deliver_auto_reset_noticeÀ  sY  é € å9Ü˜}Ð.AÀ4ÓH×WÐWÈKˆØ0×4Ñ4°\Ð]hÕCiÓjˆð	#ô <¸MÓRˆO÷ Ø'¨&Õ0°?ÕBˆLØ×!Ñ! ,Ô/ð	NØ(¨KÑ7ˆMß<I�d×0Ñ0°Ô8ÈtˆGßÜÐ>Ó?�Üœi×(Õ(Ü)0×):Ò):¸4×;ZÑ;ZÐ\bÓ)c×#c�Lß#Ø$* 8¨4°¨~Ð!>˜÷ )ð —l‘l 6§>¡>°6×DdÑDdÐekÓDl�lÓm×mÐmð
 +/ˆÖ'øô) ô 	#Ø"‹Oð	#úñ $d÷ )×(úñ nøÜô 	NÜ�L‰LÐIÈ1×MÑMûð	Nüs    ‚6F¹D6 ÁFÁ!FÁ.E! Á;E! Â"E! Â8%EÃE
ÃEÃ*EÃ17E! Ä(EÄ)E! Ä-	FÄ6EÅFÅEÅFÅ
EÅE	Å	E! Å!FÅ,FÆFÆFÆFc                óJ  € \        V\        4      '       d   V.M
\        V4      p ^ RIHpHp . p. p	V Fj  p
V! W£R7      pV'       g   \        P                  RV
4       K,  Vw  rÍpV! WÍRV R24      pV'       g   KH  VP                  V4       V	P                  V
4       Kl  	  V'       dJ   VP                  VP                  4       RP                  V4      Vn	        \        P                  RW”4       R	# R	#   \         d#   p\        P                  RTT4        R	p?R	# R	p?ii ; i)
zPPrepend topic/channel-bound skill payload(s) to ``event.text`` on a new session.)Ú_load_skill_payloadÚ_build_skill_message)Útask_idz#[Gateway] Auto-skill '%s' not foundz[IMPORTANT: The "zB" skill is auto-loaded. Follow its instructions for this session.]r#  z0[Gateway] Auto-loaded skill(s) %s for session %sz-[Gateway] Failed to auto-load skill(s) %s: %sN)rÀ   r‡   r~   Úagent.skill_commandsr5  r6  rL   rM   r$  ÚtextÚjoinrƒ   r�   )rŠ   rî   Ú_autoÚ
_quick_keyrW   Ú_skill_namesr5  r6  Ú_combined_partsÚ_loaded_namesÚ_snameÚ_loadedÚ_loaded_skillÚ
_skill_dirÚ_display_nameÚ_partr1  s   &&&&&            r'   Ú_hmwa_auto_load_skillsÚ.GatewayTurnPrepareMixin._hmwa_auto_load_skillsà  s	  € ä",¨U´C×"8Ò"8˜‘w¼dÀ5»kˆð	]ßVØ)+ˆOØ')ˆMÛ&�Ù-¨fÔI�ßÜ—N‘NÐ#HÈ&ÔQÙØ;BÑ8�¨=Ù,Ø!Ø'¨ ð 7Að Bó�÷
 ‘5Ø#×*Ñ*¨5Ô1Ø!×(Ñ(¨Ö0ñ '÷ Ø×&Ñ& u§z¡zÔ2Ø#Ÿ[™[¨Ó9�”
Ü—‘ÐNÐP]Ökñ øô ô 	]Ü�N‰NÐJÈLÐZ[×\Ò\ûð	]ús%   ¦AC5 Á<-C5 Â*AC5 Ã5D"Ä DÄD"c           	   ƒ  óD  "  € ^ RI Hp \        V RR4      pVf   R#  VP                  VP                  WV! R\
        4      R7      G Rj  x€L
 pTe*   YpP                  T4      P                  P                  T&   R# R#  L3  \         d    T P                  T4       h i ; i5i)uJ  Serialize [load history â†’ run â†’ flush] per resolved SESSION_ID so another routing key on
the same session waits for the prior flush. Fail-closed on timeout (outer dispatch returns
a resend notice). Released in _handle_message's finally, granted per (routing key, run
generation) so a stale unwind can't release a newer turn's.)Ú
_float_envÚ_turn_leasesNÚHERMES_TURN_LEASE_TIMEOUT)Ú	owner_keyrø   Útimeout)r8   rI  r„   Úacquirer®   r   r   Ú_clear_session_envrN   ÚturnÚlease_tokens)rŠ   r<  Úrun_generationrõ   Ú_session_env_tokensrI  Ú_lease_registryÚ_lease_tokens   &&&&&   r'   Ú_hmwa_acquire_turn_leaseÚ0GatewayTurnPrepareMixin._hmwa_acquire_turn_leaseü  sª   é € õ
 	+Ü! $¨¸Ó=ˆØÒ"Ùð	Ø!0×!8Ñ!8Ø×(Ñ(°JÙ"Ð#>Ô@RÓSð "9ó "÷ ˆLð Ò#ØP\×Ñ 
Ó+×0Ñ0×=Ñ=¸nÓMñ $ñøô %ô 	à×#Ñ#Ð$7Ô8Øð	üs.   ‚B �,A? Á	A=Á
A? Á/B Á=A? Á?BÂB c           	   ƒ  ó(  "  € ^ RI HpHpHp V'       g	   V'       d   R# \	        VP
                  4      ;'       d.    VP
                  \        P                  \        P                  39  pV'       dv   VP                  R8X  de   V P                  P                  4       G Rj  x€L
 '       g=   ^ RIHp	 V	! V! 4       V! 4       R,          RRR7      p
V
'       d   VP                  V
4       V'       g   R# VP
                  P                  pV! V4      pR	pV'       d*   ^ R
IHpHp  V! V4      ;'       g    R	P'                  4       p\3        \,        4      ;_uu_ 4        V'       g.   V P4                  P7                  VP
                  4      '       d   RpRRR4       V'       gƒ   \3        \,        4      ;_uu_ 4        ^ RIHp \=        VRR4      ;'       g    R	P'                  4       pV'       d0   VR8w  d)   V! 4       P7                  VP
                  4      '       d   RpRRR4       V'       gZ   VP
                  \        P>                  8X  d   RMRpV PA                  V\C        RVPE                  4       VR7      4      G Rj  x€L
  R# R#  ELä  T d3    \(        P*                  ! T4      ;'       g    R	P'                  4       p EL}\,         d    \.        P1                  RTRR7       R	p EL¤i ; i  + '       g   i     ELd; i  + '       g   i     Lí; i L•5i)a  First-ever-message onboarding note + one-time 'no home channel' prompt (both only when
the session has no history). Delivered on the user message (sidecar), NOT the ephemeral
system prompt: present-on-turn-1/absent-on-turn-2 was a guaranteed prompt diff + rebuild.)Ú_gateway_config_homeÚ_home_target_env_varÚ_load_gateway_configNÚdm)Úfirst_contact_turn_notezconfig.yamlTF)Úsession_history_emptyÚinstall_has_prior_sessionsr5   )ÚUnscopedSecretErrorÚ
get_secretz7Home-channel secret %s unreadable; treating it as unsetri   Úset)Úload_gateway_configÚprofiler7   z/hermes sethomez/sethomezgateway.notify.no_home_channel)r…   Úsethome_cmd)#r8   rY  rZ  r[  r[   r…   r	   ÚLOCALÚWEBHOOKÚ	chat_typerâ   Úhas_any_sessionsÚagent.onboardingr]  r$  r  Úagent.secret_scoper`  ra  rÚ   ÚosÚgetenvr�   rL   rz   r   rl   Úget_home_channelÚgateway.configrc  r„   ÚSLACKÚ_deliver_platform_noticer   Útitle)rŠ   rV   Úhistoryr)  rÏ   rY  rZ  r[  Úhuman_platformr]  ÚnoteÚplatform_nameÚenv_keyÚhome_envr`  ra  Ú_lgcÚprofre  s   &&&&&              r'   Ú_hmwa_first_contact_notesÚ1GatewayTurnPrepareMixin._hmwa_first_contact_notes  sK  é € ÷ 	aÑ`ß—hÙô ˜fŸo™oÓ.×lÐl°6·?±?Ì8Ï>É>Ô[c×[kÑ[kÐJlÑ3lˆß˜f×.Ñ.°$Ô6ÀT×E]ÑE]×EnÑEnÓEp×?pÖ?põ AÙ*Ù$Ó&Ñ(<Ó(>ÀÕ(NØ&*ÀuôˆD÷ Ø"×)Ñ)¨$Ô/÷ ÙØŸ™×-Ñ-ˆÙ& }Ó5ˆàˆß÷ KðÙ& wÓ/×5Ð5°2×<Ñ<Ó>�ô ”i× Õ ß §¡× <Ñ <¸V¿_¹_× MÒ MØ �÷ !÷ Üœ)×$Õ$ÝFÜ ¨	°4Ó8×>Ð>¸B×EÑEÓG�ß˜D IÔ-±$³&×2IÑ2IÈ&Ï/É/×2ZÒ2ZØ$�H÷	 %÷
 à/5¯©Ä(Ç.Á.Ô/PÑ+ÐV`ˆKØ×/Ñ/ØœÐ:À]×EXÑEXÓEZÐhsÔtó÷ ò ñ òQ @qøð0 'ô >ÜŸIšI gÓ.×4Ð4°"×;Ñ;Ó=“Üô Ü—‘ÐVÐX_Ðjn�ÔoØ“ðú÷ !× Ð ú÷
 %×$úñùsÖ   ‚L�L»5LÁ1.LÂJÂ 	LÂ**LÃLÃ.)LÄLÄ!J Ä0J ÅLÅ3K)ÆK)ÆLÆLÆ53K=Ç),K=ÈK=ÈLÈ(ALÉ:LÉ;	LÊ#K&Ê*K&Ê;LÊ>K&ËK&Ë"LË%K&Ë&LË)K:	Ë4	LË=L	Ì	Lc                ó–  € ^ RI HpHp ^ RIHp RpRp ^ RIHp ^ RIHp	H	p
H
p V! 4       pV'       dg   \        V\        4      '       dQ   V! W,R7      w  rÞV! W4      pV	! \        VRR4      VR7      pVe   TMTpV! V! 4       4      '       d   V
! W×VR7      pMTpW&V3#   \         d!   p\        P!                  RT4        Rp?L*Rp?ii ; i)	uN  Capture the platform event time as message metadata and keep the persisted transcript
clean â€” strip any leading timestamp prefix and the Discord triggering-message note (a
model instruction, not authored text) â€” regardless of the toggle; only the in-context
RENDER is gated behind gateway.message_timestamps.enabled (default OFF).)r[  Ú_message_timestamps_enabled)Ústrip_discord_triggering_noteN)Úget_timezone)Úcoerce_message_timestampÚ"render_user_content_with_timestampÚ strip_leading_message_timestamps)ÚtzÚ	timestampz2Message timestamp injection failed (non-fatal): %s)r8   r[  r~  Úgateway.run_inboundr  Úhermes_timer€  Úgateway.message_timestampsr�  r‚  rƒ  rÀ   r‡   r„   r�   rL   rz   )rŠ   rî   Úmessage_textr[  r~  r  Úpersist_user_messageÚpersist_user_timestampÚ_get_evt_tzÚ_coerce_msg_tsÚ_render_msg_tsÚ_strip_msg_tsÚ_evt_tzÚ_clean_message_textÚ_embedded_tsÚ_event_epochÚ_ts_errs   &&&              r'   Ú_hmwa_apply_message_timestampÚ5GatewayTurnPrepareMixin._hmwa_apply_message_timestampK  s×   € ÷
 	RÝEØ#ÐØ!%Ðð	XÝ?÷ñ ñ
 "“mˆGß¤
¨<¼× =Ò =Ù4AÀ,Ô4[Ñ1Ð#Ù'DÀUÓ'`Ð$Ù-¬g°e¸[È$Ó.OÐT[Ô\�Ø9EÒ9Q©ÐWcÐ&Ù.Ñ/CÓ/E×FÒFÙ#1Ð2EÐbiÔ#j‘Lð $7�Lð Ð3IÐIÐIøô ô 	XÜ�L‰LÐMÈw×WÑWûð	Xús)   ”B ³AB Â
B ÂB ÂCÂ(CÃCc                  ó‚   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
]R&   RtR
]R&   RtR
]R&   RtR
]R&   Rt	R# )Ú%GatewayTurnPrepareMixin._PreparedTurnij  z<Inputs to the agent run assembled by ``_hmwa_prepare_turn``.r   rs  r‡   Úcontext_promptr‰  rŠ  r‹  rZ   Úpersist_user_display_kindNÚpersistence_session_idÚpersistence_ownerÚtitle_user_messager%   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r›  rœ  r�  Ú__static_attributes__r%   r)   r'   Ú_PreparedTurnr˜  j  sI   ‡ áJà‹ØÓØÓØ!Ó!Ø #Ó#Ø#0Ó0Ø04Ð Ó4Ø+/Ð˜=Ó/Ø,0Ð˜M×0r)   r¥  c              ƒ  ó 	  "  € ^ RI Hp ^ RIHp V P	                  W4V4      G Rj  x€L
 w  ršV! WCP
                  4       \        W P                  V4      pV P                  V4      p^ RI	H
p V! V4      pRp\        \        4      ;_uu_ 4        \        V! 4       P                  R4      ;'       g    / P                  RR4      4      pRRR4       VP                  ;'       g    \!        VRR4      pVP"                  \$        P&                  8w  d4   V'       d,   V'       d$   V P)                  WCP*                  4      G Rj  x€L
  VP"                  \$        P&                  8X  d   R	MV P-                  W¿VVR
7      p. pV	'       d   V P/                  W2V4      G Rj  x€L
  VP0                  ;'       g    Rp\!        VRR4      pV
'       d   V'       d   V P3                  VVWT4       V P5                  WVW<4      G Rj  x€L
  V P7                  WP8                  4      G Rj  x€L
   V P:                  P=                  VP*                  4      G Rj  x€L
 pV P?                  WW4VWV4      G Rj  x€L
 pT PK                  TTTTP                  R
7      G Rj  x€L
  T PM                  YT4      pT'       d   TPO                  T4       T PQ                  YTTR7      G Rj  x€L
 pTf   \!        TRR4      T3# T PS                  TT4      w  pppT'       d   T'       d   T PU                  TT4       T PW                  T PY                  T4      YF4       ^ RI-pTP"                  P\                  TP^                  TP`                  TPb                  TPd                  \g        TPh                  4      .pTPh                  '       d:   \g        TPk                  TPl                  \n        Pp                  ! T4      4      4      M\g        TPs                  4       4      pT Pu                  TTTTTYãP*                  TTR7	      T3#  EL   + '       g   i     ELk; i EL  ELª ELM EL- EL ELé  \@         d.    T PC                  T4       ^ RI"H#p T! \I        R4      4      T3u # i ; i EL  EL¼5i)a�  Everything between session resolution and the agent run: session open, task-local env,
context prompt, sidecar notes, turn lease, transcript load + hygiene, inbound text. Returns
``(_PreparedTurn, env_tokens)``; a ``str`` first element is a reply to send instead of
running (history unreadable, a local turn's refused ``@`` references); ``None`` drops the turn
(inbound text rejected).)r[  )Úrestore_gateway_yoloN)Údisplay_kind_for_eventFÚprivacyÚ
redact_piiÚinherit_channel_pinr5   )rÏ   Ú
auto_skill)Úrecord_unexecuted_failurez"gateway.errors.history_unavailable)rî   rV   rs  rW   Ú_gateway_turn_refusal)r�  );r8   r[  Útools.approval_yolor§  r  Úyolor   rl   Ú_set_session_envÚgateway.response_filtersr¨  r   r�   r[   r=   rÏ   r„   r…   r	   rf  Ú_rehydrate_prompt_pinsr®   Ú_pinned_session_context_promptr2  r9  rF  rV  Ú_mark_durable_active_turnrW   râ   Úload_transcriptÚ_hmwa_run_session_hygiener   rO  rè   r­  r   r{  Ú_voice_channel_sidecar_noter$  Ú,_prepare_profile_scoped_inbound_message_textr•  Ú_set_pending_turn_sidecar_notesÚ_bind_adapter_run_generationr%  Úuuidr  rd  Úscope_idr†   rm   r‡   Ú
message_idÚuuid5ÚNAMESPACE_URLr¾   rÃ   Úuuid4r¥  )rŠ   rî   rV   rõ   rW   r<  rR  r[  r§  r  r  ÚcontextrS  r¨  rš  Ú_redact_piiÚ_reuse_pinsr™  r)  r�  r;  rs  r­  Ú_vc_noter‰  rŠ  r‹  r¼  Ú	namespacer÷   s   &&&&&&&                       r'   Ú_hmwa_prepare_turnÚ*GatewayTurnPrepareMixin._hmwa_prepare_turnx  s  é € õ 	5Ý<Ø15×1HÑ1HÈÐekÓ1l×+lÑ(ˆÙ˜[×*<Ñ*<Ô=Ü'¨·±¸]ÓKˆà"×3Ñ3°GÓ<ÐåCÙ$:¸5Ó$AÐ!ØˆÜ”i× Õ ÜÑ 4Ó 6× :Ñ :¸9Ó E× KÐ KÈ×PÑPÐQ]Ð_dÓeÓfˆK÷ !ð —n‘n×TÐT¬°Ð7LÈeÓ(TˆØ�?‰?œhŸn™nÔ,·ÇØ×-Ñ-¨k×;SÑ;SÓT×TÐTØ%Ÿ™´(·.±.Ô@™Ø×/Ñ/°ÀkÐ\gÐ/Óhð 	ð
 )+ÐßØ×6Ñ6°}ÐN`Óa×aÐað #ŸZ™Z×/Ð/¨4Ðô ˜˜|¨TÓ2ˆßŸuØ×'Ñ'¨¨u°jÔNà×+Ñ+¨JÈÓk×kÐkð ×,Ñ,¨U×4MÑ4MÓN×NÐNð	kØ ×4Ñ4×DÑDÀ]×E]ÑE]Ó^×^ˆGØ ×:Ñ:Ø˜}¸7ÀJó÷ ˆGð ×,Ñ,¨V°WÐ>PÐ[`×[iÑ[iÐ,Ój×jÐjð ×3Ñ3°EÀ;ÓOˆßØ×%Ñ% hÔ/ð "×NÑNØ°À[ð Oó 
÷ 
ˆð Òä˜5Ð"9¸4Ó@ÐBUÐUÐUð ×.Ñ.¨u°lÓCñ 	CˆÐ*Ð,B÷ §+Ø×0Ñ0°Ð>PÔQð 	×)Ñ)¨$×*DÑ*DÀVÓ*LÈkÔjó 	Ø—_‘_×*Ñ*¨F¯N©N¸F¿O¹OØ—^‘^ V×%5Ñ%5´s¸5×;KÑ;KÓ7LðNˆ	ð ×$×$Ð$ô �T—Z‘Z × 2Ñ 2´D·J²J¸yÓ4IÓJÔKÜ*-¨d¯j©j«lÓ*;ð 	à×!Ñ!Ø�^ \Ð3GÐI_Ø%×'?Ñ'?ÀØ1ð "ó 
ð ð	ð 	ò ,m÷ !× Ð úò Uò bò 	lò 	Oò
 _òøô #ô 	kØ×#Ñ#Ð$7Ô8ÝIÙ,¬QÐ/SÓ-TÓUÐWjÐjÒjð	kúò
 	kò
ùs  ‚"R¤P$¥A&RÂ:P'ÃRÃ 4RÄRÄRÄ;P;Ä<ARÅ?RÆP>ÆRÆ,RÇ(RÇ4QÇ5"RÈQÈRÈ(Q ÉQÉQ É!Q
É"Q É&"RÊRÊ	ARËRË4RÌRÌDRÐ'P8	Ð2
RÐ>RÑRÑRÑQ Ñ
Q Ñ5RÒRÒRÒRÒR)r?   )F)rž  rŸ  r   r¡  r™   r«   rÇ   rü   rì   r  r2  rF  rV  r{  r•  rß   Ú	dataclassr¥  rÇ  r¤  r%   r)   r'   rU   rU   ]   s•   † ðuMØ37ðuMØVZðuMà&*ðuMà=A÷uMõn%õN#YòJL2ò\/òb0ò@/ò@]ò8]ô*8òtJð> ×Ñ÷1ð 1ó ð1ökr)   rU   )@r¢  Ú
__future__r   r|   Útypingr   rÛ   rß   Úinspectr¾   rl  ÚqueueÚ	threadingÚtimeÚ
agent.i18nr   Úagent.session_activityr   Ú
contextlibr   r   Úcontextvarsr   ro  r	   Úgateway.media_repairr
   Úgateway.platforms.baser   Úgateway.platforms.eventr   Úgateway.sessionr   r   r   r   Úgateway.session_transcriptr   Úgateway.turn_contextr   Úgateway.turn_leaser   r   Úhermes_constantsr   Úpathlibr   r   r   r   r   r   r   Úutilsr   r8   r   Úgateway.run_turn_runnerr   Ú	getLoggerrL   rF   rS   rU   r%   r)   r'   Ú<module>rà     s�   ðÙ AÝ "ã Ý  Û Û Û Û Û 	Û Û Û Ý Ý <ß ,Ý $Ý #Ý IÝ 6Ý 0÷ó õ ;Ý ,ß HÝ 5Ý ß =× =Ý #çÝ)Ý2ð 
×	Ò	˜=Ó	)€ð1¸d÷ 1ò2÷4F
ó F
r)   