+
    „WÝj®k  ã                  ó®  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHt ^ RIHt ^ RIHt  ^ RIt ]PD                  ! R	4      t#0 Rvmt$R
]%R&   0 RkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkR kR!kR"kR#kR$kR%kR&kR'kR(kR)kR*kR+kR,kR-kt&R
]%R.&   ^t'R/](3R0](3R1])3R2])3R3])]*3R4])]*3R5]+3R6]+3R7],3R8],3R9]-3R:]-3R;](3/t.R<]%R=&   R> R? lt/R@ RA lt0RB RC lt1RD RE lt2RF RG lt3RH RI lt4RJ RK lt5RL RM lt6RN RO lt7RP RQ lt8RR RS lt9RT RU lt:RV RW lt;RX RY lt<RwRZ R[ llt=R\ R] lt>RwR^ R_ llt?R` Ra lt@] ! Rb Rc4      4       tARxRd Re lltB]P†                  ! Rf4      tDRg Rh ltE]P†                  ! Ri4      tFRj Rk ltGRl Rm ltHRn Ro ltIRp Rq ltJRr Rs ltKRt Ru ltLR#   ]! d    Rt  EL{i ; i)yz§Plugin manifest model and parsing (``plugin.yaml`` v1/v2, portable ``plugin.json``).

Split out of :mod:`hermes_cli.plugins`; validation warns and never fails a load.
)ÚannotationsN)Úsuppress)Ú	dataclassÚfield)ÚPath)	ÚAnyÚCallableÚDictÚListÚMappingÚOptionalÚSetÚTupleÚUnion)Úfast_safe_load)Úparse_declared_capabilitieszhermes_cli.pluginszset[str]Ú_VALID_PLUGIN_KINDSÚnameÚversionÚdescriptionÚauthorÚrequires_envÚprovides_toolsÚprovides_hooksÚkindÚhooksÚlabelÚoptional_envÚ	platformsÚexternal_dependenciesÚpip_dependenciesÚprovides_browser_providersÚprovides_web_providersÚmanifest_versionÚapi_versionÚrequires_pluginsÚpython_dependenciesÚconfig_schemaÚlicenseÚhomepageÚtagsÚcapabilitiesÚemitsÚlistensÚhermesÚdependsÚrequires_hermesÚpython_runtimeÚprovides_localesÚrequires_authÚoauthÚ_KNOWN_MANIFEST_FIELDSÚstrÚstringÚintÚintegerÚfloatÚnumberÚboolÚbooleanÚlistÚarrayÚdictÚobjectÚsecretzdict[str, tuple]Ú_CONFIG_SCHEMA_TYPESc               ó   € V ^8„  d   QhRR/# )é   Úreturnr<   © )Úformats   "ÚOC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\plugins_manifest.pyÚ__annotate__rJ   6   s   € ÷ "ñ "˜ñ "ó    c                 ó&   € ^ RI Hp  V P                  # )é    )Úplugins)Ú
hermes_clirN   Ú_PLUGINS_DEBUG)Ú_origins    rI   Ú_plugins_debugrR   6   s   € Ý-Ø×!Ñ!Ð!rK   c               ó    € V ^8„  d   QhRRRR/# ©rE   Úkeyr6   rF   rG   )rH   s   "rI   rJ   rJ   ;   s   € ÷ +ñ + 3ð +¨3ñ +rK   c                óœ   € \        V 4      p\        P                  ! V P                  R4      4      P	                  4       R,          pRV RV 2# )zGReturn a readable, collision-resistant namespace for a portable plugin.zutf-8:Né   Nzagent-plugin-Ú-)Ú_portable_slugÚhashlibÚsha256ÚencodeÚ	hexdigest)rU   ÚslugÚdigests   &  rI   Ú_portable_skill_namespacer`   ;   sD   € ä˜#Ó€DÜ�^Š^˜CŸJ™J wÓ/Ó0×:Ñ:Ó<¸RÕ@€FØ˜4˜&  & Ð*Ð*rK   c               ó    € V ^8„  d   QhRRRR/# rT   rG   )rH   s   "rI   rJ   rJ   B   s   € ÷ (ñ (˜ð ( ñ (rK   c                ó„   € R P                  R V P                  4        4       4      pVP                  R4      ;'       g    R# )Ú c              3  óŽ   "  € T F;  qP                  4       '       d    VP                  4       '       g   VR 9   d   TMRx € K=  	  R# 5i)z_-rX   N)ÚisasciiÚisalnum)Ú.0Úchs   & rI   Ú	<genexpr>Ú!_portable_slug.<locals>.<genexpr>C   s0   é € ÐfÑZeÐTVŸ™Ÿš¨2¯:©:¯<ª<¸2À¼:‘2ÈCÔOÓZeùs
   ‚/A²Az-_Úplugin)ÚjoinÚlowerÚstrip)rU   r^   s   & rI   rY   rY   B   s7   € Ø�7‰7ÑfÐZ]×ZcÑZcÔZeÓfÓf€DØ�:‰:�dÓ×'Ð'˜xÐ'rK   c               ó$   € V ^8„  d   QhRRRRRR/# )rE   rU   r6   ÚserverrF   rG   )rH   s   "rI   rJ   rJ   G   s!   € ÷ "ñ " #ð "¨sð "°sñ "rK   c                ó   € ? \        V4      # )a`  Internal name of a portable plugin's MCP server: exactly the name its ``mcp.json`` gives it, the same
rule a user's own ``mcp_servers`` block in config.yaml follows. The plugin's skill namespace
(``agent-plugin-<slug>-<digest>``) is NOT prepended: it keeps plugin-data and skill names collision-free
without coordination, but here it cost ~40 chars of every ``mcp__<server>__<tool>`` name, which providers
cap at 64, so the tool verb was hash-clamped away. A duplicate is refused at load (native config first,
then first-loaded plugin) with a warning naming both owners; that beats hiding it behind a digest.)rY   )rU   rp   s   &&rI   Úportable_mcp_server_namerr   G   s   € ð 	Ü˜&Ó!Ð!rK   c               ó    € V ^8„  d   QhRRRR/# )rE   ÚvaluerA   rF   r6   rG   )rH   s   "rI   rJ   rJ   R   s   € ÷ /ñ /˜6ð / cñ /rK   c                óˆ   a € \        S \        4      '       d   RP                  V 3R lR 4       4      # S f   R# \        S 4      # )zFNormalize a manifest author value for the string PluginManifest field.ú, c              3  óz   <"  € T F0  pSP                  V4      '       g   K  \        SV,          4      x € K2  	  R # 5i©N)Úgetr6   )rg   Úfrt   s   & €rI   ri   Ú"_display_author.<locals>.<genexpr>U   s*   øé € ÐYÑ0H¨1ÈEÏIÉIÐVWÏLœœ˜U 1�XŸ˜Ó0Hùs   ƒ;¡;rc   )r   ÚemailÚurl)Ú
isinstancer   rl   r6   )rt   s   frI   Ú_display_authorr   R   s9   ø€ ä�%œ×!Ò!Ø�y‰yÔYÑ0HÓYÓYÐYØ’ˆ2Ð.¤C¨£JÐ.rK   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rE   Údatar   rU   r6   Ú
field_nameÚwhatrG   )rH   s   "rI   rJ   rJ   Y   s)   € ÷ ñ  'ð °ð Àð ÐQTñ rK   c                ó„   € V P                  V4      pVe+   \        WS4      '       g   \        P                  RWV4       R# V# )zVReturn ``data[field_name]`` when absent or of ``typ``; warn and return None otherwise.Nz"Plugin %s: %s must be %s; ignoring)ry   r~   ÚloggerÚwarning)r�   rU   r‚   Útyprƒ   Úraws   &&&&& rI   Ú_manifest_field_of_typer‰   Y   s8   € à
�(‰(�:Ó
€CØ
‚œz¨#×3Ò3Ü�‰Ð;¸SÈdÔSÙØ€JrK   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )rE   r�   r   rU   r6   r‚   rƒ   Úcoercer   ÚwarnrF   r>   rG   )rH   s   "rI   rJ   rJ   b   s@   € ÷ 	ñ 	˜ð 	 sð 	¸ð 	À3ð 	ÐPXð 	Ð`cð 	Ðhlñ 	rK   c                óº   € . p\        WV\        V4      ;'       g    .  F8  pV! V4      pVf   \        P                  WQV4       K'  VP	                  V4       K:  	  V# )zbCoerce each item of list field ``field_name``; ``coerce`` returning None warns ``warn`` and skips.)r‰   r>   r…   r†   Úappend)	r�   rU   r‚   rƒ   r‹   rŒ   ÚoutÚitemÚcoerceds	   &&&&&&   rI   Ú_manifest_listr’   b   sW   € à
€CÜ'¨°:¼tÀTÓJ×PÐPÈbÒPˆÙ˜“,ˆØŠ?Ü�N‰N˜4 dÖ+à�J‰J�wÖñ Qð €JrK   c               ó    € V ^8„  d   QhRRRR/# )rE   r�   rA   rF   zOptional[dict[str, Any]]rG   )rH   s   "rI   rJ   rJ   n   s   € ÷ ñ ˜Fð Ð'?ñ rK   c                ó.  € \        V \        4      '       d   RV RR/# \        V \        4      '       dc   \        V P                  R4      \        4      '       d>   V R,          '       d/   V P                  R4      pRV R,          RVe   \        V4      /# R/# R# )z]``{id, version_range}`` from a requires_plugins item (str shorthand ok); None when malformed.ÚidÚversion_rangeN)r~   r6   r   ry   )r�   Úvrs   & rI   Ú_dependency_entryr˜   n   s|   € ä�$œ×ÒØ�d˜O¨TÐ2Ð2Ü�$œ× Ò ¤Z°·±¸³Ä×%DÒ%DÈÈdÏÌØ�X‰X�oÓ&ˆØ�d˜4•j /¸bºn´3°r³7ÐWÐWÐRVÐWÐWÙrK   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	rE   rˆ   rA   rU   r6   rŒ   ÚfallbackúOptional[int]rF   rG   )rH   s   "rI   rJ   rJ   x   s0   € ÷ ñ �vð  Cð ¨sð ¸mð ÐP]ñ rK   c                óx   €  \        V 4      #   \        \        3 d    \        P	                  Y!T 4       Tu # i ; i)z]``int(raw)``; a non-integer warns ``warn`` (formatted with key, raw) and yields ``fallback``.)r8   Ú	TypeErrorÚ
ValueErrorr…   r†   )rˆ   rU   rŒ   rš   s   &&&&rI   Ú_manifest_intrŸ   x   s7   € ðÜ�3‹xˆøÜ”zÐ"ô Ü�‰�t #Ô&ØŠðús   ‚
 �)9¸9c               ó$   € V ^8„  d   QhRRRRRR/# )rE   rU   r6   rˆ   r   rF   údict[str, Any]rG   )rH   s   "rI   rJ   rJ   �   s!   € ÷ ñ  ð ¨#ð °.ñ rK   c                óÌ  € / p\        V\        4      '       d   TM/ P                  4        Fµ  w  r4\        V\        4      '       g   \        P	                  RW4       K3  VP                  R4      pVeW   \        V4      P                  4       \        9  d5   \        P	                  RWVRP                  \        \        4      4      4       \        V4      V\        V4      &   K·  	  V# )z¹``config_schema`` (key -> {type?, default?, description?, ...}) keeping only mapping entries;
warns on what it drops or cannot type-check. Shared by ``plugin.yaml`` and ``plugin.json``.zPPlugin %s: config_schema entry %r must be a mapping (e.g. {type: str}); skippingÚtypezgPlugin %s: config_schema key %r declares unknown type %r (known: %s); type check will be skipped for itrv   )r~   r   Úitemsr…   r†   ry   r6   rm   rC   rl   Úsortedr@   )rU   rˆ   ÚschemaÚskeyÚspecÚstypes   &&    rI   Ú_config_schema_entriesrª   �   s¼   € ð  €FÜ(¨¬g×6Ò6‘s¸B×EÑEÖG‰
ˆÜ˜$¤×(Ò(Ü�N‰NØbÐdgôoáØ—‘˜Ó ˆØÒ¤ U£×!1Ñ!1Ó!3Ô;OÔ!OÜ�N‰NðAà˜5 $§)¡)¬FÔ3GÓ,HÓ"Iôô
 ! ›JˆŒs�4‹yÓñ Hð €MrK   c               ó$   € V ^8„  d   QhRRRRRR/# )rE   r�   r   rU   r6   rF   r¡   rG   )rH   s   "rI   rJ   rJ   •   s!   € ÷ (ñ ( Gð (°#ð (¸.ñ (rK   c                óT  € \        V P                  R^4      VR^4      pV\        8”  d   \        P	                  RW\        4       V P                  R4      pVf   RM\        W1RR4      p\        WRR\        R	4      p\        WR
RR R4      p\        V\        WR\        R4      4      p\        WR\        R4      ;'       g    .  Uu. uF  p\        V4      NK  	  p	p\        \        V P                  4       4      \        ,
          4      p
V
'       d?   V^8¼  d   \        P                  M\        P                   ! RVRP#                  V
4      4       RTRTRTR
TRTR\        V P                  R4      ;'       g    R4      R\        V P                  R4      ;'       g    R4      RV	/# u upi )zjValidate/normalize manifest v2 fields into PluginManifest kwargs (warnings, never failures).

See #64165.
r#   z?Plugin %s: manifest_version %r is not an integer; treating as 1zrPlugin %s: manifest_version %d is newer than this Hermes supports (%d); loading anyway and ignoring unknown fieldsr$   Nz5Plugin %s: api_version %r is not an integer; ignoringr%   za listzjPlugin %s: requires_plugins entry %r must be a plugin id string or a {id, version_range} mapping; skippingr&   za list of requirement stringsc                ó~   € \        V \        4      '       d'   V P                  4       '       d   V P                  4       # R # rx   )r~   r6   rn   )r�   s   &rI   Ú<lambda>Ú+_parse_manifest_v2_fields.<locals>.<lambda>­   s)   € ¤Z°´c×%:Ò%:¸t¿z¹z¿|º|�T—Z‘Z“\ÐUÐQUÐUrK   zXPlugin %s: python_dependencies entry %r must be a non-empty requirement string; skippingr'   z	a mappingr*   zdPlugin %s: unknown manifest field(s) ignored: %s (newer manifest schema or typo; plugin still loads)rv   r(   rc   r)   )rŸ   ry   ÚSUPPORTED_MANIFEST_VERSIONr…   r†   r’   r˜   rª   r‰   r   r>   r6   r¥   ÚsetÚkeysr5   Údebugrl   )r�   rU   ÚmvÚraw_apiÚapiÚdepsÚpydepsr¦   Útr*   Úunknowns   &&         rI   Ú_parse_manifest_v2_fieldsr»   •   s£  € ô 
�t—x‘xÐ 2°AÓ6¸ØXÐZ[ó
]€Bà	Ô&Ô&Ü�‰ðHØILÔRlô	
ð �h‰h�}Ó%€GØ’/‰$¤}ØÐMÈtó(U€CäØÐ% xÔ1Bð	<ó€Dô ØÐ(Ð*IÙUØbó€Fô
 $ CÔ)@ÀÈOÔ]dÐfqÓ)rÓs€FÜ4°TÀÌÈhÓW×]Ð]Ð[]Ð]Ó_Ñ]�qŒC�ŽFÑ]€DÐ_ä”S˜Ÿ™›Ó%Ô(>Õ>Ó?€GßØ œ7Œ�Š¬¯©Ð	4ðBØCFÈÏ	É	ÐRYÓHZô	
ð
 	˜B ¨sÐ4FÈÐNcÐekØ˜ ¬C°·±¸Ó0C×0IÐ0IÀrÓ,JØ”C˜Ÿ™ Ó,×2Ð2°Ó3°V¸Tðð ùò `s   ÃF%c               ó(   € V ^8„  d   QhRRRRRRRR/# )rE   Ú	plugin_idr6   r¦   r   ÚsettingsrF   ú	list[str]rG   )rH   s   "rI   rJ   rJ   À   s)   € ÷ ñ  cð °7ð Àgð ÐR[ñ rK   c                óÀ  € . p\        V\        4      '       d   \        V\        4      '       g   V# VP                  4        EF  w  rE\        V\        4      '       g   K  WB9  d9   VP                  R4      '       d    RV9  d   VP	                  RV  RV R24       K\  VP                  R4      pV'       d-   \
        P                  \        V4      P                  4       4      MRpVf   K©  W$,          p\        W‡4      '       d&   \        V\        4      '       g   KÚ  \        V9  g   Kç  VP	                  RV  RV RV R	\        V4      P                   R
2	4       EK  	  V# )z¡Return actionable warning strings for settings vs config_schema mismatches (never raises).

Never raises; schema mismatches must not block plugin load (#64165).
ÚrequiredÚdefaultzplugins.entries.z
.settings.z9 is required by the plugin's config_schema but is not setr£   Nz should be z (got Ú))r~   r   r¤   ry   rŽ   rC   r6   rm   r<   r£   Ú__name__)	r½   r¦   r¾   Úwarningsr§   r¨   r©   Úexpectedrt   s	   &&&      rI   Úvalidate_config_schemarÇ   À   s.  € ð
 €HÜ�fœg×&Ò&¬j¸Ä7×.KÒ.KØˆØ—l‘l—n‰
ˆÜ˜$¤×(Ò(ÙØÔØ�x‰x˜
×#Ò#¨	¸Ô(=Ø—‘Ø& y k°¸D¸6ð BCð Côñ Ø—‘˜Ó ˆßCHÔ'×+Ñ+¬C°«J×,<Ñ,<Ó,>Ô?ÈdˆØÒÙØ•ˆä˜%×*Ò*¬z¸%Ä×/FÔ/FÌ4ÐW_ÖK_Ø�O‰OØ" 9 +¨Z¸°v¸[Ø�'˜¤ U£× 4Ñ 4Ð5°Qð8÷ñ# %ð* €OrK   c               ó    € V ^8„  d   QhRRRR/# )rE   Ú	manifestszMapping[str, PluginManifest]rF   r¿   rG   )rH   s   "rI   rJ   rJ   à   s   € ÷ .ñ .Ð)Eð .È)ñ .rK   c                ól  € ^ RI p\        V P                  4       4      p/ pV F?  pW,          P                  '       g   K  VP	                  W,          P                  V4       KA  	  V Uu/ uF  qD\        4       bK  	  ppV Fº  pW,          P                   F¡  p\        V\        4      '       d   VP                  R4      MRpV'       g   K6  Wp9   d   TMVP                  V4      pVf   \        P                  RWGV4       Kl  W„8X  d   \        P                  RV4       KŠ  WT,          P                  V4       K£  	  K¼  	  VP                  V4      p	 V	P                  4        . pT	P'                  4       '       d=   \        T	P)                  4       4      pTP+                  T4       T	P,                  ! T!   KR  T# u upi   TP                   dh   p
\!        T
P"                  4      ^8”  d   T
P"                  ^,          M. p\        P                  RRP%                  R T 4       4      4       Tu Rp
?
# Rp
?
ii ; i)a  Return plugin keys in dependency order: B before A when A requires B; alphabetical ties. A cycle warns
and falls back to alphabetical order for all; a missing dependency warns once but never removes the
dependent plugin (loads never hard-fail on advisory deps).

See #64165.
Nr•   z´Plugin %s requires plugin '%s' which is not enabled/installed; loading anyway (probe availability at runtime via ctx.has_plugin). Run `hermes plugins enable %s` if it is installed.z3Plugin %s declares a dependency on itself; ignoringz^Plugin dependency cycle detected (%s); falling back to alphabetical load order for all pluginsz -> c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irx   )r6   ©rg   Úcs   & rI   ri   Ú,resolve_plugin_load_order.<locals>.<genexpr>  s   é € ÐBYÑSXÈaÄ3ÀqÇ6À6ÓSXùs   ‚)Úgraphlibr¥   r²   r   Ú
setdefaultr±   r%   r~   r   ry   r…   r†   ÚaddÚTopologicalSorterÚprepareÚ
CycleErrorÚlenÚargsrl   Ú	is_activeÚ	get_readyÚextendÚdone)rÉ   rÏ   r²   Úby_nameÚkÚedgesÚdepÚdep_idÚresolvedÚsorterÚexcÚcycleÚorderedÚreadys   &             rI   Úresolve_plugin_load_orderræ   à   sË  € ó Ü�)—.‘.Ó"Ó#€DØ €GÛˆØ�<××ÒØ×Ñ˜y�|×0Ñ0°!Ö4ñ ñ 59Ó!9±D¨q¤S£U¢(±D€EÐ!9ÛˆØ•<×0Ô0ˆCÜ&0°´g×&>Ò&>�S—W‘W˜T”]ÀDˆFßÙØ!'Ô!4‘v¸'¿+¹+ÀfÓ:MˆHØÒÜ—‘ð^ð ˜vö	ð ”Ü—‘ÐTÐVWÖXà•—‘˜XÖ&ó 1ñ ð" ×'Ñ'¨Ó.€FðØ�‰Ôð €GØ
×
Ñ
×
Ò
Ü�v×'Ñ'Ó)Ó*ˆØ�‰�uÔØ�Š�UÔØ€NùòC ":øð* ×Ñô Ü" 3§8¡8›}¨qÔ0�—‘˜–°bˆÜ�‰ð6Ø7=·{±{ÑBYÑSXÓBYÓ7Yô	
ð �ûðús%   Á)F6ÅF; Æ;H3ÇAH.È(H3È.H3c               ó    € V ^8„  d   QhRRRR/# )rE   Úsource_textr6   rF   úOptional[str]rG   )rH   s   "rI   rJ   rJ     s   € ÷ ñ ¨#ð °-ñ rK   c                ó¬   a € \         ;QJ d    V 3R lR	 4       F  '       g   K   RM	  RM! V 3R lR	 4       4      '       d   R# RS 9   d
   RS 9   d   R# R# )
a™  Kind implied by source markers (mirrors plugins/memory ``_is_memory_provider_dir`` and
plugins/cron_providers ``_is_cron_provider_dir``): memory-, cron- or computer-use-provider markers -> ``exclusive``;
``register_provider`` + ``ProviderProfile`` -> ``model-provider``; else ``None``. Keeps these kinds out
of the general manager's eager import (its PluginContext has no ``register_cron_scheduler``, #62951).c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5irx   rG   )rg   Úmarkerrè   s   & €rI   ri   Ú+_detect_kind_from_source.<locals>.<genexpr>  s   øé € ð Fñ 0E V�[Ö ó 0Eùs   ƒTFÚ	exclusiveÚregister_providerÚProviderProfileúmodel-providerN)Úregister_memory_providerÚMemoryProviderÚregister_cron_schedulerÚCronSchedulerÚregister_computer_use_providerÚComputerUseProvider)Úany)rè   s   frI   Ú_detect_kind_from_sourcerù     s[   ø€ ÷
 ƒsô Fñ 0Eó F‡s‡s‚sô Fñ 0Eó F÷ Fò Fñ Ø˜kÔ)Ð.?À;Ô.NÙÙrK   c               ó$   € V ^8„  d   QhRRRRRR/# )rE   Úoriginré   Úlimitr8   rF   r6   rG   )rH   s   "rI   rJ   rJ     s!   € ÷ 	ñ 	 ]ð 	¸3ð 	È#ñ 	rK   c                ó$  €  V '       d7   V P                  R4      '       d    \        P                  P                  V 4      p V '       d   V P                  R4      '       g   R# \	        V 4      P                  RRR7      RV #   \         d     R# i ; i)z\First ``limit`` chars of a module's source (``.pyc`` mapped back to ``.py``); "" on failure.ú.pyrc   ú	utf-8-sigÚreplace)ÚencodingÚerrorsN)z.pycz.pyo)ÚendswithÚ	importlibÚutilÚsource_from_cacher   Ú	read_textÚ	Exception)rû   rü   s   &&rI   Ú_read_source_from_originr	    st   € ðß�f—o‘oÐ&6×7Ò7Ü—^‘^×5Ñ5°fÓ=ˆFß˜VŸ_™_¨U×3Ò3ÙÜ�F‹|×%Ñ%¨{À9Ð%ÓMÈfÈuÐUÐUøÜô Úðús"   ‚B  Š=B  ÁB  Á!B  Â BÂBc               ó    € V ^8„  d   QhRRRR/# )rE   Úmodule_namer6   rF   ré   rG   )rH   s   "rI   rJ   rJ   +  s   € ÷ "ñ " sð "¨}ñ "rK   c                ó  € V P                  R4       Uu. uF  q'       g   K  VNK  	  ppV'       g   R#  \        P                  P                  V^ ,          4      pVe   VP                  '       g   R# \        V4      ^8X  d   VP                  # VP                  pV'       g   R# \        VR,          ^R7       F«  w  rVR;rx\        \        V4       Fn  p	W–,          R,          W–R,           ,          rºV
P                  4       '       d   \        V
4      W–,          .r‡ M'VP                  4       '       g   Kc  \        V4      p M	  Vf    R# V\        V4      8X  g   Vf   Vu # TpK­  	  R# u upi   \         d     R# i ; i)aM  Return a module's source path WITHOUT importing it, or ``None``. ``find_spec`` on a dotted name imports
the parent package, so only the top-level name uses it; remaining segments are walked through
``submodule_search_locations`` by hand. Namespace/zipped/extension modules return ``None``. Shared with
``plugins/memory/__init__.py``.Ú.N:é   NN)Ústartú__init__.pyrþ   )Úsplitr  r  Ú	find_specrû   rÕ   Úsubmodule_search_locationsÚ	enumerateÚmapr   Úis_filer6   r  )r  ÚpÚpartsr¨   Úsearch_pathsÚiÚpartÚfound_originÚ
next_pathsÚbaseÚpkg_initÚmod_files   &           rI   Úresolve_module_originr!  +  sH  € ð
 $×)Ñ)¨#Ô.Ó4Ñ.�1³!�QˆQÑ.€EÐ4ßÙðÜ�~‰~×'Ñ'¨¨a­Ó1ˆØŠ<˜tŸ{Ÿ{˜{ÙÜˆu‹:˜Œ?Ø—;‘;ÐØ×6Ñ6ˆßÙÜ   r¥°!×4‰GˆAØ(,Ð,ˆLÜœD ,Ö/�Ø%)¥[°=Õ%@À$ÐQVÍ,ÕBW˜(Ø×#Ñ#×%Ò%Ü/2°8«}¸t½{¸m *ÙØ×#Ñ#×%Ô%Ü#& x£=�LÙñ 0ð Ò#ÚØ”C˜“JŒ *Ò"4Ø#Ò#Ø%ŠLñ 5ñ ùò7 5øô8 ô Úðús@   ”	E*¢E*µ;E/ Á3E/ ÂE/ Â%B
E/ Ä4E/ Å
E/ Å"E/ Å/E>Å=E>c               ó$   € V ^8„  d   QhRRRRRR/# )rE   r  r6   rü   r8   rF   rG   )rH   s   "rI   rJ   rJ   P  s&   € ÷ Oñ O¨ð O°Cð OÀ3ñ OrK   c                ó,   € \        \        V 4      V4      # )zWFirst ``limit`` chars of a module's source without importing it ("" when unresolvable).)r	  r!  )r  rü   s   &&rI   Ú_resolve_module_sourcer$  P  s   € ä#Ô$9¸+Ó$FÈÓNÐNrK   c               ó    € V ^8„  d   QhRRRR/# )rE   ÚmanifestÚPluginManifestrF   r6   rG   )rH   s   "rI   rJ   rJ   U  s   € ÷ )ñ )˜>ð )¨cñ )rK   c                óB   € V P                   ;'       g    V P                  # )zURegistry id of a manifest: the path-derived ``key`` when set, else the bare ``name``.)rU   r   )r&  s   &rI   Úmanifest_keyr)  U  s   € à�<‰<×(Ð(˜8Ÿ=™=Ð(rK   c                  ó:  € ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   ]	! ]
R	7      tR
]R&   ]	! ]
R	7      tR]R&   ]	! ]
R	7      tR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   ]	! ]
R	7      tR]R&   ^tR]R&   RtR]R&   ]	! ]
R	7      tR ]R!&   ]	! ]
R	7      tR]R"&   ]	! ]R	7      tR#]R$&   RtR]R%&   RtR]R&&   ]	! ]
R	7      tR]R'&   ]	! ]
R	7      tR]R(&   ]	! ]
R	7      t R]R)&   ]	! ]
R	7      t!R]R*&   ]	! ]R	7      t"R+]R,&   R-t#R# ).r'  iZ  z0Parsed representation of a plugin.yaml manifest.r6   r   rc   r   r   r   )Údefault_factoryzlist[str | dict[str, Any]]r   r¿   r   r   ÚsourceNré   ÚpathÚ
standaloner   rU   r0   Fr<   ÚportableÚskill_namespacer+   r8   r#   r›   r$   zlist[dict[str, Any]]r%   r&   r¡   r'   r(   r)   r*   r,   r-   r2   zdict[str, dict[str, Any]]Úlocale_metadatarG   )$rÄ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   r   r   r>   r   r   r   r,  r-  r   rU   r0   r/  r0  r+   r#   r$   r%   r&   r@   r'   r(   r)   r*   r,   r-   r2   r1  Ú__static_attributes__rG   rK   rI   r'  r'  Z  s`  ‡ á:à
ƒIØ€GˆSÓØ€K�ÓØ€FˆCÓÙ/4ÀTÔ/J€LÐ,ÓJÙ %°dÔ ;€N�IÓ;Ù %°dÔ ;€N�IÓ;Ø€FˆCÓØ€Dˆ-Óð
 €Dˆ#Óð €CˆƒMð €O�SÓØ€HˆdÓØ€O�SÓñ $°DÔ9€L�)Ó9ð Ð�cÓØ!%€K�Ó%á-2À4Ô-HÐÐ*ÓHñ &+¸4Ô%@Ð˜Ó@á$)¸$Ô$?€M�>Ó?Ø€GˆSÓØ€HˆcÓÙ¨DÔ1€Dˆ)Ó1ñ ¨TÔ2€Eˆ9Ó2Ù¨tÔ4€GˆYÓ4ñ #(¸Ô"=Ð�iÓ=Ù16ÀtÔ1L€OÐ.×LrK   r'  c               ó$   € V ^8„  d   QhRRRRRR/# )rE   rˆ   r   rU   r6   rF   z+tuple[list[str], dict[str, dict[str, Any]]]rG   )rH   s   "rI   rJ   rJ   “  s"   € ÷  ñ   ð  ¨#ð  Ð7bñ  rK   c                ó2  € ^ RI HpHp . p/ pV f   WE3# \        V \        \
        34      '       d   V .p \        V \        4      '       g.   \        P                  RV\        V 4      P                  4       WE3# V  EF  p/ p\        V\
        4      '       d’   V! VP                  RR4      4      p\        VP                  R4      \        4      '       d8   VR,          P                  4       '       d   VR,          P                  4       VR&   RV9   d   \        VR,          4      VR&   MV! V4      pV! V4      '       g   \        P                  RW4       KÛ  W„9   d   \        P                  RW4       Kù  VP                  V4       V'       g   EK  WuV&   EK  	  WE3# )	zÔ``provides_locales`` -> (ids, metadata). Entries are ``"pl"`` or ``{id: pl, endonym: Polski, rtl: false}``;
ids are canonicalised (lowercase, ``_`` -> ``-``), invalid or duplicate ones are dropped with a warning.)Úis_language_idÚnormalize_language_idzBPlugin %s: provides_locales must be a list of language ids, got %sr•   rc   ÚendonymÚrtlz5Plugin %s: ignoring invalid provides_locales entry %rz.Plugin %s: duplicate provides_locales entry %r)Úagent.i18n_layersr:  r;  r~   r6   r   r>   r…   r†   r£   rÄ   ry   rn   r<   rŽ   )	rˆ   rU   r:  r;  ÚidsÚmetadatar�   Ú
entry_metaÚlang_ids	   &&       rI   Úparse_provides_localesrC  “  sX  € ÷ HØ€CØ*,€HØ
‚{Øˆ}ÐÜ�#œœW�~×&Ò&ØˆeˆÜ�cœ4× Ò Ü�‰Ð[Ð]`ÔbfÐgjÓbk×btÑbtÔuØˆ}ÐÜˆØ%'ˆ
Ü�dœG×$Ò$Ù+¨D¯H©H°T¸2Ó,>Ó?ˆGÜ˜$Ÿ(™( 9Ó-¬s×3Ò3¸¸Y½×8MÑ8M×8OÒ8OØ(,¨Y­×(=Ñ(=Ó(?�
˜9Ñ%Ø˜Œ}Ü$(¨¨e­Ó$5�
˜5Ñ!øá+¨DÓ1ˆGÙ˜g×&Ò&Ü�N‰NÐRÐTWÔ^ÙØŒ>Ü�N‰NÐKÈSÔZÙØ�
‰
�7ÔßŠ:Ø *�WÔñ% ð& ˆ=ÐrK   z!^\s*(>=|<=|==|!=|>|<)\s*(.+?)\s*$c               ó   € V ^8„  d   QhRR/# )rE   rF   r6   rG   )rH   s   "rI   rJ   rJ   º  s   € ÷ +ñ + ñ +rK   c                 ó0   € ^ RI Hp  V ! 4       P                  # )z8Base release version of the Hermes code that is running.©Úget_version_info)Úhermes_cli.version_inforG  Úbase_versionrF  s    rI   Úrunning_hermes_versionrJ  º  s   € å8áÓ×*Ñ*Ð*rK   z^\d+c               ó    € V ^8„  d   QhRRRR/# )rE   Úvr6   rF   zOptional[tuple]rG   )rH   s   "rI   rJ   rJ   Ä  s   € ÷ ñ �cð ˜oñ rK   c                óÌ  € \         P                  ! R\        V 4      P                  4       P	                  R4      ^4      ^ ,          P                  R4      pVR.^\        V4      ,
          ,          ,          p. pVR,           FV  p\        P                  VP                  4       4      pVf    R# VP                  \        VP                  ^ 4      4      4       KX  	  \        V4      # )u  ``v1.2.3-rc1`` / ``1.2.3rc1`` / ``1.2.3.post1`` â†’ ``(1, 2, 3)``; ``None`` when a segment has no
leading digits. PEP 440 pre/post/dev suffixes glued to a segment (``0rc1``) are dropped so an rc
*target* still gates and an rc *running* version does not disable every gate.z[-+]rL  r  Ú0:Né   NN)Úrer  r6   rn   ÚlstriprÕ   Ú_VERSION_SEGMENT_REÚmatchrŽ   r8   ÚgroupÚtuple)rL  r  r�   ÚxÚms   &    rI   Ú_version_tuplerX  Ä  s«   € ô �HŠH�Wœc !›fŸl™l›n×3Ñ3°CÓ8¸!Ó<¸QÕ?×EÑEÀcÓJ€EØ	ˆcˆU�aœ#˜e›*•nÕ%Õ%€EØ
€CØ�2�YˆYˆÜ×%Ñ% a§g¡g£iÓ0ˆØŠ9ÚØ�
‰
”3�q—w‘w˜q“z“?Ö#ñ	 ô
 �‹:ÐrK   c               ó$   € V ^8„  d   QhRRRRRR/# )rE   r¨   r6   ÚcurrentrF   r<   rG   )rH   s   "rI   rJ   rJ   Ó  s!   € ÷ ñ ˜Cð ¨#ð °$ñ rK   c                óè  € \        V4      pVf   R# RVP                  RVP                  RVP                  RVP                  RVP
                  RVP                  /p\        RR	 V P                  R
4       4       4       Fp  p\        P                  V4      pV'       d#   VP                  ^4      VP                  ^4      3MRV3w  rg\        V4      pVf   KY  W6,          ! V4      '       d   Ko   R# 	  R# )u²   ``>=``/``>``/``<=``/``<``/``==``/``!=`` clauses (comma = AND; bare version = ``>=``). Unparseable
versions are permissive â€” no PEP 440 dependency for a one-field manifest gate.NTz>=z<=z==z!=Ú>Ú<c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5irx   )rn   rÌ   s   & rI   ri   Ú$version_satisfies.<locals>.<genexpr>Ú  s   é € ÐC±?¨a§¡§	 	³?ùs   ‚Ú,F)rX  Ú__ge__Ú__le__Ú__eq__Ú__ne__Ú__gt__Ú__lt__Úfilterr  Ú_VERSION_COMPARATOR_RErS  rT  )	r¨   rZ  ÚcurÚopsÚclauserW  ÚopÚtargetÚtgts	   &&       rI   Úversion_satisfiesro  Ó  sÉ   € ô ˜Ó
!€CØ
‚{ÙØ�—‘˜T 3§:¡:¨t°S·Z±ZÀÀsÇzÁzÐSVÐX[×XbÑXbÐdgÐil×isÑisÐ
t€CÜ˜ÑC°4·:±:¸c´?ÓCÖDˆÜ"×(Ñ(¨Ó0ˆß12�a—g‘g˜a“j !§'¡'¨!£*Ñ-¸¸v¸‰
ˆÜ˜VÓ$ˆØŒ? 3¦7¨3§<¤<Úñ Eñ rK   c               ó    € V ^8„  d   QhRRRR/# )rE   r&  r'  rF   ré   rG   )rH   s   "rI   rJ   rJ   ã  s   € ÷ 8ñ 8 Nð 8°}ñ 8rK   c                óÈ   € \        V \        4      '       d   V P                  RR4      MV P                  pV'       g   R# \	        4       p\        W4      '       d   R# RV RV 2# )zYLoad-blocking reason when the manifest's ``requires_hermes`` rejects the running version.r0   rc   Nzrequires hermes z
, running )r~   r   ry   r0   rJ  ro  )r&  r¨   rZ  s   &  rI   Úrequires_hermes_errorrr  ã  sW   € ä2<¸XÄw×2OÒ2Oˆ8�<‰<Ð)¨2Ô.ÐU]×UmÑUm€DßÙÜ$Ó&€GÜ˜×'Ò'ÙØ˜d˜V :¨g¨YÐ7Ð7rK   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rE   Úchildr   r,  r6   ÚprefixrF   r'  rG   )rH   s   "rI   rJ   rJ   î  s(   € ÷ ñ  Dð °#ð ¸sð À~ñ rK   c                ó¨  € ^ RI HpHp V! V 4      w  rVV F#  p\        P	                  RWP
                  4       K%  	  V'       d   V RV P                   2MVR,          p\        VR,          VP                  RR4      VP                  RR4      \        VP                  RR4      4      V\        V 4      VR	\        V4      \        Wƒ! V4      4      R
7
      # )z]Build the manifest for a portable Agent Plugin directory (``plugin.json``); diagnostics warn.)Úmanifest_config_schemaÚread_agent_plugin_manifestzAgent Plugin '%s': %sÚ/r   r   rc   r   r   T)
r   r   r   r   r,  r-  rU   r/  r0  r'   )Úhermes_cli.agent_pluginsrw  rx  r…   r†   Úmessager   r'  ry   r   r6   r`   rª   )	rt  r,  ru  rw  rx  r�   ÚdiagnosticsÚ
diagnosticrU   s	   &&&      rI   Úportable_plugin_manifestr~  î  s·   € ç[Ù2°5Ó9Ñ€DÛ!ˆ
Ü�‰Ð.°×7IÑ7IÖJñ "ç&,ˆVˆH�A�e—j‘j�\Ñ
"°$°vµ,€CÜØ�&�\ 4§8¡8¨I°rÓ#:ÈÏÉÐQ^Ð`bÓHcÜ˜tŸx™x¨°"Ó5Ó6¸vÌCÐPUËJÐ\_ØÔ'@ÀÓ'EÜ,¨SÐ2HÈÓ2NÓOô	ð rK   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rE   r�   r   rU   r6   Ú
plugin_dirr   rF   rG   )rH   s   "rI   rJ   rJ   ý  s(   € ÷ ñ ˜ð  sð ¸ð Àñ rK   c           
     óh  € V P                  RR4      p\        V\        4      '       d   VP                  4       P	                  4       MRpV\
        9  d6   \        P                  RWRP                  \        \
        4      4      4       RpVR,          pVR8X  d†   RV 9  d   VP                  4       '       di   \        \        4      ;_uu_ 4        VP                  RRR7      R	,          p\        V4      pV'       d   Tp\        P                  R
WV4       RRR4       V# V#   + '       g   i     T# ; i)z¡Normalize ``kind``; undeclared memory/model providers are auto-detected from ``__init__.py`` so they
route to their own discovery instead of the general manager.r   r.  zBPlugin %s: unknown kind '%s' (valid: %s); treating as 'standalone'rv   r  r   rÿ   )r  r  :Ni    Nz-Plugin %s: detected %s, treating as kind='%s'N)ry   r~   r6   rn   rm   r   r…   r†   rl   r¥   Úexistsr   r  r  rù   r³   )r�   rU   r€  Úraw_kindr   Ú	init_filerè   Údetecteds   &&&     rI   Ú_manifest_kindr†  ý  sû   € ð �x‰x˜ Ó-€HÜ'1°(¼C×'@Ò'@ˆ8�>‰>Ó×!Ñ!Ô#Àl€DØÔ&Ô&Ü�‰ØPØ˜4Ÿ9™9¤VÔ,?Ó%@ÓAô	
ð ˆØ˜]Õ*€IØˆ|Ô ¨dÔ 2°y×7GÑ7G×7IÒ7IÜ”i× Õ Ø#×-Ñ-°YÈÐ-ÓUÐV[Õ\ˆKÜ/°Ó<ˆHßØ�Ü—‘ÐLÈcÐ]eÔf÷ !ð €Kˆ4€K÷ !Ö ð €Kús   ÃAD Ä D1	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	rE   Úmanifest_filer   r€  r,  r6   ru  rF   zOptional[PluginManifest]rG   )rH   s   "rI   rJ   rJ     s4   € ÷ #ñ #Øð#Ø%)ð#Ø36ð#Ø@Cð#àñ#rK   c           !     óð  €  \         f   \        P                  RV 4       R# \        V P	                  RR7      4      ;'       g    / p\        V\        4      '       g-   \        P                  RV \        V4      P                  4       R# VP                  RVP                  4      pV'       d   V RVP                   2MTp\        WFV4      p\        P                  RWeWrV4       \        VP                  R	4      V4      w  r‰\        RRTR
\        VP                  R
R4      4      RVP                  RR4      R\!        VP                  RR4      4      RVP                  R. 4      RVP                  R. 4      RVP                  RVP                  R. 4      4      RTR\        V4      RTRTR\        VP                  R4      ;'       g    R4      P#                  4       R\%        VP                  R4      V4      /\'        WF4      BRVP                  R4      ;'       g    . RVP                  R4      ;'       g    . R	VRV	/B #   \(         d,   p
\        P                  RY
\+        4       R7        Rp
?
R# Rp
?
ii ; i)zWParse one ``plugin.yaml`` into a :class:`PluginManifest`; ``None`` (warned) on failure.Nu,   ruamel.yaml not installed â€“ cannot load %srÿ   )r  z@Failed to parse %s: top level must be a mapping, got %s (#14066)r   ry  z9Parsed manifest: key=%s name=%s kind=%s source=%s path=%sr2   r   rc   r   r   r   r   r   r   r,  r-  r   rU   r0   r+   r,   r-   r1  zFailed to parse %s: %s)Úexc_inforG   )Úyamlr…   r†   r   r  r~   r   r£   rÄ   ry   r   r†  r³   rC  r'  r6   r   rn   Ú_parse_declared_capabilitiesr»   r  rR   )rˆ  r€  r,  ru  r�   r   rU   r   r2   r1  râ   s   &&&&       rI   Úparse_manifest_filer�    s}  € ðÜŠ<Ü�N‰NÐIÈ=ÔYÙÜ˜m×5Ñ5¸{Ð5ÓKÓL×RÐRÐPRˆÜ˜$¤×(Ò(Ü�N‰NÐ]Ø(¬$¨t«*×*=Ñ*=ô?áØ�x‰x˜ 
§¡Ó0ˆß/5��˜˜*Ÿ/™/Ð*Ñ+¸4ˆÜ˜d¨Ó4ˆÜ�‰ØGÈÐTXÐblô	nä,BÀ4Ç8Á8ÐL^ÓC_ÐadÓ,eÑ)ÐÜñ 
Øð
Ü" 4§8¡8¨I°rÓ#:Ó;ð
àŸ™ °Ó3ð
ä<KÈDÏHÉHÐU]Ð_aÓLbÓ<cð
ð Ÿ™ .°"Ó5ð
ð  Ÿ8™8Ð$4°bÓ9ð	
ð  Ÿ8™8Ð$4°d·h±h¸wÈÓ6KÓLð
ð V\ð
ô cfÐfpÓbqð
ð ð
ð ð
ô 14°D·H±HÐ=NÓ4O×4UÐ4UÐSUÓ0V×0\Ñ0\Ó0^ð
ô 6°d·h±h¸~Ó6NÐPTÓUð
ô (¨Ó2ñ
ð ;?¿(¹(À7Ó:K×:QÐ:QÈrð
ð —H‘H˜YÓ'×-Ð-¨2ð
ð .ð
ð @Oò
ð 	
øô ô Ü�‰Ð/°ÌnÓN^ˆÔ_Ýûðús6   ‚H? ¢!H? ÁAH? Â	#H? Â-FH? È5	H? È?I5É
 I0É0I5>   ÚbackendÚplatformrî   r.  rñ   )i    )rc   )MÚ__conditional_annotations__r5  Ú
__future__r   rZ   Úimportlib.utilr  ÚloggingrP  Ú
contextlibr   Údataclassesr   r   Úpathlibr   Útypingr   r   r	   r
   r   r   r   r   r   Úutilsr   Úhermes_cli.plugin_capabilitiesr   rŒ  Úhermes_yamlr‹  ÚImportErrorÚ	getLoggerr…   r   r6  r5   r°   r6   r8   r:   r<   r>   r@   rC   rR   r`   rY   rr   r   r‰   r’   r˜   rŸ   rª   r»   rÇ   ræ   rù   r	  r!  r$  r)  r'  rC  Úcompilerh  rJ  rR  rX  ro  rr  r~  r†  r�  )r�  s   @rI   Ú<module>rž     s  øðôõ
 #ã Û Û Û 	Ý ß (Ý ß R× RÕ Rå  Ý fðÛð 
×	Ò	Ð/Ó	0€â dÐ �XÓ dð
$Ø
ð$Øð$Ø$ð$Ø&.ð$Ø0>ð$Ø@Pð$ØRbð$à
ð$àð$àð$à,ð$à.9ð$à;Rð$ð ð$ð 5ð$ð 7Oð$ð ð	$ð &ð	$ð (:ð	$ð <Qð	$ð Sbð	$ð
 ð$ð
 ð$ð
 "ð$ð
 $2ð$ð
 4;ð$ð
 =Fð$ð
 HPð$ð
 R[ð$ð ð$ð (ð$ð *<ð$ð >Mð$ð OVð$Ð ˜ó ð Ð ð 
ˆCˆ6�8˜c˜V U¨S¨F°IÀ¸vÀwÐQTÐV[ÐP\Øˆs�Eˆl˜F T G¨Y¸¸ÀÈ$ÈÐRYÐ\`Ð[bØ
ˆTˆG�X ˜wð ˆsˆfð*Ð Ð&ó õ"õ
+õ(õ
"õ/õõ	õõõõ((õVõ@.õb÷	õ"÷JOõ
)ð
 ÷5Mð 5Mó ð5M÷p ðH ŸšÐ$HÓIÐ õ+ð —j’j Ó)Ð õõõ 8õõ÷,#øð{ ô ØƒDðús   ÁG Ç	GÇG