+
    „WÝj·(  ã            
      óT  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
Ht ^ RIHt ^ RIHt ^ RIHtHt ^ RIt^ RIHt ]P,                  ! ]4      tRR	R
RRRRRRR/t ! R R]4      t]! RR7       ! R R4      4       tR R ltR R ltR=R R lltR R lt R=R  R! llt!R>R"RR#R/R$ R% lllt"R& R' lt#R>R(R/R) R* lllt$]PJ                  ! R+4      t&]PN                  ! 4       t(])! 4       t*R,]+R-&   R. R/ lt,R0 R1 lt-]
R2 R3 l4       t.R4 R5 lt/R6 R7 lt0R8RR9RR:R/R; R< llt1R# )?zYHardware selection for PM-owned llama.cpp binaries; mutable runtime state stays separate.)ÚannotationsN)ÚcontextmanagerÚsuppress)Ú	dataclass)ÚPath)ÚCallableÚIterator)Ú
ProgressFnÚcudazllamacpp-cudaÚvulkanzllamacpp-vulkanÚmetalzllamacpp-metalÚhipzllamacpp-hipÚcpuzllamacpp-cpuc                  ó   € ] tR t^tRtRtR# )ÚBinaryResolutionErrorz8The requested backend has no pinned or installed engine.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚUC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\local_runtime\binaries.pyr   r      s   † ÝBr   r   T)Úfrozenc                  ó6   € ] tR t^!t$ R]R&   R]R&   R]R&   RtR# )ÚEngineÚstrÚbackendÚtagr   Úbinaryr   N)r   r   r   r   Ú__annotations__r   r   r   r   r   r   !   s   ‡ àƒLØ	ƒHØ‡Lr   r   c               ó   € V ^8„  d   QhRR/# )é   Úreturnr   r   )Úformats   "r   Ú__annotate__r&   (   s   € ÷ ?ñ ?�tñ ?r   c                 ó8   € ^ RI Hp  V ! 4       R,          R,          # )zGMachine-scoped presets and server state. Binaries belong to PM's store.©Úget_default_hermes_rootÚruntimesÚllamacpp)Úhermes_constantsr)   r(   s    r   Úruntimes_rootr-   (   s   € å8á"Ó$ zÕ1°JÕ>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r#   r   r   r$   r   )r%   s   "r   r&   r&   /   s   € ÷ ñ ˜ð  ñ r   c                óÊ   € \         P                  ! \         P                  P                  4       4      P	                  \
        V ,          4      pVf   \        RV  R24      hRV 2# )Nú
llama.cpp z has no PM version pinÚb)ÚpmÚLockfileÚpathsÚlockfile_pathÚversionÚBACKEND_PACKAGESr   )r   r6   s   & r   Ú
pinned_tagr8   /   sT   € Ü�kŠkœ"Ÿ(™(×0Ñ0Ó2Ó3×;Ñ;Ô<LÈWÕ<UÓV€GØ‚Ü# j°°	Ð9OÐ$PÓQÐQØˆwˆiˆ=Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r#   Ú
gpu_vendorú
str | NoneÚos_namer$   r   r   )r%   s   "r   r&   r&   6   s!   € ÷ 
ñ 
˜zð 
°Jð 
È#ñ 
r   c                óH  a€ Vf/   \         P                  ! 4       P                  R4      '       d   RMRpVR8X  d   R# T ;'       g    RP                  4       oRS9   d   R# \        ;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# R# )Núdarwin-ÚmacosÚotherr   Ú Únvidiar
   c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )Ú.0ÚnameÚvendors   & €r   Ú	<genexpr>Ú!select_backend.<locals>.<genexpr>>   s   øé € Ð
HÑ&G˜d�6Ž>Ó&Gùs   ƒTFr   r   )ÚamdÚintelÚradeonÚarc)r2   Úcurrent_targetÚ
startswithÚlowerÚany)r:   r<   rG   s   &&@r   Úselect_backendrR   6   s}   ø€ Ø‚Ü×.Ò.Ó0×;Ñ;¸I×FÒF‘'ÈGˆØ�'ÔÙØ×Ð˜B×%Ñ%Ó'€FØ�6ÔÙß
ƒsÔ
HÑ&GÓ
H‡s‡s‚sÔ
HÑ&GÓ
H×HÒHÙÙr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r#   Ú	requestedr   r:   r;   Útargetr$   útuple[str, ...]r   )r%   s   "r   r&   r&   C   s(   € ÷ 8ñ 8˜3ð 8¨Jð 8Àð 8Èñ 8r   c                óì   € V R 8w  d   V \         9  d   \        RV  24      hV 3# \        YP                  R4      '       d   RMR4      pV'       d   RMRp\	        \
        P                  V.VO54      4      # )Úautoúunknown backend r>   r?   r@   )r   r   )r   )r7   r   rR   rO   ÚtupleÚdictÚfromkeys)rT   r:   rU   Ú	preferredÚfallbacks   &&&  r   Ú_candidatesr_   C   sq   € Ø�FÔØÔ,Ô,Ü'Ð*:¸9¸+Ð(FÓGÐGØˆ|ÐÜ˜z×6GÑ6GÈ	×6RÒ6R©7ÐX_Ó`€Iß$.Ñ °H€HÜ”—‘ 	Ð5¨HÑ5Ó6Ó7Ð7r   c               ó$   € V ^8„  d   QhRRRRRR/# )r#   r   r   rU   r;   r$   r   )r%   s   "r   r&   r&   M   s!   € ÷ ñ  ð ¨Zð À:ñ r   c                ó¬  € \         P                  V 4      pVf   RV  2# T;'       g    \        P                  ! 4       p\        P                  ! V4      P                  V4      pV'       d   V# \        P                  ! \        P                  P                  4       4      pVP                  V4      '       d   VP                  W!4      '       g   V RV 2# R # )NrY   z is not pinned for )r7   Úgetr2   rN   Úget_packageÚmissing_reasonr3   r4   r5   r6   Ú	artifacts)r   rU   rF   ÚreasonÚlocks   &&   r   Úunavailable_reasonrh   M   s¨   € Ü×Ñ Ó(€DØ‚|Ø! ' Ð+Ð+Ø×*Ð*”r×(Ò(Ó*€FÜ�^Š^˜DÓ!×0Ñ0°Ó8€FßØˆÜ�;Š;”r—x‘x×-Ñ-Ó/Ó0€DØ�<‰<˜×Ò T§^¡^°D×%AÒ%AØ�Ð*¨6¨(Ð3Ð3Ùr   r:   rU   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r#   rT   r   r:   r;   rU   r$   r   )r%   s   "r   r&   r&   [   s*   € ÷ 4ñ 4˜sð 4¸Jð 4Ø&ð4Ø25ñ4r   c               ó  € V R8X  d   Vf   Vf   ^ RI Hp V! 4       pT;'       g    \        P                  ! 4       p. p\	        WV4       F'  p\        WR4      pVf   Vu # VP                  V4       K)  	  \        RP                  V4      4      h)zNExplicit choices are strict. Auto only falls back to compatible pinned builds.rX   ©Ú_detect_gpu_vendorz; )	Ú"hermes_cli.local_runtime.bootstraprl   r2   rN   r_   rh   Úappendr   Újoin)rT   r:   rU   rl   Úreasonsr   rf   s   &$$    r   Úresolve_backendrq   [   s‚   € ð �FÔ˜vš~°*Ò2DÝIá'Ó)ˆ
Ø×*Ð*”r×(Ò(Ó*€FØ€GÜ˜y°fÖ=ˆÜ# GÓ4ˆØŠ>ØŠNØ�‰�vÖñ	 >ô
   §	¡	¨'Ó 2Ó
3Ð3r   c               ó$   € V ^8„  d   QhRRRRRR/# )r#   Ú
candidatesrV   Úallow_outdatedÚboolr$   úEngine | Noner   )r%   s   "r   r&   r&   l   s!   € ÷ ñ ˜?ð ¸Dð À]ñ r   c                óÒ   € V  F`  p\         P                  ! \        V,          VR 7      pVf   K,  VP                  f   K<  \	        VRVP
                   2VP                  4      u # 	  R# )©rt   Nr1   )r2   Úinstalled_packager7   r    r   r6   )rs   rt   Ú	candidateÚfounds   &&  r   Ú
_installedr|   l   sW   € Ûˆ	Ü×$Ò$Ô%5°iÕ%@ÐQ_Ô`ˆØÔ §¡Ô!9Ü˜) q¨¯©¨Ð%8¸%¿,¹,ÓGÒGñ  ñ r   rt   c               ó$   € V ^8„  d   QhRRRRRR/# )r#   r   r   rt   ru   r$   rv   r   )r%   s   "r   r&   r&   t   s!   € ÷ ñ ˜cð ¸tð È}ñ r   c               ó  € RpV R8X  d   ^ RI Hp V! 4       p\        W\        P                  ! 4       4      p\        WA4      pVfF   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        WA4      pV# )zbBoot may retain a prior PM pin and moves a pre-PM engine into PM's store once; it never downloads.NrX   rk   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irD   )Úadopt_legacy_engine)rE   rz   s   & r   rH   Ú#installed_engine.<locals>.<genexpr>}   s   é € ÐYÉjÀÔ1°)×<Ð<Ëjùs   ‚TF)rm   rl   r_   r2   rN   r|   rQ   )r   rt   rG   rl   rs   Úengines   &$    r   Úinstalled_enginerƒ   t   sm   € à€FØ�&ÔÝIá#Ó%ˆÜ˜W¬b×.?Ò.?Ó.AÓB€JÜ˜
Ó3€FØ‚~Ÿ#›#ÑYÉjÓYŸ#Ÿ#š#ÑYÉjÓY×YÒYÜ˜JÓ7ˆØ€Mr   z[0-9a-f]{64}z	set[Path]Ú_LEFT_IN_PLACEc               ó    € V ^8„  d   QhRRRR/# )r#   r   r   r$   zlist[tuple[str, Path, dict]]r   )r%   s   "r   r&   r&   Š   s   € ÷ eñ e˜cð eÐ&Bñ er   c           
     ó6  € . p\        4       P                  RV  R24       EF-  pVP                  P                  P                  p \	        VP                  R4      4      p\        P                  ! VP                  RR7      4      p\        T\        4      '       g   K}  TP                  R4      T8X  g   K•  TP                  R4      T 8X  g   K­  TP                  R4      '       g   KÆ  \        TP                  R	4      \        4      '       g   Kí  TP                  \        9  g   EK  TP                  T\!        T4      TP                  T34       EK0  	  \#        VR
R7       UUUUu. uF
  w  rgr…WxV3NK  	  upppp#   \        \        3 d     EKo  i ; iu uppppi )zRVerified pre-PM installs of ``backend`` as (version, dir, manifest), newest first.zb*/z/manifest.jsonr1   z	utf-8-sig)Úencodingr   r   Úverified_versionÚassetsT)Úreverse)r-   ÚglobÚparentrF   ÚintÚremoveprefixÚjsonÚloadsÚ	read_textÚOSErrorÚ
ValueErrorÚ
isinstancer[   rb   r„   rn   r   Úsorted)	r   r{   Úmanifest_pathr   ÚnumberÚmanifestÚ_r6   Úpaths	   &        r   Ú_legacy_installsr›   Š   sE  € à€EÜ&›×-Ñ-°°G°9¸NÐ.K×LˆØ×"Ñ"×)Ñ)×.Ñ.ˆð	Ü˜×)Ñ)¨#Ó.Ó/ˆFÜ—z’z -×"9Ñ"9À;Ð"9Ó"OÓPˆHô �x¤×&Ô&¨8¯<©<¸Ó+>À#Ö+EÈ(Ï,É,ÐW`ÓJaÐelÖJlØ—L‘LÐ!3×4Ô4¼ÀHÇLÁLÐQYÓDZÔ\`×9aÔ9aØ!×(Ñ(´×>Ø�L‰L˜&¤# f£+¨}×/CÑ/CÀXÐN×Oñ Mô IOÈuÐ^bÕHcÖdÑHcÑ*D¨!°dˆW˜HÓ%ÑHcÔdÐdøô œÐ$ô 	Ûð	üõ es   ÁA E:Å$F
Å:FÆFc               ó(   € V ^8„  d   QhRRRRRRRR/# )r#   r6   r   rU   r‰   r[   r$   zlist[str] | Noner   )r%   s   "r   r&   r&   ›   s)   € ÷ 	ñ 	¨ð 	°Sð 	À$ð 	ÐK[ñ 	r   c                óô   € V P                  W4       Uu. uF  qCP                  V4      NK  	  ppV'       d;   \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   R# V# u upi )ai  The manifest's archive digests in PM's archive order, or None when one is missing.

The pre-PM installer fetched only llama.cpp's own release assets. On Linux PM also pins the
libgomp .deb, so an adopted engine there records fewer archives than the lock and counts as
outdated: usable now (its manifest proves it ran against the host's libgomp), update offered.c              3  ó|   "  € T F2  p\        V\        4      ;'       d    \        P                  V4      x € K4  	  R # 5irD   )r”   r   Ú_SHA256Ú	fullmatch)rE   Úshas   & r   rH   Ú$_legacy_artifacts.<locals>.<genexpr>¢   s/   é € Ð[ÑVZÈsœ: c¬3Ó/×JÐJ´G×4EÑ4EÀcÓ4JÔJÓVZùs   ‚<ž<FTN)Ú_asset_namesrb   Úall)Úpackager6   rU   r‰   rF   Úshass   &&&&  r   Ú_legacy_artifactsr§   ›   s_   € ð *1×)=Ñ)=¸gÔ)NÓOÑ)N �J‰J�tÖÑ)N€DÐOß—s“sÑ[ÑVZÓ[—s—s’sÑ[ÑVZÓ[×[Ò[ÙØ€Kùò Ps   ”A5c               ó    € V ^8„  d   QhRRRR/# )r#   Úrootr   r$   zIterator[bool]r   )r%   s   "r   r&   r&   ¨   s   € ÷ 	ñ 	�dð 	˜~ñ 	r   c              #  óB  "  € ^ RI Hp V P                  RRR7       \        P                  ! V R,          \        P
                  \        P                  ,          R4      p V! VR^R7      x € \        P                  ! V4       R#   \        P                  ! T4       i ; i5i)z[PM's store lock, or False when another PM operation holds it (a download can take minutes).)Úlock_fdT)ÚparentsÚexist_okz.install.locki€  )ÚwaitÚtimeoutN)Úpm.filesystemr«   ÚmkdirÚosÚopenÚO_CREATÚO_RDWRÚclose)r©   r«   Úfds   &  r   Ú_store_lockr¸   §   sh   é € õ &à‡J�J�t d€JÔ+Ü	�Š�˜Õ'¬¯©´b·i±iÕ)?ÀÓ	G€BðÙ�b˜t¨QÔ/Ò/ä
�Š�ŽøŒ�Š��üs   ‚ABÁB Á,BÂBÂBc               ó    € V ^8„  d   QhRRRR/# )r#   r   r   r$   ru   r   )r%   s   "r   r&   r&   ´   s   € ÷ ñ  ð ¨ñ r   c                ó4  €  \        V 4      pV'       g   R# ^ RIHp \        V ,          p\        P                  ! V4      p\        P
                  ! 4       pVP                  4       pWbP                  4       8X  d   VP                  4       MVR,          p\        ;_uu_ 4        \        V4      ;_uu_ 4       pV'       d   \        P                  ! VRR7      e    RRR4       RRR4       R# V FB  w  ršp\        WIWZW¶V4      '       d    RRR4       RRR4       R# \        P                  V
4       KD  	  RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i  \         d"   p\         P#                  RY4        Rp?R# Rp?ii ; i)aò  Move the newest pre-PM install of ``backend`` into PM's store and record it as installed.

A machine that already ran a Hermes-installed engine keeps it across the update to PM. The
manifest's archive digests become the PM identity, so a tag that matches the pin counts as
current and an older tag counts as outdated, which offers the update. ``os.rename`` only:
instant on one volume, and a store on another volume leaves the engine where it is. Never
raises; returns whether an engine was moved.
F)r4   z
facts.jsonTrx   NzCcould not move the pre-PM llama.cpp %s engine into the PM store: %s)r›   r2   r4   r7   rc   rN   Úwritable_store_rootÚ
store_rootÚ
facts_pathÚ_ADOPTION_LOCKr¸   ry   Ú_adoptr„   ÚaddÚ	ExceptionÚloggerÚwarning)r   rs   Úpm_pathsrF   r¥   rU   r©   r½   Úheldr6   Úsourcer˜   Úexcs   &            r   r€   r€   ´   s,  € ðlÜ% gÓ.ˆ
ßÙÝ(ä Õ(ˆÜ—.’. Ó&ˆÜ×"Ò"Ó$ˆØ×+Ñ+Ó-ˆØ.2×6IÑ6IÓ6KÔ.K�X×(Ñ(Ô*ÐQUÐXdÕQdˆ
ßŽ^œ[¨×.Ô.°$ßœ2×/Ò/°ÀTÔJÒVØ÷ /�^‰^ó .8Ñ)� Ü˜'¨F¸HÈJ×WÒWØ÷ /�^‰^ô ×"Ñ" 6Ö*ñ .8÷ /�^ñ ÷ /×.ú�^Ž^ñ ûô ô lÜ�‰Ð\Ð^e×kÐkÙûðlúsw   ‚E+ —B	E+ Â EÂ4$E	ÃEÃ E+ Ã*E	ÄEÄE+ ÄE	Ä2EÄ:E+ ÅEÅEÅE(	Å"E+ Å(E+ Å+FÅ6FÆFc               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r#   r6   r   rU   rÆ   r   r˜   r[   r©   r½   r$   ru   r   )r%   s   "r   r&   r&   Ô   s@   € ÷ ñ ˜Sð ¨#ð °tð Àtð ÐSWð ØðØ $ñr   c                óà  € ^ RI Hp \        WW$R,          4      pV P                  W4      p	WY,          p
Ve-   V
P	                  4       '       g   V
P                  4       '       d   R# V P                  W24      pV'       d   \        P                  RW;4       R#  \        P                  ! W:4        \        P                  ! T4      P                  T P                  YT P!                  Y¢4      TY(T! T
4      R7       \%        \        4      ;_uu_ 4        TP&                  P)                  4        RRR4       \        P+                  RYP                  T4       R#   \         d"   p\        P                  RY<4        Rp?R# Rp?ii ; i  \"         dL    \%        \        4      ;_uu_ 4        \        P                  ! Y£4       RRR4       h   + '       g   i     h ; ii ; i  + '       g   i     L»; i)	é    )Útree_digestr‰   NFz(pre-PM llama.cpp at %s left in place: %s)rU   re   Údigestz2moved llama.cpp b%s (%s) from %s into the PM storeT)Úpm.storerË   r§   Ústore_entryÚexistsÚ
is_symlinkÚverifyrÂ   rÃ   r²   Úrenamer’   r2   ÚFactsÚrecordrF   ÚenvÚBaseExceptionr   rŒ   ÚrmdirÚinfo)r¥   r6   rU   rÆ   r˜   r©   r½   rË   re   Ú
entry_nameÚentryrf   rÇ   s   &&&&&&&      r   r¿   r¿   Ô   sj  € å$ä! '°FÀXÕ<NÓO€IØ×$Ñ$ WÓ5€JØÕ€EØÒ˜EŸL™LŸNšN¨e×.>Ñ.>×.@Ò.@ÙØ�^‰^˜FÓ+€FßÜ�‰ÐAÀ6ÔRÙðÜ
�	Š	�&Ô ðÜ
�Š�Ó×#Ñ# G§L¡L°'ÀwÇ{Á{ÐSXÓGaÐcgØ+1É{Ð[`ÓOað 	$ô 	cô 
”'×	Õ	Ø�‰×ÑÔ÷ 
ä
‡K�KÐDÀgÏ|É|Ð]cÔdÙøô ô Ü�‰ÐAÀ6ÔOÝûðûô ô Ü”g×ÕÜ�IŠI�eÔ$÷ à÷ Öàúðú÷ 
×	úsI   ÂE Â.A
F ÄGÅFÅ E<Å<FÆ"GÆ&GÆ=	GÇGÇ	GÇG-	ÚprogressÚpause_eventÚdownload_progressc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r#   r   r   rÛ   z+Callable[[str, int, int, str], None] | NonerÜ   zthreading.Event | NonerÝ   zProgressFn | Noner$   r   r   )r%   s   "r   r&   r&   ó   s3   € ÷ 
ñ 
˜3ð 
Ð-Xð 
Ø5ð
à%6ð
àBHñ
r   c               ó¦   € \        V 4      p\        P                  ! \        V,          RVW#R7       \	        VRR7      pVf   \        RV R24      hV# )zWOnly deliberate install/update jobs call this. PM verifies every archive and publishes.T)ÚexplicitrÛ   rÜ   rÝ   Frx   r0   z$ install has no usable pinned binary)rq   r2   Úensurer7   rƒ   r   )r   rÛ   rÜ   rÝ   Úresolvedr‚   s   &$$$  r   Úensure_enginerã   ó   sU   € ô ˜wÓ'€HÜ‡I‚IÔ˜xÕ(°4À(Ø%õLä˜h°uÔ=€FØ‚~Ü# j°°
Ð:^Ð$_Ó`Ð`Ø€Mr   rD   )rX   )2Ú__conditional_annotations__r   Ú
__future__r   r�   Úloggingr²   ÚreÚ	threadingÚ
contextlibr   r   Údataclassesr   Úpathlibr   Útypingr   r   r2   Úpm.downloaderr	   Ú	getLoggerr   rÂ   r7   ÚRuntimeErrorr   r   r-   r8   rR   r_   rh   rq   r|   rƒ   ÚcompilerŸ   ÚLockr¾   Úsetr„   r!   r›   r§   r¸   r€   r¿   rã   )rä   s   @r   Ú<module>ró      sJ  øðÜ _å "ã Û Û 	Û 	Û ß /Ý !Ý ß %ã 	Ý $à	×	Ò	˜8Ó	$€ð ˆOØÐØÐØ	ˆ>Ø	ˆ>ðÐ ôC˜Lô Cñ �$Ô÷ð ó ðõ?õ÷
õ8÷ñ4Èð 4Ø)-÷4ð 4õ"ñÀd÷ ð ð  �*Š*�_Ó
%€Ø—’Ó!€á›E€�	Ó !õeõ"	ð ô	ó ð	õõ@ð>
Ð[_ð 
Ø8<ð
à9=÷
ñ 
r   