+
    jHàjú  ã            !       óz  a€ ERB t°0 t R t^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHtHt ^ RIHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHtHtHt ^ RIHt ^ R	I H!t!H"t# ^ R
I$H%t% ^ RI&H't'H(t(H)t)H*t*H+t+H,t,H-t- ^ RI.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6 ^ RI7H8t8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtOHPtPHQtQHRtRHStSHTtTHUtU ^ RIVHWtWHXtXHYtYHZtZ RRRR/R R llt[]P¸                  ! ]]4      t^R R lt_]`! 4       ta] ^ k ]! ]b4      PÆ                  PÆ                  PÉ                  4       te]PÌ                  ! 4        U Uu/ uF   w  rV RVPÎ                  RVPÐ                  /bK"  	  upp t. ERCOtiR" R# ltj0 ERDmtkR 0tlR$ R% ltmERER& R' lltnRtoR( tpR) tqR* R+ ltrR, R- ltsR. R/ lttR0 R1 ltuR2 R3 ltvR4 R5 ltwERFR6 R7 lltxERGR8 R9 lltyR:R/tz]x! R;R<R=4      t{]x! R>R?R@4      t|]x! RARBRC4      t}RRDRERFRGRH]y! RIRJRKRLRM7      ]y! ERHRPRQ/]zBRRRRSR;RT./B ]y! RURVRW]{.RQRM7      ]y! RXRYRZR[R\7      ]y! R]RVR^]|.R_RM7      ]y! R`RVRa]x! RbRcRd4      .ReRM7      ]y! RfRgRh]x! RiRjRk4      .RlRM7      ]y! RmRnRoRpRpRq7      ]y! RrRnRsRtRtRq7      ]y! RuRVRv]}.RwRM7      .
/R RDRxRFRyRH]y! RzRJR{R|R}R~7      ]y! ERIRRQ/]zBRRR RSR;RT./B ]y! R€RVR�]{.RQR‚7      ]y! RƒR„R…]x! R†R‡Rˆ4      .R‰R‚7      ]y! RŠR‹RZR[RŒ7      ]y! R�RVRŽ]|.R_R‚7      ]y! R�RVR�]x! RbRcRd4      .ReR‚7      ]y! R‘RVR’]}.RwR‚7      ./RRDR“R”R•R–R—RFR˜RHRDRNR™RORšR›RœR�Rž. /]zCRRRRS. ERJO/CRDR R™R¡RšR¢RœR�Rž]x! RŸR£4      ././RRDR¤RFR¥RH]y! ERK/ ]zBRRRRSR¦.R§R¨/B ./RRDR©RFRªRH]y! ERL/ ]zBRRRRSR¦.R«R¬/B ./RRDR­R”R®R–R¯RFR°RH]y! R±ROR²R[R³7      ]y! R´RVRµ]x! R¶R´R·4      .4      ./RRDR¸RFR¹RH]y! RºRJR»R|R¼R½R¾7      ]y! R¿RÀRÁR|RÂRÂR¾7      ]y! ERMRÃRÄ/]zBRRRRSRÅ.RÆRÇ/B ]y! RÈRÉRÊ]x! RËRÌRÍRÎRÏ7      .RÐRÐRÑ7      ]y! RÒRÓRÔRÄRÕRÖ7      ./R!RDR×RFRØRÙ. ERNORH]y! RÚRÛRÜRÝRÞRß7      .//t~RERO./tERPt€Rà Rá lt�ERQRâ Rã llt‚ERRRä Rå lltƒRæ Rç lt„]…! 4       t†] ^k 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ô Rõ lt�Rö R÷ ltŽRø Rù lt�Rú Rû lt�Rü Rý lt‘RþR/Rÿ ER  llt’ER ER lt“ER ER lt”ER ER lt•ER ER lt–ER	 ER
 lt—ER ER lt˜ERQERERERR/ER ER lllt™ERSER ER lltšRs›] ^k ER ER ltœEREERR/ER ER lllt�ERRERER/ER ER lltžERR/ER ER lltŸER ER lt ER ER  lt¡ER! ER" lt¢ER# ER$ lt£ER%ER&/ER' ER( llt¤ER) ER* lt¥ER+ ER, lt¦ER- ER. lt§ER/ ER0 lt¨ER1R/ER2 ER3 llt©ER4 ER5 ltªER6 ER7 lt«ER8 ER9 lt¬ER%ER&ER:ER/ER; ER< llt­ER=ER/ER> ER? llt®ERTER@ ERA llt¯R# u upp i (U  z,Unified tool configuration for Hermes Agent.N)ÚPath)ÚDictÚListÚNoReturnÚOptionalÚSet)Ú
print_info)ÚColorsÚcolor)Úcfg_getÚload_configÚsave_configÚget_env_value)ÚNousSubscriptionFeaturesÚapply_nous_managed_defaultsÚget_nous_subscription_features©Ú	PLATFORMS)Ú_TOOLSET_PLATFORM_RESTRICTIONSÚtoolset_allowed_for_platform)Úparse_platform_toolsets_value)Ú_post_setup_no_window_flagsÚ_cua_driver_cmdÚ_cua_version_summaryÚ_resolved_cua_driver_cmdÚ_cua_driver_envÚ_cua_driver_contract_statusÚ_cua_driver_install_ready)Ú_ensure_browser_use_cliÚ_run_post_setupÚvalid_post_setup_keysÚrun_post_setup_commandÚ_POST_SETUP_INSTALLEDÚ_post_setup_already_installedÚ_module_installedÚ_POST_SETUP_READY)Ú_plugin_image_gen_providersÚ_plugin_video_gen_providersÚ_plugin_web_search_providersÚ_plugin_browser_providersÚ_plugin_tts_providersÚweb_provider_capabilitiesÚ_visible_providersÚprovider_readiness_statusÚ#_toolset_needs_configuration_promptÚ_configure_tool_categoryÚ_web_tier_matchesÚ_is_provider_activeÚ_detect_active_provider_indexÚIMAGEGEN_BACKENDSÚ_plugin_image_gen_catalogÚ_plugin_video_gen_catalogÚ_configure_imagegen_modelÚ$_configure_imagegen_model_for_pluginÚ$_configure_videogen_model_for_pluginÚ!_select_plugin_image_gen_providerÚ!_select_plugin_video_gen_providerÚSTT_MODEL_CATALOGÚ_configure_stt_modelÚ_write_provider_configÚapply_provider_selectionÚ_configure_providerÚ_reconfigure_providerÚ_configure_vision_backendÚ _configure_vision_provider_modelÚ_configure_simple_requirements)Ú _configure_mcp_tools_interactiveÚ_apply_toolset_changeÚ_apply_mcp_changeÚtools_disable_enable_commandÚtimeouti,  Úcapture_outputTc                ó^   € V ^8„  d   QhR\         \        ,          R\        R\        R\        /# )é   ÚargsrH   rI   Úreturn)ÚlistÚstrÚintÚboolr   )Úformats   "Ú</home/ubuntu/.hermes/hermes-agent/hermes_cli/tools_config.pyÚ__annotate__rT   &   s0   € ÷ ñ Ü
Œs�)ðÜ!$ðÜ<@ðäñó    c                ó    € ^ RI Hp V! 4        R# ©é    )Ústop_for_relaunchN©Úhermes_cli._old_updaterrY   )rL   rH   rI   rY   s   &$$ rS   Ú_pip_installr\   &   s   € õ :áÖrU   c                ó$   € V ^8„  d   QhR\         /# ©rK   rM   )r   )rR   s   "rS   rT   rT   2   s   € ÷ ñ ¬8ñ rU   c                  ó    € ^ RI Hp V! 4        R# rW   rZ   )rL   ÚkwargsrY   s   *, rS   Úinstall_cua_driverra   2   s   € õ :áÖrU   ÚlabelÚdefault_toolsetÚwebÚbrowserÚvisionÚ	image_genÚ	video_genÚx_searchÚttsÚsttÚcomputer_usec                ó0   € V ^8„  d   QhR\         R\         /# )rK   rb   rM   ©rO   )rR   s   "rS   rT   rT   a   s   € ÷ ñ œSð ¤Sñ rU   c                ó<  € T ;'       g    RP                  4       pVP                  R^4      p\        V4      ^8X  d`   \        ;QJ d#    R V^ ,           4       F  '       g   K   RM	  RM! R V^ ,           4       4      '       g   V^,          P                  4       # V# )u˜   Strip the leading ``<emoji>`` from a toolset title for GUI surfaces (plugins prefix ``ðŸ”Œ``).
CLI/TUI keeps the raw label â€” only HTTP APIs call this.Ú Nc              3   óp   "  € T F,  qP                  4       ;'       d    VP                  4       x € K.  	  R # 5i©N)ÚisasciiÚisalnum)Ú.0Úchs   & rS   Ú	<genexpr>Ú$gui_toolset_label.<locals>.<genexpr>f   s%   é € Ð"TÉ8ÀR§:¡:£<×#@Ð#@°B·J±J³LÔ#@Ë8ùs   ‚6�6TF)ÚstripÚsplitÚlenÚany)rb   ÚtextÚpartss   &  rS   Úgui_toolset_labelr   a   ss   € ð �KˆK�R×ÑÓ €DØ�J‰J�t˜QÓ€EÜ
ˆ5ƒz�Q„Ÿs›sÑ"TÈ5ÐQRÎ8Ó"TŸsŸsšsÑ"TÈ5ÐQRÎ8Ó"T×TÒTØ�Q�x�~‰~ÓÐØ€KrU   c                ó$   € V ^8„  d   QhR\         /# r^   ©rQ   )rR   s   "rS   rT   rT   u   s   € ÷ >ñ >¤$ñ >rU   c                 óv  €  ^ RI Hp  V ! 4        R#   \         d     Mi ; i\        \	        R4      ;'       g    R4      P                  4       '       d   R#  ^ RIHp M+  \         d    \        P                  P                  p Mi ; i\        \        T! R4      ;'       g    R4      P                  4       4      # )zÌCheap offline check for xAI credentials (auth store + env only); the runtime ``check_fn`` still gates
schema registration if creds expire. Also used by ``provider_readiness_status`` for ``xai_grok`` rows.)Ú_read_xai_oauth_tokensTÚXAI_API_KEYrp   )Ú
get_secret)Úhermes_cli.authrƒ   Ú	ExceptionrO   r   ry   Úagent.secret_scoper…   ÚImportErrorÚosÚenvironÚgetrQ   )rƒ   r…   s     rS   Ú_xai_credentials_presentr�   u   s“   € ðÝ:ÙÔ ÙøÜô Ùðúä
Œ=˜Ó'×-Ð-¨2Ó.×4Ñ4×6Ò6Ùð$Þ1øÜô $Ü—Z‘Z—^‘^Š
ð$úä”‘J˜}Ó-×3Ð3°Ó4×:Ñ:Ó<Ó=Ð=s   ‚ ‘žÁA Á%BÂBc                ó<   € V ^8„  d   QhR\         R\         R\         /# )rK   Úts_keyÚdefaultrM   rn   )rR   s   "rS   rT   rT   ‡   s&   € ÷ Jñ J¬Cð J¼#ð JÌ#ñ JrU   c                ód   € \         P                  ! V 4      pV'       d   W9   d   V# \        V4      # )zÉPlatform a platform-less configuration UI should target: a toolset restricted away from ``default``
must be configured on a supported platform, else the save helper drops it and the UI reports a no-op.)r   rŒ   Úmin)r�   r�   Úalloweds   && rS   Ú_toolset_configuration_platformr”   ‡   s*   € ô -×0Ò0°Ó8€Gß! WÔ%7ˆ7ÐI¼SÀ»\ÐIrU   c                  ó(   € \         p V e   V ! 4       # R # rr   )Ú_gateway_plugin_toolsets©Úproviders    rS   Ú_projected_plugin_toolsetsr™   ”   s   € Ü'€HØ!Ò-‰8‹:Ð7°4Ð7rU   c                 ód  € \        \        4      p V  UUu0 uF  w  p q!kK
  	  ppp \        4       pVf   ^ RIHpHp V! 4        Ve
   V^ ,          MX! 4        F<  pV^ ,          V9  g   K  VP                  V^ ,          4       V P                  V4       K>  	  V # u uppi   \         d     T # i ; i)zmCONFIGURABLE_TOOLSETS + plugin toolsets (appended after built-ins; a plugin key already built-in is skipped).)Údiscover_pluginsÚget_plugin_toolsets)	rN   ÚCONFIGURABLE_TOOLSETSr™   Úhermes_cli.pluginsr›   rœ   ÚaddÚappendr‡   )Úresultr�   Ú_ÚseenÚ	projectedr›   rœ   Úentrys           rS   Ú$_get_effective_configurable_toolsetsr¦   ™   s­   € äÔ'Ó(€FÙ'-Ô.¡v‘|�v˜q !ŠF¡v€DÑ.ð
Ü.Ó0ˆ	ØÒßPÙÔØ%.Ò%:�Y˜q–\Ñ@SÓ@UÒUˆEØ�Q�x˜tÖ#Ø—‘˜˜q�Ô"Ø—‘˜eÖ$ñ Vð €Mùó /øô ô ØØ€Mðús   •B§?B  Á+-B  Â B/Â.B/c                ó$   € V ^8„  d   QhR\         /# r^   )Úset)rR   s   "rS   rT   rT   «   s   € ÷ 
ñ 
¤#ñ 
rU   c                 ó¸   €  \        4       ;p e   V ^ ,           UUu0 uF  w  p q!kK
  	  upp# ^ RIHp V! 4       # u uppi   \         d    \	        4       u # i ; i)z3Return the set of toolset keys provided by plugins.)Úget_plugin_toolset_keys_nowait)r™   rž   rª   r‡   r¨   )r¤   Úkeyr¢   rª   s       rS   Ú_get_plugin_toolset_keysr¬   «   s`   € ðÜ3Ó5Ð5ˆIÒBØ)2°1®Ô6©™I˜C  A’C©Ò6Ð6õ 	FÙ-Ó/Ð/ùó	 7øô
 ô Ü‹uŠðús$   ‚A œ;ªA ®A »A ÁAÁAc                óF   € V ^8„  d   QhR\         R\        \         ,          /# ©rK   ÚplatformrM   )rO   r¨   )rR   s   "rS   rT   rT   ¸   s"   € ÷ dñ d¤cð d¬c´#­hñ drU   c                óŽ   € \        4        UUu0 uF)  w  p p\        W4      '       g   K  V\        9  g   K'  VkK+  	  upp# u uppi )z¸Toolset keys the ``hermes tools`` checklist offers for ``platform`` (mirrors ``_prompt_toolset_checklist``);
read-time-resolved toolsets (recovered composites, MCP names) are NOT here.)r¦   Ú_toolset_allowed_for_platformÚ_CONFIG_ONLY_TOOLSETS)r¯   r�   r¢   s   &  rS   Ú_checklist_toolset_keysr³   ¸   sO   € ô $HÔ#IôdÙ#I‘<�6˜1˜aÜ(¨×:ô 	Ø?EÔMbÑ?b÷ 	ˆÑ#Iòdð dùó ds   ŽAªA·Ac                ó0   € V ^8„  d   QhR\         R\         /# r®   rn   )rR   s   "rS   rT   rT   À   s   € ÷ eñ e¬ð e´ñ erU   c                óJ   € V \         9   d   \         V ,          R,          # RV  2# )z[Composite toolset a platform falls back to (plugin platforms derive ``hermes-<platform>``).rc   úhermes-r   )r¯   s   &rS   Ú_platform_default_toolsetr·   À   s)   € à5=ÄÔ5JŒ9�XÕÐ0Õ1ÐdÐRYÐZbÐYcÐPdÐdrU   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )rK   Úconfigr«   rM   ©ÚdictrO   )rR   s   "rS   rT   rT   Å   s!   € ÷ ñ œð ¤Cð ¬Dñ rU   c                ób   € V P                  V/ 4      p\        V\        4      '       g   / pW V&   V# )zTReturn ``config[key]`` as a dict, replacing a missing or non-dict value with ``{}``.)Ú
setdefaultÚ
isinstancer»   )r¹   r«   Úsections   && rS   Ú_cfg_sectionrÀ   Å   s2   € à×Ñ  RÓ(€GÜ�gœt×$Ò$ØˆØˆs‰Ø€NrU   c                ó0   € V ^8„  d   QhR\         R\        /# ©rK   r�   rM   )rO   rQ   )rR   s   "rS   rT   rT   Î   s   € ÷ Uñ UœSð U¤Tñ UrU   c                óx   € \        \        P                  V 4      ;'       g    \        P                  V 4      4      # )zXTrue when the toolset has provider options or simple env-var requirements to prompt for.)rQ   ÚTOOL_CATEGORIESrŒ   ÚTOOLSET_ENV_REQUIREMENTS©r�   s   &rS   Ú_is_configurablerÇ   Î   s,   € ä”×#Ñ# FÓ+×SÐSÔ/G×/KÑ/KÈFÓ/SÓTÐTrU   c                ó0   € V ^8„  d   QhR\         R\         /# rÂ   rn   )rR   s   "rS   rT   rT   Ó   s   € ÷ bñ bœ3ð b¤3ñ brU   c                ó@   a € \        V 3R l\        4        4       S 4      # )zUDisplay label for a toolset key (built-in or plugin), falling back to the key itself.c              3   ó>   <"  € T F  w  rq1S8X  g   K  Vx € K  	  R # 5irr   © ©ru   ÚkÚlr¢   r�   s   &   €rS   rw   Ú!_toolset_label.<locals>.<genexpr>Õ   s   øé € ÐXÑ"H‘w�q˜QÐQWÉK—’Ó"Hùó   ƒ“
)Únextr¦   rÆ   s   frS   Ú_toolset_labelrÒ   Ó   s   ø€ äÔXÔ"FÔ"HÓXÐZ`ÓaÐarU   c                óH   € V ^8„  d   QhR\         R\         R\         R\        /# )rK   r«   ÚpromptÚurlrM   )rO   r»   )rR   s   "rS   rT   rT   Ú   s.   € ÷ Tñ TŒcð Tœ3ð T¤Sð T¼4ñ TrU   c                ó0   € RV RV/VCV'       d   RV/C# / C# )zOOne ``env_vars`` entry for a provider row (key order matters for the GUI JSON).r«   rÔ   rÕ   rË   )r«   rÔ   rÕ   Úextras   &&&,rS   Ú_keyrØ   Ú   s)   € à�3˜ &ÐS¨EÐSÇc°u¸c°lÐSÐSÈrÐSÐSrU   c          
      óT   € V ^8„  d   QhR\         R\         R\         R\        R\        /# )rK   ÚnameÚbadgeÚtagÚenv_varsrM   )rO   rN   r»   )rR   s   "rS   rT   rT   ß   s0   € ÷ 	ñ 	Œsð 	œ3ð 	¬#ð 	¼dð 	ÔW[ñ 	rU   c                ó|   € RV /pV'       d   WR&   V'       d   W%R&   \        V4      VR&   VP                  V4       V# )zbOne TOOL_CATEGORIES provider row; ``markers`` are the ``*_provider`` / ``post_setup`` / Nous keys.rÚ   rÛ   rÜ   rÝ   )rN   Úupdate)rÚ   rÛ   rÜ   rÝ   ÚmarkersÚrows   &&&&, rS   Ú_rowrâ   ß   s=   € à�4ˆ.€CßØˆG‰ß
ØˆE‰
Ü˜8“n€Cˆ
�OØ‡J�JˆwÔØ€JrU   Úrequires_nous_authÚVOICE_TOOLS_OPENAI_KEYzOpenAI API keyz$https://platform.openai.com/api-keysÚELEVENLABS_API_KEYzElevenLabs API keyz+https://elevenlabs.io/app/settings/api-keysÚDEEPINFRA_API_KEYzDeepInfra API keyz#https://deepinfra.com/dash/api_keysrÚ   zText-to-SpeechÚiconu   ðŸ”ŠÚ	providerszMicrosoft Edge TTSu   â˜… recommended Â· freezGood quality, no API key neededÚedge)Útts_providerúNous SubscriptionÚsubscriptionrê   ÚopenaiÚmanaged_nous_featureÚoverride_env_varsÚOPENAI_API_KEYz
OpenAI TTSÚpaidzHigh quality voiceszxAI TTSu2   Grok voices â€” uses xAI Grok OAuth or XAI_API_KEYÚxaiÚxai_grok)rÜ   rê   Ú
post_setupÚ
ElevenLabszMost natural voicesÚ
elevenlabszMistral (Voxtral TTS)zMultilingual, native OpusÚMISTRAL_API_KEYzMistral API keyzhttps://console.mistral.ai/ÚmistralzGoogle Gemini TTSÚpreviewz,30 prebuilt voices, controllable via promptsÚGEMINI_API_KEYzGemini API keyz&https://aistudio.google.com/app/apikeyÚgeminiÚ	KittenTTSu   local Â· freez.Lightweight local ONNX TTS (~25MB), no API keyÚ	kittentts)rê   rô   ÚPiperz0Local neural TTS, 44 languages (voices ~20-90MB)ÚpiperzDeepInfra TTSuB   Chatterbox, Qwen3-TTS, â€¦ â€” live catalog from api.deepinfra.comÚ	deepinfrazSpeech-to-Textu   ðŸŽ™ï¸�zLocal Whisperz$faster-whisper on-device, no API keyÚlocalÚfaster_whisper)Ústt_providerrô   r  ÚOpenAIz,whisper-1, gpt-4o-transcribe, gpt-transcribe)r  ÚGroqz	free tieru6   whisper-large-v3-turbo, whisper-large-v3 â€” very fastÚGROQ_API_KEYzGroq API keyzhttps://console.groq.com/keysÚgroqÚxAIu<   Grok Voice Transcribe â€” uses xAI Grok OAuth or XAI_API_KEY)rÜ   r  rô   zElevenLabs Scribeu/   scribe_v2 â€” diarization + audio-event taggingzMistral Voxtralu$   voxtral-mini-latest â€” multilingualÚ	DeepInfraz'Live STT catalog from api.deepinfra.comzWeb Search & ExtractÚsetup_titlezSelect Search ProviderÚ
setup_noteuc   A free DuckDuckGo search skill is also included â€” skip this if you don't need a premium provider.u   ðŸ”�rÛ   rÜ   z:Managed web search and extract billed to your subscriptionÚweb_backendÚ	firecrawlrÝ   ÚFIRECRAWL_API_URLzFirecrawl Self-Hostedu   free Â· self-hostedz(Run your own Firecrawl instance (Docker)z9Your Firecrawl instance URL (e.g., http://localhost:3002)zImage Generationu   ðŸŽ¨ÚFAL_KEYÚimagegen_backendÚnouszVideo Generationu   ðŸŽ¬Úvideo_gen_plugin_nameÚfalzX (Twitter) SearchzSelect xAI Credential Sourceu„  Hermes routes X searches through xAI's built-in x_search Responses tool for read-only public X discovery. Use the xurl skill for authenticated X API reads and account actions. Both credential sources hit the same https://api.x.ai/v1/responses endpoint â€” pick whichever you already have. SuperGrok OAuth is preferred when both are set (uses your subscription quota instead of API spend).u   ðŸ�¦z%xAI Grok OAuth (SuperGrok / Premium+)u6   Browser login at accounts.x.ai â€” no API key required)rô   zxAI API keyz&Direct xAI API billing via XAI_API_KEYr„   zhttps://console.x.ai/zBrowser Automationu   ðŸŒ�zLocal Browserz$Headless Chromium, no API key neededÚautoÚagent_browser)Úbrowser_providerÚbrowser_enginerô   Ú
Lightpandau   free Â· local Â· no ChromiumzBZig headless browser spawned by Hermes, text-only (no screenshots)Ú
lightpandar  zbrowser-useÚBROWSER_USE_API_KEYrô   ÚbrowserbaseÚCamofoxu   free Â· localz)Anti-detection browser (Firefox/Camoufox)ÚCAMOFOX_URLzCamofox server URLz)https://github.com/jo-inc/camofox-browserzhttp://localhost:9377©r�   Úcamofox)r  rô   zBrowser Useu   free Â· local Â· cloudzNew SOTA web harness (CLI 3.0)Úbrowser_use_cli)Úbrowser_backendrô   z"Computer Use (macOS/Windows/Linux)u   ðŸ–±ï¸�Úplatform_gatezcua-driver (background)u    â˜… recommended Â· free Â· localue   Background computer-use via cua-driver â€” does NOT steal your cursor or focus. Works with any model.ÚcuaÚ
cua_driver)Úcomputer_use_backendrô   c                ó:   € V ^8„  d   QhR\         \        ,          /# r^   )rN   rO   )rR   s   "rS   rT   rT   ‚  s   € ÷ mñ m¤¤S¥	ñ mrU   c                 óx   € R.\          U Uu. uF  w  r\        V4      '       g   K  V NK  	  upp ,           # u upp i )zBReturn platform keys that are configured (have tokens or are CLI).Úcli)Ú_PLATFORM_ENABLE_ENV_VARSr   )r¯   Úenv_vars     rS   Ú_get_enabled_platformsr+  ‚  s2   € àˆ7Õ8QÔlÑ8QÑ#4 8ÔUbÐcj×Uk—h�hÑ8QÒlÕlÐlùÓls   Œ6¦6c          	      ó    € V ^8„  d   QhR\         R\        \        \        ,          ,          R\         \        \        \        ,          3,          /# )rK   r¹   Ú	platformsrM   )r»   r   rN   rO   r¨   )rR   s   "rS   rT   rT   ‡  sB   € ÷ Kñ K¤dð K´xÄÄSÅ	Õ7Jð KÔVZÔ[^Ô`cÔdgÕ`hÐ[hÕViñ KrU   c                ó^   € Vf   \        4       pV Uu/ uF  q"\        W4      bK  	  up# u upi )zWEnabled toolsets per platform (``platforms`` defaults to ``_get_enabled_platforms()``).)r+  Ú_get_platform_tools)r¹   r-  Úpkeys   && rS   Ú_platform_toolset_summaryr1  ‡  s1   € àÒÜ*Ó,ˆ	Ù@IÓJÁ	¸Ô% fÓ3Ò3Á	ÑJÐJùÒJs   “*c                ó0   € V ^8„  d   QhR\         R\         /# )rK   r�   rM   r�   )rR   s   "rS   rT   rT   Ž  s   € ÷ ñ ¬ð ¼ñ rU   c                óÔ   € \        V \        \        34      '       d   \        V 4      # \        V \        4      '       d+   V P	                  4       P                  4       pVR9   d   VR9   # V# )z=Parse bool-like config values used by tool/platform settings.>   Ú0Ú1ÚnoÚonÚoffÚyesÚtrueÚfalse>   r5  r7  r9  r:  )r¾   rQ   rP   rO   ry   Úlower)Úvaluer�   Úlowereds   && rS   Ú_parse_enabled_flagr?  Ž  sX   € ä�%œ$¤˜×%Ò%Ü�E‹{ÐÜ�%œ×ÒØ—+‘+“-×%Ñ%Ó'ˆØÐKÔKØÐ8Ñ8Ð8Ø€NrU   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# ©rK   r¹   rM   )r»   r¨   rO   )rR   s   "rS   rT   rT   ™  s   € ÷ ñ ¤Tð ¬c´#­hñ rU   c                óä  € ^ RI Hp T ;'       g    / P                  R4      ;'       g    / pVP                  4        UUu0 uF8  w  r4\	        V\
        4      '       g   K  V! V4      '       g   K-  \        V4      kK:  	  ppp \        4       pVf   ^ RIH	p Ve
   V^,          MX! 4       pWX\        V4      ,
          ,          pV# u uppi   \         d    \        P                  RRR7        T# i ; i)uã   MCP servers globally enabled in config.yaml or by a plugin (shared by platform + cron resolvers). Enabled
unless ``enabled`` is explicitly falsey; portable-plugin servers (in-memory) count â€” enabling the plugin is
the opt-in.)Úmcp_server_enabledÚmcp_servers)Ú$get_portable_mcp_server_names_nowaitz&Failed to include portable MCP serversT)Úexc_info)Útools.mcp_tool_commonrC  rŒ   Úitemsr¾   r»   rO   r™   rž   rE  r¨   r‡   ÚloggerÚdebug)	r¹   rC  rD  rÚ   Ú
server_cfgÚnamesr¤   rE  Úportables	   &        rS   Úenabled_mcp_server_namesrN  ™  sà   € õ 9à—<�<˜R×$Ñ$ ]Ó3×9Ð9°r€Kà*5×*;Ñ*;Ô*=ôÙ*=Ñ&�dÜ�j¤$×'ô 	Ù,>¸z×,Jô 	ŒˆDŽ	Ñ*=ð 
ñ ðNÜ.Ó0ˆ	ØÒÝOØ#,Ò#8�9˜Q–<Ñ>bÓ>dˆØœC Ó,Õ,Õ,ˆð €Lùóøô ô NÜ�‰Ð=ÈˆÕMØ€LðNús$   ¿CÁCÁ.CÂA C	 Ã	"C/Ã.C/c                óV   € V ^8„  d   QhR\         \        ,          R\        R\        RR/# )rK   Úenabled_toolsetsr¹   r¯   rM   N©r¨   rO   r»   )rR   s   "rS   rT   rT   ¹  s.   € ÷ %ñ %¼¼C½ð %Ì$ð %ÔZ]ð %Ðbfñ %rU   c                ó  € ^ RI Hp VP                  R4      ;'       g    / P                  V4      p\        V\        4      '       d   V Uu0 uF  p\        V4      kK  	  upM	\        4       p\        V4      pRp\        \        4       F|  p	W�9   g   W–9   g   \        W’4      '       g   K"  \        V! V	RR7      4      p
Vf   \        V! V4      4      pV
'       d   V
P                  V4      '       g   Kk  V P                  V	4       K~  	  R# u upi )a  Turn on toolsets that shipped after this platform's saved list (mutates ``enabled_toolsets``). Both "no"s
outlive this: unchecking records ``known_builtin_toolsets`` (declined), and ``agent.disabled_toolsets`` is
subtracted last in :func:`_get_platform_tools`.©Úresolve_toolsetÚknown_builtin_toolsetsNF©Úinclude_registry)ÚtoolsetsrT  rŒ   r¾   rN   rO   r¨   r·   ÚsortedÚ_RECENTLY_SHIPPED_TOOLSETSr±   ÚissubsetrŸ   )rP  r¹   r¯   rT  ÚofferedÚtsÚdeclinedÚ
default_tsÚcomposite_toolsr�   Úts_toolss   &&&        rS   Ú!_enable_recently_shipped_toolsetsrb  ¹  sÛ   € õ )à�z‰zÐ2Ó3×9Ð9°r×>Ñ>¸xÓH€GÜ.8¸Ä$×.GÒ.G¡'Ó*¡'˜B”�B–¡'Ò*ÌSËU€HÜ*¨8Ó4€JØ€OÜÔ3Ö4ˆØÔ%¨Ô);ÔC`Ðag×CrÒCrÙô ‘ vÀÔFÓGˆØÒ"Ü!¡/°*Ó"=Ó>ˆOß˜x×0Ñ0°×AÒAÙØ×Ñ˜VÖ$ó 5ùò +s   ÁD
c                óh   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          /# )rK   Ú
tool_namesr¯   rM   ©r¨   rO   )rR   s   "rS   rT   rT   Ð  s.   € ÷ kñ k¬¬C­ð k¼Cð kÄCÌÅHñ krU   c                óÂ   € ^ RI Hp \         UUu0 uFA  w  p p\        W14      '       g   K  \	        V! VRR7      4      ;p'       g   K7  WP8:  g   K?  VkKC  	  upp# u uppi )zºConfigurable toolsets whose STATIC membership is within ``tool_names`` (``include_registry=False``: a
runtime-registered tool the composite never listed must not drop the whole toolset).rS  FrV  )rX  rT  r�   r±   r¨   )rd  r¯   rT  r�   r¢   ra  s   &&    rS   Ú_configurable_subset_ofrg  Ð  sg   € õ )õ $9ôkÙ#8‘<�6˜1˜aÔ<YÐZ`×<kŒÜ™_¨VÀeÔLÓMÐMˆXÓMô 	ØS[ÑSi÷ 	ˆÑ#8òkð kùó ks   �A¬AÁ	AÁAc                óR   € V ^8„  d   QhR\         R\        R\        \         ,          /# )rK   r¯   Úexplicitly_configuredrM   )rO   rQ   r¨   )rR   s   "rS   rT   rT   Ú  s%   € ÷ 
ñ 
¤Cð 
Äð 
ÌÌSÍñ 
rU   c                óþ   € \        \        4      pW9   d   V \        9  d   VP                  V 4       V'       d?   Y" Uu0 uF+  q0\        P                  ! V4      ;'       g    R9   g   K)  VkK-  	  up,          pV# u upi )uv  Toolsets to strip from an implicit (composite-derived) enable set. A platform named after a default-off
toolset keeps it, except platform-restricted ones (``discord`` on discord stays OFF).
Platform-native default-off toolsets (``discord`` on discord) are off for unconfigured platforms as a
security opt-in â€” an explicitly saved list IS that opt-in and lets them through.rË   )r¨   Ú_DEFAULT_OFF_TOOLSETSr   ÚremoverŒ   )r¯   ri  Údefault_offr]  s   &&  rS   Ú_default_off_toolsetsrn  Ú  sp   € ô
 Ô+Ó,€KØÔ 8Ô3QÔ#QØ×Ñ˜8Ô$ßØ [Óo¡[˜rÔA_×AcÒAcÐdfÓAg×AmÐAmÐkmÑ4nŸ˜¡[ÑoÕoˆØÐùò ps   ¾!A:Á A:Á)A:c                ó:   € V ^8„  d   QhR\         \        ,          /# r^   re  )rR   s   "rS   rT   rT   ç  s   € ÷ >ñ >œC¤�Hñ >rU   c                  óD   € \          U Uu0 uF  w  p  qkK
  	  upp # u upp i rr   )r�   )r�   r¢   s     rS   Ú_configurable_keysrq  ç  s"   € Ý'<Ô=Ñ'<‘|�v˜q !ŠFÑ'<Ò=Ð=ùÓ=s   Šc                ó:   € V ^8„  d   QhR\         \        ,          /# r^   re  )rR   s   "rS   rT   rT   ë  s   € ÷ >ñ >¤¤C¥ñ >rU   c                  ó`   € \         P                  4        U u0 uF  q R ,          kK  	  up # u up i )rc   )r   Úvalues)Úps    rS   Ú_platform_default_keysrv  ë  s,   € Ü*3×*:Ñ*:Ô*<Ó=Ñ*< QÐ× Ð Ñ*<Ñ=Ð=ùÒ=s   —+c                ó¢   € V ^8„  d   QhR\         \        ,          R\        \        ,          R\        R\        R\        R\        \        ,          /# )rK   Útoolset_namesÚexplicit_known_keysr¹   r¯   ri  rM   )rN   rO   r¨   r»   rQ   )rR   s   "rS   rT   rT   ï  sH   € ÷ ñ Üœ•9ðÜ36´sµ8ðÜEIðÜUXðäðä$'¬¥HñrU   c                óT  € ^ RI HpHp V  Uu0 uF   qwV9   g   K  \        Ws4      '       g   K  VkK"  	  ppV  U	U
u0 uF$  q™V9  g   K  W–9   g   K  V! V	4       F  p
V
kK  	  K&  	  pp	p
V'       d#   V\	        W³4      \        W44      ,
          ,          p\        W‚V4       V# u upi u up
p	i )a  Enabled set when the saved list names configurable/plugin keys directly (subset inference over
``hermes-cli`` would re-enable disabled toolsets). A mixed list (``[hermes-cli, discord]``) still expands the
composite; _DEFAULT_OFF_TOOLSETS applies to that implicit expansion only.©rT  ÚTOOLSETS)rX  rT  r|  r±   rg  rn  rb  )rx  ry  r¹   r¯   ri  rT  r|  r]  ÚenabledÚts_nameÚtr`  s   &&&&&       rS   Ú_explicit_toolsetsr€  ï  sª   € ÷ 3á)Ów™M�bÐ3FÑ-FŒrÔKhÐik×Kv�rˆr™M€GÐwá&ô+Ù&ˆgÐ9LÑ*LŒÐQXÑQdŒÙ  Ö)ˆAó 	
Ù)ñ 	
™ð ñ +÷ ØÔ*¨?ÓEÔH]Ð^fÓH~Õ~Õ~ˆÜ% g°xÔ@Ø€Nùò xùó+s    �BšB­BºB$ÁB$ÁB$c          	      ót   € V ^8„  d   QhR\         \        ,          R\        R\        R\        \        ,          /# )rK   rx  r¯   ri  rM   )rN   rO   rQ   r¨   )rR   s   "rS   rT   rT     s4   € ÷ !ñ !¤t¬C¥yð !¼Cð !ÔX\ð !ÔadÔehÕaiñ !rU   c                ó  € ^ RI Hp V  UUu0 uF  qC! V4       F  qUkK  	  K  	  ppp\        Wa4      p\        W4      p\	        RV4      '       d3   \        4       '       d#   VP                  R4       VP                  R4       Wx,
          # u uppi )z×Enabled set inferred from composite names by reverse-mapping tool names (only while no explicit list is
saved). ``x_search`` is not in any composite, so inject it when xAI creds exist and exempt it from default-off.rS  ri   )rX  rT  rg  rn  r±   r�   rŸ   Údiscard)	rx  r¯   ri  rT  r~  r  Úall_tool_namesr}  rm  s	   &&&      rS   Ú_composite_toolsetsr…    s|   € õ )á'4ÔW¡}˜G¸oÈgÖ>V¸’aÑ>V‘a¡}€NÑWÜ% nÓ?€GÜ'¨ÓH€KÜ$ Z°×:Ò:Ô?W×?YÒ?YØ�‰�JÔØ×Ñ˜JÔ'ØÕ Ð ùó Xs   ŒB	c                ó–   € V ^8„  d   QhR\         R\        R\        \        ,          R\        \        ,          R\        \        ,          /# )rK   r¹   r¯   rx  Úplugin_ts_keysrM   )r»   rO   rN   r¨   )rR   s   "rS   rT   rT     sA   € ÷ ñ ¤Tð ´Sð ÌÌcÍð ÔdgÔhkÕdlð ÔqtÔuxÕqyñ rU   c                óä   € \        V P                  R/ 4      ;'       g    / P                  V. 4      ;'       g    . 4      pV Uu0 uF   pWR9   g   V\        9  g   K  WT9  g   K  VkK"  	  up# u upi )z³Plugin toolsets: on by default unless default-off (catalog spotify) or "known" for this platform
(``known_plugin_toolsets``, written on every save) and absent from the saved list.Úknown_plugin_toolsets)r¨   rŒ   rk  )r¹   r¯   rx  r‡  Úknown_for_platformÚptss   &&&&  rS   Ú_enabled_plugin_toolsetsrŒ    sz   € ô ˜fŸj™jÐ)@À"ÓE×KÐKÈ×PÑPÐQYÐ[]Ó^×dÐdÐbdÓeÐá%óÙ%�ØÔ CÔ/DÑ$Dô 	ØILÑIf÷ 	ˆ‘~ñð ùò s   ÁA-ÁA-Á$A-c                ó0   € V ^8„  d   QhR\         R\        /# rA  ©r»   rQ   )rR   s   "rS   rT   rT     s   € ÷ /ñ /¤4ð /¬Dñ /rU   c                 ó  € V P                  R 4      ;'       g    / p\        V\        4      '       dA   \        VP                  R4      ;'       g    R4      P	                  4       P                  4       MRp\        V4      ;'       d    VR8g  # )ÚcontextÚengineÚ
compressor)rŒ   r¾   r»   rO   ry   r<  rQ   )r¹   Úcontext_cfgrÚ   s   &  rS   Ú_context_engine_activer”    sm   € Ø—*‘*˜YÓ'×-Ð-¨2€KÜMWÐXcÔei×MjÒMjŒ3ˆ{�‰˜xÓ(×8Ð8¨LÓ9×?Ñ?ÓA×GÑGÔIÐp|€DÜ�‹:×.Ð.˜$ ,Ñ.Ð.rU   c                ó$   € V ^8„  d   QhR\         /# )rK   r¯   rn   )rR   s   "rS   rT   rT     s   € ÷ ñ ´Sñ rU   c                ó    € V f   R# \        V 4      pVe   V# V\        9  d,   \        P                  V4       \        P	                  RW4       V # )a¬  Read a list-literal string saved for ``platform_toolsets.<platform>`` as the list it encodes.

The parser is shared with ``hermes doctor`` and ``hermes plugins`` (``toolset_validation``
``parse_platform_toolsets_value``) so every surface agrees on the user's selection (#115866).
Any other non-list value is warned about once (naming the expected shape) and left as-is, so
the default fallback below is loud rather than silent.
Nz©platform_toolsets.%s is %r, expected a YAML list of toolset names (e.g. [terminal, file, web]) - falling back to the platform default. Run `hermes tools` to reconfigure.)r   Ú!_warned_invalid_platform_toolsetsrŸ   rI  Úwarning)r=  r¯   Úparseds   && rS   Ú_coerce_platform_toolsets_valuerš    sT   € ð ‚}ÙÜ*¨5Ó1€FØÒØˆØÔ8Ô8Ü)×-Ñ-¨hÔ7Ü�‰ð1à2:ô	Cð €LrU   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )rK   r¹   r¯   rM   )r»   rO   rQ   )rR   s   "rS   rT   rT   5  s&   € ÷ 
Lñ 
L´ð 
LÄð 
LÌñ 
LrU   c                óŒ   € V P                  R4      ;'       g    / pVP                  V4      p\        \        W14      \        4      # )a¤  True when ``platform_toolsets.<platform>`` holds an explicitly saved LIST (even ``[]``).

``_get_platform_tools``'s ``explicitly_configured`` flag without re-running the resolver
(post-coercion, so a list-literal string counts too): an unset key or a non-list value
falls back to the platform default. Callers use this to tell an explicit zero-tool
selection (fail closed, #82010) from an absent one ("no restriction").
Úplatform_toolsets)rŒ   r¾   rš  rN   )r¹   r¯   r�  Úraws   &&  rS   Ú#_platform_toolsets_explicitly_savedrŸ  5  s?   € ð Ÿ
™
Ð#6Ó7×=Ð=¸2ÐØ
×
Ñ
 Ó
)€CÜÔ5°cÓDÄdÓKÐKrU   Úinclude_default_mcp_serversc          	      ó^   € V ^8„  d   QhR\         R\        R\        R\        \        ,          /# )rK   r¹   r¯   r   rM   )r»   rO   rQ   r¨   )rR   s   "rS   rT   rT   B  s6   € ÷ Kñ K¤ð K´ð KÔUYð KÔehÔilÕemñ KrU   c               óŠ  a€ V P                  R4      ;'       g    / p\        VP                  V4      V4      p\        V\        4      pV'       g   \	        V4      .pV Uu. uF  p\        V4      NK  	  ppRR/p. pV F@  p	VP                  V	4      p
V
'       d   VP                  V
4       K/  VP                  V	4       KB  	  Tp\        4       p\        4       p\        4       pW¼,          o\        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       d   \        VSWV4      pM\        WAV4      p\        WáW¼,          V,          R7       V'       d   V\        WWL4      ,          p\!        V 4      '       d"   V'       d	   V'       d   VP#                  R4       V Uu0 uF  qfS9  g   K  Wm9  g   K  VkK  	  ppV\%        WWò4      ,          pV'       g2   RV P                  R	4      ;'       g    . 9   d   VP#                  R4       V P                  R
4      ;'       g    / P                  R4      pV'       dO   ^ RIHp V! V4       U	u. uF*  q™P+                  4       '       g   K  V	P+                  4       NK,  	  pp	\-        VV4      pV'       d   V'       d   \/        W4       V# u upi u upi u up	i )zBResolve which individual toolset names are enabled for a platform.r�  Úhermesc              3   ó,   <"  € T F	  qS9   x € K  	  R # 5irr   rË   )ru   r]  ry  s   & €rS   rw   Ú&_get_platform_tools.<locals>.<genexpr>l  s   øé € Ð
=©}¨Ð$Ö$«}ùs   ƒTF)ÚskipÚcontext_engineÚkanbanrX  ÚagentÚdisabled_toolsets©Úparse_config_string_list)z
hermes-clizhermes-api-server)rŒ   rš  r¾   rN   r·   rO   Úextendr    rq  r¬   rv  r|   r€  r…  Ú!_recover_platform_native_toolsetsrŒ  r”  rŸ   Ú_merge_mcp_serversÚagent.skill_utilsr¬  ry   Ú$_prune_toolsets_stripped_by_disabledÚ#_warn_all_invalid_platform_toolsets)r¹   r¯   r   r�  rx  ri  r]  Ú_LEGACY_TOOLSET_ALIASESÚexpandedrÚ   ÚaliasesÚconfigurable_keysr‡  Úplatform_default_keysrP  Úexplicit_passthroughrª  r¬  Údisabled_namesry  s   &&$                @rS   r/  r/  B  sp  ø€ àŸ
™
Ð#6Ó7×=Ð=¸2ÐÜ3Ð4E×4IÑ4IÈ(Ó4SÐU]Ó^€Mô
 ' }´dÓ;Ðß Ü2°8Ó<Ð=ˆá'4Ó5¡} ”S˜–W¡}€MÐ5ð 	Ð5ð%Ðð €HÛˆØ)×-Ñ-¨dÓ3ˆßØ�O‰O˜GÖ$à�O‰O˜DÖ!ñ ð €Mä*Ó,ÐÜ-Ó/€NÜ2Ó4Ðð
 ,Õ<Ðç
ƒsÔ
=©}Ó
=‡s‡s‚sÔ
=©}Ó
=×=Ò=Ü-¨mÐ=PÐRXÐdyÓzÑä.¨}ÐH]Ó^Ðä%Ð&6ÐGXÕGið  mBõ  HBõ  CßØÔ4°VÀ}ÓeÕeÐô ˜f×%Ò%×/DÏ]Ø×ÑÐ-Ô.ñ *7Ó|© 2ÐDWÑ:WœBÐ\^Ñ\{ŸB˜B©ÐÐ|ØÔ*¨6ÐBVÓtÕtÐ÷ ! X°&·*±*¸ZÓ2H×2NÐ2NÈBÔ%OØ×Ñ˜XÔ&ð  Ÿ™ GÓ,×2Ð2°×7Ñ7Ð8KÓLÐßÝ>Ù3KÐL]Ô3^ÓoÑ3^¨4×blÑbl×bnœ,˜$Ÿ*™*ž,Ñ3^ˆÐoÜ?Ð@PÐR`ÓaÐç§Ü+¨HÔDØÐùò 6ùòZ }ùò ps$   Á J6Æ0J;Æ=J;ÇJ;ÉK É7K c                ó~   € V ^8„  d   QhR\         \        ,          R\        \        ,          R\         \        ,          /# )rK   rP  r¹  rM   )r¨   rO   rN   )rR   s   "rS   rT   rT   �  s8   € ÷ Xñ X¼3¼s½8ð XÔUYÔZ]ÕU^ð XÔcfÔgjÕckñ XrU   c           	     ó¢  € ^ RI Hp ^ RIHpHp V \        V4      ,
          pV Uu/ uF,  qfV! V4      '       d   \        V! V4      4      M	\        4       bK.  	  pp\        4       P                  ! VP                  4       !  pV! W�RRR7       VP                  4        UU	u0 uF  w  riV	'       d   W˜,          '       g   K  VkK!  	  up	p# u upi u up	pi )aO  Drop disabled names AND every toolset whose tools the runtime would strip anyway.

The agent subtracts ``agent.disabled_toolsets`` at TOOL granularity (``model_tools._select_tool_names``),
so disabling a composite like ``debugging`` removes the terminal/web/file tools even though those names
never appear in the list. A name-only subtraction here left inspection surfaces (``hermes tools
--summary``, banner, ``/tools``) showing toolsets as enabled that no session could call (#97015).
Passthrough entries (MCP server names) and toolsets with no static tools (``context_engine``) are kept.
)Ú_apply_toolset_selection)rT  Úvalidate_toolsetT)Ú
quiet_modeÚdisable)	Úmodel_toolsr¼  rX  rT  r½  r¨   Úunionrt  rH  )
rP  r¹  r¼  rT  r½  Ú	remainingrÚ   ÚresolvedÚ	survivingÚtoolss
   &&        rS   r±  r±  �  sª   € õ 5ß:à ¤3 ~Ó#6Õ6€IÙbkÓlÑbkÐZ^Ñ4DÀT×4JÒ4J”c™/¨$Ó/Ô0ÔPSÓPUÒUÑbk€HÐlÜ›%Ÿ+š+ x§¡Ó'8Ñ9€IÙ˜YÀ4ÐQUÕVØ$,§N¡NÔ$4ÔWÑ$4‘[�T¿EÀU×EVÑEV�DˆDÑ$4ÒWÐWùò mùó Xs   ¥2CÂCÂ<Cc                ól   € V ^8„  d   QhR\         \        ,          R\        R\         \        ,          RR/# )rK   rP  r¯   r¦  rM   Nre  )rR   s   "rS   rT   rT   £  s4   € ÷ %ñ %¼¼C½ð %ÌCð %ÔZ]Ô^aÕZbð %Ðgkñ %rU   c               óÞ  € ^ RI HpHp \        V! \	        V4      4      4      p\
         UUUu0 uF  w  p qs! V4       F  qˆkK  	  K  	  p	pppV  UUu0 uF  qc! V4       F  qˆkK  	  K  	  p
ppY$ Uu0 uF  q»P                  R4      '       g   K  VkK  	  up,          \        \        4      V0,
          ,          pVP                  4        FŽ  w  rlWb9   g/   VP                  R4      '       g   VP                  R4      '       d   K;  \        V! VRR7      4      pV'       d   WÕ8:  d   WÙ8:  d   Kd  WÚ8:  d   Kl  V P                  V4       V
P                  V4       K�  	  R# u upppi u uppi u upi )zÖAdd non-configurable platform toolsets (discord, feishu_*) in place: in the default composite but not in
CONFIGURABLE_TOOLSETS, so never in a checklist or saved list. Runs for BOTH ``_get_platform_tools`` branches.r{  r¶   ÚincludesÚpostureFrV  N)rX  rT  r|  r¨   r·   r�   Ú
startswithrk  rH  rŒ   rŸ   rß   )rP  r¯   r¦  rT  r|  Úplatform_tool_universer�   r¢   r  Úconfigurable_tool_universeÚclaimedrÍ   Úts_defra  s   &&$           rS   r®  r®  £  s/  € ÷ 3ä ¡Ô1JÈ8Ó1TÓ!UÓVÐÝ8MÕ!oÑ8M©¨°°1ÐWfÐgmÖWnÐRS¢!ÑWn¡!Ñ8MÐÒ!oÙ/ÔQÑ/�V¸ÈÖ9P°AŠqÑ9P‰qÑ/€GÑQØ˜hÓB™h˜¯,©,°y×*A—1�1™hÑBÕBÄcÔJ_ÓF`ÐdlÐcmÕFmÕn€DØ"Ÿ.™.Ö*‰ˆð Œ>˜VŸZ™Z¨
×3Ò3°v·z±zÀ)×7LÒ7LÙô ‘ vÀÔFÓGˆß˜xÔAÀXÔEkÙØÖ"Ø× Ñ  Ô(Ø�N‰N˜8Ö$ó +ùô "pùÛQùÚBs   ­EÁE$Á1E*ÂE*c                ó–   € V ^8„  d   QhR\         R\        \        ,          R\        \        ,          R\        R\        \        ,          /# )rK   r¹   rx  r¸  r   rM   )r»   rN   rO   r¨   rQ   )rR   s   "rS   rT   rT   »  s@   € ÷ )ñ )Üð)Ü!%¤c¥ð)ÜBEÄcÅ(ð)Üimð)äŒ…Xñ)rU   c                óö  € \        V 4      p\        V P                  R4      \        4      '       d   V P                  R4      M/ pYE Uu0 uF  p\	        V4      kK  	  up,          pV Uu0 uF9  pVP                  R4      '       d   W‡9  d   VR,          V9   d
   VR,          MTkK;  	  ppW',
          p	RV9   d   V	R0,
          # W$,          p
V'       d   W',          '       g	   W”,          # Wš,          # u upi u upi )zÏExplicit passthrough entries plus this platform's MCP servers: listed names form an allowlist, else every
globally enabled server (when ``include_default_mcp_servers``); the ``no_mcp`` sentinel disables all.rD  zmcp-:é   NNÚno_mcp)rN  r¾   rŒ   r»   rO   rÊ  )r¹   rx  r¸  r   Úenabled_mcp_serversÚ
configuredrÚ   Úknownr]  r¡   Úexplicit_mcp_serverss   &&&&       rS   r¯  r¯  »  s÷   € ô
 3°6Ó:ÐÜ.8¸¿¹ÀMÓ9RÔTX×.YÒ.Y�—‘˜MÔ*Ð_a€JØ¸Ó"D¹°¤3 t¦9¹Ñ"DÕD€Eñ CWóXÙBV¸Bð ')§m¡m°F×&;Ò&;ÀÄØ " 2¥¨%¤ð ˜ržFØ57ò8ÙBVð ð Xà!Õ)€FØ�=Ô Ø˜˜
Õ"Ð"Ø/ÕEÐ÷ #Ð+?×+GÔ+GØÕ+Ð+ØÕ(Ð(ùò #EùòXs   ÁC1Á)C6Â#C6c                ó4   € V ^8„  d   QhR\         R\        RR/# )rK   r¯   ÚexplicitrM   N)rO   rN   )rR   s   "rS   rT   rT   Ò  s!   € ÷ (ñ (´#ð (Äð (È$ñ (rU   c                ó¾  a€ ^ RI Ho V Uu. uF0  p\        V\        4      '       g   K  V'       g   K%  \        V4      NK2  	  ppV'       d�   \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       gK   V \
        9  d>   \
        P                  V 4       \        P                  RV RP                  V4      4       R# R# R# R# u upi )u²   Warn once when an explicit platform list has only invalid names (``hermes`` for ``hermes-cli`` â†’ no
native tools), at session tool resolution rather than only in update/doctor.)r½  c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irr   rË   )ru   r  r½  s   & €rS   rw   Ú6_warn_all_invalid_platform_toolsets.<locals>.<genexpr>Ø  s   øé € Ð<±e°Ñ)¨!×,Ð,³eùs   ƒTFz–platform '%s' has no valid toolsets configured (unknown name(s): %s) - tools will be unavailable. Run `hermes tools` to reconfigure. See issue #38798.z, N)
rX  r½  r¾   rO   r|   r—  rŸ   rI  r˜  Újoin)r¯   rØ  r  Únamedr½  s   &&  @rS   r²  r²  Ò  s›   ø€ õ *á%ÓB™X˜¬°A´s×);ŒVÄŒVŒS�ŽV™X€EÐBß—S“SÔ<±eÓ<—S—S’SÔ<±eÓ<×<Ò<ÀÔQrÔArÜ)×-Ñ-¨hÔ7Ü�‰ð0ð �d—i‘i Ó&ö		(ñ BsÑ<�uùò Cs   ŒC©C³Cc                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# )rK   r¹   r¯   Úenabled_toolset_keys©r»   rO   r¨   )rR   s   "rS   rT   rT   á  s&   € ÷ &ñ &¤ð &´ð &ÌCÔPSÍHñ &rU   c           	     ó†  € V P                  R/ 4       V Uu0 uF  p\        W14      '       g   K  VkK  	  pp\        4       p\        4       V,          \	        4       ,          R0,          p\        \        V RV. R7      V4      p\        V\        4      '       d   TM.  Uu0 uF   p\        V4      V9  g   K  \        V4      kK"  	  pp\        W(,          4      V R,          V&   V'       d   \        V4      \        V R4      V&   \        \        4       4      \        V R4      V&   V P                  R4      p	W(,
          p
\        V	\        4      '       dX   V	P                  R4      '       dA   V
'       d9   ^ RIHp V! V	R,          4      pV Uu. uF  q3V
9  g   K  VNK  	  ppWÜ8w  d   WÙR&   \!        V 4       R	# u upi u upi u upi )
z8Save the selected toolset keys for a platform to config.r�  rÒ  r  r‰  rU  r©  rª  r«  N)r½   r±   r¬   rq  rv  rš  r   r¾   rN   rO   rY  rÀ   rŒ   r»   r°  r¬  r   )r¹   r¯   rß  r]  Úplugin_keysÚdropÚexisting_toolsetsÚeÚpreserved_entriesÚ	agent_cfgÚnewly_enabledr¬  Úparsed_disabledrÂ  s   &&&           rS   Ú_save_platform_toolsrê  á  s¤  € à
×ÑÐ)¨2Ô.ñ *>ÓmÑ)= 2ÔA^Ð_a×AlŸB˜BÑ)=ÐÐmÜ*Ó,€Kô
 Ó +Õ-Ô0FÓ0HÕHÈHÈ:ÕU€DÜ7Ü�Ð+¨X¸rÔBÀHóÐô @JÐJ[Ô]a×?bÒ?bÑ*;ÐhjÐ*jó 0Ñ*j AÜ ›F¨$Ñ.ô  œ˜QžÑ*jÐð 0ä,2Ð3GÕ3[Ó,\€FÐÕ Ñ)÷ ÜBHÈÓBUŒ�VÐ4Ó5°hÑ?ô @FÔFXÓFZÓ?[„L�Ð1Ó2°8Ñ<ð —
‘
˜7Ó#€IØ(Õ<€MÜ�)œT×"Ò" y§}¡}Ð5H×'IÒ'IÏmÝ>Ù2°9Ð=PÕ3QÓRˆÙ"1ÓM¡/˜B¸}Ñ5L—R�R¡/ˆ	ÐMØÔ'Ø-6Ð)Ñ*Ü�ÖùòC nùò0ùò( Ns"   —F4¯F4ÂF9Â5F9ÆF>ÆF>c                ó0   € V ^8„  d   QhR\         R\        /# )rK   r˜   rM   rŽ  )rR   s   "rS   rT   rT   
  s   € ÷ Nñ N¤$ð N¬4ñ NrU   c                óª   € \         ;QJ d,    R V P                  R. 4       4       F  '       d   K   R# 	  R# ! R V P                  R. 4       4       4      # )zXTrue when every env var a provider row declares is set (trivially true for no-key rows).c              3   óF   "  € T F  p\        VR ,          4      x € K  	  R# 5i)r«   N©r   )ru   rå  s   & rS   rw   Ú&_provider_env_ready.<locals>.<genexpr>  s   é € ÐMÑ0L¨1Œ}˜Q˜u�X×&Ð&Ó0Lùs   ‚!rÝ   FT)ÚallrŒ   r—   s   &rS   Ú_provider_env_readyrñ  
  sA   € ç‹3ÑM°·±¸ZÈÔ0LÓM�3Œ3ÐMŠ3ÐMˆ3ÑM°·±¸ZÈÔ0LÓMÓMÐMrU   Úforce_freshFÚfeaturesc          
      óx   € V ^8„  d   QhR\         R\        R,          R\        R\        \        ,          R\        /# )rK   r�   r¹   Nrò  ró  rM   )rO   r»   rQ   r   r   )rR   s   "rS   rT   rT     sE   € ÷ Zñ ZÜðZÜ �ðZÜ=AðZÜU]Ô^vÕUwðZä	ñZrU   c          
     óÄ  € Vf   \        4       pV R8X  d    ^ RIHp V! 4       ^,          RJ# V R
9   dZ   Vf   \	        WR7      pVP
                  P                  V 4      pV'       d'   VP                  '       g   VP                  '       d   R# \        P                  V 4      pV'       dK   \        ;QJ d'    R \        WaW#R7       4       F  '       g   K   R# 	  R# ! R \        WaW#R7       4       4      # \        ;QJ d0    R	 \        P                  V . 4       4       F  '       d   K   R# 	  R# ! R	 \        P                  V . 4       4       4      #   \         d     R# i ; i)z6Check if a toolset's required API keys are configured.Nrf   )Úresolve_vision_provider_clientF©rò  Tc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5irr   )rñ  )ru   ru  s   & rS   rw   Ú$_toolset_has_keys.<locals>.<genexpr>$  s   é € ÐÑ3~¨aÔ& q×)Ð)Ó3~ùs   ‚)rò  ró  c              3   ó<   "  € T F  w  r\        V4      x € K  	  R # 5irr   rî  )ru   Úvarr¢   s   &  rS   rw   rù  %  s   é € ÐYÑ0X¡f cŒ}˜S×!Ð!Ó0Xùs   ‚>   rk   rj   rd   re   rg   rh   )r   Úagent.auxiliary_clientrö  r‡   r   ró  rŒ   Ú	availableÚmanaged_by_nousrÄ   r|   r,   rð  rÅ   )r�   r¹   rò  ró  rö  ÚfeatureÚcats   &&$$   rS   Ú_toolset_has_keysr    s)  € ð ‚~Ü“ˆØ�Ôð	ÝMÙ1Ó3°AÕ6¸dÐBÐBð ÐKÔKØÒÜ5°fÔVˆHØ×#Ñ#×'Ñ'¨Ó/ˆß˜×)×)Ð)¨W×-D×-DÐ-DÙä
×
Ñ
˜fÓ
%€Cß
ß‹sÑÔ3EÀcÐ_jÕ3~Ó�sŒsÐŠsÐˆsÑÔ3EÀcÐ_jÕ3~ÓÓÐß‹3ÑYÔ0H×0LÑ0LÈVÐUWÔ0XÓY�3Œ3ÐYŠ3ÐYˆ3ÑYÔ0H×0LÑ0LÈVÐUWÔ0XÓYÓYÐYøô ô 	Úð	ús   —E ÅEÅEc                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )rK   ÚquestionÚchoicesr�   rM   )rO   rN   rP   )rR   s   "rS   rT   rT   (  s.   € ÷ Yñ YœSð Y¬4ð Y¼#ð YÄcñ YrU   c                ó"   € ^ RI Hp V! WW"R7      # )z?Single-select menu (arrow keys). Delegates to curses_radiolist.)Úcurses_radiolist)ÚselectedÚcancel_returns)Úhermes_cli.curses_uir  )r  r  r�   r  s   &&& rS   Ú_prompt_choicer
  (  s   € å5Ù˜H¸ÔXÐXrU   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r^   )r»   rO   rP   )rR   s   "rS   rT   rT   3  s   € ÷ ñ œt¤C¬ H�~ñ rU   c                 ó°  € ^ RI Hp  V ! 4       p\        ;'       g    / s ^ RIp^ RIHp WP                  3pT\        9   d   \        T,          #  ^ RIpTP                  R4      pTP                  4        Uu/ uFP  qsP                  T4      ;p'       g   K  T\        TP!                  \"        P$                  ! RRRT/4      4      4      bKR  	  p	pT	\        T&   T	#   \         d1    \        P                  R4       \        P                  TR	3/ 4      u # i ; i  \         d/    \        P                  R4       \        P                  T/ 4      u # i ; iu upi )
zŸtiktoken (cl100k_base) tokens per tool name from the serialised OpenAI schema; cached per process and
registry generation, {} if tiktoken/registry unavailable.)Úhermes_home_keyN)Úregistryz4Tool registry unavailable; skipping token estimationÚcl100k_basez4tiktoken unavailable; skipping tool token estimationÚtypeÚfunctionéÿÿÿÿ)Úhermes_constantsr  Ú_tool_token_cacherÀ  Útools.registryr  Ú_generationr‡   rI  rJ  r½   ÚtiktokenÚget_encodingÚget_all_tool_namesÚ
get_schemar{   ÚencodeÚ_jsonÚdumps)
r  ÚscoperÀ  r  Ú	cache_keyr  ÚencrÚ   ÚschemaÚcountss
             rS   Ú_estimate_tool_tokensr#  3  sI  € õ 1áÓ€EÜ)×/Ð/¨RÐð=ÛÝ+Ø×0Ñ0Ð1ˆ	ð Ô%Ô%Ü  Õ+Ð+ð;ÛØ×#Ñ# MÓ2ˆð ×/Ñ/Ô1ó\á1ˆD×@SÑ@SÐTXÓ@YÐ6Y°fÓ6Yô 	UˆŒc�#—*‘*œUŸ[š[¨&°*¸jÈ&Ð)QÓRÓSÓTÒTÙ1ð ð \ð $*Ô�iÑ Ø€Møô! ô =Ü�‰ÐKÔLÜ ×+Ñ+¨U°B¨K¸Ó<Ò<ð=ûô ô ;Ü�‰ÐKÔLÜ ×+Ñ+¨I°rÓ:Ò:ð;üò\s/   ŸC ÁD Á6EÂ7EÃ8DÄDÄ6EÅEc                ó€   € V ^8„  d   QhR\         R\        \         ,          R\         R\        R\        \         ,          /# )rK   Úplatform_labelr}  r¯   rò  rM   )rO   r¨   rQ   )rR   s   "rS   rT   rT   R  sH   € ÷ -ñ -¬cð -¼CÄ½Hð -ÔPSð -Ômqð -ô  ~Aô  BEõ  ~Fñ -rU   c               óš  aaa€ ^ RI Hp ^ RIHo \	        4       o\        4        UUUu. uF*  w  rVp\        WR4      '       g   K  V\        9  g   K&  WVV3NK,  	  ppppV U	U
Uu. uF:  w  ršpV
 RV R2\        W“R7      '       g   \        V	4      '       d   RMR,           NK<  	  pp
p	p\        V4       UU	Uu0 uF  w  pw  p	 qéV9   g   K  VkK  	  pp	ppRpS'       d#   V U	Uu. uF  w  p	 qéNK
  	  upp	oR	 VVV3R
 llpV! RV  2WÏVVR7      pV Uu0 uF  qØV,          ^ ,          kK  	  up# u upppi u upp
p	i u upp	pi u upp	i u upi )zIMulti-select checklist of toolsets. Returns set of selected toolset keys.)Úcurses_checklistrS  ú  (Ú)r÷  z  [no API key]rp   Nc                ó0   € V ^8„  d   QhR\         R\        /# )rK   ÚchosenrM   re  )rR   s   "rS   rT   Ú/_prompt_toolset_checklist.<locals>.__annotate__f  s   € ÷ 	Añ 	Aœcð 	A¤cñ 	ArU   c                óÆ   <€ \        4       pV  F!  pVP                  S! SV,          4      4       K#  	  \        V3R lV 4       4      pVR8¼  d   RVR,          R R2# RV R2# )z1Deduplicated token cost of the selected toolsets.c              3   óH   <"  € T F  pSP                  V^ 4      x € K  	  R# 5i)rX   N)rŒ   )ru   rÚ   Útool_tokenss   & €rS   rw   Ú?_prompt_toolset_checklist.<locals>.status_fn.<locals>.<genexpr>k  s   øé € ÐG¹Y°T˜Ÿ™¨¨a×0Ð0»Yùs   ƒ"iè  zEst. tool context: ~z.1fzk tokensz tokens)r¨   rß   Úsum)r+  Ú	all_toolsÚidxÚtotalrT  r/  Úts_keyss   &   €€€rS   Ú	status_fnÚ,_prompt_toolset_checklist.<locals>.status_fnf  su   ø€ ä ›UˆIÛ�Ø× Ñ ¡°¸µÓ!>Ö?ñ äÔG¹YÓGÓGˆEØHMÐQUÌÐ)¨%°$­,°sÐ);¸8ÐDð  AÐ]qÐrwÐqxÐxð  \Að  ArU   z
Tools for )r  r6  )r	  r'  rX  rT  r#  r¦   r±   r²   r  rÇ   Ú	enumerate)r%  r}  r¯   rò  r'  rÍ   rÎ   ÚdÚ	effectiver�   Úts_labelÚts_descÚlabelsÚir¢   Úpre_selectedr6  r+  rT  r/  r5  s   &&&$              @@@rS   Ú_prompt_toolset_checklistr@  R  sn  ú€ å5Ý(ä'Ó)€Kô $HÔ#IõZÙ#I‘i�q˜QÜ(¨×5ô 	Ø:;ÔCXÑ:Xô 	ˆˆq‹	Ñ#Ið ò Zñ *3õ4ñ *3Ñ%ˆF˜gð ˆ*�C˜�y Ð"Ü#4°V×#UÓ#UÔZjÐkq×ZrÒZrÑÐxz÷	|ð 	|á)2ð ò 4ô 09¸Ô/CÕYÑ/CÑ+˜!™^˜f a¨ÐQXÑGX—A�AÑ/C€LÒYà€IßÙ.7Ô8©i™l˜f a¨’6©iÒ8ˆ÷	Aò 	Añ Ø
�^Ð$Ð% vÈLÐdmô€Fñ &,Ó,¡V �a�L˜�OˆO¡VÑ,Ð,ùô1Zùô4ùô Zùó 9ùò -s0   ¨D-ÁD-ÁD-Á"A D4Â5D;Ã	D;Ã"EÄEÚreconfigurec                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )rK   r�   r¹   rò  rA  ©rO   r»   rQ   )rR   s   "rS   rT   rT   u  s/   € ÷ Hñ Hœsð H¬Dð HÄ$ð HÔ\`ñ HrU   c               óx   € \         P                  V 4      pV'       d   \        WWVR7       R# \        WR7       R# )zbConfigure a toolset: provider selection + API keys (TOOL_CATEGORIES), else simple env-var prompts.©rò  rA  )rA  N)rÄ   rŒ   r/   rC   )r�   r¹   rò  rA  r   s   &&$$ rS   Ú_configure_toolsetrF  u  s*   € ä
×
Ñ
˜fÓ
%€Cß
Ü  ¨fÐ[f×gä& v×GrU   c                ó0   € V ^8„  d   QhR\         R\        /# )rK   r¹   rò  rŽ  )rR   s   "rS   rT   rT   ~  s   € ÷ ñ œdð ´Dñ rU   c               óä  € \        4        UUUu. uFB  w  r#p\        V4      '       g   K  \        W VR7      '       g   \        W 4      '       g   K?  W#3NKD  	  ppppV'       g   \	        R4       R# V UUu. uF  w  rFVNK	  	  uppR.,           p\        RV\        V4      ^,
          4      pV\        V4      8¼  d   R# \        WX,          ^ ,          WRR7       \        V 4       R# u upppi u uppi )z<Let user reconfigure an existing tool's provider or API key.r÷  z#No configured tools to reconfigure.NÚCancelz+  Which tool would you like to reconfigure?TrE  )	r¦   rÇ   r  Ú _toolset_enabled_for_reconfigureÚ_print_infor
  r{   rF  r   )	r¹   rò  r�   r;  r¢   Úconfigurablerb   r  r3  s	   &$       rS   Ú_reconfigure_toolrM  ~  sÚ   € ô $HÔ#IõBá#IÑˆF˜aÜ˜F×#ô 	ô ˜f¸+×FÓFÜ/°×?ô	 	ˆÓÙ#Ið ò B÷ ÜÐ9Ô:ÙÙ%1Ô2¡\™˜‹u¡\Ò2°h°ZÕ?€GÜ
ÐFÈÔQTÐU\ÓQ]Ð`aÕQaÓ
b€CØ
Œc�,ÓÔÙÜ�|Õ(¨Õ+¨VÐZ^Õ_Ü�ÖùôBùó 3s   �C%ª!C%ÁC%Á5C,c                ó<   € V ^8„  d   QhR\         R\        R\        /# )rK   r�   r¹   rM   rC  )rR   s   "rS   rT   rT   ‘  s!   € ÷ ñ ¬Sð ¼$ð Ä4ñ rU   c                óŠ   a € \        V 3R l\        4       F  p S \        W4      9   d    R# K  	  R#   \         d     K+  i ; i)zdTrue if the toolset is enabled on any platform, so reconfigure covers enabled-but-unconfigured ones.c                 ó   <€ \        SV 4      # rr   )r±   )ru  r�   s   &€rS   Ú<lambda>Ú2_toolset_enabled_for_reconfigure.<locals>.<lambda>“  s   ø€ Ô%BÀ6È1Ô%MrU   TF)Úfilterr   Ú_current_platform_toolsr‡   )r�   r¹   r¯   s   f& rS   rJ  rJ  ‘  sK   ø€ äÔMÌyÖYˆð	ØÔ0°ÓBÔBÚñ Cñ Zñ øô ô 	Úð	ús   š3³AÁAc                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# rA  )r»   ÚtuplerQ   )rR   s   "rS   rT   rT   �  s'   € ÷ Eñ E¤$ð E¬5´´t°Õ+<ñ ErU   c                óö   € V P                  R4      p\        V\        4      '       d   VP                  R4      MRp\        V\        4      '       d   TM/ pVP                  R4      RJ VP                  R4      RJ 3# )z=Return (collection_enabled, send_enabled) from a config dict.Ú	telemetryÚshared_metricsNr}  TÚsend)rŒ   r¾   r»   )r¹   rX  Úshareds   &  rS   Ú_shared_metrics_stater\  �  sh   € à—
‘
˜;Ó'€IÜ0:¸9Äd×0KÒ0KˆY�]‰]Ð+Ô,ÐQU€FÜ! &¬$×/Ò/‰V°R€FØ�:‰:�iÓ  DÐ(¨&¯*©*°VÓ*<ÀÐ*DÐDÐDrU   c                ó0   € V ^8„  d   QhR\         R\        /# rA  rº   )rR   s   "rS   rT   rT   ¥  s   € ÷ 2ñ 2¤tð 2´ñ 2rU   c                óT   € \        V 4      w  rV'       g   RMV'       d   RMRpRV R2# )z»Menu row for shared metrics. Collect-only is an answer the offer no longer has; a profile
that chose it earlier keeps it, and the row names it rather than reading "off" while it collects.r8  zsending to Nouszcollecting locallyzConfigure shared metrics  (r)  )r\  )r¹   r}  rZ  Ústates   &   rS   Ú_shared_metrics_menu_labelr`  ¥  s.   € ô *¨&Ó1�M€Gß ‰E¿DÑ'8ÐFZ€EØ(¨¨¨qÐ1Ð1rU   c                ó(   € V ^8„  d   QhR\         RR/# )rK   r¹   rM   N)r»   )rR   s   "rS   rT   rT   ­  s   € ÷ ñ ´$ð ¸4ñ rU   c                ór   € ^ RI Hp \        V 4      pV! V 4       \        V 4      V8w  d   \        V 4       R# R# )ziToggle shared-metrics collection/sending via the setup wizard prompt (single home for the consent rules).)Úsetup_telemetryN)Úhermes_cli.setuprc  r\  r   )r¹   rc  Úbefores   &  rS   Ú%_configure_shared_metrics_interactiverf  ­  s1   € å0ä" 6Ó*€FÙ�FÔÜ˜VÓ$¨Ô.Ü�FÖñ /rU   Úindentú  c                ól   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        RR/# )rK   ÚaddedÚremovedrg  rM   Nre  )rR   s   "rS   rT   rT   ·  s7   € ÷ Dñ Dœs¤3�xð D´#´cµ(ð DÄsð DÐVZñ DrU   c          
     ó  € \        V 4       F4  p\        \        V R\        V4       2\        P
                  4      4       K6  	  \        V4       F4  p\        \        V R\        V4       2\        P                  4      4       K6  	  R# )z=Print ``+ label`` / ``- label`` lines for a checklist change.z+ z- N)rY  Úprintr
   rÒ   r	   ÚGREENÚRED)rj  rk  rg  r]  s   &&$ rS   Ú_print_toolset_diffrp  ·  sf   € ä�UŽmˆÜŒe�v�h˜b¤°Ó!3Ð 4Ð5´v·|±|ÓDÖEñ ä�WŽoˆÜŒe�v�h˜b¤°Ó!3Ð 4Ð5´v·z±zÓBÖCó rU   c                óh   € V ^8„  d   QhR\         \        ,          R\        R\        \        ,          /# )rK   Únew_enabledr¹   rM   )r¨   rO   r»   rN   )rR   s   "rS   rT   rT   ¿  s)   € ÷ ñ ¬¬S­ð ¼4ð ÄDÌÅIñ rU   c           	     ó’   € \        V 4       Uu. uF-  p\        V4      '       g   K  \        W!RR7      '       g   K+  VNK/  	  up# u upi )zmSelected toolsets still missing provider/API-key setup, sorted (opened even when the selection is unchanged).Tr÷  )rY  rÇ   r.   )rr  r¹   r�   s   && rS   Ú_toolsets_needing_setuprt  ¿  sK   € ô $ KÔ0óÙ0�6Ü˜F×#ô 	Ü(KÈFÐhl×(mÐ(m÷ 	ˆÑ0ñð ùò s   ŽA¦A»Ac                ól   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        RR/# )rK   rj  Úalreadyr¹   rM   NrQ  )rR   s   "rS   rT   rT   Ç  s1   € ÷ +ñ +¤#¤c¥(ð +´S¼µXð +Ätð +ÐPTñ +rU   c                óN   € \        W,
          V4       F  p\        W24       K  	  R# )zPConfigure newly enabled toolsets that need keys, skipping those already handled.N)rt  rF  )rj  rv  r¹   r�   s   &&& rS   Ú_configure_newly_addedrx  Ç  s   € ä)¨%­/¸6ÖBˆÜ˜6Ö*ó CrU   c                ó<   € V ^8„  d   QhR\         R\        R\        /# ©rK   r¹   r0  rM   rº   )rR   s   "rS   rT   rT   Í  s&   € ÷ Nñ N¤ð N¬Sð N´Sñ NrU   c                 óŒ   € \        \        W4      4      p\        \        4       4      pR \        V,          R,           RV RV R2# )z
Configure rb   r(  Ú/z	 enabled))r{   rT  r¦   r   )r¹   r0  Úcountr4  s   &&  rS   Ú_platform_menu_labelr~  Í  sE   € ÜÔ'¨Ó5Ó6€EÜÔ4Ó6Ó7€EØœ	 $�¨Õ0Ð1°°U°G¸1¸U¸GÀ9ÐMÐMrU   c                óJ   € V ^8„  d   QhR\         R\        \        ,          RR/# ©rK   r¹   Úenabled_platformsrM   N©r»   rN   rO   )rR   s   "rS   rT   rT   Ó  s%   € ÷ ñ ¤ð ¼$¼s½)ð Èñ rU   c                ó¦  € \        \        4       4      p\        \        R\        P
                  \        P                  4      4       \        4        \        W4      P                  4        FÚ  w  r4\        \        R\        V,          R,           2\        P                  4      \        R\        V4       RV R2\        P                  4      ,           4       \        V4       F2  p\        \        R\        V4       2\        P                  4      4       K4  	  V'       d   K·  \        \        R\        P                  4      4       KÜ  	  \        4        R	# )
zK``hermes tools --summary``: enabled toolsets per platform, non-interactive.u   â˜¤ Tool Summaryrh  rb   r(  r|  r)  u       âœ“ z    (none enabled)N)r{   r¦   rm  r
   r	   ÚCYANÚBOLDr1  rH  r   ÚDIMrY  rÒ   rn  )r¹   r�  r4  r0  r}  r�   s   &&    rS   Ú_print_tools_summaryr‡  Ó  sé   € äÔ4Ó6Ó7€EÜ	Œ%Ð"¤F§K¡K´·±Ó
=Ô>Ü	„GÜ2°6ÓM×SÑSÖU‰ˆÜŒe�bœ 4�¨Õ1Ð2Ð3´V·[±[ÓAÄEÈCÔPSÐT[ÓP\È~Ð]^Ð_dÐ^eÐefÐJgÔio×isÑisÓDtÕtÔuÜ˜W–oˆFÜ”%˜(¤>°&Ó#9Ð":Ð;¼V¿\¹\ÓJÖKñ &ç‰wÜ”%Ð,¬f¯j©jÓ9Ö:ñ Vô 
†GrU   r  c                óV   € V ^8„  d   QhR\         \        ,          R\        R\        RR/# )rK   Úto_configurer¹   r  rM   N)rN   rO   r»   rQ   )rR   s   "rS   rT   rT   á  s-   € ÷ +ñ +¤$¤s¥)ð +´Tð +Ìð +ÐX\ñ +rU   c          	     óž  € V '       g   R# \        4        V'       d   RMRp\        \        R\        V 4       RV R2\        P                  4      4       V  F2  p\        \        R\        V4       2\        P                  4      4       K4  	  \        \        R\        P                  4      4       \        4        V  F  p\        WA4       K  	  R# )	z9Announce then configure each toolset in ``to_configure``.Nzselected tool(s)ztool(s)z  Configuring Ú Ú:u       â€¢ z1  You can skip any tool you don't need right now.)rm  r
   r{   r	   ÚYELLOWrÒ   r†  rF  )r‰  r¹   r  Úwhatr�   s   &&$  rS   Ú_configure_listr�  á  s”   € çÙÜ	„Gß!)Ñ¨y€DÜ	Œ%�.¤ \Ó!2Ð 3°1°T°F¸!Ð<¼f¿m¹mÓ
LÔMÛˆÜŒe�hœ~¨fÓ5Ð6Ð7¼¿¹ÓDÖEñ ä	Œ%ÐCÄVÇZÁZÓ
PÔQÜ	„GÛˆÜ˜6Ö*ó rU   c                óÂ   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        R\        \         \        ,          \         \        ,          3,          /# )rK   rr  Úprevr¯   rM   )r¨   rO   rV  )rR   s   "rS   rT   rT   ð  sN   € ÷ Lñ L¤¤S¥ð L´´Sµð LÄSð LÌUÔSVÔWZÕS[Ô]`ÔadÕ]eÐSeÕMfñ LrU   c                óT   € \        V4      pW,
          V,          W,
          V,          3# )zœ``(added, removed)`` scoped to the checklist universe, so read-time toolsets (MCP names) the user never
saw a checkbox for don't print as spurious removals.)r³   )rr  r‘  r¯   Úuniverses   &&& rS   Ú_checklist_diffr”  ð  s)   € ô ' xÓ0€HØÕ (Õ*¨TÕ-?À8Õ,KÐKÐKrU   c                óJ   € V ^8„  d   QhR\         R\        \        ,          RR/# r€  r‚  )rR   s   "rS   rT   rT   ÷  s%   € ÷ ñ ¤ð ¼¼c½ð Àtñ rU   c           	     óž  a	€ V EF?  p\         V,          p\        W4      p\        VR,          V\        ,
          V4      p\	        \        WTV4      !   \        WRR7      p\        V4       FD  o	\        V	3R l\         4       S	4      p\        \        RV R2\        P                  4      4       KF  	  \        \        V4       Uu. uF   p\        V4      '       g   K  W†9  g   K  VNK"  	  upV RR7       \!        WV4       \#        V 4       \        \        R	VR,           R
2\        P                  4      4       \        4        EKB  	  R# u upi )zYFresh install: one checklist per platform, no menu, keys prompted for every enabled tool.rb   T)rP  rò  c              3   ó>   <"  € T F  w  rq1S8X  g   K  Vx € K  	  R # 5irr   rË   rÌ   s   &   €rS   rw   Ú&_first_install_flow.<locals>.<genexpr>   s   øé € ÐPÑ+@¡  aÈÁKŸ!š!Ó+@ùrÐ   u     âœ“ z': using your Nous subscription defaultsF)r  õ     âœ“ Saved z tool configurationN)r   rT  r@  rk  rp  r”  r   rY  rÑ   r�   rm  r
   r	   rn  r�  rÇ   rê  r   )
r¹   r�  r0  ÚpinfoÚcurrent_enabledrr  Úauto_configuredrb   r]  r�   s
   &&       @rS   Ú_first_install_flowr�  ÷  s  ø€ ä!ˆÜ˜$•ˆÜ1°&Ó?ˆÜ/°°gµÀÔRgÕ@gÐimÓnˆÜœ_¨[È4ÓPÒQÜ5°fÐhlÔmˆÜ˜_Ö-ˆFÜÔPÕ+@ÓPÐRXÓYˆEÜ”%˜&  Ð'NÐOÔQW×Q]ÑQ]Ó^Ö_ñ .ô
 	Ü  Ô-ÓdÑ-�BÔ1AÀ"×1EŒRÈ"ÑJc�RˆRÑ-ÑdØ˜Uõ	$ô 	˜V¨;Ô7Ü�FÔÜŒe�l 5¨¥>Ð"2Ð2EÐFÌÏÉÓUÔVÜ�ó# "ùò es   ÃE

ÃE

Ã$E

c                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# rz  rà  )rR   s   "rS   rT   rT     s*   € ÷ Pñ P¤Dð P´ð P¼¼C½ñ PrU   c                 ó   € \        WR R7      # )F)r   )r/  )r¹   r0  s   &&rS   rT  rT    s   € Ü˜vÈÔOÐOrU   Úheaderc                ó²   € V ^8„  d   QhR\         R\        R\        \        ,          R\        \        ,          R\        \        ,          R\        R\        RR	/# )
rK   r¹   r0  rr  r‘  rv  rg  r   rM   N)r»   rO   r¨   rQ   )rR   s   "rS   rT   rT     sY   € ÷ 
4ñ 
4¤dð 
4´#ð 
4ÄCÌÅHð 
4ÔTWÔX[ÕT\ð 
4ÔgjÔknÕgoð 
4Ü),ð
4Ü=Að
4ØNRñ
4rU   c               ó  € \        W#V4      w  rxV'       dJ   V'       g	   V'       d:   \        \        R\        V,          R,           R2\        P
                  4      4       \        WxVR7       \        WtV 4       \        WV4       R# )a  Print the diff, configure newly added toolsets not in ``already``, and write the platform list.
Keys for newly enabled tools not already handled by the selected-tool pass, so a tool enabled globally
but lacking provider config doesn't drop the user back to the main menu.rh  rb   rŒ  )rg  N)	r”  rm  r
   r   r	   r†  rp  rx  rê  )	r¹   r0  rr  r‘  rv  rg  r   rj  rk  s	   &&&&&$$  rS   Ú_apply_platform_checklistr£    s]   € ô
 % [¸Ó=�N€Eß—5ŸGÜŒe�bœ 4�¨Õ1Ð2°!Ð4´f·j±jÓAÔBÜ˜¨vÕ6Ü˜5¨6Ô2Ü˜ {Ö3rU   Úall_platformsc                ó^   € V ^8„  d   QhR\         R\        \        ,          R\        R\        /# )rK   r¹   Úplatform_keysr¤  rM   )r»   rN   rO   rQ   )rR   s   "rS   rT   rT     s.   € ÷ ñ ¤ð ´d¼3µið ÔSWð Ôdhñ rU   c               ó¦  € V'       d   RM\         V^ ,          ,          R,          pV Uu/ uF  qD\        W4      bK  	  pp\        4       P                  ! VP	                  4       !  p\        W6RR7      p\        Wp4      p\        W€4       Wv8X  d;   V'       g3   \        \        V'       d   RMRV 2\        P                  4      4       R# V FA  pV'       d   \        W4      MWT,          p	\        YYy\        V4      V'       d   RMR	VR
7       KC  	  \        V 4       \        \        V'       d   RMRV R2\        P                  4      4       R# u upi )z¥Checklist + key setup + save for one platform, or for every platform at once (the 'Configure all
platforms (global)' menu entry). Returns True when config was saved.zAll platformsrb   Tr÷  z  No changesz  No changes to Fz    rh  )rg  r   u+     âœ“ Saved configuration for all platformsr™  z configuration)r   rT  r¨   rÁ  rt  r@  rt  r�  rm  r
   r	   r†  r£  r   rn  )
r¹   r¦  r¤  rb   ÚpkÚcurrentÚall_currentrr  Úselected_to_configurer‘  s
   &&$       rS   Ú_configure_platformsr¬    s  € ÷  -‰O´)¸MÈ!Õ<LÕ2MÈgÕ2V€EÙANÓOÁ¸2Ô*¨6Ó6Ò6Á€GÐOÜ“%—+’+˜wŸ~™~Ó/Ñ0€KÜ+¨EÈDÔQ€KÜ3°KÓHÐÜÐ)Ô2ØÔ!×*?ÜŒe§m‘NÐ;KÈEÈ7Ð9SÔU[×U_ÑU_Ó`ÔaÙÛˆ÷ 7DÔ& vÔ2ÈÍˆÜ! &¨kÄÐEZÓA[ß3@©ÀdÐS`÷	bñ	 ô �ÔÜ	Œ%ÇÑ=ÐVbÐchÐbiÐiwÐTxÜ—‘óô áùò# Ps   ªEc                ó>   € V ^8„  d   QhR\         R\        R,          /# )rK   Úfirst_installr¹   N)rQ   r»   )rR   s   "rS   rT   rT   6  s   € ÷ <ñ <¬Dð <Ä$ÈÅ+ñ <rU   c                ó„  a€ Vf   \        4       p\        4       p\        4        \        V RR4      '       d   \	        W#4       R# \        \        R\        P                  \        P                  4      4       \        \        R\        P                  4      4       \        \        R\        P                  4      4       \        \        R\        P                  4      4       \        4        V'       d   \        W#4       R# \        V4      pV Uu. uF  p\        W%4      NK  	  upoRR	 V3R
 lllpV! R\        V4      ^8„  4      pV! R4      pV! \        V4      4      p	V! R\        VP!                  R4      4      4      p
V! R4      p \#        RS^ R7      pWË8X  d   M¶WÈ8X  d   \%        VRR7       M–WÉ8X  d   \'        V4       \        V4      SV	&   MvWÊ8X  d   \)        V4       MdWÇ8X  d7   \+        W$RR7      '       d#   \-        V4       F  w  rÞ\        W.4      SV&   K  	  M(\+        W$V,          .4       \        W$V,          4      SV&   \        4        KÌ  \        4        ^ RIHp \        \        RV! 4        R2\        P                  4      4       \        \        R\        P                  4      4       \        4        R# u upi )zÏEntry point for `hermes tools` / `hermes setup tools`. ``first_install`` skips the menu (checklist + key
prompts); a wizard-passed ``config`` receives platform_toolsets so its final save_config() keeps them.NÚsummaryFu   â˜¤ Hermes Tool Configurationz'  Enable or disable tools per platform.z;  Tools that need API keys will be configured when enabled.zM  Guide: https://hermes-agent.nousresearch.com/docs/user-guide/features/toolsTc                ó<   € V ^8„  d   QhR\         R\        R\        /# )rK   rb   ÚpresentrM   )rO   rQ   rP   )rR   s   "rS   rT   Ú#tools_command.<locals>.__annotate__N  s!   € ÷ )ñ )œð )¤dð )´cñ )rU   c                 ó^   <€ V'       g   R# SP                  V 4       \        S4      ^,
          # )é   r  )r    r{   )rb   r²  Úplatform_choicess   &&€rS   Ú_add_rowÚtools_command.<locals>._add_rowN  s*   ø€ ßØˆIØ×Ñ Ô&ÜÐ#Ó$ qÕ(Ð(rU   z Configure all platforms (global)z2Reconfigure an existing tool's provider or API keyzConfigure MCP server toolsrD  ÚDonezSelect an option:r  r÷  )r¤  )Údisplay_hermes_homez  Tool configuration saved to z/config.yamlz:  Changes take effect on next 'hermes' or gateway restart.©T)r   r+  rm  Úgetattrr‡  r
   r	   r„  r…  r†  r�  rN   r~  r{   r`  rQ   rŒ   r
  rM  rf  rD   r¬  r8  r  rº  )rL   r®  r¹   r�  r¦  r0  r·  Ú
global_idxÚreconfig_idxÚmetrics_idxÚmcp_idxÚdone_idxr3  Úcir¨  rº  r¶  s   &&&             @rS   Útools_commandrÃ  6  s5  ø€ ð ‚~Ü“ˆÜ.Ó0Ðä	„GÜˆt�Y ×&Ò&Ü˜VÔ7ÙÜ	Œ%Ð/´·±¼f¿k¹kÓ
JÔKÜ	Œ%Ð9¼6¿:¹:Ó
FÔGÜ	Œ%ÐMÌvÏzÉzÓ
ZÔ[Ü	Œ%Ð_Ôag×akÑakÓ
lÔmÜ	„GßÜ˜FÔ6Ùô Ð*Ó+€MÙGTÓUÁ}¸tÔ,¨VÖ:Á}ÑUÐ÷)ò )ñ Ð<¼cÀ-Ó>PÐSTÑ>TÓU€JÙÐPÓQ€LÙÔ5°fÓ=Ó>€KÙÐ3´T¸&¿*¹*À]Ó:SÓ5TÓU€GÙ˜Ó€Hà
ÜÐ0Ð2BÈAÔNˆØŒ?ØØÔÜ˜f°$Ö7ØÔÜ1°&Ô9Ü,FÀvÓ,NÐ˜[Ò)ØŒ^Ü,¨VÕ4ØÔÜ# FÈ×NÓNÜ'¨Ö6‘F�BÜ+?ÀÓ+KÐ$ RÓ(ñ 7øô ! ¸Õ*<Ð)=Ô>Ü$8¸ÈsÕASÓ$TÐ˜SÑ!ÜŽä	„GÝ4Ü	Œ%Ð0Ñ1DÓ1FÐ0GÀ|ÐTÔV\×V`ÑV`Ó
aÔbÜ	Œ%ÐLÌfÏjÉjÓ
YÔZÜ	†GùòM Vs   ÄJ=c                ó"  € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   ^\         9   d
   \        ;R&   ^\         9   dH   \        \
        \        \        \        3,          \
        \        \        3,          3,          ,          ;R&   # )rK   r—  rZ  r  )Ú__conditional_annotations__r¨   rO   Ú	frozensetr   r»   rV  rP   )rR   s   "rS   rT   rT      sh   € × 2Ñ 2÷r 4Ò 3¤3¤s¥8Ñ 3ñs 3÷j 4Ò 3œIÑ 3ñk 3÷^ JÒ I”8œD¤¤s¬C x¥´$´s¼C°xµ.Ð!@ÕAÕBÑ Iò_ 3rU   ))rd   u   ðŸ”� Web Search & Scrapingzweb_search, web_extract)re   u   ðŸŒ� Browser Automationznavigate, click, type, scroll)Úterminalu   ðŸ’» Terminal & Processeszterminal, process)Úfileu   ðŸ“� File Operationszread, write, patch, search)Úcode_executionu   âš¡ Code ExecutionÚexecute_code)rf   u    ðŸ‘�ï¸�  Vision / Image AnalysisÚvision_analyze)Úvideou   ðŸŽ¬ Video Analysisz,video_analyze (requires video-capable model))rg   u   ðŸŽ¨ Image GenerationÚimage_generate)rh   u   ðŸŽ¬ Video Generationz%video_generate (text/image/reference))ri   u   ðŸ�¦ X (Twitter) Searchz,x_search (requires xAI OAuth or XAI_API_KEY))rj   u   ðŸ”Š Text-to-SpeechÚtext_to_speech)rk   u   ðŸŽ™ï¸� Speech-to-Textz9voice transcription (gateway voice messages + voice mode))Úskillsu   ðŸ“š Skillszlist, view, manage)Útodou   ðŸ“‹ Task PlanningÚ	todo_list)r¨  u   ðŸ“Œ Kanbanz)opt-in task board tools for this platform)Úmemoryu   ðŸ’¾ Memoryz!persistent memory across sessions)r§  u   ðŸ§© Context Enginez,runtime tools from the active context engine)Úsession_searchu   ðŸ”Ž Session Searchzsearch past conversations)Úconnectionsu   ðŸ”Œ Connectionsz0remote connector tools and account authorization)Úclarifyu   â�“ Clarifying QuestionsrÕ  )Ú
delegationu   ðŸ‘¥ Task DelegationÚdelegate_task)Úcronjobu   â�° Cron JobszBcreate/list/update/pause/resume/run, with optional attached skills)Údiscordu   ðŸ’¬ Discord (read/participate)z-fetch messages, search members, create thread)Údiscord_adminu   ðŸ›¡ï¸�  Discord Server Adminz&list channels/roles, pin, assign roles)Úyuanbaou   ðŸ¤– Yuanbaozgroup info, member queries, DM)rl   u+   ðŸ–±ï¸�  Computer Use (macOS/Windows/Linux)z)background desktop control via cua-driver>   Úa2arÌ  r¨  rÙ  Úspotifyri   rh   rÚ  )r(  )rp   )rp   rp   rË   )rë   rì   z.Managed OpenAI TTS billed to your subscription)rë   rì   z8Managed OpenAI transcription billed to your subscription)ÚFIRECRAWL_API_KEYr  ÚPERPLEXITY_API_KEY)rë   rì   zaManaged image generation (FAL, Krea 3 and Krea 2, Nous Portal models) billed to your subscription)rë   rì   z8Managed FAL video generation billed to your subscription)z%Nous Subscription (Browser Use cloud)rì   z/Managed Browser Use billed to your subscription)ÚdarwinÚwin32Úlinux)ÚOPENROUTER_API_KEYzhttps://openrouter.ai/keys))ÚtelegramÚTELEGRAM_BOT_TOKEN)rÙ  ÚDISCORD_BOT_TOKEN)ÚslackÚSLACK_BOT_TOKEN)ÚwhatsappÚWHATSAPP_ENABLED)ÚqqbotÚ	QQ_APP_IDrr   r»  )rX   )NFN)±rÅ  Ú__doc__Újsonr  ÚloggingrŠ   Úpathlibr   Útypingr   r   r   r   r   Úhermes_cli.cli_outputr   rK  Úhermes_cli.colorsr	   r
   Úhermes_cli.configr   r   r   r   Úhermes_cli.nous_subscriptionr   r   r   Úhermes_cli.platformsr   Ú_PLATFORMS_REGISTRYÚhermes_cli.toolset_scoper   r   r±   Úhermes_cli.toolset_validationr   Úhermes_cli.tools_config_cuar   r   r   r   r   r   r   Ú"hermes_cli.tools_config_post_setupr   r   r    r!   r"   r#   r$   r%   Ú!hermes_cli.tools_config_providersr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   Úhermes_cli.tools_config_mcprD   rE   rF   rG   r\   Ú	getLoggerÚ__name__rI  ra   r¨   r—  Ú__file__ÚparentÚresolveÚPROJECT_ROOTrH  rb   rc   r�   r   rk  r²   r�   r”   r–   r™   r¦   r¬   r³   r·   rÀ   rÇ   rÒ   rØ   râ   Ú_NOUSÚ_OPENAI_VOICE_KEYÚ_ELEVENLABS_KEYÚ_DEEPINFRA_KEYrÄ   rÅ   r)  r+  r1  r?  rN  rÆ  rZ  rb  rg  rn  rq  rv  r€  r…  rŒ  r”  rš  rŸ  r/  r±  r®  r¯  r²  rê  rñ  r  r
  r  r#  r@  rF  rM  rJ  r\  r`  rf  rp  rt  rx  r~  r‡  r�  r”  r�  rT  r£  r¬  rÃ  rT   )rÍ   ÚinforÅ  s   00@rS   Ú<module>r	     s²  øðß 2ã Û Û 	Ý ß 6Õ 6å ;ß +ß NÓ N÷[ñ [å A÷cå G÷<÷ <ñ <÷I÷ Ió I÷a÷ a÷ a÷ a÷ a÷ a÷ a÷ a÷nó nðØ'*ðØCG÷ð 
×	Ò	˜8Ó	$€õñ /2«eÐ !Ó 3á�H‹~×$Ñ$×+Ñ+×3Ñ3Ó5€ð _r×^wÒ^wÔ^yÔzÑ^yÑSZÐSTˆQ�˜$Ÿ*™*Ð&7¸×9MÑ9MÐNÒNÑ^yÒz€	óÐ õ<ó sÐ ð ˜Ð õ>÷$Jð Jð  Ð ò8ò
õ$
õdõeõ
õUõ
b÷Tð T÷
	ð 	ð 
˜tÐ$€ÙÐ1Ð3CÐEkÓlÐ ÙÐ+Ð-AÐCpÓq€ÙÐ)Ð+>Ð@eÓf€ð 
ØÐ  &¨&ØÙÐ%Ð'@ÐBcÐrxÔyÙò vÐu}ð vØñvØ/4ðvØIaÐcsÐHtòvá�˜vÐ'<Ð?PÐ>QÐ`hÔiÙ�Ð TÐchÐuô  AÙ�˜vÐ'<¸Ð>OÐ^jÔkáÐ(¨&Ð2MÙÐ(Ð*;Ð=ZÓ[Ð\ÐktôváÐ$ iÐ1_ÙÐ'Ð)9Ð;cÓdÐeÐt|ô~á�˜oÐ/_ÐnyØ'ô)á�˜/Ð+]ÐlsØ#ô%á� &Ð*nÐqð  qAØ)ô+ð!
ðð, 
ØÐ  &¨)ØÙ�Ð";Ð=cÐryØ,ô.áò QØ&ðQØ*/ñQØFKðQà$<Ð>NÐ#OòQñ �˜6Ð#QÐTeÐSfÐu}Ô~Ù�˜Ð&^Ù�~ ~Ð7VÓWÐXÐgmôoá�ÐZÐinð  |Fô  GÙÐ$ fÐ._ÐbqÐarØ*ô,áÐ" FÐ,RÙÐ(Ð*;Ð=ZÓ[Ð\Ðktôvá�˜fÐ&OÐR`ÐQaÐp{Ô|ð
ðð& 
ØÐ&¨Ð7OØÐ{Ø�ð 	ØÐ(¨'°>À5ð  KGØ˜K¨°RðdØ;@ðdØBXÐZ_Ø Ó"bñdð Ð,¨gÐ7LÈeÐUØ˜KØ™$Ð2Ð4oÓpÐqðsð	
ðð ØÐ" F¨Fð
 	Ùò kØx}ñkà&1ðkàFOÀ[ðkàciòkð
ðð ØÐ" F¨Fð 	Ùò oÐtyñ oØ&1ðoØFOÀ[ðoØhmòoð
ð	ð ØÐ$ mÐ5SØðrð
 	�ØÙÐ8¸.ð  KCØ&ô(á� Ð(PÙ�} mÐ5LÓMÐNóPð
ðð  ØÐ$ f¨fð 	Ù�Ð";Ð=cÐv}Ø &°?ôDá�Ð=ð  @DØ")¸,ÐS_ôañ
 ò VØ"/ðVØ38ñVØOXðVà$9Ð#:ðVàGTòVñ �˜OÐ-XÙ�}Ð&:Ð<gð  rIô  Jð  KØ"+¸	ôCñ �Ð 8Ð:ZÐlyØ-ô/ð
ðð4 ØÐ4°f¸iàÓ5ð 	ÙÐ*Ð,NØxØ&+¸ôFð
ððsE€ðT %Ñ'[Ð&\Ð]Ð ñ>Ð õ
m÷
Kð K÷ð õñ: )2«Ð Ó 3õ%õ.kõ
õ>õ>õõ$!õõ/õõ,
LðKÐ\`÷ Kð K÷\X÷&%÷0)÷.(÷&÷RNó
ZÙDIñZØz~÷Zò Z÷2Yò Yð FJÐ Ó I÷ó>-Ðtx÷ -ò -ñFHÈñ HÑch÷ Hñ Hñ¸4÷ ñ ÷&÷E÷2÷ñDÉT÷ Dñ D÷÷+÷N÷ñ+Èt÷ +ñ +÷L÷÷,Pñ
4Ù/3ñ
4ÙDI÷
4ñ 
4ñÑZ_÷ ñ ÷0<ô <ùóo {s   Å&V7