+
    jHàjÖH  ã                  óž  a€ 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
HtHtHtHt ^ RIHt ^ RIHtHt ^ RIHtHt RP7                  R	 ]R
,           4       4      tR R ltRR/R R lltR R ltR R lt R R lt!R_R R llt"R]"! RRRRR] 2R3R7      R ]"! R R R R!R`R7      R"]"! R"R"R#R$RaR%7      R&]"! R&R&R&R'RbR%7      /t#R(]$R)&   R* R+ lt%R, R- lt&R. R/ lt'R0 R1 lt(R2 R3 lt)R4])R5]'/t*R(]$R6&   R7]R8R9 R:R; R<R= R>]!R?R@ R4]&R5](/]#PW                  4        U Uu/ uF  w  rW3RA lbK  	  upp Ct,R(]$RB&   RC RD lt-RE RF lt.RG RH lt/R?RI /t0R(]$RJ&   RK RL lt1RM RN lt2RO RP lt3RQ RR lt4RS RT lt5RU RV lt6/ ]#PW                  4        U Uu/ uF  w  rWRW,          3RX lbK  	  upp CR8RY R:RZ R>R[ R7R\ R?R] /Ct7R(]$R^&   R# u upp i u upp i )czYPost-setup install hooks and installed-state predicates for `hermes tools` provider rows.)ÚannotationsN)ÚSet)Úprint_errorÚ
print_infoÚprint_successÚprint_warning)Úget_env_value)Ú_cua_driver_install_readyÚinstall_cua_driver)ÚDEFAULT_LOCAL_MODELÚSTT_MODEL_CATALOGú, c              #  óD   "  € T F  q\         8X  d   V R 2MTx € K  	  R# 5i)z
 (default)N)r   )Ú.0Úmodels   & ÚG/home/ubuntu/.hermes/hermes-agent/hermes_cli/tools_config_post_setup.pyÚ	<genexpr>r      s&   é € ð %ÙQkÈÔ%8Ô8€u€gˆZÑ¸eÔCÓQkùs   ‚ Úlocalc               ó    € V ^8„  d   QhRRRR/# )é   ÚlinesÚstrÚreturnÚNone© )Úformats   "r   Ú__annotate__r      s   € ÷ #ñ #˜ð # ñ #ó    c                 ó4   € V  F  p\        RV 24       K  	  R# )z/Print each line as a 4-space-indented info row.ú    N)Ú_print_info)r   Úlines   * r   Ú_info_linesr"      s   € ãˆÜ�d˜4˜&�MÖ"ó r   Úverbose_hintsFc               ó    € V ^8„  d   QhRRRR/# )r   r#   Úboolr   r   r   )r   s   "r   r   r      s   € ÷ ?ñ ?¨dð ?¸tñ ?r   c                ó”   € ^ RI Hp V! 4       e   \        R4       M\        R4       \	        R4       V '       d   \        RR4       R# R# )a  Confirm the Browser Use CLI engine is runnable. It is browser-harness, a core dependency of
Hermes's own venv, so there is nothing to download; a miss means the venv needs a re-sync.
Primary driver engine for EVERY browser backend except Camofox (Firefox-based, no CDP surface).)Ú	_find_cliNz@    Browser Use CLI ready (browser-harness, bundled with Hermes)z?    browser-harness is missing from Hermes's Python environmentz"    Re-sync it with: hermes updatezGLocal Chrome needs remote debugging: chrome://inspect/#remote-debuggingz'Cloud browsers: set BROWSER_USE_API_KEY)Útools.browser_use_clir'   Ú_print_successÚ_print_warningr    r"   )r#   r'   s   $ r   Ú_ensure_browser_use_clir+      s@   € õ 0áƒ{ÒÜÐYÕZäÐXÔYÜÐ8Ô9ßÜÐ]Ø=ö	?ñ r   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r   -   s   € ÷ ^ñ ^ ñ ^r   c                 óÞ   € \        4        ^ RIHp Hp V! 4       pV'       d   \	        RV 24       R# \        R4       \        RV  24       \        P                  R8X  d   \        R4       R# R# )é    )ÚLIGHTPANDA_INSTALL_HINTÚfind_lightpanda_binaryz    Lightpanda found: zF    lightpanda binary not found on PATH, ~/.lightpanda or ~/.local/binr   ÚntzB    Lightpanda has no native Windows build; run Hermes under WSL2.N)	r+   Útools.browser_lightpandar0   r1   r)   r*   r    ÚosÚname)r0   r1   Úlightpanda_bins      r   Ú_post_setup_lightpandar7   -   sZ   € äÔßXá+Ó-€NßÜÐ/°Ð/?Ð@ÖAäÐ_Ô`Ü�dÐ2Ð3Ð4Ô5Ü�7‰7�dŒ?ÜÐ\Ö]ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   Úpost_setup_keyr   r   r   r   )r   s   "r   r   r   <   s   € ÷ ,eñ ,e¨cð ,e°dñ ,er   c                ó„  € \        4         ^ RIHpHpHpHp ^ RIHp T! 4       pT! 4       pT'       g	   T'       d@    T! RR7       T'       d,   T R8X  d%   T! 4       '       g   \        R	4       \        R
R4       R#  ^ RIp	T	P                  RRR7       \        R4       T R8X  d—   \        P                   R8X  d€   \        R4       \"        P$                  ! R4      '       dK   \'        R4      '       d:   \(        P*                  ! \        P,                  RRRR.4      p
\        RT
 24       R# \        RR4       R# R# R#   \         d   p\        RT 24        Rp?R# Rp?ii ; i  \         d    \        RT! 4        24        R# i ; i  \         d,   p\        RT 24       \        RT ,           4        Rp?R# Rp?ii ; i)zMPM owns the driver and Chromium; Termux and Docker own their native payloads.)Ú_browser_install_hintÚ_chromium_installedÚ_running_in_dockerÚ_find_agent_browser)Ú	is_termuxz%    Could not check Chromium status: NF)Úvalidatez5    agent-browser is missing. Install it explicitly: Úagent_browserz5    Chromium is missing but you're running in Docker.z2Pull the latest image to get the bundled Chromium:z6  docker pull ghcr.io/nousresearch/hermes-agent:latestzagent-browserT©Úexplicitz"    agent-browser install failed: z$Retry with: hermes tools post-setup z0    Managed agent-browser and Chromium are readyÚlinuxzCChromium also needs system libraries supplied by your distribution.zapt-getÚ
playwrightz-mzinstall-depsÚchromiumz'Install missing system libraries with: z%System dependency installation guide:zI  https://playwright.dev/python/docs/browsers#install-system-dependencies)r+   Útools.browser_tool_installr;   r<   r=   r>   Úhermes_constantsr?   Ú	Exceptionr*   ÚFileNotFoundErrorr"   ÚpmÚensurer)   ÚsysÚplatformÚshutilÚwhichÚ_module_installedÚshlexÚjoinÚ
executable)r9   r;   r<   r=   r>   r?   ÚexcÚtermuxÚdockerrK   Úcommands   &          r   Ú_post_setup_agent_browserrY   <   s‘  € ô Ôð÷	aó 	aå.ñ
 ‹[€FÙÓ!€Fß—ð	Ù¨Õ/÷ �n¨Ô7Ñ@S×@UÒ@UÜÐRÔSÜÐLØPôRáðÛà
�	‰	�/¨Dˆ	Ô1ô
 ÐEÔFð ˜Ô(¬S¯\©\¸WÔ-DÜÐYÔZÜ�<Š<˜	×"Ò"Ô'8¸×'FÒ'FÜ—j’j¤#§.¡.°$¸ÀnÐV`Ð!aÓbˆGÜÐAÀ'ÀÐKÖLäÐ?Øcöeñ .EÑ(øô; ô ÜÐ>¸s¸eÐDÔEÝûðûô !ô 	ÜÐRÑShÓSjÐRkÐlÔmÚð	ûô ô ÜÐ;¸C¸5ÐAÔBÜÐ:¸^ÕKÔLÝûðús@   ŒD= ½	E$ Á<F	 Ä=E!ÅEÅE!Å$FÆFÆ	F?Æ F:Æ:F?c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   r   k   s   € ÷ 	_ñ 	_˜Tñ 	_r   c                 óŠ   € ^ RI Hp  \        R4       V ! 4       '       d   \        R4       R# \	        R4       \        RR4       R# )r/   ©Úcheck_camofox_availablezMCamofox is an externally managed server; Hermes does not install or start it.z*    Configured Camofox server is reachableNzM    Camofox server is not reachable. Start your server and check CAMOFOX_URL.z7Server setup: https://github.com/jo-inc/camofox-browserzKDocker: docker run -p 9377:9377 -e CAMOFOX_PORT=9377 jo-inc/camofox-browser)Útools.browser_camofoxr]   r"   r)   r*   r\   s    r   Ú_post_setup_camofoxr_   k   s;   € Ý=äÐ_Ô`Ù× Ò ÜÐCÔDÙÜÐbÔcÜÐIØ]ö_r   c               ó   € V ^8„  d   QhRR/# )r   r   Údictr   )r   s   "r   r   r   x   s   € ÷ 8ñ 8ÐPTñ 8r   c                ó   € R V RVRVRVRVRV/# ©ÚmoduleÚextraÚlabelÚ
installingÚ
on_installÚalwaysr   rc   s   &&&&&&r   Ú_python_hookrj   x   s&   € Ø�f˜g u¨g°u¸lÈJØ˜* h°ð8ð 8r   Úfaster_whisperzstt-whisperzfaster-whisperzBInstalling faster-whisper (model ~150MB downloads on first use)...zModel sizes: z)Change via stt.local.model in config.yaml)rh   Ú	kittenttsz2Installing kittentts (~25-80MB model, CPU-only)...Úpiperz	piper-ttszEInstalling piper-tts (~14MB wheel, voices downloaded on first use)...)ri   Úddgsz.Installing ddgs (DuckDuckGo search package)...ra   Ú_PYTHON_POST_SETUP_HOOKSc               ó    € V ^8„  d   QhRRRR/# )r   Úspecra   r   r   r   )r   s   "r   r   r   ‘   s   € ÷ 6ñ 6˜Tð 6 dñ 6r   c                ód  € ^ RI pV R,          p\        RV R,           24        VP                  V R,          .RR7       \        RT R
24       \        . T R,          OT R,          O5!   R#   TP                  \        \
        3 d(   p\        RT RT 24       \        R	4        Rp?R# Rp?ii ; i)zJEnable one Python provider through the application dependency transaction.Nrf   r   rg   re   TrB   z install failed: zRetry with: hermes toolsz0 dependencies ready. Restart Hermes to use them.rh   ri   )	rK   r    Ú	sync_venvÚInstallErrorÚOSErrorÚ
ValueErrorr*   r"   r)   )rq   rK   rf   rU   s   &   r   Ú_post_setup_pythonrw   ‘   sª   € ãà��M€EÜ�$�t˜LÕ)Ð*Ð+Ô,ðØ
�‰�d˜7•m�_¨tˆÔ4ô
 �T˜%˜Ð PÐQÔRÜÐ5��lÕ#Ð5 d¨8¥nÖ5øð �O‰OœW¤jÐ1ô Ü˜˜e˜WÐ$5°c°UÐ;Ô<ÜÐ.Ô/Ýûðús   ¤A, Á,B/ÂB*Â*B/c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   r   ¢   s   € ÷ ,Vñ ,V˜dñ ,Vr   c                 ó†  €  ^ RI Hp  \        V ! 4       P                  R4      4      pV'       d   \        R4       R# \        R4      '       d   \        R4       R# \        R4        ^ R	IH	pH
p ^ R
IHp ^ RIHp T! R^ . ROR7      pT^ 8X  d(   T! 4       '       d   \        R4       R# \        R4       R# T^8X  d6   T! RRR7      pT'       d   T! RT4       \        R4       R# \        R4       R# \        R4       R#   \         d    Rp Læi ; i  \         d%   p\        RT 24       \!        R4        Rp?R# Rp?ii ; i)u  Shared xAI credential bootstrap for any picker row that talks to xAI (TTS, STT, Video Gen, x_search
â€¦). Accepts a SuperGrok-tier OAuth token (preferred â€” billed to the existing subscription) or a raw
XAI_API_KEY; the rows declare empty env_vars so the auth UX lives here.)Úget_xai_oauth_auth_statusÚ	logged_inFzG    xAI will use your xAI Grok OAuth (SuperGrok / Premium+) credentialsNÚXAI_API_KEYz*    xAI will use your existing XAI_API_KEYz&    xAI needs credentials. Choose one:)Úprompt_choiceÚprompt)Ú_run_xai_oauth_login_from_setup)Úsave_env_valueú"    Could not load setup helpers: z;Run later: hermes auth add xai-oauth   (or set XAI_API_KEY)z(    How do you want xAI to authenticate?©ÚdefaultÚchoicesu6       Logged in â€” xAI will use these OAuth credentialszO    xAI Grok OAuth login did not complete. Run later: hermes auth add xai-oauthz    xAI API keyT)Úpasswordz    XAI_API_KEY savedz=    No API key provided. Run later: hermes auth add xai-oauthz>    xAI will remain inactive until credentials are configured.)uD   Sign in with xAI Grok OAuth (SuperGrok / Premium+) â€” browser loginz#Paste an xAI API key (console.x.ai)u8   Skip â€” configure later via `hermes auth add xai-oauth`)Úhermes_cli.authrz   r%   ÚgetrI   r)   r   r    Úhermes_cli.setupr}   r~   Úhermes_cli.setup_ttsr   Úhermes_cli.configr€   r*   r"   )	rz   Úoauth_logged_inr}   Ú_setup_promptr   r€   rU   ÚidxÚapi_keys	            r   Ú_post_setup_xai_grokr�   ¢   s  € ð Ý=ÜÑ8Ó:×>Ñ>¸{ÓKÓLˆ÷ ÜÐ`ÔaÙÜ�]×#Ò#ÜÐCÔDÙäÐ8Ô9ðßKÝHÝ4ñ Ø2¸AòMôN€Cð
 ˆa„xÙ*×,Ò,ÜÐSÖTäÐlÖmØ	�ŒÙÐ 1¸DÔAˆßÙ˜=¨'Ô2ÜÐ2Ö3äÐZÖ[äÐTÖUøôK ô  ØŠð ûô ô ÜÐ;¸C¸5ÐAÔBÜÐQÔRÝûðús)   ‚%C> Á&D Ã>DÄDÄE ÄD;Ä;E c               ó   € V ^8„  d   QhRR/# ©r   r   r%   r   )r   s   "r   r   r   Ñ   s   € ÷ ñ  Dñ r   c                 ór   €  ^ RI Hp  \        V ! 4       P                  R4      4      #   \         d     R# i ; i)zQCheap offline check for Codex/ChatGPT OAuth credentials (auth store + pool only).©Úget_codex_auth_statusr{   F)r†   r”   r%   r‡   rI   r“   s    r   Ú_codex_credentials_presentr•   Ñ   s6   € ðÝ9ÜÑ)Ó+×/Ñ/°Ó<Ó=Ð=øÜô Úðús   ‚$' §6µ6c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   r   Ú   s   € ÷ $`ñ $` $ñ $`r   c                 ó2  € \        4       '       d   \        R4       R# Rp \        R4        ^ RIHpHp ^ RIHpHp T! 4       '       d   \        R	T  24       R# T! R
^ RRT  R2.R7      pT^ 8w  d   \        R4       R#  T! 4       pT! TR,          TP                  R4      RR7       \        R4       R#   \         d(   p\        RT 24       \        RT  24        Rp?R# Rp?ii ; i  \        \        3 d   p\        RT RT  24        Rp?R# Rp?ii ; i)u&  Shared Codex/ChatGPT OAuth bootstrap for any picker row that talks to Codex without an API key
(image gen today). The rows declare empty env_vars so the sign-in UX lives here. Saves tokens only â€”
never rewrites ``model.provider``: the user picked an image backend, not a chat model (#102144).zK    Image generation will use your existing Codex/ChatGPT OAuth credentialsNzhermes auth add openai-codexz*    OpenAI (Codex auth) needs credentials.)Ú_codex_device_code_loginÚ_save_codex_tokens)Úis_noninteractiver}   r�   zRun later: z"No terminal to sign in from. Run: z    How do you want to sign in?u2   Sign in with ChatGPT/Codex OAuth â€” browser loginu   Skip â€” configure later via `Ú`r‚   zB    Codex image generation will remain inactive until you sign in.ÚtokensÚlast_refreshF)Ú
set_activez$    Codex sign-in did not complete: z. Run later: uI       Logged in â€” image generation will use these Codex OAuth credentials)r•   r)   r    r†   r˜   r™   rˆ   rš   r}   rI   r*   r"   r‡   ÚKeyboardInterrupt)Úreloginr˜   r™   rš   r}   rU   r�   Úcredss           r   Ú_post_setup_openai_codexr¢   Ú   s!  € ô "×#Ò#ÜÐdÔeÙà,€GÜÐ<Ô=ðßPßEñ ×Òô 	Ð8¸¸	ÐBÔCÙÙ
Ø)°1ØEØ1°'°¸!Ð<ð>ô?€Cð ˆa„xÜÐXÔYÙðÙ(Ó*ˆÙ˜5 �?¨E¯I©I°nÓ,EÐRWÕXô Ð^Ö_øô/ ô ÜÐ;¸C¸5ÐAÔBÜ�k ' Ð+Ô,Ýûðûô( Ô(Ð)ô ÜÐ=¸c¸UÀ-ÐPWÈyÐYÔZÝûðús/   ¬B4 Á?(C) Â4C&Â?C!Ã!C&Ã)DÃ:DÄDc               ó   € V ^8„  d   QhRR/# r‘   r   )r   s   "r   r   r     s   € ÷ &ñ & ñ &r   c                 ó   € ^ RI Hp  V ! 4       # )r/   ©Ú_xai_credentials_present)Úhermes_cli.tools_configr¦   r¥   s    r   Ú_xai_credentials_readyr¨     s   € Ý@Ù#Ó%Ð%r   Úxai_grokÚopenai_codexÚ_POST_SETUP_AUTH_READYÚ
lightpandarA   c                 ó   € \        R 4      # )rA   ©rY   r   r   r   Ú<lambda>r¯     s
   € Ô6°ÔGr   Úbrowserbasec                 ó   € \        R 4      # )r°   r®   r   r   r   r¯   r¯     s
   € Ô4°]ÔCr   Úbrowser_use_clic                 ó   € \        R R7      # )T)r#   )r+   r   r   r   r¯   r¯     s
   € Ô6ÀTÕJr   ÚcamofoxÚ
cua_driverc                 ó   € \        R R7      # )F)Úupgrade)r
   r   r   r   r¯   r¯     s
   € Ô,°UÕ;r   c                ó   € \        V 4      # ©N)rw   )rq   s   &r   r¯   r¯     s
   € Ô1°$Ô7r   Ú_POST_SETUP_HOOKSc               ó   € V ^8„  d   QhRR/# )r   r9   r   r   )r   s   "r   r   r     s   € ÷ :ñ : Cñ :r   c                ó>   € \         P                  V R 4      ! 4        R# )zBRun post-setup hooks for tools that need extra installation steps.c                 ó   € R # r¹   r   r   r   r   r¯   Ú!_run_post_setup.<locals>.<lambda>  s   € ±$r   N)rº   r‡   )r9   s   &r   Ú_run_post_setupr¿     s   € ä×Ñ˜.©,Ô7Ö9r   c               ó   € V ^8„  d   QhRR/# )r   r   zset[str]r   )r   s   "r   r   r   !  s   € ÷ ñ ˜xñ r   c                 ó8  a€ ^ RI Hp HpHpHpHp \        4       pV P                  4        F.  pVP                  V3R lVP                  R. 4       4       4       K0  	  WBW13 F$  p VP                  V3R lV! 4        4       4       K&  	  V#   \         d     K8  i ; i)a  Return the set of post-setup keys declared by any visible provider (``TOOL_CATEGORIES`` plus
plugin-registered providers). This is the allowlist ``post-setup`` and the dashboard endpoint
validate against, so a caller cannot drive ``_run_post_setup`` with an arbitrary key.)ÚTOOL_CATEGORIESÚ_plugin_browser_providersÚ_plugin_image_gen_providersÚ_plugin_video_gen_providersÚ_plugin_web_search_providersc              3  ó\   <"  € T F!  qP                  R 4      ;o'       g   K  Sx € K#  	  R# 5i©Ú
post_setupN©r‡   ©r   ÚprovÚpss   & €r   r   Ú(valid_post_setup_keys.<locals>.<genexpr>+  s&   øé € Ð^Ñ#;˜4ÇhÁhÈ|ÓF\Ð@\ÀÓ@\—B’BÓ#;ùó   ƒ,¢
,Ú	providersc              3  ó\   <"  € T F!  qP                  R 4      ;o'       g   K  Sx € K#  	  R# 5irÈ   rÊ   rË   s   & €r   r   rÎ   /  s$   øé € ÐS¡y˜t¿8¹8ÀLÓ;QÐ5Q°RÓ5QŸš£yùrÏ   )r§   rÂ   rÃ   rÄ   rÅ   rÆ   ÚsetÚvaluesÚupdater‡   rI   )	rÂ   rÃ   rÄ   rÅ   rÆ   ÚkeysÚcatÚbuilderrÍ   s	           @r   Úvalid_post_setup_keysrØ   !  s�   ø€ ÷Cõ Cô “U€DØ×%Ñ%Ö'ˆØ�‰Ô^ 3§7¡7¨;¸Ô#;Ó^Ö^ñ (à0Ø/óLˆð	Ø�K‰KÔS¡w¤yÓSÖSñLð €Køô ô 	Úð	ús   Á$ B
Â
BÂBc               ó   € V ^8„  d   QhRR/# )r   r   Úintr   )r   s   "r   r   r   5  s   € ÷ ñ  Cñ r   c           
     óv  € \        V RR4      pV'       g   \        R4       ^# \        4       pW9  d7   \        RV: RRP                  \	        V4      4      ;'       g    R 24       ^# \        RV 24        \        V4       \        R
T R24       ^ #   \         d   p\        R	T 24        Rp?^# Rp?ii ; i)u»   ``hermes tools post-setup <key>`` â€” non-interactive runner the dashboard spawns so the GUI can drive
backend setup without re-implementing install logic. Exit code: 0 ok, 2 unknown key.r9   Nz$Usage: hermes tools post-setup <key>zUnknown post-setup key: z. Valid keys: r   z(none)zRunning post-setup hook: zPost-setup failed: zPost-setup 'z
' complete)	ÚgetattrÚ_print_errorrØ   rS   Úsortedr    r¿   rI   r)   )ÚargsÚkeyÚvalidrU   s   &   r   Úrun_post_setup_commandrâ   5  s¹   € ô �$Ð(¨$Ó
/€CßÜÐ;Ô<ÙÜ!Ó#€EØ
ÔÜÐ/°©w°nÀTÇYÁYÌvÐV[Ë}ÓE]×EiÐEiÐaiÐDjÐkÔlÙÜÐ+¨C¨5Ð1Ô2ðÜ˜Ôô �\ #  jÐ1Ô2Ùøô	 ô ÜÐ*¨3¨%Ð0Ô1Ýûðús   Á8B ÂB8ÂB3Â3B8c                 ó   € \        4       # r¹   ©r	   r   r   r   r¯   r¯   O  s   € Ô5NÔ5Pr   Ú_POST_SETUP_INSTALLEDc               ó    € V ^8„  d   QhRRRR/# )r   r9   r   r   r%   r   )r   s   "r   r   r   R  s   € ÷ ñ °#ð ¸$ñ r   c                óŠ   € \         P                  V 4      p VRJ ;'       g    \        V! 4       4      #   \         d     R# i ; i)z]Return True when the post_setup install side-effect is satisfied (or no check is registered).NT)rå   r‡   r%   rI   )r9   Ú	predicates   & r   Ú_post_setup_already_installedré   R  sC   € ä%×)Ñ)¨.Ó9€IðØ˜DÐ ×5Ð5¤D©«Ó$5Ð5øÜô Úðús   —
3 ¢3 ³AÁAc               ó    € V ^8„  d   QhRRRR/# )r   Úmodule_namer   r   r%   r   )r   s   "r   r   r   [  s   € ÷ ñ  3ð ¨4ñ r   c                ój   € ^ RI p VP                  P                  V 4      RJ#   \         d     R# i ; i)zACheap importable-without-importing check (no heavy side effects).NF)Úimportlib.utilÚutilÚ	find_specrI   )rë   Ú	importlibs   & r   rQ   rQ   [  s6   € ãðØ�~‰~×'Ñ'¨Ó4¸DÐ@Ð@øÜô Úðús   †# £2±2c               ó   € V ^8„  d   QhRR/# r‘   r   )r   s   "r   r   r   d  s   € ÷ %ñ % $ñ %r   c                 ó   € ^ RI Hp  V ! 4       # )a  True when everything ``_run_post_setup("agent_browser")`` installs is present: the agent-browser CLI
*and* the Chromium build it drives (or the Lightpanda engine, which needs no Chromium), so "Run
setup" flips to installed only when re-running it would be a no-op.©Ú_local_browser_runnable)Úhermes_cli.nous_subscriptionrô   ró   s    r   Ú_agent_browser_installedrö   d  s   € õ Eá"Ó$Ð$r   c               ó   € V ^8„  d   QhRR/# r‘   r   )r   s   "r   r   r   m  s   € ÷ %ñ %˜Dñ %r   c                 ó   € ^ RI Hp  V ! 4       # )zKReadiness belongs to the configured external server, not root node_modules.r\   )r^   r]   r\   s    r   Ú_camofox_installedrù   m  s   € å=Ù"Ó$Ð$r   c               ó   € V ^8„  d   QhRR/# r‘   r   )r   s   "r   r   r   s  s   € ÷ ñ ˜tñ r   c                 óF   €  ^ RI Hp  V ! 4       RJ#   \         d     R# i ; i)zCTrue when a lightpanda binary is on PATH or in a known install dir.©r1   NF)r3   r1   rI   rü   s    r   Ú_lightpanda_installedrý   s  s*   € ðÝCÙ%Ó'¨tÐ3Ð3øÜô Úðús   ‚ ‘ Ÿ c               ó   € V ^8„  d   QhRR/# r‘   r   )r   s   "r   r   r   |  s   € ÷  ñ  ¨ñ  r   c                 ó   € ^ RI Hp  V ! 4       # )z’Installed-check for the ``browserbase`` hook: cloud providers host their own Chromium, so
presence of the agent-browser CLI is the whole contract.©Ú_has_agent_browser)rõ   r  r   s    r   Ú_cloud_agent_browser_installedr  |  s   € õ @ÙÓÐr   rd   c                ó   € \        V 4      # r¹   )rQ   )Úms   &r   r¯   r¯   ˆ  s
   € Ô&7¸Ô&:r   c                 ó   € \        4       # r¹   )rö   r   r   r   r¯   r¯   ‰  s   € Ô5Ô7r   c                 ó   € \        4       # r¹   )r  r   r   r   r¯   r¯   Š  s   € Ô9Ô;r   c                 ó   € \        4       # r¹   )rù   r   r   r   r¯   r¯   ‹  s   € Ô)Ô+r   c                 ó   € \        4       # r¹   )rý   r   r   r   r¯   r¯   Œ  s   € Ô/Ô1r   c                 ó   € \        4       # r¹   rä   r   r   r   r¯   r¯   �  s   € Ô3Ô5r   Ú_POST_SETUP_READY)r   r   )z:Voices: Jasper, Bella, Luna, Bruno, Rosie, Hugo, Kiki, LeozKModels: KittenML/kitten-tts-nano-0.8-int8 (25MB), micro (41MB), mini (80MB))zADefault voice: en_US-lessac-medium (downloaded on first TTS call)zQFull voice list: https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/VOICES.mdz7Switch voices by setting tts.piper.voice in config.yaml)zANo API key required. DuckDuckGo enforces server-side rate limits.z;Pair with an extract provider if you also need web_extract.)8Ú__conditional_annotations__Ú__doc__Ú
__future__r   r4   rR   rO   rM   Útypingr   Úhermes_cli.cli_outputr   rÝ   r   r    r   r)   r   r*   rŠ   r   Úhermes_cli.tools_config_cuar	   r
   Útools.transcription_commonr   r   rS   Ú_LOCAL_STT_MODEL_SUMMARYr"   r+   r7   rY   r_   rj   ro   Ú__annotations__rw   r�   r•   r¢   r¨   r«   Úitemsrº   r¿   rØ   râ   rå   ré   rQ   rö   rù   rý   r  r
  )rà   rq   r  s   00@r   Ú<module>r     sg  øðÜ _å "ã 	Û Û Û 
Ý ÷%ó %õ ,ß Uß MàŸ9™9ñ %ØQbÐcjÖQkó%ó Ð õ
#ð?°U÷ ?õ ^õ,eõ^	_÷8ð ‘lØ˜-Ð)9Ð;Ø#Ð$<Ð#=Ð>Ø?ðAôBð ‘Ø�[ +Ð/cðcôdð ‰\Ø�˜+Ð'nðKôLð
 ‰LØ�˜Ð PðOôPð"QÐ ˜$ó Qõ(6õ",Võ^õ$`õN&ð Ð&ØÐ.ð Ð ˜ó ð Ð(ØÑGØÑCØÑJØÐ"ØÑ;ØÐ$ØÐ,ð
ð Kc×JhÑJhÔJjÔkÑJj¹Y¸S€sÓ7Ò7ÑJjÒkð
Ð �4ó 
õ:õ
õ(ð4  ,Ñ-PÐQÐ �tÓ Qõõõ%õ%õõ ð7ØMe×MkÑMkÔMmÔnÑMmÁ	À€s˜8•nÓ:Ò:ÑMmÒnð7àÑ7ØÑ;ØÑ+ØÑ1ØÑ5ñ7Ð �4õ 7ùó_ lùó` os   ÄGÆG	