+
    „WÝ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 ]P                  ! ]4      t]P"                  ! R4      tRtR#t]P"                  ! R4      t/ tR]R	&   ]! R
R7       ! R R4      4       t]! R4      tR R ltR R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R  lt"R! R" lt#R# )$aþ  Whether the desktop app a catalog plugin drives is on this machine, before the plugin is installed.

A portable plugin declares its app in ``plugin.json`` (``extensions.com.nousresearch.hermes.servers``).
The catalog pins the commit, so the declaration is read once per pin from the repo at that commit and
judged by the same ``hermes_platform`` resolver the installer and the Plugins-tab pill use. Nothing is
installed, spawned or connected. Any failure to read the declaration is ``unknown``, never a guess.
)ÚannotationsN)Ú	dataclass)ÚAnyÚDictÚOptionalÚTuplezF^https://github\.com/([A-Za-z0-9_.-]+)/([A-Za-z0-9_.-]+?)(?:\.git)?/?$g      @z\bDisclosure\s*[:\u2014]\s*(.+)z4dict[tuple[str, str, str], Optional[dict[str, Any]]]Ú
_manifestsT)Úfrozenc                  ó4   € ] tR t^t$ RtR]R&   RtR]R&   RtR# )ÚPresencezj``state`` uses the card's vocabulary (``CatalogAppState``); ``sentence`` is empty when present or unknown.ÚstrÚstateÚ Úsentence© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   Ú__static_attributes__r   ó    ÚVC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\plugin_catalog_presence.pyr   r      s   ‡ átàƒJØ€Hˆc×r   r   Úunknownc               ó(   € V ^8„  d   QhRRRRRRRR/# )é   Úrepor   ÚshaÚsubdirÚreturnzOptional[str]r   )Úformats   "r   Ú__annotate__r"   '   s.   € ÷ _ñ _˜Cð _ cð _°3ð _¸=ñ _r   c                ó  € \         P                  V P                  4       4      pV'       g   R # RP                  R VP                  R4      R3 4       4      pRVP	                  ^4       RVP	                  ^4       RV RV 2# )NÚ/c              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5i©Nr   )Ú.0Úps   & r   Ú	<genexpr>Ú$_raw_manifest_url.<locals>.<genexpr>+   s   é € ÐGÑA˜!ÃQ—A’AÓAùs   ‚	�
zplugin.jsonz"https://raw.githubusercontent.com/)Ú_GITHUBÚmatchÚstripÚjoinÚgroup)r   r   r   r,   Úpaths   &&&  r   Ú_raw_manifest_urlr1   '   su   € Ü�M‰M˜$Ÿ*™*›,Ó'€EßÙØ�8‰8ÑG §¡¨SÓ 1°=ÑAÓGÓG€DØ/°·±¸A³Ð/?¸qÀÇÁÈQÃÐ@PÐPQÐRUÐQVÐVWÐX\ÐW]Ð^Ð^r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   r   r   r    zOptional[dict[str, Any]]r   )r!   s   "r   r"   r"   /   s)   € ÷ ñ ˜3ð  Sð °#ð Ð:Rñ r   c                ó  € WV3pV\         9   d   \         V,          # \        WV4      pR pV'       dœ    ^ R IpVP                  V\        RR7      pVP
                  ^È8X  dZ   \        VP                  4      \        8:  d<   \        P                  ! VP                  4      p\        V\        4      '       d   TMR pMVP
                  R8w  d   R #  V\         V&   V#   \         d"   p	\        P                  RYI4        R p	?	R # R p	?	ii ; i)NT)ÚtimeoutÚfollow_redirectsi”  z*plugin catalog presence: %s unreadable: %s)r   r1   ÚhttpxÚgetÚ_TIMEOUTÚstatus_codeÚlenÚcontentÚ
_MAX_BYTESÚjsonÚloadsÚ
isinstanceÚdictÚ	ExceptionÚloggerÚdebug)
r   r   r   ÚkeyÚurlÚmanifestr6   ÚrespÚdataÚexcs
   &&&       r   Ú_pinned_manifestrJ   /   sÛ   € Ø�fÐ
€CØ
ŒjÔÜ˜#�ÐÜ
˜D vÓ
.€CØ)-€Hß
ð	Ûà—9‘9˜S¬(ÀT�9ÓJˆDØ×Ñ 3Ô&¬3¨t¯|©|Ó+<Ä
Ô+JÜ—z’z $§,¡,Ó/�Ü#-¨d´D×#9Ò#9™4¸t‘Ø×!Ñ! SÔ(Ùð )ð
 „Jˆs�OØ€Oøô	 ô 	Ü�L‰LÐEÀsÔPÝûð	ús   ´BC Â:C ÃDÃ$D Ä Dc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Údeclr   Úliveness_rawÚtitler   r    r   r   )r!   s   "r   r"   r"   F   s(   € ÷ !6ñ !6˜3ð !6¨cð !6¸#ð !6À(ñ !6r   c           	     ó(  € ^ RI Hp ^ RIHp ^ RIHp ^ RIHp ^ RIH	p ^ RI
Hp V! V 4      p	V	P                  R8X  d   \        # V	P                  R9   d   \        RR	V 24      # V	P                  R
8X  d    \        RR	V! V P                  4       24      # V	P                  R8X  dD   V	P                   '       d   RV	P                    R2MRp
\        RR	V RV	P"                   RV
 24      #  Ve	   V! V4      MRpVe   VP&                  R8X  d   \        R4      # VP&                  R8X  d1   VP)                  4       '       d   \        R4      # \        RV R24      # V P+                  VP-                  4       4      pVf   \        RR	V 24      # V! VP/                  V4      4      pVP1                  VP3                  4       VP4                  R7      pVP6                  P8                  RJ d   \        R4      # \        RV R24      #   \$         d    Rp ELi ; i)é    )Ú	gpu_label)Úfacts)ÚAppResolver)Úavailability)ÚEffort)Úparse_livenessÚno_requirementsÚmissing_appzneeds Úunsupported_gpuÚversion_too_oldz (found Ú)r   Ú z	 or newerNÚstaticÚpresentÚinteractive_sessionÚapp_not_runningz% needs an interactive desktop session)ÚeffortTz is not running)rX   Úunsupported_os)Úhermes_platform.declarationrQ   Úhermes_platform.hostrR   Úhermes_platform.resolver.apprS   Ú%hermes_platform.resolver.availabilityrT   Úhermes_platform.resolver.baserU   Útools.mcp_livenessrV   r   ÚUNKNOWNr   Úrequired_gpuÚversionÚmin_versionÚ
ValueErrorÚkindr_   Úapp_forÚ	os_familyÚapp_definitionÚprobeÚlocateÚLOCALÚrunningÚvalue)rL   rM   rN   rQ   rR   rS   rT   rU   rV   Ú	availableÚfoundÚliveÚ
definitionÚresolverrr   s   &&&            r   Ú_server_presencer|   F   sü  € Ý5Ý*Ý8ÝBÝ4Ý1á˜TÓ"€IØ‡�Ð+Ô+ÜˆØ‡�Ð;Ô;Ü˜¨°¨wÐ'7Ó8Ð8Ø‡�Ð+Ô+Ü˜¨±	¸$×:KÑ:KÓ0LÐ/MÐ'NÓOÐOØ‡�Ð+Ô+Ø3<×3D×3DÐ3D�(˜9×,Ñ,Ð-¨QÑ/È"ˆÜ˜¨°¨w°a¸	×8MÑ8MÐ7NÈiÐX]ÐW^Ð'_Ó`Ð`ðØ/;Ò/G‰~˜lÔ+ÈTˆð ‚|�t—y‘y HÔ,Ü˜	Ó"Ð"Ø‡y�yÐ)Ô)Ø&+×&?Ñ&?×&AÒ&AŒx˜	Ó"ð 	PÄxØ % Ð(MÐNóHPð 	Pà—‘˜eŸo™oÓ/Ó0€JØÒÜ˜¨°¨wÐ'7Ó8Ð8Ù˜4×.Ñ.¨zÓ:Ó;€HØ�N‰N˜8Ÿ?™?Ó,°V·\±\ˆNÓB€EØ"'§-¡-×"5Ñ"5¸Ó"=Œ8�IÓð 6Ä8Ø˜e˜W OÐ4óD6ð 6øô ô Ø‹ðús   Ã)H  È HÈHc               ó    € V ^8„  d   QhRRRR/# )r   Úentryr   r    r   r   )r!   s   "r   r"   r"   j   s   € ÷ Iñ I�Cð I˜Hñ Ir   c                ó&  a
€ ^ RI Hp \        V P                  V P                  V P
                  4      pV'       g   \        # VP                  R4      ;'       g    / P                  R/ 4      P                  R4      ;'       g    / p\        V\        4      '       d	   V'       g   \        #  T! Y# Uu/ uF  qD/ bK  	  up4      p\        T RR4      ;'       g    T P                  pR	^ R
^R^R^/o
TP                  4        Uu. uF$  p\!        TP"                  TP$                  T4      NK&  	  p	pT	'       d   \'        T	T
3R lR7      # \        # u upi   \         d2   p\        P                  RT P                  T4       \        u Rp?# Rp?ii ; iu upi )zcThe app state of one catalog entry on this host. The worst server wins (missing, then not running).)Ú_server_declarationsÚ
extensionszcom.nousresearch.hermesÚserversz3plugin catalog presence: %s declaration invalid: %sNrN   r   rX   r`   r^   r   c                ó*   <€ SV P                   ,          # r&   )r   )r(   Úranks   &€r   Ú<lambda>Úpresence.<locals>.<lambda>|   s   ø€  D¨¯©¦Mr   )rD   )Úhermes_cli.agent_pluginsr€   rJ   r   r   r   ri   r7   r?   r@   rA   rB   rC   ÚnameÚgetattrÚvaluesr|   ÚdeclarationÚlivenessÚmin)r~   r€   rF   Úraw_serversrˆ   ÚdeclarationsrI   rN   Údrx   r„   s   &         @r   Úpresencer‘   j   sG  ø€ å=ä §
¡
¨E¯I©I°u·|±|ÓD€HßÜˆØ—<‘< Ó-×3Ð3°×8Ñ8Ð9RÐTVÓW×[Ñ[Ð\eÓf×lÐlÐjl€KÜ�k¤4×(Ò(·ÜˆðÙ+¨HÈKÓ6XÉKÀD¸R²xÉKÑ6XÓYˆô �E˜7 BÓ'×5Ð5¨5¯:©:€EØ˜1Ð/°°I¸qÀ)ÈQÐO€DØIU×I\ÑI\ÔI^Ó_ÑI^ÀAÔ˜aŸm™m¨Q¯Z©Z¸Ö?ÑI^€EÐ_ß6;Œ3ˆuÔ1Ô2ÐHÄÐHùò 7YøÜô Ü�‰ÐJÈEÏJÉJÐX[Ô\Ü�ûðüò
 `s6   Â*E Â0E

Â;E Ã?*FÅ
E ÅFÅ&FÆ FÆFc               ó   € V ^8„  d   QhRR/# )r   r    Úlistr   )r!   s   "r   r"   r"      s   € ÷ lñ l˜Tñ lr   c                 óè   € ^ RI Hp  ^ RIHp ^ RIHp V! 4       pV ! 4        Uu. uFC  pVP                  '       g   K  VP                  '       d   W1! VP                  4      9   g   KA  VNKE  	  up# u upi )zSCatalog entries curated for onboarding (``onboarding: true``) that this OS can run.©Úload_catalog_live©Únormalized_platforms©rp   )Úhermes_cli.plugin_catalogr–   Úhermes_cli.plugins_cmd_catalogr˜   Úhermes_platform.host.factsrp   Ú
onboardingÚ	platforms)r–   r˜   rp   Úherer~   s        r   Ú_onboarding_catalogr       sk   € å;ÝCÝ4á‹;€DÙ0Ô2ó lÑ2�eØ×Õô Ø).¯¯¨¸DÐDXÐY^×YhÑYhÓDiÑ<i÷ ˆEÑ2ñ lð lùò ls   £A/¼A/ÁA/Á&A/c               ó   € V ^8„  d   QhRR/# )r   r    ú	list[str]r   )r!   s   "r   r"   r"   Š   s   € ÷ ;ñ ;˜)ñ ;r   c                 óR   € \        4        U u. uF  q P                  NK  	  up # u up i )zHThe onboarding plugins this OS runs, by catalog name; no presence probe.)r    rˆ   )r~   s    r   Úonboarding_namesr¤   Š   s!   € ä$7Ô$9Ó:Ñ$9˜5�JŒJÑ$9Ñ:Ð:ùÒ:s   �$c               ó   € V ^8„  d   QhRR/# )r   r    úlist[dict[str, Any]]r   )r!   s   "r   r"   r"   �   s   € ÷ ñ Ð0ñ r   c                 óX  € . p \        4        F™  p\        V4      pT P                  RVP                  RVP                  ;'       g    VP                  R\        VP                  4      RVP                  R\        VP                  4      RVP                  RVP                  /4       K›  	  V # )z¹Catalog entries curated for the onboarding card (``onboarding: true``) that this OS can run,
each with its app state. Platform mismatch is the only exclusion; a missing app is reported.rˆ   rN   ÚdescriptionÚtierrž   Ú	app_stater   )r    r‘   Úappendrˆ   rN   Ú_first_sentencer¨   r©   r“   rž   r   r   )Úrowsr~   rx   s      r   Úonboarding_entriesr®   �   sŽ   € ð €DÜ$Ö&ˆÜ˜“ˆØ�‰Ø�E—J‘JØ�U—[‘[×.Ð. E§J¡JØœ?¨5×+<Ñ+<Ó=Ø�E—J‘JØœ˜eŸo™oÓ.Ø˜Ÿ™Ø˜Ÿ™ð
ö 	ñ 'ð €Kr   c               ó    € V ^8„  d   QhRRRR/# )r   Únamesr¢   r    r¦   r   )r!   s   "r   r"   r"   ¡   s   € ÷ 5ñ 5˜	ð 5Ð&:ñ 5r   c                ó   € ^ RI Hp ^ RIHp ^ RIHp ^ RIHp V! 4       pV! 4        Uu/ uF  qfP                  VbK  	  pp\        P                  V 4       Uu. uFI  qˆV9   g   K  Wx,          P                  '       d   WS! Wx,          P                  4      9   g   KA  Wx,          NKK  	  p	pV	'       g   . # V! \        V	4      R7      ;_uu_ 4       p
\        V
P                  \        V	4      4      pRRR4       \!        V	X4       UUu. uF`  w  rlRVP                  RVP"                  ;'       g    VP                  R	VP$                  R
VP&                  R\)        VP*                  4      /NKb  	  upp# u upi u upi   + '       g   i     L“; iu uppi )zÅThe named catalog plugins this OS runs, in the order asked, each with its app state and the
catalog description's disclosure. A name the live catalog does not carry (unknown or removed) is dropped.)ÚThreadPoolExecutorr•   r—   r™   )Úmax_workersNrˆ   rN   r   r   Ú
disclosure)Úconcurrent.futuresr²   rš   r–   r›   r˜   rœ   rp   rˆ   r@   Úfromkeysrž   r:   r“   Úmapr‘   ÚziprN   r   r   Ú_disclosurer¨   )r°   r²   r–   r˜   rp   rŸ   r~   Úby_namerˆ   ÚentriesÚpoolrx   r   s   &            r   Úpresence_forr½   ¡   sG  € õ 6å;ÝCÝ4á‹;€DÙ.?Ô.AÓBÑ.A U�z‰z˜5Ò Ñ.A€GÐBÜ)-¯©°uÔ)=ó kÑ)= ÈÁŒ}Ø�×/×/Ð/°4Ð;OÐPWÕP]×PgÑPgÓ;hÑ3hô ˆw�}ˆ}Ñ)=€Gð kçØˆ	á	¬¨G«×	5Õ	5¸Ü�T—X‘Xœh¨Ó0Ó1ˆ÷ 
6ô !$ G¨UÔ 3ô5á 3‘�ð �U—Z‘Z ¨%¯+©+×*CÐ*C¸¿¹ÀWÈeÏkÉkØ˜Ÿ™¨´{À5×CTÑCTÓ7UóWá 3ò5ð 5ùò Cùòk÷
 
6×	5üó5s/   ©E-ÁE2Á$1E2ÂE2Ã E7Ä&F
Ä*?F
Å7F	c               ó    € V ^8„  d   QhRRRR/# ©r   Útextr   r    r   )r!   s   "r   r"   r"   ¸   s   € ÷ <ñ <�cð <˜cñ <r   c                óÔ   € \         P                  RP                  \        T ;'       g    R4      P	                  4       4      4      pV'       d   \        VP                  ^4      4      # R# )ug   The sentence after the description's ``Disclosure:`` (or ``Disclosure â€”``) marker; empty when absent.r\   r   )Ú_DISCLOSUREÚsearchr.   r   Úsplitr¬   r/   )rÀ   r,   s   & r   r¹   r¹   ¸   sH   € ä×Ñ˜sŸx™x¬¨D¯J¨J°B«×(=Ñ(=Ó(?Ó@ÓA€Eß.3Œ?˜5Ÿ;™; q›>Ó*Ð;¸Ð;r   c               ó    € V ^8„  d   QhRRRR/# r¿   r   )r!   s   "r   r"   r"   ¾   s   € ÷ 'ñ '˜#ð ' #ñ 'r   c                ó¬   € R P                  \        T ;'       g    R4      P                  4       4      p V P                  R4      w  rpV'       d   V R2# T # )r\   r   z. Ú.)r.   r   rÄ   Ú	partition)rÀ   ÚheadÚdotÚ_rests   &   r   r¬   r¬   ¾   sI   € Ø�8‰8”C˜Ÿ
˜
 “O×)Ñ)Ó+Ó,€DØ—~‘~ dÓ+Ñ€DˆußˆdˆV�1ˆ:Ð& $Ð&r   i   )$Ú__conditional_annotations__r   Ú
__future__r   r=   ÚloggingÚreÚdataclassesr   Útypingr   r   r   r   Ú	getLoggerr   rB   Úcompiler+   r8   r<   rÂ   r   r   r   ri   r1   rJ   r|   r‘   r    r¤   r®   r½   r¹   r¬   )rÌ   s   @r   Ú<module>rÔ      sÉ   øðôõ #ã Û Û 	Ý !ß -Ó -à	×	Ò	˜8Ó	$€à
�*Š*Ð^Ó
_€Ø€Ø€
Ø�jŠjÐ;Ó<€ð DF€
Ð@Ó Eñ �$Ô÷ð ó ðñ �9Ó
€õ_õõ.!6õHIõ*lõ;õ
õ$5õ.<÷'r   