Ë
    ãß²jm  ã            
       ó²  — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZ  ej                  d«      Z ej                  d«      Z eh d	£«      Z G d
„ dee«      Zdedefd„Zdedefd„Zdededz  fd„Zdeeef   deeeef      fd„Zd!d„Zdedeeeef      deeef   fd„Zdefd„Zdedeeef   defd„Z	 d"dedee   dedz  dedz  fd „Zy)#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_]*$>   ÚsshÚmodalÚdockerÚdaytonaÚsingularityÚvercel_sandboxc                   ó   — e Zd ZdZdZdZy)ÚSkillReadinessStatusÚ	availableÚsetup_neededÚunsupportedN)Ú__name__Ú
__module__Ú__qualname__Ú	AVAILABLEÚSETUP_NEEDEDÚUNSUPPORTED© ó    ú</home/ubuntu/.hermes/hermes-agent/tools/skills_tool_setup.pyr   r      s   „ Ø€IØ!€LØ�Kr   r   ÚbackendÚreturnc                 ó‚   — | t         v s| r| dk(  r| t         v S 	 ddlm} t         || dd«      «      S # t        $ r Y yw xY w)zBBuilt-in remote backends plus plugin backends declaring is_remote.Úlocalr   )Úprovider_flagÚ	is_remoteF)Ú_REMOTE_ENV_BACKENDSÚagent.terminal_env_registryr!   ÚboolÚ	Exception)r   r!   s     r   Ú_is_remote_env_backendr'      sN   € àÔ&Ñ&©g¸ÀGÒ9KØÔ.Ð.Ð.ðÝ=Ü‘M '¨;¸Ó>Ó?Ð?øÜò Ùðús   ™2 ²	>½>Úrawc                 óP   — t        | t        «      r| gS t        | t        «      r| S g S )zEAccept a single mapping or a list; anything else is treated as empty.)Ú
isinstanceÚdictÚlist)r(   s    r   Ú_as_dict_listr-   $   s'   € ä˜s¤DÔ)ˆCˆ5ÐS´jÀÄdÔ6K¨sÐSÐQSÐSr   Úvaluec                 óf   — t        | t        «      r | j                  «       r| j                  «       S dS )z;Stripped string when *value* is a non-blank str, else None.N)r*   ÚstrÚstrip)r.   s    r   Ú
_clean_strr2   )   s$   € ä& u¬cÔ2°u·{±{´}ˆ5�;‰;‹=ÐNÈ$ÐNr   Úfrontmatterc                 óú  — | j                  d«      }t        |t        «      r|ni }t        |j                  d«      «      }| j                  d«      }t        |t        «      r|j                  d«      ndxs g }t        |t        «      r|gn|}i }t        | j                  d«      «      }|D �cg c].  }t        |t        t        f«      rt        |t        «      rd|in|‘Œ0 }}|t        |j                  d«      «      D �cg c]w  }t        |t        «      re|j                  d	«      |j                  d
«      t	        |j                  d«      xs |j                  d«      xs d«      j                  «       xs ddœ‘Œy c}z  }||D �	cg c])  }	t	        |	«      j                  «       sŒdt	        |	«      i‘Œ+ c}	z  }|D �]  }
t	        |
j                  d«      xs |
j                  d	«      xs d«      j                  «       }|r||v st        j                  |«      sŒ_|t	        |
j                  d
«      xs d|› �«      j                  «       dœ}t        |
j                  d«      xs( |
j                  d«      xs |
j                  d«      xs |«      x}r||d<   t        |
j                  d«      «      x}r||d<   |
j                  d«      rd|d<   |||<   �Œ t        |j                  «       «      S c c}w c c}w c c}	w )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Úprovider_urlÚurlÚ )r:   r=   r?   zEnter value for )r:   r=   Úrequired_forÚoptionalT)Úgetr*   r+   r2   r0   r-   r1   Ú_ENV_VAR_NAME_REÚmatchr,   Úvalues)r3   r5   Ú
setup_helpÚprereqsÚlegacyÚrequiredÚdeclaredÚiÚentriesÚvÚentryÚenv_nameÚ
normalizedÚ	help_textrA   s                  r   Ú#_get_required_environment_variablesrS   .   sÄ  € ð �O‰O˜GÓ$€EÜ ¤tÔ,‰E°"€EÜ˜EŸI™I fÓ-Ó.€JØ�o‰o˜oÓ.€GÜ)3°G¼TÔ)Bˆg�k‰k˜*Ô%ÈÒSÐQS€FÜ# F¬CÔ0ˆf‰X°f€FØ*,€HÜ˜[Ÿ_™_Ð-MÓNÓO€HØAIö .¸AÜ˜Q¤¤d Ô,ô )¨¬CÔ0�˜‰{°aÑ7ð .€Gð .ð ô ˜uŸy™yÐ):Ó;Ó<öUð Ä
È1ÌdÔ@Sð —‘�yÓ!¨Q¯U©U°8«_Ü�A—E‘E˜.Ó)Ò?¨Q¯U©U°5«\Ò?¸RÓ@×FÑFÓHÒPÈDó	RòUñ U€Gð ¨&ÖC Q´C¸³F·L±LµN�œ˜Q›Ò ÒCÑC€GØó (ˆÜ�u—y‘y Ó(ÒF¨E¯I©I°iÓ,@ÒFÀBÓG×MÑMÓOˆÙ˜8 xÑ/Ô7G×7MÑ7MÈhÔ7WØàÜ˜%Ÿ)™) HÓ-ÒNÐ3CÀHÀ:Ð1NÓO×UÑUÓWñ&Yˆ
ô #Ø—	‘	˜&Ó!Ò` U§Y¡Y¨~Ó%>Ò`À%Ç)Á)ÈEÓBRÒ`ÐV`óbð bˆ9ð bà!*ˆJ�vÑÜ% e§i¡i°Ó&?Ó@Ð@ˆ<Ð@Ø)5ˆJ�~Ñ&Ø�9‰9�ZÔ Ø%)ˆJ�zÑ"Ø'ˆ�Óð(ô �—‘Ó!Ó"Ð"ùò/.ùòUùò Ds   Â-3K.Ã?A<K3ÆK8Æ$K8c                 ó   — | ||dœS )N©Úmissing_namesÚsetup_skippedÚgateway_setup_hintr   rU   s      r   Ú_capture_resultrY   S   s   € Ø*¸]ÐbtÑuÐur   Ú
skill_nameÚmissing_entriesc                 óÒ  — ddl m} |st        g «      S |D �cg c]  }|d   ‘Œ	 }}t        «       rt	        d«      s	 ddlm} t        ||¬«      S |j                  x}€t        |«      S g }|D ]ˆ  }d	| id
D �ci c]  }|j                  |«      sŒ|||   “Œ c}¥}		  ||d   |d   |	«      }
t        |
t        «      xr |
j                  d«      }|r|
j                  d«      sŒu|j                  |d   «       ŒŠ t        |t!        |«      «      S c c}w # t        $ r dt        «       › d�}Y Œèw xY wc c}w # t        $ r* t        j                  d|d   › �d¬«       d|d   dddœ}
Y Œ»w xY w)zHPrompt for missing secrets via the registered capture callback (if any).r   )Ú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.)rX   rZ   )r6   rA   r=   z#Secret capture callback failed for T)Úexc_infoF)ÚsuccessÚ	stored_asÚ	validatedÚskippedra   rd   )Útoolsr]   rY   Ú_is_gateway_surfacer   Úgateway.platforms.baser_   r&   r   Ú_secret_capture_callbackrC   ÚloggerÚwarningr*   r+   Úappendr%   )rZ   r[   Ú_strO   rV   ÚhintÚcallbackÚremaining_namesÚkÚmetadataÚcallback_resultÚoks               r   Ú'_capture_required_environment_variablesrt   W   s   € õ )ÙÜ˜rÓ"Ð"Ø0?Ö@ u�U˜6“]Ð@€MÐ@ô Ô¤_Ð5IÔ%Jð	[Ýaô ˜}ÀÔFÐFØ×0Ñ0Ð0ˆÐ9Ü˜}Ó-Ð-Ø!#€OØ ò 	2ˆØ  *ÐpÐF^Ö0oÀÐbg×bkÑbkÐlmÕbn°°E¸!±H±Ò0oÐpˆð	rÙ& u¨V¡}°e¸H±oÀxÓPˆOô ˜¬Ó.ÒQ°?×3FÑ3FÀyÓ3QˆÙ˜?×.Ñ.¨yÕ9Ø×"Ñ" 5¨¡=Õ1ð	2ô ˜?¬D°Ó,AÓBÐBùò1 Aøô ò 	[ð3Ü3FÓ3HÐ2IÈðZŠDð	[üò 1pøô ò 	rÜ�N‰NÐ@ÀÀvÁÀÐPÐ[_ˆNÔ`Ø*/¸eÀF¹mÐZ_ÐlpÑqŠOð	rús4   ˜D¼D Á6D.ÂD.ÂD3ÄD+Ä*D+Ä30E&Å%E&c                  óH   — t        d«      ryddlm}  t         | d«      «      S )NÚHERMES_GATEWAY_SESSIONTr   ©Úget_session_envÚHERMES_SESSION_PLATFORM)r   Úgateway.session_contextrx   r%   rw   s    r   rf   rf   x   s"   € ÜÐ/Ô0ØÝ7Ü‘Ð 9Ó:Ó;Ð;r   Úvar_nameÚenv_snapshotc                 óp   — | |v rt        ||    «      S 	 ddlm}m} t         || «      «      S # $ r Y yw xY w)a^  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.
    r   )ÚUnscopedSecretErrorÚ
get_secretF)r%   Úagent.secret_scoper~   r   )r{   r|   r~   r   s       r   Ú_is_env_var_persistedr�      sF   € ð �<ÑÜ�L Ñ*Ó+Ð+ðßFÜ‘J˜xÓ(Ó)Ð)øØò Ùðús   ”- ­5´5Úreadiness_statusÚmissingrG   c                 ór   — | t         j                  k7  ry d|rdj                  |«      nd› d�}|r|› d|› �S |S )Nz.Setup needed before using this skill: missing z, zrequired prerequisitesú.Ú )r   r   Újoin)r‚   rƒ   rG   Ú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   )FN)N) Ú__doc__ÚloggingÚreÚenumr   Útypingr   r   r   Úhermes_constantsr   Úutilsr   Ú	getLoggerri   ÚcompilerD   Ú	frozensetr#   r0   r   r%   r'   r,   r-   r2   rS   rY   rt   rf   r�   r‰   r   r   r   ú<module>r”      sq  ðñcó Û 	Ý ß "Ñ "å 0Ý !à	ˆ×	Ñ	Ð.Ó	/€à�2—:‘:Ð9Ó:Ð Ù Ò!gÓhÐ ô ˜3 ô  ð Cð ¨Dó ðT�sð T˜tó Tð
O�cð O˜c D™jó Oð
"#°T¸#¸s¸(±^ð "#ÈÈTÐRUÐWZÐRZÉ^ÑH\ó "#óJvðCØðCØ&*¨4°°S°©>Ñ&:ðCØ?CÀCÈÀH¹~óCðB<˜Tó <ð Cð °t¸CÀ¸H±~ð È$ó ð& "ñ:Ø*ð:Ø59¸#±Yð:à�d‘
ð:à&)¨D¡jô:r   