
    5pj;                        S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJrJr  SSKJrJr  SSKJr  SS	KJr  S
SKJrJr  SSKJr  SSKJr  \R>                  " \ 5      r!Sr"Sr#Sr$Sr%\S   r&\	" SS9 " S S5      5       r'\	" SS9 " S S5      5       r(SBS\)S\S\*S\4S jjr+SBS\)S\S\*S\4S  jjr,SCS!\-\   S"\)S-  S#\)S\-\(   4S$ jjr.S\-\'   4S% jr/SBS&\'S\S\*S\4S' jjr0\Rb                  " S(5      r2 SBS)\)S\S*\\/S4   S\*S\4
S+ jjr3S\4\)\4   4S, jr5S-\-\'   S"\)S\'S-  4S. jr6S/\)S\)4S0 jr7S1\SS4S2 jr8S&\'S\-\   4S3 jr9S&\'S4\-\   S5\SS4S6 jr:S7\S8\SS4S9 jr;S!\-\   S\-\   4S: jr<S1\S;\4\)\'4   S#\)S\(4S< jr=\Rb                  " S=5      r>SDS> jr?SDS? jr@S!\S\-\   4S@ jrAS1\S\*4SA jrBg)EzNInternal helpers for Hugging Face marketplace skill installation and upgrades.    N)Callable)	dataclassreplace)PathPurePosixPath)AnyLiteral)__version__	constants)
BucketFile)CLIError   )disable_progress_barslogging   )
get_hf_api)outzhf-clizhuggingface/skillsmarketplace.jsonz.hf-skill-manifest.json)
up_to_date	unmanagedsource_unreachableT)frozenc                   >    \ rS rSr% \\S'   \\S'   Sr\S-  \S'   Srg)MarketplaceSkill$   name	repo_pathNdescription )__name__
__module____qualname____firstlineno__str__annotations__r   __static_attributes__r       W/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/huggingface_hub/cli/_skills.pyr   r   $   s    
IN"Kt"r'   r   c                   H    \ rS rSr% \\S'   \\S'   \\S'   Sr\S-  \S'   Sr	g)SkillUpdateInfo+   r   	skill_dirstatusNdetailr   )
r    r!   r"   r#   r$   r%   r   SkillUpdateStatusr.   r&   r   r'   r(   r*   r*   +   s     
IOFC$Jr'   r*   
skill_namedestination_rootforcereturnc                     [        5       n[        5          [        U5      n[        X@5      nUc  [	        SU  S[
         S35      e[        X5XS9sSSS5        $ ! , (       d  f       g= f)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.r2   )r   r   _load_marketplace_skills_select_marketplace_skillr   DEFAULT_SKILLS_BUCKET_ID_install_marketplace_skill)r0   r1   r2   apimarketplace_skillsskills         r(   	add_skillr>   3   sl    
,C		 5c:)*<I=*_5M4N OU U  *#6FT 
!	 	 s   9A
A&contentc                 B   ^  S[         SS4U 4S jjn[        [        XUS9$ )zXInstall the `hf-cli` skill from locally generated SKILL.md content (no bucket download).install_dirr3   Nc                 z   > U R                  SSS9  U S-  R                  TSS9  U [        -  R                  5         g )NTparentsexist_okSKILL.mdutf-8encoding)mkdir
write_textMANAGED_MARKER_FILENAMEtouch)rA   r?   s    r(   populate)install_generated_skill.<locals>.populateD   s@    $6	z	!--g-H	.	.557r'   rN   r2   )r   _install_skillDEFAULT_SKILL_ID)r?   r1   r2   rN   s   `   r(   install_generated_skillrS   A   s*    8d 8t 8
 *,<W\]]r'   rootsselectorhf_cli_contentc          	      B   [        U 5      nUbh  UR                  5       R                  5       nU Vs/ s H$  oUR                  R                  5       U:X  d  M"  UPM&     nnU(       d  [	        SU SU S35      e[        S U 5       5      nSn0 nU(       aP  [        5       n[        5          [        U5       V	s0 s H  oR                  R                  5       U	_M     nn	SSS5        U V
s/ s H  n
[        XzX5      PM     sn
$ s  snf s  sn	f ! , (       d  f       N5= fs  sn
f )zgRe-sync managed skill installs (`hf-cli` is rewritten from `hf_cli_content`, the rest from the bucket).NzNo installed skill matches 'z"'. Install it with `hf skills add z`.c              3      #    U  H5  oR                   [        :g  =(       a    U[        -  R                  5       v   M7     g 7fN)r   rR   rL   exists).0ds     r(   	<genexpr> update_skills.<locals>.<genexpr>V   s2     vkufgFF&66aA@W<W;_;_;aakus   =?)
_iter_unique_skill_dirsstriplowerr   r   anyr   r   r7   _apply_single_update)rT   rU   rV   
skill_dirsselector_lowerr\   needs_marketplacer;   r<   r=   r,   s              r(   update_skillsrg   L   s   (/J!)//1!+PAvv||~/Oa
P9(Cefneooqrss vkuvv
C68l"$IabeIf!gIf**"2"2"4e";If!g % gqqfpYb 1CTfpqq Q "h %$ rs/   !DD(D6$DD(DD
Dc                    [        U 5      nUR                  S5      n[        U[        5      (       d  [	        S5      e/ nU H  n[        U[
        5      (       d  M  UR                  S5      nUR                  S5      n[        U[        5      (       a  [        U[        5      (       d  Mh  UR                  S5      nUR                  [        U[        U5      [        U[        5      (       a  UOS S95        M     U$ )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)r;   payloadri   skillspluginr   rj   r   s           r(   r7   r7   a   s    ',Gkk)$Ggt$$Z[[%'F&$''zz&!H%$$$Jvs,C,Cjj/.v6+5k3+G+GKT	
  Mr'   r=   c                 R   ^ ^ S[         SS4U U4S jjn[        TR                  X$US9$ )z:Install a marketplace skill into a local skills directory.rA   r3   Nc                    > U R                  SSS9  [        TT5      n[        TTX5        [        U 5        U [        -  R                  5         g )NTrC   )rJ   _list_skill_files_download_skill_files_validate_installed_skill_dirrL   rM   )rA   bucket_filesr;   r=   s     r(   rN   ,_install_marketplace_skill.<locals>.populate}   sH    $6(e4c5,D%k2	.	.557r'   rP   )r   rQ   r   )r;   r=   r1   r2   rN   s   ``   r(   r:   r:   z   s2    8d 8t 8 8 %**&6QVWWr'   z[A-Za-z0-9][A-Za-z0-9._-]*r   rN   c                 z   [         R                  U 5      (       d  [        SU  S35      eUR                  5       R	                  5       nUR                  SSS9  X-  nUR                  5       nU(       a  U(       d  [        SU 35      eU(       aW  [        R                  " USUR                   S3S9 n[        U5      UR                  -  nU" U5        [        XGS	9  S
S
S
5        U$  U" U5        U$ ! , (       d  f       U$ = f! [         a-    UR                  5       (       a  [        R                  " U5        e f = f)a  Install a skill into ``destination_root`` by calling ``populate(install_dir)`` to fill it.

Used by both the marketplace install (populate = download from bucket) and the
locally-generated install (populate = write content). When the install already
exists and ``force`` is set, the new content is staged in a sibling tempdir and
atomically swapped in, so the existing install stays intact if ``populate``
fails halfway through.
zInvalid skill name ''.TrC   zSkill already exists: .z	.install-)dirprefix)existing_dir
staged_dirN)_VALID_SKILL_NAME	fullmatchr   
expanduserresolverJ   rZ   FileExistsErrortempfileTemporaryDirectoryr   r   _atomic_replace_directory	Exceptionshutilrmtree)r   r1   rN   r2   rA   already_existstmp_dir_strr   s           r(   rQ   rQ      s3     &&t,,-dV2677'224<<>4$7")K '')Ne 6{mDEE((-=+JZJZI[[dFefjuk*[-=-==JZ %;V g 
  gf   MM+&s   2*C1'D 1
D 7D:c                 >   [         R                  " 5        n[        U5      S-  nU R                  [        [
        U4/SS9  [        R                  " UR                  SS95      nS S S 5        [        W[        5      (       d  [        S5      eU$ ! , (       d  f       N0= f)Nr   T)raise_on_missing_filesrG   rH   z4Invalid marketplace payload: expected a JSON object.)r   r   r   download_bucket_filesr9   MARKETPLACE_PATHjsonloads	read_textrm   ro   r   )r;   tmp_dir
local_pathparseds       r(   rk   rk      s    		$	$	&'']%77
!!$
+,#' 	" 	

 J00'0BC 
' fd##MNNM 
'	&s   AB
Brs   c                     UR                  5       R                  5       nU  H%  nUR                  R                  5       U:X  d  M#  Us  $    g rY   )r`   ra   r   )rs   rU   re   r=   s       r(   r8   r8      s@    ^^%++-N::/L  r'   pathc                     U R                  5       nUR                  S5      (       a  USS  nUR                  S5      (       a  M  UR                  S5      nU(       d  [        S5      eU$ )Nz./r   /z-Invalid marketplace entry: empty source path.)r`   
startswithr   )r   
normalizeds     r(   rq   rq      sa    J



%
%^
 


%
%!!#&JFGGr'   r,   c                 T    U S-  nUR                  5       (       d  [        SU 35      eg )NrF   z%Installed skill is missing SKILL.md: )is_fileRuntimeError)r,   
skill_files     r(   ry   ry      s3    Z'JB:,OPP  r'   c                     UR                   R                  S5      nU R                  [        USS9 Vs/ s H  n[	        U[
        5      (       d  M  UPM     nnU(       d  [        SU S[         S35      eU$ s  snf )zAList all files under `skill.repo_path` in the marketplace bucket.r   T)r   	recursivezPath 'z' not found in bucket 'r}   )r   rstriplist_bucket_treer9   rm   r   FileNotFoundError)r;   r=   r   itemfiless        r(   rw   rw      s    __##C(F (()A&\`(aaDdJ' 	a 
 
 &0GH`Gaac deeLs   A7A7r   rA   c                    UR                   R                  S5      nU S3n/ nU H  nUR                  R                  U5      (       d  M%  UR                  [	        U5      S nUR
                  " [        U5      R                  6 n	U	R                  R                  SSS9  UR                  Xy45        M     U(       d  [        SU S[         S35      eU R                  [        U5        g)z)Download bucket files into `install_dir`.r   NTrC   zNo files found under 'z' in bucket 'r}   )r   r   r   r   lenjoinpathr   partsparentrJ   rp   r   r9   r   )
r;   r=   r   rA   r   prefix_with_slashdownload_specsbucket_filerelative
local_files
             r(   rx   rx      s    __##C(F!(! ACN**+<==##C(9$:$<= ))=+B+H+HI
t<{78  "8NfMggi jkk6Gr'   r   r   c                 B   UR                   U R                   S3-  n U R                  U5        UR                  U 5        [        R                  " U5        g ! [
         a=    UR                  5       (       a&  U R                  5       (       d  UR                  U 5        e f = f)Nz.backup)r   r   renamer   r   r   rZ   )r   r   
backup_dirs      r(   r   r      s    ""(9(9':'%BBJJ','j! |':':'<'<l+s   8A ABc                    [        5       n/ nU  H  nUR                  5       R                  5       nUR                  5       (       d  M8  [	        UR                  5       5       H  nUR                  R                  S5      (       a  M%  UR                  5       (       d  UR                  5       (       d  MQ  UR                  5       nXQ;   d  UR                  5       (       d  M}  UR                  U5        UR                  U5        M     M     U$ )Nr~   )setr   r   is_dirsortediterdirr   r   
is_symlinkaddrp   )rT   seen
discoveredrootchildresolveds         r(   r_   r_     s    eDJ ((*{{}}DLLN+Ezz$$S))<<>>%*:*:*<*<}}Hx'8'8HHXh' ,	  r'   r<   c           	      R   [        UR                  USS9nU[        -  R                  5       (       d  U$ UR                  [        :X  a   [        X1R                  SS9  [        USS9$ UR                  UR                  R                  5       5      nUc   [        USS	UR                   S
[         S3S9$  [        XUR                  SS9  [        USS9$ ! [         a  n[        US[        U5      S9s S nA$ S nAff = f! [         a  n[        US[        U5      S9s S nA$ S nAff = f)Nr   )r   r,   r-   Tr6   r   )r-   r.   r   )r-   r5   z' is no longer available in r~   )r*   r   rL   rZ   rR   rS   r   r   r   r$   rl   ra   r9   r:   )r;   r,   r<   rV   baseexcr=   s          r(   rc   rc      s(    	)KXD//7799~~))	O#N4D4DDQ tL11""9>>#7#7#9:E}'Y^^,,HIaHbbcd
 	
K"3y/?/?tL 4--#  	O4(<SXNN	O  Kt$8SJJKs<   	C 4C> 
C;C60C;6C;>
D&D!D&!D&z)Generated with `huggingface_hub v([^`]+)`c                  b     [        5         g! [         a    [        R                  SSS9   gf = f)a9  Hint at installing or updating the `hf-cli` skill, at most once every 24 hours.

Only prints a hint: installing or updating stays an explicit user action.

Skipped entirely if `HF_HUB_DISABLE_UPDATE_CHECK` is set. Called at the entry point of
the CLI, so any error is caught and logged to avoid breaking the CLI.
z-Error while checking for hf-cli skill update.T)exc_infoN)_check_skill_updater   loggerdebugr   r'   r(   check_skill_updater   F  s0    U UDtTUs   
 ..c            	      .   [         R                  (       a  g [        [         R                  5      n U R	                  5       (       a5  [
        R
                  " 5       U R                  5       R                  -
  S:  a  g U R                  R                  SSS9  U R                  5         [        [         R                  [         R                  5      n[        [         R                  [         R                  5      nU(       d>  U(       d7  [!        S S 5       5      (       a  g ["        R$                  " S[&         S35        g [!        S U 5       5      (       a  S	nO[!        S
 U 5       5      (       a  SnOg ["        R$                  " S[&         S[&         SU S35        g )NiQ TrC   c              3   2   #    U  H  o[         ;   v   M     g 7frY   )r
   )r[   tags     r(   r]   &_check_skill_update.<locals>.<genexpr>d  s     ;]ck!]s   )rcdevzThe `zj` skill is not installed. Run `hf skills add -g --claude` to teach your AI agents how to use the `hf` CLI.c              3   8   #    U  H  n[        U5      v   M     g 7frY   _is_skill_outdatedr[   r,   s     r(   r]   r   m  s     
F+Yi((+   z-g --claudec              3   8   #    U  H  n[        U5      v   M     g 7frY   r   r   s     r(   r]   r   o  s     GJy	**Jr   z--claudezThe installed `zE` skill was generated by another `hf` version. Run `hf skills update  z` to refresh it.)r   HF_HUB_DISABLE_UPDATE_CHECKr    CHECK_FOR_SKILL_UPDATE_DONE_PATHrZ   timestatst_mtimer   rJ   rM   _installed_hf_cli_dirsAGENTS_SKILLS_GLOBAL_PATHCLAUDE_SKILLS_GLOBAL_PATHAGENTS_SKILLS_LOCAL_PATHCLAUDE_SKILLS_LOCAL_PATHrb   r   hintrR   )
stamp_pathglobal_dirs
local_dirsscopes       r(   r   r   T  sE   ,, i@@AJ		joo.?.H.H HIUD48()L)LiNqNqrK'	(J(JILnLnoJz;];;;$% &@ @	
 	 
F+
FFF	GJG	G	GHH
*+ ,""2!31UG;K	Mr'   c                      U  Vs/ s H'  oR                  5       [        -  R                  5       PM)     nn[        R	                  U5       Vs/ s H  o3R                  5       (       d  M  UPM     sn$ s  snf s  snf rY   )r   rR   r   ro   fromkeysr   )rT   r   dirsr,   s       r(   r   r   y  s\    INO__!11::<DO'+}}T':Q':)>N>N>PI':QQ PQs   .A1A6(A6c                      U S-  R                  SS9n[        R                  U5      nUSL =(       d    UR	                  S5      [
        :g  $ ! [         a     gf = f)zNWhether the installed `hf-cli` SKILL.md was generated by another `hf` version.rF   rG   rH   FNr   )r   OSError_GENERATED_VERSION_REsearchgroupr
   )r,   r?   matchs      r(   r   r   ~  sa    z)44g4F "((1ED=9EKKNk99  s   A 
AA)FrY   )r3   N)C__doc__r   rer   r   r   collections.abcr   dataclassesr   r   pathlibr   r   typingr   r	   huggingface_hubr
   r   huggingface_hub._bucketsr   huggingface_hub.errorsr   utilsr   r   
_cli_utilsr   _outputr   
get_loggerr    r   rR   r9   r   rL   r/   r   r*   r$   boolr>   rS   rn   rg   r7   r:   compiler   rQ   ro   rk   r8   rq   ry   rw   rx   r   r_   rc   r   r   r   r   r   r   r'   r(   <module>r     s   T  	    $ * '  2 / + 2 "  
		H	% / % 
 4 KL  $# # # $  U# U Ud Ut U^S ^D ^ ^Z^ ^rd rsTz rUX r]abq]r r*T*:%; 2
X+; 
Xt 
X\` 
Xmq 
X JJ<=  	'
'' vt|$' 	'
 
'Td38n d+;&<  P`cgPg s s QT Qd Q
"2 
tJ7G 
H&6 HtJ?O H^b Hgk H0	D 	d 	t 	4: $t* (...238H3H.I.[^..F 

#OP U"JR4 RDJ R
:$ :4 :r'   