+
    jHàj 1  ã                  ó\  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHtHt ]P                  ! ]4      tRtRRRRRR	R
RRRRRRRRRRRRR/
tRRRRRR/t]! 0 RFm4      tRsR]R&   ]
! RRR7      tR]R&   R R ltR R  lt]P8                  R! R" l4       tR# R$ ltR% R& lt]P8                  R' R( l4       t R) R* lt!R+ R, lt"R- R. lt#R/R/R0 R1 llt$R2 R3 lt%R4 R5 lt&R6 R7 lt'R8 R9 lt(R: R; lt)]PT                  R< R= l4       t+R> R? lt,R@ RA lt-RB RC lt.RD RE lt/R# )Ga>  hermes.feature_disabled.count: a user turns off something Hermes ships on, or removes something shipped.

One chokepoint sees every write: ``save_config`` hands over the raw config it replaced and the one it
wrote, and :func:`config_transitions` diffs only what the user moved away from the shipped default
(or back to it): default-on toolsets, ``skills.disabled``, ``plugins.disabled`` and default-``True``
booleans. Names are public only when shipped (toolset key, bundled/catalog skill, bundled/catalog
plugin, ``DEFAULT_CONFIG`` key path; never a value); anything else reads ``custom``. The store counts
each (kind, name, event) at most once per day.

The surface is the entry point that is running: ``set_process_surface`` from the ``hermes`` command
dispatch (``tools`` / ``config`` / ``skills`` / ``plugins`` / chat slash commands / the web server) and
the TUI gateway. A process with no surface (setup wizard, updates) records nothing, nor does a write
Hermes makes itself inside a surfaced process (migrations, under :func:`hermes_applied_write`): those
are Hermes applying choices, not a user turning something off.

``save_config``'s callers may hold their own write lock (the dashboard's ``_CONFIG_MUTATION_LOCK``), so
the hook only runs the cheap gate inline; the diff and the record run on a thread bound to the owning
profile.
)ÚannotationsN)Ú
ContextVar)ÚAnyÚIterableÚIteratorÚcustomÚ	cli_slashÚchatÚtoolsÚ	cli_toolsÚconfigÚ
cli_configÚskillsÚpluginsÚ	dashboardÚwebÚserveÚguiÚdesktopÚmemoryÚcuratorÚcompressionú
str | NoneÚ_process_surfaceÚ$hermes_feature_disabled_hermes_writeF)ÚdefaultzContextVar[bool]Ú_hermes_writec               ó    € V ^8„  d   QhRRRR/# )é   Úcommandr   ÚreturnÚNone© )Úformats   "ÚU/home/ubuntu/.hermes/hermes-agent/hermes_cli/observability/shared_metrics_disabled.pyÚ__annotate__r%   -   s   € ÷ eñ e ð e¨ñ eó    c                óF   € V R8X  d   RsR# \         P                  V 4      sR# )z˜Called once by the ``hermes`` dispatch (``command`` is the subcommand, None for chat) or the
TUI gateway (``"tui_gateway"``). Unknown commands clear it.Útui_gatewayN)Ú_COMMAND_SURFACESÚgetr   )r   s   &r$   Úset_process_surfacer+   -   s#   € ð )0°=Ô(@�}ÒÔFW×F[ÑF[Ð\cÓFdÒr&   c               ó   € V ^8„  d   QhRR/# )r   r    r   r"   )r#   s   "r$   r%   r%   4   s   € ÷ ñ ˜ñ r&   c                 óˆ   € \         p V R 8X  d   ^RIHp V! 4       # V R8X  d    ^ RIHp V! 4       # V #   \
         d     R# i ; i)r   )Úweb_setup_surfacer(   )Ú_resolve_session_platformÚtui)r   Úshared_metrics_setupr.   Útui_gateway.serverr/   Ú	Exception)Úsurfacer.   r/   s      r$   Úcurrent_surfacer5   4   sO   € Ü€GØ�%ÔÝ;á Ó"Ð"Ø�-Ôð	ÝDá,Ó.Ð.ð €Nøô ô 	Úð	ús   £2 ²AÁ Ac               ó   € V ^8„  d   QhRR/# ©r   r    zfrozenset[str]r"   )r#   s   "r$   r%   r%   G   s   € ÷ 	ñ 	˜~ñ 	r&   c                 óÀ   € ^RI Hp  V R,          p \        R . VP                  R4      OVP                  R4      O 4       4      #   \         d    \        4       u # i ; i)é   )Ú
_REPO_ROOTr   c              3  óh   "  € T F(  qP                   P                  P                  4       x € K*  	  R # 5i©N)ÚparentÚnameÚlower)Ú.0Úps   & r$   Ú	<genexpr>Ú(_bundled_plugin_names.<locals>.<genexpr>L   s&   é € ð 
Ù+g a�H‰H�M‰M×Ñ×!Ð!Ó+gùs   ‚02z*/plugin.yamlz*/*/plugin.yaml)Úshared_metrics_catalogr:   Ú	frozensetÚglobÚOSError)r:   Úroots     r$   Ú_bundled_plugin_namesrI   F   sd   € å2à˜	Õ!€DðÜñ 
Ø+g¨T¯Y©Y°Ó-GÐ+gÈ$Ï)É)ÐTeÓJfÑ+gó
ó 
ð 	
øô ô Ü‹{Òðús   ‘3A ÁAÁAc               ó    € V ^8„  d   QhRRRR/# ©r   Úrawr   r    Ústrr"   )r#   s   "r$   r%   r%   S   s   € ÷ vñ v˜Cð v Cñ vr&   c                ó¬   € ^RI HpHpHp V! V 4      P	                  R^4      R,          pV'       d   WB! \
        4      9   g   WB! V4      9   d   V# \        # )r9   )Ú_normÚ_safeÚplugin_catalog_namesÚ/éÿÿÿÿ)rD   rO   rP   rQ   ÚrsplitrI   ÚCUSTOM)rL   rO   rP   rQ   r>   s   &    r$   Úplugin_metric_namerV   S   sK   € ßJÑJá�‹:×Ñ˜S !Ó$ RÕ(€Dß˜T UÔ+@Ó%AÔAÀTÈUÐSgÓMhÔEhˆ4ÐuÔouÐur&   c               ó    € V ^8„  d   QhRRRR/# rK   r"   )r#   s   "r$   r%   r%   Z   s   € ÷ #ñ #˜3ð # 3ñ #r&   c                ó   € ^RI Hp V! V 4      # )r9   )Úskill_metric_name)rD   rY   )rL   Úcatalog_skill_names   & r$   rY   rY   Z   s   € ÝOá˜cÓ"Ð"r&   c               ó   € V ^8„  d   QhRR/# r7   r"   )r#   s   "r$   r%   r%   a   s   € ÷ ñ ˜^ñ r&   c                 óz   aaaa€ ^ RI Hp  ^RIHoHo \        4       oR VVVV3R lloS! V R4       \        S4      # )z`Dotted ``DEFAULT_CONFIG`` paths whose shipped value is ``True`` (the closed setting vocabulary).)ÚDEFAULT_CONFIG)Ú FEATURE_DISABLED_NAME_MAX_LENGTHÚ_metric_identifierc               ó$   € V ^8„  d   QhRRRRRR/# )r   Únoder   ÚprefixrM   r    r!   r"   )r#   s   "r$   r%   Ú)default_on_settings.<locals>.__annotate__i   s!   € ÷  ñ  �3ð   ð  ¨ñ  r&   c                ó>  <€ V P                  4        F‡  w  r#\        V\        4      '       d   VP                  R 4      '       d   K4  V V 2p\        V\        4      '       d   S! W4 R24       K]  VRJ g   Ke  S! VSR7      V8X  g   Kv  SP                  V4       K‰  	  R# )Ú_Ú.T)Ú
max_lengthN)ÚitemsÚ
isinstancerM   Ú
startswithÚdictÚadd)	ra   rb   ÚkeyÚvalueÚpathr^   r_   ÚpathsÚwalks	   &&   €€€€r$   rq   Ú!default_on_settings.<locals>.walki   s   ø€ ØŸ*™*ž,‰JˆCÜ˜c¤3×'Ò'¨3¯>©>¸#×+>Ò+>ÙØ�X˜c˜UÐ#ˆDÜ˜%¤×&Ò&Ù�U˜f A˜JÖ'Ø˜$•Ñ#5°dÐGgÔ#hÐlpÖ#pØ—	‘	˜$–ó 'r&   Ú )Úhermes_cli.configr]   Úshared_metrics_contractr^   r_   ÚsetrE   )r]   r^   r_   rp   rq   s    @@@@r$   Údefault_on_settingsrw   `   s3   û€ õ 1ç]ä“e€E÷ ó  ñ 	ˆ˜ÔÜ�UÓÐr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   ro   rM   r    r"   )r#   s   "r$   r%   r%   y   s!   € ÷ ñ �ð ˜Cð  Cñ r&   c                óˆ   € T pVP                  R 4       F*  p\        V\        4      '       d   W29  d    R# W#,          pK,  	  V# )rf   T)Úsplitri   rk   )r   ro   ra   Úparts   &&  r$   Ú_getr|   y   s<   € Ø€DØ—
‘
˜3–ˆÜ˜$¤×%Ò%¨Ô)9ÚØ�zŠñ  ð €Kr&   c               ó    € V ^8„  d   QhRRRR/# )r   rn   r   r    Úboolr"   )r#   s   "r$   r%   r%   ‚   s   € ÷ ñ ˆsð �tñ r&   c                óŽ   € \        V \        4      '       d&   V P                  4       P                  4       \        9  # \        V 4      # r<   )ri   rM   Ústripr?   Ú_OFFr~   )rn   s   &r$   Ú_onr‚   ‚   s3   € Ü�%œ×ÒØ�{‰{‹}×"Ñ"Ó$¬DÑ0Ð0Ü�‹;Ðr&   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   Úoldrk   Únewr    úIterable[tuple[str, str, str]]r"   )r#   s   "r$   r%   r%   ˆ   s'   € ÷ tñ t˜dð t¨ð tÐ2Pñ tr&   c              #  ó˜  "  € \        \        4       4       F®  p\        W4      \        W4      rC\        ;QJ d    R  W43 4       F  '       g   K   RM	  RM! R  W43 4       4      '       d   KV  \	        V4      \	        V4      rCW48w  g   Ks  \
        P                  VP                  R^4      ^ ,          R4      Y$'       d   RMR3x € K°  	  R# 5i)c              3  ó\   "  € T F"  p\        V\        4      ;'       d    R V9   x € K$  	  R# 5i)z${N)ri   rM   )r@   rn   s   & r$   rB   Ú'_setting_transitions.<locals>.<genexpr>‹   s&   é € ÐUÁ_¸EŒz˜%¤Ó%×7Ð7¨$°%©-Ô7Ã_ùs   ‚,ž,TFrf   ÚsettingÚ
re_enabledÚdisabledN)Úsortedrw   r|   Úanyr‚   Ú_SETTING_KINDSr*   rz   )r…   r†   ro   ÚbeforeÚafters   &&   r$   Ú_setting_transitionsr“   ˆ   s“   é € ÜÔ*Ó,Ö-ˆÜ˜S›¬¨c«�ß‹3ÑUÀfÁ_ÓU�3�3Š3ÑUÀfÁ_ÓU×UÒUÙÜ˜F›¤S¨£Z�ØŽ?Ü ×$Ñ$ T§Z¡Z°°QÓ%7¸Õ%:¸IÓFÈÖ^cÉlÐisÐsÔsó .ùs   ‚A	C
ÁC
Á*C
Â	AC
Úper_platformc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r   r   ÚsectionrM   rm   r”   r   r    úset[str]r"   )r#   s   "r$   r%   r%   ’   s0   € ÷ #ñ #�3ð # ð #¨3ð #Àð #ÐW_ñ #r&   c               ó  € ^ RI Hp \        V \        4      '       d   V P	                  V4      MRp\        V\        4      '       g   \        4       # \        V! VP	                  V4      4      ;'       g    R4      pV'       d   VP	                  V4      MRp\        V\        4      '       d:   VP                  4        F%  pT\        V! V4      ;'       g    R4      ,          pK'  	  V U	u0 uF  p	\        V	4      kK  	  up	# u up	i )é    )Úparse_config_string_listNr"   )Úagent.skill_utilsrš   ri   rk   r*   rv   ÚvaluesrM   )
r   r–   rm   r”   rš   ÚblockÚnamesÚ	platformsrn   Úns
   &&&$      r$   Ú_namesr¡   ’   sÀ   € Ý:ä#-¨f´d×#;Ò#;ˆF�J‰J�wÔÀ€EÜ�eœT×"Ò"Ü‹uˆÜÑ(¨¯©°3«Ó8×>Ð>¸BÓ?€Eß+7�—	‘	˜,Ô'¸T€IÜ�)œT×"Ò"Ø×%Ñ%Ö'ˆEØ”SÑ1°%Ó8×>Ð>¸BÓ?Õ?ŠEñ (á!Ó"™E�qŒC�ŽF™EÑ"Ð"ùÒ"s   Ã(C?c               ó    € V ^8„  d   QhRRRR/# )r   r>   rM   r    r"   )r#   s   "r$   r%   r%       s   € ÷ \ñ \�sð \˜sñ \r&   c                ó¼   € ^RI HpHpHp V! V4      V! V4      ,          pV P	                  4       P                  4       P                  R^4      R,          V9   d   R# R# )zaA messaging-platform plugin (bundled or catalog) reports as a platform, other plugins as plugins.)rP   Úbundled_platform_namesÚcatalog_platform_namesrR   ÚplatformÚpluginrS   )rD   rP   r¤   r¥   r€   r?   rT   )r>   rP   r¤   r¥   rŸ   s   &    r$   Ú_plugin_kindr¨       sR   € ç]Ñ]áÐ,Ó-±Ð6LÓ0MÕM€IØŸ™›×+Ñ+Ó-×4Ñ4°S¸!Ó<¸RÕ@ÀIÔMˆ:Ð[ÐS[Ð[r&   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú	old_namesr—   Ú	new_namesÚkindrM   r    r‡   r"   )r#   s   "r$   r%   r%   ¨   s/   € ÷ Yñ Y ð Y°hð YÀcð YÐUsñ Yr&   c              #  óª   "  € W,
          R 3W,
          R33 F6  w  rE\        V4       F"  pVR8X  d   \        V4      MTV! V4      V3x € K$  	  K8  	  R# 5i)r�   rŒ   r§   N)rŽ   r¨   )rª   r«   r¬   Únamerrž   Úeventr>   s   &&&&   r$   Ú_list_transitionsr°   ¨   sV   é € Ø#Õ/°Ð<¸yÕ?TÐVbÐ>cÓd‰ˆÜ˜5–MˆDØ)-°Ô)9”< Ô%¸tÁeÈDÃkÐSXÐXÔXó "ó eùs   ‚AAc               ó$   € V ^8„  d   QhRRRRRR/# r„   r"   )r#   s   "r$   r%   r%   ®   s'   € ÷ [ñ [˜dð [¨ð [Ð2Pñ [r&   c              #  óð  "  € R  R lpV! V 4      V! V4      8X  d   R# ^ RI HpHp R0pW3 FR  p\        VP	                  R4      \
        4      '       g   K*  YVR,           Uu0 uF  p\        V4      kK  	  up,          pKT  	  V! 4       p\        V4       FW  p	V! / V	RR7      V,          p
V! W	RR7      pV! WRR7      p\        V
4       F  pWÛ9   WÜ9   8w  g   K  RYÝV9   d   R	MR
3x € K!  	  KY  	  R# u upi 5i)c               ó    € V ^8„  d   QhRRRR/# )r   r   rk   r    ztuple[Any, Any]r"   )r#   s   "r$   r%   Ú*_toolset_transitions.<locals>.__annotate__¯   s   € ÷ Oñ O�dð O˜ñ Or&   c                ó¶   € \        V P                  R 4      \        4      '       d   V P                  R 4      M/ pV P                  R4      VP                  R4      3# )ÚagentÚplatform_toolsetsÚdisabled_toolsets)ri   r*   rk   )r   r¶   s   & r$   ÚscopeÚ#_toolset_transitions.<locals>.scope¯   sG   € Ü'1°&·*±*¸WÓ2EÄt×'LÒ'L�—
‘
˜7Ô#ÐRTˆØ�z‰zÐ-Ó.°·	±	Ð:MÓ0NÐNÐNr&   N)Ú_configurable_keysÚ_get_platform_toolsÚclir·   F)Úinclude_default_mcp_serversÚtoolsetrŒ   r�   )Úhermes_cli.tools_configr»   r¼   ri   r*   rk   rM   rŽ   )r…   r†   r¹   r»   r¼   rŸ   r   rA   Úshippedr¦   r   r‘   r’   r¿   s   &&            r$   Ú_toolset_transitionsrÂ   ®   sî   é € õOñ ˆSƒz‘U˜3“ZÔÙßOà�€IØ“*ˆÜ�f—j‘jÐ!4Ó5´t×<Ô<ØÐ1DÖ*EÓFÑ*E Qœ#˜až&Ñ*EÑFÕFŠIñ ñ !Ó"€GÜ˜9Ö%ˆÙ% b¨(ÐPUÔVÐY`Õ`ˆÙ$ SÐPUÔVˆÙ# CÈuÔUˆÜ˜g–ˆGØÑ! wÑ'7Ö8Ø ÀUÔ:J©,ÐPZÐZÔZó 'ó	 &ùò Gùs   ‚AC6ÁC6Á!C1Á5AC6ÃC6c               ó$   € V ^8„  d   QhRRRRRR/# )r   r…   r   r†   r    zlist[tuple[str, str, str]]r"   )r#   s   "r$   r%   r%   Å   s"   € ÷ ñ ˜Cð  cð Ð.Hñ r&   c                óÜ  a€ \        V \        4      '       d   T M/ p \        V\        4      '       d   TM/ p. o\        W4      \        \	        V RRRR7      \	        VRRRR7      R\
        4      \        \	        V RR4      \	        VRR4      R\        4      \        W4      3 F  p SP                  V3R lV 4       4       K!  	  S#   \         d    \        P                  R	R
R7        KJ  i ; i)zX(kind, name, event) for each shipped-on thing the write turned off or back on (deduped).r   r�   Úplatform_disabled)r”   Úskillr   r§   c              3  ó8   <"  € T F  qS9  g   K  Vx € K  	  R # 5ir<   r"   )r@   ÚtÚfounds   & €r$   rB   Ú%config_transitions.<locals>.<genexpr>Ó   s   øé € Ð<¡E˜q°e©^Ÿš£Eùs   ƒ�
z$Feature-disabled transitions skippedT©Úexc_info)ri   rk   r“   r°   r¡   rY   rV   rÂ   Úextendr3   ÚloggerÚdebug)r…   r†   ÚbatchrÉ   s   && @r$   Úconfig_transitionsrÑ   Å   sÞ   ø€ ä˜C¤×&Ò&‰#¨B€CÜ˜C¤×&Ò&‰#¨B€CØ(*€Eä˜SÓ&Üœ&  h°
ÐI\Ô]Ü   h°
ÐI\Ô]Ð_fÔhyó	{äœ&  i°Ó<¼fÀSÈ)ÐU_Ó>`ÐbjÜ,ó	.ä˜SÓ&óˆð	PØ�L‰LÔ<¡EÓ<Ö<ñð €Løô ô 	PÜ�L‰LÐ?È$ˆL×Oð	Pús   Â$CÃ"C+Ã*C+c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útransitionsr‡   r4   rM   r    r!   r"   )r#   s   "r$   r%   r%   Û   s'   € ÷ uñ uÐ5ð uÀð uÈñ ur&   c                óX   € ^RI Hp ^RIHp V  F  w  rEpV! VRVRVRVRV/4       K  	  R# )r9   )Úrecord_process_mark)ÚFEATURE_DISABLED_MARKr¯   r¬   r>   r4   N)Úrelay_shared_metricsrÕ   ru   rÖ   )rÓ   r4   rÕ   rÖ   r¬   r>   r¯   s   &&     r$   Ú_emitrØ   Û   s7   € Ý9Ý>ã(Ñˆ�EÙÐ1°G¸UÀFÈDÐRXÐZ^Ð`iÐkrÐ3sÖtó )r&   c               ó   € V ^8„  d   QhRR/# )r   r    zIterator[None]r"   )r#   s   "r$   r%   r%   ä   s   € ÷ #ñ #˜nñ #r&   c               #  ó    "  € \         P                  R4      p  Rx € \         P                  V 4       R#   \         P                  T 4       i ; i5i)zXConfig writes Hermes makes on its own (migrations) record nothing, whatever the surface.TN)r   rv   Úreset)Útokens    r$   Úhermes_applied_writerÝ   ã   s;   é € ô ×Ñ˜dÓ#€Eð#Ûä×Ñ˜EÖ"øŒ×Ñ˜EÕ"üs   ‚A™4 �A´AÁAc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   r…   r   r†   r4   rM   Úhomer    r!   r"   )r#   s   "r$   r%   r%   í   s/   € ÷ 	*ñ 	*�ð 	*˜3ð 	*¨ð 	*°Cð 	*¸Dñ 	*r&   c                óÌ   € ^ RI HpHp V! V4      p \        \	        W4      V4       V! V4       R#   \
         d    \        P                  RRR7        L.i ; i  T! T4       i ; i)r™   )Úreset_hermes_home_overrideÚset_hermes_home_overrideúFeature-disabled not recordedTrË   N)Úhermes_constantsrá   râ   rØ   rÑ   r3   rÎ   rÏ   )r…   r†   r4   rß   rá   râ   rÜ   s   &&&&   r$   Ú_recordrå   í   s]   € ßUá$ TÓ*€Eð*ÜÔ  Ó*¨GÔ4ñ 	# 5Ö)øô ô EÜ�‰Ð4¸tˆÖDðEûñ 	# 5Õ)ús!   ’1 ±"AÁA ÁAÁA Á
A#c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úold_rawr   Ú
new_configr    r!   r"   )r#   s   "r$   r%   r%   ù   s&   € ÷ Eñ E ð E°#ð E¸$ñ Er&   c           
     ó¾  € \         e   \        P                  4       '       d   R#  ^ RIHp ^RIHp V! 4       '       d   \        4       ;pf   R# \        P                  ! \        \        P                  ! V 4      \        P                  ! V4      V\        V! 4       4      3RR7      P                  4        R#   \         d    \         P#                  RRR7        R# i ; i)	zK``save_config``'s hook, after the write and outside its lock. Never raises.N)Úget_hermes_home©Úenabledzhermes-feature-disabled)ÚtargetÚargsr>   rã   TrË   )r   r   r*   rä   rê   r×   rì   r5   Ú	threadingÚThreadrå   ÚcopyÚdeepcopyrM   Ústartr3   rÎ   rÏ   )rç   rè   rê   rì   r4   s   &&   r$   Úrecord_config_savedrô   ù   s£   € äÒ¤=×#4Ñ#4×#6Ò#6ÙðEÝ4å1á�yŠy¬Ó(9Ð9˜WÒBÙä×ÒÜ¤$§-¢-°Ó"8¼$¿-º-È
Ó:SÐU\Ô^aÑbqÓbsÓ^tÐ!uØ*ô	
÷ ‰%Ž'øÜô EÜ�‰Ð4¸tˆ×DðEús   ¦B6 ¿B6 ÁA%B6 Â6"CÃCc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úconfig_pathr   Úuser_configr    r!   r"   )r#   s   "r$   r%   r%     s!   € ÷ 1ñ 1¨Cð 1¸cð 1ÈTñ 1r&   c                óà   € Rp\         e#    ^RIHp V! 4       '       d   ^ RIHp V! V 4      pV! W4       Ve   \        W14       R# R#   \
         d    \        P                  RRR7        L?i ; i)zÇ``hermes config set/unset`` write the raw file directly (not via ``save_config``): diff the file
they replace against what they write. The write itself runs unguarded, so its errors are the caller's.Nrë   )Úread_user_config_rawz,Config snapshot for feature-disabled skippedTrË   )	r   r×   rì   rt   rù   r3   rÎ   rÏ   rô   )rö   r÷   Úwriter‘   rì   rù   s   &&&   r$   Úrecording_raw_config_writerû     sn   € ð €FÜÒ#ð	XÝ5á�yŠyÝBá-¨kÓ:�ñ 
ˆ+Ô#ØÒÜ˜FÖ0ñ øô ô 	XÜ�L‰LÐGÐRVˆLÖWð	Xús   ŒA ŸA Á"A-Á,A-c               ó    € V ^8„  d   QhRRRR/# )r   r>   r   r    r!   r"   )r#   s   "r$   r%   r%      s   € ÷ Bñ B˜sð B tñ Br&   c                ó  € \         f   R#  ^RIHp V! 4       '       d   \        4       ;pf   R# \	        V 4      ;p\
        8w  d   \        RVR3.V4       R# R#   \         d    \        P                  RRR7        R# i ; i)z^A catalog skill (bundled/optional) was uninstalled; third-party hub skills were never shipped.Nrë   rÆ   r�   zSkill removal not recordedTrË   )
r   r×   rì   r5   rY   rU   rØ   r3   rÎ   rÏ   )r>   rì   r4   Úmetric_names   &   r$   Úrecord_skill_removedrÿ      sx   € äÒÙðBÝ1á�yŠy¬Ó(9Ð9˜WÒBÙÜ,¨TÓ2Ð2ˆK´vÔ=Ü�G˜[¨*Ð5Ð6¸Ö@ñ >øäô BÜ�‰Ð1¸Dˆ×AðBús   ŒA ŸA ¯&A Á"A?Á>A?>   rs   Ú0ÚnoÚoffÚnoneÚfalse)0Ú__conditional_annotations__Ú__doc__Ú
__future__r   Ú
contextlibrñ   Ú	functoolsÚloggingrï   Úcontextvarsr   Útypingr   r   r   Ú	getLoggerÚ__name__rÎ   rU   r)   r�   rE   r�   r   Ú__annotations__r   r+   r5   ÚcacherI   rV   rY   rw   r|   r‚   r“   r¡   r¨   r°   rÂ   rÑ   rØ   ÚcontextmanagerrÝ   rå   rô   rû   rÿ   )r  s   @r$   Ú<module>r     s]  øðôõ( #ã Û Û Û Û Ý "ß *Ñ *à	×	Ò	˜8Ó	$€à	€àˆ+�v˜{¨G°[À(ÈLØˆl˜I |Ø�˜ ¨¨u°iÀðÐ ð
 ˜H i°¸MÈ=ÐY€ÙÒ8Ó9€Ø#Ð �*Ó #Ù",Ð-SÐ]bÔ"c€ÐÓ cõeõð$ ‡�ô	ó ð	õvõ#ð ‡�ôó ðõ0õõtð#Èd÷ #õ\õYõ[õ.õ,uð ×Ñô#ó ð#õ	*õEõ(1÷&Br&   