§
    øžyj9 ã                   óX  — U d Z ddlZddlZddlZddlZddlmZm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mZmZmZmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ m!Z"  ej#        e$¦  «        Z%i Z&e'e(d<   dZ)dZ*dZ+de,fd„Z- e¦   «         Z.e.dz  Z/e/Z0defd„Z1dZ2dZ3ddddœZ4 e	j5        d¦  «        Z6 e7h d£¦  «        Z8da9de:dee:         fd„Z;dee:e:f         fd„Z< G d„ de:e¦  «        Z=g d ¢Z>e?e(d!<   d›d"„Z@d#ee:ef         deAfd$„ZBd#ee:ef         deAfd%„ZCd&edee:         fd'„ZDd#ee:ef         deee:         ee:         f         fd(„ZEd#ee:ef         dee:ef         fd)„ZF	 dœd#ee:ef         d*ee:         dz  deee:ef                  fd+„ZGd,e:d-eee:ef                  dee:ef         fd.„ZHdeAfd/„ZIde:fd0„ZJ	 dœd1e:d2ee:e:f         dz  deAfd3„ZKdd4œd5eee:ef                  d6ee:ef         d2ee:e:f         dz  dee:         fd7„ZLde:fd8„ZM	 dœd9e=d:ee:         d;e:dz  de:dz  fd<„ZNdeAfd=„ZOd>e:deee:ef         e:f         fd?„ZPd@edee:         fdA„ZQdee:         fdB„ZRdee:         fdC„ZSde:fdD„ZTdœde:dEe:deAfdF„ZUdGdHœdIeAdeee:ef                  fdJ„ZVdeee:ef                  deee:ef                  fdK„ZWd�dLe:dMe:de:fdN„ZX	 dœdOddPœdQedRe:dSe:dTe:dz  dUeAdVe:dz  de:fdW„ZYdXedee:ee:         f         dz  fdY„ZZ	 	 	 džde:dTe:dMe:dUeAde:f
dZ„Z[e$d[k    �ro	  e\d\¦  «          e\d]¦  «          e\d^¦  «          ej]         eX¦   «         ¦  «        Z^e^d_         rÁ e\d`e^da         › db e_e^ `                    dcg ¦  «        ¦  «        › dd�¦  «          e\dee^ `                    dcg ¦  «        › �¦  «          e\df¦  «         e^d         ddg…         D ]MZaea `                    dL¦  «        rdheadL         › di�ndjZb e\dkeb› ead         › dleadm         ddn…         › do�¦  «         ŒNn e\dpe^dq         › �¦  «          e\dr¦  «          ej]         e[ds¦  «        ¦  «        Z^e^d_         r‡ e\dte^d         › �¦  «          e\due^ `                    dmdv¦  «        ddw…         › do�¦  «          e\dx e_e^d>         ¦  «        › dy�¦  «         e^ `                    dz¦  «        r e\d{e^dz         › �¦  «         n e\dpe^dq         › �¦  «          e\d|¦  «          ej]         e[dsd}¦  «        ¦  «        Z^e^d_         rP e\d~e^d         › �¦  «          e\dx e_e^d>         ¦  «        › dy�¦  «          e\d€e^d>         dd�…         › do�¦  «         n e\dpe^dq         › �¦  «         d‚dƒd„dLd…d†d‡œig dˆœd‰œZcdŠd‹d„d…dŒd‡œd…d�d‡œdŽœdgdˆœd‰œZd eje        d‚decd�„ eOd�¬‘¦  «         i Zfee:ee,e,f         f         e(d’<    ejg        ¦   «         Zhd“Zid”Zjd•e'de,dz  fd–„Zkd•e'ddfd—„Zlde:dz  fd˜„ZmdœdMe:dz  ddfd™„Zndš„ Zo eje        dŠdedeoeOd�¬‘¦  «         dS )Ÿu  
Skills Tool Module

This module provides tools for listing and viewing skill documents.
Skills are organized as directories containing a SKILL.md file (the main instructions)
and optional supporting files like references, templates, and examples.

Inspired by Anthropic's Claude Skills system with progressive disclosure architecture:
- Metadata (name â‰¤64 chars, description â‰¤1024 chars) - shown in skills_list
- Full Instructions - loaded via skill_view when needed
- Linked Files (references, templates) - loaded on demand

Directory Structure:
    skills/
    â”œâ”€â”€ my-skill/
    â”‚   â”œâ”€â”€ SKILL.md           # Main instructions (required)
    â”‚   â”œâ”€â”€ references/        # Supporting documentation
    â”‚   â”‚   â”œâ”€â”€ api.md
    â”‚   â”‚   â””â”€â”€ examples.md
    â”‚   â”œâ”€â”€ templates/         # Templates for output
    â”‚   â”‚   â””â”€â”€ template.md
    â”‚   â””â”€â”€ assets/            # Supplementary files (agentskills.io standard)
    â””â”€â”€ category/              # Category folder for organization
        â””â”€â”€ another-skill/
            â””â”€â”€ SKILL.md

SKILL.md Format (YAML Frontmatter, agentskills.io compatible):
    ---
    name: skill-name              # Required, max 64 chars
    description: Brief description # Required, max 1024 chars
    version: 1.0.0                # Optional
    license: MIT                  # Optional (agentskills.io)
    platforms: [macos]            # Optional â€” restrict to specific OS platforms
                                  #   Valid: macos, linux, windows
                                  #   Omit to load on all platforms (default)
    prerequisites:                # Optional â€” legacy runtime requirements
      env_vars: [API_KEY]         #   Legacy env var names are normalized into
                                  #   required_environment_variables on load.
      commands: [curl, jq]        #   Command checks remain advisory only.
    compatibility: Requires X     # Optional (agentskills.io)
    metadata:                     # Optional, arbitrary key-value (agentskills.io)
      hermes:
        tags: [fine-tuning, llm]
        related_skills: [peft, lora]
    ---

    # Skill Title

    Full instructions and content here...

Available tools:
- skills_list: List skills with metadata (progressive disclosure tier 1)
- skill_view: Load full skill content (progressive disclosure tier 2-3)

Usage:
    from tools.skills_tool import skills_list, skill_view, check_skills_requirements

    # List all skills (returns metadata only - token efficient)
    result = skills_list()

    # View a skill's main content (loads full instructions)
    content = skill_view("axolotl")

    # View a reference file within a skill (loads linked file)
    content = skill_view("axolotl", "references/dataset-formats.md")
é    N)Úget_hermes_homeÚdisplay_hermes_home)ÚEnum)ÚPathÚPurePosixPathÚPureWindowsPath)ÚDictÚAnyÚListÚOptionalÚSetÚTuple)ÚregistryÚ
tool_error)Úcfg_get)Úenv_var_enabled)ÚEXCLUDED_SKILL_DIRSÚis_skill_support_pathÚ_SKILLS_CACHEg      >@Úwith_disabledÚfilteredÚreturnc                 óT  — ddl m} t          t          |dd¦  «        dd¦  «        }g }| D ]ß}	 |                     ¦   «         j        }n# t
          $ r Y Œ)w xY w	 t          j        |¦  «        5 }|D ]L}	 |                     d¬¦  «        r#|                     d¬¦  «        j        }	|	|k    r|	}Œ=# t
          $ r Y ŒIw xY w	 ddd¦  «         n# 1 swxY w Y   n# t
          $ r Y nw xY w| 	                    t          |¦  «        |f¦  «         Œàt          |¦  «        t          |¦  «        |fS )	uN  Cheap change-signature for the skill scan inputs.

    O(#dirs + #categories) stat calls, not a recursive walk. Includes the
    platform the scan's ``skill_matches_platform`` filter will use (read
    from ``agent.skill_utils``'s ``sys`` so test patches of that module
    are honored) â€” the scan result is platform-dependent.
    r   )Úskill_utilsÚsysNÚplatformÚ F)Úfollow_symlinks)Úagentr   ÚgetattrÚstatÚst_mtimeÚOSErrorÚosÚscandirÚis_dirÚappendÚstrÚtupleÚ	frozenset)
Údirs_to_scanÚdisabledÚ_skill_utilsr   ÚsigÚdÚmÚitÚentryÚems
             ú7/home/ragecks/.hermes/hermes-agent/tools/skills_tool.pyÚ_skills_scan_signaturer5   k   s´  € ð 2Ð1Ð1Ð1Ð1Ð1å•w˜|¨U°DÑ9Ô9¸:ÀrÑJÔJ€HØ
€CØð  ð  ˆð	Ø—’‘”Ô!ˆAˆAøÝð 	ð 	ð 	ØˆHð	øøøð	Ý”˜A‘”ð ! "Øð !ð !�Eð!Ø Ÿ<š<¸˜<Ñ>Ô>ð 'Ø!&§¢¸E Ñ!BÔ!BÔ!K˜BØ! Ašv˜vØ$& øøÝ"ð !ð !ð !Ø ˜ð!øøøð!ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !øøõ ð 	ð 	ð 	ØˆDð	øøøà�
Š
•C˜‘F”F˜A�;ÑÔÐÐÝ�#‰JŒJ�	 (Ñ+Ô+¨XÐ6Ð6sk   ®AÁ
AÁAÁCÁ-C
Á39B-Â,C
Â-
B:	Â7C
Â9B:	Â:C
Â>CÃ
C	ÃCÃC	ÃCÃ
C#Ã"C#Úskillsc                  óf   — t          t          ¦  «        } | t          k    r| S t          ¦   «         dz  S )aZ  Return the active profile's skills directory at call time.

    Some long-lived runtimes import this module before the active profile has
    set HERMES_HOME. Keep the legacy SKILLS_DIR module attribute for tests and
    external patchers, but when it has not been patched, resolve from the live
    profile-scoped HERMES_HOME on every call.
    r6   )r   Ú
SKILLS_DIRÚ_SKILLS_DIR_AT_IMPORTr   )Ú
configureds    r4   Ú_skills_dirr;   ”   s4   € õ •jÑ!Ô!€JØÕ*Ò*Ð*ØÐÝÑÔ˜xÑ'Ð'ó    é@   i   ÚdarwinÚlinuxÚwin32)Úmacosr?   Úwindowsz^[A-Za-z_][A-Za-z0-9_]*$>   ÚsshÚmodalÚdockerÚdaytonaÚsingularityÚvercel_sandboxÚnamec                 ó2  — ddl m} t          | t          ¦  «        sdS |                      ¦   «         }t          |¦  «                             ¦   «         s5t          |¦  «                             ¦   «         st          |¦  «        j        rdS  ||¦  «        rdS dS )uD  Return an error if a local skill lookup *name* can escape search roots.

    The skill ``name`` is joined onto each trusted search dir to build the
    on-disk lookup path, so it must stay relative and free of ``..`` segments â€”
    otherwise ``name="../outside"`` or an absolute path could select a skill
    (and read files) outside the skills directory. Mirrors the ``file_path``
    validation done later via ``tools.path_security``. We also reject Windows
    drive paths (e.g. ``C:\skills``), whose ``:`` would otherwise be misread as
    a plugin namespace separator.
    r   )Úhas_traversal_componentzSkill name must be a string.z?Skill name must be a relative path within the skills directory.z9Skill name cannot contain '..' path traversal components.N)	Útools.path_securityrK   Ú
isinstancer(   Ústripr   Úis_absoluter   Údrive)rI   rK   Ú	candidates      r4   Ú_skill_lookup_path_errorrR   ´   s³   € ð <Ð;Ð;Ð;Ð;Ð;å�d�CÑ Ô ð .Ø-Ð-Ø—
’
‘”€Iå�iÑ Ô ×,Ò,Ñ.Ô.ðQå˜9Ñ%Ô%×1Ò1Ñ3Ô3ðQõ ˜9Ñ%Ô%Ô+ðQð
 QÐPØÐ˜yÑ)Ô)ð KØJÐJØˆ4r<   c                  ó  — t          ¦   «         dz  } i }|                      ¦   «         s|S |                      dd¬¦  «        5 }|D ]¥}|                     ¦   «         }|r�|                     d¦  «        sxd|v rt|                     d¦  «        r
|dd	…         }|                     d¦  «        \  }}}|                     ¦   «                              d
¦  «        ||                     ¦   «         <   Œ¦	 d	d	d	¦  «         n# 1 swxY w Y   |S )z@Load profile-scoped environment variables from HERMES_HOME/.env.z.envú	utf-8-sigÚreplace©ÚencodingÚerrorsú#Ú=zexport é   Nú"')r   ÚexistsÚopenrN   Ú
startswithÚ	partition)Úenv_pathÚenv_varsÚfÚlineÚkeyÚ_Úvalues          r4   Úload_envrh   Ï   sY  € åÑ Ô  6Ñ)€HØ!€HØ�?Š?ÑÔð Øˆð
 
�Š °IˆÑ	>Ô	>ð CÀ!Øð 	Cð 	CˆDØ—:’:‘<”<ˆDØð C˜DŸOšO¨CÑ0Ô0ð C°S¸D°[°[Ø—?’? 9Ñ-Ô-ð $Ø   œ8�DØ $§¢¨sÑ 3Ô 3‘��Q˜Ø(-¯ª©¬×(;Ò(;¸EÑ(BÔ(B�˜Ÿš™œÑ%øð	CðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð €Os   ÁB)C7Ã7C;Ã>C;c                   ó   — e Zd ZdZdZdZdS )ÚSkillReadinessStatusÚ	availableÚsetup_neededÚunsupportedN)Ú__name__Ú
__module__Ú__qualname__Ú	AVAILABLEÚSETUP_NEEDEDÚUNSUPPORTED© r<   r4   rj   rj   ä   s   € € € € € Ø€IØ!€LØ€K€K€Kr<   rj   )	zignore previous instructionszignore all previouszyou are nowzdisregard yourzforget your instructionsznew instructions:zsystem prompt:z<system>z]]>Ú_INJECTION_PATTERNSc                 ó
   — | a d S ©N)Ú_secret_capture_callback)Úcallbacks    r4   Úset_secret_capture_callbackrz   ø   s   € à'ÐÐÐr<   Úfrontmatterc                 ó$   — ddl m}  || ¦  «        S )uÑ   Check if a skill is compatible with the current OS platform.

    Delegates to ``agent.skill_utils.skill_matches_platform`` â€” kept here
    as a public re-export so existing callers don't need updating.
    r   )Úskill_matches_platform)Úagent.skill_utilsr}   ©r{   Ú_impls     r4   r}   r}   ý   s'   € ð BÐAÐAÐAÐAÐAØˆ5�ÑÔÐr<   c                 ó$   — ddl m}  || ¦  «        S )uX  Check if a skill is relevant to the current runtime environment.

    Delegates to ``agent.skill_utils.skill_matches_environment`` â€” kept here
    as a public re-export so existing callers don't need updating. This is an
    offer-time relevance gate (kanban/docker/s6), NOT a hard-compatibility gate;
    explicit skill loads bypass it.
    r   )Úskill_matches_environment)r~   r‚   r   s     r4   r‚   r‚     s'   € ð EÐDÐDÐDÐDÐDØˆ5�ÑÔÐr<   rg   c                 óR   — | sg S t          | t          ¦  «        r| g} d„ | D ¦   «         S )Nc                 ón   — g | ]2}t          |¦  «                             ¦   «         ¯#t          |¦  «        ‘Œ3S rt   ©r(   rN   )Ú.0Úitems     r4   ú
<listcomp>z2_normalize_prerequisite_values.<locals>.<listcomp>  s3   € Ð=Ð=Ð=˜$­3¨t©9¬9¯?ª?Ñ+<Ô+<Ð=�C�‰IŒIÐ=Ð=Ð=r<   )rM   r(   )rg   s    r4   Ú_normalize_prerequisite_valuesr‰     s<   € Øð Øˆ	Ý�%�ÑÔð Ø�ˆØ=Ð= %Ð=Ñ=Ô=Ð=r<   c                 óê   — |                       d¦  «        }|rt          |t          ¦  «        sg g fS t          |                      d¦  «        ¦  «        t          |                      d¦  «        ¦  «        fS )NÚprerequisitesrb   Úcommands)ÚgetrM   Údictr‰   )r{   Úprereqss     r4   Ú_collect_prerequisite_valuesr�     so   € ð �oŠo˜oÑ.Ô.€GØð �* W­dÑ3Ô3ð Ø�2ˆvˆå& w§{¢{°:Ñ'>Ô'>Ñ?Ô?Ý& w§{¢{°:Ñ'>Ô'>Ñ?Ô?ðð r<   c           	      óò  — |                       d¦  «        }t          |t          ¦  «        sd g dœS |                      d¦  «        }t          |t          ¦  «        r5|                     ¦   «         r!t          |¦  «                             ¦   «         nd }|                      d¦  «        }t          |t          ¦  «        r|g}t          |t
          ¦  «        sg }g }|D �]}t          |t          ¦  «        sŒt          |                      d¦  «        pd¦  «                             ¦   «         }|sŒRt          |                      d¦  «        pd|› �¦  «                             ¦   «         }t          |                      d	¦  «        p|                      d
¦  «        pd¦  «                             ¦   «         }	||t          |                      dd¦  «        ¦  «        dœ}
|	r|	|
d	<   |                     |
¦  «         �Œ||dœS )NÚsetup)ÚhelpÚcollect_secretsr“   r”   Úenv_varr   ÚpromptúEnter value for Úprovider_urlÚurlÚsecretT)r•   r–   rš   )r�   rM   rŽ   r(   rN   ÚlistÚboolr'   )r{   r’   Ú	help_textÚnormalized_helpÚcollect_secrets_rawr”   r‡   r•   r–   r˜   r2   s              r4   Ú_normalize_setup_metadatar    '  s  € Ø�OŠO˜GÑ$Ô$€EÝ�e�TÑ"Ô"ð 5Ø°Ð4Ð4Ð4à—	’	˜&Ñ!Ô!€Iõ �i¥Ñ%Ô%ð	Ø*3¯/ª/Ñ*;Ô*;ð	�ˆI‰Œ×ÒÑÔÐàð ð  Ÿ)š)Ð$5Ñ6Ô6ÐÝÐ%¥tÑ,Ô,ð 4Ø2Ð3ÐÝÐ)­4Ñ0Ô0ð !Ø Ðà,.€OØ#ð &ñ &ˆÝ˜$¥Ñ%Ô%ð 	Øå�d—h’h˜yÑ)Ô)Ð/¨RÑ0Ô0×6Ò6Ñ8Ô8ˆØð 	Øå�T—X’X˜hÑ'Ô'ÐGÐ+G¸gÐ+GÐ+GÑHÔH×NÒNÑPÔPˆÝ˜4Ÿ8š8 NÑ3Ô3ÐL°t·x²xÀ±´ÐLÈ"ÑMÔM×SÒSÑUÔUˆð ØÝ˜4Ÿ8š8 H¨dÑ3Ô3Ñ4Ô4ð!
ð !
ˆð
 ð 	1Ø$0ˆE�.Ñ!Ø×Ò˜uÑ%Ô%Ð%Ñ%ð  Ø*ðð ð r<   Úlegacy_env_varsc                 óÄ  ‡‡‡	— t          | ¦  «        Š	|                      d¦  «        }t          |t          ¦  «        r|g}t          |t          ¦  «        sg }g Št          ¦   «         Šdt          t          t          f         dd fˆˆˆ	fd„}|D ]E}t          |t          ¦  «        r |d|i¦  «         Œ%t          |t          ¦  «        r ||¦  «         ŒF‰	d         D ]_} ||                     d¦  «        |                     d¦  «        |                     d	¦  «        p‰	                     d
¦  «        dœ¦  «         Œ`|€t          | ¦  «        \  }}|D ]} |d|i¦  «         Œ‰S )NÚrequired_environment_variablesr2   r   c                 ó¸  •— t          |                      d¦  «        p|                      d¦  «        pd¦  «                             ¦   «         }|r|‰v rd S t                               |¦  «        sd S |t          |                      d¦  «        pd|› �¦  «                             ¦   «         dœ}|                      d¦  «        p>|                      d¦  «        p)|                      d	¦  «        p‰                     d¦  «        }t          |t           ¦  «        r+|                     ¦   «         r|                     ¦   «         |d<   |                      d
¦  «        }t          |t           ¦  «        r+|                     ¦   «         r|                     ¦   «         |d
<   |                      d¦  «        rd|d<   ‰                     |¦  «         ‰                     |¦  «         d S )NrI   r•   r   r–   r—   )rI   r–   r“   r˜   r™   Úrequired_forÚoptionalT)r(   r�   rN   Ú_ENV_VAR_NAME_REÚmatchrM   Úaddr'   )r2   Úenv_nameÚ
normalizedr�   r¥   ÚrequiredÚseenr’   s        €€€r4   Ú_append_requiredz=_get_required_environment_variables.<locals>._append_requiredb  sÓ  ø€ Ý�u—y’y Ñ(Ô(ÐF¨E¯IªI°iÑ,@Ô,@ÐFÀBÑGÔG×MÒMÑOÔOˆØð 	˜8 tÐ+Ð+ØˆFÝ×%Ò% hÑ/Ô/ð 	ØˆFð Ý˜%Ÿ)š) HÑ-Ô-ÐNÐ1NÀHÐ1NÐ1NÑOÔO×UÒUÑWÔWð&
ð &
ˆ
ð �IŠI�fÑÔð !Ø�yŠy˜Ñ(Ô(ð!à�yŠy˜ÑÔð!ð �yŠy˜Ñ Ô ð	 	õ �i¥Ñ%Ô%ð 	3¨)¯/ª/Ñ*;Ô*;ð 	3Ø!*§¢Ñ!2Ô!2ˆJ�vÑà—y’y Ñ0Ô0ˆÝ�l¥CÑ(Ô(ð 	>¨\×-?Ò-?Ñ-AÔ-Að 	>Ø)5×);Ò);Ñ)=Ô)=ˆJ�~Ñ&à�9Š9�ZÑ Ô ð 	*Ø%)ˆJ�zÑ"à�Š�ÑÔÐØ�Š˜
Ñ#Ô#Ð#Ð#Ð#r<   rI   r”   r•   r–   r˜   r“   )rI   r–   r“   )
r    r�   rM   rŽ   r›   Úsetr	   r(   r
   r�   )
r{   r¡   Úrequired_rawr®   r‡   rf   r•   r¬   r­   r’   s
          @@@r4   Ú#_get_required_environment_variablesr±   T  s¿  øøø€ õ & kÑ2Ô2€EØ—?’?Ð#CÑDÔD€LÝ�,¥Ñ%Ô%ð &Ø$�~ˆÝ�l¥DÑ)Ô)ð Øˆà%'€HÝ‘U”U€Dð$¥¥S­# X¤ð $°4ð $ð $ð $ð $ð $ð $ð $ð $ð> ð #ð #ˆÝ�d�CÑ Ô ð 	ØÐ˜f d˜^Ñ,Ô,Ð,ØÝ�d�DÑ!Ô!ð 	#ØÐ˜TÑ"Ô"Ð"øàÐ'Ô(ð 
ð 
ˆØÐàŸš Ñ+Ô+ØŸ(š( 8Ñ,Ô,ØŸš Ñ0Ô0ÐE°E·I²I¸fÑ4EÔ4Eðð ñ	
ô 	
ð 	
ð 	
ð ÐÝ9¸+ÑFÔFÑˆ˜Ø"ð ,ð ,ˆØÐ˜& 'Ð*Ñ+Ô+Ð+Ð+à€Or<   Ú
skill_nameÚmissing_entriesc                 ó0  — |sg dd dœS d„ |D ¦   «         }t          ¦   «         r!t          d¦  «        s|dt          ¦   «         dœS t          €|dd dœS d}g }|D �]9}d| i}|                     d¦  «        r|d         |d<   |                     d¦  «        r|d         |d<   	 t          |d         |d	         |¦  «        }nB# t
          $ r5 t                               d
|d         › �d¬¦  «         d|d         dddœ}Y nw xY wt          |t          ¦  «        o!t          |                     d¦  «        ¦  «        }t          |t          ¦  «        o!t          |                     d¦  «        ¦  «        }	|r|	s�Œd}|                     |d         ¦  «         �Œ;||d dœS )NF)Úmissing_namesÚsetup_skippedÚgateway_setup_hintc                 ó   — g | ]
}|d          ‘ŒS ©rI   rt   )r†   r2   s     r4   rˆ   z;_capture_required_environment_variables.<locals>.<listcomp>¤  s   € Ð@Ð@Ð@ u�U˜6”]Ð@Ð@Ð@r<   ÚHERMES_INTERACTIVEr²   r“   r¥   rI   r–   z#Secret capture callback failed for T©Úexc_info)ÚsuccessÚ	stored_asÚ	validatedÚskippedr½   rÀ   )Ú_is_gateway_surfacer   Ú_gateway_setup_hintrx   r�   Ú	ExceptionÚloggerÚwarningrM   rŽ   rœ   r'   )
r²   r³   rµ   r¶   Úremaining_namesr2   ÚmetadataÚcallback_resultr½   rÀ   s
             r4   Ú'_capture_required_environment_variablesrÉ   ™  sI  € ð ð 
àØ"Ø"&ð
ð 
ð 	
ð AÐ@°Ð@Ñ@Ô@€Mõ ÑÔð 
¥_Ð5IÑ%JÔ%Jð 
à*Ø"Ý"5Ñ"7Ô"7ð
ð 
ð 	
õ  Ð'à*Ø"Ø"&ð
ð 
ð 	
ð €MØ!#€Oà ð ".ñ ".ˆØ  *Ð-ˆØ�9Š9�VÑÔð 	-Ø$ Vœ}ˆH�VÑØ�9Š9�^Ñ$Ô$ð 	=Ø',¨^Ô'<ˆH�^Ñ$ð	Ý6Ø�f”Ø�h”Øñô ˆOˆOøõ
 ð 		ð 		ð 		Ý�NŠNØE°e¸F´mÐEÐEÐPTð ñ ô ð ð !Ø" 6œ]Ø"Øð	ð ˆOˆOˆOð			øøøõ ˜_­dÑ3Ô3ð 
½Ø×Ò 	Ñ*Ô*ñ9
ô 9
ˆõ ˜_­dÑ3Ô3ð 
½Ø×Ò 	Ñ*Ô*ñ9
ô 9
ˆð ð 	˜7ð 	ÙàˆØ×Ò˜u Vœ}Ñ-Ô-Ð-Ñ-ð )Ø&Ø"ðð ð s   ÂB=Â=<C<Ã;C<c                  ó`   — t          d¦  «        rdS ddlm}  t           | d¦  «        ¦  «        S )NÚHERMES_GATEWAY_SESSIONTr   ©Úget_session_envÚHERMES_SESSION_PLATFORM)r   Úgateway.session_contextrÍ   rœ   rÌ   s    r4   rÁ   rÁ   ç  sC   € ÝÐ/Ñ0Ô0ð ØˆtØ7Ð7Ð7Ð7Ð7Ð7Ý��Ð 9Ñ:Ô:Ñ;Ô;Ð;r<   c                  ó’   — t          t          j        dd¦  «        ¦  «                             ¦   «                              ¦   «         pdS )NÚTERMINAL_ENVÚlocal)r(   r$   ÚgetenvrN   Úlowerrt   r<   r4   Ú_get_terminal_backend_namerÕ   î  s9   € Ý�rŒy˜¨Ñ1Ô1Ñ2Ô2×8Ò8Ñ:Ô:×@Ò@ÑBÔBÐMÀgÐMr<   Úvar_nameÚenv_snapshotc                 ó°   — |€t          ¦   «         }| |v r"t          |                     | ¦  «        ¦  «        S t          t          j        | ¦  «        ¦  «        S rw   )rh   rœ   r�   r$   rÓ   )rÖ   r×   s     r4   Ú_is_env_var_persistedrÙ   ò  sR   € ð ÐÝ‘z”zˆØ�<ÐÐÝ�L×$Ò$ XÑ.Ô.Ñ/Ô/Ð/Ý•”	˜(Ñ#Ô#Ñ$Ô$Ð$r<   ©r×   Úrequired_env_varsÚcapture_resultc                óì   — t          |d         ¦  «        }|€t          ¦   «         }g }| D ]I}|d         }|                     d¦  «        rŒ ||v st          ||¦  «        s|                     |¦  «         ŒJ|S )Nrµ   rI   r¦   )r¯   rh   r�   rÙ   r'   )rÛ   rÜ   r×   rµ   Ú	remainingr2   rI   s          r4   Ú%_remaining_required_environment_namesrß   ü  s�   € õ ˜ Ô7Ñ8Ô8€MàÐÝ‘z”zˆØ€IØ"ð #ð #ˆØ�VŒ}ˆØ�9Š9�ZÑ Ô ð 	ØØ�=Ð Ð Õ(=¸dÀLÑ(QÔ(QÐ Ø×Ò˜TÑ"Ô"Ð"øØÐr<   c                  óX   — 	 ddl m}  | S # t          $ r dt          ¦   «         › d�cY S w xY w)Nr   ©Ú*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.)Úgateway.platforms.baserâ   rÃ   r   rá   s    r4   rÂ   rÂ     s~   € ðbØUÐUÐUÐUÐUÐUà9Ð9øÝð bð bð bð bõ  |Oñ  |Qô  |Qð  bð  bð  bð  	bð  	bð  	bðbøøøs   ‚
 Š)¨)Úreadiness_statusÚmissingÚ
setup_helpc                 óz   — | t           j        k    r*|rd                     |¦  «        nd}d|› d�}|r|› d|› �S |S d S )Nú, zrequired prerequisitesz.Setup needed before using this skill: missing ú.Ú )rj   rr   Újoin)rä   rå   ræ   Úmissing_strÚnotes        r4   Ú_build_setup_noterî     se   € ð
 Õ/Ô<Ò<Ð<Ø,3ÐQ�d—i’i Ñ(Ô(Ð(Ð9QˆØNÀÐNÐNÐNˆØð 	*ØÐ)Ð)˜ZÐ)Ð)Ð)ØˆØˆ4r<   c                  ó   — dS )zOSkills are always available -- the directory is created on first use if needed.Trt   rt   r<   r4   Úcheck_skills_requirementsrð   '  s   € àˆ4r<   Úcontentc                 ó$   — ddl m}  || ¦  «        S )u½   Parse YAML frontmatter from markdown content.

    Delegates to ``agent.skill_utils.parse_frontmatter`` â€” kept here
    as a public re-export so existing callers don't need updating.
    r   )Úparse_frontmatter)r~   ró   )rñ   ró   s     r4   Ú_parse_frontmatterrô   ,  s'   € ð 4Ð3Ð3Ð3Ð3Ð3ØÐ˜WÑ%Ô%Ð%r<   Ú
skill_pathc                 ó,  — t          ¦   «         g}	 ddlm} |                      |¦   «         ¦  «         n# t          $ r Y nw xY w|D ]L}	 |                      |¦  «        }|j        }t          |¦  «        dk    r
|d         c S Œ=# t          $ r Y ŒIw xY wdS )zÜ
    Extract category from skill path based on directory structure.

    For paths like: ~/.hermes/skills/mlops/axolotl/SKILL.md -> "mlops"
    Also works for external skill dirs configured via skills.external_dirs.
    r   ©Úget_external_skills_dirsé   N)	r;   r~   rø   ÚextendrÃ   Úrelative_toÚpartsÚlenÚ
ValueError)rõ   Údirs_to_checkrø   Ú
skills_dirÚrel_pathrü   s         r4   Ú_get_category_from_pathr  6  sÛ   € õ !‘]”]�O€MðØ>Ð>Ð>Ð>Ð>Ð>Ø×ÒÐ5Ð5Ñ7Ô7Ñ8Ô8Ð8Ð8øÝð ð ð Øˆðøøøà#ð ð ˆ
ð	Ø!×-Ò-¨jÑ9Ô9ˆHØ”NˆEÝ�5‰zŒz˜QŠˆØ˜Q”x���ð øåð 	ð 	ð 	ØˆHð	øøøàˆ4s!   ‘#5 µ
AÁAÁ
6BÂ
BÂBc                 ó4  — | sg S t          | t          ¦  «        rd„ | D ¦   «         S t          | ¦  «                             ¦   «         } |                      d¦  «        r|                      d¦  «        r
| dd…         } d„ |                      d¦  «        D ¦   «         S )uB  
    Parse tags from frontmatter value.

    Handles:
    - Already-parsed list (from yaml.safe_load): [tag1, tag2]
    - String with brackets: "[tag1, tag2]"
    - Comma-separated string: "tag1, tag2"

    Args:
        tags_value: Raw tags value â€” may be a list or string

    Returns:
        List of tag strings
    c                 óT   — g | ]%}|¯t          |¦  «                             ¦   «         ‘Œ&S rt   r…   ©r†   Úts     r4   rˆ   z_parse_tags.<locals>.<listcomp>d  s+   € Ð8Ð8Ð8 1°aÐ8•�A‘”—’‘”Ð8Ð8Ð8r<   Ú[Ú]é   éÿÿÿÿc                 ó„   — g | ]=}|                      ¦   «         ¯|                      ¦   «                               d ¦  «        ‘Œ>S )r\   )rN   r  s     r4   rˆ   z_parse_tags.<locals>.<listcomp>k  s9   € ÐOÐOÐO qÀQÇWÂWÁYÄYÐOˆA�GŠG‰IŒI�OŠO˜EÑ"Ô"ÐOÐOÐOr<   Ú,)rM   r›   r(   rN   r_   ÚendswithÚsplit)Ú
tags_values    r4   Ú_parse_tagsr  P  s­   € ð ð Øˆ	õ �*�dÑ#Ô#ð 9Ø8Ð8¨
Ð8Ñ8Ô8Ð8õ �Z‘”×&Ò&Ñ(Ô(€JØ×Ò˜SÑ!Ô!ð & j×&9Ò&9¸#Ñ&>Ô&>ð &Ø  " Ô%ˆ
àOÐO¨J×,<Ò,<¸SÑ,AÔ,AÐOÑOÔOÐOr<   c                  ó"   — ddl m}   | ¦   «         S )u½   Load disabled skill names from config.

    Delegates to ``agent.skill_utils.get_disabled_skill_names`` â€” kept here
    as a public re-export so existing callers don't need updating.
    r   ©Úget_disabled_skill_names)r~   r  r  s    r4   Ú_get_disabled_skill_namesr  o  s%   € ð ;Ð:Ð:Ð:Ð:Ð:Ø#Ð#Ñ%Ô%Ð%r<   c                  óL   — 	 ddl m}   | d¦  «        pdS # t          $ r Y dS w xY w)zéResolve the current platform from gateway session context.

    Mirrors the platform-resolution logic in
    ``agent.skill_utils.get_disabled_skill_names`` so that
    ``_is_skill_disabled`` respects ``HERMES_SESSION_PLATFORM``.
    r   rÌ   rÎ   r   )rÏ   rÍ   rÃ   rÌ   s    r4   Ú_get_session_platformr  y  sQ   € ðØ;Ð;Ð;Ð;Ð;Ð;ØˆÐ8Ñ9Ô9Ð?¸RÐ?øÝð ð ð Øˆrˆrðøøøs   ‚ •
#¢#r   c                 ó(  — 	 ddl m}  |¦   «         }|                     di ¦  «        }|p!t          j        d¦  «        pt          ¦   «         }|                     dg ¦  «        }|rt          |d|¦  «        }|�| |v p| |v S | |v S # t          $ r Y dS w xY w)	a  Check if a skill is disabled in config.

    Resolves the active platform from (in order of precedence):
    1. Explicit ``platform`` argument
    2. ``HERMES_PLATFORM`` environment variable
    3. ``HERMES_SESSION_PLATFORM`` from gateway session context
    r   )Úload_configr6   ÚHERMES_PLATFORMr,   Úplatform_disabledNF)Úhermes_cli.configr  r�   r$   rÓ   r  r   rÃ   )rI   r   r  ÚconfigÚ
skills_cfgÚresolved_platformÚglobal_disabledr  s           r4   Ú_is_skill_disabledr   ‡  sÔ   € ðØ1Ð1Ð1Ð1Ð1Ð1Ø�‘”ˆØ—Z’Z ¨"Ñ-Ô-ˆ
Ø$Ð_­¬	Ð2CÑ(DÔ(DÐ_ÕH]ÑH_ÔH_ÐØ$Ÿ.š.¨°RÑ8Ô8ˆØð 	LÝ '¨
Ð4GÐIZÑ [Ô [ÐØ Ð,ð Ð0Ð0ÐK°D¸OÐ4KÐKØ�Ð&Ð&øÝð ð ð Øˆuˆuðøøøs   ‚A<B Á?B Â
BÂBF)Úskip_disabledr!  c           	      ó`  — ddl m}m} | rt          nt          }| rt          ¦   «         nt          ¦   «         }g }t          ¦   «         }|                     ¦   «         r| 	                    |¦  «         | 
                     |¦   «         ¦  «         t          ||¦  «        }t          j        ¦   «         }t                               |¦  «        }	|	�2|	d         |k    r&||	d         z
  t           k     rd„ |	d         D ¦   «         S g }
t          ¦   «         }|D �]} ||d¦  «        D �]ô}t#          d„ |j        D ¦   «         ¦  «        rŒ"|j        }	 |                     d	d
¬¦  «        dd…         }t+          |¦  «        \  }}t-          |¦  «        sŒkt/          |¦  «        sŒ{|                     d|j        ¦  «        dt2          …         }||v rŒ¨||v rŒ­|                     dd¦  «        }|sY|                     ¦   «                              d¦  «        D ]1}|                     ¦   «         }|r|                     d¦  «        s|} nŒ2t;          |¦  «        t<          k    r|dt<          dz
  …         dz   }t?          |¦  «        }|                      |¦  «         |
 	                    |||dœ¦  «         �ŒŠ# tB          tD          f$ r'}tF           $                    d||¦  «         Y d}~�Œ½d}~wtJ          $ r)}tF           $                    d||d¬¦  «         Y d}~�Œîd}~ww xY w�Œ|||
ft          |<   d„ |
D ¦   «         S )a=  Recursively find all skills in ~/.hermes/skills/ and external dirs.

    Args:
        skip_disabled: If True, return ALL skills regardless of disabled
            state (used by ``hermes skills`` config UI). Default False
            filters out disabled skills.

    Returns:
        List of skill metadata dicts (name, description, category).

    Results are cached per-session; the cache is invalidated when the scan
    signature changes (dir/category mtimes or the disabled-set) and expires
    after a short TTL to bound staleness from in-place SKILL.md edits.
    r   )rø   Úiter_skill_index_filesNr	  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rt   ©rŽ   ©r†   Úss     r4   rˆ   z$_find_all_skills.<locals>.<listcomp>Í  s   € Ð+Ð+Ð+˜A•�Q‘”Ð+Ð+Ð+r<   é   úSKILL.mdc              3   ó(   K  — | ]}|t           v V — Œd S rw   )Ú_EXCLUDED_SKILL_DIRS)r†   Úparts     r4   ú	<genexpr>z#_find_all_skills.<locals>.<genexpr>Ö  s(   è è € ÐKÐK°D�4Õ/Ð/ÐKÐKÐKÐKÐKÐKr<   rT   rU   rV   i   rI   Údescriptionr   Ú
rY   rù   ú...)rI   r.  Úcategoryz Failed to read skill file %s: %sz)Skipping skill at %s: failed to parse: %sTr»   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rt   r%  r&  s     r4   rˆ   z$_find_all_skills.<locals>.<listcomp>  s   € Ð$Ð$Ð$˜�D�‰GŒGÐ$Ð$Ð$r<   )&r~   rø   r#  Ú_SKILLS_CACHE_KEY_DISABLEDÚ_SKILLS_CACHE_KEY_FILTEREDr¯   r  r;   r]   r'   rú   r5   ÚtimeÚ	monotonicr   r�   Ú_SKILLS_CACHE_TTL_SECONDSÚanyrü   ÚparentÚ	read_textrô   r}   r‚   rI   ÚMAX_NAME_LENGTHrN   r  r_   rý   ÚMAX_DESCRIPTION_LENGTHr  r©   ÚUnicodeDecodeErrorÚPermissionErrorrÄ   ÚdebugrÃ   )r!  rø   r#  Ú	cache_keyr,   r+   Úactive_skills_dirÚ	signatureÚnowÚcachedr6   Ú
seen_namesÚscan_dirÚskill_mdÚ	skill_dirrñ   r{   ÚbodyrI   r.  rd   r1  Úes                          r4   Ú_find_all_skillsrK  ¡  sÃ  € ð SÐRÐRÐRÐRÐRÐRÐRà.;Ð[Õ*Ð*ÕA[€Ið &ÐF�s‰uŒuˆuÕ+DÑ+FÔ+F€Hð
 €LÝ#™œÐØ×ÒÑ!Ô!ð /Ø×ÒÐ-Ñ.Ô.Ð.Ø×ÒÐ0Ð0Ñ2Ô2Ñ3Ô3Ð3å& |°XÑ>Ô>€IÝ
Œ.Ñ
Ô
€Cå×Ò˜yÑ)Ô)€FàÐØ�1ŒI˜Ò"Ð"Ø�6˜!”9‰_Õ 9Ò9Ð9ð
 ,Ð+ ¨¤Ð+Ñ+Ô+Ð+à€FÝ‘e”e€Jð !ð 2ñ 2ˆØ.Ð.¨x¸ÑDÔDð 1	ñ 1	ˆHÝÐKÐK¸H¼NÐKÑKÔKÑKÔKð Øà œˆIð+Ø"×,Ò,°kÈ)Ð,ÑTÔTÐUZÐVZÐUZÔ[�Ý$6°wÑ$?Ô$?Ñ!�˜Tå-¨kÑ:Ô:ð Øå0°Ñ=Ô=ð Øà"—’ v¨y¬~Ñ>Ô>Ð?OÅÐ?OÔP�Ø˜:Ð%Ð%ØØ˜8Ð#Ð#Øà)Ÿošo¨m¸RÑ@Ô@�Ø"ð "Ø $§
¢
¡¤× 2Ò 2°4Ñ 8Ô 8ð "ð "˜Ø#Ÿzšz™|œ|˜Øð "¨¯ª¸Ñ(<Ô(<ð "Ø*.˜KØ!˜Eøå�{Ñ#Ô#Õ&<Ò<Ð<Ø"-Ð.IÕ/EÈÑ/IÐ.IÔ"JÈUÑ"R�Kå2°8Ñ<Ô<�à—’˜tÑ$Ô$Ð$Ø—’Ø Ø#.Ø (ðð ñ ô ð ñ øõ '­Ð8ð ð ð Ý—’Ð?ÀÈ1ÑMÔMÐMØ���‘øøøøÝð ð ð Ý—’Ø?ÀÈ1ÐW[ð ñ ô ð ð ���‘øøøøð	øøøñ[1	ðn !*¨3°Ð7…M�)ÑØ$Ð$˜VÐ$Ñ$Ô$Ð$s>   Å	A J)Æ
J)Æ,J)ÇJ)ÇCJ)Ê)LÊ:KËLË)LÌLc                 ó&   — t          | d„ ¬¦  «        S )z3Keep every skill listing path ordered the same way.c                 ó@   — |                       d¦  «        pd| d         fS )Nr1  r   rI   ©r�   )r'  s    r4   ú<lambda>z_sort_skills.<locals>.<lambda>  s    € ¨¯ª¨zÑ):Ô):Ð)@¸bÀ!ÀFÄ)Ð(L€ r<   )re   )Úsorted)r6   s    r4   Ú_sort_skillsrQ    s   € å�&ÐLÐLÐMÑMÔMÐMr<   r1  Útask_idc                 óZ  ‡ — 	 t          ¦   «         }|                     ¦   «         s|                     dd¬¦  «         t          ¦   «         }	 ddlm}m}  |¦   «           |¦   «                              ¦   «         D ]S}|                     di ¦  «        }t          |¦  «        sŒ(t          |d         ¦  «        rŒ>|                     |¦  «         ŒTn,# t          $ r t                               dd¬¦  «         Y nw xY w|st          j        dg g d	d
œd¬¦  «        S ‰ rˆ fd„|D ¦   «         }t#          |¦  «        }t%          d„ |D ¦   «         ¦  «        }t          j        d||t'          |¦  «        ddœd¬¦  «        S # t          $ r(}	t)          t+          |	¦  «        d¬¦  «        cY d}	~	S d}	~	ww xY w)aÂ  
    List all available skills (progressive disclosure tier 1 - minimal metadata).

    Returns only name + description to minimize token usage. Use skill_view() to
    load full content, tags, related files, etc.

    Args:
        category: Optional category filter (e.g., "mlops")
        task_id: Optional task identifier used to probe the active backend

    Returns:
        JSON string with minimal skill info: name, description, category
    T)ÚparentsÚexist_okr   ©Údiscover_pluginsÚget_plugin_managerr{   rI   zPlugin skill listing failedr»   z%No skills found in skills/ directory.)r½   r6   Ú
categoriesÚmessageF©Úensure_asciic                 óF   •— g | ]}|                      d ¦  «        ‰k    ¯|‘ŒS ©r1  rN  )r†   r'  r1  s     €r4   rˆ   zskills_list.<locals>.<listcomp>E  s/   ø€ ÐQÐQÐQ °1·5²5¸Ñ3DÔ3DÈÒ3PÐ3P˜!Ð3PÐ3PÐ3Pr<   c                 ób   — h | ],}|                      d ¦  «        ¯|                      d ¦  «        ’Œ-S r^  rN  r&  s     r4   ú	<setcomp>zskills_list.<locals>.<setcomp>L  s5   € ÐHÐHÐH 1°a·e²e¸JÑ6GÔ6GÐHˆQ�UŠU�:ÑÔÐHÐHÐHr<   z@Use skill_view(name) to see full content, tags, and linked files)r½   r6   rY  ÚcountÚhint©r½   N)r;   r]   ÚmkdirrK  Úhermes_cli.pluginsrW  rX  Úlist_plugin_skill_metadataÚpopr}   r   r'   rÃ   rÄ   r?  ÚjsonÚdumpsrQ  rP  rý   r   r(   )
r1  rR  rA  Ú
all_skillsrW  rX  Úplugin_skillr{   rY  rJ  s
   `         r4   Úskills_listrl    sS  ø€ ð81Ý'™MœMÐØ ×'Ò'Ñ)Ô)ð 	AØ×#Ò#¨D¸4Ð#Ñ@Ô@Ð@õ &Ñ'Ô'ˆ
ð	GØOÐOÐOÐOÐOÐOÐOÐOàÐÑÔÐØ 2Ð 2Ñ 4Ô 4× OÒ OÑ QÔ Qð 0ð 0�Ø*×.Ò.¨}¸bÑAÔA�Ý-¨kÑ:Ô:ð ØÝ% l°6Ô&:Ñ;Ô;ð ØØ×!Ò! ,Ñ/Ô/Ð/Ð/ð0øõ ð 	Gð 	Gð 	GÝ�LŠLÐ6ÀˆLÑFÔFÐFÐFÐFð	Gøøøð ð 		Ý”:à#Ø Ø"$ØFð	ð ð #ðñ ô ð ð ð 	RØQÐQÐQÐQ ZÐQÑQÔQˆJõ " *Ñ-Ô-ˆ
õ ØHÐH¨
ÐHÑHÔHñ
ô 
ˆ
õ ŒzàØ$Ø(Ý˜Z™œØZðð ð ð	
ñ 	
ô 	
ð 		
øõ ð 1ð 1ð 1Ý�#˜a™&œ&¨%Ð0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøsJ   ƒAE8 ÁBC ÃE8 Ã&C7Ã4E8 Ã6C7Ã7E8 ÄA E8 Å8
F*ÆF%ÆF*Æ%F*T)Ú
preprocessÚ
session_idrG  Ú	namespaceÚbareÚ	file_pathrm  rn  c                ó8  ‡‡— ddl m}m} | |¦   «         v rt          j        dd|› d|› �dœd¬¦  «        S 	 |                      dd	¬
¦  «        Šn9# t          $ r,}t          j        dd|› d‰› d|› �dœd¬¦  «        cY d}~S d}~ww xY wi }		 t          ‰¦  «        \  }	}
n# t          $ r Y nw xY w|› d‰› �}t          |¦  «        rt          j        dd|› d�dœd¬¦  «        S t          |	¦  «        s-t          j        dd|› d�t          j        j        dœd¬¦  «        S |�rhddlm}m} | j        } ||¦  «        rt          j        dddœd¬¦  «        S ||z  } |||¦  «        }|rt          j        d|dœd¬¦  «        S |                     ¦   «         s#t          j        dd|› d|› d‰› d�dœd¬¦  «        S 	 |                     dd	¬
¦  «        Šn…# t$          $ rG t          j        d|› d‰› �|d|j        › d|                     ¦   «         j        › d�ddœd¬¦  «        cY S t          $ r)}t          j        dd|› d|› �dœd¬¦  «        cY d}~S d}~ww xY wt          j        d|› d‰› �|‰|j        t/          |¦  «        dœd¬¦  «        S t1          ˆfd„t2          D ¦   «         ¦  «        rt4                               d |‰¦  «         t/          |	                     d!d"¦  «        ¦  «        }t;          |¦  «        t<          k    r|dt<          d#z
  …         d$z   }	 ˆfd%„ |¦   «                              |¦  «        D ¦   «         }|r+d&                      |¦  «        }d'|› d(|› d)|› d|d         › d*�	}nd'|› d+�}n# t          $ r d"}Y nw xY w‰}|rI	 dd,l!m"}  |‰| j        |¬-¦  «        }n.# t          $ r! t4           #                    d.|‰d¬/¦  «         Y nw xY wt          j        d|› d‰› �|r|› |› �n||tI          | j        ¦  «        t          j%        j        d0œd¬¦  «        S )1z8Read a plugin-provided skill, apply guards, return JSON.r   )Ú_get_disabled_pluginsrX  FzPlugin 'z5' is disabled. Re-enable with: hermes plugins enable ©r½   Úerrorr[  rT   rU   rV   úFailed to read skill 'ú:ú': NúSkill 'z' is disabled.ú$' is not supported on this platform.©r½   ru  rä   )rK   Úvalidate_within_dirú%Path traversal ('..') is not allowed.úFile 'ú' not found in skill 'ú'.Tú[Binary file: ú, size: ú bytes]©r½   rI   Úfilerñ   Ú	is_binaryzFailed to read '©r½   rI   r…  rñ   Ú	file_typeÚ_source_pathc              3   óD   •K  — | ]}|‰                      ¦   «         v V — Œd S rw   )rÔ   )r†   Úprñ   s     €r4   r-  z&_serve_plugin_skill.<locals>.<genexpr>Ö  s0   øè è € Ð
=Ð
= Aˆ1�—’‘”ÐÐ
=Ð
=Ð
=Ð
=Ð
=Ð
=r<   zIPlugin skill '%s:%s' contains patterns that may indicate prompt injectionr.  r   rù   r0  c                 ó    •— g | ]
}|‰k    ¯|‘ŒS rt   rt   )r†   r'  rp  s     €r4   rˆ   z'_serve_plugin_skill.<locals>.<listcomp>â  s*   ø€ ð 
ð 
ð 
ØØ�DŠyˆyð Øˆyˆyr<   rè   z,[Bundle context: This skill is part of the 'z' plugin.
Sibling skills: z..
Use qualified form to invoke siblings (e.g. z).]

z' plugin.]

©Úpreprocess_skill_content©rn  z'Could not preprocess plugin skill %s:%sr»   )r½   rI   rñ   r.  Úlinked_filesrä   )&re  rs  rX  rh  ri  r:  rÃ   rô   r   r}   rj   rs   rg   rL   rK   r|  r9  Úis_filer=  rI   r!   Úst_sizeÚsuffixr(   r8  ru   rÄ   rÅ   r�   rý   r<  Úlist_plugin_skillsrë   Úagent.skill_preprocessingrŽ  r?  Ú_plugin_skill_linked_filesrq   )rG  ro  rp  rq  rm  rn  rs  rX  rJ  Úparsed_frontmatterrf   Úqualified_namerK   r|  Ú
skill_rootÚtargetÚ
path_errorÚexcr.  ÚsiblingsÚsib_listÚbannerÚrendered_contentrŽ  rñ   s     `                     @r4   Ú_serve_plugin_skillr¡  a  s  øø€ ð MÐLÐLÐLÐLÐLÐLÐLàÐ)Ð)Ñ+Ô+Ð+Ð+ÝŒzà ðI˜yð Ið IØ=FðIð Iðð ð ð	
ñ 	
ô 	
ð 		
ð
ð ×$Ò$¨kÀ)Ð$ÑLÔLˆˆøÝð 
ð 
ð 
ÝŒzØÐ(YÀÐ(YÐ(YÈTÐ(YÐ(YÐVWÐ(YÐ(YÐZÐZØð
ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøð *,ÐðÝ 2°7Ñ ;Ô ;ÑÐ˜A˜AøÝð ð ð Øˆðøøøð "Ð*Ð* DÐ*Ð*€NÝ˜.Ñ)Ô)ð 
ÝŒzà ØA >ÐAÐAÐAðð ð ð
ñ 
ô 
ð 	
õ "Ð"4Ñ5Ô5ð 
ÝŒzà ØW >ÐWÐWÐWÝ$8Ô$DÔ$Jðð ð
 ð
ñ 
ô 
ð 	
ð ñ 3
ØTÐTÐTÐTÐTÐTÐTÐTà”_ˆ
Ø"Ð" 9Ñ-Ô-ð 	Ý”:Ø!Ð,SÐTÐTØ"ðñ ô ð ð ˜iÑ'ˆØ(Ð(¨°Ñ<Ô<ˆ
Øð 	Ý”:Ø!¨JÐ7Ð7Àeðñ ô ð ð �~Š~ÑÔð 	Ý”:à$Ø[ iÐ[Ð[ÀyÐ[Ð[ÐSWÐ[Ð[Ð[ðð ð #ðñ ô ð ð	Ø×&Ò&°ÀIÐ&ÑNÔNˆGˆGøÝ!ð 
	ð 
	ð 
	Ý”:à#Ø(Ð1Ð1¨4Ð1Ð1Ø%Øc°´ÐcÐcÀVÇ[Â[Á]Ä]ÔEZÐcÐcÐcØ!%ðð ð #ð	ñ 	ô 	ð 	ð 	ð 	õ ð 	ð 	ð 	Ý”:Ø!Ð,R¸yÐ,RÐ,RÈSÐ,RÐ,RÐSÐSØ"ðñ ô ð ð ð ð ð ð øøøøð	øøøõ
 ŒzàØ$Ð-Ð- tÐ-Ð-Ø!Ø"Ø#œ]Ý # F¡¤ðð ð ð

ñ 

ô 

ð 
	
õ Ð
=Ð
=Ð
=Ð
=Õ)<Ð
=Ñ
=Ô
=Ñ=Ô=ð 
Ý�ŠØWØ�tñ	
ô 	
ð 	
õ
 Ð(×,Ò,¨]¸BÑ?Ô?Ñ@Ô@€KÝ
ˆ;ÑÔÕ0Ò0Ð0Ø!Ð">Õ$:¸QÑ$>Ð">Ô?À%ÑGˆðð
ð 
ð 
ð 
Ø)Ð)Ñ+Ô+×>Ò>¸yÑIÔIð
ñ 
ô 
ˆð ð 	^Ø—y’y Ñ*Ô*ˆHð`¸yð `ð `Ø#+ð`ð `à?Hð`ð `àKSÐTUÌ;ð`ð `ð `ð ˆFð ^ÀIÐ]Ð]Ð]ˆFøøÝð ð ð Øˆˆˆðøøøð ÐØð ð	ØJÐJÐJÐJÐJÐJà7Ð7ØØ”Ø%ð ñ  ô  ÐÐøõ
 ð 	ð 	ð 	Ý�LŠLØ9¸9ÀdÐUYð ñ ô ð ð ð ð	øøøõ
 Œ:àØ Ð)Ð) 4Ð)Ð)Ø8>ÐT˜&Ð4Ð"2Ð4Ð4Ð4ÐDTØ&Ý6°x´ÑGÔGÝ 4Ô >Ô Dð	
ð 	
ð ð
ñ 
ô 
ð 
sy   ·A Á
BÁ!B Á:BÂ BÂB Â
B+Â*B+Æ7G ÇAIÈ	IÈ(IÉIÉIÌAM2 Í2NÎ NÎ	N# Î#(OÏOr™  c                 óÈ   ‡ ‡— ddl mŠ i }dD ]R}‰ |z  }|                     ¦   «         sŒˆ ˆfd„t          |                     d¦  «        ¦  «        D ¦   «         }|r|||<   ŒS|pd S )Nr   )r|  )Ú
referencesÚ	templatesÚassetsÚscriptsc                 ó”   •— g | ]D}|                      ¦   «         r. ‰|‰¦  «        ­"t          |                     ‰¦  «        ¦  «        ‘ŒES rw   )r‘  r(   rû   )r†   Úpathr™  r|  s     €€r4   rˆ   z._plugin_skill_linked_files.<locals>.<listcomp>  s`   ø€ ð 
ð 
ð 
àØ�|Š|‰~Œ~ð
ð $Ð# D¨*Ñ5Ô5Ð=õ �× Ò  Ñ,Ô,Ñ-Ô-ð >Ð=Ð=r<   Ú*)rL   r|  r&   rP  Úrglob)r™  Úlinkedr1  ÚbaseÚfilesr|  s   `    @r4   r–  r–    s¥   øø€ Ø7Ð7Ð7Ð7Ð7Ð7à#%€FØDð %ð %ˆØ˜HÑ$ˆØ�{Š{‰}Œ}ð 	Øð
ð 
ð 
ð 
ð 
å˜tŸzšz¨#™œÑ/Ô/ð
ñ 
ô 
ˆð ð 	%Ø$ˆF�8ÑøØˆ>�TÐr<   c                 ó’$  ‡Y‡Z‡[‡\‡]‡^‡_— 	 t          | ¦  «        }|rt          j        d|ddœd¬¦  «        S d}d| v �r4ddlm}m} dd	lm}m}	  || ¦  «        \  Š\}
 |‰\¦  «        s t          j        dd
‰\› d| › d�dœd¬¦  «        S  |¦   «           |	¦   «         }| 	                    | ¦  «        }|�^| 
                    ¦   «         s5|                     | ¦  «         t          j        dd| › d|› d�dœd¬¦  «        S t          |‰\|
|||¬¦  «        S |                     ‰\¦  «        }|rBt          j        dd|
› d‰\› d�ˆ\fd„|D ¦   «         d‰\› dt          |¦  «        › d�dœd¬¦  «        S |
r‰\› d|
› �}ddlm} |r+t          |¦  «        }|rt          j        d|ddœd¬¦  «        S g }t!          ¦   «         }| 
                    ¦   «         r|                     |¦  «         |                      |¦   «         ¦  «         |st          j        dddœd¬¦  «        S dŠ_d}ddlm} g ŠZt)          ¦   «         Š^dt*          t,                   dt,          ddfˆZˆ^fd „}|D �]L}|| z  }t/          |¦  «        s;|                     ¦   «         r'|d!z   
                    ¦   «         r |||d!z  ¦  «         nh|                     d"¦  «         
                    ¦   «         rAt/          |                     d"¦  «        ¦  «        s |d|                     d"¦  «        ¦  «         |r·||z  }t/          |¦  «        s;|                     ¦   «         r'|d!z   
                    ¦   «         r |||d!z  ¦  «         nh|                     d"¦  «         
                    ¦   «         rAt/          |                     d"¦  «        ¦  «        s |d|                     d"¦  «        ¦  «          ||d!¦  «        D ]‹}|j        j        | k    r ||j        |¦  «         Œ$	 |                     d#d$¬%¦  «        }t;          |¦  «        \  }}n# t<          $ r i }Y nw xY w|                     d&¦  «        | k    r ||j        |¦  «         ŒŒ|                      | › d"�¦  «        D ](}|j        d!k    rt/          |¦  «        s |d|¦  «         Œ)�ŒNt          ‰Z¦  «        d'k    rŠd(„ ‰ZD ¦   «         }tC          j"        tF          ¦  «         $                    d)| t          ‰Z¦  «        d* %                    |¦  «        ¦  «         t          j        dd+| › d,t          ‰Z¦  «        › d-�|d.d/œd¬¦  «        S ‰Zr‰Zd         \  Š_}|r| 
                    ¦   «         sLd0„ tM          tO          ¦   «         ¦  «        dd1…         D ¦   «         }t          j        dd| › d2�|d3dœd¬¦  «        S 	 |                     d#d$¬%¦  «        }n6# t<          $ r)}t          j        dd4| › d,|› �dœd¬¦  «        cY d}~S d}~ww xY wd5}| (                    ¦   «         g} 	 |                      d6„ |d'd…         D ¦   «         ¦  «         n# t<          $ r Y nw xY w| D ]=}!	 | (                    ¦   «          )                    |!¦  «         d} n# tT          $ r Y Œ:w xY w| +                    ¦   «         ŠYtY          ˆYfd7„tZ          D ¦   «         ¦  «        }"|s|"rtg }#|r|#                     d8|› �¦  «         |"r|#                     d9¦  «         tC          j"        tF          ¦  «         $                    d:| d* %                    |#¦  «        ¦  «         i }$	 t;          |¦  «        \  }$}n# t<          $ r i }$Y nw xY wt]          |$¦  «        s-t          j        dd| › d;�t^          j0        j1        d<œd¬¦  «        S |$                     d&|j        j        ¦  «        }%te          |%¦  «        rt          j        dd|%› d=�dœd¬¦  «        S |�r×‰_�rÔdd>l3m4}&m5}'  |'|¦  «        rt          j        dd?d@dœd¬¦  «        S ‰_|z  }( |&|(‰_¦  «        })|)rt          j        d|)d@dœd¬¦  «        S |( 
                    ¦   «         �sŽg g g g g dAœ}*‰_                      dB¦  «        D �]/}+|+ 6                    ¦   «         �r|+j        d!k    �rto          |+ )                    ‰_¦  «        ¦  «        },|, 8                    dC¦  «        r|*dD                              |,¦  «         Œw|, 8                    dE¦  «        r|*dF                              |,¦  «         Œ¨|, 8                    dG¦  «        r|*dH                              |,¦  «         ŒÙ|, 8                    dI¦  «        r|*dJ                              |,¦  «         �Œ|+j9        dKv r|*dL                              |,¦  «         �Œ1dM„ |* :                    ¦   «         D ¦   «         }*t          j        ddN|› dO| › d�|*dPdQœd¬¦  «        S 	 |(                     d#d$¬%¦  «        }nO# tv          $ rB t          j        d5| |dR|(j        › dS|( <                    ¦   «         j=        › dT�d5dUœd¬¦  «        cY S w xY w	 ddVl>m?}-  |-|(¦  «         n-# t<          $ r  t€           A                    dW|(d5¬X¦  «         Y nw xY wt          j        d5| |||(j9        to          |(¦  «        dYœd¬¦  «        S |$}.g }/g }0g }1g }2‰_�rX‰_dDz  }3|3 
                    ¦   «         r!ˆ_fdZ„|3 B                    d[¦  «        D ¦   «         }/‰_dFz  }4|4 
                    ¦   «         r9d\D ]6}5|0                     ˆ_fd]„|4                      |5¦  «        D ¦   «         ¦  «         Œ7‰_dHz  }6|6 
                    ¦   «         ra|6                      dB¦  «        D ]K}+|+ 6                    ¦   «         r5|1                     to          |+ )                    ‰_¦  «        ¦  «        ¦  «         ŒL‰_dJz  }7|7 
                    ¦   «         r9d^D ]6}5|2                     ˆ_fd_„|7 B                    |5¦  «        D ¦   «         ¦  «         Œ7i }8|.                     d`¦  «        }9t‡          |9tˆ          ¦  «        r|9                     dai ¦  «        pi }8t‹          |8                     db¦  «        p|.                     dbdc¦  «        ¦  «        }:t‹          |8                     dd¦  «        p|.                     dddc¦  «        ¦  «        };i }<|/r|/|<dD<   |0r|0|<dF<   |1r|1|<dH<   |2r|2|<dJ<   	 to          | )                    |¦  «        ¦  «        }=nO# tT          $ rB |j        j        r,to          | )                    |j        j        ¦  «        ¦  «        n|j        }=Y nw xY w|.                     d&‰_s|jF        n‰_j        ¦  «        }>t�          |.¦  «        \  }?}t‘          |.|?¦  «        }@t“          ¦   «         }At•          ¦   «         Š[ˆ[fde„|@D ¦   «         }Bt—          |>|B¦  «        }C|Brt•          ¦   «         Š[t™          |@|C‰[¬f¦  «        Š]t›          ‰]¦  «        }Dˆ]fdg„|@D ¦   «         }E|Er@	 ddhlNmO}F  |F|E¦  «         n-# t<          $ r  t€           A                    di|>d5¬X¦  «         Y nw xY w|.                     djg ¦  «        }Gt‡          |Gt           ¦  «        sg }Gg }H|GrD	 ddklQmR}I  |I|G¦  «        }H|Hrd5}Dn-# t<          $ r  t€           A                    dl|>d5¬X¦  «         Y nw xY w|}J|rC	 ddmlSmT}K  |K|‰_|¬n¦  «        }Jn-# t<          $ r  t€           A                    do|>d5¬X¦  «         Y nw xY wd}L‰_�r%	 ddplmU}MmV}NmW}O  |N‰_|¦  «        rà |O‰_|¦  «        }Pdc}Qdc}R|Pr¡	 t          jX        |dqz  |Pz  |Mz                       d#d$¬%¦  «        ¦  «        }Sto          |S                     dr¦  «        p|S                     ds¦  «        pdc¦  «        }Qto          |S                     dt¦  «        pdc¦  «        }Rn# t<          $ r Y nw xY w|P|Qpd|Rpdduœ}Ldv|P› dw�|Qrdx|Q› dw�ndcz   |Rrdy|R› �ndcz   dzz   }T|T|Jz   }Jn-# t<          $ r  t€           A                    d{|>d5¬X¦  «         Y nw xY wi d|d5“d&|>“d}|.                     d}dc¦  «        “db|:“dd|;“d~|J“d|=“d€‰_rto          ‰_¦  «        nd“d�|L“d‚|<r|<nd“dƒ|<rd„nd“d…|@“d†g “d‡‰]“dˆ|H“d‰g “dŠ|D“|Cd‹         |Drt^          jY        j1        nt^          jZ        j1        to          |¦  «        dŒœ¥}Ut·          d�„ |@D ¦   «         d¦  «        }V|Vr|V|UdŽ<   |Cd�         r|Cd�         |Ud�<   	 ddVl>m?}-  |-|¦  «         n-# t<          $ r  t€           A                    dW|d5¬X¦  «         Y nw xY w|Dr`d�„ ‰]D ¦   «         d‘„ |HD ¦   «         z   }Wt¹          t^          jY        |W|V¦  «        }X|Atº          v r|Xr|X› d’|A ^                    ¦   «         › d“�}X|Xr|X|Ud”<   |.                     d•¦  «        r|.d•         |Ud•<   t‡          |9tˆ          ¦  «        r|9|Ud`<   t          j        |Ud¬¦  «        S # t<          $ r(}t¿          to          |¦  «        d¬–¦  «        cY d}~S d}~ww xY w)—aØ  
    View the content of a skill or a specific file within a skill directory.

    Args:
        name: Name or path of the skill (e.g., "axolotl" or "03-fine-tuning/axolotl").
            Qualified names like "plugin:skill" resolve to plugin-provided skills.
        file_path: Optional path to a specific file within the skill (e.g., "references/api.md")
        task_id: Optional task identifier used to probe the active backend
        preprocess: Apply configured SKILL.md template and inline shell rendering
            to main skill content. Internal slash/preload callers disable this
            because they render the skill message themselves.

    Returns:
        JSON string with skill content or error message
    Fz>Use a skill name or relative path within the skills directory.)r½   ru  rb  r[  Nrw  r   )Úis_valid_namespaceÚparse_qualified_namerV  zInvalid namespace 'z' in 'z('. Namespaces must match [a-zA-Z0-9_-]+.rt  ry  z' file no longer exists at uT   . The registry entry has been cleaned up â€” try again after the plugin is reloaded.)rq  rm  rn  z' not found in plugin 'r€  c                 ó   •— g | ]	}‰› d |› �‘Œ
S )rw  rt   )r†   r'  ro  s     €r4   rˆ   zskill_view.<locals>.<listcomp>  s'   ø€ Ð,SÐ,SÐ,SÀA°	Ð-?Ð-?¸AÐ-?Ð-?Ð,SÐ,SÐ,Sr<   zThe 'z' plugin provides z
 skill(s).)r½   ru  Úavailable_skillsrb  ú/r÷   zISkills directory does not exist yet. It will be created on first install.)r#  ÚsdÚsmdr   c                 ó¼   •— 	 |                      ¦   «         }n# t          $ r |}Y nw xY w|‰v rd S ‰                     |¦  «         ‰                     | |f¦  «         d S rw   )ÚresolverÃ   r©   r'   )r´  rµ  re   Ú
candidatesÚseen_mds      €€r4   Ú_recordzskill_view.<locals>._record¹  sy   ø€ ðØ—k’k‘m”m��øÝð ð ð Ø���ðøøøà�gˆ~ˆ~Ø�Ø�KŠK˜ÑÔÐØ×Ò˜r 3˜iÑ(Ô(Ð(Ð(Ð(s   ƒ ˜'¦'r)  ú.mdrT   rU   rV   rI   r	  c                 ó2   — g | ]\  }}t          |¦  «        ‘ŒS rt   )r(   )r†   rf   rµ  s      r4   rˆ   zskill_view.<locals>.<listcomp>   s"   € Ð7Ð7Ð7¡& ! S•S˜‘X”XÐ7Ð7Ð7r<   u3   Skill name collision for '%s': %d candidates â€” %sz; zAmbiguous skill name 'rx  u€    skills match across your local skills dir and external_dirs. Refusing to guess â€” load one explicitly by its categorized path.z‘Pass the full relative path instead of the bare name (e.g., 'category/skill-name'), or rename one of the colliding skills so each name is unique.)r½   ru  Úmatchesrb  c                 ó   — g | ]
}|d          ‘ŒS r¹   rt   r&  s     r4   rˆ   zskill_view.<locals>.<listcomp>  s   € ÐRÐRÐR q˜˜6œÐRÐRÐRr<   é   z' not found.z+Use skills_list to see all available skillsrv  Tc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rw   )r·  )r†   r/   s     r4   r-  zskill_view.<locals>.<genexpr>7  s*   è è € Ð CÐ C° §¢¡¤Ð CÐ CÐ CÐ CÐ CÐ Cr<   c              3   ó    •K  — | ]}|‰v V — Œ	d S rw   rt   )r†   r‹  Ú_content_lowers     €r4   r-  zskill_view.<locals>.<genexpr>E  s(   øè è € Ð!SÐ!S¸! ! ~Ð"5Ð!SÐ!SÐ!SÐ!SÐ!SÐ!Sr<   zHskill file is outside the trusted skills directory (~/.hermes/skills/): zBskill content contains patterns that may indicate prompt injectionz#Skill security warning for '%s': %srz  r{  zT' is disabled. Enable it with `hermes skills` or inspect the files directly on disk.)r|  rK   r}  z.Use a relative path within the skill directory)r£  r¤  r¥  r¦  Úotherr©  zreferences/r£  z
templates/r¤  zassets/r¥  zscripts/r¦  >   ú.pyú.shú.texú.ymlú.jsonú.yamlr»  rÃ  c                 ó   — i | ]
\  }}|¯||“ŒS rt   rt   )r†   ÚkÚvs      r4   ú
<dictcomp>zskill_view.<locals>.<dictcomp>«  s#   € Ð"QÐ"QÐ"Q©D¨A¨qÈqÐ"Q 1 aÐ"QÐ"QÐ"Qr<   r~  r  z0Use one of the available file paths listed above)r½   ru  Úavailable_filesrb  r�  r‚  rƒ  r„  )Ú!mark_background_review_skill_readz4Could not record background-review skill read for %sr»   r‡  c                 óT   •— g | ]$}t          |                     ‰¦  «        ¦  «        ‘Œ%S rt   ©r(   rû   ©r†   rc   rH  s     €r4   rˆ   zskill_view.<locals>.<listcomp>ì  s:   ø€ ð #ð #ð #Ø67•C˜Ÿš iÑ0Ô0Ñ1Ô1ð#ð #ð #r<   ú*.md)rÓ  ú*.pyz*.yamlz*.ymlz*.jsonz*.texú*.shc                 óT   •— g | ]$}t          |                     ‰¦  «        ¦  «        ‘Œ%S rt   rÑ  rÒ  s     €r4   rˆ   zskill_view.<locals>.<listcomp>ü  s=   ø€ ð ð ð à !õ   §¢¨iÑ 8Ô 8Ñ9Ô9ðð ð r<   )rÔ  rÕ  z*.bashz*.jsz*.tsz*.rbc                 óT   •— g | ]$}t          |                     ‰¦  «        ¦  «        ‘Œ%S rt   rÑ  rÒ  s     €r4   rˆ   zskill_view.<locals>.<listcomp>  s-   ø€ ÐVÐVÐV¸1�˜QŸ]š]¨9Ñ5Ô5Ñ6Ô6ÐVÐVÐVr<   rÇ   ÚhermesÚtagsr   Úrelated_skillsc                 ój   •— g | ]/}|                      d ¦  «        °t          |d         ‰¦  «        °-|‘Œ0S )r¦   rI   )r�   rÙ   )r†   rJ  r×   s     €r4   rˆ   zskill_view.<locals>.<listcomp>5  sS   ø€ ð %
ð %
ð %
àØ—5’5˜Ñ$Ô$ð%
õ *¨!¨F¬)°\ÑBÔBð	%
Øð%
ð %
ð %
r<   rÚ   c                 ó4   •— g | ]}|d          ‰v¯|d          ‘ŒS r¹   rt   )r†   rJ  Úremaining_missing_required_envss     €r4   rˆ   zskill_view.<locals>.<listcomp>K  s7   ø€ ð 
ð 
ð 
àØ�ŒyÐ ?Ð?Ð?ð ˆfŒIà?Ð?Ð?r<   )Úregister_env_passthroughz/Could not register env passthrough for skill %sÚrequired_credential_files)Úregister_credential_filesz0Could not register credential files for skill %sr�  r�  z)Could not preprocess skill content for %s)ÚORG_PROVENANCE_FILEÚis_org_mirror_pathÚorg_id_of_pathÚ_orgÚauthor_deviceÚauthor_user_idÚts)Úorg_idÚ	shared_byÚas_ofu\   > [!NOTE] ORG-SHARED SKILL â€” provenance
> This skill is shared by your organisation (org `ú`z, last updated by `z, as of uP  ). It was reviewed and approved for the whole
> team â€” treat it as third-party instructions rather than your own notes.
> You MAY improve it in place like any other skill. Your edits are kept locally
> and are never overwritten by org updates; share them back with
> `hermes sync propose` (or automatically, if your org enables it).

z'Could not resolve org provenance for %sr½   r.  rñ   r¨  rH  Úorg_provenancer�  Ú
usage_hintzzTo view linked files, call skill_view(name, file_path) where file_path is e.g. 'references/api.md' or 'assets/config.yaml'r£   Úrequired_commandsÚ&missing_required_environment_variablesÚmissing_credential_filesÚmissing_required_commandsrl   r¶   )r¶   rä   r‰  c              3   óP   K  — | ]!}|                      d ¦  «        ¯|d          V — Œ"dS )r“   NrN  )r†   rJ  s     r4   r-  zskill_view.<locals>.<genexpr>à  s5   è è € ÐQÐQ¨À1Ç5Â5ÈÁ=Ä=ÐQ˜1˜Vœ9ÐQÐQÐQÐQÐQÐQr<   ræ   r·   c                 ó   — g | ]}d |› �‘ŒS )zenv $rt   )r†   rª   s     r4   rˆ   zskill_view.<locals>.<listcomp>ó  s.   € ð ð ð Ø'/Ð"˜Ð"Ð"ðð ð r<   c                 ó   — g | ]}d |› �‘ŒS )zfile rt   )r†   r¨  s     r4   rˆ   zskill_view.<locals>.<listcomp>õ  s+   € ð ð ð Ø#'�˜��ðð ð r<   rê   zW-backed skills need these requirements available inside the remote environment as well.Ú
setup_noteÚcompatibilityrc  )`rR   rh  ri  r~   r¯  r°  re  rW  rX  Úfind_plugin_skillr]   Úremove_plugin_skillr¡  r”  rý   rø   r;   r'   rú   r#  r¯   r   r   Ú_is_skill_support_pathr&   Úwith_suffixr9  rI   r:  rô   rÃ   r�   rª  ÚloggingÚ	getLoggerrn   rÅ   rë   rQ  rK  r·  rû   rþ   rÔ   r8  ru   r}   rj   rs   rg   r   rL   r|  rK   r‘  r(   r_   r“  Úitemsr=  r!   r’  Útools.skill_manager_toolrÏ  rÄ   r?  ÚglobrM   rŽ   r  Ústemr�   r±   rÕ   rh   rÉ   rß   rœ   Útools.env_passthroughrÞ  r›   Útools.credential_filesrà  r•  rŽ  rá  râ  rã  Úloadsrr   rq   Únextrî   Ú_REMOTE_ENV_BACKENDSÚupperr   )`rI   rq  rR  rm  Úlookup_errorÚlocal_category_namer¯  r°  rW  rX  rp  ÚpmÚplugin_skill_mdrk   rø   Úall_dirsrA  rG  r#  rº  Ú
search_dirÚdirect_pathÚcategorized_pathÚfound_skill_mdÚ
fm_contentÚfmrf   Úfound_mdÚpathsrñ   rJ  Ú_outside_skills_dirÚ_trusted_dirsÚ_tdÚ_injection_detectedÚ	_warningsr—  Úresolved_namer|  rK   Útarget_fileÚtraversal_errorrÎ  rc   ÚrelrÏ  r{   Úreference_filesÚtemplate_filesÚasset_filesÚscript_filesÚreferences_dirÚtemplates_dirÚextÚ
assets_dirÚscripts_dirÚhermes_metarÇ   rÙ  rÚ  r�  r  r²   r¡   rÛ   ÚbackendÚmissing_required_env_varsrÜ   rl   Úavailable_env_namesrÞ  Úrequired_cred_files_rawÚmissing_cred_filesrà  r   rŽ  rì  rá  râ  rã  Úprov_orgÚauthorrç  ÚprovÚheaderÚresultræ   Úmissing_itemsrõ  rÂ  r¸  r×   ro  rÝ  r¹  rH  s`                                                                                            @@@@@@@r4   Ú
skill_viewr2  !  sF  øøøøøøø€ ð*U1õ
 0°Ñ5Ô5ˆØð 	Ý”:à$Ø)Ø\ðð ð
 #ðñ ô ð ð +/Ðð �$ˆ;‰;ØRÐRÐRÐRÐRÐRÐRÐRØOÐOÐOÐOÐOÐOÐOÐOà2Ð2°4Ñ8Ô8‰OˆI�tØ%Ð% iÑ0Ô0ð 
Ý”zà#(ðE°)ð Eð EÀ4ð Eð Eð Eðð ð "'ð	ñ 	ô 	ð 	ð ÐÑÔÐØ#Ð#Ñ%Ô%ˆBØ ×2Ò2°4Ñ8Ô8ˆOàÐ*Ø&×-Ò-Ñ/Ô/ð à×*Ò*¨4Ñ0Ô0Ð0Ýœ:à',ð!7¨$ð !7ð !7Ø#2ð!7ð !7ð !7ðð ð &+ðñ ô ð õ +Ø#ØØØ'Ø)Ø&ðñ ô ð ð ×-Ò-¨iÑ8Ô8ˆIØð 	Ý”zà#(Ø!U¨4Ð!UÐ!UÈ	Ð!UÐ!UÐ!UØ,SÐ,SÐ,SÐ,SÈÐ,SÑ,SÔ,SØ _¨	Ð _Ð _ÅSÈÁ^Ä^Ð _Ð _Ð _ð	ð ð "'ðñ ô ð ð ð <Ø)2Ð&;Ð&;°TÐ&;Ð&;Ð#à>Ð>Ð>Ð>Ð>Ð>ð ð 
	Ý3Ð4GÑHÔHˆLØð Ý”zà#(Ø!-Ø `ðð ð
 "'ðñ ô ð ð ˆÝ'™MœMÐØ×#Ò#Ñ%Ô%ð 	/Ø�OŠOÐ-Ñ.Ô.Ð.Ø�ŠÐ0Ð0Ñ2Ô2Ñ3Ô3Ð3àð 	Ý”:à$Øhðð ð #ðñ ô ð ð ˆ	Øˆð 	=Ð<Ð<Ð<Ð<Ð<à8:ˆ
Ý‘u”uˆð	)�¥œð 	)­Tð 	)°dð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð #ð :	,ñ :	,ˆJð % tÑ+ˆKå*¨;Ñ7Ô7ð	>à×&Ò&Ñ(Ô(ð	>ð ! :Ñ-×5Ò5Ñ7Ô7ð	>ð
 �˜ [°:Ñ%=Ñ>Ô>Ð>Ð>Ø×(Ò(¨Ñ/Ô/×6Ò6Ñ8Ô8ð >ÕAWØ×'Ò'¨Ñ.Ô.ñBô Bð >ð �˜˜k×5Ò5°eÑ<Ô<Ñ=Ô=Ð=ð
 #ð GØ#-Ð0CÑ#CÐ å.Ð/?Ñ@Ô@ðGà(×/Ò/Ñ1Ô1ðGð *¨JÑ6×>Ò>Ñ@Ô@ðGð
 �GÐ,Ð.>ÀÑ.KÑLÔLÐLÐLØ%×1Ò1Øñô ç’&‘(”(ðGå#9Ø$×0Ò0°Ñ7Ô7ñ$ô $ðGð
 �G˜DÐ"2×">Ò">¸uÑ"EÔ"EÑFÔFÐFð #9Ð"8¸ÀZÑ"PÔ"Pð 
Cð 
C�Ø!Ô(Ô-°Ò5Ð5Ø�G˜NÔ1°>ÑBÔBÐBØðØ!/×!9Ò!9À;ÐW`Ð!9Ñ!aÔ!a�JÝ.¨zÑ:Ô:‘E�B˜˜øÝ ð ð ð Ø�B�B�Bðøøøà—6’6˜&‘>”> TÒ)Ð)Ø�G˜NÔ1°>ÑBÔBÐBøð '×,Ò,°¨\¨\¨\Ñ:Ô:ð ,ð ,�Ø”= JÒ.Ð.Õ7MØñ8ô 8Ð.ð �G˜D (Ñ+Ô+Ð+øñ	,õ ˆz‰?Œ?˜QÒÐØ7Ð7¨JÐ7Ñ7Ô7ˆEÝÔ�hÑ'Ô'×/Ò/ØEØ•c˜*‘o”o t§y¢y°Ñ'7Ô'7ñô ð õ ”:à$ð]°ð ]ð ]½#¸j¹/¼/ð ]ð ]ð ]ð  %ðCðð ð #ðñ ô ð ð$ ð 	0Ø",¨Q¤-ÑˆI�xàð 
	˜xŸšÑ0Ô0ð 
	ØRÐR­LÕ9IÑ9KÔ9KÑ,LÔ,LÈSÈbÈSÔ,QÐRÑRÔRˆIÝ”:à$Ø9 tÐ9Ð9Ð9Ø(1ØIð	ð ð #ðñ ô ð ð		Ø×(Ò(°+ÀiÐ(ÑPÔPˆGˆGøÝð 	ð 	ð 	Ý”:à$ØB°dÐBÐB¸qÐBÐBðð ð #ðñ ô ð ð ð ð ð ð øøøøð	øøøð #ÐØ*×2Ò2Ñ4Ô4Ð5ˆð	Ø× Ò Ð CÐ C°h¸q¸r¸r´lÐ CÑ CÔ CÑCÔCÐCÐCøÝð 	ð 	ð 	ØˆDð	øøøà ð 	ð 	ˆCðØ× Ò Ñ"Ô"×.Ò.¨sÑ3Ô3Ð3Ø&+Ð#Ø�øÝð ð ð Ø�ðøøøð
 !Ÿš™œˆÝ!Ð!SÐ!SÐ!SÐ!SÕ?RÐ!SÑ!SÔ!SÑSÔSÐàð 	sÐ"5ð 	sØˆIØ"ð xØ× Ò Ð!vÐltÐ!vÐ!vÑwÔwÐwØ"ð gØ× Ò Ð!eÑfÔfÐfÝÔ�hÑ'Ô'×/Ò/Ð0UÐW[Ð]a×]fÒ]fÐgpÑ]qÔ]qÑrÔrÐrà-/Ðð	$Ý$6°wÑ$?Ô$?Ñ!Ð  øÝð 	$ð 	$ð 	$Ø!#ÐÐÐð	$øøøõ &Ð&8Ñ9Ô9ð 	Ý”:à$ØQ tÐQÐQÐQÝ(<Ô(HÔ(Nðð ð
 #ðñ ô ð ð +×.Ò.¨v°x´Ô7KÑLÔLˆÝ˜mÑ,Ô,ð 
	Ý”:à$ð` -ð `ð `ð `ðð ð #ð	ñ 	ô 	ð 	ð ñ p	˜ñ p	ØXÐXÐXÐXÐXÐXÐXÐXð 'Ð& yÑ1Ô1ð Ý”zà#(Ø!HØ Pðð ð
 "'ðñ ô ð ð $ iÑ/ˆKð 2Ð1°+¸yÑIÔIˆOØð Ý”zà#(Ø!0Ø Pðð ð
 "'ðñ ô ð ð ×%Ò%Ñ'Ô'ñ ,ð #%Ø!#Ø Ø!Øð#ð #�ð #Ÿš¨Ñ-Ô-ð Añ A�AØ—y’y‘{”{ñ A q¤v°Ò';Ñ';Ý! !§-¢-°	Ñ":Ô":Ñ;Ô;˜ØŸ>š>¨-Ñ8Ô8ð AØ+¨LÔ9×@Ò@ÀÑEÔEÐEÐEØ Ÿ^š^¨LÑ9Ô9ð AØ+¨KÔ8×?Ò?ÀÑDÔDÐDÐDØ Ÿ^š^¨IÑ6Ô6ð AØ+¨HÔ5×<Ò<¸SÑAÔAÐAÐAØ Ÿ^š^¨JÑ7Ô7ð AØ+¨IÔ6×=Ò=¸cÑBÔBÐBÑBØœXð *ð ð ð ,¨GÔ4×;Ò;¸CÑ@Ô@Ð@ùð #RÐ"Q°O×4IÒ4IÑ4KÔ4KÐ"QÑ"QÔ"Q�å”zà#(Ø!S¨)Ð!SÐ!SÈ4Ð!SÐ!SÐ!SØ+:Ø Rð	ð ð "'ðñ ô ð ðØ%×/Ò/¸ÈYÐ/ÑWÔW��øÝ%ð ð ð å”zà#'Ø $Ø )Ø#q°KÔ4DÐ#qÐ#qÈk×N^ÒN^ÑN`ÔN`ÔNhÐ#qÐ#qÐ#qØ%)ðð ð "'ð	ñ 	ô 	ð 	ð 	ð 	ðøøøð	ØVÐVÐVÐVÐVÐVà1Ð1°+Ñ>Ô>Ð>Ð>øÝð ð ð Ý—’ØJØØ!ð ñ ô ð ð ð ðøøøõ ”:à#Ø Ø%Ø&Ø!,Ô!3õ %(¨Ñ$4Ô$4ð	ð 	ð #ðñ ô ð ð )ˆð ˆØˆØˆØˆàñ %	Ø&¨Ñ5ˆNØ×$Ò$Ñ&Ô&ð ð#ð #ð #ð #Ø;I×;NÒ;NÈvÑ;VÔ;Vð#ñ #ô #�ð &¨Ñ3ˆMØ×#Ò#Ñ%Ô%ð ðð ð �Cð #×)Ò)ðð ð ð à%2×%8Ò%8¸Ñ%=Ô%=ðñ ô ñô ð ð ð # XÑ-ˆJØ× Ò Ñ"Ô"ð JØ#×)Ò)¨#Ñ.Ô.ð Jð J�AØ—y’y‘{”{ð JØ#×*Ò*­3¨q¯}ª}¸YÑ/GÔ/GÑ+HÔ+HÑIÔIÐIøà# iÑ/ˆKØ×!Ò!Ñ#Ô#ð ØMð ð �CØ ×'Ò'ØVÐVÐVÐVÀ×@PÒ@PÐQTÑ@UÔ@UÐVÑVÔVñô ð ð ð ˆØ—?’? :Ñ.Ô.ˆÝ�h¥Ñ%Ô%ð 	;Ø"Ÿ,š, x°Ñ4Ô4Ð:¸ˆKå˜;Ÿ?š?¨6Ñ2Ô2ÐQ°k·o²oÀfÈbÑ6QÔ6QÑRÔRˆÝ$Ø�OŠOÐ,Ñ-Ô-ÐV°·²ÐAQÐSUÑ1VÔ1Vñ
ô 
ˆð
 ˆØð 	9Ø)8ˆL˜Ñ&Øð 	7Ø(6ˆL˜Ñ%Øð 	1Ø%0ˆL˜Ñ"Øð 	3Ø&2ˆL˜Ñ#ð	vÝ˜8×/Ò/Ð0AÑBÔBÑCÔCˆHˆHøÝð 	vð 	vð 	vàLTÌOÔLbÐu•s˜8×/Ò/°´Ô0FÑGÔGÑHÔHÐHÐhpÔhuˆHˆHˆHð	vøøøð !—_’_Ø¨ÐF�H”M�M¸	¼ñ
ô 
ˆ
õ :¸+ÑFÔFÑˆ˜Ý?Ø˜ñ
ô 
Ðõ -Ñ.Ô.ˆÝ‘z”zˆð%
ð %
ð %
ð %
à&ð%
ñ %
ô %
Ð!õ AØØ%ñ
ô 
ˆð %ð 	&Ý#™:œ:ˆLÝ*OØØØ%ð+
ñ +
ô +
Ð'õ
 Ð;Ñ<Ô<ˆð

ð 
ð 
ð 
à&ð
ñ 
ô 
Ðð
 ð 
	ð	ØJÐJÐJÐJÐJÐJà(Ð(Ð)<Ñ=Ô=Ð=Ð=øÝð ð ð Ý—’ØEØØ!ð ñ ô ð ð ð ðøøøð #.§/¢/Ð2MÈrÑ"RÔ"RÐÝÐ1µ4Ñ8Ô8ð 	)Ø&(Ð#Ø#%ÐØ"ð 	ðØLÐLÐLÐLÐLÐLà%>Ð%>Ð?VÑ%WÔ%WÐ"Ø%ð (Ø#'�LøøÝð ð ð Ý—’ØFØØ!ð ñ ô ð ð ð ðøøøð #ÐØð 	ðØNÐNÐNÐNÐNÐNà#;Ð#;ØØØ&ð$ñ $ô $Ð Ð øõ
 ð ð ð Ý—’Ø?ÀÐVZð ñ ô ð ð ð ðøøøð ˆØñ 9	ð8ðð ð ð ð ð ð ð ð ð ð &Ð% iÐ1BÑCÔCð +AØ-˜~¨iÐ9JÑKÔK�HØ�FØ�BØð !ð!Ý#'¤:à$5Ø&,ñ%-à&.ñ%/ð ':ñ%:÷ #,¢)°[È )Ñ"SÔ"Sñ$ô $˜Dõ &)Ø $§¢¨Ñ 9Ô 9ð !&Ø#'§8¢8Ð,<Ñ#=Ô#=ð!&à#%ñ&ô &˜Fõ
 "% T§X¢X¨d¡^¤^Ð%9°rÑ!:Ô!:˜B˜BøÝ(ð !ð !ð !Ø ˜Dð!øøøð #+Ø%+ ^¨tØ!#  tð&ð &�Nð(à$ð(ð (ð (ð ?EÐLÐ:°Ð:Ð:Ð:Ð:È"ñNð /1Ð8˜? b˜?˜?˜?°bñ	:ð
/ñ/ð ð  (.Ð0@Ñ'@Ð$øøÝð ð ð Ý—’Ø=ØØ!ð ñ ô ð ð ð ðøøøð
Ø�tð
à�Jð
ð ˜;Ÿ?š?¨=¸"Ñ=Ô=ð
ð �Dð	
ð
 ˜nð
ð Ð'ð
ð �Hð
ð ¨9Ð>�˜Y™œ˜¸$ð
ð ˜nð
ð ¨LÐB˜L˜L¸dð
ð Øðð  Wð  Wàð
ð -Ð.?ð
ð   ð
ð  5Ð6Uð!
ð" 'Ð(:ð#
ð$ (¨ð%
ð& ˜Lð'
ð( ,¨OÔ<àð!6Õ 4Ô AÔ GÐ Gå%Ô/Ô5õ   ™MœMð5
ð 
ð 
ˆõ: ÐQÐQÐ.?ÐQÑQÔQÐSWÑXÔXˆ
Øð 	.Ø#-ˆF�<Ñ àÐ.Ô/ð 	PØ+9Ð:NÔ+OˆFÐ'Ñ(ð		ØRÐRÐRÐRÐRÐRà-Ð-¨hÑ7Ô7Ð7Ð7øÝð 	ð 	ð 	Ý�LŠLØFØØð ñ ô ð ð ð ð	øøøð ð 	2ðð Ø3Rðñ ô ðð Ø+=ðñ ô ñˆMõ
 +Ý$Ô1ØØñô ˆJð
 Õ.Ð.Ð.°:Ð.Ø *ð  Vð  V¨W¯]ª]©_¬_ð  Vð  Vð  V�
Øð 2Ø'1��|Ñ$ð �?Š?˜?Ñ+Ô+ð 	CØ&1°/Ô&BˆF�?Ñ#Ý�h¥Ñ%Ô%ð 	*Ø!)ˆF�:ÑåŒz˜&¨uÐ5Ñ5Ô5Ð5øåð 1ð 1ð 1Ý�#˜a™&œ&¨%Ð0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøsÐ  ‰*AH ´AAH ÂA3AH Ã8AH ÄAAH Å&;AH Æ"A0AH ÈG!AH Ï5)PÐAH ÐP.Ð+AH Ð-P.Ð.DAH Ô<A.AH Ö,W ×AH ×
W7×W2×,W7×-AH ×2W7×7AH Ø'X: Ø9AH Ø:
YÙAH ÙYÙAH Ù)Y:Ù8AH Ù:
ZÚAH ÚZÚB1AH Ü9] ÝAH Ý]ÝAH Ý]Ý>AH ÞAAH ß&2AH à,AH áF"AH ç*h èAH èA	iéAH éiéAH éi$ é#AH é$'jêAH êjê1AH ë H7AH ó8"t ôAH ôA	u'õ$AH õ&u'õ'CAH ø,x> ø=AH ø>'y(ù%AH ù'y(ù(4AH úz3 ú2AH ú3'{ûAH û{ûAH û%{: û9AH û:'|$ü!AH ü#|$ü$AH ü-(A@$ ýB& ÿ%A@$ ÿ&
3ÿ0A@$ ÿ23ÿ30A@$ Á@#AH Á@$'AAÁAAH ÁAAAÁACAH ÁD#AD5 ÁD4AH ÁD5'AEÁEAH ÁEAEÁEB4AH ÁH
AIÁHAIÁH;AIÁIAIÚ__main__u   ðŸŽ¯ Skills Tool Testz<============================================================u   
ðŸ“‹ Listing all skills:r½   zFound ra  z skills in rY  z categorieszCategories: z
First 10 skills:é
   r  z] r   u     â€¢ z: r.  é<   r0  zError: ru  u   
ðŸ“– Viewing skill 'axolotl':ÚaxolotlzName: zDescription: zN/Aéd   zContent length: z charsr�  zLinked files: uE   
ðŸ“„ Viewing reference file 'axolotl/references/dataset-formats.md':zreferences/dataset-formats.mdzFile: r…  z	Preview: é–   rl  zVList available skills (name + description). Use skill_view(name) to load full content.ÚobjectÚstringz*Optional category filter to narrow results)Útyper.  )r;  Ú
propertiesr¬   )rI   r.  Ú
parametersr2  ah  Skills allow for loading information about specific tasks and workflows, as well as scripts and templates. Load a skill's full content or access its linked files (references, templates, scripts). First call returns SKILL.md content plus a 'linked_files' dict showing available references/templates/scripts. To access those, call again with file_path parameter.zŸThe skill name (use skills_list to see available skills). For plugin-provided skills, use the qualified form 'plugin:skill' (e.g. 'superpowers:writing-plans').z¤OPTIONAL: Path to a linked file within the skill (e.g., 'references/api.md', 'templates/config.yaml', 'scripts/validate.py'). Omit to get the main SKILL.md content.)rI   rq  c                 óp   — t          |                      d¦  «        |                     d¦  «        ¬¦  «        S )Nr1  rR  )r1  rR  )rl  r�   )ÚargsÚkws     r4   rO  rO  e  s2   € �{Ø—’˜*Ñ%Ô%¨r¯vªv°iÑ/@Ô/@ð ñ  ô  € r<   u   ðŸ“š)rI   ÚtoolsetÚschemaÚhandlerÚcheck_fnÚemojiÚ_skill_view_trackeréÈ   uâ   Skill content unchanged since it was loaded earlier in this conversation â€” refer to the earlier skill_view result; it is still current and complete. (Re-issued after context compression, this returns the full content again.)Úpayloadc                 óž   — |                       d¦  «        }|sdS 	 t          j        |¦  «        }||j        |j        fS # t
          $ r Y dS w xY w)zIStat the skill file a successful skill_view served, for change detection.r‰  N)r�   r$   r!   Úst_mtime_nsr’  r#   )rH  ÚsrcÚsts      r4   Ú_skill_view_fingerprintrM  ~  se   € à
�+Š+�nÑ
%Ô
%€CØð ØˆtðÝŒW�S‰\Œ\ˆØ�R”^ R¤ZÐ0Ð0øÝð ð ð Øˆtˆtðøøøs   ›"> ¾
AÁAc                 ón  — | sdS |                      d¦  «        s|                      d¦  «        dk    rdS t          |¦  «        }|€dS t          |                      d¦  «        p|¦  «        |pdf}t          5  t                               t          | ¦  «        i ¦  «        }|||<   t          |¦  «        t          k    r`	 |                     t          t          |¦  «        ¦  «        ¦  «         n# t          t          f$ r Y nw xY wt          |¦  «        t          k    °`ddd¦  «         dS # 1 swxY w Y   dS )zARecord a served skill_view so an identical repeat can be deduped.Nrl   rä   rI   r   )r�   rM  r(   Ú_skill_view_tracker_lockrF  Ú
setdefaultrý   Ú_SKILL_VIEW_DEDUP_CAPrg  r  ÚiterÚStopIterationÚKeyError)rR  rI   rq  rH  Úfpre   Úcaches          r4   Ú_record_skill_viewrW  Š  s€  € àð Øˆð ‡{‚{�>Ñ"Ô"ð  g§k¢kÐ2DÑ&EÔ&EÈÒ&WÐ&WØˆÝ	  Ñ	)Ô	)€BØ	€zØˆÝˆw�{Š{˜6Ñ"Ô"Ð* dÑ+Ô+¨Y¨_¸"Ð
=€CÝ	!ð ð Ý#×.Ò.­s°7©|¬|¸RÑ@Ô@ˆØˆˆc‰
Ý�%‰jŒjÕ0Ò0Ð0ðØ—	’	�$�t E™{œ{Ñ+Ô+Ñ,Ô,Ð,Ð,øÝ!¥8Ð,ð ð ð Ø�ðøøøõ �%‰jŒjÕ0Ò0Ð0ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s7   Á7AD*Â>/C.Ã-D*Ã.DÃ?D*ÄDÄD*Ä*D.Ä1D.c                 óª  — | sdS t           5  t                               t          | ¦  «        ¦  «        }|s	 ddd¦  «         dS t	          |                     ¦   «         ¦  «        D �]T\  }\  }}}|\  }}	|	|pdk    rŒ|t          |¦  «        k    rwt          |¦  «                             d|z   ¦  «        sR|                     dt          |¦  «        z   ¦  «        s-t          |¦  «                             d¦  «        d         |k    rŒ¢	 t          j	        |¦  «        }
|
j
        |
j        f||fk    r$|                     |d¦  «          ddd¦  «         dS n3# t          $ r& |                     |d¦  «         Y  ddd¦  «         dS w xY wt          j        dd||pddd	t           d
œd	¬¦  «        c cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   dS )z|Return a dedup stub when this exact skill file was already served
    to this task and is unchanged on disk; None otherwise.Nr   r³  rw  r
  TÚ	unchangedr)  F)r½   ÚstatusrI   r…  ÚdedupÚcontent_returnedrZ  r[  )rO  rF  r�   r(   r›   rý  r  r  r$   r!   rJ  r’  rg  r#   rh  ri  Ú_SKILL_VIEW_DEDUP_MESSAGE)rR  rI   rq  rV  re   rK  Úmtime_nsÚsizeÚrec_nameÚrec_fprL  s              r4   Ú_check_skill_view_deduprb  ¡  sÀ  € ð ð ØˆtÝ	!ð !ð !Ý#×'Ò'­¨G©¬Ñ5Ô5ˆØð 	Øð!ð !ð !ñ !ô !ð !ð !ð !õ +/¨u¯{ª{©}¬}Ñ*=Ô*=ð 	ñ 	Ñ&ˆCÑ&�#�x Ø"ÑˆH�fØ˜)˜/ rÒ*Ð*ØØ�3˜t™9œ9Ò$Ð$­S°©Y¬Y×-?Ò-?ÀÀhÁÑ-OÔ-OÐ$Ø$×-Ò-¨cµC¸±I´I©oÑ>Ô>ð %å˜D™	œ	Ÿš¨Ñ,Ô,¨RÔ0°HÒ<Ð<ØðÝ”W˜S‘\”\�Ø”N B¤JÐ/°H¸dÐ3CÒCÐCØ—I’I˜c 4Ñ(Ô(Ð(Øð%!ð !ð !ñ !ô !ð !ð !ð !ð  Døõ ð ð ð Ø—	’	˜#˜tÑ$Ô$Ð$Ø�tð+!ð !ð !ñ !ô !ð !ð !ð !ð&øøøõ ”:à#Ø)Ø$Ø%Ð3¨Ø!Ø(-Ý8ðð ð #ðñ ô ð ð ð-!ð !ð !ð !ñ !ô !ð !ð !ð	ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ðD ˆ4sB   Œ+GÁCGÄ>EÅGÅGÅ FÅ5GÆFÆ)GÇGÇGc                 óÎ   — t           5  | €t                               ¦   «          n(t                               t	          | ¦  «        d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zËClear the skill_view dedup cache (all tasks when task_id is None).

    Called on context compression: the original skill content is
    summarized away, so a re-view must return full content again.
    N)rO  rF  Úclearrg  r(   )rR  s    r4   Úreset_skill_view_dedupre  Ë  s¤   € õ 
"ð 8ð 8Øˆ?Ý×%Ò%Ñ'Ô'Ð'Ð'å×#Ò#¥C¨¡L¤L°$Ñ7Ô7Ð7ð	8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8s   ˆAAÁAÁ!Ac                 óÔ  — |                       dd¦  «        }|                      d¦  «        }t          |||                       d¦  «        ¦  «        }|�|S t          ||                       d¦  «        |¬¦  «        }	 t          j        |¦  «        }t          |t          ¦  «        r´|                      d¦  «        rŸt          |||                       d¦  «        |¦  «         |                      d¦  «        p|}|radd	lm	}m
}	  |	t          |¦  «        ¦  «          |t          |¦  «        |                      d¦  «        |                      d
¦  «        ¬¦  «         n# t          $ r Y nw xY w|S )ztInvoke skill_view, then bump view_count on success. Best-effort: a
    telemetry failure never breaks the tool call.rI   r   rR  rq  N)rq  rR  r½   r   )Úbump_useÚ	bump_viewrn  )rR  rn  )r�   rb  r2  rh  r  rM   rŽ   rW  Útools.skill_usagerg  rh  r(   rÃ   )
r?  r@  rI   rR  Ústubr0  ÚparsedÚresolvedrg  rh  s
             r4   Ú_skill_view_with_bumprm  Ø  sŠ  € ð �8Š8�F˜BÑÔ€DØ�fŠf�YÑÔ€Gõ # 7¨D°$·(²(¸;Ñ2GÔ2GÑHÔH€DØÐØˆÝØ˜Ÿš Ñ-Ô-°wðñ ô €FðÝ”˜FÑ#Ô#ˆÝ�f�dÑ#Ô#ð 	¨¯
ª
°9Ñ(=Ô(=ð 	Ý˜w¨¨d¯hªh°{Ñ.CÔ.CÀVÑLÔLÐLð —z’z &Ñ)Ô)Ð1¨TˆHØð 
ØAÐAÐAÐAÐAÐAÐAÐAØ�	�#˜h™-œ-Ñ(Ô(Ð(ð �Ý˜‘M”MØŸFšF 9Ñ-Ô-Ø!Ÿvšv lÑ3Ô3ðñ ô ð øøõ
 ð ð ð Øˆðøøøà€Ms   Á:CE Å
E%Å$E%)r   Nrw   )NN)NNT)pÚ__doc__rh  rû  r5  Ú	threadingÚhermes_constantsr   r   r$   ÚreÚenumr   Úpathlibr   r   r   Útypingr	   r
   r   r   r   r   Útools.registryr   r   r  r   Úutilsr   r~   r   r+  r   rù  rü  rn   rÄ   r   rŽ   Ú__annotations__r7  r3  r4  r)   r5   ÚHERMES_HOMEr8   r9   r;   r;  r<  Ú_PLATFORM_MAPÚcompiler§   r*   r  rx   r(   rR   rh   rj   ru   r›   rz   rœ   r}   r‚   r‰   r�   r    r±   rÉ   rÁ   rÕ   rÙ   rß   rÂ   rî   rð   rô   r  r  r  r  r   rK  rQ  rl  r¡  r–  r2  Úprintr  r0  rý   r�   ÚskillÚcatÚSKILLS_LIST_SCHEMAÚSKILL_VIEW_SCHEMAÚregisterrF  ÚLockrO  rQ  r]  rM  rW  rb  re  rm  rt   r<   r4   ú<module>r‚     sò  ððAð Að AðF €€€Ø €€€Ø €€€Ø Ð Ð Ð à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð
 
ˆÔ	˜8Ñ	$Ô	$€ð €ˆtÐ Ð Ñ Ø Ð Ø,Ð Ø'Ð ð7°eð 7ð 7ð 7ð 7ðH ˆoÑÔ€Ø˜8Ñ#€
Ø"Ð ð(�Tð (ð (ð (ð (ð €ØÐ ð
 ØØðð €ð
 �2”:Ð9Ñ:Ô:Ð Ø �yØJÐJÐJñô Ð ð  Ð ð 3ð ¨8°C¬=ð ð ð ð ð6�$�s˜C�x”.ð ð ð ð ð* ð  ð  ð  ð  ˜3 ñ  ô  ð  ð
ð 
ð 
Ð �Tð 
ð 
ñ 
ð(ð (ð (ð (ð
¨¨S°#¨X¬ð ¸4ð ð ð ð ð	¨4°°S°¬>ð 	¸dð 	ð 	ð 	ð 	ð>¨#ð >°$°s´)ð >ð >ð >ð >ð	Ø�c˜3�h”ð	à
ˆ4�Œ9�d˜3”iÐÔ ð	ð 	ð 	ð 	ð*¨4°°S°¬>ð *¸dÀ3ÈÀ8¼nð *ð *ð *ð *ð^ )-ðBð BØ�c˜3�h”ðBà˜#”Y Ñ%ðBð 
ˆ$ˆs�CˆxŒ.ÔðBð Bð Bð BðJKØðKà˜$˜s C˜xœ.Ô)ðKð 
ˆ#ˆsˆ(„^ðKð Kð Kð Kð\<˜Tð <ð <ð <ð <ðN Cð Nð Nð Nð Nð
 :>ð%ð %Øð%Ø!% c¨3 h¤°$Ñ!6ð%à	ð%ð %ð %ð %ð +/ð	ð ð Ø˜D  c œNÔ+ðà˜˜c˜”Nðð �s˜C�x”. 4Ñ'ð	ð
 
ˆ#„Yðð ð ð ð(b˜Sð bð bð bð bð "ðð Ø*ðà�#ŒYðð �d‘
ðð 	ˆ4�Zð	ð ð ð ð 4ð ð ð ð ð
& ð &¨¨d°3¸°8¬n¸cÐ.AÔ(Bð &ð &ð &ð &ð¨ð °¸#´ð ð ð ð ð4P˜t Cœyð Pð Pð Pð Pð>& 3 s¤8ð &ð &ð &ð &ð˜sð ð ð ð ðð ˜Sð ¨Cð ¸4ð ð ð ð ð4 /4ð l%ð l%ð l% tð l%¸¸TÀ#ÀsÀ(¼^Ô8Lð l%ð l%ð l%ð l%ð^N˜˜d 3¨ 8œnÔ-ð N°$°t¸CÀ¸H´~Ô2Fð Nð Nð Nð Nð
F1ð F1˜#ð F1¨sð F1¸cð F1ð F1ð F1ð F1ð` !ð	jð Ø!ðjð jð jØðjàðjð ðjð �T‰zð	jð ðjð �d‘
ðjð 	ðjð jð jð jðZ¨4ð °D¸¸dÀ3¼i¸Ô4HÈ4Ñ4Oð ð ð ð ð* ØØð	j1ð j1Ø
ðj1àðj1ð ðj1ð ð	j1ð
 	ðj1ð j1ð j1ð j1ð^ ˆzÒÑØØ	€EÐ
!Ñ"Ô"Ð"Ø	€Eˆ(�O„O€Oð 
€EÐ
&Ñ'Ô'Ð'ØˆTŒZ˜˜™œÑ&Ô&€FØˆiÔð 
+ØˆØ_�V˜G”_Ð_Ð_°°°V·Z²ZÀÈbÑ5QÔ5QÑ1RÔ1RÐ_Ð_Ð_ñ	
ô 	
ð 	
ð 	ˆÐ;˜VŸZšZ¨°bÑ9Ô9Ð;Ð;Ñ<Ô<Ð<ØˆÐ"Ñ#Ô#Ð#Ø˜HÔ% c r cÔ*ð 	Qð 	QˆEØ/4¯yªy¸Ñ/DÔ/DÐLÐ+�e˜JÔ'Ð+Ð+Ð+Ð+È"ˆCØˆEÐO˜3ÐO  f¤ÐOÐO°°}Ô1EÀcÀrÀcÔ1JÐOÐOÐOÑPÔPÐPÐPð	Qð 	ˆÐ)˜˜wœÐ)Ð)Ñ*Ô*Ð*ð 
€EÐ
+Ñ,Ô,Ð,ØˆTŒZ˜
˜
 9Ñ-Ô-Ñ.Ô.€FØˆiÔð +ØˆÐ'�v˜f”~Ð'Ð'Ñ(Ô(Ð(ØˆÐI˜fŸjšj¨¸Ñ>Ô>¸tÀ¸tÔDÐIÐIÐIÑJÔJÐJØˆÐ?   V¨IÔ%6Ñ!7Ô!7Ð?Ð?Ð?Ñ@Ô@Ð@Ø�:Š:�nÑ%Ô%ð 	=ØˆEÐ; 6¨.Ô#9Ð;Ð;Ñ<Ô<Ð<øàˆÐ)˜˜wœÐ)Ð)Ñ*Ô*Ð*ð 
€EÐ
RÑSÔSÐSØˆTŒZ˜
˜
 9Ð.MÑNÔNÑOÔO€FØˆiÔð +ØˆÐ'�v˜f”~Ð'Ð'Ñ(Ô(Ð(ØˆÐ?   V¨IÔ%6Ñ!7Ô!7Ð?Ð?Ð?Ñ@Ô@Ð@ØˆÐ6˜& Ô+¨D¨S¨DÔ1Ð6Ð6Ð6Ñ7Ô7Ð7Ð7àˆÐ)˜˜wœÐ)Ð)Ñ*Ô*Ð*ð ØkààØ ØKðð ð
ð ð	ð 	ðð Ð ð  ð ~àð !ð  Aðð ð
 !ð  Fðð ð	
ð 	
ð �Hðð ðð Ð ð& €Ô Ø	ØØðð ð 'Ø
ð	ñ 	ô 	ð 	ð" 68Ð �T˜#˜t E¨5 LÔ1Ð1Ô2Ð 7Ð 7Ñ 7Ø)˜9œ>Ñ+Ô+Ð ØÐ ð'ð ð	 Tð 	¨e°d©lð 	ð 	ð 	ð 	ð¸$ð À4ð ð ð ð ð.'¸¸t¹ð 'ð 'ð 'ð 'ðT
8ð 
8 C¨$¡Jð 
8¸$ð 
8ð 
8ð 
8ð 
8ð)ð )ð )ðX €Ô Ø	ØØØ!Ø&Ø
ðñ ô ð ð ð r<   