+
    lHàj¶  ã                   ó4  € R t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt ]P                  ! R4      t]P                  ! R4      t]! 0 Rm4      t ! R R	]]4      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 lltR# )a  Skill readiness: required env vars, secret capture, and setup notes. Split out of
``tools.skills_tool`` (names re-imported there); module state (``_secret_capture_callback``,
``load_env``) stays there and is read lazily at call time so origin-module patches are honored.N)ÚEnum)ÚAnyÚDictÚList)Údisplay_hermes_home)Úenv_var_enabledztools.skills_toolz^[A-Za-z_][A-Za-z0-9_]*$c                   ó"   € ] tR t^tRtRtRtRtR# )ÚSkillReadinessStatusÚ	availableÚsetup_neededÚunsupported© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	AVAILABLEÚSETUP_NEEDEDÚUNSUPPORTEDÚ__static_attributes__r   ó    Ú</home/ubuntu/.hermes/hermes-agent/tools/skills_tool_setup.pyr	   r	      s   † Ø€IØ!€LØ„Kr   r	   c                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚbackendÚreturn)ÚstrÚbool)Úformats   "r   Ú__annotate__r      s   € ÷ ñ ¤Cð ¬Dñ r   c                ó    € V \         9   g   V '       d   V R8X  d
   V \         9   #  ^ RIHp \        V! V RR4      4      #   \         d     R# i ; i)zBBuilt-in remote backends plus plugin backends declaring is_remote.Úlocal)Úprovider_flagÚ	is_remoteF)Ú_REMOTE_ENV_BACKENDSÚagent.terminal_env_registryr"   r   Ú	Exception)r   r"   s   & r   Ú_is_remote_env_backendr'      sN   € àÔ&Ô&¯g¸ÀGÔ9KØÔ.Ñ.Ð.ðÝ=Ü‘M '¨;¸Ó>Ó?Ð?øÜô Úðús   ¥> ¾AÁAc                ó0   € V ^8„  d   QhR\         R\        /# )r   Úrawr   )r   Úlist)r   s   "r   r   r   $   s   € ÷ Tñ T”sð Tœtñ Tr   c                óh   € \        V \        4      '       d   V .# \        V \        4      '       d   V # . # )zEAccept a single mapping or a list; anything else is treated as empty.)Ú
isinstanceÚdictr*   )r)   s   &r   Ú_as_dict_listr.   $   s-   € ä˜s¤D×)Ò)ˆCˆ5ÐS´jÀÄd×6KÒ6K¨sÐSÐQSÐSr   c                ó>   € V ^8„  d   QhR\         R\        R,          /# )r   Úvaluer   N)r   r   )r   s   "r   r   r   )   s"   € ÷ Oñ O”cð Oœc D�jñ Or   c                ó~   € \        V \        4      '       d'   V P                  4       '       d   V P                  4       # R# )z;Stripped string when *value* is a non-blank str, else None.N)r,   r   Ústrip)r0   s   &r   Ú
_clean_strr3   )   s)   € ä& u¬c×2Ò2°u·{±{·}²}ˆ5�;‰;‹=ÐNÈ$ÐNr   c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \         \        \        3,          ,          /# )r   Úfrontmatterr   )r-   r   r   r*   )r   s   "r   r   r   .   s2   € ÷ "#ñ "#´T¼#¼s¸(µ^ð "#ÌÌTÔRUÔWZÐRZÍ^ÕH\ñ "#r   c                ó0  € V P                  R4      p\        V\        4      '       d   TM/ p\        VP                  R4      4      pV P                  R4      p\        V\        4      '       d   VP                  R4      MR;'       g    . p\        V\        4      '       d   V.MTp/ p\        V P                  R4      4      pV Uu. uF=  p\        V\        \        34      '       g   K!  \        V\        4      '       d   RV/MTNK?  	  ppT\        VP                  R4      4       Uu. uF”  p\        V\        4      '       g   K  RVP                  R	4      R
VP                  R
4      R\	        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      P                  4       ;'       g    R/NK–  	  up,          pY„ U	u. uF1  p	\	        V	4      P                  4       '       g   K$  R\	        V	4      /NK3  	  up	,          pV EF[  p
\	        V
P                  R4      ;'       g    V
P                  R	4      ;'       g    R4      P                  4       pV'       d"   Wµ9   g   \        P                  V4      '       g   Kz  RTR
\	        V
P                  R
4      ;'       g    RV 24      P                  4       /p\        V
P                  R4      ;'       g5    V
P                  R4      ;'       g    V
P                  R4      ;'       g    T4      ;p'       d   WÜR&   \        V
P                  R4      4      ;p'       d   WìR&   V
P                  R4      '       d   RVR&   WÅV&   EK^  	  \        VP                  4       4      # u upi u upi u up	i )z’Merge required_environment_variables, setup.collect_secrets and legacy
prerequisites.env_vars into one deduped, validated list (first entry wins).ÚsetupÚhelpÚprerequisitesÚenv_varsNÚrequired_environment_variablesÚnameÚcollect_secretsÚenv_varÚpromptÚurlÚprovider_urlÚ zEnter value for Úrequired_forÚoptionalT)Úgetr,   r-   r3   r   r.   r2   Ú_ENV_VAR_NAME_REÚmatchr*   Úvalues)r5   r7   Ú
setup_helpÚprereqsÚlegacyÚrequiredÚdeclaredÚiÚentriesÚvÚentryÚenv_nameÚ
normalizedÚ	help_textrC   s   &              r   Ú#_get_required_environment_variablesrU   .   s  € ð �O‰O˜GÓ$€EÜ ¤t×,Ò,‰E°"€EÜ˜EŸI™I fÓ-Ó.€JØ�o‰o˜oÓ.€GÜ)3°G¼T×)BÒ)Bˆg�k‰k˜*Ô%È×SÐSÐQS€FÜ# F¬C×0Ò0ˆf‰X°f€FØ*,€HÜ˜[Ÿ_™_Ð-MÓNÓO€HÙAIó .Á¸AÜ˜Q¤¤d ×,ô 8œj¨¬C×0Ò0�˜‰{°aÒ7Á€Gð .ð ô ˜uŸy™yÐ):Ó;Ô<óUñ =ˆAÄ
È1Ìd×@Sô	Rˆ�—‘�yÓ! 8¨Q¯U©U°8«_Ø	”�A—E‘E˜.Ó)×?Ð?¨Q¯U©U°5«\×?Ð?¸RÓ@×FÑFÓH×PÐPÈDó	Rá<ñUõ U€Gð ¨&ÓC©& Q´C¸³F·L±L·NÔ �œ˜Q›Ó ©&ÑCÕC€GÜˆÜ�u—y‘y Ó(×FÐF¨E¯I©I°iÓ,@×FÐFÀBÓG×MÑMÓOˆß˜8Ô/Ô7G×7MÑ7MÈh×7WÒ7WÙà�HØ”c˜%Ÿ)™) HÓ-×NÐNÐ3CÀHÀ:Ð1NÓO×UÑUÓWð&Yˆ
ô #Ø—	‘	˜&Ó!×`Ð` U§Y¡Y¨~Ó%>×`Ð`À%Ç)Á)ÈEÓBR×`Ð`ÐV`óbð bˆ9ö bà!*�vÑÜ% e§i¡i°Ó&?Ó@Ð@ˆ<Ö@Ø)5�~Ñ&Ø�9‰9�Z× Ò Ø%)ˆJ�zÑ"Ø'�Ôñ ô �—‘Ó!Ó"Ð"ùò/.ùòUùò Ds6   ÃN	Ã( N	Ä'NÅ?NÆNÆNÆ9NÇ!NÇ4Nc                 ó   € R V RVRV/# ©Úmissing_namesÚsetup_skippedÚgateway_setup_hintr   rW   s   &&&r   Ú_capture_resultr[   S   s   € Ø˜]¨O¸]ÐL`ÐbtÐuÐur   c                ó–   € V ^8„  d   QhR\         R\        \        \         \        3,          ,          R\        \         \        3,          /# )r   Ú
skill_nameÚmissing_entriesr   )r   r*   r-   r   )r   s   "r   r   r   W   s>   € ÷ Cñ CÜðCÜ&*¬4´´S°­>Õ&:ðCÜ?CÄCÌÀH½~ñCr   c           
     ó¾  € ^ RI Hp V'       g   \        . 4      # V Uu. uF  q3R,          NK  	  ppVP                  P	                  4       pVf5   \        4       '       d%   \        R4      '       g    ^ RIHp \        WFR7      # Vf   VP                  ;pf   \        V4      # . pV F³  pRV /R Uu/ uF$  qƒP	                  V4      '       g   K  WƒV,          bK&  	  upCp	 V! VR,          VR	,          V	4      p
\        V
\        4      ;'       d    V
P	                  R4      pV'       d   V
P	                  R4      '       g   K›  VP!                  VR,          4       Kµ  	  \        V\#        V4      4      # u upi   \         d    R\        4        R2p ELi ; iu upi   \         d6    \        P                  R
TR,           2RR7       RRRTR,          RRRR/p
 Läi ; i)zHPrompt for missing secrets via the registered capture callback (if any).)Úskills_toolr<   ÚHERMES_INTERACTIVE)Ú*GATEWAY_SECRET_CAPTURE_UNSUPPORTED_MESSAGEziSecure secret entry is not available. Load this skill in the local CLI to be prompted, or add the key to z/.env manually.)rZ   r]   r?   z#Secret capture callback failed for T)Úexc_infoÚsuccessFÚ	stored_asÚ	validatedÚskipped)r8   rC   )Útoolsr`   r[   Ú_turn_secret_capturerE   Ú_is_gateway_surfacer   Úgateway.platforms.baserb   r&   r   Ú_secret_capture_callbackÚloggerÚwarningr,   r-   Úappendr   )r]   r^   Ú_strQ   rX   ÚcallbackÚhintÚremaining_namesÚkÚmetadataÚcallback_resultÚoks   &&          r   Ú'_capture_required_environment_variablesrx   W   sÑ  € õ )ßÜ˜rÓ"Ð"Ù0?Ó@± u˜6—]�]±€MÐ@Ø×'Ñ'×+Ñ+Ó-€Hð ÒÔ/×1Ò1¼/ÐJ^×:_Ò:_ð	[Ýaô ˜}ÔFÐFØÒ¨×)EÑ)EÐE˜XÒNÜ˜}Ó-Ð-Ø!#€OÛ ˆØ  *ÐpÑF^Ó0oÑF^À×bkÑbkÐlm×bn´°¸!µH²ÑF^Ñ0oÐpˆð	rÙ& u¨V¥}°e¸HµoÀxÓPˆOô ˜¬Ó.×QÐQ°?×3FÑ3FÀyÓ3Qˆß˜?×.Ñ.¨y×9Ô9Ø×"Ñ" 5¨¥=Ö1ñ !ô ˜?¬D°Ó,AÓBÐBùò3 Aøô ô 	[ð3Ü3FÓ3HÐ2IÈðZ‹Dð	[üò 1pøô ô 	rÜ�N‰NÐ@ÀÀvÅÀÐPÐ[_ˆNÔ`Ø(¨%°¸eÀF½mÈ[ÐZ_ÐajÐlpÐqŠOð	rús5   žE2Á1E7 Â0FÃFÃFÅ7FÆFÆ=GÇGc                ó$   € V ^8„  d   QhR\         /# )r   r   )r   )r   s   "r   r   r   y   s   € ÷ <ñ <œTñ <r   c                  óV   € \        R 4      '       d   R# ^ RIHp  \        V ! R4      4      # )ÚHERMES_GATEWAY_SESSIONT©Úget_session_envÚHERMES_SESSION_PLATFORM)r   Úgateway.session_contextr}   r   r|   s    r   rj   rj   y   s%   € ÜÐ/×0Ò0ÙÝ7Ü‘Ð 9Ó:Ó;Ð;r   c                ó^   € V ^8„  d   QhR\         R\        \         \         3,          R\        /# )r   Úvar_nameÚenv_snapshotr   )r   r-   r   )r   s   "r   r   r   €   s)   € ÷ ñ ¤Cð ´t¼CÄ¸Hµ~ð Ì$ñ r   c                ó€   € W9   d   \        W,          4      #  ^ RIHpHp \        V! V 4      4      #   X d     R# i ; i)aJ  Return whether a requirement is present in this profile's secret sources.

The snapshot keeps the existing ``.env`` precedence.  A miss must use
``get_secret`` rather than reading ``os.environ`` directly so an active
multiplex worker can see its hydrated external secrets without seeing a
different profile's process environment.
)ÚUnscopedSecretErrorÚ
get_secretF)r   Úagent.secret_scoper„   r…   )r�   r‚   r„   r…   s   &&  r   Ú_is_env_var_persistedr‡   €   sB   € ð ÔÜ�LÕ*Ó+Ð+ðßFÜ‘J˜xÓ(Ó)Ð)øØô Úðús   ™2 ²=¼=c          	      óz   € V ^8„  d   QhR\         R\        \        ,          R\        R,          R\        R,          /# )r   Úreadiness_statusÚmissingrI   Nr   )r	   r*   r   )r   s   "r   r   r   ‘   s8   € ÷ :ñ :Ü*ð:Ü59¼#µYð:ä�d•
ð:ä&)¨D¥jñ:r   c                 ó�   € V \         P                  8w  d   R # RV'       d   RP                  V4      MR R2pV'       d   V RV 2# T# )Nz.Setup needed before using this skill: missing z, zrequired prerequisitesÚ.Ú )r	   r   Újoin)r‰   rŠ   rI   Únotes   &&& r   Ú_build_setup_noter�   ‘   sM   € ð Ô/×<Ñ<Ô<ÙØ;×RY¸D¿I¹IÀgÔ<NÐ_wÐ;xÐxyÐz€Dß%/ˆdˆV�1�Z�LÐ!Ð9°TÐ9r   >   ÚsshÚmodalÚdockerÚdaytonaÚvercel_sandbox)FN)N)Ú__doc__ÚloggingÚreÚenumr   Útypingr   r   r   Úhermes_constantsr   Úutilsr   Ú	getLoggerrm   ÚcompilerF   Ú	frozensetr$   r   r	   r'   r.   r3   rU   r[   rx   rj   r‡   r�   r   r   r   Ú<module>r       s•   ðñcó Û 	Ý ß "Ñ "å 0Ý !à	×	Ò	Ð.Ó	/€à—:’:Ð9Ó:Ð Ù Ò!XÓYÐ ô ˜3 ô  õõTõ
Oõ
"#ôJvõCõD<õ÷":ñ :r   