
    iV                     |   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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Jr  SSKrSSKJrJrJr  SSKJrJrJr  S	S
KJr  S	SKJr  Sr\" S5      r Sr!Sr"\" \"S9r#Sr$Sr%Sr&Sr'\RP                  " \)5      r*\
 " S S5      5       r+\#RY                  S/ SQS9 SYS\RZ                  S\\.\R^                  " SS94   S\\0\Rb                  " SS S94   S!S4S" jj5       r2\#RY                  S#S$SS$S%.S&S'/S(9S\RZ                  S)\\.\R^                  " S*S94   S!S4S+ j5       r3\#RY                  S,S-/S9SZS. j5       r4\#RY                  S/S0/S9SZS1 j5       r5\#RY                  S2S3/S9S)\\.\R^                  " S4S94   S!S4S5 j5       r6S!\7\+   4S6 jr8S!\7\9\.\.4      4S7 jr:S8\7\.   S9\;\.   S!\<S-  4S: jr=S;\.S!\S-  4S< jr>SS=.S>\.S?\.S;\.S@\SA\.SB\.S-  S!\+4SC jjr?S>\.S?\.SA\.S;\.S!\@4
SD jrAS>\.S?\.S;\.S@\SE\@S!\+4SF jrBS>\.S?\.S;\.S@\SA\.S!\+4SG jrCS>\.S?\.SA\.SH\.S-  S!\.S-  4
SI jrDS!\4SJ jrES;\.S!\4SK jrFS>\.S?\.S!\9\.\.S-  4   4SL jrGS;\.S!\.4SM jrHS;\.S!\4SN jrISO\S!\4SP jrJSO\S;\.S!\4SQ jrK\R                  " SR5      rMS;\.SS\.S!\.4ST jrNS\.S!\9\.\.\.4   4SU jrOS)\.S!\.4SV jrPSW\S8\7\.   S!\<4SX jrQg)[z0Contains helper utilities for hf CLI extensions.    N)asdict	dataclass)datetimetimezone)Path)	AnnotatedLiteral)CLIErrorCLIExtensionInstallErrorConfirmationError)
StatusLineget_sessionlogging   )typer_factory)outhuggingfacez~/.local/share/hf/extensionszmanifest.jsonzManage hf CLI extensions.

Security Warning: extensions are third-party executables or Python packages. Install only from sources you trust.)helpmainzhf-extension
   i,  c                       \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \S   \S	'   \\S
'   \\S'   Sr\S-  \S'   \	S\
SS 4S j5       rS\
SS4S jrSrg)ExtensionManifest6   ownerreporepo_id
short_nameexecutable_nameexecutable_path)binarypythontypeinstalled_atsourceNdescriptionpathreturnc                     U[         -  nUR                  5       (       d  [        SU S35      e[        R                  " UR                  5       5      n[        R                  " US   5      US'   [        S0 UD6$ )NzManifest file not found at z". Your extension may be corrupted.r#    )	MANIFEST_FILENAMEis_filer
   jsonloads	read_textr   fromisoformatr   )clsr&   manifest_pathdatas       S/home/rurouni/.local/lib/python3.13/site-packages/huggingface_hub/cli/extensions.pyloadExtensionManifest.loadC   sq    00$$&&8Gijkkzz-1134'55d>6JK^ (4((    c                     U[         -  nUR                  R                  SSS9  [        U 5      nU R                  R                  5       US'   UR                  [        R                  " USSS95        g )NTparentsexist_okr#      )indent	sort_keys)	r*   parentmkdirr   r#   	isoformat
write_textr,   dumps)selfr&   r1   r2   s       r3   saveExtensionManifest.saveL   sc    00""4$"?d|#00::<^  Dd!KLr6   r)   )__name__
__module____qualname____firstlineno__str__annotations__r	   r   r%   classmethodr   r4   rD   __static_attributes__r)   r6   r3   r   r   6   s~    J
ILO
$
%%K"Kt") )!4 ) )M M$ Mr6   r   install)zhf extensions install hf-claudez-hf extensions install hanouticelina/hf-claudez(hf extensions install alvarobartt/hf-mem)examplesFctxr   z:GitHub extension repository in `[OWNER/]hf-<name>` format.forcez--forcezOverwrite if already installed.r'   c           	         [        U5      u  p4nU R                  5       n[        [        UR                  S0 5      R                  5       5      nXW;   a  [        SU SU S35      e[        U5      nUR                  5       n	U	(       a  U(       d  [        SU S35      e[        X4S9u  pU	(       a  [        R                  " U5        [        UUUUU
US9nUR                  R                  5       n[        U S	U S
U S35        [        SU 35        g)zInstall an extension from a public GitHub repository.

Security warning: this installs a third-party executable or Python package.
Install only from sources you trust.
commandszCannot install extension 'z,' because it conflicts with an existing `hf z
` command.Extension 'z1' is already installed. Use --force to overwrite.)r   	repo_name)r   rU   r   extension_dirbranchr%   z' extension installed successfully from /.zRun it with: hf N)_normalize_repo_id	find_rootsetgetattrcommandkeysr
   _get_extension_direxists_resolve_github_repo_infoshutilrmtree_install_extension_from_githubr"   
capitalizeprint)rP   r   rQ   r   rU   r   root_ctxreserved_commandsrV   extension_existsrW   r%   manifestext_types                 r3   extension_installrm   T   s   * $6g#> Ej}}HGH$4$4j"EJJLM&(4`ak`llvw
 	
 'z2M$++-ZL0abcc3%UFm$-#H }}'')H	XJ=eWAi[PQ
RS	ZL
)*r6   execT)allow_extra_argsallow_interspersed_argsignore_unknown_optionsz#hf extensions exec claude -- --helpz/hf extensions exec claude --model zai-org/GLM-5)context_settingsrO   namez.Extension name (with or without `hf-` prefix).c                     [        U5      n[        U5      nUR                  5       (       d  [        SU S35      e[	        U[        U R                  5      S9n[        R                  " US9e)zExecute an installed extension.rT   ' is not installed.r   args)code)	_normalize_extension_name"_resolve_installed_executable_pathr+   r
   _execute_extension_binarylistrw   typerExit)rP   rs   r   r   	exit_codes        r3   extension_execr      sd      +40J8DO""$$ZL0CDEE)/PTUXU]U]P^_I
**)
$$r6   z	list | lszhf extensions listc            	      $   [        5        V s/ s Ha  n SU R                   3[        U R                  5      [        U R                  5      U R
                  R                  S5      U R                  S.PMc     nn [        R                  " USS9  gs  sn f )z"List installed extension commands.zhf z%Y-%m-%d)r^   r$   r"   	installedr%   r^   )id_keyN)
_list_installed_extensionsr   rJ   r   r"   r#   strftimer%   r   table)rk   rowss     r3   extension_listr      s     34	 5H X0012(**+&!..77
C#//	
 5 	 	 IId9%	s   A(Bsearchzhf extensions searchc            	      $   [        5       R                  SS[         3SSSS.S[        S9n U R	                  5         U R                  5       n[        5        Vs1 s H  o"R                  iM     nn/ nUR                  S	/ 5       Hn  nUS
   nUR                  S5      (       a  USS OUnUR                  UUS   UR                  SS5      UR                  S5      =(       d    SXs;   a  SOSS.5        Mp     [        R                  " USSS0S9  gs  snf )zISearch extensions available on GitHub (tagged with 'hf-extension' topic).z*https://api.github.com/search/repositoriesztopic:starsdescd   )qsortorderper_pageT)paramsfollow_redirectstimeoutitemsrs   hf-   N	full_namestargazers_countr   r%    yes)rs   r   r   r%   r   r   right)r   
alignments)r   get_EXTENSIONS_GITHUB_TOPIC_EXTENSIONS_DOWNLOAD_TIMEOUTraise_for_statusr,   r   r   
startswithappendr   r   )responser2   mr   r   r   rU   r   s           r3   extension_searchr      s    }  4678'TZhkl,	 ! H ==?D'A'CD'C!'CIDD"%L	&/&:&:5&A&AYqr]y
"[)"4a8#xx6<"&0&=U2	
 & IId6w.@A! Es   Dzremove | rmzhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     [        U 5      n[        U5      nUR                  5       (       d  [        SU S35      e[        R
                  " U5        [        SU S35        g)zRemove an installed extension.rT   ru   zRemoved extension ''.N)ry   r`   is_dirr
   rc   rd   rg   )rs   r   rV   s      r3   extension_remover      sZ     +40J&z2M!!ZL0CDEE
MM- 	
|2
./r6   c                     [         R                  5       n U R                  5       (       d  / $ / n[        U R	                  5       5       H_  nUR                  5       (       a   UR
                  R                  S5      (       d  M:   UR                  [        R                  U5      5        Ma     U$ ! [         a0  n[        R                  SUR
                   SU 35         SnAM  SnAff = f)zPReturn manifests for all validly-installed extensions, sorted by directory name.r   z'Failed to load manifest for extension '': N)EXTENSIONS_ROOT
expanduserr   sortediterdirrs   r   r   r   r4   	Exceptionloggerdebug)root_dir	manifestsrV   es       r3   r   r      s    ))+H??	I 0 0 23##%%]-?-?-J-J5-Q-Q	.33MBC	 4   	LLB=CUCUBVVYZ[Y\]^	s   $B,,
C&6%C!!C&c                      / n [        5        HP  nSUR                   S3nUR                  b  UR                   SU 3OUnU R                  UR                  U45        MR     U $ )Nz[extension ] )r   r   r%   r   r   )entriesrk   tag	help_texts       r3   "list_installed_extensions_for_helpr      sl    G.0H,,-Q/7?7K7K7Wx++,AcU3]`	++Y78 1 Nr6   rw   known_commandsc                    U (       d  g U S   nUR                  S5      (       a  g U VVs1 s H*  o3R                  S5        H  oDR                  5       iM     M,     nnnX%;   a  g UR                  S5      (       a  USS  OUnU(       d  g S n [        U5      nUb  UR                  5       (       d  g [        U[        U SS  5      S9$ s  snnf ! [         a    [        U5      n NLf = f)Nr   -|r   r   r   rv   )	r   splitstriprz   r    _auto_install_official_extensionr+   r{   r|   )rw   r   command_namecmda	all_knownr   r   s           r3   $dispatch_unknown_top_level_extensionr      s    7Ls##&4MnsiinnnIM %1%<%<U%C%Cab!J#'OG<ZH o&=&=&?&?$_4PTUVUWPX>ZZ# N  G::FGs   1CC C$#C$r   c           	      T   [         SU  3p! [        U 5      nUR                  5       (       a  g [	        5       R                  SU SU 3S[        S9nUR                  S:X  a  gUR                  5         UR                  5       S   n [        R                  " S	U  S
U SU S35         [        XXUS9n[        UR                  5      R!                  5       $ ! [         a     gf = f! [         a     gf = f! [         a     gf = f! [         a    ["        R$                  " USS9   gf = f)zKTry to auto-install huggingface/hf-<name>. Returns executable path or None.r   Nhttps://api.github.com/repos/rX   Tr   r   i  default_branch'z)' is an official Hugging Face extension (z). Install it?r   rU   r   rV   rW   ignore_errors)DEFAULT_EXTENSION_OWNERr`   r   ra   r   r   r   status_coder   r,   r   confirmr   re   r   r   r   rc   rd   )r   r   rU   rV   r   rW   rk   s          r3   r   r     sN   .#j\0B9*:6 =$$+E7!I;?!0 % 

 3&!!#!12a
|#LUGSTU^T__mno1io
 H,,-88::1        m48sL   C 3C% "#C%  C5 '-D 
C"!C"%
C21C25
DDD'&D')r%   r   rU   rV   rW   r%   c                      [        XXBS9nUb  [        XX#US9nO[        XX#US9n[	        XXES9Ul        UR                  U5        U$ ! [         a    Sn NJf = f)zLFetch, install (binary or Python), and save manifest for a GitHub extension.)r   rU   rW   r   N)r   rU   r   rV   r    r   )r   rU   rW   candidate_description)_fetch_remote_binaryr   _install_binary_extension_install_python_extension_try_fetch_remote_descriptionr%   rD   )r   rU   r   rV   rW   r%   r    rk   s           r3   re   re   >  s~    %Evm ,io
 -io
 9H MM- O  s   
A AAc                     [        U5      nSU  SU SU SU 3n[        5       R                  US[        S9nUR	                  5         UR
                  $ )N"https://raw.githubusercontent.com/rX   /refs/heads/Tr   )_get_executable_namer   r   r   r   content)r   rU   rW   r   r   raw_urlr   s          r3   r   r   [  sa    *:6O25'9+\RXQYYZ[jZklG}  4Ie fHr6   r    c                 F   [        U5      nUR                  SSS9  X5-  nUR                  U5        [        R                  S:w  a  [        R
                  " US5        [        U UU  SU 3UU[        U5      S[        R                  " [        R                  5      SU  SU 3S	9	$ )
NTFr8   nti  rX   r    https://github.com/	r   r   r   r   r   r   r"   r#   r$   )r   r?   write_bytesosrs   chmodr   rJ   r   nowr   utc)r   rU   r   rV   r    r   r   s          r3   r   r   c  s     +:6Ou5#5O' 
ww$
%( '9+&'O,\\(,,/$UG1YK8
 
r6   c                    SU  SU SU S3nUS-  nSn[        5       n UR                  SU 35        UR                  5       (       a  [        R                  " USS	9  UR                  SSS
9  [        R                  " S5      n	[        U5      n
U	(       as  [        R                  " U	S[        U5      /SS9  UR                  SU 35        UR                  SU 35        [        R                  " U	SSS[        U
5      U/S[        S9  O~[        R                  " SS9R                  [        U5      5        UR                  SU 35        UR                  SU 35        [        R                  " [        U
5      SSSSSU/S[        S9  UR                  SU 35        [!        U5      n[#        Xb5      nUR%                  5       (       d  ['        SU  SU SU S35      e[)        U UU  SU 3UU[        UR+                  5       5      S[,        R.                  " [0        R2                  5      SU  SU 3S9	nSnUU(       d  [        R                  " USS	9  $ $ ! [&         a    e [        R4                   a  n[7        S[         SU  SU S35      UeS nAf[        R8                   a%  n[7        S U  SU S!UR:                   S"35      UeS nAf[<         a  n[7        S#U  SU S$U 35      UeS nAff = f! U(       d  [        R                  " USS	9  f f = f)%Nr   rX   z/archive/refs/heads/z.zipvenvFz Creating virtual environment in Tr   r8   uv)checkzVirtual environment created in zInstalling package from piprN   z--python)r   r   )with_pipz-mz--disable-pip-version-checkz
--no-inputzPackage installed from zInstalled package from 'z/' does not expose the required console script 'r   r!   r   zPip install timed out after zs for 'z$'. See pip output above for details.z$Failed to install pip package from 'z' (exit code z$). See pip output above for details.z%Failed to set up pip extension from 'r   )r   updatera   rc   rd   r?   which_get_venv_python_path
subprocessrunrJ   done_EXTENSIONS_PIP_INSTALL_TIMEOUTr   
EnvBuildercreater   #_get_venv_extension_executable_pathr+   r
   r   resolver   r   r   r   TimeoutExpiredr   CalledProcessError
returncoder   )r   rU   r   rV   rW   
source_urlvenv_dirr   statusuv_pathvenv_pythonr   venv_executablerk   r   s                  r3   r   r   ~  sM    'ugQyk9MfXUYZJv%HI\FK=8
CD!!MM-t<D59,,t$+H5NNGVS];4HKK9(DEMM4ZLABNN%JK8H*U7 OOT*11#h-@KK9(DEMM4ZLABNN$1  7 	-j\:;.z:=hS&&((*5'9+ >#$B( 
 %gQyk*!+ 7 7 9:!hll3(q<

 	  MM-t<   $$ &*+J*K7SXRYYZ[dZe f0 0
 	 (( &25'9+]STS_S_R` a0 0
 	  q&)NugUVW`Vaadefdg'hioppq MM-t< s<   HI K&.JK& J??K&K!!K&&K) )Lr   c           
          [        5       R                  SU  SU SU S[         3SS9nUR                  5         UR	                  5       nUR                  S5      n[        U[        5      (       a  U$   [        5       R                  SU  SU SU S3SS9nUR                  5         UR                  R                  5        H^  nUR                  5       nUR                  S5      (       d  M+  UR                  S5      u    pU	R                  5       R                  S	5      s  $    U$ ! [         a     Nf = f! [         a     U$ f = f)
zuTry to fetch project description either from:
- manifest.json
- pyproject.toml

Only best effort, no error handling.
r   rX   r   T)r   r%   z/pyproject.toml=z"')r   r   r*   r   r,   
isinstancerJ   r   text
splitlinesr   r   	partition)
r   rU   rW   r   r   r2   r%   line_values
             r3   r   r     sZ   =$$0q<PVxWXYjXkl! % 
 	!!#}}hh}-k3'' (=$$0q<PVxWfg! % 
 	!!# MM,,.D::<D}--"nnS11{{}**511	 / ! +  "   ! 	s1   A/D$ 4A3D4 +4D4  D4 $
D10D14
EEc                  N    [         R                  5       n U R                  SSS9  U $ )NTr8   )r   r   r?   )r   s    r3   _get_extensions_rootr     s%    ))+HNN4$N/Or6   c                     [        X S9n[        5       R                  5       nUSU 3-  R                  5       nX#R                  ;  a  [	        SU  S35      eU$ )Noriginal_inputr   Invalid extension name 'r   )_validate_extension_short_namer  r   r9   r
   )r   	safe_nameroottargets       r3   r`   r`     s[    .zUI!))+Ds9+&&//1F>>!1*R@AAMr6   c                      [        5       R                  SU  SU 3S[        S9nUR                  5         UR	                  5       nUS   UR                  S5      4$ ! [
         a    [        S 4s $ f = f)Nr   rX   Tr   r   r%   )r   r   r   r   r,   r   _EXTENSIONS_DEFAULT_BRANCH)r   rU   r   r2   s       r3   rb   rb     s    
0=$$+E7!I;?!0 % 

 	!!#}}$%txx'>>> 0)4//0s   AA A0/A0c                 B    SU  3n[         R                  S:X  a  US-  nU$ )Nr   r   z.exer   rs   )r   rs   s     r3   r   r     s'    D	ww$Kr6   c                     [        U 5      n[        R                  U5      n[        UR                  5      R                  5       $ N)r`   r   r4   r   r   r   )r   rV   rk   s      r3   rz   rz   $  s6    &z2M %%m4H(()4466r6   r   c                 J    [         R                  S:X  a  U S-  S-  $ U S-  S-  $ )Nr   Scriptsz
python.exebinr!   r  )r   s    r3   r   r   *  s-    	ww$)#l22eh&&r6   c                 `    [        U5      n[        R                  S:X  a  U S-  U-  $ U S-  U-  $ )Nr   r  r  )r   r   rs   )r   r   r   s      r3   r   r   0  s7    *:6O	ww$)#o55eo--r6   z^[A-Za-z0-9][A-Za-z0-9._-]*$r  c                &  ^ U R                  5       mT(       d  [        S5      e[        U4S jS 5       5      (       a  [        SU S35      eST;   d  ST;   a  [        SU S35      e[        R	                  T5      (       d  [        SU S35      eT$ )	NExtension name cannot be empty.c              3   ,   >#    U  H	  oT;   v   M     g 7fr  r)   ).0seprs   s     r3   	<genexpr>1_validate_extension_short_name.<locals>.<genexpr>>  s     
.+3$;+s   )rX   \r  r   z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)r   r
   any_ALLOWED_EXTENSION_NAME	fullmatch)r   r  rs   s     @r3   r  r  :  s    D899

.+
...1.1ADEEt|sd{1.1ADEE",,T22&~&66op
 	
 Kr6   c                 t   SU ;   a  [        S5      eU R                  S5      n[        U5      S:X  a  [        nUS   nO3[        U5      S:X  a  [	        U5      (       a  Uu  p#O[        SU  S35      eUR                  S	5      (       d  [        S
U S35      eUSS  nU(       d  [        S5      e[        X@S9  X#U4$ )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.rX   r   r   r;   z%Expected `[OWNER/]REPO` format, got 'r   r   z6Extension repository name must start with 'hf-', got 'r   z(Invalid extension repository name 'hf-'.r  )r
   r   lenr   allr   r  )r   partsr   rU   r   s        r3   rZ   rZ   I  s    ^__MM#E
5zQ'!H		UqSZZ y>wirJKK&&OPY{Z\]^^12JABB":FZ''r6   c                     U R                  5       nU(       d  [        S5      eUR                  S5      (       a  USS  OUn[        X S9$ )Nr"  r   r   r  )r   r
   r   r  )rs   	candidate
normalizeds      r3   ry   ry   a  sD    

I899"+"6"6u"="=129J)*JJr6   r   c                 &    [         R                  " [        U 5      /U-   5      $ ! [         aa  n[        R
                  S:X  d  UR                  [        R                  :w  a  e [         R                  " S[        U 5      /U-   5      s S nA$ S nAff = f)Nr   sh)r   callrJ   OSErrorr   rs   errnoENOEXEC)r   rw   r   s      r3   r{   r{   i  sq    DO 45<== D77d?agg6c/&:;dBCCDs   "% 
BABBB)F)r'   N)R__doc__r8  r,   r   rerc   r   r   dataclassesr   r   r   r   pathlibr   typingr   r	   r}   huggingface_hub.errorsr
   r   r   huggingface_hub.utilsr   r   r   
_cli_utilsr   _outputr   r   r   r*   EXTENSIONS_HELPextensions_clir  r   r   r   
get_loggerrF   r   r   r^   ContextrJ   ArgumentboolOptionrm   r   r   r   r   r|   r   tupler   r\   intr   r   re   bytesr   r   r   r   r  r`   rb   r   rz   r   r   compiler+  r  rZ   ry   r{   r)   r6   r3   <module>rN     s   7   	 	    ) '  %  X X B B %  ( 56# + 
 O4# ) ! "% 			H	% M M M:    _d)+	)+XY	[)+ T5<<	8YZZ[)+ 
)+)+X 
*.5lpq-9  %	%
LM	O% 
%%$ /C.DE& F& ,B+CDB EB< 1N0OP0
VW	Y0
 
0 Q0(D):$; "DsCx,A [tCy [#c( [WZ]aWa [6     T #  	
   t :  S c V[ !/2CGQV6S=S=!S=/2S=CGS=QTS=S=l)!)!)!(+)!DG$J)!4Z)!Xd 3 4 0S 0S 0U3d
?=S 0S S 73 74 7'D 'T '.$ .C .D . **%DE s s s ( (c3m(< (0KC KC KDt D49 D Dr6   