+
    jHàjŸ  ã                   óð   a € R t0 t R t^ RIt^ RIHt ^ RIHtHtHtH	t	 ]'       d   ^ RI
Ht ^ RIHt ^ RIHt R R ltR	 R
 ltRR R llt/ t] ^ k / t] ^k ]P*                  ! 4       tR R ltR R ltR# )zÞMCP dashboard helpers: create-payload normalisation, env redaction/summary, dashboard-driven MCP OAuth worker.

Wraps the same config layer the CLI uses (hermes_cli.mcp_config); stdio ``env``
secrets are redacted on read.
N)ÚPath)ÚTYPE_CHECKINGÚAnyÚDictÚOptional)ÚDashboardOAuthFlow)Ú
redact_key)ÚMCPServerCreatec                ó”   € V ^8„  d   QhR\         R\        \        \        \        \        3,          \
        \        ,          3,          /# )é   ÚbodyÚreturn)r	   ÚtupleÚstrÚdictr   r   )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/web_server_mcp.pyÚ__annotate__r      s6   € ÷ 5-ñ 5-¤ð 5-¼5ÄÄdÌ3ÔPSÈ8ÅnÔV^Ô_bÕVcÐAcÕ;dñ 5-ó    c                ó  € ^ RI HpHp ^ RIHp V P
                  ;'       g    RP                  4       pV'       g   \        R4      hV P                  ;'       g    RP                  4       pV P                  ;'       g    RP                  4       pV P                  ;'       g    RP                  4       P                  4       pV P                  e   V P                  P                  4       MRp\        V4      \        V4      8X  d   \        R4      hVR9  d   \        R
V 24      h/ p	V'       d²   V P                  '       d   \        R4      hV P                   '       d   \        R4      hVR8X  dG   V'       d	   V! V4      MRp
V
'       d   V
P                  4       R8X  d   \        R4      hV! V4      V	R&   MV P                  e   \        R4      hWYR&   VR	8X  d   R	V	R&   MxVR8w  g   V P                  e   \        R4      hWiR&   V P                  '       d   \#        V P                  4      V	R&   V P                   '       d   \%        V P                   4      V	R&   V! WI4      pV'       d!   \        RV RRP'                  V4       24      hWIV3# )a-  Validate a Dashboard MCP create request and build its safe config.

The returned config never contains the Bearer token; callers persist it via
the shared Bearer helper once inside the intended profile scope. Shared by
the MCP page and the Profile Builder so both enforce one transport/auth contract.
)Ú_bearer_auth_headersÚ_strip_bearer_prefix)Úvalidate_mcp_server_entryÚ zServer name is requiredÚnoneNz8Provide exactly one of URL (HTTP/SSE) or command (stdio)ÚheaderÚoauthzUnsupported auth mode: z2Arguments are only supported for stdio MCP serversz>Environment variables are only supported for stdio MCP serversÚbearerzBearer token is requiredÚheadersz+Bearer token requires header authenticationÚurlÚauthz:HTTP authentication is not supported for stdio MCP serversÚcommandÚargsÚenvzServer 'z' rejected: z; >   r   r   r   )Úhermes_cli.mcp_configr   r   Úhermes_cli.mcp_securityr   ÚnameÚstripÚ
ValueErrorr   r!   r    ÚlowerÚbearer_tokenÚget_secret_valueÚboolr"   r#   Úlistr   Újoin)r   r   r   r   r&   r   r!   r    r*   Úserver_configÚ
normalizedÚissuess   &           r   Ú_normalize_mcp_server_creater2      s!  € ÷ QÝAà�I‰I�OˆO˜×"Ñ"Ó$€DßÜÐ2Ó3Ð3à�8‰8�>ˆ>�r×
 Ñ
 Ó
"€CØ�|‰|×!Ð!˜r×(Ñ(Ó*€GØ�I‰I×Ð˜×&Ñ&Ó(×.Ñ.Ó0€DØ;?×;LÑ;LÒ;X�4×$Ñ$×5Ñ5Ô7Ð^b€LäˆCƒy”D˜“MÔ!ÜÐSÓTÐTØÐ.Ô.ÜÐ2°4°&Ð9Ó:Ð:à$&€Mß
Ø�9�9ˆ9ÜÐQÓRÐRØ�8�8ˆ8ÜÐ]Ó^Ð^Ø�8Ôß?KÑ-¨lÔ;ÐQSˆJß ×!1Ñ!1Ó!3°xÔ!?Ü Ð!;Ó<Ð<Ù';¸DÓ'AˆM˜)Ò$Ø×ÑÒ*ÜÐJÓKÐKà"�eÑØ�7Œ?Ø$+ˆM˜&Ñ!øà�6Œ>˜T×.Ñ.Ò:ÜÐYÓZÐZØ#*�iÑ Ø�9�9ˆ9Ü$(¨¯©£OˆM˜&Ñ!Ø�8�8ˆ8Ü#'¨¯©£>ˆM˜%Ñ á& tÓ;€FßÜ˜8 D 6¨°d·i±iÀÓ6GÐ5HÐIÓJÐJØ Ð,Ð,r   c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r   r#   r   )r   r   r   )r   s   "r   r   r   I   s*   € ÷ ñ œœc¤3˜h�ð ¬D´´c°­Nñ r   c                óæ   € / pT ;'       g    / P                  4        F0  w  r# V'       d   \        \        V4      4      MRV\        V4      &   K2  	  V#   \         d    RT\        T4      &    KR  i ; i)z5Mask secret-shaped MCP env values for read responses.r   z***)Úitemsr   r   Ú	Exception)r#   ÚoutÚkÚvs   &   r   Ú_redact_mcp_envr:   I   sf   € à€CØ—�˜×!Ñ!Ö#‰ˆð	 ß01œ*¤S¨£VÔ,°rˆC”�A“‹Kñ $ð
 €Jøô ô 	 ØˆC”�A“ŒKð	 ús   £*AÁA0Á/A0c          
      óš   € V ^8„  d   QhR\         R\        \         \        3,          R\         R,          R\        \         \        3,          /# )r   r&   ÚcfgÚpluginNr   )r   r   r   )r   s   "r   r   r   T   sA   € ÷ ñ œcð ¬¬S´#¨X­ð ÄÀdÅ
ð ÔVZÔ[^Ô`cÐ[cÕVdñ r   c                 ó²  € ^ RI Hp VP                  R4      '       d   RMVP                  R4      '       d   RMRpVP                  R4      pVP                  R4      ;'       g    / pV'       gS   \        V\        4      '       d=   \
        ;QJ d    R	 V 4       F  '       g   K   R
M	  RM! R	 V 4       4      '       d   RpRT RTRVP                  R4      RVP                  R4      R\        VP                  R4      ;'       g    . 4      R\        VP                  R4      ;'       g    / 4      RTRV! V4      RVP                  R4      RVe   RRV/# RRV/# )é    )Úmcp_server_enabledr   Úhttpr!   ÚstdioÚunknownr    r   c              3   óZ   "  € T F!  p\        V4      P                  4       R 8H  x € K#  	  R# 5i)ÚauthorizationN)r   r)   )Ú.0Úkeys   & r   Ú	<genexpr>Ú&_mcp_server_summary.<locals>.<genexpr>Z   s#   é € Ð5mÑelÐ^a´c¸#³h·n±nÓ6FÈ/Ö6YÓelùs   ‚)+TFr   r&   Ú	transportr"   r#   ÚenabledÚtoolsÚsourcer=   Úconfig)Útools.mcp_tool_commonr@   ÚgetÚ
isinstancer   Úanyr-   r:   )r&   r<   r=   r@   rJ   r    r   s   &&&    r   Ú_mcp_server_summaryrS   T   s&  € Ý8àŸ'™' %Ÿ.š.‘¸#¿'¹'À)×:LÒ:L©wÐR[€IØ�7‰7�6‹?€DØ�g‰g�iÓ ×&Ð& B€Gß”J˜w¬×-Ò-·#³#Ñ5mÑelÓ5m·#·#²#Ñ5mÑelÓ5m×2mÒ2mØˆà�Ø�YØˆs�w‰w�u‹~Ø�3—7‘7˜9Ó%Ø”�S—W‘W˜V“_×*Ð*¨Ó+ØŒ˜sŸw™w u›~×3Ð3°Ó4Ø�ØÑ% cÓ*à�—‘˜Ó!Ø˜fÒ0�(Ø�&ðð ð 7?Ø�&ðð r   c                ó8   € V ^8„  d   QhR\         P                  /# )r   r   )Ú	threadingÚLock)r   s   "r   r   r   q   s   € ÷ Iñ I¤I§N¡Nñ Ir   c                 óÞ   € V P                   V P                  3p\        ;_uu_ 4        \        P	                  V\
        P                  ! 4       4      uuR R R 4       #   + '       g   i     R # ; i©N)Úhermes_homeÚserver_nameÚ_mcp_oauth_transactions_lockÚ_mcp_oauth_transactionsÚ
setdefaultrU   rV   )ÚflowrG   s   & r   Ú_mcp_oauth_transactionr_   q   sD   € Ø×Ñ˜T×-Ñ-Ð
.€Cß	%Ö	%Ü&×1Ñ1°#´y·~²~Ó7GÓH÷ 
&×	%×	%Ó	%ús   §)AÁA,	c                ó(   € V ^8„  d   QhR\         RR/# )r   r<   r   N)r   )r   s   "r   r   r   w   s   € ÷ A ñ A ¬ð A °ñ A r   c                ó„  € ^ RI HpHpHp  ^ RIHpHpHp ^ RIH	pH
p	 ^ RIHp
 ^ RIHpHpHp ^ RIHp R;pp V	! V P&                  4      pV! V! \)        V P&                  4      4      V P&                  R7      p\+        V 4      pT;_uu_ 4        V! 4       ;_uu_ 4        V
! V 4      ;_uu_ 4        V! 4       pV! V P,                  4      pVP/                  4       pRp VP1                  V P,                  V P&                  R	7      pV! V P,                  W! V4      R
7      pV! V P,                  4      '       g   \3        R4      hV! V P,                  V4       V UUu. uF  w  ppRVRV/NK  	  uppV n        V P7                  4        V P8                  '       d   ^ RIHp V! V P,                  4       RRR4       RRR4       RRR4       Te	   T! T4       Te	   T! T4       T PQ                  4        R# u uppi   \>         d>    TPA                  TRR7       TPC                  T P,                  TT P&                  R	7       h i ; i  + '       g   i     L›; i  + '       g   i     L¦; i  + '       g   i     L±; i  Te	   T! T4       Te
   T! T4       i i ; i  \>         dŠ   p^ RIH"p T! T4      p ^ RIH#p T! T P,                  T\I        T\J        4      '       d   TPM                  R4      MRR7      pT'       d   TpM  \>         d     Mi ; iT PO                  T4        Rp?ELIRp?ii ; i  T PQ                  4        i ; i)zCRun the normal MCP probe with dashboard redirect/callback handlers.)Ú_oauth_tokens_presentÚ_probe_single_serverÚ_save_mcp_server)Úbuild_profile_secret_scopeÚreset_secret_scopeÚset_secret_scope)Úreset_hermes_home_overrideÚset_hermes_home_override)Údashboard_oauth_flow)ÚHermesTokenStorageÚforce_interactive_oauthÚlogin_connect_timeout)Úget_managerN)Úprofile_home)rY   )Úconnect_timeoutuw   The server responded, but no OAuth token was obtained â€” this provider may require a manually-registered OAuth client.r&   Údescription)Úreconnect_mcp_serverT)Úonly_if_absent)Úexception_message)Ú!humanize_oauth_registration_errorr   )Ú
server_url))r$   rb   rc   rd   Úagent.secret_scopere   rf   rg   Úhermes_constantsrh   ri   Útools.mcp_dashboard_oauthrj   Útools.mcp_oauthrk   rl   rm   Útools.mcp_oauth_managerrn   rY   r   r_   rZ   ÚsnapshotÚremoveÚRuntimeErrorrL   Úmark_approvedÚreconnect_liveÚtools.mcp_tool_looprr   r6   ÚrestoreÚrestore_entryrt   ru   rQ   r   rP   Ú
mark_errorÚmark_worker_done)r^   r<   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   Ú
home_tokenÚsecret_tokenÚtransactionÚmanagerÚstorageÚbackupÚprevious_entryrL   ÚtÚdrr   Úexcrt   Úmsgru   Ú	humanizeds   &&                             r   Ú_run_dashboard_mcp_oauthr’   w   sÆ  € çcÑcð> ßgÑgßYÝBßfÑfÝ7à$(Ð(ˆ
�\ð#	7Ù1°$×2BÑ2BÓCˆJÙ+Ù*¬4°×0@Ñ0@Ó+AÓBÐQU×QaÑQaôcˆLä0°Ó6ˆKß’Ñ5×7Õ7Ñ9MÈd×9SÕ9SÙ%›-�Ù,¨T×-=Ñ-=Ó>�Ø ×)Ñ)Ó+�Ø!%�ðØ%,§^¡^°D×4DÑ4DÐRV×RbÑRb ^Ó%c�NÙ0Ø×(Ñ(¨#Ð?TÐUXÓ?Yô�Eñ 1°×1AÑ1A×BÒBÜ*ð\óð ñ % T×%5Ñ%5°sÔ;ÙLQÔ!RÉEÁDÀAÀq 6¨1¨m¸QÓ"?ÉEÒ!R�D”JØ×&Ñ&Ô(Ø×*×*Ð*ÝLá,¨T×-=Ñ-=Ô>÷+ :T×7—ð6 Ò'Ù" <Ô0ØÒ%Ù*¨:Ô6ð& 	×ÑÖùóC "Søô !ô Ø—O‘O F¸4�OÔ@Ø×)Ñ)¨$×*:Ñ*:¸NÐX\×XhÑXhÐ)ÔiØðú÷- :T×9Sú×7×7ú——ûð6 Ò'Ù" <Ô0ØÒ%Ù*¨:Õ6ð &ûäô Ý?á Ó$ˆð		ÝIá9Ø× Ñ  #ÄJÈsÔTX×DYÒDY°#·'±'¸%´.Ð_côˆI÷ Ø�ùÜô 	Ùð	úà�‰˜×Òûð!ûð$ 	×ÑÕúsà   Œ,J ¹AI8 ÂI%ÂI	Â.,H?ÃA<G4ÅG.Å)*G4ÆG4Æ,I	Æ4I%Æ<I8 ÇJ Ç.G4Ç4AH<È<H?È?IÉ
I	ÉI"ÉI%É%I5	É0I8 É8JÊJ ÊL*Ê!L%Ê0A	K=Ë:K=Ë<L%Ë=LÌL%Ì
LÌL%ÌL- Ì%L*Ì*L- Ì-L?c                ó¸   € V ^8„  d   Qh/ ^ \         9   d   R;R&   ^\         9   d6   \        \        \        \        3,          \        P
                  3,          ;R&   # )r   zdict[str, DashboardOAuthFlow]Ú_mcp_oauth_flowsr\   )Ú__conditional_annotations__r   r   r   rU   rV   )r   s   "r   r   r      sL   € ÷ ñ ÷V 7Ò 6Ð1Ñ 6ñW÷X DÒ Cœœe¤C¬ H�o¬y¯~©~Ð=Õ>Ñ CòYr   rX   )r•   Ú__doc__rU   Úpathlibr   Útypingr   r   r   r   ry   r   Úhermes_cli.configr   Úhermes_cli.web_modelsr	   r2   r:   rS   r”   r\   rV   r[   r_   r’   r   )r•   s   @r   Ú<module>r›      sb   øðöó Ý ß 5Ó 5çÝ<Ý (Ý 1õ5-õp÷ð0 57Ð Ó 6ØACÐ Ó CØ(Ÿ~š~Ó/Ð õI÷A r   