+
    lHàj!  ã                  óŒ  € R t ^ RIHt ^ RIt^ RIHt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Ht ^ R	IHt ^ R
IHt ]P0                  ! ]4      t]	R,          t]	R,          t]	R,          t]! RR7       ! R R4      4       t]! RR7       ! R R4      4       tR R lt R R lt!R R lt"R R lt#R R R llt$R R lt%R# )!zLApplication-backed MCP liveness parsing and user-facing status descriptions.)ÚannotationsN)Ú	dataclassÚreplace)ÚAnyÚLiteral)Údeclaration)Úfacts)ÚAppDefÚAppResolver)ÚAvailabilityÚavailability)ÚEffort)Ú
CheckStateT)Úfrozenc                  óf   € ] tR t^t$ R]R&   RtR]R&   RtR]R&   RtR]R	&   R
tR]R&   R R lt	Rt
R# )ÚLivenessÚLivenessKindÚkindÚ ÚstrÚpathÚhttpÚ	url_fieldÚtokenÚtoken_fieldÚpidÚ	pid_fieldc               ó    € V ^8„  d   QhRRRR/# )é   Ú
definitionr	   Úreturn© )Úformats   "Ú7/home/ubuntu/.hermes/hermes-agent/tools/mcp_liveness.pyÚ__annotate__ÚLiveness.__annotate__'   s   € ÷ 

ñ 

¨ð 

°Fñ 

ó    c           	     	óš   € V P                   R 8w  d   V# \        VR V P                  V P                  V P                  V P
                  R7      # )Úserver_json)Úliveness_kindÚliveness_pathÚliveness_pid_keyÚliveness_url_keyÚliveness_token_key)r   r   r   r   r   r   )Úselfr   s   &&r#   Úapp_definitionÚLiveness.app_definition'   sE   € Ø�9‰9˜Ô%ØÐÜØØ'ØŸ)™)Ø!Ÿ^™^Ø!Ÿ^™^Ø#×/Ñ/ô
ð 	
r&   r!   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r   r   r   r/   Ú__static_attributes__r!   r&   r#   r   r      s9   ‡ à
ÓØ€Dˆ#ƒNØ€IˆsÓØ€K�ÓØ€IˆsÓ÷

ñ 

r&   r   c                  óJ   € ] tR t^4t$ R]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚStatusÚLivenessStateÚstater   r   r   Úlivenessr   Úuser_actionÚRetryÚretryr!   N)r1   r2   r3   r4   r5   r6   r!   r&   r#   r8   r8   4   s   ‡ àÓØÓØÓØÓØ‡Lr&   r8   c               ó    € V ^8„  d   QhRRRR/# )r   Úrawr   r    r   r!   )r"   s   "r#   r$   r$   =   s   € ÷ ñ ˜ð  ñ r&   c                ó   € \        V \        4      '       g   \        R4      hV P                  R4      pVR8X  d(   \	        V 4      R08w  d   \        R4      h\        R4      # VR8X  d(   \	        V 4      R08w  d   \        R4      h\        R4      # VR8w  d   \        RV: 24      h\	        V 4      0 Rm,
          '       d   \        R4      hV P                  R	4      pRRRRRR/V P                  R
4      ;'       g    / Cp\        V\        4      '       d   VP                  4       '       g   \        R4      h\	        V4      0 Rm8w  d   \        R4      h\        ;QJ d*    R VP                  4        4       F  '       g   K   RM	  RM! R VP                  4        4       4      '       d   \        R4      h\        RVP                  4       VR,          P                  4       VR,          P                  4       VR,          P                  4       R7      # )z/Parse one portable-plugin liveness declaration.zliveness must be an objectr   Ústaticz#static liveness only accepts 'kind'Úinteractive_sessionz0interactive_session liveness only accepts 'kind'r(   zunknown liveness kind: r   Úfieldsz'server_json liveness has unknown fieldsÚurlr   r   r   z.server_json liveness requires a non-empty pathzAserver_json liveness fields may only override url, token, and pidc              3  ó†   "  € T F7  p\        V\        4      '       * ;'       g    VP                  4       '       * x € K9  	  R # 5i©N)Ú
isinstancer   Ústrip)Ú.0Úvalues   & r#   Ú	<genexpr>Ú!parse_liveness.<locals>.<genexpr>T   s.   é € Ð
XÉ¸uŒz˜%¤Ó%Ô%×:Ð:¨U¯[©[«]Ô):Ô:Ëùs
   ‚ A£ATFz:server_json liveness field names must be non-empty strings)r   r   r   r   >   r   r   rD   >   r   rE   r   )
rH   ÚdictÚ
ValueErrorÚgetÚsetr   r   rI   ÚanyÚvalues)r@   r   r   rD   s   &   r#   Úparse_livenessrT   =   s¯  € ä�cœ4× Ò ÜÐ5Ó6Ð6Ø�7‰7�6‹?€DØˆxÔÜˆs‹8˜�xÔÜÐBÓCÐCÜ˜Ó!Ð!ØÐ$Ô$Üˆs‹8˜�xÔÜÐOÓPÐPÜÐ-Ó.Ð.Øˆ}ÔÜÐ2°4±(Ð;Ó<Ð<Ü
ˆ3ƒxÒ,×,Ô,ÜÐBÓCÐCØ�7‰7�6‹?€DØ�V˜W g¨u°eÐYÀÇÁÈÓ@Q×@WÐ@WÐUWÐY€FÜ�dœC× Ò ¨¯
©
¯ªÜÐIÓJÐJÜ
ˆ6ƒ{Ò-Ô-ÜÐ\Ó]Ð]ß
ƒsÑ
XÈÏÉÌÓ
X‡s‡s‚sÑ
XÈÏÉÌÓ
X×XÒXÜÐUÓVÐVÜØØ�Z‰Z‹\Ø˜•-×%Ñ%Ó'Ø˜7•O×)Ñ)Ó+Ø˜•-×%Ñ%Ó'ôð r&   c               ó    € V ^8„  d   QhRRRR/# )r   Úserver_namer   r    r   r!   )r"   s   "r#   r$   r$   _   s   € ÷ "ñ "˜cð " hñ "r&   c                ó   €  ^ RI Hp T! T 4      pTf   \        R4      #  \	        T4      #   \         d    \        R4      u # i ; i  \
         d,   p\        P                  RY4       \        R4      u Rp?# Rp?ii ; i)zHReturn a server's registered liveness declaration, defaulting to static.)Úliveness_forrB   NzOMCP server '%s' has an invalid liveness declaration (%s); treating it as static)Úhermes_cli.agent_pluginsrX   ÚImportErrorr   rT   rO   ÚloggerÚwarning)rV   Úregistered_livenessr@   Úexcs   &   r#   rX   rX   _   s~   € ð"ÝPñ ˜kÓ
*€CØ
‚{Ü˜Ó!Ð!ð"Ü˜cÓ"Ð"øô ô "Ü˜Ó!Ò!ð"ûô ô "Ü�‰ÐhÐjuÔ{Ü˜Ó!Õ!ûð"ús,   ‚+  
A «AÁAÁA=Á A8Á2A=Á8A=c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r:   r9   Úapp_namer   Ú	gpu_labelr    ztuple[str, Retry]r!   )r"   s   "r#   r$   r$   o   s)   € ÷ 
ñ 
�=ð 
¨Cð 
¸Cð 
ÐDUñ 
r&   c                óŒ   € R RV R2R3RRV R2R3RRV R	2R3R
RV R2R3RRV R2R3RRV R2R3RRV RV R2R3/pW0,          # )Úapp_not_runningzStart z, then try again.Úafter_user_actionÚhermes_not_connectedz
Reconnect z in Hermes, then try again.Úendpoint_unavailablezOpen z1 and enable its local connection, then try again.Úno_interactive_sessionz.Open an interactive desktop session and start Ú
never_hereÚversion_too_oldzUpdate Úmissing_appzInstall Úunsupported_gpuzUse z on a machine with Ú.r!   )r:   r`   ra   Úactionss   &&& r#   Ú_actionrn   o   s®   € à˜f X JÐ.?Ð@ÐBUÐVØ :¨h¨ZÐ7RÐ!SÐUhÐ iØ 5¨¨
Ð2cÐ!dÐfyÐ zØ Ð%SÐT\ÐS]Ð]nÐ#oÐq}Ð"~Ø˜g h ZÐ/@ÐAÐCVÐWØ˜( 8 *Ð,=Ð>Ð@SÐTØ˜d 8 *Ð,?À	¸{È!ÐLÈlÐ[ð7€Gð �>Ðr&   c               ó    € V ^8„  d   QhRRRR/# )r   rV   r   r    zStatus | Noner!   )r"   s   "r#   r$   r$   |   s   € ÷ %9ñ %9˜ð %9 ñ %9r&   c                ó˜  € \         P                  ! V 4      pVf   R# \        V4      p\        V 4      pVP                  R9   d   RpEMAVP                  R8X  d   RpEM,VP                  R8X  d   RpEMVP
                  R8X  d   \        P                  ! 4       '       g   RpMèVP
                  R8X  dÖ   VP                  \        P                  ! 4       4      pVf   RpM¬\        VP                  V4      4      P                  \        VP                  V4      4      P                  4       \        P                  R7      pVP                   P"                  R	Jd   R
pM0VP$                  P                  \&        P(                  Jd   RpMRpMRp\+        WAP,                  \         P.                  ! VP0                  4      4      w  rx\3        WBW7V4      # )zBReturn the current unavailable state for a registered declaration.Nrj   rk   ri   rC   rg   r(   )ÚeffortTrc   rf   re   >   rj   Úunsupported_os)r   Úlookupr   rX   r:   r   r   rC   Úapp_forÚ	os_familyr
   r/   ÚprobeÚlocater   ÚLOCALÚrunningrK   Úendpointr   ÚPRESENTrn   Únamera   Úrequired_gpur8   )	rV   ÚdeclÚ	availableÚliver:   r   rv   Úactionr>   s	   &        r#   Ústatusr‚   |   sn  € ä×Ò˜kÓ*€DØ‚|ÙÜ˜TÓ"€IÜ˜Ó$€DØ‡�Ð;Ô;Ø,ŠØ	�‰Ð-Ô	-Ø!ŠØ	�‰Ð-Ô	-Ø!ŠØ	�‰Ð+Ô	+´E×4MÒ4M×4OÒ4OØ(‰Ø	�‰�mÔ	#Ø—\‘\¤%§/¢/Ó"3Ó4ˆ
ØÒØ!‰Eä × 3Ñ 3°JÓ ?Ó@×FÑFÜ˜D×/Ñ/°
Ó;Ó<×CÑCÓEÌfÏlÉlð Gó ˆEð �}‰}×"Ñ"¨$Ó.Ø)‘Ø—‘×%Ñ%¬Z×-?Ñ-?Ó?Ø.‘ð
 /‘ð 'ˆÜ˜E§9¡9¬k×.CÒ.CÀD×DUÑDUÓ.VÓW�M€FÜ�% D°%Ó8Ð8r&   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r~   zdeclaration.Declarationr   r   Úliveness_stater9   Údisplay_namez
str | Noner    r   r!   )r"   s   "r#   r$   r$   ¤   s3   € ÷  ñ  Ð*ð  °|ð  ÐUbð  Ø%ð Ø14ñ r&   c                óÜ  € T;'       g    V P                   p\        P                  ! V P                  4      p\	        W$V4      w  rgVR8X  d   V R2pM•VR8X  d
   V RV R2pM…VR8X  dS   VP
                  '       d   RVP
                   2MRp	VP                  '       d   R	VP                   R
2MRp
V V	 RV
 R2pM,VR8X  d   V R2pMVR8X  d   V R2pMVR8X  d   V R2pMV R2pV RV 2# )uì   Compose one unavailable-state sentence with one user action.

``display_name`` overrides the declaration's slug when the caller knows the plugin's
catalog/manifest title â€” the Plugins tab does, and a raw slug reads like an error code.rj   z is not installed.rk   z needs z!; none was found on this machine.ri   z	 version r   z
; version z or newer is requiredz is too oldrl   rg   z& needs an interactive desktop session.rf   z!'s local endpoint is unavailable.re   z's MCP connection is missing.z is not running.Ú )r|   r   ra   r}   rn   ÚversionÚmin_version)r~   r   r„   r…   r`   Úgpur�   Ú_retryÚreasonÚfoundÚminimums   &&&&       r#   Údescriber�   ¤   s-  € ð ×(Ð(˜tŸy™y€HÜ
×
Ò
 × 1Ñ 1Ó
2€CÜ˜^°sÓ;�N€FØ˜Ô&Ø�:Ð/Ð0‰Ø	Ð,Ô	,Ø�:˜W S EÐ)JÐK‰Ø	Ð,Ô	,Ø3<×3D×3DÐ3D�)˜I×-Ñ-Ð.Ñ/È"ˆØOX×Od×OdÐOd�J˜y×4Ñ4Ð5Ð5JÑKÐjlˆØ�:˜e˜W K°¨y¸Ð:‰Ø	Ð3Ô	3Ø�:ÐCÐD‰Ø	Ð1Ô	1Ø�:Ð>Ð?‰Ø	Ð1Ô	1Ø�:Ð:Ð;‰à�:Ð-Ð.ˆØˆX�Q�v�hÐÐr&   c               ó    € V ^8„  d   QhRRRR/# )r   rV   r   r    z2tuple[declaration.Declaration, Status, str] | Noner!   )r"   s   "r#   r$   r$   À   s   € ÷ Nñ N Sð NÐ-_ñ Nr&   c                óœ   € \         P                  ! V 4      p\        V 4      pVe   Vf   R# W\        WP                  VP
                  4      3# )z@Return declaration, structured state, and its composed sentence.N)r   rs   r‚   r�   r   r:   )rV   r~   Úcurrents   &  r#   Úunavailable_detailsr“   À   sD   € ä×Ò˜kÓ*€DÜ�[Ó!€GØ‚|�w’ÙØœ( 4×)=Ñ)=¸w¿}¹}ÓMÐMÐMr&   )rB   r(   rC   )rc   re   rf   rg   ri   rj   rk   )rd   rh   rG   )&Ú__doc__Ú
__future__r   ÚloggingÚdataclassesr   r   Útypingr   r   Úhermes_platformr   Úhermes_platform.hostr   Úhermes_platform.resolver.appr	   r
   Ú%hermes_platform.resolver.availabilityr   r   Úhermes_platform.resolver.baser   Úhermes_platform.resolver.corer   Ú	getLoggerr1   r[   r   r9   r=   r   r8   rT   rX   rn   r‚   r�   r“   r!   r&   r#   Ú<module>r       sº   ðÙ Rå "ã ß *ß å 'Ý &ß <ß LÝ 0Ý 4à	×	Ò	˜8Ó	$€àÐEÕF€Øðõ€ð 	Ð1Õ2€ñ �$Ô÷
ð 
ó ð
ñ( �$Ô÷ð ó ðõõD"õ 
õ%9÷P ÷8Nr&   