+
    jHàj?C  ã                  ó¬  € R t ^ RIH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Ht ^ RIHtHt ^ RIHtHtHt RtR,t]P2                  ! R	4      tR
 R lt]	 ! R R4      4       tR R ltR R ltR R ltR R lt R R lt!RR/R R llt"R R lt#R R lt$R R  lt%R!RR"RR#R$R%]PL                  PN                  R&RR'R/R( R) llt(R* R+ lt)R# )-uš  Plugin update checks â€” the standard, read-only 'is it outdated?' verb.

Address resolution per plugin, in order, no derivation ever (settled
2026-09-03, plugin-auto-update plan):
  1. saved sidecar tag + matching manifest update_url â†’ fetch the feed yml
  2. manifest update_url differs from the saved tag (or appeared where
     none was saved) â†’ NEEDS-FIXING: fetch refused, tag untouched
  3. no update_url anywhere + git row â†’ git ls-remote vs revision
  4. neither â†’ manual/unupdatable
Plus the pip world, stateless: entry-point discovery â†’ installed version
vs PyPI latest. NEVER mutates anything â€” no pulls, no row writes, no
saved-tag changes.
)ÚannotationsN)Ú	dataclass)ÚPath)ÚAnyÚCallableÚOptional)ÚInvalidVersionÚVersion)Ú
ProvenanceÚProvenanceClassÚplugins_provenanceg      $@z[0-9a-fA-F]{40}c               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚlatestÚstrÚcurrentÚreturnúOptional[bool]© )Úformats   "Ú?/home/ubuntu/.hermes/hermes-agent/hermes_cli/plugins_updates.pyÚ__annotate__r   &   s!   € ÷ ñ ˜cð ¨Cð °Nñ ó    c                óV   €  \        V 4      \        V4      8„  #   \         d     R# i ; i)z8Invalid versions are unknown, not evidence of an update.N)r	   r   )r   r   s   &&r   Ú_version_is_newerr   &   s-   € ðÜ�v‹¤¨Ó!1Ñ1Ð1øÜô Úðús   ‚ ™(§(c                  óŒ   € ] tR t^.t$ R]R&   R]R&   RtR]R&   R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# )ÚCheckResultr   ÚnameÚklassNúOptional[str]r   r   r   Úupdate_availableÚneeds_fixingÚ
min_hermesÚ Úreasonc               ó   € V ^8„  d   QhRR/# )r   r   Údictr   )r   s   "r   r   ÚCheckResult.__annotate__9   s   € ÷ 

ñ 

˜ñ 

r   c                	óÆ   € R V P                   RV P                  RV P                  RV P                  RV P                  RV P
                  RV P                  RV P                  /# )r   Úclassr   r   r    r!   r"   r$   )r   r   r   r   r    r!   r"   r$   )Úselfs   &r   Úto_jsonÚCheckResult.to_json9   sX   € à�D—I‘IØ�T—Z‘ZØ�t—|‘|Ø�d—k‘kØ × 5Ñ 5Ø˜D×-Ñ-Ø˜$Ÿ/™/Ø�d—k‘kð	
ð 		
r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r   r    r!   r"   r$   r+   Ú__static_attributes__r   r   r   r   r   .   sS   ‡ à
ƒIØƒJØ!€Gˆ]Ó!Ø €FˆMÓ Ø'+Ð�nÓ+Ø"&€L�-Ó&Ø $€J�Ó$Ø€FˆCÓ÷

ñ 

r   r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
plugin_dirr   Úkeyr   r   r   r   )r   s   "r   r   r   F   s&   € ÷ Oñ O Tð O°ð O¸ñ Or   c                óâ  € ^ RI pV R,          pVP                  4       '       g   R#  VP                  RR7      ;_uu_ 4       pVP                  V4      ;'       g    / pRRR4       \        X\        4      '       g   R# TP                  T4      p\        T\        4      '       d'   TP                  4       '       d   TP                  4       # R#   + '       g   i     Lw; i  \         d     R# i ; i)zBOne field from the installed plugin.yaml (claims, not provenance).Nzplugin.yamlz	utf-8-sig)Úencoding)
Úhermes_yamlÚis_fileÚopenÚ	safe_loadÚ	ExceptionÚ
isinstancer&   Úgetr   Ústrip)r4   r5   ÚyamlÚmanifestÚfÚdataÚvalues   &&     r   Ú_read_manifest_fieldrE   F   s´   € ãà˜MÕ)€HØ×Ñ×ÒÙðØ�]‰] Kˆ]×0Ô0°AØ—>‘> !Ó$×*Ð*¨ˆD÷ 1ô �dœD×!Ò!ÙØ�H‰H�S‹M€EÜ& u¬c×2Ò2°u·{±{·}²}ˆ5�;‰;‹=ÐNÈ$ÐN÷ 1×0ûäô Úðús/   §C ÁCÁC ÃC	ÃC ÃC ÃC.Ã-C.c               ó    € V ^8„  d   QhRRRR/# )r   Úprovr
   r   r   r   )r   s   "r   r   r   X   s   € ÷ *ñ * ð *°ñ *r   c                óN  € \        V P                  V P                  P                  R7      pV P                  \        P
                  J d
   RVn        V# V P                  \        P                  J d(   RV P                  P                  R4      : R2Vn        V# V P                  \        P                  J d
   RVn        V# V P                  ;'       g    / pVP                  R4      ;'       g    RVn        VP                  R	4      R
J d9   RVn        RVP                  ;'       g    RR,          ;'       g    R 2Vn        V# VP                  R4      ;'       g    Rp\        V P                  R4      pVf   Ve   RV: R2Vn        V# Ve   WC8w  d   RV: RV: R2Vn        V# V# )z<Check installed provenance without fetching remote metadata.)r   r   z!no provenance; not auto-updatableu%   provenance drift â€” sidecar records Úsourcez< but the dir has no .git; reinstall from the recorded sourcez-self-cloned; run `hermes plugins adopt` firstÚrevisionNÚpinnedTFz	pinned @ r#   :Né   NÚshaÚ
update_urlzmanifest declares update_url zT but no url was saved at install; run `hermes plugins trust-update-url` after reviewzupdate_url mismatch: saved z, manifest declares z4; run `hermes plugins trust-update-url` after review)r   r   r   rD   r   ÚMANUALr$   ÚDRIFTÚrowr>   ÚSELF_CLONEDr   r    rE   Úpathr!   )rG   ÚresultrQ   ÚsavedÚclaimeds   &    r   Úcheck_local_provenancerW   X   s”  € ä˜dŸi™i¨t¯z©z×/?Ñ/?Ô@€Fà‡z�z”_×+Ñ+Ó+Ø;ˆŒØˆØ‡z�z”_×*Ñ*Ó*à3°D·H±H·L±LÀÓ4JÑ3Mð NJð Jð 	Œð ˆØ‡z�z”_×0Ñ0Ó0ØGˆŒØˆà
�(‰(�.ˆ.�b€CØ—W‘W˜ZÓ(×0Ð0¨D€F„NØ
‡w�wˆxÓ˜DÓ Ø"'ˆÔØ# V§^¡^×%9Ð%9°r¸3Õ$?×$HÐ$HÀ5Ð#IÐJˆŒØˆð �G‰G�LÓ!×)Ð) T€EÜ" 4§9¡9¨lÓ;€GØ‚}˜Ò,ð ,¨G©;ð 7Mð Mð 	Ôð ˆØÒ˜WÔ-à)¨%©Ð2FØ‰kÐMðOð 	Ôð ˆà€Mr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rG   r
   ÚfetchúCallable[[str], str]Ú	ls_remoter   r   r   )r   s   "r   r   r   …   s8   € ÷ eñ eØ
ðeð  ðeð $ð	eð
 ñer   c               óæ  € V P                   ;'       g    / pVP                  R4      p\        V\        4      '       d   TM/ pVP                  R4      ;'       g    VP                  R4      pV'       Ed   ^ RIHpHp \        V P                  RVP                  R4      R7      p	VP                  R4      RJ d   R	MiV! \        V4      4      ;'       gR    T! \        VP                  R
4      ;'       g    VP                  RR4      4      P                  R^4      ^ ,          4      p
V
'       d   RV
P                   2V	n        V	# V! \        V4      4      pVf
   RV	n        V	# VP                  V	n        V	P                  VP                  8g  V	n        V	# \!        V 4      p	V	P                  '       g   V	P"                  '       d   V	# V P                   ;'       g    / pVP                  R4      ;'       g    R	pVEeª    V! V4      p \'        T4      pTP                  R4      T	n        TP                  R4      T	n        TP                  R4      ;'       g    / P                  R4      pT'       d³   \,        P/                  T4      '       d˜   T	P                  '       d/   \,        P/                  \        T	P                  4      4      '       g   R	T	n        RT	n        T	# TP1                  4       T	n        TP1                  4       T	P                  P1                  4       8g  T	n        T	# \3        T P4                  R4      pTf    R	T	n        RT	P                  : R2T	n        T	# TT	n        \7        T	P                  T4      T	n        T	P                  f   RT	P                  : RT: 2T	n        T	# VP                  R4      ;'       g    RpV'       g
   RV	n        V	#  V! V4      pTT	n        \9        T4      ;'       d    TT	P                  8g  T	n        T	#   \$         d   pRT 2T	n        T	u R	p?# R	p?ii ; i  \(         d   pRT 2T	n        T	u R	p?# R	p?ii ; i  \$         d   pRT 2T	n        T	u R	p?# R	p?ii ; i)zDCheck local provenance before contacting its approved update source.Úcatalogr   Úcatalog_name)Úfind_removedÚget_live_catalog_entryrJ   )r   r   r   Úallow_removedTNÚreporI   r#   Ú#zremoved from catalog: z4catalog entry is unavailable; installed pin retainedrN   zfeed fetch failed: zfeed unparseable: Úversionr"   Ú	artifactsÚgitzOfeed declares a git sha but the install records no full revision sha to comparezfeed declares version z< but the installed plugin.yaml records no version to comparezcannot compare feed version z with installed version zno recorded sourcezls-remote failed: )rQ   r>   r=   r&   Úhermes_cli.plugin_catalogr_   r`   r   r   r   Úsplitr$   rM   r   r   r    rW   r!   r<   Úparse_feed_ymlÚ
ValueErrorr"   Ú_FULL_GIT_SHA_REÚ	fullmatchÚlowerrE   rS   r   Úbool)rG   rY   r[   rQ   Úcatalog_valuer]   r^   r_   r`   rT   ÚremovedÚentryrU   Ú	feed_textÚexcÚfeedÚfeed_gitÚinstalled_versionrI   Úheads   &$$                 r   Úcheck_provenancedrx   …   sî  € ð �(‰(�.ˆ.�b€CØ—G‘G˜IÓ&€MÜ%/°¼t×%DÒ%D‘MÈ"€GØ—;‘;˜vÓ&×AÐA¨#¯'©'°.Ó*A€Lß€|ßRä $§)¡)°9ÀcÇgÁgÈjÓFYÔZˆØŸ'™' /Ó2°dÓ:‘$Ùœ˜\Ó*Ó+÷ `ð `ÙœC §¡¨FÓ 3× LÐ L°s·w±w¸xÈÓ7LÓM×SÑSÐTWÐYZÓ[Ð\]Õ^Ó_ð 	÷ Ø4°W·^±^Ð4DÐEˆFŒMØˆMÙ&¤s¨<Ó'8Ó9ˆØŠ=ØRˆFŒMØˆMØŸ	™	ˆŒØ"(§.¡.°E·I±IÑ"=ˆÔØˆÜ# DÓ)€FØ‡}‡}€}˜×+×+Ð+ØˆØ
�(‰(�.ˆ.�b€CØ�G‰G�LÓ!×)Ð) T€Eð Óð	Ù˜e›ˆIð	Ü! )Ó,ˆDð Ÿ™ Ó+ˆŒØ ŸH™H \Ó2ˆÔð —H‘H˜[Ó)×/Ð/¨R×4Ñ4°UÓ;ˆßÔ(×2Ñ2°8×<Ò<Ø—>—>�>Ô)9×)CÑ)CÜ�F—N‘NÓ#÷*ò *ð +/�Ô'ð3ð ”ð �à$ŸN™NÓ,ˆFŒMØ&.§n¡nÓ&6¸&¿.¹.×:NÑ:NÓ:PÑ&PˆFÔ#ØˆMÜ0°·±¸IÓFÐØÒ$Ø&*ˆFÔ#à(¨¯©Ñ(9ð :<ð <ð ŒMð ˆMð +ˆŒÜ"3°F·M±MÐCTÓ"UˆÔØ×"Ñ"Ò*à.¨v¯}©}Ñ.?ð @%Ø%6Ñ$9ð;ð ŒMð ˆð �W‰W�XÓ×$Ð$ "€FßØ,ˆŒØˆðÙ˜Ó ˆð €F„MÜ" 4›j×CÐC¨T°V·^±^Ñ-C€FÔØ€Møô} ô 	Ø1°#°Ð7ˆFŒMØ�Mûð	ûô
 ô 	Ø0°°Ð6ˆFŒMØ�Mûð	ûôh ô Ø,¨S¨EÐ2ˆŒØ�ûðúsZ   Ç:P ÈP+ ÏQ ÐP(ÐP#ÐP(Ð#P(Ð+QÐ6QÑQÑQÑQ0ÑQ+Ñ%Q0Ñ+Q0c               ó    € V ^8„  d   QhRRRR/# )r   Útextr   r   r&   r   )r   s   "r   r   r   í   s   € ÷ ñ ˜ð  ñ r   c                ót  € ^ RI p VP                  V 4      p\	        T\
        4      '       g   \        R4      hTP                  R4      p\	        T\        4      '       d   TP                  4       '       g   \        R4      hRTP                  4       /pR	 FV  pTP                  T4      p\	        T\        4      '       g   K,  TP                  4       '       g   KD  TP                  4       YV&   KX  	  TP                  R4      p\	        T\
        4      '       dv   TP                  R4      p	T	e"   \	        T	\        4      '       g   \        R4      hTP                  4        U
Uu/ uF  w  r«\	        T\        4      '       g   K  Y«bK!  	  upp
TR&   T#   TP                   d   p\        RT 24      ThRp?ii ; iu upp
i )
zwThe electron-updater-derived feed shape: version, released,
min_hermes, artifacts{git,bundle,bundle_sha256}, notes_url.Nzinvalid feed YAML: zfeed must be a YAML mappingrd   zfeed missing 'version're   rf   z#feed artifacts.git must be a string)r"   Ú	notes_url)
r8   r;   Ú	YAMLErrorrj   r=   r&   r>   r   r?   Úitems)rz   r@   rC   rs   rd   Úoutr5   rD   re   rf   ÚkÚvs   &           r   ri   ri   í   sd  € ó ð?Ø�~‰~˜dÓ#ˆô �dœD×!Ò!ÜÐ6Ó7Ð7Ø�h‰h�yÓ!€GÜ�gœs×#Ò#¨7¯=©=¯?ª?ÜÐ1Ó2Ð2Ø$ g§m¡m£oÐ6€CÛ*ˆØ—‘˜“ˆÜ�eœS×!Ô! e§k¡k§m¤mØ—{‘{“}ˆC‹Hñ +ð —‘˜Ó%€IÜ�)œT×"Ò"Ø�m‰m˜EÓ"ˆØŠ?¤:¨c´3×#7Ò#7ÜÐBÓCÐCà&Ÿ_™_Ô.ô
Ù.‘T�Q´*¸QÄ×2DŒDˆAŠDÑ.ò
ˆˆKÑð €Jøð) �>‰>ô ?ÜÐ.¨s¨eÐ4Ó5¸3Ð>ûð?üó"
s#   †F ÅF4Å=F4ÆF1ÆF,Æ,F1c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   r     s   € ÷ 	ñ 	 ñ 	r   c                ó˜   € \        V RR4      pVf   R#  VP                  P                  R4      ;'       g    R#   \         d     R# i ; i)u   The name of the distribution the entry point belongs to â€” metadata,
never a guess derived from the import module (audit C17).ÚdistNÚName)ÚgetattrÚmetadatar>   r<   )Úepr„   s   & r   Ú_owning_distributionr‰     sN   € ô �2�v˜tÓ$€DØ‚|ÙðØ�}‰}× Ñ  Ó(×0Ð0¨DÐ0øÜô Úðús   •!: ·: ºA	ÁA	Úentry_pointsc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rv   rZ   Úpypi_latestzCallable[[str], Optional[str]]rŠ   úOptional[list]r   úlist[CheckResult]r   )r   s   "r   r   r     s8   € ÷ Bñ Bà+ðBð 0ðBð !ð	Bð
 ñBr   c                óâ  € Vf8   \        \        P                  P                  4       P	                  RR7      4      p. pV FØ  p\        VRR4      ;'       g    \        V4      pV'       g*   VP                  \        VP                  RRR7      4       KT   V ! V4      pT! T4      pTf-   TP                  \        TP                  RTRRR
R7      4       K•  \        Yv4      pTP                  \        TP                  RTTTTf   RT: RT: 2MRR7      4       KÚ  	  V#   \        P                  P                   d2    TP                  \        TP                  RRT: R	2R7      4        EK-  i ; i)zXThe pip world, stateless: entry-point dists vs PyPI. Nothing
recorded, nothing to drift.Nzhermes_agent.plugins)ÚgroupÚ	dist_nameÚpipzOentry point has no owning distribution metadata; cannot determine what to check)r   r   r$   zdistribution z not importablezunknown (not on PyPI))r   r   r   r   r    r$   zcannot compare PyPI version z with installed r#   )ÚlistÚ	importlibr‡   rŠ   Úselectr†   r‰   Úappendr   r   ÚPackageNotFoundErrorr   )	rv   rŒ   rŠ   Úresultsrˆ   r‘   r   r   r    s	   $$$      r   Úcheck_pip_pluginsr™     s‚  € ð ÒÜÜ×Ñ×+Ñ+Ó-×4Ñ4Ð;QÐ4ÓRó
ˆð "$€GÛˆÜ˜B ¨TÓ2×NÐNÔ6JÈ2Ó6Nˆ	ßØ�N‰NÜØŸ™Øð9ô	ô	ñ ð
	Ù'¨	Ó2ˆGñ ˜YÓ'ˆàŠ>Ø�N‰NÜØŸ™ØØ#ØØ%)Ø2ôô	ñ Ü,¨VÓ=ÐØ�‰ÜØ—W‘WØØØØ!1ð (Ò/ð 3°6±*Ð<LÈWÉKÑXØ57ô
ö	
ñQ ðj €NøôK ×!Ñ!×6Ñ6ô 	Ø�N‰NÜØŸ™ØØ*¨9©-°ÐGôôó ð	ús   ÂDÄAE.Å-E.c               ó    € V ^8„  d   QhRRRR/# )r   ÚurlÚobjectr   r   r   )r   s   "r   r   r   \  s   € ÷ ñ ˜&ð  Sñ r   c                ó´   € \        T ;'       g    R4      P                  4       pVP                  4       P                  R4      '       g   \	        RV: 24      hV# )u™  Normalize a manifest ``update_url``; raises ValueError unless it is ``https://``.

The feed picks which commit of the trusted origin gets installed and the gateway fetches
it unattended every check interval, so a plaintext ``http://`` (MITM â†’ an old vulnerable
commit), ``file://`` or ``ftp://`` feed is refused at install, at trust-update-url AND at
the fetch itself (rows saved before this rule existed).
r#   úhttps://z(update_url must be an https:// URL, got )r   r?   rm   Ú
startswithrj   )r›   rz   s   & r   Úhttps_update_urlr    \  sK   € ô ˆs�yˆy�b‹>×ÑÓ!€DØ�:‰:‹<×"Ñ" :×.Ò.ÜÐCÀDÁ8ÐLÓMÐMØ€Kr   c               ó    € V ^8„  d   QhRRRR/# )r   r›   r   r   r   )r   s   "r   r   r   j  s   € ÷ 2ñ 2�sð 2˜sñ 2r   c                ó`  € ^ RI p ! R RVP                  P                  4      pVP                  P                  V! 4       4      pVP	                  \        V 4      \        R7      ;_uu_ 4       pVP                  \        4      pRRR4       XP                  RRR7      #   + '       g   i     L#; i)u·   The real feed fetcher: url -> text (raises on failure).

ONE implementation shared by the manual ``hermes plugins
check-updates`` and the cadence tick â€” callers never re-derive it.
Nc                  ó(   a € ] tR tRtV 3R ltRtV ;t# )Ú/default_fetch.<locals>.HTTPSFeedRedirectHandlerir  c                	óÆ   <€ \         SV `  WW4WV4      pVeK   VP                  P                  4       P	                  R4      '       g   VP                  4        \        R4      hV# )Nrž   z%update_url redirect must use https://)ÚsuperÚredirect_requestÚfull_urlrm   rŸ   Úcloserj   )	r*   ÚreqÚfpÚcodeÚmsgÚheadersÚnewurlÚ
redirectedÚ	__class__s	   &&&&&&& €r   r§   Ú@default_fetch.<locals>.HTTPSFeedRedirectHandler.redirect_requests  sW   ø€ Ü™Ñ1°#¸4ÀgÓVˆJØÒ%¨j×.AÑ.A×.GÑ.GÓ.I×.TÑ.TÐU_×.`Ò.`Ø—‘”
Ü Ð!HÓIÐIØÐr   r   )r-   r.   r/   r0   r§   r2   Ú__classcell__)r±   s   @r   ÚHTTPSFeedRedirectHandlerr¤   r  s   ø† ÷	ó 	r   r´   ©Útimeoutúutf-8Úreplace)Úerrors)
Úurllib.requestÚrequestÚHTTPRedirectHandlerÚbuild_openerr:   r    Ú_FETCH_TIMEOUTÚreadÚ_MAX_FEED_BYTESÚdecode)r›   Úurllibr´   ÚopenerÚresprC   s   &     r   Údefault_fetchrÅ   j  sƒ   € ó ô 6§>¡>×#EÑ#Eô ð �^‰^×(Ñ(Ñ)AÓ)CÓD€FØ	�‰Ô% cÓ*´Nˆ×	CÔ	CÀtØ�y‰yœÓ)ˆ÷ 
Dà�;‰;�w yˆ;Ó1Ð1÷ 
D×	Cús   Á,BÂB-	c               ó    € V ^8„  d   QhRRRR/# )r   rI   r   r   r   )r   s   "r   r   r   €  s   € ÷ -ñ -˜cð - cñ -r   c           
     ó„  € ^ RI Hp \        P                  ! V! 4       ;'       g    RRV R.RRRR^RR	7      pVP                  ^ 8w  d5   \        VP                  ;'       g    R
P                  4       R,          4      hVP                  ;'       g    RP                  4       pV'       d   VP                  R4      ^ ,          # R# )uÜ   The real git probe: source -> HEAD sha (raises on failure).

Uses the same resolved git executable the CLI path resolves. Lazily
imports plugins_cmd (which lazily imports this module) â€” no import
cycle at module load.
)Ú_resolve_git_executablerf   z	ls-remoteÚHEADTr·   r¸   F)Úcapture_outputrz   r7   r¹   r¶   Úcheckzls-remote failed:NéÈ   Nr#   Ú	)
Úhermes_cli.plugins_cmdrÈ   Ú
subprocessÚrunÚ
returncodeÚRuntimeErrorÚstderrr?   Ústdoutrh   )rI   rÈ   Úprocr   s   &   r   Údefault_ls_remoterÖ   €  s¤   € õ ?ä�>Š>Ù	 Ó	"×	+Ð	+ e¨[¸&À&ÐIØØ˜G¨IØØô€Dð ‡�˜!ÔÜ˜DŸK™K×=Ð=Ð+=×DÑDÓFÀtÕLÓMÐMà�;‰;×Ð˜"×
#Ñ
#Ó
%€Cß!$ˆ3�9‰9�T‹?˜1ÕÐ,¨"Ð,r   rY   r[   Úinclude_pipTÚpip_installed_versionÚpip_pypi_latestÚpip_entry_pointsc               ó8   € V ^8„  d   QhRRRRRRRRRR	R
RRRRR/# )r   Úplugins_dirr   rY   zOptional[Callable[[str], str]]r[   r×   rn   rØ   rZ   rÙ   z(Optional[Callable[[str], Optional[str]]]rÚ   r�   r   rŽ   r   )r   s   "r   r   r   —  sZ   € ÷ "ñ "Øð"ð *ð"ð .ð	"ð
 ð"ð 0ð"ð >ð"ð %ð"ð ñ"r   c          	     óà   € Vf   \         pVf   \        p\        V 4       Uu. uF  p\        WqVR7      NK  	  ppV'       d(   Vf   \        pVP                  \        VVVR7      4       V# u upi )uî   All checks for one plugins dir. NEVER mutates anything.

``fetch``/``ls_remote`` default to :func:`default_fetch` /
:func:`default_ls_remote` â€” the single shared network implementation
the manual command and the cadence tick both ride.
)rY   r[   )rv   rŒ   rŠ   )rÅ   rÖ   r   rx   Ú_default_pypi_latestÚextendr™   )	rÜ   rY   r[   r×   rØ   rÙ   rÚ   Úpr˜   s	   &$$$$$$  r   Ú
run_checksrá   —  s€   € ð  ‚}ÜˆØÒÜ%ˆ	ô $ KÔ0óá0ˆAô 	˜!°I×>Ù0ð ð ÷ ØÒ"Ü2ˆOØ�‰ÜØ"7Ø+Ø-ôô	
ð €Nùòs   ¢A+c               ó    € V ^8„  d   QhRRRR/# )r   r„   r   r   r   r   )r   s   "r   r   r   ¼  s   € ÷ 
ñ 
˜sð 
 }ñ 
r   c                ól  € ^ RI pRV  R2p VP                  P                  V\        R7      ;_uu_ 4       p\        P
                  ! VP                  \        4      4      pRRR4       XP                  R4      ;'       g    / P                  R4      #   + '       g   i     L:; i  \         d     R# i ; i)u9   PyPI JSON API â€” the real fetcher (injectable in tests).Nzhttps://pypi.org/pypi/z/jsonrµ   Úinford   )
rº   r»   Úurlopenr¾   ÚjsonÚloadsr¿   rÀ   r>   r<   )r„   rÂ   r›   rÄ   rC   s   &    r   rÞ   rÞ   ¼  s�   € ãà" 4 &¨Ð
.€CðØ�^‰^×#Ñ# C´Ð#×@Ô@ÀDÜ—:’:˜dŸi™i¬Ó8Ó9ˆD÷ Aà—‘˜Ó ×&Ð& B×+Ñ+¨IÓ6Ð6÷ A×@ûô ô Úðús.   Œ)B$ µ*BÁB$ Á?B$ ÂB!	ÂB$ Â$B3Â2B3i   )*Ú__doc__Ú
__future__r   Úimportlib.metadatar”   ræ   ÚrerÏ   Údataclassesr   Úpathlibr   Útypingr   r   r   Úpackaging.versionr   r	   Úhermes_cli.plugins_provenancer
   r   r   r¾   rÀ   Úcompilerk   r   r   rE   rW   rx   ri   r‰   r™   r    rÅ   rÖ   r‡   rd   rá   rÞ   r   r   r   Ú<module>rò      s  ðñõ #ã Û Û 	Û Ý !Ý ß *Ñ *ç 5÷ñ ð €Ø!€Ø—:’:Ð0Ó1Ð õð ÷
ð 
ó ð
õ.Oõ$*õZeõPõ<	ðBð $(÷	BõJõ2õ,-ð."ð -1ð"ð 15ð	"ð
 ð"ð 3<×2DÑ2D×2LÑ2Lð"ð AEð"ð (,÷"÷J
r   