
    i<              	          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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r\R+                  S	5      u  rrS
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\" SS9 " S S5      5       r S\!\   4S jr"S\#S\4S jr$SHS\S\S\%S\4S jjr& SIS \!\   S\#S-  S\!\    4S! jjr' SIS \!\   S\#S-  S\!\    4S" jjr(S#\S\)\S-  \#S-  4   4S$ jr*S#\S%\SS4S& jr+S\,\#\4   4S' jr-S(\!\   S\#S\S-  4S) jr.S*\#S\#4S+ jr/S\S,\SS4S- jr0S#\SS4S. jr1S/\#S0\#S,\SS4S1 jr2S2\3S0\#S,\SS4S3 jr4S4\#S5\)\#S64   S\)\#S64   S-  4S7 jr5S8\S9\SS4S: jr6S \!\   S\!\   4S; jr7S#\S<\,\#\4   S\ 4S= jr8S>\ S\ 4S? jr9S@\!\    S\#S-  S\!\    4SA jr:S\S\#4SB jr;SC\,\#\4   S\4SD jr<SISE\#SF\,\#\4   S-  S\4SG jjr=g)JzNInternal helpers for Hugging Face marketplace skill installation and upgrades.    N)	dataclassreplace)PathPurePosixPath)AnyLiteral)CLIError)get_sessionzhuggingface/skills/mainz.claude-plugin/marketplace.json
   z.hf-skill-manifest.json   )
up_to_dateupdate_availableupdated	unmanagedinvalid_metadatasource_unreachableT)frozenc                   *    \ rS rSr% \\S'   \\S'   Srg)MarketplaceSkill#   name	repo_path N)__name__
__module____qualname____firstlineno__str__annotations____static_attributes__r       P/home/rurouni/.local/lib/python3.13/site-packages/huggingface_hub/cli/_skills.pyr   r   #   s    
INr#   r   c                   *    \ rS rSr% \\S'   \\S'   Srg)InstalledSkillManifest)   schema_versioninstalled_revisionr   N)r   r   r   r   intr!   r    r"   r   r#   r$   r&   r&   )   s    r#   r&   c                   p    \ rS rSr% \\S'   \\S'   \\S'   Sr\S-  \S'   Sr	\S-  \S'   Sr
\S-  \S'   S	rg)
SkillUpdateInfo/   r   	skill_dirstatusNdetailcurrent_revisionavailable_revisionr   )r   r   r   r   r    r!   r   SkillUpdateStatusr0   r1   r2   r"   r   r#   r$   r,   r,   /   s>    
IOFC$J#'cDj'%)d
)r#   r,   returnc            	         [        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                  [        U[        U5      S95        M     U$ )z6Load skills from the default Hugging Face marketplace.pluginszAInvalid marketplace payload: expected a top-level 'plugins' list.r   source)r   r   )
_load_marketplace_payloadget
isinstancelistr	   dictr    appendr   _normalize_repo_path)payloadr6   skillspluginr   r7   s         r$   load_marketplace_skillsrB   9   s    ')Gkk)$Ggt$$Z[[%'F&$''zz&!H%$$$Jvs,C,C&D<PQW<XYZ  Mr#   selectorc                 `    [        [        5       U 5      nUc  [        SU  S[         S35      eU$ )z$Resolve a marketplace skill by name.Skill 'z' not found in zD. Try `hf skills add` to install `hf-cli` or use a known skill name.)_select_marketplace_skillrB   r	   DEFAULT_SKILLS_REPO_ID)rC   selecteds     r$   get_marketplace_skillrI   L   sH    ()@)BHMHhZ/E.F GQ Q
 	
 Or#   skilldestination_rootforcec                 Z   UR                  5       R                  5       nUR                  SSS9  XR                  -  nUR	                  5       (       a  U(       d  [        SU 35      eUR	                  5       (       aY  [        R                  " USUR                   S3S9 n[        U5      nXSR                  -  n[        XS9  [        X6S9  S	S	S	5        U$  [        XS9  U$ ! , (       d  f       U$ = f! [         a-    UR	                  5       (       a  [        R                  " U5        e f = f)
z:Install a marketplace skill into a local skills directory.Tparentsexist_okzSkill already exists: .z	.install-)dirprefix)rJ   install_dir)existing_dir
staged_dirN)
expanduserresolvemkdirr   existsFileExistsErrortempfileTemporaryDirectoryr   _populate_install_dir_atomic_replace_directory	Exceptionshutilrmtree)rJ   rK   rL   rT   tmp_dir_strtmp_dirrV   s          r$   install_marketplace_skillre   W   s   '224<<>4$7"ZZ/KE 6{mDEE((-=+JZJZI[[dFefju;'G #3#33J!F%;V	 g
 EC
  gf
   MM+&s   ,C!	C3 !
C037D*rootsc                    [        5        Vs0 s H  o"R                  R                  5       U_M     nn[        U 5       Vs/ s H  n[	        XC5      PM     nn[        XQ5      nUb  U(       d  [        SU S35      eU$ s  snf s  snf )z:Check managed skill installs for newer upstream revisions.zNo installed skills match ''.)rB   r   lower_iter_unique_skill_dirs_evaluate_update_filter_updatesr	   )rf   rC   rJ   marketplace_skillsr.   updatesfiltereds          r$   check_for_updatesrp   q   s    
 BYAZ[AZ****,e3AZ[PghmPnoPn9	>PnGow1HH4XJbABBO \os   $A= Bc                 f    [        X5      n/ nU H  nUR                  [        U5      5        M     U$ )zCUpgrade managed skills in place when the upstream revision changes.)rp   r=   _apply_single_update)rf   rC   rn   resultsupdates        r$   apply_updatesru   ~   s4    
  0G%'G+F34 Nr#   r.   c                 T   U [         -  nUR                  5       (       d  g [        R                  " UR	                  SS95      n[        U[        5      (       d  g [        U5      S4$ ! [
         a  nSSU 34s SnA$ SnAff = f! [         a  nS[        U5      4s SnA$ SnAff = f)z5Read local skill metadata written by `hf skills add`.)NNutf-8encodingNzinvalid json: )Nzmetadata root must be an object)SKILL_MANIFEST_FILENAMErZ   jsonloads	read_textr`   r:   r<   _parse_installed_skill_manifest
ValueErrorr    )r.   manifest_pathr?   excs       r$   read_installed_skill_manifestr      s     77M!!,**]44g4FG gt$$6.w7==  ,~cU+++,  SX~s;   #A( B (
B2A>8B>B
B'B"B'"B'manifestc                     UR                   UR                  S.nU [        -  R                  [        R
                  " USSS9S-   SS9  g )Nr(   r)      T)indent	sort_keys
rw   rx   )r(   r)   rz   
write_textr{   dumps)r.   r   r?   s      r$   write_installed_skill_manifestr      sN    "11&99G ((44

715< 5 r#   c                  p   [        S[         3S[        0S9n  U R                  5       n[        U[        5      (       d  [        S5      eUR                  S5      nUR                  S5      n[        U[        5      (       a  US	:w  a  [        S
5      e [        R                  " U5      R                  S5      n[        R                  " U5      n[        U[        5      (       d  [        S5      eU$ ! [         a  n[        S[         SU 35      UeS nAff = f! [         a  n[        SU 35      UeS nAff = f)Nz	contents/refparamsz3Failed to decode GitHub API response for 'contents/z': z5Invalid marketplace response: expected a JSON object.contentry   base64z=Invalid marketplace payload: expected base64-encoded content.rw   z&Failed to decode marketplace payload: z4Invalid marketplace payload: expected a JSON object.)_fetch_from_skills_repoMARKETPLACE_PATHDEFAULT_SKILLS_REFr{   r`   r	   r:   r<   r9   r    r   	b64decodedecoder|   )responser?   r   r   ry   decodedparseds          r$   r8   r8      s5   &
$%&)*Hr--/ gt$$NOOkk)$G{{:&Hgs##x8';VWWP""7+227;G$ fd##MNNM%  rLM]L^^abeafghnqqr  P?uEFCOPs/   C/ ;D /
D9DD
D5!D00D5r@   c                     UR                  5       R                  5       nU  H%  nUR                  R                  5       U:X  d  M#  Us  $    g Nstripri   r   )r@   rC   selector_lowerrJ   s       r$   rF   rF      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   r   z-Invalid marketplace entry: empty source path.)r   
startswithr	   )r   
normalizeds     r$   r>   r>      sa    J



%
%^
 


%
%!!#&JFGGr#   rT   c                     [        U 5      nUR                  SSS9  [        UU R                  US9  [	        U5        [        U[        [        US95        g )NTrN   )revisionsource_pathrT   r   )_resolve_available_revisionrY   _extract_remote_github_pathr   _validate_installed_skill_dirr   r&   SKILL_MANIFEST_SCHEMA_VERSION)rJ   rT   r)   s      r$   r^   r^      sX    4U;dT2#OO
 "+."81	
r#   c                 T    U S-  nUR                  5       (       d  [        SU 35      eg )NzSKILL.mdz%Installed skill is missing SKILL.md: )is_fileRuntimeError)r.   
skill_files     r$   r   r      s3    Z'JB:,OPP  r#   r   r   c                 H    [        SU  35      R                  n[        X1US9  g )Nztarball/)r   rT   )r   r   _extract_tar_subpath)r   r   rT   	tar_bytess       r$   r   r      s#    '(8*(=>FFIUr#   r   c                     [        U5      R                  n[        R                  " [        R
                  " U 5      SS9 nUR                  5       nSnU H  n[        UR                  US9nUc  M  U(       d  SnM'  Sn[        U6 n	SU	R                  ;   a  [        SU S	35      eX)-  n
UR                  5       (       a  U
R                  SSS
9  M{  UR                  5       (       d  M  U
R                  R                  SSS
9  UR                  U5      nUc  [        SUR                   S	35      eU
R!                  UR#                  5       5        M     SSS5        W(       d  [%        SU S35      eg! , (       d  f       N%= f)zExtract a skill subdirectory from a tar archive.

GitHub tarballs include a leading `<repo>-<revision>/` directory. The helper also
accepts archives that start directly at `skills/<name>/...` to keep tests simple.
zr:*)fileobjmodeF)member_namesource_partsNTz..z"Invalid path found in archive for rQ   rN   zFailed to extract zPath 'z' not found in source archive.)r   partstarfileopenioBytesIO
getmembers_member_relative_partsr   r   r   isdirrY   isfileparentextractfilewrite_bytesreadFileNotFoundError)r   r   rT   r   archivemembersmatchedmemberrelative_partsrelative_pathdestination_path	extracteds               r$   r   r      sf    !-33L	bjj3%	@G$$&F3ZfgN%!G .1M}***"%G}TU#VWW*:||~~ &&td&C==??##))$)F++F3I "%7}A#FGG(()9:+  
A2 &5S TUU 3 
A	@s   DE//
E=r   r   .c                    [        U 5      R                  n[        US [        U5       5      U:X  a  U[        U5      S  $ [        U5      [        U5      :  a/  [        USS[        U5      -    5      U:X  a  US[        U5      -   S  $ g )Nr   )r   r   tuplelen)r   r   
path_partss      r$   r   r     s    {+11JZ+#l+,-=#l+-..
:\**uZALHYDY5Z/[_k/k!c,//122r#   rU   rV   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   renamera   rb   r`   rZ   )rU   rV   
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$ )NrQ   )setrW   rX   is_dirsortediterdirr   r   
is_symlinkaddr=   )rf   seen
discoveredrootchildresolveds         r$   rj   rj   *  s    eDJ ((*{{}}DLLN+Ezz$$S))<<>>%*:*:*<*<}}Hx'8'8HHXh' ,	  r#   rm   c           	         [        U R                  U SS9n[        U 5      u  p4Uc  [        X$(       a  SUS9$ SUS9$ UR	                  U R                  R                  5       5      nUc+  [        USSU R                   S[         S3UR                  S	9$ UR                  n [        U5      nXv:X  a  S
OSn	[        UU	U	S:X  a  SOS UUS9$ ! [         a  n[        US[        U5      US	9s S nA$ S nAff = f)Nr   )r   r.   r/   r   r/   r0   r   rE   z' is no longer available in rQ   )r/   r0   r1   r   r   zupdate available)r/   r0   r1   r2   )r,   r   r   r   r9   ri   rG   r)   r   r`   r    )
r.   rm   baser   errorrJ   r1   r2   r   r/   s
             r$   rk   rk   >  s   	)KXD3I>OHt%$6Y^__[Y^__""9>>#7#7#9:E}'Y^^,,HI_H``ab%88	
 	
  22n8? 1C0V\nF%+/A%A!t)- 	  nt$8S\lmmns    C	 	
C2C-'C2-C2rt   c                    U R                   S:w  a  U $  [        U R                  R                  5      n[	        XR                  R
                  SS9  [        U SSS9$ ! [         a  n[        U S[        U5      S9s S nA$ S nAff = f)Nr   T)rL   r   r   r   )	r/   rI   r.   r   re   r   r`   r   r    )rt   rJ   r   s      r$   rr   rr   ^  s    }}**M%f&6&6&;&;<!%)9)9)@)@M 6)I>>  Mv&:3s8LLMs   =A 
B&A?9B?Brn   c                     Uc  U $ UR                  5       R                  5       nU  Vs/ s H$  o3R                  R                  5       U:X  d  M"  UPM&     sn$ s  snf r   r   )rn   rC   r   rt   s       r$   rl   rl   k  sL    ^^%++-N!(RvKK,=,=,?>,QFRRRs   !AAc                    [        S[        U R                  SS.S9n UR                  5       n[        U[        5      (       a  U(       d  [        SU R                   S35      eUS   n[        U[        5      (       d  [        S	U R                   S35      eUR                  S
5      n[        U[        5      (       a  U(       d  [        S	U R                   S35      eU$ ! [         a  n[        SU 35      UeS nAff = f)Ncommitsr   )shar   per_pager   z4Failed to decode GitHub API response for 'commits': z2Unable to resolve the current revision for skill 'rh   r   z/Invalid commit response while resolving skill 'r   )r   r   r   r{   r`   r	   r:   r;   r   r<   r9   r    )rJ   r   r?   r   latestr   s         r$   r   r   r  s    &)5??PQRH^--/ gt$$GKEJJ<WYZ[[QZFfd##HTVWXXzz% Hh$$HHTVWXXO  ^McUSTZ]]^s   C 
C<(C77C<r?   c                     U R                  S5      [        :w  a  [        SU R                  S5       35      eU R                  S5      n[        U[        5      (       a  U(       d  [        S5      e[        [        US9$ )Nr(   zunsupported schema_version: r)   zmissing installed_revisionr   )r9   r   r   r:   r    r&   )r?   r)   s     r$   r~   r~     ss    {{#$(EE7DT8U7VWXX %9:(#..6H566!4- r#   endpointr   c           	         S[          S[         SU R                  S5       3n [        5       R	                  UUSS0S[
        S9nUR                  5         U$ ! [         a  n[        SU  S[         S	U 35      UeS nAff = f)
Nzhttps://api.github.com/repos/r   Acceptzapplication/vnd.github+jsonT)r   headersfollow_redirectstimeoutzFailed to fetch 'z' from z: )
DEFAULT_SKILLS_REPO_OWNERDEFAULT_SKILLS_REPO_NAMElstripr
   r9   GITHUB_API_TIMEOUTraise_for_statusr`   r	   rG   )r   r   urlr   r   s        r$   r   r     s    )*C)DAF^E__`aiapapqtau`v
wC
f=$$<=!& % 
 	!!# O  f*8*G<R;SSUVYUZ[\beefs   1A 
A?!A::A?)Fr   )>__doc__r   r   r{   ra   r   r\   dataclassesr   r   pathlibr   r   typingr   r   huggingface_hub.errorsr	   huggingface_hub.utilsr
   rG   splitr   r   r   r   r   rz   r   r3   r   r&   r,   r;   rB   r    rI   boolre   rp   ru   r   r   r   r<   r8   rF   r>   r^   r   r   bytesr   r   r_   rj   rk   rr   rl   r   r~   r   r   r#   r$   <module>r     s   T  	     * '  + - . 6L6R6RSV6W 3 3 4  3  !   $  
 $  
 $* * *&6!7 &C ,< %5  VZ gk 8  
:
Dj
 
/
  	:	Dj	 
/	T e<RUY<Y[^ae[e<e6f "d >T Y] 4S> 8d+;&<  P`cgPg s s !1   $QT Qd QV# VC Vd VW[ V
!VE !V !V$ !VSW !VH 5c? uUXZ]U]aeOe 	D 	d 	t 	4: $t* ( $sDT?T:U Zi @
? 
?_ 
?ST/2 ScDj STRaMb S'7 C ,T#s(^ @V c 4S>D3H TW r#   