+
    jHàj ’  ã                  ó¤  a€ 0 t $ R t^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
 ^ RIHtHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHtHt R	R
/t]! RR7       ! R R4      4       tR]! RRRRR—RRR˜4      R]! RRRRR™RR4      R]! RRRRRšRR4      R]! RRR R R›R!R"Rœ4      R#]! R$RR R R�R%R&Rž4      R']! R(RR)R)RŸR*R+R 4      R,]! R-RR,R,4      /tR.] R/&   ]!! ]4      t"]PG                  4        U Uu/ uF  w  rWPH                  bK  	  upp t%R0] R1&   ]PG                  4        U Uu/ uF%  w  rVPL                  '       g   K  WPL                  bK'  	  upp t']!! ]'4      t(]( U u/ uF  q ]V ,          PR                  bK  	  up t*R¡t+R2t,R3 R4 lt-R¢R5 R6 llt.]! RR7       ! R7 R84      4       t/]! RR7       ! R9 R:4      4       t0R; R< lt1R= R> lt2R£R@ RA llt3R¤RB RC llt4RD RE lt5RF RG lt6RH RI lt7RJ RK lt8R'RLRMRNR)RORRPRQRRRLRS/3RRTRURRVRWRTRXRYRZR[R\R]R^/3R#RLRUR_R`RaR[RbRLRc/3/t9Rd Re lt:Rf Rg lt;Rh Ri lt<Rj Rk lt=Rl Rm lt>Rn Ro lt?Rp Rq lt@Rr Rs ltARt Ru ltBRv Rw ltCRx Ry ltDRz R{ ltER£R|R/R} R~ llltFR R€ ltGR� R‚ ltHRƒR?R|R/R„ R… lltIR† R‡ ltJR£R|R/Rˆ R‰ llltKR£RŠ R‹ lltLR|R/RŒ R� lltMRŽR�R�R?/R‘ R’ lltNR“ R” ltOR• R– ltPR?# u upp i u upp i u up i )¥z8Helpers for Nous subscription managed-tool capabilities.)Úannotations)Ú	dataclass)ÚDictÚIterableÚOptionalÚSet)Úget_env_valueÚload_config)ÚNousPortalAccountInfoÚ&format_nous_portal_entitlement_messageÚget_nous_portal_account_info)Úis_managed_tool_gateway_ready)Úis_truthy_value)Úfal_key_is_configuredÚhas_direct_modal_credentialsÚ normalize_browser_cloud_providerÚnormalize_modal_modeÚresolve_modal_backend_stateÚresolve_openai_audio_api_keyÚcliz
hermes-cliT)Úfrozenc                  ó|   € ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   RtR	]R
&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R# )Ú_FeatureSpeczVPer-feature parameters shared by the status, defaults and Tool Gateway offer surfaces.ÚstrÚlabelÚboolÚincluded_by_defaultÚcoverageÚgatewayNzOptional[tuple[str, str]]Úsection_fieldÚ Úoffer_labelÚdirect_labelztuple[str, ...]Údefault_direct_env© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r!   r"   r#   Ú__static_attributes__r$   ó    ÚA/home/ubuntu/.hermes/hermes-agent/hermes_cli/nous_subscription.pyr   r      sH   ‡ á`àƒJØÓð ƒMØƒLà/3€MÐ,Ó3Ø€K�ÓØ€L�#Óð +-Ð˜×,r,   r   Úwebz	Web toolsÚ	firecrawlzWeb search & extractz@Firecrawl/Exa/Parallel/Tavily/Perplexity/Keenable key or SearXNGÚ	image_genzImage generationÚfalz	fal-queuezFAL keyÚ	video_genzVideo generationFú	fal-videozVideo generation (FAL)Úttsz
OpenAI TTSúopenai-audiozText-to-speech (OpenAI TTS)zOpenAI/ElevenLabs keyÚsttzSpeech-to-textzSpeech-to-text (OpenAI Whisper)zOpenAI/Groq/Mistral keyÚbrowserzBrowser automationúbrowser-usez Browser automation (Browser Use)z&Browser Use/Browserbase key or CamofoxÚmodalzModal executionzdict[str, _FeatureSpec]Ú	_FEATURESzdict[str, str]Ú!MANAGED_FEATURE_COVERAGE_CATEGORYzkrea-3c               ó    € V ^8„  d   QhRRRR/# )é   ÚsectionÚobjectÚreturnr   r$   )Úformats   "r-   Ú__annotate__rB   Q   s   € ÷ dñ d˜6ð d dñ dr,   c                ój   € \        V \        4      ;'       d    \        V P                  R4      RR7      # )z[True when a config section explicitly opts into the gateway (legacy ``use_gateway: true``).Úuse_gatewayF)Údefault)Ú
isinstanceÚdictr   Úget)r>   s   &r-   Ú_uses_gatewayrI   Q   s(   € ä�gœtÓ$×cÐc¬¸¿¹À]Ó9SÐ]bÔ)cÐcr,   c               ó$   € V ^8„  d   QhRRRRRR/# )r=   r>   r?   Úname_keyr   r@   úOptional[str]r$   )rA   s   "r-   rB   rB   V   s&   € ÷ Kñ K ð K°#ð KÀ}ñ Kr,   c                óè   € \        V \        4      '       g   R# \        V 4      '       d   R# V P                  V4      pVf   R# \	        V4      P                  4       P                  4       ;'       g    R# )z¸Stored provider for a section (``read_selection`` semantics): ``"nous"`` for the managed
selection (stored ``nous`` or legacy ``use_gateway: true``), a vendor name for BYOK, else None.NÚnous)rF   rG   rI   rH   r   ÚstripÚlower)r>   rK   Úvalues   && r-   Ú_selected_providerrR   V   s]   € ô �gœt×$Ò$ÙÜ�W×ÒÙØ�K‰K˜Ó!€EØ’=ˆ4ÐJ¤s¨5£z×'7Ñ'7Ó'9×'?Ñ'?Ó'A×'IÐ'IÀTÐJr,   c                  ó„   € ] tR t^at$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   RtR]R&   RtR]R&   RtR# )ÚNousFeatureStater   Úkeyr   r   r   Ú	availableÚactiveÚmanaged_by_nousÚdirect_overrideÚtoolset_enabledr    Úcurrent_providerFÚexplicit_configuredr$   N)r%   r&   r'   r(   r*   r[   r\   r+   r$   r,   r-   rT   rT   a   sD   ‡ à	ƒHØƒJØÓØƒOØƒLØÓØÓØÓØÐ�cÓØ %Ð˜×%r,   rT   c                  óf   € ] tR t^ot$ R]R&   R]R&   R]R&   R]R&   RtR]R	&   R
 R ltR R ltRtR# )ÚNousSubscriptionFeaturesr   Ú
subscribedÚnous_auth_presentÚprovider_is_nouszdict[str, NousFeatureState]ÚfeaturesNúOptional[NousPortalAccountInfo]Úaccount_infoc               ó    € V ^8„  d   QhRRRR/# )r=   Únamer   r@   rT   r$   )rA   s   "r-   rB   Ú%NousSubscriptionFeatures.__annotate__w   s   € ÷ #ñ # ð #Ð(8ñ #r,   c                	óT   € V\         9   d   V P                  V,          # \        V4      h©N)Ú_FEATURE_ORDERrb   ÚAttributeError)Úselfrf   s   &&r-   Ú__getattr__Ú$NousSubscriptionFeatures.__getattr__w   s$   € Ø”>Ô!Ø—=‘= Õ&Ð&Ü˜TÓ"Ð"r,   c               ó   € V ^8„  d   QhRR/# )r=   r@   zIterable[NousFeatureState]r$   )rA   s   "r-   rB   rg   |   s   € ÷ >ñ >Ð1ñ >r,   c                	ó$   a € V 3R  l\          4       # )c              3  óJ   <"  € T F  pSP                   V,          x € K  	  R # 5iri   )rb   )Ú.0rU   rl   s   & €r-   Ú	<genexpr>Ú1NousSubscriptionFeatures.items.<locals>.<genexpr>}   s   øé € Ð=©n s�—‘˜c×"Ò"«nùs   ƒ #)rj   )rl   s   fr-   ÚitemsÚNousSubscriptionFeatures.items|   s   ø€ Ü=­nÓ=Ð=r,   r$   )	r%   r&   r'   r(   r*   rd   rm   ru   r+   r$   r,   r-   r^   r^   o   s4   ‡ àÓØÓØÓØ)Ó)Ø48€LÐ1Ó8õ#÷
>ñ >r,   r^   c               ó$   € V ^8„  d   QhRRRRRR/# ©r=   Úconfigúdict[str, object]rU   r   r@   r$   )rA   s   "r-   rB   rB   €   s#   € ÷ 4ñ 4Ð&ð 4¨Sð 4Ð5Fñ 4r,   c                óX   € V P                  V4      p\        V\        4      '       d   V# / # )z@``config[key]`` when it is a dict, else ``{}`` (read-only view).©rH   rF   rG   ©ry   rU   rQ   s   && r-   Ú_sectionr~   €   s&   € à�J‰J�s‹O€EÜ˜u¤d×+Ò+ˆ5Ð3°Ð3r,   c               ó$   € V ^8„  d   QhRRRRRR/# rx   r$   )rA   s   "r-   rB   rB   †   s#   € ÷ ñ Ð-ð °Cð Ð<Mñ r,   c                ó`   € V P                  V4      p\        V\        4      '       g   / ;q V&   V# )zSReturn ``config[key]`` as a dict, creating/replacing it in ``config`` when missing.r|   r}   s   && r-   Ú_ensure_sectionr�   †   s-   € à�J‰J�s‹O€EÜ�eœT×"Ò"Ø Ð ˆ�s‘Ø€Lr,   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r=   ry   rz   rU   r   ÚmodelrL   r@   ÚNoner$   )rA   s   "r-   rB   rB   Ž   s*   € ÷ !ñ !Ð*ð !°ð !¸]ð !ÐVZñ !r,   c                ó‚   € \         V,          w  r4\        W4      pRWT&   VP                  RR4       V'       d   W%R&   R# R# )z`Store the managed ``nous`` selection in the ``key`` section (field per _GATEWAY_SECTION_FIELDS).rN   rD   Nrƒ   )Ú_GATEWAY_SECTION_FIELDSr�   Úpop)ry   rU   rƒ   Úsection_keyÚfieldr>   s   &&&   r-   Ú_select_nousrŠ   Ž   s>   € ä0°Õ5Ñ€KÜ˜fÓ2€GØ€G�NØ‡K�K�˜tÔ$ßØ �Óñ r,   c               ó$   € V ^8„  d   QhRRRRRR/# )r=   rQ   r?   rE   r   r@   r$   )rA   s   "r-   rB   rB   ˜   s!   € ÷ 1ñ 1�ð 1 #ð 1¨sñ 1r,   c                ód   € \        T ;'       g    T4      P                  4       P                  4       # ri   )r   rO   rP   )rQ   rE   s   &&r-   Ú_normr�   ˜   s'   € Üˆu×Ð˜Ó ×&Ñ&Ó(×.Ñ.Ó0Ð0r,   c               ó    € V ^8„  d   QhRRRR/# )r=   ry   rz   r@   r   r$   )rA   s   "r-   rB   rB   œ   s   € ÷ Fñ FÐ/ð F°Dñ Fr,   c                óP   € \        \        V R 4      P                  R4      4      R8H  # )rƒ   ÚproviderrN   )r�   r~   rH   )ry   s   &r-   Ú_provider_is_nousr‘   œ   s$   € Ü”˜& 'Ó*×.Ñ.¨zÓ:Ó;¸vÑEÐEr,   c               ó$   € V ^8„  d   QhRRRRRR/# )r=   ry   rz   Útoolset_keyr   r@   r   r$   )rA   s   "r-   rB   rB       s"   € ÷ ñ Ð.ð ¸Sð ÀTñ r,   c                ó¢  € ^ RI Hp V P                  R4      p\        V\        4      '       d	   V'       g   R\
        R,          ./p\        V! V4      4      pV'       g   R# ^ RIHp VP                  4        F½  w  rg\        V! V4      ;'       g    . 4      pV'       g/   \
        P                  V4      3 U	u. uF  q™'       g   K  V	NK  	  pp	\        4       p
V F=  p\        V\        4      '       g   K  V'       g   K%   V
P                  V! V4      4       K?  	  VP                  V
4      '       g   K¼   R# 	  R# u up	i   \         d     Kt  i ; i)zRTrue when some platform's configured toolsets cover every tool of ``toolset_key``.)Úresolve_toolsetÚplatform_toolsetsr   F)Úparse_platform_toolsets_valueT)Útoolsetsr•   rH   rF   rG   Ú_DEFAULT_PLATFORM_TOOLSETSÚsetÚhermes_cli.toolset_validationr—   ru   Úlistr   ÚupdateÚ	ExceptionÚissubset)ry   r“   r•   r–   Útarget_toolsr—   ÚplatformÚraw_toolsetsÚtoolset_namesÚtÚavailable_toolsÚtoolset_names   &&          r-   Ú_toolset_enabledr§       s  € å(àŸ
™
Ð#6Ó7ÐÜÐ'¬×.Ò.×6GØ"Ô%?ÀÕ%FÐ$GÐHÐÜ‘ {Ó3Ó4€LßÙÝKØ"3×"9Ñ"9Ö";ÑˆÜÑ:¸<ÓH×NÐNÈBÓOˆßÜ)C×)GÑ)GÈÓ)QÑ(SÓYÑ(S 1ÓWXŸQ˜QÑ(SˆMÐYÜ$'£EˆÛ)ˆLÜ˜,¬×,Ô,·±ðØ#×*Ñ*©?¸<Ó+HÖIñ *ð × Ñ  ×1Ô1Úñ #<ñ ùò Zøô !ô Úðús   Â7	D:ÃD:Ã?D?Ä?EÅEc               ó   € V ^8„  d   QhRR/# ©r=   r@   r   r$   )rA   s   "r-   rB   rB   »   s   € ÷ ñ ˜Dñ r,   c                 óV   €  ^ RI Hp  V ! RR7       R#   \        \        3 d     R# i ; i)é    ©Ú_find_agent_browserF)ÚvalidateT)Útools.browser_tool_installr­   ÚImportErrorÚOSErrorr¬   s    r-   Ú_has_agent_browserr²   »   s0   € ðÝBÙ UÕ+ñ øô œÐ!ô Úðús   ‚ “(§(c               ó   € V ^8„  d   QhRR/# r©   r$   )rA   s   "r-   rB   rB   Æ   s   € ÷ ?ñ ? ñ ?r,   c                 ó�   € \        4       '       g   R#  ^ RIHp  ^ RIHp T! 4       ;'       g    T ! 4       #   \
         d     R# i ; i)a%  True when the *local* browser backend would actually start: the CLI must be present AND a
Chromium build on disk (else agent-browser hangs until the command timeout) unless the Lightpanda
engine is selected. Mirrors the local-mode tail of tools.browser_tool_install.check_browser_requirements.F)Ú_chromium_installed)Ú_using_lightpanda_engineT)r²   r¯   rµ   Ú&tools.browser_tool_lightpanda_fallbackr¶   rž   )rµ   r¶   s     r-   Ú_local_browser_runnabler¸   Æ   sF   € ô ×ÒÙðÝBÝSñ $Ó%×>Ð>Ñ)<Ó)>Ð>øô ô Úðús   ”6 ¶AÁAÚlocalÚbrowserbaseÚBrowserbasezBrowser UseÚ	FirecrawlÚcamofoxÚCamofoxzLocal browserÚedgeÚopenaiÚ
elevenlabsÚ
ElevenLabszEdge TTSÚxaizxAI TTSÚmistralzMistral Voxtral TTSÚneuttsÚNeuTTSzOpenAI WhisperÚgroqzGroq WhisperzMistral Voxtral TranscribezLocal faster-whisperc               ó$   € V ^8„  d   QhRRRRRR/# )r=   Úkindr   r[   r@   r$   )rA   s   "r-   rB   rB   å   s&   € ÷ Zñ Z˜#ð Z°ð Z¸ñ Zr,   c                óx   € \         V ,          w  r#TP                  T;'       g    TT;'       g	    W2,          4      # ri   )Ú_PROVIDER_LABELSrH   )rÉ   r[   rE   Úmappings   &&  r-   Ú_provider_labelrÍ   å   s5   € Ü'¨Õ-Ñ€GØ�;‰;Ð'×2Ð2¨7Ð4D×4XÐ4XÈÕHXÓYÐYr,   c               ó   € V ^8„  d   QhRR/# r©   r$   )rA   s   "r-   rB   rB   ê   s   € ÷ 	ñ 	 dñ 	r,   c                 óp   € \        R4      '       d   R#  ^ RIHp  \        V 4      #   \         d     R# i ; i)zMTrue when faster-whisper imports or a custom local STT command is configured.ÚHERMES_LOCAL_STT_COMMANDT©Ú_HAS_FASTER_WHISPERF)r   Útools.transcription_toolsrÒ   r   rž   rÑ   s    r-   Ú_local_stt_backend_availablerÔ   ê   s7   € äÐ/×0Ò0ÙðÝAäÐ'Ó(Ð(øÜô Úðús   •& ¦5´5c               ó    € V ^8„  d   QhRRRR/# )r=   Únamesr   r@   r   r$   )rA   s   "r-   rB   rB   ö   s   € ÷ 6ñ 6�Sð 6˜Tñ 6r,   c                 ój   € \         ;QJ d    R V  4       F  '       g   K   R# 	  R# ! R V  4       4      # )z?True when any of the named env vars (via get_env_value) is set.c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5iri   )r   )rr   rf   s   & r-   rs   Ú_any_env.<locals>.<genexpr>ø   s   é € Ð5©u tŒ}˜T×"Ð"«uùs   ‚TF)Úany)rÖ   s   *r-   Ú_any_envrÛ   ö   s+   € ç‹3Ñ5©uÓ5�3Œ3Ð5Š3Ð5ˆ3Ñ5©uÓ5Ó5Ð5r,   c               ó   € V ^8„  d   QhRR/# )r=   r@   rc   r$   )rA   s   "r-   rB   rB   û   s   € ÷ ñ Ð'Fñ r,   c                 ó>   €  \        R/ V B #   \         d     R# i ; i)zT``get_nous_portal_account_info(**kwargs)``, failing closed to ``None`` on any error.Nr$   )r   rž   )Úkwargss   ,r-   Ú_account_info_or_nonerß   û   s'   € ðÜ+Ñ5¨fÑ5Ð5øÜô Úðús   ‚
 �›c               ó    € V ^8„  d   QhRRRR/# ©r=   rU   r   r@   rT   r$   )rA   s   "r-   rB   rB     s   € ÷ Qñ Q�ð QÐ"2ñ Qr,   c                ó¼   € \         V ,          pTP                  R VR,          ;'       d    VR,          '       * 4       \        WP                  VP                  3/ VB # )rY   rW   rX   )r:   Ú
setdefaultrT   r   r   )rU   ÚfieldsÚspecs   &, r-   Ú_stateræ     sN   € Ü�S�>€DØ
×ÑÐ'¨°Õ)9×)[Ð)[À&ÐIZÕB[Ô>[Ô\Ü˜C§¡¨T×-EÑ-EÑPÈÑPÐPr,   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r=   Úweb_cfgrz   Útool_enabledr   ÚmanagedÚweb_gwÚdirect_firecrawlr@   rT   r$   )rA   s   "r-   rB   rB   	  s>   € ÷ ñ Ð+ð ¸4ð È$ð ÐX\ð Ðptð ð  zJñ r,   c                ó\  a € V 3R  lR 4       w  rVpVR8X  g	   V'       d   RpR\        R4      ;'       d    V'       * RTR\        R4      ;'       d    V'       * R\        R4      ;'       g    RWVV09   ;'       d    V'       * R	\        R
4      ;'       d    V'       * R\        R4      /pT;'       d#    VR8H  ;'       d    V'       * ;'       g    RWg09   p	T	;'       gH    VP                  V4      ;'       g/    VP                  V4      ;'       g    VR9   ;'       d	    W‡,          p
\        R\        T;'       g    \	        VP                  4       4      4      \        T;'       d    T
4      Y‘T;'       g    T;'       g    T;'       g    R\        T;'       g    T;'       g    T4      R7      # )c              3  óX   <"  € T F  p\        SP                  V4      4      x € K!  	  R # 5iri   ©r�   rH   )rr   Úkrè   s   & €r-   rs   Ú_web_feature.<locals>.<genexpr>  s&   øé € ð  0AÑOÈ!´°g·k±kÀ!³n×0EÐ0EÓOùs   ƒ'*rN   r/   ÚexaÚEXA_API_KEYÚparallelÚPARALLEL_API_KEYÚtavilyÚTAVILY_API_KEYÚ
perplexityÚPERPLEXITY_API_KEYÚsearxngÚSEARXNG_URLr.   r    ©rV   rW   rX   rZ   r[   r\   )ÚbackendÚsearch_backendÚextract_backend)rö   rø   )rÛ   rH   ræ   r   rÚ   Úvalues)rè   ré   rê   rë   rì   rý   rþ   rÿ   ÚdirectÚweb_managedrW   s   f&&&&      r-   Ú_web_featurer  	  s·  ø€ ô 0AÑOó  0AÑ,€G˜_à�&ÔŸFØˆð 	Œx˜Ó&×5Ð5¨v¬:ØÐ%Ø”HÐ/Ó0×?Ð?¸´ZØ”8Ð,Ó-×gÐg°¸gÐWfÐ=gÑ1g×wÐwÐqwÔmwØ”hÐ3Ó4×CÐC¸V¼Ø”8˜MÓ*ð€Fð ÷ jð jØ	�KÑ	×	8Ð	8Ð(8Ô$8×hÐh¸VÈÐGhÑ=hð à÷  [ð  [˜FŸJ™J wÓ/÷  [ð  [°6·:±:¸nÓ3M÷  [ð  [ÐRaÐe}ÑR}÷  SZð  SZð  CIõ  CZ€FÜØœ˜g×=Ð=¬¨V¯]©]«_Ó)=Ó>ÄtÈL×LcÐLcÐ]cÓGdØ#Ø ×KÐK N×KÐK°o×KÐKÈÜ  ×!MÐ!M¨N×!MÐ!M¸oÓNô	ð r,   c               ó    € V ^8„  d   QhRRRR/# ©r=   ry   rz   r@   rL   r$   )rA   s   "r-   rB   rB   $  s   € ÷ Fñ FÐ"3ð F¸ñ Fr,   c                óª   € ^ RI HpHpHpHp \        V R4      pVRVRVR/P                  V! VP                  R4      VP                  R4      4      4      # )zèPartner the image request is dispatched to (``"FAL"``, ``"Krea"`` or ``"Nous Portal"``);
``None`` when a direct vendor owns it. Reads the stored values the way the runtime dispatcher
does, so the label and the route cannot disagree.)ÚFALÚKREAÚPORTALÚmanaged_router0   r  ÚKreazNous Portalr�   rƒ   )Útools.image_generation_managedr  r  r	  r
  r~   rH   )ry   r  r  r	  r
  r>   s   &     r-   Úmanaged_image_partnerr  $  sU   € ÷ PÓOä�v˜{Ó+€GØ�˜˜f f¨mÐ<×@Ñ@Ù�g—k‘k *Ó-¨w¯{©{¸7Ó/CÓDóFð Fr,   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r=   rU   r   ré   r   r  rê   ÚselectedrL   r@   rT   r$   )rA   s   "r-   rB   rB   /  s8   € ÷ ñ �cð ¨ð °tð Àdð ÐVcð Ðhxñ r,   c           
     ó$  € T;'       d    T;'       d    V'       * pVR9  g   Vf   V'       d   RpMV'       g   VR8X  d   RMRp\        T \        T;'       g    T4      \        T;'       d    T;'       g    T4      YQTVR J;'       g    TR7      # )NrN   r  zNous Subscriptionr    rü   )NrN   )ræ   r   )rU   ré   r  rê   r  Úfal_managedr   s   &&&&&  r-   Ú_fal_featurer  /  sŒ   € à×9Ð9 7×9Ð9°6¬z€KØ�~Ô%¨(Ò*:¿vØ‰ç(3°xÀ6Ô7IÑ#ÐPRˆÜØ”t˜G×-Ð- vÓ.´t¸L×<dÐ<dÈk×NcÐNcÐ]cÓ7eØ#ÐTYØ$¨DÐ0×:Ð:°Fôð r,   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r=   Úcfgrz   rE   r   Úgwr   r@   r$   )rA   s   "r-   rB   rB   =  s/   € ÷ Mñ MÐ*ð M°Sð M¸dð MÀsñ Mr,   c                ór   € \        V P                  R 4      V4      pVR8X  g	   V'       d   R# T;'       g    T# )r�   rN   rÀ   rï   )r  rE   r  r�   s   &&& r-   Ú_audio_providerr  =  s3   € Ü�S—W‘W˜ZÓ(¨'Ó2€HØ  FÔ*¯bˆ8ÐL¸×8KÐ8KÀGÐLr,   c               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r=   Útts_cfgrz   Ústt_cfgÚtts_tool_enabledr   rê   údict[str, bool]r  zdict[str, Optional[str]]rD   r@   z)tuple[NousFeatureState, NousFeatureState]r$   )rA   s   "r-   rB   rB   B  sF   € ÷ $ñ $Øð$Ø):ð$ØNRð$àð$à(@ð$àO^ð$ð /ñ$r,   c                óì  € VR ,          VR,          rv\        V RV4      p\        VRV4      p	\        \        4       4      p
T
;'       d    V'       * T
;'       d    V'       * rË\        RRRRRVR ,          ;'       g    TR\        R4      ;'       d    V'       * R	\        R
4      /P	                  VR4      4      p\        R T\        T;'       d    T4      T;'       d&    VR8H  ;'       d    VR ,          ;'       d    V'       * T\        R V4      VR ,          RJ;'       d    VR ,          R8g  R7      p\        R\        4       ;'       d    V'       * RVR,          ;'       g    TR\        R4      ;'       d    V'       * R	\        R
4      ;'       d    V'       * /P	                  V	R4      4      p\        RYÿRV	R8H  ;'       d    VR,          ;'       d    V'       * \        RV	4      VR,          RJR7      pVV3# )r4   r6   r¿   r¹   TrÅ   rÀ   rÁ   ÚELEVENLABS_API_KEYrÄ   ÚMISTRAL_API_KEYFNrü   rÇ   ÚGROQ_API_KEY)rV   rW   rZ   rX   r[   r\   )r  r   r   rÛ   rH   ræ   rÍ   rÔ   )r  r  r  rê   r  rD   Útts_gwÚstt_gwÚtts_currentÚstt_currentÚ	audio_keyÚdirect_openai_ttsÚdirect_openai_sttÚtts_availabler4   Ústt_availabler6   s   &&&&&&           r-   Ú_audio_featuresr*  B  sï  € ð ! Õ'¨°UÕ);ˆFô " '¨6°6Ó:€KÜ! '¨7°FÓ;€KäÔ1Ó3Ó4€IØ+4×+CÐ+C¸V¼ÀY×E]ÐE]ÐW]ÔS]Ð(ÜØ��h  h°¸µ×0SÐ0SÐBSØ”hÐ3Ó4×CÐC¸V¼ÀYÔPXÐYjÓPkð÷ 
�cˆ+�uÓó€Mô Ø˜¬tÐ4D×4VÐ4VÈÓ/WØ(×qÐq¨[¸HÑ-D×qÐqÈÐQVÍ×qÐqÐ`qÔ\qØ(¼?È5ÐR]Ó;^à$ U�O°4Ð7×UÐU¸HÀU½OÈvÑ<Uô€Cô ØÔ-Ó/×>Ð>¸´JÀÈ'ÐRWÍ.×JmÐJmÐ\mØ”˜Ó(×7Ð7°¬Z¸ÄHÐM^ÓD_×DnÐDnÐhnÔdnð÷ 
�cˆ+�uÓó€Mô Ø˜ÈdØ# xÑ/×\Ð\°G¸EµN×\Ð\ÐK\ÔG\Ü(¨°Ó<ÐRZÐ[`ÕRaÐimÐRmô€Cð
 �ˆ8€Or,   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r=   Úbrowser_cfgrz   ré   r   rê   r  rL   Ú
browser_gwrì   r@   rT   r$   )rA   s   "r-   rB   rB   i  sH   € ÷ %ñ %Ø"ð%Ø26ð%ØAEð%ØQ^ð%Ølpð%ð EIð%àñ%r,   c                óÀ  € RV 9   p\        V'       d   V P                  R4      MR4      pVR8X  g	   V'       d   Rp\        R4      ;'       d    VRJ ;'       g    VR8H  p\        \	        R4      ;'       d    \	        R4      4      ;'       d    V'       * p	\        R	4      ;'       d    V'       * p
\        4       p\        4       p\        T;'       d    T;'       d    T;'       d    V
'       * 4      pV'       dc   RTR
T;'       d    T	RT;'       d    T;'       g    T
RT;'       d    T/pW~9   d   TMRp\        VP                  Wü4      4      pVR8X  d   TMRpMVV'       d   RRRpppMGV'       g	   V
'       d   R\        V4      TpppM'V	'       d   R
\        V4      RpppMR\        V4      Rppp\        RT\        T;'       d    T4      VV\        RV4      VR7      # )zBResolve browser availability using the same precedence as runtime.Úcloud_providerNrN   r8   ÚCAMOFOX_URLr½   ÚBROWSERBASE_API_KEYÚBROWSERBASE_PROJECT_IDÚBROWSER_USE_API_KEYrº   r/   r¹   FTr7   rü   )	r   rH   rÛ   r   r   r²   r¸   ræ   rÍ   )r,  ré   rê   r  r-  rì   Úexplicitr�   Údirect_camofoxÚdirect_browserbaseÚdirect_browser_useÚlocal_availableÚlocal_runnableÚbrowser_use_managedÚcloud_availableÚcurrentrV   Úmanaged_nows   &&&&&&            r-   Ú_browser_featurer>  i  sì  € ð   ;Ñ.€HÜ/×U]°·±Ð@PÔ0QÐcgÓh€HØ�6ÔŸZØ ˆä˜mÓ,×\Ð\°(¸dÐ2B×2[Ð2[ÀhÐR[ÑF[€NÜœmÐ,AÓB×nÐnÄ}ÐUmÓGnÓo÷  Cð  Cð  yCô  uCÐÜ!Ð"7Ó8×KÐKÀ¼^Ðä(Ó*€OÜ,Ó.€NÜ˜|×fÐf°×fÐfÀG×fÐfÐTfÔPfÓgÐçà�~ }°o×6\Ð6\ÐJ\Ø˜?×NÐN°×0MÐ0MÐ;MÐP[Ð]l÷  ^Bð  ^Bð  rBð
ˆð 'Ô9‘(¸wˆÜ˜×,Ñ,¨WÓEÓFˆ	Ø-4¸Ô-EÑ)È5‰ç	Ø*3°T¸5˜K�ˆ˜Kß	×&Ø*7¼¸oÓ9NÐPc˜K�ˆ˜Kß	Ø*7¼¸oÓ9NÐPU˜K�ˆ˜Kà*1´4¸Ó3GÈ˜K�ˆÜØ˜Y¬t°L×4NÐ4NÀYÓ/OÐalØ$´ÀyÐRYÓ7ZÐpxôð r,   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r=   Úterminal_cfgrz   ré   r   rê   Úmanaged_tools_flagr@   rT   r$   )rA   s   "r-   rB   rB   ‘  s7   € ÷ ñ Ð!2ð À$ð ÐQUð Ðkoð ð  uEñ r,   c                ó$  € \        V P                  R 4      R4      p\        V P                  R4      4      p\        4       p\	        WVW#R7      pVR8H  pV'       d
   VR,          MRp	V'       d   V	R9   dH   R	\        V4      rºV	R8H  ;'       d    \        V4      pT;'       d    V	R8H  ;'       d    \        V4      pM-R
;p;rÛ\        RVRV/P                  YR;'       g    T4      4      p
\        RY«YÍY'       d	   RVR7      # T;'       g    RVR7      # )rý   r¹   Ú
modal_mode)Ú
has_directÚmanaged_readyÚmanaged_enabledr9   Úselected_backendNrê   r  TFÚModal)rV   rW   rX   rY   rZ   r[   r\   )rê   r  )r�   rH   r   r   r   r   ræ   )r@  ré   rê   rA  Úterminal_backendrC  Údirect_modalÚmodal_stateÚis_modalr  rV   rW   r=  rY   s   &&&&          r-   Ú_modal_featurerM  ‘  s  € Ü˜\×-Ñ-¨iÓ8¸'ÓBÐÜ% l×&6Ñ&6°|Ó&DÓE€JÜ/Ó1€LÜ-¨jÐahô  N€KØ 7Ñ*€H÷ 3;ˆ{Ð-Ö.À€Hß�xÐ#8Ô8Ø ¤$ |Ó"4�6Ø )Ñ+×BÐB´°\Ó0BˆØ"×RÐR x°8Ñ';×RÐRÄÀ\Ó@R‰à16Ð6ˆÐ6�oÜ˜) W¨h¸ÐE×IÑIÈ*×VmÐVmÐamÓnÓoˆ	ÜØ˜9À[Ø$Æ(°wØ$ôð àP`×PkÐPkÐdkØ$ôð r,   Úforce_freshc               ó$   € V ^8„  d   QhRRRRRR/# )r=   ry   úOptional[dict[str, object]]rN  r   r@   r^   r$   )rA   s   "r-   rB   rB   ¨  s(   € ÷ 2ñ 2Ð+Fð 2Ð_cð 2ð  qIñ 2r,   c               óš  aaaaa€ V f   \        4       ;'       g    / p \        V 4      p\        R/ V'       d   RR/M/ B p\        T;'       d    VP                  4      pT;'       d    VP
                  pR Uu/ uF  qf\        W4      bK  	  upo\        P                  4        UUUu/ uF  w  pw  rxV\        \        W4      V4      bK   	  upppoSP                  4        UU	u/ uF
  w  riWiR	8H  bK  	  up	po\        P                  4        UU
u/ uF}  w  rjTT;'       dn    \        V
P                  4      ;'       dQ    VP                  V
P                  4      ;'       d.    SP!                  V4      R J ;'       g    SP!                  VR
4      bK  	  up
po\#        RR4      ;'       d    SR,          '       * p\%        4       o\'        \        V R4      \        V R4      SR,          SSS4      w  rÍR VVVVV3R llpR\)        \        V R4      SR,          SR,          SR,          V4      RV! R4      RV! R4      RVRVR\+        \        V R4      SR,          SR,          SR,          SR,          V4      R\-        \        V R4      SR,          SR,          V4      /p\/        T;'       g    TVW/VR7      # u upi u upppi u up	pi u up
pi )NrN  Tr.   r0   r2   r4   r7   ÚterminalrN   FÚFIRECRAWL_API_KEYÚFIRECRAWL_API_URLr6   c               ó    € V ^8„  d   QhRRRR/# rá   r$   )rA   s   "r-   rB   Ú4get_nous_subscription_features.<locals>.__annotate__É  s   € ÷ uñ u�#ð uÐ*ñ ur,   c                óx   <€ \        T SV ,          S;'       d    SV ,          '       * SV ,          SV ,          4      # ri   )r  )rU   ÚenabledÚfal_configuredrê   r  rD   s   &€€€€€r-   Ú_falÚ,get_nous_subscription_features.<locals>._falÉ  s9   ø€ Ü˜C ¨¥¨~×/VÐ/VÀkÐRUÕFVÔBVÐX_Ð`cÕXdÐfnÐorÕfsÓtÐtr,   r9   )r_   r`   ra   rb   rd   r$   )r.   r0   r2   r4   r7   rR  )r	   r‘   rß   r   Ú	logged_inÚtool_gateway_entitledr§   r†   ru   rR   r~   r:   r   r   Útool_gateway_entitled_forr   rH   rÛ   r   r*  r  r>  rM  r^   )ry   rN  ra   rd   r`   rA  rU   rˆ   r‰   rQ   rå   rì   r4   r6   rZ  rb   rX  rY  rê   r  rD   s   &$              @@@@@r-   Úget_nous_subscription_featuresr_  ¨  sâ  ü€ Ø‚~Ü“×$Ð$ "ˆÜ(¨Ó0ÐÜ(ÑZÇ[¨]¸DÑ,AÐVXÑZ€Lô ˜\×DÐD¨l×.DÑ.DÓEÐØ*×QÐQ¨|×/QÑ/QÐÙ=|Ó}Ñ=|°cÔ$ VÓ1Ò1Ñ=|Ñ}€Gô *A×)FÑ)FÔ)Hõá)HÑ%ˆCÑ%�+ð 	Ô¤¨Ó =¸uÓEÒEÙ)Hó€Hð ;C¿.¹.Ô:JÔKÑ:J©J¨C�3 ™Ò'Ñ:JÒK€Kô #Ÿ™Ô*ôñ +‰IˆCð 	Ø÷ Kð KÔ#@ÀÇÁÓ#N÷ Kð KØ×6Ñ6°t·}±}ÓE÷Kð Kà—‘˜cÓ" dÐ*×IÐI¨k¯o©o¸cÀ5Ó.Iò	Kñ
 +ò€Gô  Ð 3Ð5HÓI×dÐdÐR]Ð^cÕRdÔNdÐÜ*Ó,€NÜœx¨°Ó6¼ÀÈÓ8OÐQXÐY^ÕQ_ÐahÐjrÐtó  A�H€C÷uô uð 	Œ|œH V¨UÓ3°W¸Uµ^ÀWÈUÅ^ÐU`ÐafÕUgÐiyÓzØ‘T˜+Ó&Ø‘T˜+Ó&ØˆsØˆsØÔ#Ü�V˜YÓ'¨°Õ);¸WÀYÕ=OÐQYÐZcÕQdÐfqÐr{Õf|ð  Oó
ð 	”¤¨°Ó <¸gÀjÕ>QÐSZÐ[bÕScÐewÓxð
€Hô $Ø#×8Ð8Ð'8ÐL]Ø)È<ôð ùòM ~ùôùó Lùós0   Á9J5Â($J:Ã$KÄKÄ KÄ="KÅ KÅ;Kc               ó    € V ^8„  d   QhRRRR/# )r=   rU   r   r@   r   r$   )rA   s   "r-   rB   rB   Ý  s   € ÷ zñ z Sð z¨Tñ zr,   c                óŽ   € \        V R9   ;'       d    \        4       4      ;'       g    \        \        V ,          P                  !  # )r4   )r4   r6   )r   r   rÛ   r:   r#   )rU   s   &r-   Ú_has_managed_default_directrb  Ý  s8   € Ü��~Ñ%×HÐHÔ*FÓ*HÓI×yÐyÌXÔW`ÐadÕWe×WxÑWxÑMyÐyr,   c               ó    € V ^8„  d   QhRRRR/# r  r$   )rA   s   "r-   rB   rB   á  s   € ÷ ,ñ ,Ð 1ð ,ÀMñ ,r,   c                ó’   € \        V R4      P                  R4      '       g    V'       d   VP                  R4      '       g   R# \        # )z|Krea 3 for accounts entitled to Krea when no image model is stored; the free pool is not
entitled and keeps the FAL default.r0   rƒ   ÚkreaN)r~   rH   r^  Ú MANAGED_IMAGE_DEFAULT_KREA_MODEL)ry   rd   s   &&r-   Ú_krea_image_defaultrg  á  s8   € ô �˜Ó$×(Ñ(¨×1Ò1¿,È<×KqÑKqÐrx×KyÒKyÙÜ+Ð+r,   Úenabled_toolsetsc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r=   ry   rz   rh  zOptional[Iterable[str]]rN  r   r@   úset[str]r$   )rA   s   "r-   rB   rB   é  s4   € ÷ ñ Ð(9ð ÐPgð ð  ~Bð ð  OWñ r,   c               ó’  € \        WR 7      pVP                  pV'       d7   VP                  '       d%   VP                  '       d   VP                  '       g   \        4       # \        T;'       g    R4      p\        4       p\         F  p\        W4       K  	  \         FŽ  pVP                  V,          P                  '       g   \        V4      '       d   K9  VR8X  d+   \        4       '       g   VP                  R4      '       g   Ki  MWu9  d   Kr  \        W4       VP                  V4       K�  	  R F‘  w  rxWu9   g   K  \        4       '       d   K  Ve   VP                  V4      '       g   K<  Rp	VR8X  d/   VP                  V,          P                  '       g   \!        W4      p	\        WV	R7       VP                  V4       K“  	  V# )©rN  r6   r5   r0   N©rƒ   r$   ))r0   N)r2   r3   )r_  rd   r\  r]  ra   rš   Ú_DEFAULT_SECTIONSr�   rb   r\   rb  rÔ   r^  rŠ   Úaddr   rg  )
ry   rh  rN  rb   rd   Úselected_toolsetsÚchangedrU   Úcategoryrƒ   s
   &$$       r-   Úapply_nous_managed_defaultsrs  é  s}  € Ü-¨fÔN€HØ×(Ñ(€Lß˜\×3×3Ð3¸×8Z×8ZÐ8ZÐ_g×_x×_xÐ_xÜ‹uˆäÐ,×2Ð2°Ó3ÐÜ›€Gß ˆÜ˜Ö$ñ !ç ˆØ×Ñ˜SÕ!×5×5Ð5Ô9TÐUX×9YÒ9YÙØ�%Œ<ô ,×-Ò-°\×5[Ñ5[Ð\j×5kÒ5kÙð 6làÔ)ÙÜ�VÔ!Ø�‰�CÖñ !ó K‰ˆØÖ#Ô,A×,CÔ,CÈÒIYÐ]i÷  ^Dñ  ^Dð  EM÷  ^Nô  ^NØˆEØ�kÔ!¨(×*;Ñ*;¸CÕ*@×*T×*TÐ*TÜ+¨FÓA�Ü˜¨EÕ2Ø�K‰K˜Öñ Kð €Nr,   c               ó   € V ^8„  d   QhRR/# )r=   r@   r  r$   )rA   s   "r-   rB   rB     s   € ÷ ñ ¨ñ r,   c                 ó6  € \        4       p \        \        4       4      pR\        RRRRRRR4      R	T R
T RT;'       g    \        R4      RT;'       g    \        RR4      R\        RR4      ;'       g(    \        \	        R4      ;'       d    \	        R4      4      /# )zØtool_key -> has_direct_credentials. Env-configured keyless local backends (SearXNG, CAMOFOX_URL)
count as configured so they are never classified "unconfigured" and pre-checked; Whisper shares
the audio key with TTS.r.   rS  rT  rõ   r÷   rù   ró   rû   r0   r2   r4   r  r6   r   r  r7   r3  r0  r1  r2  )r   r   r   rÛ   r   )Ú
fal_directÚaudio_directs     r-   Ú_get_gateway_direct_credentialsrx    s¶   € ô 'Ó(€JÜÔ4Ó6Ó7€LàŒxÐ+Ð-@ÐBTÐVfÐh|ð  Lð  N[ó  \ð 	�ZØ�ZØˆ|×=Ð=œxÐ(<Ó=Øˆ|×JÐJœx¨Ð8IÓJØÜÐ*¨MÓ:÷ fð fÜ”MÐ"7Ó8×dÐd¼]ÐKcÓ=dÓeðð r,   c               ó$   € V ^8„  d   QhRRRRRR/# )r=   ry   rP  rN  r   r@   z1tuple[list[str], list[str], list[str], list[str]]r$   )rA   s   "r-   rB   rB   $  s-   € ÷ Jñ JÐ'Bð JÐ[_ð Jð  m^ñ Jr,   c               óì  € \        VR7      pV'       d%   VP                  '       d   VP                  '       g   . . . . 3# V f   \        4       ;'       g    / p \	        V 4      '       g   . . . . 3# \        4       p. . . . 3w  rErg\         Fç  pVP                  \        V,          P                  4      '       g   K1  \        V,          w  rš\        V P                  V	4      V
4      p\        V P                  V4      4      '       d   VP                  V4       KŽ  Ve   VR8w  d   VP                  V4       K¬  VP                  V4      '       d   VP                  V4       KÖ  VP                  V4       Ké  	  WEWg3# )a  (unconfigured, has_direct, explicit_configured, already_managed) tool key lists: no credentials
and no explicit non-nous selection (safe to pre-check) / own API keys / explicit non-nous selection
stored (e.g. keyless SearXNG) even with nothing to detect / ``use_gateway`` explicitly set.rl  rN   )rß   r\  r]  r	   r‘   rx  Ú_ALL_GATEWAY_KEYSr^  r:   r   r†   rR   rH   rI   Úappend)ry   rN  rd   r  ÚunconfiguredrD  r\   Úalready_managedrU   rˆ   r‰   r  s   &$          r-   Úget_gateway_eligible_toolsr  $  s;  € ô
 )°[ÔA€Lß˜\×3×3Ð3¸×8Z×8ZÐ8ZØ�2�r˜2ˆ~ÐØ‚~Ü“×$Ð$ "ˆÜ˜V×$Ò$Ø�2�r˜2ˆ~ÐÜ,Ó.€FØEGÈÈRÐQSÀ^ÑB€LÐ1ß ˆà×5Ñ5´iÀµn×6MÑ6M×NÒNÙÜ4°SÕ9ÑˆÜ% f§j¡j°Ó&=¸uÓEˆÜ˜Ÿ™ C›×)Ò)Ø×"Ñ" 3Ö'ØÒ! h°&Ô&8Ø×&Ñ& sÖ+Ø�Z‰Z˜�_Š_Ø×Ñ˜cÖ"à×Ñ Ö$ñ !ð Ð%8ÐIÐIr,   c               ó$   € V ^8„  d   QhRRRRRR/# )r=   ry   rz   Ú	tool_keysz	list[str]r@   rj  r$   )rA   s   "r-   rB   rB   C  s#   € ÷ ñ Ð#4ð Àð Ðbjñ r,   c           	     óÜ   € \          F  p\        W4       K  	  \         Uu. uF  q3V9   g   K  VNK  	  ppV F"  p\        YVR8X  d   \	        W4      MRR7       K$  	  \        V4      # u upi )zYStore the managed selection for ``tool_keys``; returns the set of tools actually changed.r0   Nrm  )rn  r�   r{  rŠ   rg  rš   )ry   r�  rd   rU   rq  s   &&&  r-   Úapply_gateway_defaultsrƒ  C  sg   € ç ˆÜ˜Ö$ñ !å/ÓDÑ/�s¸)Ñ3C�sˆsÑ/€GÐDÛˆÜ�VÐUXÐ\gÔUgÔ(;¸FÔ(QÐmq×rñ äˆw‹<Ðùò Es
   ¡A)®A)c               ó$   € V ^8„  d   QhRRRRRR/# )r=   ry   rz   rN  r   r@   rj  r$   )rA   s   "r-   rB   rB   M  s#   € ÷ 3ñ 3Ð'8ð 3È$ð 3ÐZbñ 3r,   c               ó4  € \        WR7      w  r#rEV'       g   V'       g   \        4       #  ^ RIHp \        RR7      p\        T;'       dC    TP                  RJ;'       d-    TP                  RJ;'       d    TP                  P                  4      pT'       d   RMRp	T P                  R4      p
\        T
\        4      '       d   T
 Uu0 uF  p\        T4      kK  	  upM	\        4       p\        T4      \        T4      ,           pT Uu. uF  p\        T,          NK  	  upT Uu. uF*  p\        T,           R	\        T,          P                    2NK,  	  up,           p\#        T4       UUu. uF  w  rûY¼9  g   K  TNK  	  pppT'       d   R
MRp T! TTT4      pT Uu. uF)  p^ Tu;8:  d   \-        T4      8  g   K  M K!  Yß,          NK+  	  ppT Uu. uF  q»T9  g   K  Y¼9  g   K  TNK  	  ppT'       g   T\        T4      ,          '       d/   \/        T\        T4      ,          \        T4      ,
          4      T R&   T'       d   \1        T TT4      M	\        4       pT'       g	   T'       dF   ^ RIHp T! T 4       \/        T4       F(  p\7        R\        P                  TT4       RT	 24       K*  	  T#   \         d    \        4       u # i ; iu upi u upi u upi u uppi   \$        \&        \(        \*        3 d    \        4       u # i ; iu upi u upi )a  If eligible tools exist, show a per-tool checklist to route them through the Tool Gateway.
Triggered by a live free pool or paid access; explicit_configured tools (e.g. ``web.backend:
searxng``) are configured on purpose and never offered, like already_managed.rl  )Úprompt_checklistFTNzfree tool poolzNous subscriptionÚtool_gateway_declined_toolsu    â€” keep using your u6   Your free Nous tool pool â€” pick the tools to enable:uN   Your Nous subscription includes the Tool Gateway â€” pick the tools to enable:)Úsave_configu     âœ“ z: enabled via )r  rš   Úhermes_cli.setupr†  rž   rß   r   Úpaid_service_accessÚtool_accessrX  rH   rF   rœ   r   Ú_GATEWAY_TOOL_LABELSr:   r"   Ú	enumerateÚKeyboardInterruptÚEOFErrorr±   Ú
SystemExitÚlenÚsortedrƒ  Úhermes_cli.configrˆ  Úprint)ry   rN  r}  rD  Ú	_explicitÚ_managedr†  rd   Ú	pool_onlyÚsource_labelÚdeclined_rawrð   ÚdeclinedÚ
offer_keysÚlabelsÚiÚpre_selectedÚtitleÚ
chosen_idxÚchosen_keysÚnewly_declinedrq  rˆ  rU   s   &$                      r-   Úprompt_enable_tool_gatewayr£  M  sÞ  € ô 5OÈvÔ4oÑ1€L˜iß§
Ü‹uˆðÝ5ô )°UÔ;€LÜØ÷  	Tð  	T˜×9Ñ9ÀÐE÷  	Tð  	TÈ,×JbÑJbÐjnÐJn÷  	Tð  	TÐs÷  tLñ  tL÷  tTñ  tTó€I÷ (1Ñ#Ð6I€Lð —:‘:Ð;Ó<€LÜ;EÀlÔTX×;YÒ;Y©,Ó7©, Qœ#˜až&©,Ò7Ô_bÓ_d€HÜ  Ó.´°jÓ1AÕA€JÙ/;Ó<©|¨!Ô" 1×%Ð%©|Ñ<Ù^hó@Ù^hÐYZÔ Õ"Ð
#Ð#8¼À1½×9RÑ9RÐ8SÓTÑ^hñ@õ €Fô #,¨LÔ"9ÔOÑ"9™$˜!¸QÑ=N—A�AÑ"9€LÑOçDMÑ@Ø]ð 
ðÙ% e¨V°\ÓBˆ
ñ +5ÓQ©* Q¸¸QÖ8PÄÀZÃÑ8P”=Ñ8P‘=�:—=�=©*€KÐQñ ".Ó\¡˜A¸+Ñ1E”aÈ!ÑJ[—a�a¡€NÐ\ß˜(¤S¨Ó%5×5Ô5Ü06¸Ä3À~ÓCVÕ8VÔZ]Ð^iÓZjÕ7jÓ0kˆÐ,Ñ-ßKVÔ$ V¨[¸,ÔGÔ\_Ó\a€Gß—.Ý1á�FÔÜ˜'–?ˆCÜ�FÔ/×3Ñ3°C¸Ó=Ð>¸nÈ\ÈNÐ[Ö\ñ #à€NøôU ô Ü‹uŠðüò 8ùâ<ùò @ùó Pøô œx¬´*Ð=ô Ü‹uŠðüâQùò ]se   «J5 Ã	KÄ	KÄ%0KÅ,
KÅ;KÆ
K% ÆLÆ>LÇLÇLÇ!LÇ)LÊ5KËKË%%LÌLÚ
capabilityzthe Nous Tool GatewayÚcoverage_categoryc               ó$   € V ^8„  d   QhRRRRRR/# )r=   r¤  r   r¥  rL   r@   r   r$   )rA   s   "r-   rB   rB   †  s#   € ÷ ñ ¨Sð Ð_lð Ðx|ñ r,   c                óR  a€ R V3R llp\        RR7      pV! V4      '       g7   Ve   VP                  '       g!   \        V R7      '       g   R# \        RR7      pV! V4      '       d   R# \        W0SR7      pT;'       g    RP	                  4        F  p\        R	V 24       K  	  R# )
ud  Make sure the user is entitled to the Nous Tool Gateway, logging in if needed.

Only performs the device-code OAuth (when not logged in) and refreshes entitlement â€” no model
or provider switch. Entitlement is paid access OR a live free pool; with ``coverage_category``
the pool must cover that category (a pool user selecting ``"fal-video"`` is denied).
c               ó   € V ^8„  d   QhRR/# r©   r$   )rA   s   "r-   rB   Ú/ensure_nous_portal_access.<locals>.__annotate__Ž  s   € ÷ Hñ H˜dñ Hr,   c                óR   <€ V f   R# Se   V P                  S4      # V P                  # )NF)r^  r]  )Úaccountr¥  s   &€r-   Ú	_entitledÚ,ensure_nous_portal_access.<locals>._entitledŽ  s<   ø€ ØŠ?ÙØGXÒGdˆw×0Ñ0Ð1BÓCð  	HÐjq÷  kHñ  kHð  	Hr,   Trl  )r¤  F)r¤  r¥  r    ú  )rß   r\  Ú_run_nous_portal_login_onlyr   Ú
splitlinesr”  )r¤  r¥  r¬  ÚinfoÚmessageÚlines   $d    r-   Úensure_nous_portal_accessr´  †  s‹   ø€ ÷Hð Hô
 !¨TÔ2€DÙ�T�?Š? ¢°D·N·N°NÜ*°j×AÓAÙÜ$°Ô6ˆÙ�‡‚Ùä4°TÐduÔv€GØ—�˜B×*Ñ*Ö,ˆÜ��4�&ˆkÖñ -ár,   c               ó    € V ^8„  d   QhRRRR/# )r=   Úpromptr   r@   zOptional[bool]r$   )rA   s   "r-   rB   rB   ¡  s   € ÷ ñ �Sð ˜^ñ r,   c                óˆ   €  \        V 4      P                  4       P                  4       R9   #   \        \        3 d     R# i ; i)zNY/n prompt: True on yes/blank, False on anything else, ``None`` on EOF/Ctrl-C.N>   r    ÚyÚyes)ÚinputrO   rP   r�  rŽ  )r¶  s   &r-   Ú_confirmr»  ¡  sA   € ðÜ�V‹}×"Ñ"Ó$×*Ñ*Ó,Ð0@Ñ@Ð@øÜÔ'Ð(ô Úðús   ‚), ¬AÁ Ac               ó    € V ^8„  d   QhRRRR/# )r=   r¤  r   r@   r   r$   )rA   s   "r-   rB   rB   ©  s   € ÷ 8ñ 8¨sð 8°tñ 8r,   c           	     ó<  a€  ^ RI Hp \        4        \        RT  R24       \	        R4      pTf   \        4        R# T'       g   \        R4       R#  TP                  4       ;_uu_ 4        TP                  4       P                  R	4      pRRR4       Rp^ R
IH	p TP                  4       pT'       d0   T! T4      '       g"   \	        R4      RJd   TP                  RR7      pTf   TP                  4       p^ RIHp ^ RIHp	Ho T	! 4       ;_uu_ 4       p
TP                  4       ;_uu_ 4        TP                  4       pTP#                  TRT4       X'       d   YKR	&   MTP%                  R	R4       TP'                  T4       RRR4       TP)                  T4       RRR4       TP+                  4        T! T4       \        R4       T3R lX
P,                   4        F  p\        RT 24       K  	  R#   \         d   p\        RT 24        Rp?R# Rp?ii ; i  + '       g   i     EL–; i  + '       g   i     L´; i  + '       g   i     L®; i  \.         d    \        R4        R# \0         d     R# \         d   p\        RT 24        Rp?R# Rp?ii ; i)z¼Run the Nous Portal device-code OAuth and persist credentials only (no model selection, no
provider switch, no Tool Gateway bulk prompt). ``False`` if the user declined or the flow failed.)Úauthz%  Could not start Nous Portal login: NFr®  z requires a Nous Portal login.z$  Log in to Nous Portal now? [Y/n]: z  Skipped Nous Portal login.Úactive_provider)Úis_guest_statez=  Found existing Nous OAuth credentials. Import them? [Y/n]: g      .@)Útimeout_seconds)Úsettle_after_upgrade)ÚdeferredÚresult_linesrN   z  Nous Portal login successful.c              3  óD   <"  € T F  pS! V4       F  q"x € K  	  K  	  R # 5iri   r$   )rr   Úviewr³  rÄ  s   &  €r-   rs   Ú._run_nous_portal_login_only.<locals>.<genexpr>Ö  s   øé € ÐU¡o˜dÁ,ÈtÖBT¸$”TÑBT‘T£oùs   ƒ Tz
  Login cancelled.z  Nous Portal login failed: )Ú
hermes_clir¾  rž   r”  r»  Ú_auth_store_lockÚ_load_auth_storerH   Úhermes_cli.anon_authrÀ  Ú_read_shared_nous_stateÚ_try_import_shared_nous_stateÚ_nous_device_code_loginrÂ  Úhermes_cli.guest_handoffrÃ  rÄ  Ú_save_provider_stater‡   Ú_save_auth_storeÚ_write_shared_nous_stateÚ_sync_nous_pool_from_auth_storeÚresultsrŽ  r�  )r¤  r¾  ÚexcÚproceedÚprior_active_providerÚ
auth_staterÀ  ÚsharedrÂ  rÃ  ÚhandoffÚ
auth_storer³  rÄ  s   $            @r-   r¯  r¯  ©  s)  ø€ ðÝ#ô 
„GÜ	ˆBˆzˆlÐ8Ð
9Ô:ÜÐ=Ó>€GØ‚ÜŒÙßÜÐ,Ô-Ùð'à×"Ñ"×$Õ$Ø$(×$9Ñ$9Ó$;×$?Ñ$?Ð@QÓ$RÐ!÷ %àˆ
å7à×-Ñ-Ó/ˆß™.¨×0Ò0´XÐ>}Ó5~ð  GLó  6LØ×;Ñ;ÈDÐ;ÓQˆJØÒØ×5Ñ5Ó7ˆJÝ=ßCÙ�ZŒZ˜7Ø×&Ñ&×(Õ(Ø!×2Ñ2Ó4�
Ø×)Ñ)¨*°f¸jÔIß(Ø4IÐ0Ò1à—N‘NÐ#4°dÔ;Ø×%Ñ% jÔ1÷ )ð ×)Ñ)¨*Ô5÷ ð 	×,Ñ,Ô.Ù˜ZÔ(ÜÐ/Ô0ÜU g§o¢oÖUˆDÜ�B�t�f�+Öñ VáøôU ô ÜÐ5°c°UÐ;Ô<Ýûðú÷ %×$Ð$ú÷ )×(ú÷ �Zûô  ô ÜÐ$Ô%ÚÜô âÜô ÜÐ,¨S¨EÐ2Ô3Ýûðúsž   ƒG1 ÁI Á+ HÂ'I Â3I ÃAI ÄH?Ä,AH,	Æ H?ÆAI Ç1HÇ<HÈHÈH)	È#	I È,H<È7H?È?I	É
I ÉJÉ+JÉ4JÉ8JÊJÊJÊJ)r.   rý   )rõ   r÷   rù   rS  rT  )r0   r�   )r2   r�   )r4   r�   )r  )r6   r�   )r   r  )r7   r/  )r3  r1  )r.   r4   r6   r7   )r�   ri   )r    )QÚ__conditional_annotations__r)   Ú
__future__r   Údataclassesr   Útypingr   r   r   r   r“  r   r	   Úhermes_cli.nous_accountr
   r   r   Útools.managed_tool_gatewayr   Úutilsr   Útools.tool_backend_helpersr   r   r   r   r   r   r™   r   r:   r*   Útuplerj   ru   r   r;   r   r†   r{  r!   rŒ  rn  rf  rI   rR   rT   r^   r~   r�   rŠ   r�   r‘   r§   r²   r¸   rË   rÍ   rÔ   rÛ   rß   ræ   r  r  r  r  r*  r>  rM  r_  rb  rg  rs  rx  r  rƒ  r£  r´  r»  r¯  )rð   ÚsrÜ  s   00@r-   Ú<module>ræ     s­  øðÜ >å "å !ß 0Ó 0ç 8÷ñ õ EÝ !÷÷ ð $ \Ð2Ð ñ �$Ô÷-ð -ó ð-ð& 
‰<Ø�T˜;¨Ð5GØÐ bØnóð
 ‘Ø˜D %¨Ð6OÐQcÐenóð ‘Ø˜E ;°Ð=VÐXpÐr{óð 
‰<Ø�d˜N¨NÐ<OØ%Ð'>Ð@Wóð 
‰<Ø˜$ °Ð@SØ)Ð+DÐFióð ‰|Ø˜d M°=ÐB_Ø*Ð,TØ6óð
 ‰\Ð+¨U°G¸WÓEð3&€	Ð"ó ñ8 �yÓ!€àOXÏÉÔO`Ô4aÑO`ÁtÀq°Q¿
¹
²]ÑO`Ò4aÐ ! >Ó aØ:C¿/¹/Ô:KÔ_Ñ:K±$°!ÈqÏÍÔ-˜1Ÿo™oÒ-Ñ:KÒ_Ð ÙÐ1Ó2Ð Ù=NÓOÑ=N¸˜9 Q�<×3Ñ3Ò3Ñ=NÑOÐ à4Ð Ø#+Ð  õd÷
Kñ �$Ô÷
&ð 
&ó ð
&ñ �$Ô÷>ð >ó ð>õ 4õ÷!÷1õFõõ6õ?ð  �Ø�} m°]ÀKÐQ\Ø�9˜g ðð ð 
ˆFØ�, ¨l¸FÀJÐPUÐW`ØÐ(¨(°Hðð ð 
ˆGØÐ" F¨N¸IÐGcØÐ'ðð ðÐ õ Zõ
	õ6õ
õQõõ6FõõMõ
$õN%õPñ.2Ðfk÷ 2ð 2õjzõ,ðÐjnð ð  EJ÷ õJñ,JÐbg÷ Jð J÷>ð3ÐQU÷ 3ðrÐ3Jð Ðos÷ õ6÷8ùóC 5bùÛ_ùâOs   Ã,KÄKÄ:KÅK