
    "jV                     2   d Z ddlZddlZddlZddl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 ddlmZmZ ddlZddlmZmZmZ ddlmZmZmZ d	d
lmZmZ d	dlmZm Z  dZ! ed          Z"dZ#dZ$ ee$          Z%dZ&dZ'dZ(dZ) ej*        e+          Z,e
 G d d                      Z-e%.                    dg d          	 dZdej/        dee0 ej1        d          f         dee2 ej3        dd           f         d!dfd"            Z4e%.                    d#d$dd$d%d&d'g(          dej/        d)ee0 ej1        d*          f         d!dfd+            Z5e%.                    d,d-g          ej6        fd.ed!dfd/            Z7e%.                    d0d1g          ej6        fd.ed!dfd2            Z8e%.                    d3d4g          d)ee0 ej1        d5          f         d!dfd6            Z9d!e:e-         fd7Z;d!e:e<e0e0f                  fd8Z=d9e:e0         d:e>e0         d!e?dz  fd;Z@d<e0d!edz  fd=ZAdd>d?e0d@e0d<e0dAedBe0dCe0dz  d!e-fdDZBd?e0d@e0dBe0d<e0d!eCf
dEZDd?e0d@e0d<e0dAedFeCd!e-fdGZEd?e0d@e0d<e0dAedBe0d!e-fdHZFd?e0d@e0dBe0dIe0dz  d!e0dz  f
dJZGd!efdKZHd<e0d!efdLZId?e0d@e0d!e<e0e0dz  f         fdMZJd<e0d!e0fdNZKd<e0d!efdOZLdPed!efdQZMdPed<e0d!efdRZN ejO        dS          ZPd<e0dTe0d!e0fdUZQde0d!e<e0e0e0f         fdVZRd)e0d!e0fdWZSdXed9e:e0         d!e?fdYZTdS )[z0Contains helper utilities for hf CLI extensions.    N)asdict	dataclass)datetimetimezone)Path)	AnnotatedLiteral)CLIErrorCLIExtensionInstallErrorConfirmationError)
StatusLineget_sessionlogging   )FormatWithAutoOpttyper_factory)OutputFormatWithAuto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                       e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ed         ed<   eed	<   eed
<   dZedz  ed<   ede	dd fd            Z
de	ddfdZdS )ExtensionManifestownerreporepo_id
short_nameexecutable_nameexecutable_path)binarypythontypeinstalled_atsourceNdescriptionpathreturnc                    |t           z  }|                                st          d| d          t          j        |                                          }t          j        |d                   |d<   t          di |S )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       h/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/huggingface_hub/cli/extensions.pyloadzExtensionManifest.loadC   s    00$$&& 	ljjjjkkkz-113344'5d>6JKK^ ((4(((    c                     |t           z  }|j                            dd           t          |           }| j                                        |d<   |                    t          j        |dd                     d S )NTparentsexist_okr$      )indent	sort_keys)	r+   parentmkdirr   r$   	isoformat
write_textr-   dumps)selfr'   r2   r3   s       r4   savezExtensionManifest.saveL   sx    00""4$"???d||#0::<<^  Dd!K!K!KLLLLLr6   )__name__
__module____qualname__str__annotations__r	   r   r&   classmethodr   r5   rD   r*   r6   r4   r   r   6   s         JJJ
IIILLLOOO
$
%%%%KKK"Kt""") )!4 ) ) ) [)M M$ M M M 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                 j   t          |          \  }}}|                                 }t          t          |j        di                                                     }||v rt          d| d| d          t          |          }|                                }	|	r|st          d| d          t          ||          \  }
}|	rt          j        |           t          |||||
|          }|j                                        }t          | d	| d
| d           t          d|            dS )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   rR   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)rM   r   rN   r   rR   r   root_ctxreserved_commandsrS   extension_existsrT   r&   manifestext_types                 r4   extension_installrj   T   s}   * $6g#>#> E9j}}HGH$4j"EEJJLLMM&&&wwwakwww
 
 	
 'z22M$++-- d dbZbbbccc3%9UUUFK %m$$$-#  H }''))H	X
R
Re
R
Ri
R
R
RSSS	
)Z
)
)*****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_settingsrL   namez.Extension name (with or without `hf-` prefix).c                     t          |          }t          |          }|                                st          d| d          t	          |t          | j                            }t          j        |          )zExecute an installed extension.rQ   ' is not installed.r    args)code)	_normalize_extension_name"_resolve_installed_executable_pathr,   r
   _execute_extension_binarylistrt   typerExit)rM   rp   r   r    	exit_codes        r4   extension_execr}      s      +400J8DDO""$$ FDZDDDEEE)/PTUXU]P^P^___I
*)
$
$
$$r6   z	list | lszhf extensions listformatc                 b    d t                      D             }t          j        |d           dS )z"List installed extension commands.c                     g | ]S}d |j          t          |j                  t          |j                  |j                            d          |j        dTS )zhf z%Y-%m-%d)r[   r%   r#   	installedr&   )r   rH   r   r#   r$   strftimer&   ).0rh   s     r4   
<listcomp>z"extension_list.<locals>.<listcomp>   st     	 	 	  3X022(*++&&!.77
CC#/	
 	
	 	 	r6   r[   )id_keyN)_list_installed_extensionsr   table)r~   rowss     r4   extension_listr      sE    	 	 344	 	 	D Id9%%%%%%r6   searchzhf extensions searchc           	      N   t                                          ddt           dddddt                    }|                                 |                                }d	 t                      D             }g }|                    d
g           D ]{}|d         }|                    d          r
|dd         n|}|                    ||d         |                    dd          |                    d          pd||v rdndd           |t          j
        |dddi           dS )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timeoutc                     h | ]	}|j         
S r*   )r   )r   ms     r4   	<setcomp>z#extension_search.<locals>.<setcomp>   s    DDD!DDDr6   itemsrp   hf-   N	full_namestargazers_countr   r&    yes)rp   r   r   r&   r   r   right)r   
alignments)r   get_EXTENSIONS_GITHUB_TOPIC_EXTENSIONS_DOWNLOAD_TIMEOUTraise_for_statusr-   r   
startswithappendr   r   )r~   responser3   r   r   r   rR   r   s           r4   extension_searchr      sZ    }}  48688'TZhkll,	 !  H ==??DDD'A'C'CDDDID"%% 
 
L	&/&:&:5&A&APYqrr]]y
"[)"4a88#xx66<"&0I&=&=UU2 	
 	
 	
 	
 Id6w.@AAAAAAr6   zremove | rmzhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     t          |           }t          |          }|                                st          d| d          t	          j        |           t          d| d           dS )zRemove an installed extension.rQ   rr   zRemoved extension ''.N)rv   r]   is_dirr
   r`   ra   rd   )rp   r   rS   s      r4   extension_remover      s}     +400J&z22M!! FDZDDDEEE
M-   	
.

.
.
./////r6   c                     t                                           } |                                 sg S g }t          |                                           D ]}|                                r|j                            d          s1	 |                    t          	                    |                     `# t          $ r/}t                              d|j         d|            Y d}~d}~ww xY w|S )zPReturn manifests for all validly-installed extensions, sorted by directory name.r   z'Failed to load manifest for extension '': N)EXTENSIONS_ROOT
expanduserr   sortediterdirrp   r   r   r   r5   	Exceptionloggerdebug)root_dir	manifestsrS   es       r4   r   r      s   ))++H?? 	I 0 0 2 233  ##%% 	]-?-J-J5-Q-Q 		.33MBBCCCC 	 	 	LL]=CU]]Z[]]^^^HHHH	 s   -B33
C,=%C''C,c                      g } t                      D ]>}d|j         d}|j        |j         d| n|}|                     |j        |f           ?| S )Nz[extension ] )r   r   r&   r   r   )entriesrh   tag	help_texts       r4   "list_installed_extensions_for_helpr      su    G.00 9 9/H,///7?7K7Wx+33c333]`	+Y78888Nr6   rt   known_commandsc                    | sd S | d         }|                     d          rd S d |D             }||v rd S |                     d          r
|dd          n|}|sd S d }	 t          |          }n# t          $ r t          |          }Y nw xY w||                                sd S t          |t          | dd                              S )Nr   -c                 f    h | ].}|                     d           D ]}|                                /S )|)splitstrip)r   cmdas      r4   r   z7dispatch_unknown_top_level_extension.<locals>.<setcomp>  s7    MMMsciinnMMMMMMr6   r   r   r   rs   )r   rw   r    _auto_install_official_extensionr,   rx   ry   )rt   r   command_name	all_knownr   r    s         r4   $dispatch_unknown_top_level_extensionr      s    t7Ls## tMMnMMMIy  t%1%<%<U%C%CUabb!!J t#'OG<ZHH G G G::FFG o&=&=&?&?t$_4PTUVUWUWPX>>ZZZZs   A. .B
	B
r   c           	         t           d|  }}	 t          |           }n# t          $ r Y dS w xY w|                                rdS 	 t	                                          d| d| dt                    }|j        dk    rdS |                                 |	                                d         }n# t          $ r Y dS w xY w	 t          j        d	|  d
| d| d           n# t          $ r Y dS w xY w	 t          ||| ||          }t          |j                                                  S # t          $ r t#          j        |d           Y dS w xY w)zKTry to auto-install huggingface/hf-<name>. Returns executable path or None.r   Nhttps://api.github.com/repos/rU   Tr   r   i  default_branch'z)' is an official Hugging Face extension (z). Install it?r   rR   r   rS   rT   ignore_errors)DEFAULT_EXTENSION_OWNERr]   r   r^   r   r   r   status_coder   r-   r   confirmr   rb   r   r    r   r`   ra   )r   r   rR   rS   r   rT   rh   s          r4   r   r     s   .0Bj0B0B9E*:66   tt t==$$?E??I??!0 % 
 

 3&&4!!###!12   ttn
nnUnnU^nnnoooo   tt19S`io
 
 
 H,--88:::   m48888ttsH    
,,:B1 .B1 1
B?>B?C" "
C0/C049D. . EE)r&   r   rR   rS   rT   r&   c                    	 t          | |||          }n# t          $ r d}Y nw xY w|t          | ||||          }nt          | ||||          }t	          | |||          |_        |                    |           |S )zLFetch, install (binary or Python), and save manifest for a GitHub extension.)r   rR   rT   r   N)r   rR   r   rS   r!   r   )r   rR   rT   candidate_description)_fetch_remote_binaryr   _install_binary_extension_install_python_extension_try_fetch_remote_descriptionr&   rD   )r   rR   r   rS   rT   r&   r!   rh   s           r4   rb   rb   >  s    %EYvblmmm   ,9S`io
 
 
 -9S`io
 
 
 9y{  H MM-   Os    %%c                     t          |          }d|  d| d| d| }t                                          |dt                    }|                                 |j        S )N"https://raw.githubusercontent.com/rU   /refs/heads/Tr   )_get_executable_namer   r   r   r   content)r   rR   rT   r   r   raw_urlr   s          r4   r   r   [  sp    *:66Ol5ll9llRXll[jllG}}  4Ie ffHr6   r!   c                 d   t          |          }|                    dd           ||z  }|                    |           t          j        dk    rt          j        |d           t          | ||  d| ||t          |          dt          j	        t          j                  d|  d| 		  	        S )
NTFr8   nti  rU   r!   https://github.com/	r   r   r   r   r   r    r#   r$   r%   )r   r?   write_bytesosrp   chmodr   rH   r   nowr   utc)r   rR   r   rS   r!   r   r    s          r4   r   r   c  s     +:66Ou555#o5O''' 
w$
%((( &&9&&'O,,\(,//8U88Y88
 
 
 
r6   c                    d|  d| d| d}|dz  }d}t                      }	 |                    d|            |                                rt          j        |d	           |                    dd
           t          j        d          }	t          |          }
|	rt          j	        |	dt          |          gd           |                    d|            |                    d|            t          j	        |	dddt          |
          |gdt                     nt          j        d                              t          |                     |                    d|            |                    d|            t          j	        t          |
          ddddd|gdt                     |                    d|            t!          |          }t#          ||          }|                                st'          d|  d| d| d          t)          | ||  d| ||t          |                                          dt-          j        t0          j                  d|  d| 	  	        }d}||st          j        |d	           S S # t&          $ r  t          j        $ r$}t7          dt           d|  d| d          |d }~wt          j        $ r$}t7          d |  d| d!|j         d"          |d }~wt<          $ r}t7          d#|  d| d$|           |d }~ww xY w# |st          j        |d	           w w xY w)%Nr   rU   z/archive/refs/heads/z.zipvenvFz Creating virtual environment in Tr   r8   uv)checkzVirtual environment created in zInstalling package from piprK   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   updater^   r`   ra   r?   which_get_venv_python_path
subprocessrunrH   done_EXTENSIONS_PIP_INSTALL_TIMEOUTr   
EnvBuildercreater   #_get_venv_extension_executable_pathr,   r
   r   resolver   r   r   r   TimeoutExpiredr   CalledProcessError
returncoder   )r   rR   r   rS   rT   
source_urlvenv_dirr   statusuv_pathvenv_pythonr   venv_executablerh   r   s                  r4   r   r   ~  s    [uZZyZZfZZZJv%HI\\FK=CCCDDD!! 	=M-t<<<<D5999,t$$+H55 	NGVS]];4HHHHKKD(DDEEEMMAZAABBBN%JK8H8H*U7     OT***11#h--@@@KKD(DDEEEMMAZAABBBN$$1  7    	:j::;;;.z::=h
SS&&(( 	(5 ( (9 ( (#( ( (  
 %**y**!+ 7 7 9 9::!hl33<<<<<

 

 

 	   	=M-t<<<<<	=    $   &0+J 0 0SX 0 0[d 0 0 0
 
 	 (   &05 0 09 0 0STS_ 0 0 0
 
 	  q q q&'hu'h'hW`'h'hef'h'hiioppq  	=M-t<<<<<	=s<   IJ L/4KL/%LL/L**L//L2 2Mr   c           
         	 t                                          d|  d| d| dt           d          }|                                 |                                }|                    d          }t          |t                    r|S n# t          $ r Y nw xY w	 t                                          d|  d| d| dd          }|                                 |j        	                                D ]m}|
                                }|                    d          rB|                    d          \  }}}	|	
                                
                    d	          c S nn# t          $ r Y nw xY w|S )
zTry to fetch project description either from:
    - manifest.json
    - pyproject.toml

    Only best effort, no error handling.
    r   rU   r   T)r   r&   z/pyproject.toml=z"')r   r   r+   r   r-   
isinstancerH   r   text
splitlinesr   r   	partition)
r   rR   rT   r   r   r3   r&   line_values
             r4   r   r     s   ==$$lllllPVllYjll! % 
 
 	!!###}}hh}--k3'' 		   ==$$gggggPVggg! % 
 
 	!!### M,,.. 	2 	2D::<<D}-- 2"nnS111e{{}}**5111112	2
     ! s+   BB 
BBCE% #E% %
E21E2c                  f    t                                           } |                     dd           | S )NTr8   )r   r   r?   )r   s    r4   _get_extensions_rootr     s.    ))++HNN4$N///Or6   c                     t          | |           }t                                                      }|d| z                                  }||j        vrt	          d|  d          |S )Noriginal_inputr   Invalid extension name 'r   )_validate_extension_short_namer  r   r9   r
   )r   	safe_nameroottargets       r4   r]   r]     sv    .z*UUUI!!))++D&9&&&//11F6>!!@*@@@AAAMr6   c                    	 t                                          d|  d| dt                    }|                                 |                                }|d         |                    d          fS # t
          $ r t          d fcY S w xY w)Nr   rU   Tr   r   r&   )r   r   r   r   r-   r   _EXTENSIONS_DEFAULT_BRANCH)r   rR   r   r3   s       r4   r_   r_     s    
0==$$?E??I??!0 % 
 

 	!!###}}$%txx'>'>>> 0 0 0)4////0s   A3A6 6BBc                 :    d|  }t           j        dk    r|dz  }|S )Nr   r   z.exer   rp   )r   rp   s     r4   r   r     s(    D	w$Kr6   c                     t          |           }t                              |          }t          |j                                                  S N)r]   r   r5   r   r    r   )r   rS   rh   s      r4   rw   rw   $  s?    &z22M %%m44H())44666r6   r  c                 B    t           j        dk    r| dz  dz  S | dz  dz  S )Nr   Scriptsz
python.exebinr"   r  )r  s    r4   r   r   *  s-    	w$)#l22eh&&r6   c                 `    t          |          }t          j        dk    r| dz  |z  S | dz  |z  S )Nr   r"  r#  )r   r   rp   )r  r   r   s      r4   r   r   0  s:    *:66O	w$)#o55eo--r6   z^[A-Za-z0-9][A-Za-z0-9._-]*$r  c                >   |                                  st          d          t          fddD                       rt          d| d          dv sdv rt          d| d          t                                        st          d| d          S )	NExtension name cannot be empty.c              3       K   | ]}|v V  	d S r   r*   )r   seprp   s     r4   	<genexpr>z1_validate_extension_short_name.<locals>.<genexpr>>  s'      
.
.33$;
.
.
.
.
.
.r6   )rU   \r  r   z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)r   r
   any_ALLOWED_EXTENSION_NAME	fullmatch)r   r  rp   s     @r4   r  r  :  s    D :8999

.
.
.
.+
.
.
... FD.DDDEEEt||sd{{D.DDDEEE",,T22 
p~ppp
 
 	
 Kr6   c                    d| v rt          d          |                     d          }t          |          dk    rt          }|d         }n;t          |          dk    rt	          |          r|\  }}nt          d|  d          |                    d	          st          d
| d          |dd          }|st          d          t          ||            |||fS )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.rU   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   rR   r   s        r4   rW   rW   I  s   ^___MM#E
5zzQ'!H			UqSZZ yyJwJJJKKK&& _]PY]]]^^^122J CABBB":gFFFF)Z''r6   c                     |                                  }|st          d          |                    d          r
|dd          n|}t          ||           S )Nr&  r   r   r  )r   r
   r   r  )rp   	candidate
normalizeds      r4   rv   rv   a  s]    

I :8999"+"6"6u"="=L1229J)*TJJJJr6   r    c                    	 t          j        t          |           g|z             S # t          $ rV}t          j        dk    s|j        t          j        k    r t          j        dt          |           g|z             cY d }~S d }~ww xY w)Nr   sh)r   callrH   OSErrorr   rp   errnoENOEXEC)r    rt   r   s      r4   rx   rx   i  s    DO 4 45<=== D D D7d??ag66c/&:&:;dBCCCCCCCCDs   $' 
BAB<BB)F)U__doc__r:  r-   r   rer`   r   r   dataclassesr   r   r   r   pathlibr   typingr   r	   rz   huggingface_hub.errorsr
   r   r   huggingface_hub.utilsr   r   r   
_cli_utilsr   r   _outputr   r   r   r   r+   EXTENSIONS_HELPextensions_clir  r   r   r   
get_loggerrE   r   r   r[   ContextrH   ArgumentboolOptionrj   r}   autor   r   r   ry   r   tupler   rY   intr   r   rb   bytesr   r   r   r   r  r]   r_   r   rw   r   r   compiler-  r  rW   rv   rx   r*   r6   r4   <module>rQ     s#   7 6   				 				       ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' '       % % % % % % % %  X X X X X X X X X X B B B B B B B B B B 8 8 8 8 8 8 8 8 . . . . . . . . ( $566# + 
 O444# ) ! "% 		H	%	% M M M M M M M M:       _d)+ )+	)+XYYY	[)+ T<5<	8YZZZZ[)+ 
)+ )+ )+ )+X 
*.5lpqq-9   %	%
LMMM	O% 
% % % %$ /C.DEE/C/H & &, &T & & & FE& ,B+CDD1E1J B B. Bt B B B EDB< 1N0OPP0
VWWW	Y0
 
0 0 0 QP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= S= S= S=l)!)!)!(+)!DG$J)!4Z)! )! )! )!Xd    3 4    0S 0S 0U3d
?=S 0 0 0 0S S    73 74 7 7 7 7'D 'T ' ' ' '.$ .C .D . . . . %"*%DEE s s s    ( (c3m(< ( ( ( (0KC KC K K K KDt D49 D D D D D D Dr6   