Ë
    -Œ:j>'  ã            	       óH  — d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ d
dlmZ dZdZdZed   Z ed¬«       G d„ d«      «       Z ed¬«       G d„ d«      «       Zd3dedededefd„Zd4dee   dedz  dee   fd„Zdee   fd„Z d3dedededefd „Z!de"eef   fd!„Z#d"ee   dededz  fd#„Z$d$edefd%„Z%ded&eddfd'„Z&d(eddfd)„Z'dedee   fd*„Z(ded+ee   d&eddfd,„Z)d-ed.eddfd/„Z*dee   dee   fd0„Z+d(ed1e"eef   defd2„Z,y)5zNInternal helpers for Hugging Face marketplace skill installation and upgrades.é    N)Ú	dataclassÚreplace)ÚPathÚPurePosixPath)ÚAnyÚLiteral)Ú
BucketFile)ÚCLIErroré   )Údisable_progress_barsé   )Ú
get_hf_apizhuggingface/skillsúmarketplace.jsonz.hf-skill-manifest.json)Ú
up_to_dateÚ	unmanagedÚsource_unreachableT)Úfrozenc                   ó6   — e Zd ZU eed<   eed<   dZedz  ed<   y)ÚMarketplaceSkillÚnameÚ	repo_pathNÚdescription)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © ó    ú]/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/huggingface_hub/cli/_skills.pyr   r      s   … à
ƒIØƒNØ"€K��t‘Ô"r   r   c                   ó@   — e Zd ZU eed<   eed<   eed<   dZedz  ed<   y)ÚSkillUpdateInfor   Ú	skill_dirÚstatusNÚdetail)r   r   r   r   r   r   ÚSkillUpdateStatusr%   r   r   r    r"   r"   #   s    … à
ƒIØƒOØÓØ€FˆC�$‰JÔr   r"   Ú
skill_nameÚdestination_rootÚforceÚreturnc                 óÒ   — t        «       }t        «       5  t        |«      }t        || «      }|€t	        d| › dt
        › d�«      ‚t        ||||¬«      cddd«       S # 1 sw Y   yxY w)z3Resolve a marketplace skill by name and install it.NúSkill 'z' not found in zD. Try `hf skills add` to install `hf-cli` or use a known skill name.©r)   )r   r   Ú_load_marketplace_skillsÚ_select_marketplace_skillr
   ÚDEFAULT_SKILLS_BUCKET_IDÚ_install_marketplace_skill)r'   r(   r)   ÚapiÚmarketplace_skillsÚskills         r    Ú	add_skillr5   +   s   € ä
‹,€CÜ	Ó	 ñ UÜ5°cÓ:ÐÜ)Ð*<¸jÓIˆØˆ=ÜØ˜*˜ _Ô5MÐ4Nð OUð Uóð ô *¨#¨uÐ6FÈeÔT÷U÷ Uò Uús   •>AÁA&ÚrootsÚselectorc           	      óä  — t        | «      }|�_|j                  «       j                  «       }|D �cg c]"  }|j                  j                  «       |k(  sŒ!|‘Œ$ }}|st	        d|› d|› d�«      ‚t        «       }t        «       5  t        |«      D �ci c]  }|j                  j                  «       |“Œ }}|D �cg c]  }t        |||«      ‘Œ c}cddd«       S c c}w c c}w c c}w # 1 sw Y   yxY w)z;Re-sync managed marketplace skill installs from the bucket.NzNo installed skill matches 'z"'. Install it with `hf skills add z`.)	Ú_iter_unique_skill_dirsÚstripÚlowerr   r
   r   r   r.   Ú_apply_single_update)	r6   r7   Ú
skill_dirsÚselector_lowerÚdr2   r4   r3   r#   s	            r    Úupdate_skillsr@   9   sí   € ä(¨Ó/€JØÐØ!Ÿ™Ó)×/Ñ/Ó1ˆØ!+ÖP˜A¨q¯v©v¯|©|«~ÀÓ/O’aÐPˆ
ÐPÙÜÐ9¸(¸ÐCeÐfnÐeoÐoqÐrÓsÐsä
‹,€CÜ	Ó	 ñ fÜE]Ð^aÓEbÖc¸E˜eŸj™j×.Ñ.Ó0°%Ñ7ÐcÐÐcØZdÖeÈYÔ$ S¨)Ð5GÕHÒe÷fñ fùò Qùò dùÚe÷fð fús5   °"CÁCÂC&Â"CÂ1C&Â7C!ÃC&Ã
C&Ã&C/c                 óÀ  — t        | «      }|j                  d«      }t        |t        «      st	        d«      ‚g }|D ]Ÿ  }t        |t
        «      sŒ|j                  d«      }|j                  d«      }t        |t        «      rt        |t        «      sŒW|j                  d«      }|j                  t        |t        |«      t        |t        «      r|nd ¬«      «       Œ¡ |S )NÚpluginszAInvalid marketplace payload: expected a top-level 'plugins' list.r   Úsourcer   )r   r   r   )
Ú_load_marketplace_payloadÚgetÚ
isinstanceÚlistr
   Údictr   Úappendr   Ú_normalize_repo_path)r2   ÚpayloadrB   ÚskillsÚpluginr   rC   r   s           r    r.   r.   H   sÅ   € Ü'¨Ó,€GØ�k‰k˜)Ó$€GÜ�gœtÔ$ÜÐZÓ[Ð[à%'€FØò 
ˆÜ˜&¤$Ô'ØØ�z‰z˜&Ó!ˆØ—‘˜HÓ%ˆÜ˜$¤Ô$¬J°v¼sÔ,CØØ—j‘j Ó/ˆØ�‰ÜØÜ.¨vÓ6Ü+5°kÄ3Ô+G™KÈTôõ	
ð
ð €Mr   r4   c                 ó2  — |j                  «       j                  «       }|j                  dd¬«       ||j                  z  }|j	                  «       }|r|st        d|› �«      ‚|rct        j                  |d|j                  › d�¬«      5 }t        |«      |j                  z  }t        | ||¬«       t        ||¬«       d	d	d	«       |S 	 t        | ||¬«       |S # 1 sw Y   |S xY w# t        $ r' |j	                  «       rt        j                  |«       ‚ w xY w)
z:Install a marketplace skill into a local skills directory.T©ÚparentsÚexist_okzSkill already exists: ú.z	.install-)ÚdirÚprefix)r4   Úinstall_dir)Úexisting_dirÚ
staged_dirN)Ú
expanduserÚresolveÚmkdirr   ÚexistsÚFileExistsErrorÚtempfileÚTemporaryDirectoryr   Ú_populate_install_dirÚ_atomic_replace_directoryÚ	ExceptionÚshutilÚrmtree)r2   r4   r(   r)   rU   Úalready_existsÚtmp_dir_strrW   s           r    r1   r1   a   s  € à'×2Ñ2Ó4×<Ñ<Ó>ÐØ×Ñ 4°$ÐÔ7Ø" U§Z¡ZÑ/€KØ ×'Ñ'Ó)€Ná™eÜÐ 6°{°mÐDÓEÐEáô ×(Ñ(Ð-=ÈÈ+×JZÑJZÐI[Ð[dÐFeÔfð 	WÐjuÜ˜kÓ*¨[×-=Ñ-=Ñ=ˆJÜ! #¨UÀ
ÕKÜ%°;È:ÕV÷	Wð ÐðÜ˜c¨¸KÕHð
 Ð÷	Wð Ðûô ò Ø×ÑÔÜ�M‰M˜+Ô&Øðús   Â
4CÃ	C& ÃC#Ã&0Dc                 ó2  — t        j                  «       5 }t        |«      dz  }| j                  t        t
        |fgd¬«       t        j                  |j                  d¬«      «      }d d d «       t        t        «      st        d«      ‚|S # 1 sw Y   Œ&xY w)Nr   T)Úraise_on_missing_fileszutf-8)Úencodingz4Invalid marketplace payload: expected a JSON object.)r]   r^   r   Údownload_bucket_filesr0   ÚMARKETPLACE_PATHÚjsonÚloadsÚ	read_textrF   rH   r
   )r2   Útmp_dirÚ
local_pathÚparseds       r    rD   rD   }   s—   € Ü	×	$Ñ	$Ó	&ð D¨'Ü˜'“]Ð%7Ñ7ˆ
Ø×!Ñ!Ü$Ü 
Ð+Ð,Ø#'ð 	"ô 	
ô
 —‘˜J×0Ñ0¸'Ð0ÓBÓCˆ÷Dô �fœdÔ#ÜÐMÓNÐNØ€M÷Dð Dús   •ABÂBrL   c                 ó�   — |j                  «       j                  «       }| D ]#  }|j                  j                  «       |k(  sŒ!|c S  y ©N)r:   r;   r   )rL   r7   r>   r4   s       r    r/   r/   Œ   sE   € Ø—^‘^Ó%×+Ñ+Ó-€NØò ˆØ�:‰:×ÑÓ Ó/ØŠLðð r   Úpathc                 ó²   — | j                  «       }|j                  d«      r|dd  }|j                  d«      rŒ|j                  d«      }|st        d«      ‚|S )Nz./r   ú/z-Invalid marketplace entry: empty source path.)r:   Ú
startswithr
   )rs   Ú
normalizeds     r    rJ   rJ   ”   s[   € Ø—‘“€JØ
×
Ñ
 Ô
%Ø  �^ˆ
ð ×
Ñ
 Õ
%à×!Ñ! #Ó&€JÙÜÐFÓGÐGØÐr   rU   c                 ó¢   — |j                  dd¬«       t        | |«      }t        | |||«       t        |«       |t        z  j                  «        y )NTrO   )rZ   Ú_list_skill_filesÚ_download_skill_filesÚ_validate_installed_skill_dirÚMANAGED_MARKER_FILENAMEÚtouch)r2   r4   rU   Úbucket_filess       r    r_   r_   ž   sI   € Ø×Ñ˜d¨TÐÔ2Ü$ S¨%Ó0€LÜ˜#˜u l°KÔ@Ü! +Ô.ØÔ*Ñ*×1Ñ1Õ3r   r#   c                 óJ   — | dz  }|j                  «       st        d|› �«      ‚y )NzSKILL.mdz%Installed skill is missing SKILL.md: )Úis_fileÚRuntimeError)r#   Ú
skill_files     r    r{   r{   ¦   s0   € Ø˜ZÑ'€JØ×ÑÔÜÐBÀ:À,ÐOÓPÐPð  r   c                 óà   — |j                   j                  d«      }| j                  t        |d¬«      D �cg c]  }t	        |t
        «      r|‘Œ }}|st        d|› dt        › d�«      ‚|S c c}w )zAList all files under `skill.repo_path` in the marketplace bucket.ru   T)rT   Ú	recursivezPath 'z' not found in bucket 'ú'.)r   ÚrstripÚlist_bucket_treer0   rF   r	   ÚFileNotFoundError)r2   r4   rT   ÚitemÚfiless        r    ry   ry   ¬   s€   € à�_‰_×#Ñ# CÓ(€Fð ×(Ñ(Ô)AÈ&Ð\`Ð(ÓaöàÜ�dœJÔ'ò 	ð€Eð ñ
 Ü &¨¨Ð0GÔH`ÐGaÐacÐ dÓeÐeØ€Lùòs   ¶A+rŠ   c                 ó¾  — |j                   j                  d«      }|› d�}g }|D ]ˆ  }|j                  j                  |«      sŒ|j                  t	        |«      d } |j
                  t        |«      j                  Ž }	|	j                  j                  dd¬«       |j                  ||	f«       ŒŠ |st        d|› dt        › d�«      ‚| j                  t        |«       y)z)Download bucket files into `install_dir`.ru   NTrO   zNo files found under 'z' in bucket 'r…   )r   r†   rs   rv   ÚlenÚjoinpathr   ÚpartsÚparentrZ   rI   rˆ   r0   ri   )
r2   r4   rŠ   rU   rT   Úprefix_with_slashÚdownload_specsÚbucket_fileÚrelativeÚ
local_files
             r    rz   rz   ¹   sè   € à�_‰_×#Ñ# CÓ(€FØ!˜( !˜Ðð AC€NØò 9ˆØ×Ñ×*Ñ*Ð+<Ô=ØØ×#Ñ#¤CÐ(9Ó$:Ð$<Ð=ˆØ)�[×)Ñ)¬=¸Ó+B×+HÑ+HÐIˆ
Ø×Ñ×Ñ¨°tÐÔ<Ø×Ñ˜{¨JÐ7Õ8ð9ñ ÜÐ"8¸¸ÀÔNfÐMgÐgiÐ jÓkÐkà×ÑÔ6¸ÕGr   rV   rW   c                 ó*  — |j                   | j                  › d�z  }	 | j                  |«       |j                  | «       t        j                  |«       y # t
        $ r3 |j                  «       r!| j                  «       s|j                  | «       ‚ w xY w)Nz.backup)r�   r   Úrenamerb   rc   ra   r[   )rV   rW   Ú
backup_dirs      r    r`   r`   Ñ   s„   € Ø×"Ñ"¨×(9Ñ(9Ð':¸'Ð%BÑB€JðØ×Ñ˜JÔ'Ø×Ñ˜,Ô'Ü�‰�jÕ!øÜò Ø×ÑÔ |×':Ñ':Ô'<Ø×Ñ˜lÔ+Øðús   ž7A Á<Bc                 óÎ  — t        «       }g }| D ]Ó  }|j                  «       j                  «       }|j                  «       sŒ2t	        |j                  «       «      D ]†  }|j                  j                  d«      rŒ|j                  «       s|j                  «       sŒ@|j                  «       }||v s|j                  «       sŒe|j                  |«       |j                  |«       Œˆ ŒÕ |S )NrR   )ÚsetrX   rY   Úis_dirÚsortedÚiterdirr   rv   Ú
is_symlinkÚaddrI   )r6   ÚseenÚ
discoveredÚrootÚchildÚresolveds         r    r9   r9   Ý   sÅ   € Ü“e€DØ€JØò (ˆØ�‰Ó ×(Ñ(Ó*ˆØ�{‰{Œ}ØÜ˜DŸL™L›NÓ+ò 		(ˆEØ�z‰z×$Ñ$ SÔ)ØØ—<‘<”>¨%×*:Ñ*:Ô*<ØØ—}‘}“ˆHØ˜4Ñ x§¡Ô'8ØØ�H‰H�XÔØ×Ñ˜hÕ'ñ		(ð	(ð Ðr   r3   c           	      ó¨  — t        |j                  |d¬«      }|t        z  j                  «       s|S |j	                  |j                  j                  «       «      }|€#t        |dd|j                  › dt        › d�¬«      S 	 t        | ||j                  d¬	«       t        |d
¬«      S # t        $ r!}t        |dt        |«      ¬«      cY d }~S d }~ww xY w)Nr   )r   r#   r$   r   r,   z' is no longer available in rR   )r$   r%   Tr-   r   )r$   )r"   r   r|   r[   rE   r;   r   r0   r1   r�   ra   r   )r2   r#   r3   Úbaser4   Úexcs         r    r<   r<   ñ   sÌ   € Ü 	§¡¸)ÈKÔX€DàÔ/Ñ/×7Ñ7Ô9Øˆà×"Ñ" 9§>¡>×#7Ñ#7Ó#9Ó:€EØ€}ÜØØ'Ø˜YŸ^™^Ð,Ð,HÔIaÐHbÐbcÐdô
ð 	
ðKÜ" 3¨¨y×/?Ñ/?ÀtÕLô �4 Ô-Ð-øô ò KÜ�tÐ$8ÄÀSÃÔJÕJûðKús   ÂB' Â'	CÂ0CÃCÃC)Frr   )-Ú__doc__rk   rb   r]   Údataclassesr   r   Úpathlibr   r   Útypingr   r   Úhuggingface_hub._bucketsr	   Úhuggingface_hub.errorsr
   Úutilsr   Ú
_cli_utilsr   r0   rj   r|   r&   r   r"   r   Úboolr5   rG   r@   r.   r1   rH   rD   r/   rJ   r_   r{   ry   rz   r`   r9   r<   r   r   r    ú<module>r°      s,  ðÙ Tã Û Û ß *ß 'ß å /Ý +å )Ý "ð 0Ð Ø%Ð ð
 4Ð àÐKÑLÐ ñ �$Ô÷#ð #ó ð#ñ �$Ô÷ð ó ðñU˜#ð U°ð U¸dð UÈtó Uñf˜˜d™ð f¨s°T©zð fÀTÈ/ÑEZó fð TÐ*:Ñ%;ó ñ2Ð+;ð Ètð Ð\`ð Ðmqó ð8 d¨3°¨8¡nó ð dÐ+;Ñ&<ð Èð ÐP`ÐcgÑPgó ð˜sð  só ð4Ð&6ð 4ÀTð 4Èdó 4ðQ¨Tð Q°dó Qð
Ð"2ð 
°t¸JÑ7Gó 
ðHÐ&6ð H¸tÀJÑ?Oð HÐ^bð HÐgkó Hð0	¨Dð 	¸dð 	Àtó 	ð 4¨¡:ð °$°t±*ó ð(.¨ð .À4ÈÐM]ÐH]ÑC^ð .Ðcrô .r   