+
    „WÝjR  ã                  ó¼   a € 0 t $ R t^ RIHt ^ RIHt ]! 0 Rm4      tR]R&   ]! RR7       ! R R4      4       t	R	 R
 lt
R R ltR R ltR R ltR R ltR R ltR# )u(  Unified provider catalog â€” one source of truth for the provider universe.

The provider list shown by ``hermes model`` (CLI/TUI) and the desktop Settings â†’ Providers tabs
(Accounts + API keys) **must be the same set**; providers added after those lists were written
silently went missing from the GUI. ``auth_type`` / ``api_key_env_vars`` / ``base_url_env_var``
come from :data:`hermes_cli.auth.PROVIDER_REGISTRY` (credential truth); ``display_name`` /
``description`` / ``signup_url`` from the provider's :class:`providers.base.ProviderProfile`, falling
back to the ``CANONICAL_PROVIDERS`` entry's ``label`` / ``tui_desc`` and the ``OPTIONAL_ENV_VARS``
signup URL (many profiles leave these blank, and openai-api, tencent-tokenplan, xai-oauth have no
profile at all â€” the fallbacks are load-bearing).
)Úannotations)Ú	dataclasszfrozenset[str]Ú_ACCOUNTS_AUTH_TYPEST)Úfrozenc                  óv   € ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   RtR# )ÚProviderDescriptorzDOne provider, as seen by every surface (CLI picker + both GUI tabs).ÚstrÚslugÚlabelÚdescriptionÚ	auth_typeÚtabútuple[str, ...]Úapi_key_env_varsÚbase_url_env_varÚ
signup_urlÚintÚorder© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r   ó    ÚOC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\provider_catalog.pyr   r      s5   ‡ áNà
ƒIØƒJØÓØƒNØ	ƒHØ%Ó%ØÓØƒOØ‡Jr   r   c               ó    € V ^8„  d   QhRRRR/# )é   r   r   Úreturnr   )Úformats   "r   Ú__annotate__r"   *   s   € ÷ Gñ G ð G¨ñ Gr   c                ó    € V \         9   d   R# R# )zEReturn the desktop tab ("keys"|"accounts") a provider's auth maps to.ÚaccountsÚkeys)r   )r   s   &r   Útab_for_auth_typer&   *   s   € à"Ô&:Ô:ˆ:ÐFÀÐFr   c               ó    € V ^8„  d   QhRRRR/# )r   Únamer   r    Úboolr   )r!   s   "r   r"   r"   /   s   € ÷ ?ñ ?�cð ?˜dñ ?r   c                óV   € V P                  R 4      ;'       g    V P                  R4      # )Ú	_BASE_URLÚ_URL)Úendswith)r(   s   &r   Ú_is_url_varr.   /   s"   € Ø�=‰=˜Ó%×>Ð>¨¯©°vÓ)>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   Úenv_varsr   r    ztuple[tuple[str, ...], str]r   )r!   s   "r   r"   r"   3   s   € ÷ oñ o˜oð oÐ2Mñ or   c                ó€   € \         ;QJ d    . R V  4       F  NK  	  5M! R V  4       4      \        R V  4       R4      3# )zASplit a profile's ``env_vars`` into (api_key_vars, base_url_var).c              3  óL   "  € T F  p\        V4      '       d   K  Vx € K  	  R # 5i©N©r.   ©Ú.0Úvs   & r   Ú	<genexpr>Ú"_split_env_vars.<locals>.<genexpr>5   s   é € Ð;™H�q¬K¸¯N—’›Hùó   ‚$š
$c              3  óL   "  € T F  p\        V4      '       g   K  Vx € K  	  R # 5ir3   r4   r5   s   & r   r8   r9   5   s   é € ÐBiÉhÈÔZeÐfg×ZhÇ1Â1Ëhùr:   Ú )ÚtupleÚnext)r0   s   &r   Ú_split_env_varsr?   3   s4   € çŒ5Ñ;™HÓ;�5‰5Ñ;™HÓ;Ó;¼TÑBiÉhÓBiÐkmÓ=nÐnÐnr   c               ó    € V ^8„  d   QhRRRR/# )r   Úmoduler   Úattrr   )r!   s   "r   r"   r"   8   s   € ÷ ñ ˜ð  Cñ r   c                óX   €  \        \        W.R7      V4      #   \         d    Tu # i ; i)uÇ   Import ``attr`` from ``module``; ``default`` on ANY failure â€” this module is on the import
path of the web server and the CLI, and a provider-plugin import error must never blank the
whole catalog.)Úfromlist)ÚgetattrÚ
__import__Ú	Exception)rA   rB   Údefaults   &&&r   Ú_safe_importrI   8   s/   € ðÜ”z &°6Ô:¸DÓAÐAøÜô ØŠðús   ‚ ™)¨)c               ó   € V ^8„  d   QhRR/# )r   r    zlist[ProviderDescriptor]r   )r!   s   "r   r"   r"   B   s   € ÷ *ñ *Ð2ñ *r   c                 óV  € ^ RI Hp  \        RR/ 4      p\        RR/ 4      p\        RR/ 4      p ^ RIHp V! 4        Uu/ uF  qUP
                  VbK  	  pp. p\        V ! 4       4       EF$  w  r‰V	P                  p
VP                  V
4      pVP                  V
4      pVP                  V
4      pV'       d   VP                  MR	;'       g?    V'       d   VP                  MR	;'       g!    V'       d   VP                  MR	;'       g    R
pV'       d?   VP                  '       d-   \        VP                  4      VP                  ;'       g    R	ppM@V'       d5   VP                  '       d#   \        \        VP                  4      4      w  ppMRR	ppV'       d   VP                   MR	;'       g    V	P"                  ;'       g    T
pV'       d   VP$                  MR	;'       g    R	pV'       gD   V'       d<   VP                  V^ ,          4      ;'       g    / P                  R4      ;'       g    R	pTP'                  \)        T
TV'       d   VP*                  MR	;'       g    V	P,                  ;'       g    TV\/        V4      VVVVR7	      4       EK'  	  V# u upi   \         d    / p ELRi ; i)a  One descriptor per provider in the ``hermes model`` universe (:data:`CANONICAL_PROVIDERS`,
auto-extended by provider plugins). Auth/env from ``PROVIDER_REGISTRY``; display metadata from
``ProviderProfile`` with canonical/env fallbacks so profile-less providers still resolve.)Úlisted_canonical_providerszhermes_cli.authÚPROVIDER_REGISTRYzhermes_cli.configÚOPTIONAL_ENV_VARSzhermes_cli.providersÚHERMES_OVERLAYS)Úlist_providersr<   Úapi_keyÚurl)	r	   r
   r   r   r   r   r   r   r   r   )Ú hermes_cli.models_catalog_staticrL   rI   Ú	providersrP   r(   rG   Ú	enumerater	   Úgetr   r   r=   r   r0   r?   Údisplay_namer
   r   Úappendr   r   Útui_descr&   )rL   rM   rN   rO   rP   ÚpÚprofilesÚoutr   Úentryr	   ÚcfgÚprofÚoverlayr   Úapi_key_varsÚbase_url_varr
   r   s                      r   Úprovider_catalogrc   B   sG  € õ LÜ$Ð%6Ð8KÈRÓPÐÜ$Ð%8Ð:MÈrÓRÐô #Ð#9Ð;LÈbÓQ€OðÝ,Ù'5Ô'7Ó8Ñ'7 !—F‘F˜A’IÑ'7ˆÐ8ð %'€CÜ!Ñ"<Ó">×?‰ˆØ�z‰zˆØ×#Ñ# DÓ)ˆØ�|‰|˜DÓ!ˆØ!×%Ñ% dÓ+ˆç'*�c—m’m°÷ Lð LÏ$¸¿ºÐTV÷ Lð Lß.5˜×*Ò*¸2÷Lð LØBKð 	÷ �3×'×'Ð'Ü).¨s×/CÑ/CÓ)DÀc×FZÑFZ×F`ÐF`Ð^`˜,ˆL˜,ß�d—m—m�mÜ)8¼¸t¿}¹}Ó9MÓ)NÑ&ˆL™,à)+¨R˜,ˆLß&*�×"Ò"°×JÐJ°u·{±{×JÐJÀdˆß)-�d—o’o°2×<Ð<¸"ˆ
ßŸlØ+×/Ñ/°¸QµÓ@×FÐFÀB×KÑKÈEÓR×XÐXÐVXˆJØ�
‰
ÜØ Ï°T×5EÒ5EÐSU×4qÐ4qÐZ_×ZhÑZh×4qÐ4qÐlqØ#Ô):¸9Ó)EÐXdØ!-¸*ÈEô÷	
ñ' @ð4 €Jùò= 9øÜô Ø‹ðús"   ¯J ¾JÁJ ÊJ ÊJ(Ê'J(c               ó   € V ^8„  d   QhRR/# )r   r    zdict[str, ProviderDescriptor]r   )r!   s   "r   r"   r"   o   s   € ÷ 3ñ 3Ð"?ñ 3r   c                 óT   € \        4        U u/ uF  q P                  V bK  	  up # u up i )z'Convenience: the catalog keyed by slug.)rc   r	   )Úds    r   Úprovider_catalog_by_slugrg   o   s%   € ä/Ô1Ó2Ñ1˜!�F‰F�AŠIÑ1Ñ2Ð2ùÒ2s   �%N>   ÚcopilotÚoauth_minimaxÚoauth_externalÚexternal_processÚoauth_device_code)Ú__conditional_annotations__r   Ú
__future__r   Údataclassesr   Ú	frozensetr   r   r   r&   r.   r?   rI   rc   rg   )rm   s   @r   Ú<module>rq      si   øðô
õ #å !ñ (1Ú[ó(Ð �nó ñ
 �$Ô÷ð ó ðõGõ
?õoõ
õ*÷Z3r   