+
    lHàj,£  ã                   ó‚  a € Rn tm0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	 ^ RI
HtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtHt ^ R	I H!t!H"t"H#t#H$t$H%t%H&t& ^ R
I'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3 ^ RI4H5t5H6t6 ^ RI7H8t8 ]Pr                  ! ]:4      t;/ t<] ^ k Rt=^t>R R lt?]>3R R llt@R R ltA]! 4       tB]BR,          tC]CtDR R ltERsFRtGR R ltHR R ltIR R ltJ]P–                  ! RRR7      tL]R  4       tMR! R" ltN]N! R#4      tO]N! R$4      tP]N! R%4      tQ]N! R&4      tR]N! R'4      tSR( R) ltTR* R+ ltUR, R- ltVR.R/R/ R0 lltWR1 R2 ltXR3R4R5R4/R6 R7 lltYR3R4/R8 R9 lltZR: R; lt[RoR< R= llt\R> t]R? R@ lt^RA RB lt_RC t`RDRE.R4R43RF. RpORGR43RHRI.RGRG3RJ. RqOR4R433taRK RL ltbRM RN ltcRO RP ltdRQ RR lteRS RT ltfRU RV ltgRrRW RX llthRYRZR[R\R]R^R_R`RaR^RbR[Rc//Rd. //tiRYReR[RfR]R^R_R`RYR^RbR[Rg/RhR^RbR[Ri//RdRY.//tj]PÖ                  ! RZR]iRj ]TRkRl7       Rm tl]PÖ                  ! ReR]j]l]TRkRl7       R# )sus  Skills Tool â€” list and view skill documents (progressive disclosure). A skill is a directory
holding SKILL.md (YAML frontmatter + instructions) plus optional references/, templates/, assets/,
scripts/. `skills_list` returns name/description only; `skill_view` returns full content and
linked files. Sibling modules (skills_tool_setup / _plugin / _dedup) re-export here.N)ÚcontextmanagerÚsuppress)ÚPathÚPurePosixPathÚPureWindowsPath)ÚAnyÚDictÚListÚOptionalÚTuple)Úget_hermes_home)ÚregistryÚ
tool_error)Úcfg_get)ÚEXCLUDED_SKILL_DIRSÚis_skill_support_path)ÚSkillReadinessStatusÚ_build_setup_noteÚ'_capture_required_environment_variablesÚ#_get_required_environment_variablesÚ_is_env_var_persistedÚ_is_remote_env_backend)ÚMAX_DESCRIPTION_LENGTHÚMAX_NAME_LENGTHÚ_INJECTION_PATTERNSÚ_failÚ_jsonÚ_mark_background_review_readÚ_preprocess_skillÚ_read_skill_textÚ_safe_frontmatterÚ_serve_plugin_skillÚ_serve_skill_fileÚ_truncate_description)Údedup_skill_viewÚreset_skill_view_dedup)Úis_background_reviewg      >@c                ó   € V ^8„  d   QhRR/# ©é   ÚreturnN© )Úformats   "Ú6/home/ubuntu/.hermes/hermes-agent/tools/skills_tool.pyÚ__annotate__r.   ,   s   € ÷ ñ ˜Dñ ó    c                 ó.   € \         P                  4        R# )zcDrop the scanned catalog so the next listing re-scans (explicit reloads must not wait out the TTL).N)Ú_SKILLS_CACHEÚclearr+   r/   r-   Úclear_skills_cacher3   ,   s   € ä×ÑÖr/   c                ó   € V ^8„  d   QhRR/# r(   r+   )r,   s   "r-   r.   r.   1   s   € ÷ Jñ JÀ$ñ Jr/   c                ó4  € ^ RI HpHp  \        P                  ! V 4      P
                  p\        P                  ! V 4      ;_uu_ 4       p\        V4      pRRR4       . Rr˜X Fh  p
\        \        4      ;_uu_ 4        T
P                  4       '       d   TP                  T
P                  4       MT
P                  R8X  d   Rp	RRR4       Kj  	  TP                  4        TP                  \        T 4      T\        T4      34       T^ 8:  d   R# T FK  pY³9  g   K  T	'       d	   Y´9   d   K  \!        \        P"                  P%                  Y4      Y^,
          4       KM  	  R#   + '       g   i     EL; i  \         d     R# i ; i  + '       g   i     EK6  ; i)a}  Append ``(dir, mtime_ns, child dir names)`` for *root* and the dirs below it the catalog walks
(``iter_skill_index_files``: no excluded dirs, no support dirs of a skill), depth-bounded. The child
names, not only mtimes: an install and an uninstall inside one coarse mtime tick (1-2 s on some
filesystems) leave every mtime equal, and the change must still show. ~1 ms for 170 dirs.)r   ÚSKILL_SUPPORT_DIRSNFúSKILL.mdT)Úagent.skill_utilsr   r6   ÚosÚstatÚst_mtime_nsÚscandirÚlistÚOSErrorr   Úis_dirÚappendÚnameÚsortÚstrÚtupleÚ_dir_tree_signatureÚpathÚjoin)ÚrootÚsigÚdepthr   r6   ÚmtimeÚitÚentriesÚnamesÚis_skillÚentryrA   s   &&&         r-   rE   rE   1   s  € ÷
 JðÜ—’˜“×)Ñ)ˆÜ�ZŠZ˜×Ô Ü˜2“hˆG÷ ð ˜%ˆ8ÛˆÜ”g×ÕØ�|‰|�~Š~Ø—‘˜UŸZ™ZÕ(Ø—‘˜zÔ)Ø�÷	 Ññ ð 
‡J�J„LØ‡J�J”�D“	˜5¤%¨£,Ð/Ô0Ø�„zÙÛˆØÖ*·HÀÖA[Ü¤§¡§¡¨TÓ 8¸#Àq½yÖIó ÷ ×Ðûäô Úðú÷ ×Ñús<   Š>E3 ÁEÁE3 Á;AFÅE0	Å*E3 Å0E3 Å3FÆFÆFc                ó$   € V ^8„  d   QhR\         /# ©r)   r*   )rD   )r,   s   "r-   r.   r.   M   s   € ÷ 7ñ 7´eñ 7r/   c                ó¬   € ^ RI Hp \        \        VRR4      RR4      p. pV  F  p\        \	        V4      V4       K  	  \        V4      \        V4      V3# )z�Stat-based change signature over every directory the catalog walks; platform is read via
``agent.skill_utils.sys`` so test patches are honored.©Úskill_utilsÚsysNÚplatformÚ )ÚagentrU   ÚgetattrrE   rC   rD   Ú	frozenset)Údirs_to_scanÚdisabledÚ_skill_utilsrW   rI   Úds   &&    r-   Ú_skills_scan_signaturer`   M   sQ   € õ 2Ü”w˜|¨U°DÓ9¸:ÀrÓJ€HØ€CÛˆÜœC ›F CÖ(ñ ä�#‹Jœ	 (Ó+¨XÐ6Ð6r/   Úskillsc                ó$   € V ^8„  d   QhR\         /# rR   ©r   )r,   s   "r-   r.   r.   ]   s   € ÷ _ñ _”Tñ _r/   c                 ó\   € \        \        4      p V \        8w  d   V # \        4       R,          # )z¹Active profile's skills dir at call time: the patched ``SKILLS_DIR`` when a patcher changed
it, else live profile-scoped HERMES_HOME (long-lived runtimes may import before profile set).ra   )r   Ú
SKILLS_DIRÚ_SKILLS_DIR_AT_IMPORTr   )Ú
configureds    r-   Ú_skills_dirrh   ]   s*   € ô ”jÓ!€JØ#Ô'<Ô<ˆ:Ð^Ä/ÓBSÐV^ÕB^Ð^r/   z>Use a skill name or relative path within the skills directory.c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r)   rA   r*   ©rC   r
   )r,   s   "r-   r.   r.   h   s   € ÷ ñ ¤#ð ¬(´3­-ñ r/   c                ó*  € ^ RI Hp \        V \        4      '       g   R# \	        V P                  4       ;p4      p\        V4      P                  4       '       g)   VP                  4       '       g   VP                  '       d   R# V! V4      '       d   R# R# )z«Error if lookup *name* could escape the search roots it is joined onto. Windows drive
paths are rejected too: their ``:`` would be misread as a plugin namespace separator.)Ú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_securityrl   Ú
isinstancerC   r   Ústripr   Úis_absoluteÚdrive)rA   rl   Ú	candidateÚwins   &   r-   Úskill_lookup_path_errorrt   h   sh   € õ <Ü�dœC× Ò Ù-Ü
 t§z¡z£|Ð3˜)Ó
4€CÜ�YÓ×+Ñ+×-Ò-°·±×1BÒ1BÀcÇiÇiÀiÙPÙ˜y×)Ò)ÙJÙr/   c                óF   € V ^8„  d   QhR\         \        \        3,          /# rR   )ÚdictrC   )r,   s   "r-   r.   r.   v   s   € ÷ 
5ñ 
5”$”sœC�x•.ñ 
5r/   c                 ó^   € ^ RI Hp  V ! 4       e   / # ^ RIHp V! \	        4       R,          4      # )a  Snapshot of HERMES_HOME/.env for the post-skill secret-capture diff (same tokenizer that
installs the profile scope, so a captured value never differs from the served one). A frozen-policy
worker never opens the profile ``.env``: ``hermes_cli.config.load_env`` owns that short-circuit.)Úworker_config_snapshot)Úload_env_filez.env)Úagent.safe_worker_policyrx   Úagent.secret_scopery   r   )rx   ry   s     r-   Úload_envr|   v   s,   € õ @áÓÒ+Øˆ	Ý0áœÓ*¨VÕ3Ó4Ð4r/   c                ó   € V ^8„  d   QhRR/# r(   r+   )r,   s   "r-   r.   r.   ƒ   s   € ÷ (ñ (¨Tñ (r/   c                 ó
   € V s R # ©N)Ú_secret_capture_callback)Úcallbacks   &r-   Úset_secret_capture_callbackr‚   ƒ   s   € à'Òr/   Úturn_secret_capture)Údefaultc              #   ó    "  € \         P                  V 4      p R x € \         P                  V4       R #   \         P                  T4       i ; i5ir   )Ú_turn_secret_captureÚsetÚreset)r�   Útokens   & r-   Úbind_turn_secret_capturerŠ   Ž   s:   é € ä ×$Ñ$ XÓ.€Eð*Ûä×"Ñ" 5Ö)øÔ×"Ñ" 5Õ)üs   ‚A™4 �A´AÁAc                ó$   € V ^8„  d   QhR\         /# )r)   Úattr©rC   )r,   s   "r-   r.   r.   —   s   € ÷ ñ ¤ñ r/   c                ó0   a € V 3R lpS ;Vn         Vn        V# )zULazy call-time delegate to ``agent.skill_utils.<attr>`` (re-export; patches honored).c                  ó0   <€ ^ RI Hp \        VS4      ! V !  # )é    rT   )rY   rU   rZ   )ÚargsrU   rŒ   s   * €r-   Ú	_delegateÚ(_skill_utils_delegate.<locals>._delegate™   s   ø€ Ý%Ü�{ DÔ)¨4Ñ0Ð0r/   )Ú__name__Ú__qualname__)rŒ   r’   s   f r-   Ú_skill_utils_delegater–   —   s    ø€ õ1ð 37Ð6€IÔ˜Ô/ØÐr/   Úskill_matches_platformÚskill_matches_environmentÚskill_matches_appsÚparse_frontmatterÚget_disabled_skill_namesc                ó$   € V ^8„  d   QhR\         /# rR   )Úbool)r,   s   "r-   r.   r.   ¨   s   € ÷ ñ ¤4ñ r/   c                  ó   € R # )Tr+   r+   r/   r-   Úcheck_skills_requirementsrŸ   ¨   s   € Ùr/   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r)   Ú
skill_pathr*   )r   r
   rC   )r,   s   "r-   r.   r.   ¬   s   € ÷ ñ ¬ð ´¼#µñ r/   c                ó¶  € \        4       .p\        \        4      ;_uu_ 4        ^ RIHp VP                  V! 4       4       RRR4       V Fd  p\        \        4      ;_uu_ 4        \        V P                  V4      P                  ;p4      ^8¼  d   V^ ,          uuRRR4       u #  RRR4       Kf  	  R#   + '       g   i     L|; i  + '       g   i     KŽ  ; i)z�``~/.hermes/skills/mlops/axolotl/SKILL.md`` -> ``"mlops"``; active profile dir first
(respects test monkeypatching), then skills.external_dirs.)Úget_external_skills_dirsN)
rh   r   Ú	Exceptionr8   r£   ÚextendÚ
ValueErrorÚlenÚrelative_toÚparts)r¡   Údirs_to_checkr£   Ú
skills_dirr©   s   &    r-   Ú_get_category_from_pathr¬   ¬   s    € ô !“]�O€MÜ	”)×	Õ	Ý>Ø×ÑÑ5Ó7Ô8÷ 
ó $ˆ
Ü”j×!Õ!Ü˜J×2Ñ2°:Ó>×DÑDÐD�5ÓEÈÔJØ˜Q•x÷ "Ô!ØJ÷ "Ñ!ñ $ñ ÷ 
×	ú÷ "×!Ð!ús   £B4Á$4CÂ4C	ÃCc                ó:   € V ^8„  d   QhR\         \        ,          /# rR   )r=   rC   )r,   s   "r-   r.   r.   º   s   € ÷ 	Pñ 	Pœt¤C�yñ 	Pr/   c                óü  € V '       g   . # \        V \        4      '       d3   V  Uu. uF%  q'       g   K  \        V4      P                  4       NK'  	  up# \        V 4      P                  4       p V P	                  R4      '       d   V P                  R4      '       d   V ^R p V P                  R4       Uu. uF9  qP                  4       '       g   K  VP                  4       P                  R4      NK;  	  up# u upi u upi )z:Tags from frontmatter: a parsed list, "[a, b]", or "a, b".Ú[Ú]Ú,z"'éÿÿÿÿ)rn   r=   rC   ro   Ú
startswithÚendswithÚsplit)Ú
tags_valueÚts   & r-   Ú_parse_tagsr¸   º   s¾   € çØˆ	Ü�*œd×#Ò#Ù(2Ó8©
 1³a””�A“—‘–©
Ñ8Ð8Ü�Z“×&Ñ&Ó(€JØ×Ñ˜S×!Ò! j×&9Ñ&9¸#×&>Ò&>Ø  "Ð%ˆ
Ø,6×,<Ñ,<¸SÔ,AÓOÑ,A qÇWÁWÇYÔ"ˆA�G‰G‹I�O‰O˜EÖ"Ñ,AÑOÐOùò	 9ùò Ps   ¥	C4³C4Â2C9Ã#C9rW   c                óJ   € V ^8„  d   QhR\         R\         R,          R\        /# )r)   rN   rW   Nr*   ©rC   r�   )r,   s   "r-   r.   r.   Æ   s%   € ÷ ñ œsð ¬c°D­jð ÄDñ r/   c                ó  aa€  ^ RI Hp V! 4       P                  R/ 4      pT ;'       g    \        P                  ! R4      pV'       g9   \        \        4      ;_uu_ 4        ^ RIHp V! R4      ;'       g    RpRRR4       RoV'       d   \        VRV4      oVP                  R	. 4      o\        ;QJ d     VV3R
 lV 4       F  '       g   K   R# 	  R# ! VV3R
 lV 4       4      #   + '       g   i     Lu; i  \         d     R# i ; i)a  Any of *names* disabled in config (one config load)? Platform precedence: explicit arg,
``HERMES_PLATFORM``, session ``HERMES_SESSION_PLATFORM``. A globally-disabled skill stays disabled on every platform
(keep in sync with agent.skill_utils.get_disabled_skill_names).)Úload_configra   ÚHERMES_PLATFORM)Úget_session_envÚHERMES_SESSION_PLATFORMrX   NÚplatform_disabledr]   c              3   ó`   <"  € T F#  pSR J;'       d    VS9   ;'       g    VS9   x € K%  	  R # 5ir   r+   )Ú.0Únr]   rÀ   s   & €€r-   Ú	<genexpr>Ú%_is_skill_disabled.<locals>.<genexpr>Ö   s:   øé € ÐnÑhmÐcdÐ%¨TÐ1×LÐL°aÐ;LÑ6L×^Ð^ÐQRÐV^ÑQ^Ô^Óhmùs   ƒ.“. .TF)Úhermes_cli.configr¼   Úgetr9   Úgetenvr   r¤   Úgateway.session_contextr¾   r   Úany)rW   rN   r¼   Ú
skills_cfgÚresolved_platformr¾   r]   rÀ   s   $*    @@r-   Ú_is_skill_disabledrÍ   Æ   sÕ   ù€ ðÝ1Ù “]×&Ñ& x°Ó4ˆ
Ø$×DÐD¬¯	ª	Ð2CÓ(DÐß Üœ)×$Õ$ÝCÙ$3Ð4MÓ$N×$TÐ$TÐRTÐ!÷ %ð !ÐßÜ '¨
Ð4GÐIZÓ [ÐØ—>‘> *¨bÓ1ˆß‹sÕnÑhmÓn�sŒsÐnŠsÐnˆsÕnÑhmÓnÓnÐn÷ %×$ûô ô ÚðúsR   „%C9 ªC9 Á	C9 Á C&Á9C9 Â)C9 Â5C9 ÃC9 ÃC9 ÃC9 Ã&C6	Ã1C9 Ã9DÄDc                ó~   € V ^8„  d   QhR\         \        \         \        \        3,          ,          \        3,          /# rR   )rD   r=   Úintr   )r,   s   "r-   r.   r.   Û   s+   € ÷ $ñ $œ5¤¤e¬C´¨IÕ&6Õ!7¼Ð!=Õ>ñ $r/   c                 ó¬   € ^ RI Hp Hp \        4       pV! V4       UUu. uF&  w  r4W08w  g   VP	                  4       '       g   K#  W43NK(  	  pppWR3# u uppi )u¯   (``(tier, dir)`` roots in precedence order, active_skills_dir) â€” the shared
``agent.skill_utils.get_skill_search_roots`` order with the live profile dir (dropped if absent).)Ú
TIER_LOCALÚget_skill_search_roots)r8   rÑ   rÒ   rh   Úexists)rÑ   rÒ   Úactive_skills_dirr·   r_   Úrootss         r-   Úskill_search_dirsrÖ   Û   sT   € ÷ EÜ#›ÐÙ 6Ð7HÔ Iô /Ñ I™˜Ø” 1§8¡8§:ô ˆa‹VÑ I€Eñ /àÐ#Ð#ùó/s   ž AÁAÚskip_disabledFÚinclude_hiddenc          	      ót   € V ^8„  d   QhR\         R\         R\        \        \        \        3,          ,          /# )r)   r×   rØ   r*   ©r�   r=   rv   rC   r   )r,   s   "r-   r.   r.   å   s4   € ÷ -%ñ -%¤Tð -%Ä4ð -%ÔTXÔY]Ô^aÔcfÐ^fÕYgÕThñ -%r/   c                ó²  a€ ^ RI HpHpHpHoHp V '       d   RMRV3pV '       d   \        4       M	\        4       p\        4       w  r‰\        V U
Uu. uF  w  r«VNK	  	  upp
V4      p\        P                  ! 4       p\        P                  V4      pVeI   V^ ,          V8X  d;   WÞ^,          ,
          \        8  d#   V^,           Uu. uF  p\        V4      NK  	  up# . pV EFŒ  w  ppVV8X  d   TMV3R lpV! V4       EFi  p\         ;QJ d&    R VP"                   4       F  '       g   K   RM	  RM! R VP"                   4       4      '       d   KT   \%        \'        V4      R	,          4      w  ppVP                  R
R4      pV'       gI   \)        R \+        \,        P.                  VP/                  4       P1                  R4      4       4       V4      pTP3                  RVP                  RVP4                  P6                  4      R\8         R
\;        V4      R\=        V4      RTRTRTR\?        \A        V4      ;'       d    \C        V4      ;'       d    \E        V4      4      /4       EKl  	  EK�  	  V! V4       Uu. uF6  pVPQ                  R4      '       g   V'       g   K$  V! W÷4      '       d   K4  VNK8  	  ppWÍV3\        V&   V Uu. uF  p\        V4      NK  	  up# u upp
i u upi   \F        \H        3 d$   p\J        PM                  RTT4        Rp?EK  Rp?i\N         d&   p\J        PM                  RTTRR7        Rp?EKI  Rp?ii ; iu upi u upi )u>  Every scanned skill resolved by ``agent.skill_utils.resolve_skill_catalog`` (status /
load_name / tier / path), visible ones only unless *include_hidden*; cached per session.
Resolution runs over ALL files first â€” skill_view ignores platform/disabled gates when
collecting candidates, so it asks for hidden rows too.)ÚTIER_PROJECTÚis_disabled_entryÚiter_project_skill_filesÚiter_skill_index_filesÚresolve_skill_catalogÚwith_disabledÚfilteredNc                 ó   <€ S! V R 4      # )r7   r+   )r_   rß   s   &€r-   Ú<lambda>Ú _skill_catalog.<locals>.<lambda>ø   s   ø€ ÑPfÐghÐjtÔPur/   c              3   ó2   "  € T F  q\         9   x € K  	  R # 5ir   )Ú_EXCLUDED_SKILL_DIRS)rÂ   Úparts   & r-   rÄ   Ú!_skill_catalog.<locals>.<genexpr>ú   s   é € ÐK¹N°DÔ/Ö/»Nùs   ‚TF:Ni   NÚdescriptionrX   c              3   ól   "  € T F*  pV'       g   K  VP                  R 4      '       d   K&  Vx € K,  	  R# 5i)Ú#N)r³   )rÂ   Úlns   & r-   rÄ   ré      s.   é € ð (JÑ5]¨rÜ+-ô )+Ø68·m±mÀC×6H÷ )+ªÓ5]ùs   ‚
4‘4ª
4Ú
rA   ÚcategoryÚtierrH   rF   Úvisiblez Failed to read skill file %s: %sz)Skipping skill at %s: failed to parse: %s©Úexc_info))r8   rÜ   rÝ   rÞ   rß   rà   r‡   Ú_get_disabled_skill_namesrÖ   r`   ÚtimeÚ	monotonicr1   rÇ   Ú_SKILLS_CACHE_TTL_SECONDSrv   rÊ   r©   Ú_parse_frontmatterr   ÚnextÚmaprC   ro   rµ   r@   ÚparentrA   r   r#   r¬   r�   r—   r˜   r™   ÚUnicodeDecodeErrorÚPermissionErrorÚloggerÚdebugr¤   Úpop)r×   rØ   rÜ   rÝ   rÞ   rà   Ú	cache_keyr]   rÕ   Ú_Ú_tr_   Ú	signatureÚnowÚcachedÚsÚscannedrð   Úscan_dirÚ_iterÚskill_mdÚfrontmatterÚbodyrê   Úera   rß   s   $$                        @r-   Ú_skill_catalogr  å   sã  ø€ ÷
rõ rç$1‘°zÀ>ÐR€Iß%ŒsŒuÔ+DÓ+F€HÜ Ó"�H€EÜ&±uÔ'=±u©e¨b«±uÒ'=¸xÓH€IÜ
�.Š.Ó
€CÜ×Ñ˜yÓ)€FØÒ˜f Q�i¨9Ô4¸#ÀqÅ	½/ÔMfÔ9fð "(¨¦Ó+¡˜A”�Q–¡Ñ+Ð+Ø€GÜ‰ˆˆhØ,0°LÔ,@Ñ(ÔFuˆÙ˜hŸˆHß‹sÑK¸H¿NºNÓK�s�sŠsÑK¸H¿NºNÓK×KÒKÙðfÜ$6Ô7GÈÓ7QÐRWÕ7XÓ$YÑ!�˜TØ)Ÿo™o¨m¸RÓ@�ß"Ü"&ñ (J´S¼¿¹ÀDÇJÁJÃL×DVÑDVÐW[ÓD\Ô5]ó (JØKVó#X�Kà—‘Ø˜KŸO™O¨F°H·O±O×4HÑ4HÓIÐJZÌ?Ð[Ø!Ô#8¸Ó#EØÔ 7¸Ó AÀ6È4ÐQWÐYaØ˜H i´Ô6LÈ[Ó6Y÷ 7Zð 7ZÜ:SÐT_Ó:`÷7Zð 7Zä:LÈ[Ó:Yó2[ð	 \÷ ]ô (ñ  ñ, /¨wÔ7ó ^Ñ7�AØ—%‘%˜	×"Ò"¤nô Ù>OÐPQ×>\÷ ˆaÑ7€Fð ^ð !*°Ð7„M�)ÑÙ#Ó$™V˜ŒD�ŽG™VÑ$Ð$ùóG (>ùò ,øô( '¬Ð8ô NÜ—‘Ð?ÀÈ1×MÓMûÜô fÜ—‘ÐHÈ(ÐTUÐ`d�×eÓeûðfüò^ùò
 %s[   ÁK
ÃK%ÅC>K*ÉK*É;MÊMÊ!MÊ1MËMË*MË;LÌMÌ&MÌ'MÍMc                óh   € V ^8„  d   QhR\         R\        \        \        \        3,          ,          /# )r)   r×   r*   rÚ   )r,   s   "r-   r.   r.     s+   € ÷ Tñ T¤dð T´t¼DÄÄcÀ½NÕ7Kñ Tr/   c           
     óš   € \        V R7       Uu. uF0  qR,          '       g   K  RVR,          RVR,          RVR,          /NK2  	  up# u upi )u	  Loadable skills (name, description, category): ``name`` is what skill_view() accepts â€”
the declared name, or the exact relative path for a same-tier duplicate. Shadowed and
unloadable copies are left out. ``skip_disabled=True`` ignores disabled state (config UI).)r×   Ú	load_namerA   rê   rï   )r  )r×   r  s   $ r-   Úfind_all_skillsr    sX   € ô
 $°-Õ@óTÙ@�ÀkÇNÁNô aˆV�Q�{•^ ]°A°mÕ4DÀjÐRSÐT^ÕR_Ó`Ù@ñTð Tùò Ts
   �A¤!Ac                ó    € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        \        \        3,          ,          /# )r)   ra   r*   )r=   rv   rC   r   )r,   s   "r-   r.   r.     s8   € ÷ Nñ NœœT¤#¤s (�^Õ,ð N´´d¼3Ä¸8µnÕ1Eñ Nr/   c                ó   € \        V R R7      # )z3Keep every skill listing path ordered the same way.c                 óJ   € V P                  R 4      ;'       g    RV R,          3# )rï   rX   rA   ©rÇ   )r  s   &r-   rä   Úsort_skills.<locals>.<lambda>  s   € ¨¯©¨zÓ):×)@Ð)@¸bÀ!ÀFÅ)Ñ(Lr/   )Úkey)Úsorted)ra   s   &r-   Úsort_skillsr    s   € ä�&ÑLÔMÐMr/   c                óX   € V ^8„  d   QhR\         R,          R\         R,          R\         /# )r)   rï   NÚtask_idr*   r�   )r,   s   "r-   r.   r.   "  s)   € ÷ 1ñ 1œ# �*ð 1´c¸Dµjð 1ÌCñ 1r/   c                ón  €  \        4       P                  RRR7       \        4       p ^ RIHpHp V! 4        V! 4       P                  4        FQ  pVP                  R/ 4      p\        V4      '       d   \        VR,          4      '       d   K@  VP                  V4       KS  	  V'       g   \        RRR	. R
. RR/4      # V '       d)   V Uu. uF  qwP                  R4      V 8X  g   K  VNK  	  pp\!        V4      p\#        V Uu0 uF,  qwP                  R4      '       g   K  VP                  R4      kK.  	  up4      p\        RRR	VR
VR\%        V4      RR/4      #   \         d    \        P                  RRR7        LÚi ; iu upi u upi   \         d!   p	\'        \)        T	4      RR7      u Rp	?	# Rp	?	ii ; i)zTTier 1 listing: name + description (+ category) only; ``task_id`` is handler parity.T)ÚparentsÚexist_ok©Údiscover_pluginsÚget_plugin_managerr  rA   zPlugin skill listing failedrò   Úsuccessra   Ú
categoriesÚmessagez%No skills found in skills/ directory.rï   ÚcountÚhintz@Use skill_view(name) to see full content, tags, and linked filesF©r$  N)rh   Úmkdirr  Úhermes_cli.pluginsr"  r#  Úlist_plugin_skill_metadatar   r—   rÍ   r@   r¤   rþ   rÿ   r   rÇ   r  r  r§   r   rC   )
rï   r  Ú
all_skillsr"  r#  Úplugin_skillr  r  r%  r  s
   &&        r-   Úskills_listr/  "  s•  € ð1Ü‹×Ñ D°4ÐÔ8Ü$Ó&ˆ
ð		GßOÙÔÙ 2Ó 4× OÑ OÖ Q�Ø*×.Ñ.¨}¸bÓA�Ü-¨k×:Ò:Ô>PÐQ]Ð^dÕQe×>fÒ>fÙØ×!Ñ! ,Ö/ñ	 !R÷ Ü˜) T¨8°R¸ÀrØ#Ð%LðNó Oð OçÙ%/ÓQ¡Z ·5±5¸Ó3DÈÑ3PŸ!˜!¡ZˆJÐQÜ  Ó,ˆ
Ü¹
ÓX¹
°1ÇeÁeÈJ×FWÔ.˜QŸU™U :Ö.¹
ÑXÓYˆ
ÜØ�t˜X z°<ÀØ”S˜“_ØÐVðXó Yð 	Yøô ô 	GÜ�L‰LÐ6ÀˆLÖFð	Güò RùâXøô
 ô 1Üœ#˜a›&¨%Ô0Õ0ûð1úsw   ‚%F	 ¨A9E Â!F	 Â)F	 Â<F	 ÃF	 ÃE?Ã$E?Ã*F	 Ä FÄFÄ2$F	 Å"E<Å9F	 Å;E<Å<F	 Æ	F4ÆF/Æ)F4Æ/F4c           
     ó~  € ^ RI HpHp ^ RIHpHp V! V 4      w  r‰V! V4      '       g   \        RV RV  R24      R3# T! 4        V! 4       p
Rp ^ RIHpH	p V! 4       pV! V4       V
P                  V 4      pVf'   W‹8X  d!    ^ R	IHp V! V4       V
P                  V 4      pVe<   VP                  4       '       g&   V
P!                  V 4       \        RV  RV R24      R3# Ve   \#        WøW‘W2R7      R3# V
P%                  V4      ;p'       d=   \        RV	 RV R2V Uu. uF
  pV RV 2NK  	  upRV R\'        V4       R2R7      R3# RV	'       d	   V RV	 23# R3#   \         d"   p\        P                  RT4        Rp?ELRp?ii ; i  \         d"   p\        P                  R
YŽ4        Rp?ELRp?ii ; iu upi )u  ``plugin:skill`` dispatch: ``(result_json, None)`` when answered, else ``(None,
local_category_name)`` to fall through to the flat-tree scan â€” categorized local skills also use
``category:skill`` in config/gateway prompts, so the on-disk ``category/skill`` form returns.)Úis_valid_namespaceÚparse_qualified_namer!  zInvalid namespace 'z' in 'z('. Namespaces must match [a-zA-Z0-9_-]+.N)Ú_get_active_memory_providerÚ&_prune_inactive_memory_provider_skillsz2Failed pruning inactive memory-provider skills: %s)Úload_memory_providerz1Failed lazy memory-provider skill load for %s: %súSkill 'z' file no longer exists at uT   . The registry entry has been cleaned up â€” try again after the plugin is reloaded.)Ú	file_pathÚ
preprocessÚ
session_idz' not found in plugin 'z'.Ú:zThe 'z' plugin provides z
 skill(s).©Úavailable_skillsr(  Ú/)r8   r1  r2  r+  r"  r#  r   Úplugins.memoryr3  r4  r¤   rþ   rÿ   Úfind_plugin_skillr5  rÓ   Úremove_plugin_skillr!   Úlist_plugin_skillsr§   )rA   r7  r  r8  r1  r2  r"  r#  Ú	namespaceÚbareÚpmÚactive_memory_providerr3  r4  ÚexcÚplugin_skill_mdr5  Ú	availabler  s   &&&&               r-   Ú_resolve_plugin_skillrI  @  s  € ÷ KßGÙ*¨4Ó0�O€IÙ˜i×(Ò(ÜÐ*¨9¨+°V¸D¸6ÐAiÐjÓkÐmqÐqÐqÙÔÙ	Ó	€BØ!ÐðPßfÙ!<Ó!>ÐÙ.Ð/EÔFð ×*Ñ*¨4Ó0€Oð Ò 9Ô#Fð	^Ý;Ù  Ô+Ø ×2Ñ2°4Ó8ˆOð Ò"¨?×+AÑ+A×+CÒ+CØ
×Ñ˜tÔ$ÜØ�d�VÐ6°Ð6Gð HNð OóPàQUðVð 	Vð Ò"Ü"Ø¨ÈjônØosðtð 	tà×)Ñ)¨)Ó4Ð4€yÖ4ÜØ�d�VÐ2°9°+¸RÐ@Ù:CÓD¹)°Q  ¨1¨Q¨CÓ0¹)ÑDØ˜˜Ð#5´c¸)³nÐ5EÀZÐPôRð TXðXð 	Xð ¯4�Y�K˜q  Ð'Ð:Ð:°TÐ:Ð:øô3 ô PÜ�‰ÐIÈ3×OÒOûðPûô ô 	^Ü�L‰LÐLÈi×]Ò]ûð	^üò Es6   ÁE ÂF ÄF:
ÅFÅ'FÆFÆF7ÆF2Æ2F7c                ó0   € V ^8„  d   QhR\         R\        /# )r)   rF   r*   ©r   r�   )r,   s   "r-   r.   r.   l  s   € ÷ 9ñ 9”Tð 9¤Dñ 9r/   c                ó  a€ V o\        \        4      ;_uu_ 4        V P                  4       oRRR4       \        ;QJ d    V3R lV 4       F  '       g   K   R# 	  R# ! V3R lV 4       4      #   + '       g   i     LJ; i)zITrue when ``path`` (resolved where possible) lives under one of ``dirs``.Nc              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir   )Úis_relative_to)rÂ   r_   Úresolveds   & €r-   rÄ   Ú_under_any.<locals>.<genexpr>q  s   øé € Ð8±4¨aˆx×&Ñ& q×)Ð)³4ùs   ƒ!TF)r   r¤   ÚresolverÊ   )rF   ÚdirsrO  s   &&@r-   Ú
_under_anyrS  l  sU   ø€ à€HÜ	”)×	Õ	Ø—<‘<“>ˆ÷ 
ç‹3Ô8±4Ó8�3Œ3Ð8Š3Ð8ˆ3Ô8±4Ó8Ó8Ð8÷ 
×	ús   ›A.Á.A>	c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r)   rF   Úsearch_rootr*   rK  )r,   s   "r-   r.   r.   t  s!   € ÷ 	ñ 	¤Tð 	¼ð 	Äñ 	r/   c           	     ó:  aa€  V P                  S4      o\        ;QJ d=    TT3R l\        ^\	        SP
                  4      4       4       F  '       g   K   R# 	  R# ! TT3R l\        ^\	        SP
                  4      4       4       4      #   \         d     R# i ; i)zMTrue when a legacy Markdown candidate belongs to an ancestor directory skill.Fc              3   óˆ   <"  € T F7  pSP                   ! SP                  R V !  R,          P                  4       x € K9  	  R # 5i)Nr7   )Újoinpathr©   Úis_file)rÂ   rJ   ÚrelativerU  s   & €€r-   rÄ   Ú-_is_package_owned_markdown.<locals>.<genexpr>z  s?   øé € ð á2ˆEð 
×	Ò	˜xŸ~™~¨f¨uÐ5Ñ	6¸Õ	C×LÑL×NÐNÛ2ùs   ƒ?AT)r¨   r¦   rÊ   Úranger§   r©   )rF   rU  rZ  s   &f@r-   Ú_is_package_owned_markdownr]  t  s‰   ù€ ðØ×#Ñ# KÓ0ˆ÷ ‹3õ ä˜1œc (§.¡.Ó1Ô2ó�3Œ3ð Š3ð ˆ3õ ä˜1œc (§.¡.Ó1Ô2óó ð øô ô Úðús   „B ÂBÂBc                ó&  a	a
a€ ^ RI Hp . o
\        4       oR V
V3R llo	R V	3R llpV Fâ  p\        RW34       F  pV! WV,          V4       K  	  V! VR4       FR  pVP                  P
                  V 8X  g"   \        V4      P                  R4      V 8X  g   K?  S	! VP                  V4       KT  	  VP                  V  R	24       FE  pVP
                  R8w  g   K  \        V4      '       d   K)  \        W…4      '       d   K<  S	! RV4       KG  	  Kä  	  S
# )
ah  ALL (skill_dir, skill_md) candidates across every dir and lookup strategy (direct path,
recursive by dir / frontmatter name, legacy flat <name>.md), deduped by resolved path.
Every copy is returned so the caller resolves them via ``agent.skill_utils.pick_skill_candidate``
(cross-tier precedence; a same-tier tie of different skills is refused, never guessed).)rß   c                óJ   € V ^8„  d   QhR\         \        ,          R\        RR/# )r)   ÚsdÚsmdr*   N)r
   r   )r,   s   "r-   r.   Ú/_collect_skill_candidates.<locals>.__annotate__‰  s%   € ÷ )ñ )”HœT•Nð )¬ð )°$ñ )r/   c                 óê   <€ Tp\        \        4      ;_uu_ 4        VP                  4       pR R R 4       VS9  d&   SP                  V4       SP	                  W34       R # R #   + '       g   i     L>; ir   )r   r¤   rQ  Úaddr@   )r`  ra  r  Ú
candidatesÚseen_mds   && €€r-   Ú_recordÚ*_collect_skill_candidates.<locals>._record‰  sU   ø€ ØˆÜ”i× Õ Ø—+‘+“-ˆC÷ !à�gÔØ�K‰K˜ÔØ×Ñ˜r˜iÖ(ñ ÷ !× ús   ›A"Á"A2	c                ó4   € V ^8„  d   QhR\         R\         RR/# )r)   Údirect_pathrU  r*   Nrc   )r,   s   "r-   r.   rb  ‘  s!   € ÷  ñ  ¤Dð  ´tð  Àñ  r/   c                 ób  <€ V P                  R 4      p\        V 4      '       gE   V P                  4       '       d/   V R,          P                  4       '       d   S! W R,          4       R# VP                  4       '       d2   \        V4      '       g   \	        W!4      '       g   S! RV4       R# R# R# R# )ú.mdr7   N)Úwith_suffixÚ_is_skill_support_pathr?   rÓ   r]  )rj  rU  Úflatrg  s   && €r-   Ú_record_directÚ1_collect_skill_candidates.<locals>._record_direct‘  s‡   ø€ Ø×&Ñ& uÓ-ˆÜ% k×2Ò2°{×7IÑ7I×7KÒ7KÐQ\Ð_iÕQi×PqÑPq×PsÒPsÙ�K¨zÕ!9Ö:Ø�k‰k�mŠmÔ$:¸4×$@Ò$@Ü0°×CÒCÙ�D˜$Öñ Dñ %A‰mr/   Nr7   rA   rl  )r8   rß   r‡   Úfilterrû   rA   r    rÇ   Úrglobrn  r]  )rA   Úlocal_category_nameÚall_dirsrß   rp  Ú
search_dirÚdirectÚfound_skill_mdÚfound_mdrg  re  rf  s   &&&      @@@r-   Ú_collect_skill_candidatesrz  €  s÷   ú€ õ
 9Ø46€JÜ“5€G÷)ñ )÷ ð  ó ˆ
Ü˜T DÐ#>Ö?ˆFÙ˜:Õ.°
Ö;ñ @ñ 5°ZÀÖLˆNØ×%Ñ%×*Ñ*¨dÔ2Ü(¨Ó8×<Ñ<¸VÓDÈÖLÙ˜×-Ñ-¨~Ö>ñ Mð #×(Ñ(¨D¨6°¨Ö6ˆHØ—‘ Ö+Ô4JÈ8×4TÔ4TÜ6°x×LÔLÙ˜˜hÖ'ó 7ñ ð Ðr/   Ú
referencesú*.mdÚ	templatesTÚassetsÚ*Úscriptsc                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r)   Ú	skill_dirr*   )r
   r   rv   )r,   s   "r-   r.   r.   ³  s   € ÷ ñ ¤8¬D¥>ð ´dñ r/   c           	     ó¦  € / pV '       d   \         MR F´  w  r#rEW,          pV UUu. uFŠ  qvP                  4       '       g   K  V'       d   VP                  V4      MVP                  V4       FB  pV'       d   VP	                  4       '       g   K#  VP                  V 4      P                  4       NKD  	  KŒ  	  p	ppV	'       g   K°  W‘V&   K¶  	  V# u uppi )zPreferences/templates/assets/scripts of a directory skill (empty groups dropped).r+   )Ú_LINKED_FILE_SPECSrÓ   rs  ÚglobrY  r¨   Úas_posix)
r‚  ÚfilesÚsubÚglobsÚ	recursiveÚ
files_onlyÚbaseÚgÚfÚfounds
   &         r-   Ú_skill_linked_filesr�  ³  s¬   € à€EßCLÕ-?ÐRTÒ-TÑ)ˆ�IØ�ˆá9>ô.Ù9>°AÇ+Á+Ç-Ô/ß'0�d—j‘j ”m°d·i±iÀ³lÒB�ß §¡§ô 0ˆA�M‰M˜)Ó$×-Ñ-Ö/ÙBñ 0¹ð 	ñ .÷ ‰5Ø�#‹Jñ .Uð €Lùó.s   ¦CÁCÁ
,CÁ7CÂ'Cc                ó€   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \         3,          /# )r)   r  Ú
skill_namer*   )rv   rC   r   rD   )r,   s   "r-   r.   r.   Á  s3   € ÷ 6ñ 6¤$¤s¬C x¥.ð 6¼cð 6ÄeÌDÔRVÈJÕFWñ 6r/   c                ód  € \        V 4      p^ RIHp \        V! RR4      4      P	                  4       P                  4       ;'       g    Rp\        4       pV Uu. uF9  pVP                  R4      '       d   K  \        VR,          V4      '       d   K7  VNK;  	  pp\        W4      pV'       d   \        4       p\        VR,          4      p	V Uu. uFM  qfP                  R4      '       d   K  VR,          V	9   g   \        VR,          V4      '       d   KD  VR,          NKO  	  p
p\        V
4      pV Uu. uF  qfR,          V
9  g   K  VR,          NK  	  up;p'       d    ^ RIHp V! V4       V P                  R. 4      p. p\#        V\$        4      '       d-   V'       d%    ^ RIHp V! V4      pT;'       g    \        V4      pV'       d   \*        P,                  M\*        P.                  pRVR. RV
RVR. RVRVR,          RVP0                  /p/ p\3        R V 4       R4      ;p'       d   VVR&   VR,          '       d   VR,          VR&   V
 Uu. uF  pRV 2NK
  	  upV Uu. uF  pRV 2NK
  	  up,           pV'       dB   \5        VVV4      ;p'       d-   \7        V4      '       d   V RVP9                  4        R2pVVR&   VV3# u upi u upi u upi   \         d    \        P!                  RTR	R
7        EL�i ; i  \         d    \        P!                  RTR	R
7        ELci ; iu upi u upi )u  Resolve required env vars / credential files (prompting for secrets where the surface
allows) and register what's available for sandboxes. Returns ``(fields, extras)``: fields go
before the readiness extras in the skill_view result â€” key order is tool output.)Úterminal_envÚTERMINAL_ENVÚlocalÚoptionalrA   Úmissing_names)Úregister_env_passthroughz/Could not register env passthrough for skill %sTrò   Úrequired_credential_files)Úregister_credential_filesz0Could not register credential files for skill %sÚrequired_environment_variablesÚrequired_commandsÚ&missing_required_environment_variablesÚmissing_credential_filesÚmissing_required_commandsÚsetup_neededÚsetup_skippedÚreadiness_statusc              3   ód   "  € T F&  qP                  R 4      '       g   K  VR ,          x € K(  	  R# 5i)ÚhelpNr  )rÂ   r  s   & r-   rÄ   Ú#_skill_readiness.<locals>.<genexpr>î  s"   é € ÐQÑ.?¨Ç5Á5ÈÇ=œ9˜1˜VŸ9š9Ó.?ùs   ‚0Ÿ0NÚ
setup_helpÚgateway_setup_hintzenv $zfile Ú zW-backed skills need these requirements available inside the remote environment as well.Ú
setup_note)r   Útools.terminal_scoper”  rC   ro   Úlowerr|   rÇ   r   r   r‡   r�   Útools.env_passthroughr™  r¤   rþ   rÿ   rn   r=   Útools.credential_filesr›  r   ÚSETUP_NEEDEDÚ	AVAILABLEÚvaluerù   r   r   Úupper)r  r’  Úrequired_env_varsr”  ÚbackendÚenv_snapshotr  Úmissing_required_env_varsÚcapture_resultÚstill_missingÚ	remainingr¡  Úavailable_env_namesr™  Úrequired_cred_files_rawÚmissing_cred_filesr›  ÚstatusÚfieldsÚextrasr§  rÃ   ÚpÚmissing_itemsrª  s   &&                       r-   Ú_skill_readinessrÂ  Á  s,  € ô <¸KÓHÐÝ1Ü‘,˜~¨wÓ7Ó8×>Ñ>Ó@×FÑFÓH×SÐSÈG€GÜ“:€Lá$ó!YÙ$ˆaØ�u‰u�Z× ô 	
Ü)>¸qÀ½yÈ,×)W÷ 	
ˆÑ$ð ð !Yô =¸ZÓc€Nß Ü“zˆÜ˜ Õ7Ó8€Má,ó`Ù,�a·E±E¸*×4EŒ	Øˆv�Y˜-Ô'Ô/DÀQÀvÅYÐP\×/]ô 	ˆˆ&�	ˆ	Ñ,ð ð `ô ˜	“?€Lá2CÓbÑ2C¨QÈÅyÐXaÑGaœy˜q Ÿy˜yÑ2CÑbÐbÐÖbð	gÝFÙ$Ð%8Ô9ð
 *Ÿo™oÐ.IÈ2ÓNÐØ!ÐÜÐ)¬4×0Ò0×5Lð	hÝHÙ!:Ð;RÓ!SÐØ'×CÐC¬4Ð0BÓ+CˆL÷ 3?Ô!×.Ò.ÔDX×DbÑDb€Fà(Ð*;Ð=PÐRTØ0°)Ø"Ð$6Ð8SÐUWØ˜ o°~ÀoÕ7VØ˜FŸL™Lð*€Fð €FÜÑQÑ.?ÓQÐSWÓXÐX€zÖXØ)ˆˆ|ÑØÐ*×+Ô+Ø'5Ð6JÕ'KˆÐ#Ñ$Ù*3Ó4©) Q�u˜Q˜C“[©)Ñ4ÑM_Ó7`ÑM_È¸%À¸s»ÑM_Ñ7`Õ`€MßÔ'8¸ÀÐPZÓ'[Ð[˜Ö[Ü! '×*Ò*Ø&˜< q¨¯©«Ð(9ð  :Qð  RˆJØ)ˆˆ|ÑØ�6ˆ>Ðùò]!Yùò`ùò
 cøô ô 	gÜ�L‰LÐJÈJÐaeˆL×fð	gûô ô 	hÜ�L‰LÐKÈZÐbfˆL×gð	hüò 5ùÒ7`sf   ÁKÁ6KÂKÃK
Ã)$K
ÄK
Ä0KÅKÅK ÆK> Æ5K> ÉL(É!L-Ë#K;Ë:K;Ë>#L%Ì$L%c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r)   r  r*   )r   r
   )r,   s   "r-   r.   r.   ú  s"   € ÷ Añ A¤ð A´H¼TµNñ Ar/   c                óŽ   € V Uu. uF&  q P                  V4      '       g   K  \        V4      NK(  	  pp\        VR RR7      # u upi )zŸMost specific search dir containing *skill_md*, compared lexically: a symlinked entry
belongs to the root that exposes it, not to the root its target lives in.c                 ó,   € \        V P                  4      # r   )r§   r©   )r_   s   &r-   rä   Ú$_owning_search_dir.<locals>.<lambda>þ  s   € ¤S¨¯©¤\r/   N)r  r„   )rN  r   Úmax)r  ru  r_   Úownerss   &&  r-   Ú_owning_search_dirrÉ  ú  s?   € ñ  (ÓF™x˜!×+BÑ+BÀ1×+EŒgŒd�1Žg™x€FÐFÜˆvÑ1¸4Ô@Ð@ùò Gs
   …A¢Ac                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r)   rA   rt  rj   )r,   s   "r-   r.   r.     s   € ÷ 4%ñ 4%”sð 4%´¼#µñ 4%r/   c                óš  € ^ RI HpHpHpHp V UUu. uF  w  rxVNK	  	  p	ppV	'       g   \        R4      RR3# \        WV	4      p
V UUu/ uF  w  r¸W‹bK	  	  ppp\        V
4      ^8”  Ed   V
 Uu. uF  qÝ\        V^,          V	4      3NK  	  ppT! V UUu. uF/  w  rßWÏ,          \        V4      V! V^,          V4      V^,          3NK1  	  upp4      w  ppVe   \        V
4       UUUu. uF  w  pw  ppVV8w  g   K  \        V4      NK  	  uppp;p'       d5   \        P                  RW
V,          ^,          RP                  V4      4       V
V,          .p
MV Uu. uF  pV
V,          NK  	  p
p\        V
4      ^8”  dÒ   V
 UUu. uF  w  pp\        V4      NK  	  ppp\        V
 UUu0 uF  w  pp\        VVV	4      kK  	  uppV 0,
          4      p\        P!                  RV \        V
4      RP                  V4      4       \        V RV  R2V'       d   R	R
P                  V4       R2MR,           \        V
4       R2,           VVRR7      RR3# V
'       d
   V
^ ,          MRw  ppVeI   VP#                  \        VV	4      4      V8X  d)   ^ RI Hp V! V4      '       d   \        RV  R2RR7      RR3# V'       d   VP'                  4       '       gF   \)        \+        4       4      R,           Uu. uF  pVR,          NK  	  pp\        RV  R2VRR7      RR3# RVV3# u uppi u uppi u upi u uppi u upppi u upi u uppi u uppi u upi )a;  Unique on-disk skill for *name* over ``(tier, dir)`` *roots*: cross-tier precedence
(project > local > create_dir > external, shadowed copies logged), same-tier collision refusal,
same-root identical-copy ranking, quarantine gate, not-found listing. ``(error_json, skill_dir,
skill_md)``; skill_md set iff no error.)ÚAMBIGUOUS_SKILL_PREFIXrÜ   Úpick_skill_candidateÚskill_candidate_rankzISkills directory does not exist yet. It will be created on first install.Nz‡Skill '%s' resolved to %s by precedence (project > local > create_dir > external_dirs, then identical same-root copies); not loaded: %sú; u3   Skill name collision for '%s': %d candidates â€” %sÚ'ú': zuse one of z, z. rX   zW different skills share this name in the same skills directory tier; refusing to guess.ztPass the exact relative path instead of the bare name, or rename one of the colliding skills so each name is unique.)ÚmatchesÚ
load_namesr(  )Úis_quarantined_project_skillzProject skill 'z“' is quarantined: the security scan flagged its content as dangerous. It will not load until the repo's skill content changes and passes a re-scan.zYInspect the skill in the repo checkout, or untrust the repo with `hermes skills untrust`.©r(  :Né   NrA   r6  z' not found.z+Use skills_list to see all available skillsr;  ©NN)r8   rÌ  rÜ   rÍ  rÎ  r   rz  r§   rÉ  rC   Ú	enumeraterþ   ÚinforG   r  Ú_owned_relativeÚwarningrÇ   rÔ  rÓ   r  r  )rA   rt  rÕ   rÌ  rÜ   rÍ  rÎ  r  r_   ru  re  r·   Útier_ofÚcÚownedrH   ÚwonÚ
contendersÚiÚ_sdra  Údroppedr  Úpathsr`  rÓ  r‚  r  rÔ  r  rH  s   &&&                            r-   Úlocate_skillrå    sp  € ÷
 sÓrÙ$Ô%™u‘e�b“™u€HÑ%ßÜØWóYØZ^Ð`dðeð 	eä*¨4ÀhÓO€JÙ %Ô&¡™˜ˆqŠt¡€GÑ&Ü
ˆ:ƒ˜ÕÙBLÓMÁ*¸QÔ'¨¨!­¨hÓ7Ó8Á*ˆÐMÙ.Ù^cô0eÙ^cÑSZÐSTˆW�]œC ›IÑ';¸A¸a½DÀ$Ó'GÈÈ1ÍÓNÑ^cò0eó f‰ˆˆZàŠ?Ü9BÀ:Ô9NÕ[Ñ9N©¨©:¨C°ÐRSÐWZÑRZœ8œ3˜sž8Ñ9NÓ[Ð[ˆwÖ[Ü—‘ð ^à ¨S¥/°!Õ"4°d·i±iÀÓ6HôJð % S�/Ð*‰Já1;Ó<±¨A˜* QŸ-˜-±ˆJÐ<Ü
ˆ:ƒ˜ÔÙ(2Ô3©
™f˜a ”�S–©
ˆÑ3äÉzÔZÉzÁGÀBÈœ_¨R°°hÖ?ÉzÒZÐ^bÐ]cÕcÓdˆ
Ü�‰ÐLÈdÔTWÐXbÓTcÐei×enÑenÐotÓeuÔvÜØ%Ð& a¨ v¨SÐ1ß:D�˜TŸY™Y zÓ2Ð3°2Ñ6È"õNä�Z“Ð!ð "!ð !õ!ð  jð7ô8ð :>¸tðDð 	D÷ ,6˜* Qž-¸<Ñ€Iˆxð Ò §¡Ô,>¸xÈÓ,RÓ SÐWcÔ cÝBÙ'¨×1Ò1ÜØ! $ ð (kð kð+ô,ð .2°4ð	8ð 8÷
 ˜8Ÿ?™?×,Ò,Ü(3´OÓ4EÓ(FÀsÖ(KÓLÑ(K 1�Q�v—Y�YÑ(Kˆ	ÐLÜ�w˜t˜f LÐ1ÀIØGôIØJNÐPTðUð 	Uà�˜HÐ$Ð$ùó] &ùó
 'ùâMùó0eùô \ùò =ùã3ùãZùò, Ms;   ’LÁ	LÁ.L%Â5L*
Ã'L0Ã;L0ÅL7ÆL<Æ'M
Ë+Mc                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# )r)   r‚  r  r*   )r
   r   rC   )r,   s   "r-   r.   r.   8  s*   € ÷ Tñ Tœx¬�~ð T¼ð TÌCñ Tr/   c                ó¢   € \        W4      pV e   T MVP                  R4      pVe    VP                  V4      P                  4       # \	        V4      # )zZExact load path of a candidate: its skill dir (or flat ``.md`` stem) relative to its root.rX   )rÉ  rm  r¨   r†  rC   )r‚  r  ru  rH   Útargets   &&&  r-   rÚ  rÚ  8  sK   € ä˜hÓ1€DØ#Ò/‰Y°X×5IÑ5IÈ"Ó5M€FØ26Ò2Bˆ6×Ñ˜dÓ#×,Ñ,Ó.ÐSÌÈFËÐSr/   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r)   rA   r  Úcontent)rC   r   )r,   s   "r-   r.   r.   ?  s&   € ÷ Yñ Y¤ð Y´ð Y¼sñ Yr/   c                ó   a€ VP                  4       .p\        \        4      ;_uu_ 4        VP                  R V 4       4       RRR4       . p\	        W4      '       g   VP                  RV 24       \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       d   VP                  R4       V'       d)   \        P                  RV R	P                  V4      4       R# R#   + '       g   i     LÂ; i)
a_  Warn (never block) when loaded from outside the trusted dirs (project + local + external)
and/or when common prompt-injection patterns appear. The check is on the RESOLVED path:
every candidate is built as ``<search_dir>/...`` so a lexical test can never fire, and a
SKILL.md symlinked to a file outside every root is exactly what this guards against.c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir   )rQ  ©rÂ   r_   s   & r-   rÄ   Ú)_log_security_warnings.<locals>.<genexpr>F  s   é € Ð:±¨AŸI™IŸK˜K³ùs   ‚NzHskill file is outside the trusted skills directory (~/.hermes/skills/): c              3   óH   <"  € T F  qSP                  4       9   x € K  	  R # 5ir   )r¬  )rÂ   rÀ  rê  s   & €r-   rÄ   rî  J  s   øé € Ð
=Ñ)< A�—‘“ÖÓ)<ùs   ƒ"TFzBskill content contains patterns that may indicate prompt injectionz#Skill security warning for '%s': %srÏ  )rQ  r   r¤   r¥   rS  r@   rÊ   r   rþ   rÛ  rG   )rA   r  rê  ru  rÔ   Útrusted_dirsÚwarningss   &&f&&  r-   Ú_log_security_warningsrò  ?  s»   ø€ ð
 &×-Ñ-Ó/Ð0€LÜ	”)×	Õ	Ø×ÑÑ:±Ó:Ô:÷ 
à€HÜ�h×-Ò-Ø�‰ÐbÐckÐblÐmÔnß
ƒsÔ
=Õ)<Ó
=‡s‡s‚sÔ
=Õ)<Ó
=×=Ò=Ø�‰Ð\Ô]ßÜ�‰Ð<¸dÀDÇIÁIÈhÓDWÖXñ ÷ 
×	ús   ªC=Ã=D	c          
      óp   € V ^8„  d   QhR\         R\         R,          R\         R,          R\        R\         /# )r)   rA   r7  Nr  r8  r*   rº   )r,   s   "r-   r.   r.   P  sC   € ÷ f1ñ f1Ü
ðf1Ü �*ðf1Ü69¸Dµjðf1ÜUYðf1Üehñf1r/   c                óØ
  a!a"a#a$€  \        V 4      ;p'       d   \        V\        R7      # RpRV 9   d   \        WW#4      w  reVe   V# V'       d%   \        V4      ;p'       d   \        V\        R7      # \	        4       w  rxV U	U
u. uF  w  ršV
NK	  	  pp	p
\        WV4      w  rÍo$Ve   V#  \        S$4      p\        T S$YëT4       \        TR7      o!\        S!4      '       g*   \        RT  R2\        P                  P                  R	7      # S!P                  R
S$P                  P                   4      p\#        TS$T4      o#\%        TS#4      '       dy   \%        T4      '       gY   \&        ;QJ d+    T#T$3R l\)        RRR7       4       F  '       g   K   RM 	  RM! T#T$3R l\)        RRR7       4       4      '       d   \        RT R24      # T'       d   T'       d   \+        YÑT RRRR7      # S!P                  R4      p\-        T\.        4      '       d   TP                  R/ 4      ;'       g    / M/ o"T!T"3R lR, 4       w  pp\1        T4      p \3        S$P5                  T4      4      pS!P                  R
T'       g   S$P8                  MTP                   4      p\;        S!T4      w  ppT'       g   TM\=        YíTRT4      pRpS!P                  R4      ;'       g    . p\-        T\2        4      '       d   T.p\-        T\>        4      '       d½   T'       dµ   . pT U
u. uF=  p
\3        T
4      PA                  4       '       g   K$  \3        T
4      PA                  4       NK?  	  up
 F  p ^ RI!pTPE                  T4       K  	  T'       dD   RRPI                  T4      ,           R,           RPI                  R T 4       4      ,           R,           pR RR
TR!S!P                  R!R"4      RTRTR#TR$TR%T'       d   \3        T4      MRR&T'       d   TMRR'T'       d   R(MR/
TCTCp T'       d   TT R)&   \K        S$4       S!P                  R*4      '       d   S!R*,          T R*&   \-        T\.        4      '       d   TT R&   \M        T 4      # u up
p	i   \         d   p\        RT  RT 24      u Rp?# Rp?ii ; i  \6         d[    S$P                  P                  '       d/   \3        S$P5                  S$P                  P                  4      4      MS$P                   p EL¤i ; iu up
i   \         d#   pTPG                  T RT 24        Rp?EKÞ  Rp?ii ; i  \         d!   p\O        \3        T4      RR+7      u Rp?# Rp?ii ; i)-a?  View a skill (SKILL.md) or a file within its directory, as JSON. ``name`` is a skill name
or path ("axolotl", "03-fine-tuning/axolotl"); "plugin:skill" resolves plugin-provided
skills. ``preprocess`` applies the configured SKILL.md template / inline shell rendering;
slash/preload callers render the message themselves.rÕ  Nr:  zFailed to read skill 'rÑ  )rê  r6  z$' is not supported on this platform.)r£  rA   c              3   ób   <"  € T F$  qR ,          S8H  ;'       d    VR,          S8H  x € K&  	  R# 5i)rF   r  Nr+   )rÂ   r  Úrelr  s   & €€r-   rÄ   Úskill_view.<locals>.<genexpr>u  s:   øé € ð `Bñ JAÀA�&•	˜XÑ%×?Ð?¨!¨K­.¸CÑ*?Ô?ó  JAùs   ƒ/š/T)r×   rØ   FzT' is disabled. Enable it with `hermes skills` or inspect the files directly on disk.z.Use a relative path within the skill directory)Úlist_availableÚ	mark_readr(  ÚmetadataÚhermesc              3   óŒ   <"  € T F9  p\        SP                  V4      ;'       g    SP                  VR 4      4      x € K;  	  R# 5i)rX   N)r¸   rÇ   )rÂ   Úkr  Úhermes_metas   & €€r-   rÄ   r÷    s:   øé € ð  kÙOiÈ!ŒK˜Ÿ™¨Ó*×DÐD¨k¯o©o¸aÀÓ.D×EÐEÓOiùs
   ƒ!A¥AÚtagsÚrelated_skillsz)Could not preprocess skill content for %sÚdepsz: u-   Tool dependencies could not be installed â€” rÏ  z. Run `hermes pm install r©  c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir   r�   rí  s   & r-   rÄ   r÷  ¡  s   é € Ð=©}¨!œs 1Ÿv˜v«}ùs   ‚z` and reload.r$  rê   rX   rê  rF   r‚  Úlinked_filesÚ
usage_hintzzTo view linked files, call skill_view(name, file_path) where file_path is e.g. 'references/api.md' or 'assets/config.yaml'Ú	deps_noteÚcompatibilityr)  )rÿ  r   )(rt   r   Ú_LOOKUP_HINTrI  rÖ   rå  r   r¤   rò  r    r—   r   ÚUNSUPPORTEDr±  rÇ   rû   rA   rÚ  rÍ   rÊ   r  r"   rn   rv   r�  rC   r¨   r¦   ÚstemrÂ  r   r=   ro   rD  Úensurer@   rG   r   r   r   )%rA   r7  r  r8  Úlookup_errorrt  ÚservedrÕ   rÔ   r  r_   ru  Úerrorr‚  rê  r  Úresolved_namerú  rÿ  r   r  Úrel_pathr’  Ú	readinessÚreadiness_extrasÚrendered_contentr  Údeclared_depsÚfailed_depsÚdeprD  rF  Úresultr  rþ  rö  r  s%   &&&&                             @@@@r-   Ú
skill_viewr  P  s0  û€ ð`1ô 3°4Ó8Ð8ˆ<Ö8Ü˜¬LÔ9Ð9Ø*.ÐØ�$Œ;Ü*?ÀÐQXÓ*eÑ'ˆFØÒ!Ø�÷ Ô4KÐL_Ó4`Ð$` LÖ$`Ü˜¬LÔ9Ð9Ü#4Ó#6Ñ ˆÙ#(Ô)¡5™%˜"“A¡5ˆÑ)Ü%1°$ÈUÓ%SÑ"ˆ˜(ØÒØˆLð	@Ü& xÓ0ˆGô 	˜t X¨wÐBSÔTÜ'°Ô8ˆÜ% k×2Ò2Ü˜7 4 &Ð(LÐMÔ`t÷  aAñ  aA÷  aGñ  aGô  Hð  HØ#Ÿ™¨°·±×0DÑ0DÓEˆô ˜i¨°8Ó<ˆÜ˜m¨S×1Ò1Ô7IÈ-×7XÒ7X×\_Ó\_õ `BÜIWÐfjÐ{õ  JAó`B×\_×\_Ò\_õ `BÜIWÐfjÐ{õ  JAó`B÷ ]Bò ]Bä˜7 = /ð  2Fð  Gó  Hð  HßŸÜ$Ø d¸4È4ØEôGð Gð —?‘? :Ó.ˆÜ<FÀxÔQU×<VÒ<V�x—|‘| H¨bÓ1×7Ð7°RøÐ\^ˆõ kÙOió kÑˆˆnä*¨9Ó5ˆð	vÜ˜8×/Ñ/Ð0AÓBÓCˆHð !—_‘_ VÇ)¨X¯]ª]ÐQZ×Q_ÑQ_Ó`ˆ
Ü&6°{ÀJÓ&OÑ#ˆ	Ð#ß*4™7Ô:KØ Ð)TÐV`ó;bÐð ˆ	Ø#Ÿ™¨Ó/×5Ð5°2ˆÜ�m¤S×)Ò)Ø*˜OˆMÜ�m¤T×*Ò*¯}ØˆKÙ0=ÓP±¨1ÄÀQÃÇÁÇœœ˜A›Ÿ™ž±ÔP�ð8Ûà—I‘I˜c–Nñ	 Q÷ àCØ—i‘i Ó,õ-à1õ2ð —h‘hÑ=©}Ó=Ó=õ>ð &õ	&ð ð �t˜V Z°ÀÇÁÐP]Ð_aÓ@bØ�DÐ*¨N¸IÐGWØ�H˜k¿Y¬3¨y¬>ÈDØ¯L™L¸dØ÷  [gñ  Wð  mqð ð ð ð ð ˆ÷ Ø"+ˆF�;ÑÜ$ XÔ.Ø�?‰?˜?×+Ò+Ø&1°/Õ&BˆF�?Ñ#Ü�h¤×%Ò%Ø!)ˆF�:ÑÜ�V‹}Ðùó_ *øô ô 	@ÜÐ1°$°°s¸1¸#Ð>Ó?Õ?ûð	@ûô2 ô 	vØLTÏOÉO×Lb×LbÐLb”s˜8×/Ñ/°·±×0FÑ0FÓGÔHÐhp×huÑhu‹Hð	vüò" Qøô
 !ô 8Ø×&Ñ&¨#¨¨b°° ×7Ó7ûð8ûô6 ô 1Üœ#˜a›&¨%Ô0Õ0ûð1úsL  †T> ™T> ªT> ÁT> Á#T> Á3T> ÂQ2ÂT> Â*Q8 Â5AT> Ä	A T> Å* T> Æ)T> Æ7T> ÇT> ÇT> ÇT> Ç&?T> È& T> ÉR! É!T> É5AT> Ë9T> ÌT> Ì!T	Ì8T	ÍT> ÍTÍ1T> Í=A)T> Ï'T> Ï<T> ÐT> ÐAT> Ñ2T> Ñ8RÒRÒRÒT> ÒRÒT> Ò!&TÓ:TÔT> ÔTÔT> ÔT;ÔT6Ô/T> Ô6T;Ô;T> Ô>U)Õ	U$ÕU)Õ$U)rA   r/  rê   zVList available skills (name + description). Use skill_view(name) to load full content.Ú
parametersÚtypeÚobjectÚ
propertiesrï   Ústringz*Optional category filter to narrow resultsÚrequiredr  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').r7  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.c                 óX   € \        V P                  R 4      VP                  R4      R7      # )rï   r  )rï   r  )r/  rÇ   )r‘   Úkws   &,r-   rä   rä   Ý  s!   € œ{°D·H±H¸ZÓ4HÐRT×RXÑRXÐYbÓRcÕdr/   u   ðŸ“š)rA   ÚtoolsetÚschemaÚhandlerÚcheck_fnÚemojic           	     óÎ  € V P                  RR4      pVP                  R4      p\        4       '       d   RMTp\        W P                  R4      VR7      p\        \        4      ;_uu_ 4        \
        P                  ! V4      p\        V\        4      '       d²   VP                  R4      '       d›   \        WBV P                  R4      We4      ;pe   VuuRRR4       # VP                  R4      ;'       g    T;p'       dL   ^ RI
Hp	Hp
 V
! \        V4      4       V	! \        V4      VP                  R4      VP                  R	4      R
7       RRR4       V#   + '       g   i     T# ; i)a  Invoke skill_view, then bump view_count/use on success (best-effort). Repeat-view dedup
mirrors read_file's unchanged-stub: a result byte-identical to one already served for the
same skill file in this session returns a short stub (cache cleared on context compression).rA   rX   r  Nr7  )r7  r  r$  )Úbump_useÚ	bump_viewr9  )r  r9  )rÇ   r&   r  r   r¤   ÚjsonÚloadsrn   rv   r$   Útools.skill_usager&  r'  rC   )r‘   r  rA   r  Údedup_task_idr  ÚparsedÚstubrO  r&  r'  s   &,         r-   Ú_skill_view_with_bumpr.  á  s  € ð �8‰8�F˜BÓ€DØ�f‰f�YÓ€Gô
 1×2Ò2‘D¸€MÜ˜¯©°Ó(=ÀwÔO€FÜ	”)×	Õ	Ü—’˜FÓ#ˆÜ�fœd×#Ò#¨¯
©
°9×(=Ò(=Ü(¨¸d¿h¹hÀ{Ó>SÐU[ÓdÐd�ÒqØ÷	 
Ò	ð
 "Ÿ:™: fÓ-×5Ð5°Ð5ˆxÖ5ßAÙœ#˜h›-Ô(ñ œ˜X›°·±°yÓ0AÈbÏfÉfÐUaÓNbÕc÷ 
ð €M÷ 
Ö	ð €Mús&   Á+AEÂ/!EÃEÃ3
EÃ>AEÅE$	c                ó@   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   # )r)   r1   )Ú__conditional_annotations__rv   )r,   s   "r-   r.   r.      s#   € ÷ Xñ X÷H Ò ŒtÑ òIXr/   r×  )r|  ú*.pyz*.yamlz*.ymlz*.jsonz*.texú*.sh)r1  r2  z*.bashz*.jsz*.tsz*.rb)NNT)nr0  Ú__doc__Úcontextvarsr(  Úloggingr9   rõ   Ú
contextlibr   r   Úpathlibr   r   r   Útypingr   r   r	   r
   r   Úhermes_constantsr   Útools.registryr   r   rÆ   r   r8   r   rç   r   rn  Útools.skills_tool_setupr   r   r   r   r   r   Útools.skills_tool_pluginr   r   r   r   r   r   r   r   r    r!   r"   r#   Útools.skills_tool_dedupr$   r%   Útools.skill_provenancer&   Ú	getLoggerr”   rþ   r1   r÷   Ú_SIGNATURE_MAX_DEPTHr3   rE   r`   ÚHERMES_HOMEre   rf   rh   r€   r  rt   r|   r‚   Ú
ContextVarr†   rŠ   r–   r—   r˜   r™   rø   rô   rŸ   r¬   r¸   rÍ   rÖ   r  r  r  r/  rI  rS  r]  rz  r„  r�  rÂ  rÉ  rå  rÚ  rò  r  ÚSKILLS_LIST_SCHEMAÚSKILL_VIEW_SCHEMAÚregisterr.  r.   )r0  s   @r-   Ú<module>rF     s
  øðöXó
 Û Û Û 	Û ß /ß 8Ñ 8ß 3Õ 3å ,ß /Ý %÷b÷X÷ X÷C÷ C÷ Có C÷ MÝ 7à	×	Ò	˜8Ó	$€ð €Ó Ø Ð àÐ õð
 *>÷ Jõ87ñ Ó€Ø˜8Õ#€
Ø"Ð õ_ð  Ð ØO€õõ
5õ(ð #×-Ò-Ð.CÈTÔRÐ ð ñ*ó ð*õñ /Ð/GÓHÐ á1Ð2MÓNÐ Ù*Ð+?Ó@Ð Ù*Ð+>Ó?Ð Ù1Ð2LÓMÐ õõõ	Pð¸4÷ õ*$ð-%¨Eð -%È%÷ -%ð`T¨U÷ TõN÷
1ò<);õX9õ	ò(ðZ �F�8˜U EÐ*ØÒPÐRVÐX]Ð^Ø�ˆu�d˜DÐ!ØÒBÀEÈ5ÐQð	SÐ õõ6õrAõ4%õnTõY÷"f1ðT ˆMØÐkØØ�ØØØ˜ØÐKðð
ð 	�Bð	ðÐ ð  ˆLØð  ~ØØ�ØØØ˜Øð   Aðð Ø˜Øð   Fðð	
ð 	�V�HððÐ ð& 	× Ò Ø	 Ð1CÙdØ&¨fõ6òð4 	× Ò Ø	˜xÐ0AÐK`Ø&¨f÷6r/   