+
    lHàj8a  ã                   ó>  a € Rv t%0 t R t^ RIt^ RIt^ RIHt Rt]! R04      t]! 0 RkRkRkRkR	kR
kRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkR kR!kR"kR#kR$kR%kR&kR'kR(kR)kR*kR+kR,kR-kR.kR/kR0kR1kR2kR3kR4kR5kR6kR7kR8kR9kR:kR;kR<kR=kR>kR?kR@kRAkRBkRCkRDkREkRFkRGkRHkRIkRJkRKkRLkRMkRNkROk4      t	RP RQ lt
RR RS ltRT RU lt]! 4       t]! 4       t]],          t/ t] ^ k RV RW ltRX RY ltRZ R[ ltRwR\ R] lltRxtR^ R_ ltR` Ra ltRb Rc ltRytRd Re ltRzt]! RfRg04      t]P:                  ! ^Rh7      Ri Rj l4       tRk Rl ltRwRm Rn llt Ro Rp lt!Rq Rr lt"]! 0 R{m4      ],          ]
! RsRt7      ,          t#] ^k ]! Ru ]# 4       4      t$] ^k R# )|a  Secret-scrub policy for Hermes child processes: pure data + predicates for which env
names are Hermes-managed credentials. The env *builders* applying it (``_make_run_env``,
``_sanitize_subprocess_env``, ``hermes_subprocess_env``) live in ``tools.environments.local``.N)ÚOptionalÚ_HERMES_FORCE_ÚAWS_BEARER_TOKEN_BEDROCKÚOPENAI_BASE_URLÚOPENAI_API_KEYÚOPENAI_API_BASEÚOPENAI_ORG_IDÚOPENAI_ORGANIZATIONÚOPENROUTER_API_KEYÚANTHROPIC_BASE_URLÚANTHROPIC_API_KEYÚANTHROPIC_TOKENÚ	LLM_MODELÚGOOGLE_API_KEYÚVERTEX_CREDENTIALS_PATHÚGOOGLE_APPLICATION_CREDENTIALSÚDEEPSEEK_API_KEYÚMISTRAL_API_KEYÚGROQ_API_KEYÚTOGETHER_API_KEYÚPERPLEXITY_API_KEYÚCOHERE_API_KEYÚFIREWORKS_API_KEYÚXAI_API_KEYÚHELICONE_API_KEYÚPARALLEL_API_KEYÚFIRECRAWL_API_KEYÚFIRECRAWL_API_URLÚTELEGRAM_HOME_CHANNELÚTELEGRAM_HOME_CHANNEL_NAMEÚDISCORD_HOME_CHANNELÚDISCORD_HOME_CHANNEL_NAMEÚDISCORD_REQUIRE_MENTIONÚDISCORD_FREE_RESPONSE_CHANNELSÚDISCORD_AUTO_THREADÚSLACK_HOME_CHANNELÚSLACK_HOME_CHANNEL_NAMEÚSLACK_ALLOWED_USERSÚWHATSAPP_ENABLEDÚWHATSAPP_MODEÚWHATSAPP_ALLOWED_USERSÚSIGNAL_HTTP_URLÚSIGNAL_ACCOUNTÚSIGNAL_ALLOWED_USERSÚSIGNAL_GROUP_ALLOWED_USERSÚSIGNAL_HOME_CHANNELÚSIGNAL_HOME_CHANNEL_NAMEÚSIGNAL_IGNORE_STORIESÚEMAIL_ADDRESSÚEMAIL_PASSWORDÚEMAIL_IMAP_HOSTÚEMAIL_SMTP_HOSTÚEMAIL_HOME_ADDRESSÚEMAIL_HOME_ADDRESS_NAMEÚHERMES_DASHBOARD_SESSION_TOKENÚGATEWAY_ALLOWED_USERSÚGH_TOKENÚGITHUB_APP_IDÚGITHUB_APP_PRIVATE_KEY_PATHÚGITHUB_APP_INSTALLATION_IDÚMODAL_TOKEN_IDÚMODAL_TOKEN_SECRETÚDAYTONA_API_KEYÚGATEWAY_RELAY_IDÚGATEWAY_RELAY_SECRETÚGATEWAY_RELAY_DELIVERY_KEYÚVERCEL_OIDC_TOKENÚVERCEL_TOKENÚVERCEL_PROJECT_IDÚVERCEL_TEAM_IDÚNOUS_API_KEYÚQWEN_API_KEYÚHERMES_ANON_API_SECRETÚ$HERMES_DASHBOARD_BASIC_AUTH_PASSWORDÚ"HERMES_DASHBOARD_BASIC_AUTH_SECRETÚHERMES_DASHBOARD_DRAIN_SECRETÚ#HERMES_DASHBOARD_OIDC_CLIENT_SECRETÚHERMES_MEET_REALTIME_KEYc                ó0   € V ^8„  d   QhR\         R\        /# )é   Úsecrets_onlyÚreturn)ÚboolÚ	frozenset)Úformats   "ÚH/home/ubuntu/.hermes/hermes-agent/tools/environments/local_env_policy.pyÚ__annotate__rX   7   s   € ÷ eñ e¤Dð e¬Yñ eó    c                ó:   a € ^ RI Hp \        V 3R lV 4       4      # )zžEnv of features that left core for a catalog plugin (``hermes_cli.left_core_migration``):
stripped exactly as when core shipped them, plugin installed or not.)Ú	LEFT_COREc              3   ó„   <"  € T F5  pVP                   S'       d   RMVP                  ,            F  pVx € K	  	  K7  	  R # 5i)N© )Ú
secret_envÚprivate_env)Ú.0ÚfeatureÚnamerR   s   &  €rW   Ú	<genexpr>Ú!_left_core_env.<locals>.<genexpr>;   s<   øé € ð e©˜gØ!(×!3Ñ!3¿\±rÈw×ObÑOb×!cÐ!c˜õ Ù!cñ «ùs
   ƒA ›%A )Úhermes_cli.left_core_migrationr[   rU   )rR   r[   s   d rW   Ú_left_core_envrf   7   s%   ø€ õ 9Üô e©ó eó eð erY   c                ó$   € V ^8„  d   QhR\         /# ©rQ   rS   ©rU   )rV   s   "rW   rX   rX   ?   s   € ÷ #ñ #¤yñ #rY   c                 ó°  € \        \        4      \        RR7      ,          p  ^ RIHp VP                  4        Fs  pV P                  VP                  4       VP                  R8X  d   V P                  \        4       VP                  '       g   KX  V P                  VP                  4       Ku  	   ^ RIHp VP                  4        FP  w  rEVP!                  R4      pVR
9   g#   VR8X  g   K&  VP!                  R4      '       g   K?  V P                  V4       KR  	  V P#                  R	4       \%        V 4      #   \         d     L”i ; i  \         d     L:i ; i)z=Derive the blocklist from provider, tool, and gateway config.F©rR   )ÚPROVIDER_REGISTRYÚaws_sdk)ÚOPTIONAL_ENV_VARSÚcategoryÚsettingÚpasswordÚCLAUDE_CODE_OAUTH_TOKEN>   ÚtoolÚ	messaging)ÚsetÚ_STATIC_PROVIDER_ENV_BLOCKLISTrf   Úhermes_cli.authrl   ÚvaluesÚupdateÚapi_key_env_varsÚ	auth_typeÚ_AWS_SDK_CREDENTIAL_ENV_VARSÚbase_url_env_varÚaddÚImportErrorÚhermes_cli.configrn   ÚitemsÚgetÚdiscardrU   )Úblockedrl   Úpconfigrn   rb   Úmetadataro   s          rW   Ú_build_provider_env_blocklistr‡   ?   s  € äÔ:Ó;¼nÐZ_Ô>`Õ`€Gð	Ý5Ø(×/Ñ/Ö1ˆGØ�N‰N˜7×3Ñ3Ô4Ø× Ñ  IÔ-Ø—‘Ô;Ô<Ø×'×'Ò'Ø—‘˜G×4Ñ4Ö5ñ 2ðÝ7Ø/×5Ñ5Ö7‰NˆDØ—|‘| JÓ/ˆHØÐ0Ô0Ø 	Ö)¨h¯l©l¸:×.FÔ.FØ—‘˜DÖ!ñ	 8ð" ‡O�OÐ-Ô.ô �WÓÐøô1 ô Ùðûô ô Ùðús6   ¢A)D6 ÂD6 Â07E Ã,E ÄE Ä6EÅEÅEÅEc                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   e   s   € ÷ ñ ¤9ñ rY   c                 óú   aa€ ^ RI HoHp HoHp ^ RIHp 0 RmpVP                  V3R lV P                  4        4       4       W1! RRR7      ,          pVP                  V3R lV! 4        4       4       \        V4      # )	aS  Secrets the messaging adapters declare, process-wide: core ``password`` messaging entries
of OPTIONAL_ENV_VARS, the bundled platform plugin manifests' secret entries, and the
secret-named keys the gateway env-override table reads (WEIXIN_TOKEN, FEISHU_ENCRYPT_KEY, ...).
Declared names only: a user's own ``SLACK_USER_TOKEN`` or ``LOCAL_LLM_API_KEY`` is not Hermes's.
A profile's user-installed platform plugins are per home: :func:`_home_adapter_secret_env`.
Nothing here fails soft: an unreadable bundled manifest or env table fails the import rather
than dropping its secrets from the policy.)ÚCORE_DECLARED_ENV_NAMESrn   ÚPLATFORM_SECRET_ENV_SUFFIXESÚplatform_manifest_secret_envs)Úconfig_env_table_keysc              3   ó¼   <"  € T FQ  w  rVS9   g   K  VP                  R 4      R8X  g   K&  VP                  R4      '       g   K?  VP                  4       x € KS  	  R# 5i)ro   rt   rq   N)r‚   Úupper)r`   rb   ÚmetarŠ   s   &  €rW   rc   Ú,_build_adapter_secret_env.<locals>.<genexpr>w   sU   øé € ð SÑ0I¡* $ØÐ3Ñ3ô à—X‘X˜jÓ)¨[Ñ8ô à=A¿X¹XÀj×=Qô �—‘—�Ó0Iùs   ƒA“A«AÁAÚbundledT)ÚsourceÚstrictc              3   ó�   <"  € T F;  qP                  4       P                  S4      '       g   K)  VP                  4       x € K=  	  R # 5i©N©r�   Úendswith©r`   Únr‹   s   & €rW   rc   r‘   {   s/   øé € ÐpÑ$;˜q¿w¹w»y×?QÑ?QÐRn×?o”�—‘—�Ó$;ùs
   ƒ&A®A>   ÚQQ_STT_API_KEYÚYUANBAO_APP_KEYÚFEISHU_ENCRYPT_KEYÚMSGRAPH_CLIENT_SECRETÚFEISHU_VERIFICATION_TOKENÚMSGRAPH_WEBHOOK_CLIENT_STATE)
r€   rŠ   rn   r‹   rŒ   Úhermes_cli.profile_channelsr�   ry   r�   rU   )rn   rŒ   r�   ÚnamesrŠ   r‹   s       @@rW   Ú_build_adapter_secret_envr£   e   st   ù€ ÷qó qåAò]€Eà	‡L�Lô SÐ0A×0GÑ0GÔ0Ió Sô Sð 
Ð*°)ÀDÔIÕI€EØ	‡L�LÔpÑ$9Ô$;ÓpÔpÜ�UÓÐrY   c                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   ˆ   s   € ÷ ñ ¤)ñ rY   c                 óV  € ^ RI Hp Hp ^ RIHpHp V! 4       pV! V4      V! V4      re\        P                  V4      pVe   V^ ,          e   V^ ,          V8w  dJ   V ! V4      w  r‰V\        ,          pV	'       g   Ve   W‡^,          ,          pV	'       d   TMRV3pV\        V&   V^,          # )a„  Secrets declared by the bound profile's own user-installed platform plugins. Per home, not
process-wide: under multiplex profile A's plugin must neither strip a same-named value from
profile B's children nor be missing from A's. Cached per home and keyed on every manifest's
file signature, so an edit, replacement or deletion takes effect on the next spawn. A plugin
manifest under ``plugins/platforms/`` that cannot be read raises. A partial scan (a plugin dir
or flat manifest unreadable or unparsable) keeps the names this home already had and is not
cached, so a failed discovery never releases a known denial and recovery is seen at once.)Úplatform_manifest_secret_scanÚplatform_manifest_stamp)Úget_hermes_homeÚhermes_home_keyN)	r€   r¦   r§   Úhermes_constantsr¨   r©   Ú_HOME_ADAPTER_SECRET_CACHEr‚   Ú_ADAPTER_SECRET_ENV)
r¦   r§   r¨   r©   ÚhomeÚkeyÚstampÚcachedr¢   Úcompletes
             rW   Ú_home_adapter_secret_envr²   ˆ   sœ   € ÷ YßAÙÓ€DÙ  Ó&Ñ(?ÀÓ(EˆÜ'×+Ñ+¨CÓ0€FØ‚~˜ �Ò*¨f°Q­i¸5Ô.@Ù7¸Ó=‰ˆØÔ$Õ$ˆß˜FÒ.Ø˜A•YÕˆEß#‘%¨¨uÐ5ˆØ*0Ô" 3Ñ'Ø�!�9ÐrY   c                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   Ÿ   s   € ÷ Jñ J¤iñ JrY   c                 ób   a€ ^ RI Hp  ^ RIHo \	        V3R lV P                  4        4       4      # )a4  Secret-named ``required_env`` of the adapters registered in the current profile scope.
Tier 2 only: ``required_env`` is an unchecked setup list, so a plugin naming OPENAI_API_KEY
must not strip it from credentialed children. No blanket fallback: a registry error surfaces
instead of an empty (fail-open) set.©Úplatform_registry)r‹   c              3   ó’   <"  € T F<  pVP                  4       P                  S4      '       g   K*  VP                  4       x € K>  	  R # 5ir–   r—   r™   s   & €rW   rc   Ú/_registry_adapter_secret_env.<locals>.<genexpr>¦   s8   øé € ð JÑ(N 1ØŸ™›	×*Ñ*Ð+G×Hô �Q—W‘W—Y�YÓ(Nùs
   ƒ'A¯A)Úgateway.platform_registryr¶   r€   r‹   rU   Úrequired_env_names)r¶   r‹   s    @rW   Ú_registry_adapter_secret_envr»   Ÿ   s2   ø€ õ
 <Ý>Üô JÐ(9×(LÑ(LÔ(Nó Jó Jð JrY   c                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   ª   s   € ÷ Gñ G¬	ñ GrY   c                 ó4   € \        4       \        4       ,          # )zÃPer-call adapter secrets: the bound profile's user-plugin declarations (Tier 1, see
:func:`_home_adapter_secret_env`) plus the registered adapters' (Tier 2,
:func:`_registry_adapter_secret_env`).)r»   r²   r]   rY   rW   Ú_registered_adapter_secret_envr¾   ª   s   € ô (Ó)Ô,DÓ,FÕFÐFrY   c                óJ   € V ^8„  d   QhR\         R\        R,          R\        /# )rQ   rb   Ú_registeredNrS   )ÚstrrU   rT   )rV   s   "rW   rX   rX   ±   s,   € ÷ 	_ñ 	_¤sð 	_¼ÀTÕ9Ið 	_ÔUYñ 	_rY   c                óz   € V P                  4       pV \        9   g   V\        9   d   R# Y!f   \        4       9   # T9   # )a¥  ``name`` is a blocklisted provider/tool credential or adapter secret, matched the way the
platform's environment resolves names: exact plus case-folded. On Windows the environment
block is case-insensitive, so ``openai_api_key`` IS ``OPENAI_API_KEY``; consistent with
``_is_hermes_internal_secret``, which already folds (``key.upper()``). Loops pass
``_registered`` so the registry is read once per env, not once per key.T)r�   Ú_HERMES_PROVIDER_ENV_BLOCKLISTr¾   )rb   rÀ   r�   s   && rW   Ú_is_provider_env_blocklistedrÄ   ±   s>   € ð �J‰J‹L€EØÔ-Ô-°Ô:XÔ1XÙØÒ9LÔ3Ó5Ñ^Ð^ÐR]Ñ^Ð^rY   c                ó0   € V ^8„  d   QhR\         R\        /# ©rQ   rb   rS   ©rÁ   rT   )rV   s   "rW   rX   rX   ä   s   € ÷ Gñ G¬sð G´tñ GrY   c                óH   € V P                  4       P                  \        4      # )u]  Pure name check (``BUZZ_*``), regardless of session context â€” the snapshot
exclusion must stay conservative even when the carve-out is inactive.
Case-folded: on Windows the env block is case-insensitive, so a
lowercase-stored ``buzz_private_key`` IS the credential; it needs the
carve-out (and the snapshot exclusion) just like the canonical name.)r�   Ú
startswithÚ"_TERMINAL_FIRST_PARTY_ENV_PREFIXES©rb   s   &rW   Ú$_matches_terminal_first_party_prefixrÌ   ä   s   € ð �:‰:‹<×"Ñ"Ô#EÓFÐFrY   c                ó$   € V ^8„  d   QhR\         /# rh   )rT   )rV   s   "rW   rX   rX   í   s   € ÷ ñ ¤tñ rY   c                 óÒ   € \         P                  P                  R4      '       d   R#  ^ RIHp  V ! RR4      P                  4       P                  4       R8H  #   \         d     R# i ; i)u�  True when this process/session operates as a Buzz agent: ``BUZZ_MANAGED_AGENT`` in
the process env (set only by Buzz Desktop's buzz-acp harness), or the live session's
platform is ``buzz`` via the gateway ContextVar â€” authoritative under a concurrent
multi-session host, so a sibling Telegram session resolves its OWN platform.

Gateway / CLI / cron / kanban processes never carry it. See #76243.
ÚBUZZ_MANAGED_AGENTT©Úget_session_envÚHERMES_SESSION_PLATFORMÚ ÚbuzzF)ÚosÚenvironr‚   Úgateway.session_contextrÑ   ÚstripÚlowerÚ	ExceptionrÐ   s    rW   Ú_buzz_terminal_context_activerÛ   í   s[   € ô 
‡z�z‡~�~Ð*×+Ò+ÙðÝ;áÐ8¸"Ó=×CÑCÓE×KÑKÓMÐQWÑWÐWøÜô Úðús   ©-A ÁA&Á%A&c                ó0   € V ^8„  d   QhR\         R\        /# rÆ   rÇ   )rV   s   "rW   rX   rX   ÿ   s   € ÷ Zñ Z¤sð Z¬tñ ZrY   c                ó<   € \        V 4      ;'       d    \        4       # )zŠ``name`` is a first-party platform credential (``BUZZ_*``) AND the current
process/session context entitles it to reach terminal children.)rÌ   rÛ   rË   s   &rW   Ú_is_terminal_first_party_envrÞ   ÿ   s   € ô 0°Ó5×YÐYÔ:WÓ:YÐYrY   c                ó0   € V ^8„  d   QhR\         R\        /# )rQ   r®   rS   rÇ   )rV   s   "rW   rX   rX     s   € ÷ 	`ñ 	`¤Cð 	`¬Dñ 	`rY   c                óÖ   € V P                  4       pVP                  R4      '       d   VP                  R4      '       d   R# VP                  R4      ;'       d    VP                  R4      # )a}  True for Hermes-internal secrets injected under *dynamic* names the static
blocklist cannot enumerate: ``AUXILIARY_<TASK>_API_KEY``/``_BASE_URL`` (per-task
side-LLM credentials) and ``GATEWAY_RELAY_*_SECRET``/``_KEY``/``_TOKEN`` (relay
auth; non-secret routing hints stay visible). Stripped on every spawn path
regardless of env_passthrough registration or ``inherit_credentials``.Ú
AUXILIARY_TÚGATEWAY_RELAY_)Ú_API_KEYÚ	_BASE_URL)Ú_SECRETÚ_KEYÚ_TOKEN)r�   rÉ   r˜   )r®   r�   s   & rW   Ú_is_hermes_internal_secretrè     sV   € ð �I‰I‹K€EØ×Ñ˜×%Ò%¨%¯.©.Ð9R×*SÒ*SÙØ×ÑÐ,Ó-×_Ð_°%·.±.ÐA^Ó2_Ð_rY   ÚGATEWAYÚQQ)Úmaxsizec                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   9  s   € ÷ Kñ K¤9ñ KrY   c                 ó<  € \        \        4      p  ^ RIHp V P	                  R VP
                  P                  4        4       4       VP                  4       w  r#V P	                  V4       V P	                  V4       \        R V  4       4      #   \         d     Li ; i)u™   Built-in ``Platform`` values plus bundled platform plugins (directory names and manifest
aliases) â€” fixed for the life of the process, so scanned once.)ÚPlatformc              3   ó8   "  € T F  qP                   x € K  	  R # 5ir–   )Úvalue)r`   Úms   & rW   rc   Ú,_static_gate_env_prefixes.<locals>.<genexpr>?  s   é € ÐDÑ&C —W–WÓ&Cùs   ‚c              3   ó†   "  € T F7  q'       g   K  \        V4      P                  4       P                  R R4      x € K9  	  R# 5i©Ú-Ú_N©rÁ   r�   Úreplace©r`   rš   s   & rW   rc   rò   E  s/   é € ÐJ¹u¸!ËÔ5”S˜“V—\‘\“^×+Ñ+¨C°×5Ð5»uùó
   ‚	A�1A)
ru   Ú_EXTRA_GATE_ENV_PREFIXESÚgateway.configrî   ry   Ú__members__rx   Ú_scan_bundled_plugin_platformsrÚ   rU   )r¢   rî   r’   Úaliasess       rW   Ú_static_gate_env_prefixesr   8  sˆ   € ô Ô(Ó)€EðÝ+Ø�‰ÑD h×&:Ñ&:×&AÑ&AÔ&CÓDÔDØ#×BÑBÓDÑˆØ�‰�WÔØ�‰�WÔô ÑJ¹uÓJÓJÐJøô ô Ùðús   ‘A*B ÂBÂBc                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   H  s   € ÷ 
ñ 
¤Yñ 
rY   c                 óº   € \        \        4       4      p  ^ RIHp V P	                  R VP                  4        4       4       \        V 4      #   \         d     Li ; i)uÖ   Upper-cased owners of authorization gates: the static set plus runtime-registered plugin
adapters (``platform_registry``, dynamic and profile-scoped, so read per call â€” a cheap set
union under the registry lock).rµ   c              3   ó†   "  € T F7  q'       g   K  \        V4      P                  4       P                  R R4      x € K9  	  R# 5irô   r÷   rù   s   & rW   rc   Ú._platform_gate_env_prefixes.<locals>.<genexpr>O  s2   é € ÐiÑ?c¸!ÓghÔ5”S˜“V—\‘\“^×+Ñ+¨C°×5Ð5Ó?cùrú   )ru   r   r¹   r¶   ry   Úregistered_namesrÚ   rU   )r¢   r¶   s     rW   Ú_platform_gate_env_prefixesr  H  sW   € ô Ô)Ó+Ó,€EðÝ?Ø�‰ÑiÐ?P×?aÑ?aÔ?cÓiÔiô �UÓÐøô ô Ùðús   •,A ÁAÁAc                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )rQ   rb   Ú	_prefixesrS   )rÁ   r   rU   rT   )rV   s   "rW   rX   rX   U  s+   € ÷ Fñ Fœcð F¬h´yÕ.Að FÌTñ FrY   c                ó¬  a€ V P                  4       oSP                  R4      '       g   SP                  R4      '       d   R# \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   R# Ve   TM	\	        4       p\        ;QJ d    V3R lV 4       F  '       g   K   R# 	  R# ! V3R lV 4       4      # )ul  True for a platform authorization gate (``DISCORD_ALLOWED_CHANNELS``, ``TELEGRAM_ALLOW_ALL_USERS``,
``GATEWAY_ALLOWED_USERS``, ``WHATSAPP_GROUP_ALLOW_FROM`` ...) â€” profile-scoped policy a child acting
for ANOTHER profile must never inherit. A gate is a platform prefix AND a gate-shaped suffix;
an operator variable that merely contains ``_ALLOWED_`` is not one.ÚHERMES_rö   Fc              3   ó,   <"  € T F	  qS9   x € K  	  R # 5ir–   r]   )r`   Úmarkerr�   s   & €rW   rc   Ú&is_profile_gate_env.<locals>.<genexpr>]  s   øé € ÐGÑ-F 6˜ŽÓ-Fùs   ƒTc              3   óT   <"  € T F  pSP                  VR ,           4      x € K  	  R# 5i)rö   N)rÉ   )r`   Úprefixr�   s   & €rW   rc   r  `  s#   øé € ÐE¹H°&ˆu×Ñ ¨¥×-Ð-»Hùs   ƒ%()r�   rÉ   ÚanyÚ_PROFILE_GATE_ENV_MARKERSr  )rb   r  Úprefixesr�   s   && @rW   Úis_profile_gate_envr  U  s“   ø€ ð
 �J‰J‹L€EØ×Ñ˜	×"Ò" e×&6Ñ&6°s×&;Ò&;Ùß‹3ÔGÕ-FÓG�3�3Š3ÔGÕ-FÓG×GÒGÙØ%Ò1‰yÔ7RÓ7T€Hß‹3ÔE¹HÓE�3Œ3ÐEŠ3ÐEˆ3ÔE¹HÓEÓEÐErY   c                ó0   € V ^8„  d   QhR\         R\         /# )rQ   ÚenvrS   )Údict)rV   s   "rW   rX   rX   c  s   € ÷ ñ ¤ð ¬ñ rY   c                ó€   € \        4       pV  Uu. uF  p\        W!4      '       g   K  VNK  	  up F  pW K  	  V # u upi )zTDrop every authorization gate from *env* in place (see :func:`is_profile_gate_env`).)r  r  )r  r  Úkr®   s   &   rW   Ústrip_profile_gate_envr  c  s>   € ä*Ó,€HÙÓC™3�aÔ"5°a×"B—�™3ÔCˆØŠHñ Dà€Jùò Ds   �;§;c                ó$   € V ^8„  d   QhR\         /# rh   ri   )rV   s   "rW   rX   rX   k  s   € ÷ 	ñ 	¬ñ 	rY   c                 óT   €  ^ RI Hp  V ! 4       #   \         d    \        4       u # i ; i)zÃCredential env keys owned by plugin-registered terminal backends (Tier-1:
stripped from every spawned subprocess). Computed at call time because plugins
register after import; fail-soft to empty.©Úplugin_strip_env_keys)Úagent.terminal_env_registryr  rÚ   rU   r  s    rW   Ú_plugin_terminal_env_strip_keysr  k  s*   € ðÝEá$Ó&Ð&øÜô Ü‹{Òðús   ‚ �'¦'Trk   c              #   ó@   "  € T F  qP                  4       x € K  	  R # 5ir–   )r�   )r`   r  s   & rW   rc   rc   Ž  s   é € Ð0WÑDV¸q·±·°ÓDVùs   ‚c                óÞ   € V ^8„  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \        ,          ;R&   # )rQ   r«   Ú_ALWAYS_STRIP_KEYSÚ_ALWAYS_STRIP_FOLDED)Ú__conditional_annotations__r  rÁ   ÚtuplerU   )rV   s   "rW   rX   rX      sc   € ÷ bñ b÷H 2Ò 1œD¤¤e Õ,Ñ 1ñIb÷r=ò =”Iœc•Nñ =ñsb÷Z XÒ W”i¤•nÑ Wò[brY   r–   )ÚBUZZ_)ÚVIRTUAL_ENVÚCONDA_PREFIXÚ
PYTHONHOME)
Ú	_ALLOWED_Ú_ALLOW_ALL_Ú_ALLOW_FROMÚ_ALLOW_BOTSÚ_ALLOW_PUBLIC_Ú_IGNORED_CHANNELSÚ_NO_THREAD_CHANNELSÚ_FREE_RESPONSE_CHANNELSÚ_BACKFILL_CHANNELSÚ_GROUP_ALLOWED>   r:   ÚGITHUB_TOKENr;   r3   r>   r@   ÚSLACK_APP_TOKENÚSLACK_BOT_TOKENrA   ÚDISCORD_BOT_TOKENr?   ÚTELEGRAM_BOT_TOKENrB   ÚSLACK_SIGNING_SECRETr9   ÚGATEWAY_ALLOW_ALL_USERSrC   r=   r<   rM   r8   rL   rN   rK   )&r$  Ú__doc__Ú	functoolsrÕ   Útypingr   Ú!_HERMES_PROVIDER_ENV_FORCE_PREFIXrU   r|   rv   rf   r‡   r£   Ú_PROVIDER_ENV_BLOCKLISTr¬   rÃ   r«   r²   r»   r¾   rÄ   rÊ   rÌ   rÛ   rÞ   Ú_ACTIVE_VENV_MARKER_VARSrè   r  rû   Ú	lru_cacher   r  r  r  r  r"  r#  rX   )r$  s   @rW   Ú<module>rB     sM  øðöbó Û 	Ý ð %5Ð !ñ  )Ð*DÐ)EÓFÐ á!*ð !,Øð!,Ø'ð!,Ø):ð!,Ø<Kð!,àð!,à/ð!,à1Eð!,ð ð!,ð +ð!,ð -8ð!,ð :Jð!,ð ð!,ð  @ð!,ð BTð!,ð ð!,ð &ð!,ð (:ð!,ð <Pð!,ð ð!,ð *ð!,ð ,9ð!,ð ;Mð!,ð ð!,ð ,ð!,ð .Að!,ð ð!,ð :ð!,ð <Rð!,ð  ð!,ð ";ð!,ð %ð!,ð '<ð!,ð >Rð!,ð ð!,ð  5ð!,ð 7Ið!,ð ð!,ð .ð!,ð 0Að!,ð CSð!,ð ð!,ð 9ð!,ð ;Pð!,ð  ð!!,ð  !8ð!!,ð" ð#!,ð" &ð#!,ð" (9ð#!,ð" ;Lð#!,ð$ ð%!,ð$ 4ð%!,ð$ 6Vð%!,ð& ð'!,ð& (ð'!,ð& *9ð'!,ð& ;Xð'!,ð( !ð)!,ð( #3ð)!,ð( 5Ið)!,ð* ð+!,ð* *ð+!,ð* ,Bð+!,ð, !ð-!,ð, #6ð-!,ð, 8Fð-!,ð. ð/!,ð. *ð/!,ð6 ð7!,ð6 #ð7!,ð< ð=!,ð< Eð=!,ð> )ð?!,ð> +Jð?!,ð@ *ðA!,ð@ ,FðA!,ó !"Ð õHeõ#õLñ8 8Ó9Ð Ù/Ó1Ð Ø!8Ð;NÕ!NÐ à/1Ð Ó 1õõ.JõG÷	_ð` &0Ð "õGõõ$Zð, IÐ õ	`ð.Ð ñ % i°Ð%6Ó7Ð ð ×Ò˜QÔôKó  ðKõ
÷Fõõ	ñ &/ò 0ó &ð& õ'&ñ& *°tÔ<õ'&=Ð ó =ñ( (1Ñ0WÑDVÓ0WÓ'WÐ Õ WrY   