+
    iHàjÖ:  ã                  ój  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
HtHtHtHt ^ RIHt ^ RIHtHt ^ RIHt ]P,                  ! ]4      t]! RRR	7       ! R
 R4      4       t]! RRR	7       ! R R4      4       t0 R]mt0 R^mt]],          0 R_m,          t]],          0 R`m,          t0 Ramt]P@                  ! R4      t!R R lt"R R lt#]#! RRRRRR4      R3R R3]#! RR 4      R3]#! R!R"R#R$R%R&R'R(R)4	      R*3]#! R+R,R-4      R.3]#! R/4      R3]#! R4      R033t$R1]%R2&   R3 R4 lt&R5 R6 lt'R7 R8 lt(R9 R: lt)R;^€/R< R= llt*R> R? lt+R@ RA lt,RB RC lt-RD RE lt.RF RG lt/RH RI lt0RJ RK lt1RL RM lt2RNR/RO RP llt3RQ RR lt4RS RT lt5RU RV lt6RW RX lt7RY RZ lt8 ! R[ R\]Pr                  4      t:. RbOt;R# )ca  Gateway health and diagnostics signal producer.

Keeps the plane narrow: service health plus redacted operational diagnostics,
derived from the existing gateway runtime-status contract. No prompts,
messages, tool args, session history, audit records, or product analytics.
)ÚannotationsN)Ú	dataclass)ÚAnyÚCallableÚDictÚListÚOptional)Úemitter)ÚGatewayDiagnosticEventÚGatewayHealthEvent©Úredact_boundedT)ÚfrozenÚslotsc                  ó6   € ] tR t^t$ R]R&   R]R&   R]R&   RtR# )	ÚGatewayMetricÚstrÚnamezint | floatÚvaluezdict[str, str]Ú
attributes© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚD/home/ubuntu/.hermes/hermes-agent/agent/monitoring/gateway_health.pyr   r      s   ‡ à
ƒIØÓØ×r   r   c                  ó,   € ] tR t^t$ R]R&   R]R&   RtR# )ÚGatewayHealthSnapshotzlist[GatewayMetric]Úmetricsú1list[GatewayHealthEvent | GatewayDiagnosticEvent]Úeventsr   Nr   r   r   r   r!   r!      s   ‡ à Ó Ø=×=r   r!   ÚfatalÚstartup_failedÚunknownz&^gateway(?:\.[A-Za-z_][A-Za-z0-9_]*)*$c               ó    € V ^8„  d   QhRRRR/# )é   r   r   ÚreturnúOptional[str]r   )Úformats   "r   Ú__annotate__r-   ,   s   € ÷ Wñ W 3ð W¨=ñ Wr   c                óŠ   € \        T ;'       g    R4      p\        V4      ^€8:  d   \        P                  V4      '       d   V# R# )zFReturn a bounded source-controlled gateway logger name for OTLP scope.Ú N)r   ÚlenÚ_SOURCE_LOGGER_REÚ	fullmatch)r   r   s   & r   Úsource_logger_for_exportr3   ,   s9   € ä�—
�
˜‹O€EÜ˜“J #Ô%Ô*;×*EÑ*EÀe×*LÒ*Lˆ5ÐVÐRVÐVr   c               ó    € V ^8„  d   QhRRRR/# )r)   Úneedlesr   r*   zCallable[[str], bool]r   )r,   s   "r   r-   r-   2   s   € ÷ Bñ B˜Cð BÐ$9ñ Br   c                 ó   a € V 3R  l# )c                óz   <a € \         ;QJ d    V 3R  lS 4       F  '       g   K   R# 	  R# ! V 3R  lS 4       4      # )c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )Ú.0ÚneedleÚtexts   & €r   Ú	<genexpr>Ú2_contains_any.<locals>.<lambda>.<locals>.<genexpr>3   s   øé € ÐA¹¨v džN»ùó   ƒTF)Úany)r<   r5   s   f€r   Ú<lambda>Ú_contains_any.<locals>.<lambda>3   s(   ù€ Ÿ›ÔA¹ÓAŸœÐAšÐA˜ÔA¹ÓAÔAr   r   )r5   s   jr   Ú_contains_anyrC   2   s	   ø€ ÜAÐAr   ÚauthÚtokenÚunauthorizedÚ	forbiddenÚ401Ú403Úauth_failedc                ó&   € R V 9   ;'       d    RV 9   # )ÚrateÚlimitr   )Úss   &r   rA   rA   9   s   € ˆv˜‰{×+Ð+˜w¨!™|Ð+r   Úrate_limitedÚtimeoutz	timed outÚnetworkÚ
connectionÚdnsÚsocketzconnect call failedzfailed to connectzcannot connectÚunreachablezname resolutionÚnetwork_errorÚconfigÚmissingÚinvalidÚinvalid_configÚstartupÚplatform_fatalz-tuple[tuple[Callable[[str], bool], str], ...]Ú_GATEWAY_ERROR_RULESc               ó    € V ^8„  d   QhRRRR/# ©r)   Úrawr   r*   r   r   )r,   s   "r   r-   r-   C   s   € ÷ Yñ Y ð Y¨ñ Yr   c                ó~   a€ \        T ;'       g    R 4      P                  4       o\        V3R l\         4       R4      # )r/   c              3  óL   <"  € T F  w  rV! S4      '       g   K  Vx € K  	  R # 5ir9   r   )r:   ÚmatchÚlabelrN   s   &  €r   r=   Ú)classify_gateway_error.<locals>.<genexpr>E   s   øé € ÐLÑ+?™<˜5Á5ÈÇ8—’Ó+?ùs   ƒ$š
$r'   )r   ÚlowerÚnextr]   )r`   rN   s   &@r   Úclassify_gateway_errorrh   C   s/   ø€ ÜˆC�IˆI�2‹×ÑÓ€AÜÔLÕ+?ÓLÈiÓXÐXr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r)   r`   r   ÚstateÚrestart_requestedÚboolr*   r+   r   )r,   s   "r   r-   r-   H   s(   € ÷ ñ ˜cð ¨Sð ÀTð Èmñ r   c               ó¼  a€ V'       d   R# \        T;'       g    R4      P                  4       pV f
   VR8w  d   R# \        V 4      pVR8X  d   VR8w  d   V# R# \        T ;'       g    R4      P                  4       oRS9   g   RS9   g   RS9   d   R# VR	8X  dC   \        ;QJ d    V3R
 lR 4       F  '       g   K   RM	  RM! V3R
 lR 4       4      '       d   R# V# )z>Reduce free-form shutdown text to a bounded operational class.rk   r/   Nr&   r'   ÚsignalÚsigtermÚsigintÚstoppedc              3  ó,   <"  € T F	  qS9   x € K  	  R # 5ir9   r   )r:   Úwordr<   s   & €r   r=   Ú'classify_exit_reason.<locals>.<genexpr>U   s   øé € Ð&UÑ@T¸¨t¦|Ó@Tùr?   TFÚplanned_stop)ÚshutdownÚstop)r   rf   rh   r@   )r`   rj   rk   Ú
state_nameÚ
classifiedr<   s   &$$  @r   Úclassify_exit_reasonrz   H   s¼   ø€ çÙ"Ü�U—[�[˜bÓ!×'Ñ'Ó)€JØ
‚{�zÐ%5Ô5ÙÜ'¨Ó,€JØÐ%Ô%Ø'¨9Ô4ˆzÐJÐ:JÐJÜˆs�yˆy�b‹>×ÑÓ!€DØ�4Ô˜9¨Ô,°¸DÔ0@ÙØ�YÔ§3£3Ô&UÑ@TÓ&U§3§3¢3Ô&UÑ@TÓ&U×#UÒ#UÙØÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   r`   r   Úallowedúset[str]r*   r   r   )r,   s   "r   r-   r-   Z   s!   € ÷ 4ñ 4˜ð 4¨ð 4°cñ 4r   c               ó\   € \        T ;'       g    R 4      P                  4       pW!9   d   V# R # )r'   )r   rf   )r`   r|   rj   s   &$ r   Ú_bounded_stater   Z   s-   € Ü�× Ð �yÓ!×'Ñ'Ó)€EØÔ$ˆ5Ð3¨)Ð3r   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-   _   s&   € ÷ Iñ I˜ð I¨(ð I°}ñ Ir   c               ó&   € V f   R# \        WR7      # )zQ``_bounded_state`` that preserves "absent" (None) instead of coercing to unknown.N©r|   )r   )r`   r|   s   &$r   Ú_optional_staterƒ   _   s   € à’;ˆ4ÐH¤N°3Ô$HÐHr   rM   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   r`   r   rM   Úintr*   r   r   )r,   s   "r   r-   r-   d   s&   € ÷ Tñ T˜Cð T¨3ð T¸ñ Tr   c               ó   € \        WR R R7      # )r'   )rM   ÚemptyÚunavailabler   )r`   rM   s   &$r   Ú_safe_metric_valuer‰   d   s   € Ü˜#°)ÈÔSÐSr   c               ó    € V ^8„  d   QhRRRR/# r_   r   )r,   s   "r   r-   r-   h   s   € ÷ >ñ >˜3ð > 3ñ >r   c                óª   € \        T ;'       g    R4      P                  RRR7      pR\        P                  ! V4      P	                  4       R,           2# )zDReturn a stable opaque instance key without exporting the source ID.r'   zutf-8Úreplace)Úerrorszsha256::Né   N)r   ÚencodeÚhashlibÚsha256Ú	hexdigest)r`   r   s   & r   Ú_safe_instance_idr“   h   sI   € ä�× Ð �yÓ!×(Ñ(¨¸Ð(ÓC€EØ”W—^’^ EÓ*×4Ñ4Ó6°sÕ;Ð<Ð=Ð=r   c               ó    € V ^8„  d   QhRRRR/# )r)   Úlogger_namer   r*   r   )r,   s   "r   r-   r-   n   s   € ÷ Tñ T cð T¨cñ Tr   c                óô   € V P                  R 4      pVR,          RR.8X  d   R# VR,          RR.8X  d,   \        V4      ^8¼  d   V^,          '       d   RV^,           2# V P                  R4      '       d   R# R# )	Ú.:Nr)   NÚgatewayÚrelayzplatform.relayÚ	platformsú	platform.zgateway.platformsÚplatform)Úsplitr0   Ú
startswith)r•   Úpartss   & r   Úsubsystem_for_loggerr    n   sv   € Ø×Ñ˜cÓ"€EØˆR…y�Y Ð(Ô(ÙØˆR…y�Y Ð,Ô,´°U³¸q´ÀUÈ1ÇXÄXØ˜5 �8˜*Ð%Ð%Ø$×/Ñ/Ð0C×DÒDˆ:ÐSÈ)ÐSr   c               ó    € V ^8„  d   QhRRRR/# )r)   Ú	subsystemr   r*   r+   r   )r,   s   "r   r-   r-   w   s   € ÷ _ñ _ cð _¨mñ _r   c                óz   € V P                  R 4      '       d$   V P                  R^4      ^,          ;'       g    R# R# )r›   r—   N)rž   r�   )r¢   s   &r   Úplatform_for_subsystemr¤   w   s6   € Ø3<×3GÑ3GÈ×3TÒ3TˆI�O‰O˜C Ó# AÕ&×.Ð.¨$Ð^ÐZ^Ð^r   c               ó    € V ^8„  d   QhRRRR/# )r)   r`   r   r*   zOptional[int]r   )r,   s   "r   r-   r-   {   s   € ÷ $ñ $�Sð $˜]ñ $r   c                ó`   €  \        V 4      pT^ 8”  d   T# R #   \        \        3 d     R # i ; ir9   )r…   Ú	TypeErrorÚ
ValueError)r`   Úpids   & r   Ú_coerce_pidrª   {   s<   € ðÜ�#‹hˆð ˜”'ˆ3Ð#˜tÐ#øô ”zÐ"ô Úðús   ‚ ˜-¬-c               ó(   € V ^8„  d   QhRRRRRRRR/# )r)   r   r   ÚfallbackzCallable[[], Any]Úkwargsr   r*   r   )r,   s   "r   r-   r-   ƒ   s*   € ÷ ñ ˜#ð Ð):ð Èð ÐQTñ r   c               ób   €  ^ RI Hp \        W04      ! R/ VB #   \         d    T! 4       u # i ; i)zePrefer ``gateway.status.<name>`` (the runtime-status contract); fall back to the local approximation.)Ústatusr   )r˜   r¯   ÚgetattrÚ	Exception)r   r¬   r­   r¯   s   "", r   Ú_gateway_statusr²   ƒ   s4   € ðÝ"Ü�vÔ$Ñ. vÑ.Ð.øÜô Ù‹zÒðús   ‚ ™.­.c               ó    € V ^8„  d   QhRRRR/# )r)   r`   r   r*   r…   r   )r,   s   "r   r-   r-   Œ   s   € ÷ Eñ E˜cð E cñ Er   c                ó2   a € R  V 3R llp\        RVS R7      # )c               ó   € V ^8„  d   QhRR/# )r)   r*   r…   r   )r,   s   "r   r-   Ú*_parse_active_agents.<locals>.__annotate__�   s   € ÷ ñ �cñ r   c                 ó`   <€  \        ^ \        S 4      4      #   \        \        3 d     ^ # i ; i©é    )Úmaxr…   r§   r¨   ©r`   s   €r   r¬   Ú&_parse_active_agents.<locals>.fallback�   s0   ø€ ð	Ü�qœ#˜c›(Ó#Ð#øÜœ:Ð&ô 	Úð	ús   ƒ ˜-¬-Úparse_active_agentsr»   )r²   )r`   r¬   s   f r   Ú_parse_active_agentsr¾   Œ   s   ø€ ÷ð ô Ð0°(ÀÔDÐDr   c               ó    € V ^8„  d   QhRRRR/# )r)   r`   r   r*   údict[str, Any]r   )r,   s   "r   r-   r-   –   s   € ÷ 0ñ 0˜ð 0 ñ 0r   c                ó6   € \        V \        4      '       d   V # / # r9   )Ú
isinstanceÚdictr»   s   &r   Ú_dict_or_emptyrÄ   –   s   € Ü˜S¤$×'Ò'ˆ3Ð/¨RÐ/r   c               ó    € V ^8„  d   QhRRRR/# )r)   ÚruntimeúOptional[dict[str, Any]]r*   rÀ   r   )r,   s   "r   r-   r-   š   s   € ÷ <ñ <Ð3ð <¸ñ <r   c                óJ   € \        T ;'       g    / P                  R 4      4      # )rš   )rÄ   Úget)rÆ   s   &r   Ú_platforms_ofrÊ   š   s   € Ü˜7Ÿ=˜= b×-Ñ-¨kÓ:Ó;Ð;r   Úsupervision_modec               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r)   rÆ   rÇ   Úgateway_runningrl   Úprofiler   Ú
install_idÚversionrË   r*   r!   r   )r,   s   "r   r-   r-   ž   sO   € ÷ >Añ >AØ%ð>AØ;?ð>AØJMð>AØ[^ð>AØilð>Aàð>Að ñ>Ar   c               óÔ  aaa€ T ;'       g    / p \        V P                  R4      \        R7      p\        V P                  R^ 4      4      oT;'       d    VR8H  o\	        RVV3R lWSR7      p\	        RV3R	 lWR
7      p\        V 4      p	\        T;'       g    R4      P                  4       p
R\        V4      R\        V^@R7      RV
\        9   d   T
MR/oR V3R llpV! R\        \        V4      4      4      V! RS4      V! R\        \        V4      4      4      V! R\        \        V4      4      4      V! R\        \        V P                  R4      4      4      4      V! R+/ RV/B .p^ p. pV	P                  4        EF  w  pp\        V4      p\        VP                  R4      \        R7      p\!        VP                  R4      ;'       g    VP                  R4      4      pV\"        9   pVV,          pR\        V4      RV/pVP%                  V! R\        V\&        9   4      3/ VB 4       VP%                  V! R\        V4      3/ VBR V/B 4       V'       g   Kß  TP%                  \)        R!R"V 2\        V4      TTY$VR#8X  d   R$MR%R&7      4       EK  	  VP+                  ^ \-        R'VSVV\/        V	4      WÒW4V\1        V P                  R(4      4      R)7      4       \3        WÎR*7      # ),zDConvert gateway_state.json-compatible runtime state into P0 signals.Úgateway_stater‚   Úactive_agentsÚrunningÚderive_gateway_busyc                 óF   <€ \        S;'       d    \        S 4      ^ 8„  4      # r¸   )rl   r¾   )rÓ   rÔ   s   €€r   rA   Ú/build_gateway_health_snapshot.<locals>.<lambda>¨   s   ø€ ¤t¨G×,_Ð,_Ô8LÈ]Ó8[Ð^_Ñ8_Ô'`r   )rÍ   rÒ   rÓ   Úderive_gateway_drainablec                 ó   <€ \        S 4      # r9   )rl   )rÔ   s   €r   rA   r×   ¬   s	   ø€ ¬D°¬Mr   )rÍ   rÒ   r'   zservice.instance.idzservice.version)rM   zhermes.supervision_modec               ó(   € V ^8„  d   QhRRRRRRRR/# )r)   r   r   r   ÚfloatÚextrar*   r   r   )r,   s   "r   r-   Ú3build_gateway_health_snapshot.<locals>.__annotate__¶   s.   € ÷ Gñ G�Sð G ð G°ð G¸ñ Gr   c                óŒ   <€ \        S4      pVP                  4        F  w  rEVf   K  \        V4      W4&   K  	  \        WVR7      # )N)r   r   r   )rÃ   Úitemsr‰   r   )r   r   rÜ   ÚattrsÚkeyÚvalÚbases   &&,   €r   ÚmetricÚ-build_gateway_health_snapshot.<locals>.metric¶   s>   ø€ Ü�T“
ˆØŸ™ž‰HˆCØŒÜ/°Ó4�“
ñ &ô  $ÀÔFÐFr   zhermes.gateway.upzhermes.gateway.active_agentszhermes.gateway.busyzhermes.gateway.drainablez hermes.gateway.restart_requestedrk   úhermes.gateway.staterj   Ú
error_codeÚerror_messagezhermes.platformzhermes.platform.statezhermes.platform.upzhermes.platform.degradedzhermes.error_codeúplatform.fatalr›   r%   ÚerrorÚwarning)r   r¢   rœ   rç   Úerror_classrÎ   rÐ   Úseverityzgateway.health_snapshotr©   )r   rÒ   rÓ   Úgateway_busyÚgateway_drainableÚplatform_countÚfatal_platform_countrÎ   rÏ   rÐ   rË   r©   )r"   r$   )ræ   é   )r   rÉ   Ú_KNOWN_GATEWAY_STATESr¾   r²   rÊ   r   rf   r“   r‰   Ú_SUPERVISION_MODESr…   rl   rß   rÄ   Ú_KNOWN_PLATFORM_STATESrh   Ú_FATAL_PLATFORM_STATESÚappendÚ_RUNNING_PLATFORM_STATESr
   Úinsertr   r0   rª   r!   )rÆ   rÍ   rÎ   rÏ   rÐ   rË   rÒ   ÚbusyÚ	drainablerš   Úmoderä   r"   Úfatal_countr$   rœ   Úpdatarj   rç   Úis_degradedÚpattrsrÓ   rã   rÔ   s   &$$$$$               @@@r   Úbuild_gateway_health_snapshotr  ž   sÎ  ú€ ð
 �mˆm˜€GÜ" 7§;¡;¨Ó#?ÔI^Ô_€MÜ(¨¯©°_ÀaÓ)HÓI€MØ×<Ð< -°9Ñ"<€GÜØÕ`Ø'ÐTaô€Dô  Ø"Ô$9È?ô€Iô ˜gÓ&€IÜÐ×,Ð, 9Ó-×3Ñ3Ó5€DàÔ0°Ó<ØÔ-¨g¸RÔ@Ø!¨4Ô3EÔ+E¡4È9ð€D÷Gð Gñ 	Ð"¤C¬¨_Ó(=Ó$>Ó?ÙÐ-¨}Ó=ÙÐ$¤c¬$¨t«*£oÓ6ÙÐ)¬3¬t°I«Ó+?Ó@ÙÐ1´3´t¸G¿K¹KÐH[Ó<\Ó7]Ó3^Ó_ÙÑTÐ-CÀ]Ð,SÑTð$€Gð €KØ@B€Fà$Ÿ?™?×,‰ˆ�%Ü˜uÓ%ˆÜ˜uŸy™y¨Ó1Ô;QÔRˆÜ+¨E¯I©I°lÓ,C×,aÐ,aÀuÇyÁyÐQ`ÓGaÓbˆ
ØÔ5Ñ5ˆØ�{Õ"ˆØ#¤S¨£]Ð4KÈUÐSˆØ�‰‘vÐ2´C¸ÔAYÑ8YÓ4ZÑeÐ^dÑeÔfØ�‰‘vÐ8¼#¸kÓ:JÑzÈfÐzÐYlÐnxÐXyÑzÔ{ß‰;Ø�M‰MÔ0Ø%°9¸X¸JÐ1GÔRUÐV^ÓR_Ø%°:ÀwØ$)¨WÔ$4™¸)ô÷ ñ -ð ‡M�M�!Ô'Ø&°mÐS`ÐosØ#´C¸	³NÐYdØÐAQÔWbÐcj×cnÑcnÐotÓcuÓWvôô ô
 !¨Ô@Ð@r   c               ó   € V ^8„  d   QhRR/# ©r)   r*   r   r   )r,   s   "r   r-   r-   ß   ó   € ÷ ñ �sñ r   c                 óh   €  ^ RI Hp  \        V ! 4       ;'       g    R4      #   \         d     R# i ; i)r¹   ©Úget_active_profile_nameÚdefault)Úhermes_cli.profilesr  r   r±   r  s    r   Ú_safe_profiler
  ß   s3   € ðÝ?ÜÑ*Ó,×9Ð9°	Ó:Ð:øÜô Úðús   ‚" ›" ¢1°1c               ó   € V ^8„  d   QhRR/# r  r   )r,   s   "r   r-   r-   ç   r  r   c                 óV   €  ^ RI Hp  V ! 4       P                  #   \         d     R# i ; i)r¹   ©Úget_version_infor'   )Úhermes_cli.version_infor  Úbase_versionr±   r  s    r   Ú_safe_versionr  ç   s+   € ðÝ<ÙÓ!×.Ñ.Ð.øÜô Úðús   ‚ ™(§(c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r)   ÚpreviousrÇ   ÚcurrentrÀ   rÎ   r   rÐ   r*   r#   r   )r,   s   "r   r-   r-   ï   s4   € ÷ ñ Ø&ðØ1?ðØMPðØ[^ðà6ñr   c               óü  aaaaaa	€ \        T ;'       g    / P                  R4      \        R7      o\        SP                  R4      \        R7      oSS8X  g	   S'       g   . # \        SP                  R4      4      o	R VVVVV	V3R llpV! R4      .pSR8X  dE   \	        SP                  R4      ;'       g    R4      pVP                  \        R	R
WfSSRR7      4       SR8X  d   VP                  V! R4      4       V# )zLGateway-level transition events: lifecycle, startup_failed diagnostic, exit.rÒ   r‚   rk   c               ó    € V ^8„  d   QhRRRR/# )r)   r   r   r*   r   r   )r,   s   "r   r-   Ú'_lifecycle_events.<locals>.__annotate__ù   s   € ÷ 
ñ 
�Sð 
Ð/ñ 
r   c                óÆ   <€ \        V SSS\        SP                  R 4      SSR7      S\        SP                  R^ 4      4      SS\	        SP                  R4      4      R7
      # )Úexit_reason)rj   rk   rÓ   r©   )
r   rÒ   Ú	old_stateÚ	new_stater  rk   rÓ   rÎ   rÐ   r©   )r   rz   rÉ   r¾   rª   )r   r  r  r  rÎ   rk   rÐ   s   &€€€€€€r   ÚhealthÚ!_lifecycle_events.<locals>.healthù   s_   ø€ Ü!Ø Y¸)ÈyÜ,¨W¯[©[¸Ó-GÈyÐl}Ô~Ø/Ô?SÐT[×T_ÑT_Ð`oÐqrÓTsÓ?tØ W´+¸g¿k¹kÈ%Ó>PÓ2Qô	
ð 	
r   zgateway.lifecycler&   r  zgateway.startup_failedr˜   rê   )r   r¢   rì   rç   rÎ   rÐ   rí   rq   zgateway.exit)rƒ   rÉ   ró   rl   rh   r÷   r
   )
r  r  rÎ   rÐ   r  Úoutrì   r  r  rk   s
   &fdd   @@@r   Ú_lifecycle_eventsr  ï   sß   ý€ ô   § ¨R× 4Ñ 4°_Ó EÔOdÔe€IÜ §¡¨OÓ <ÔF[Ô\€IØ�IÔ§YØˆ	Ü˜WŸ[™[Ð)<Ó=Ó>Ð÷
õ 
ñ ?EÐEXÓ>YÐ=Z€CØÐ$Ô$Ü,¨W¯[©[¸Ó-G×-[Ð-[ÐK[Ó\ˆØ�
‰
Ô)Ø)°YÈKØ W°wô
ô 	ð �IÔØ�
‰
‘6˜.Ó)Ô*Ø€Jr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r)   r  rÇ   r  rÀ   rÎ   r   rÐ   r*   zlist[GatewayDiagnosticEvent]r   )r,   s   "r   r-   r-     s4   € ÷ ñ Ø&ðØ1?ðØMPðØ[^ðà!ñr   c               ó˜  € \        V 4      p. p\        V4      P                  4        EF  w  rg\        V4      p\        VP                  V/ 4      4      p\	        VP                  R4      \
        R7      p	\	        VP                  R4      \
        R7      p
Wš8X  g	   V
'       g   K|  \        VP                  R4      ;'       g    VP                  R4      4      p\        RV 2\        V4      Y»Y#V
R9   d   RMRR7      pVP                  \        RR	R
RV	RV
/VB 4       V
\        9   g   EK  VP                  \        RR	R/VB 4       EK!  	  V# )zWPer-platform state_change diagnostics, plus platform.fatal when the new state is fatal.rj   r‚   rç   rè   r›   rê   rë   )r¢   rœ   rç   rì   rÎ   rÐ   rí   r   zplatform.state_changer  r  ré   >   rê   r%   Úfailedr   )rÊ   rß   rÄ   rÉ   rƒ   rõ   rh   rÃ   r   r÷   r
   rö   )r  r  rÎ   rÐ   Úold_platformsr  rœ   rþ   Úprevr  r  rç   Úcommons   &&$$         r   Ú_platform_eventsr&    s,  € ô " (Ó+€MØ(*€CÜ(¨Ó1×7Ñ7×9‰ˆÜ˜uÓ%ˆÜ˜m×/Ñ/°¸"Ó=Ó>ˆÜ# D§H¡H¨WÓ$5Ô?UÔVˆ	Ü# E§I¡I¨gÓ$6Ô@VÔWˆ	ØÔ!¯ÙÜ+¨E¯I©I°lÓ,C×,aÐ,aÀuÇyÁyÐQ`ÓGaÓbˆ
Ü!%Ø! ( Ð,´s¸8³}ÐQ[ØÀ)ÐOkÔBk±wÐqzô"
ˆð 	�
‰
Ô)Ñ{Ð/FÐ{ÐR[Ð{ÐgpÐ{ÐtzÑ{Ô|ØÔ.×.Ø�J‰JÔ-ÑNÐ3CÐNÀvÑN×Oñ :ð €Jr   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   r  rÇ   r  rÀ   r*   ÚNoner   )r,   s   "r   r-   r-   %  s)   € ÷ Uñ UÐ-Eð UÐP^ð UÐcgñ Ur   c                ó  €  \        \        4       \        4       R7      p\        W3/ VB \	        W3/ VB ,            F  p\
        P                  ! V4       K  	  R#   \         d    \        P                  RRR7        R# i ; i)z˜Emit immediate content-free gateway events for runtime status changes.  Called by
gateway.status.write_runtime_status after persisting; fully fail-open.©rÎ   rÐ   z-gateway runtime status transition emit failedT©Úexc_infoN)
rÃ   r
  r  r  r&  r	   Úemitr±   ÚloggerÚdebug)r  r  ÚctxÚevs   &&  r   Úemit_runtime_status_transitionr2  %  sp   € ðUÜœ=›?´M³OÔDˆÜ# HÑ=¸Ñ=Ô@PÐQYÑ@jÐfiÑ@j×jÐjˆBÜ�LŠL˜Öó køäô UÜ�‰ÐDÈtˆ×TðUús   ‚AA Á"BÂ Bc                  óJ   a € ] tR tRtRtRRRR/R V 3R llltR	 R
 ltRtV ;t# )ÚGatewayDiagnosticLogHandleri0  z?Allowlisted warning/error bridge for gateway-owned diagnostics.rÎ   r  rÐ   r'   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   rÎ   r   rÐ   r*   r(  r   )r,   s   "r   r-   Ú(GatewayDiagnosticLogHandler.__annotate__3  s"   € ÷ ñ  3ð ¸Sð ÐQUñ r   c               	ó\   <€ \         SV `  \        P                  R 7       Wn        W n        R# ))ÚlevelN)ÚsuperÚ__init__ÚloggingÚWARNINGrÎ   rÐ   )ÚselfrÎ   rÐ   Ú	__class__s   &$$€r   r:  Ú$GatewayDiagnosticLogHandler.__init__3  s!   ø€ Ü‰ÑœwŸ™ÐÔ/ØŒØŽr   c               ó    € V ^8„  d   QhRRRR/# )r)   Úrecordzlogging.LogRecordr*   r(  r   )r,   s   "r   r-   r6  8  s   € ÷ Jñ JÐ,ð J°ñ Jr   c                	óŒ  €  VP                   \        P                  8  g3   VP                  R 8X  g$   VP                  P	                  R4      '       g   R# \        VP                  4      p\        VP                  4       4      p\        P                  ! 4       P                  \        RVP                  P                  4        2V\        VP                  4      \        V4      W3V P                   V P"                  VP                  P                  4       R7	      4       R#   \$         d    \&        P)                  RRR7        R# i ; i)r˜   zgateway.Nzgateway.log.)	r   r¢   Úsource_loggerrœ   rì   rç   rÎ   rÐ   rí   zgateway diagnostic emit failedTr+  )Úlevelnor;  r<  r   rž   r    rh   Ú
getMessager	   Úget_emitterr-  r
   Ú	levelnamerf   r3   r¤   rÎ   rÐ   r±   r.  r/  )r=  rA  r¢   rì   s   &&  r   r-  Ú GatewayDiagnosticLogHandler.emit8  s÷   € ð	JØ�~‰~¤§¡Ô/¸¿¹ÀyÔ8PÐTZ×T_ÑT_×TjÑTjÐku×TvÒTvÙÜ,¨V¯[©[Ó9ˆIÜ0°×1BÑ1BÓ1DÓEˆKÜ×ÒÓ!×&Ñ&Ô'=Ø# F×$4Ñ$4×$:Ñ$:Ó$<Ð#=Ð>È)Ü6°v·{±{ÓCÔNdÐenÓNoØ'ÈÏÉÐ_c×_kÑ_kØ×)Ñ)×/Ñ/Ó1ô	(ö øô ô 	JÜ�L‰LÐ9ÀDˆL×Ið	Jús   ‚AD ÁCD Ä"EÅEr*  )	r   r   r   r   Ú__doc__r:  r-  r   Ú__classcell__)r>  s   @r   r4  r4  0  s*   ø† ÙIð¨ð À9÷ ò ÷
Jó Jr   r4  >   ÚokÚreadyrÔ   Ú	connected>   rê   r%   r"  Údegraded>   rq   r'   ÚdrainingÚstartingÚstoppingr&   >   Úpausedr'   ÚdisabledÚretryingÚ
connectingÚdisconnected>   Ús6ÚmanualÚlaunchdÚsystemdr'   Ú	container)r4  r!   r   r  rh   r3   )<Ú__conditional_annotations__rI  Ú
__future__r   r�   r;  ÚreÚdataclassesr   Útypingr   r   r   r   r   Úagent.monitoringr	   Úagent.monitoring.eventsr
   r   Úagent.monitoring.redactionr   Ú	getLoggerr   r.  r   r!   rø   rö   ró   rõ   rô   Úcompiler1   r3   rC   r]   r   rh   rz   r   rƒ   r‰   r“   r    r¤   rª   r²   r¾   rÄ   rÊ   r  r
  r  r  r&  r2  ÚHandlerr4  Ú__all__)r\  s   @r   Ú<module>rh     s  øðôõ #ã Û Û 	Ý !ß 6Õ 6å $ß NÝ 5à	×	Ò	˜8Ó	$€ñ �$˜dÔ#÷ð ó $ðñ �$˜dÔ#÷>ð >ó $ð>ò
 CÐ ÚAÐ Ø0Ð3IÕIò  MYõ  YÐ Ø1Ð4JÕJò  NYõ  YÐ ÚSÐ Ø—J’JÐHÓIÐ õWõBñ �6˜7 N°KÀÈÓNÐP]Ð^Ù+¨^Ð<Ù�9˜kÓ*¨IÐ6Ù�9˜l¨E°8Ð=RÐTgÐiyØ Ð"3ó5Ø6EðGá�8˜Y¨	Ó2Ð4DÐEÙ�9ÓÐ/Ð0Ù�7ÓÐ-Ð.ð	GÐ ÐCó 	õYõ
õ$4õ
Ið
T°÷ Tõ>õTõ_õ$õõEõ0õ<ð>Aà%÷>AõBõõõ<õ0UôJ '§/¡/ô Jò0‚r   