+
    jHàj>  ã                  óÂ  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
Ht ]P                  ! ]4      t]! 4       tR]R&   ]! 0 R3m4      tRtR4tR R	 ltR
 R ltR R ltR R ltR R ltR R ltR R ltR R ltRR/R R lltR R ltR R lt R R  lt!R!]"/R" R# llt#R$ R% lt$R& R' lt%R( R) lt&R*R/R+ R, llt'R- R. lt(R!]"/R/ R0 llt)R!R/R1 R2 llt*R# )5uD  Move a user from a memory provider that left core onto its catalog plugin.

A bundled ``plugins/memory/<name>`` that becomes a standalone catalog plugin keeps the same provider
name, the settings it already read, its data directory and tool names, so the migration is only
"the code now lives under ``HERMES_HOME/plugins/<name>``". Two hooks call :func:`migrate_home`:

* ``hermes update`` â€” for every profile home that shares the venv (primary; runs where the venv was
  just rebuilt anyway).
* agent init â€” when the configured provider cannot be found at all, once per process (Desktop
  users update through the app and never run ``hermes update`` by hand). After a failed attempt,
  starts skip it for :data:`STARTUP_RETRY_SECONDS`, doubling with each further failure up to
  :data:`STARTUP_RETRY_MAX_SECONDS` (``hermes update`` always retries): every ``hermes chat``, cron
  run and Desktop restart otherwise paid the network round trip again and showed the same failure.

Both install the catalog entry at its reviewed pin through the normal plugin install path (kill
list, dependency constraints, enable), never a custom source. Every outcome â€” installed, refused,
failed, absent from the catalog â€” reaches the user (terminal, Desktop, chat platform), never only
``agent.log``: a provider that silently stays missing is lost memory.
)ÚannotationsN)ÚPath)ÚCallableÚOptionalzset[tuple[str, str]]Ú
_attemptedg      ¬@c               ó$   € V ^8„  d   QhRRRRRR/# )é   Úhomer   ÚpluginÚstrÚreturn© )Úformats   "ÚI/home/ubuntu/.hermes/hermes-agent/hermes_cli/memory_provider_migration.pyÚ__annotate__r   -   s!   € ÷ 9ñ 9˜ð 9 sð 9¨tñ 9ó    c                ó*   € V R,          RV R2,          # )zeWritten on every failed automatic install: its mtime and failure count gate the next startup attempt.Úcachez
left-core-z.failedr   ©r	   r
   s   &&r   Ú_failure_stampr   -   s   € à�'�>˜j¨¨°Ð8Õ8Ð8r   c               ó    € V ^8„  d   QhRRRR/# )r   Ústampr   r   Úintr   )r   s   "r   r   r   2   s   € ÷ .ñ .˜$ð . 3ñ .r   c                ó®   €  V P                  RR7      P                  4       pTP                  4       '       d   \	        T4      # ^#   \         d     ^ # i ; i)z^Consecutive failures recorded in *stamp*; the empty stamp an older Hermes touched counts once.z	utf-8-sig©Úencoding)Ú	read_textÚstripÚOSErrorÚisdigitr   )r   Útexts   & r   Ú_failure_countr!   2   sO   € ðØ�‰¨ˆÓ4×:Ñ:Ó<ˆð Ÿ™ŸšŒ3ˆt‹9Ð-¨AÐ-øô ô Úðús   ‚ A ÁAÁAc               ó$   € V ^8„  d   QhRRRRRR/# ©r   r	   r   r
   r   r   ÚNoner   )r   s   "r   r   r   ;   s&   € ÷ Pñ P˜ð P cð P¨dñ Pr   c                ó  € \        W4      p VP                  P                  R R R7       VP                  \	        \        V4      ^,           4      RR7       R#   \         d"   p\        P                  RY4        Rp?R# Rp?ii ; i)T)ÚparentsÚexist_okzutf-8r   z,left-core retry stamp not written for %s: %sN)	r   ÚparentÚmkdirÚ
write_textr   r!   r   ÚloggerÚdebug)r	   r
   r   Úexcs   &&  r   Ú_note_failurer.   ;   so   € Ü˜4Ó(€EðPØ�‰×Ñ 4°$ÐÔ7Ø×Ñœœ^¨EÓ2°QÕ6Ó7À'ÐÖJøÜô PÜ�‰ÐCÀT×OÒOûðPús   �A	A ÁBÁ#A?Á?Bc               ó$   € V ^8„  d   QhRRRRRR/# )r   r	   r   r
   r   r   Úboolr   )r   s   "r   r   r   D   s&   € ÷ ]ñ ]˜4ð ]¨ð ]°ñ ]r   c                ó(  € \        W4      p \        P                  ! 4       VP                  4       P                  ,
          p\        \        T4      ^ 4      pT\        \        ^T^,
          ,          ,          \        4      8  #   \         d     R # i ; i)F)	r   ÚtimeÚstatÚst_mtimer   Úminr!   ÚSTARTUP_RETRY_SECONDSÚSTARTUP_RETRY_MAX_SECONDS)r	   r
   r   ÚageÚfailuress   &&   r   Ú_failed_recentlyr:   D   sv   € Ü˜4Ó(€EðÜ�iŠi‹k˜EŸJ™J›L×1Ñ1Õ1ˆô ”> %Ó(¨"Ó-€HØ”Ô*¨Q°8¸aµ<Õ-@Õ@ÔB[Ó\Ñ\Ð\øô ô Úðús   �4B ÂBÂBc               ó$   € V ^8„  d   QhRRRRRR/# r#   r   )r   s   "r   r   r   N   s!   € ÷ 9ñ 9˜ð 9 cð 9¨dñ 9r   c                ó<   € \        W4      P                  RR7       R# )zXA later failure (the plugin removed, then missed again) starts the backoff from an hour.T)Ú
missing_okN)r   Úunlinkr   s   &&r   Ú_note_successr?   N   s   € ä�4Ó ×'Ñ'°4Ð'Ö8r   c               ó    € V ^8„  d   QhRRRR/# ©r   r	   r   r   r   r   )r   s   "r   r   r   S   s   € ÷ 5ñ 5˜dð 5 sñ 5r   c                óÈ   € ^ RI Hp V! V 4      ;'       g    / P                  R4      ;'       g    / p\        VP                  R4      ;'       g    R4      P	                  4       # )z<``memory.provider`` of *home*'s effective config, or ``""``.)Úread_home_selectionÚmemoryÚproviderÚ )Úpm.plugins_staterC   Úgetr   r   )r	   rC   rD   s   &  r   Úconfigured_providerrI   S   sO   € å4Ù! $Ó'×-Ð-¨2×2Ñ2°8Ó<×BÐBÀ€FÜˆv�z‰z˜*Ó%×+Ð+¨Ó,×2Ñ2Ó4Ð4r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Únamer   r	   r   r   r0   r   )r   s   "r   r   r   Z   s!   € ÷ 
*ñ 
*˜3ð 
* dð 
*¨tñ 
*r   c                ón   € ^ RI Hp ^ RIHpHp V! V4      p V! V 4      RJV! V4       #   T! T4       i ; i)zíTrue when the provider resolves anywhere Hermes looks for *home* (bundled, that home's user
plugins, entry point). The lookup reads the active home, so it is bound explicitly: the update
hook walks several profile homes from one process.)Úfind_provider_dir©Úreset_hermes_home_overrideÚset_hermes_home_overrideN)Úplugins.memoryrM   Úhermes_constantsrO   rP   )rK   r	   rM   rO   rP   Útokens   &&    r   Úprovider_presentrT   Z   s8   € õ 1ßUÙ$ TÓ*€Eð*Ù  Ó&¨dÐ2á" 5Õ)øÑ" 5Õ)ús   ˜	* ª
4c               ó    € V ^8„  d   QhRRRR/# )r   rK   r   r   úOptional[str]r   )r   s   "r   r   r   g   s   € ÷ 5ñ 5˜ð 5 ñ 5r   c                óB   € ^ RI Hp V! V 4      pVe   VP                  # R# )zZThe catalog entry that ships provider *name*, or None when the catalog has no such plugin.)Úget_live_catalog_entryN)Úhermes_cli.plugin_catalogrX   rK   )rK   rX   Úentrys   &  r   Úcatalog_sourcer[   g   s#   € å@Ù" 4Ó(€EØÒ*ˆ5�:‰:Ð4°Ð4r   Úcategoryc               ó$   € V ^8„  d   QhRRRRRR/# )r   rK   r   r\   rV   r   r   )r   s   "r   r   r   n   s!   € ÷ 5ñ 5˜sð 5°ð 5È-ñ 5r   c               óº   €  ^ RI Hp V '       d	   V! V 4      MRpTe   Te   TP                  T8w  d   R# ^ RIHp \        Y! 4       4      #   \         d     R# i ; i)uÎ  ``hermes [-p <profile>] plugins install <name>`` when this checkout's catalog ships plugin
*name* (of *category*, when given), else None.

Recovery copy for a provider that left core and is not installed (offline, lazy installs off, a
failed migration): doctor, ``memory status``, ``memory setup <name>`` and the CLI's unknown-command
error point at the one command that fixes it. In-tree catalog only, never the network â€” these run
offline and on error paths.)Úget_catalog_entryN)Úget_hermes_home)rY   r_   Ú	Exceptionr\   rR   r`   Ú_install_command)rK   r\   r_   rZ   r`   s   &$   r   Úcatalog_install_hintrc   n   sZ   € ðÝ?ß+/Ñ! $Ô'°Tˆð ‚}˜Ò-°%·.±.ÀHÔ2LÙÝ0Ü˜D /Ó"3Ó4Ð4øô ô Úðús   ‚A �
A ÁAÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   r	   r   ÚsayúCallable[[str], None]r   rV   r   )r   s   "r   r   r   �   s"   € ÷ ñ ˜Dð Ð*?ð ÀMñ r   c               ó    € \        V 4      p^ RIHp V! V4      '       g   \        W 4      '       d   R# \	        V4      f   V! RV R24       R# V# )z�The provider *home* needs from the catalog, or None (nothing to do, or a catalog miss already
reported through *say*). Read-only.)Úis_core_memory_providerNõ     âš  Memory provider 'z�' is configured but not installed and not in the plugin catalog. Install it with `hermes plugins install <source>` or change memory.provider.)rI   Úagent.memory_providerrh   rT   r[   )r	   re   rK   rh   s   &$  r   Ú_pending_providerrk   �   sY   € ô ˜tÓ$€DÝ=Ù˜t×$Ò$Ô(8¸×(DÒ(DÙÜ�dÓÒ#ÙÐ% d Vð ,[ð \ô 	]áØ€Kr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rK   r   r	   r   r   r   )r   s   "r   r   r   �   s!   € ÷ 	9ñ 	9˜3ð 	9 dð 	9¨sñ 	9r   c                ór   € ^ RI Hp ^ RIHp V! V4      pVe   VR8X  d   V! 4       R8X  d   RV  2# RV RV  2# )a
  The exact command that installs *name* into *home*. ``-p`` is dropped only for the default
home while no sticky profile is set: a bare command run from a shell targets the sticky
profile, never the home of the agent (Desktop, gateway, ``hermes -p``) that printed it.)Úget_active_profile©Úprofile_name_for_homeÚdefaultzhermes plugins install z
hermes -p z plugins install )Úhermes_cli.profilesrn   rR   rp   )rK   r	   rn   rp   Úprofiles   &&   r   rb   rb   �   sL   € õ 7Ý6Ù# DÓ)€GØ‚˜7 iÔ/Ñ4FÓ4HÈIÔ4UØ(¨¨Ð/Ð/Ø˜�yÐ 1°$°Ð8Ð8r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r	   r   rK   r   ÚinstallúCallable[[str], dict]re   rf   r   r0   r   )r   s   "r   r   r   ›   s2   € ÷ ñ ˜4ð  sð Ð8Mð Ø/ðØ48ñr   c               óL  €  V! V4      pVP                  R 4      '       d   V! RV R24       R# \        VP                  R4      ;'       g    R4      P                  R4      pV! R	V R
V R\	        W4       R24       R#   \          d   pR RR\        T4      /p Rp?L”Rp?ii ; i)ÚokFÚerrorNu     âœ“ Memory provider 'u§   ' moved out of core â€” installed its plugin from the catalog (memory.provider and your stored memories are unchanged; check its settings with `hermes memory status`).Tzunknown errorz. ri   z>' moved out of core and could not be installed automatically: z. Run `ú`.)ra   r   rH   Úrstriprb   )r	   rK   ru   re   Úresultr-   ry   s   &&$$   r   Ú_install_pendingr}   ›   s·   € ð2Ù˜“ˆð ‡z�z�$×ÒÙÐ% d Vð ,'ð (ô 	)ñ Ü�—
‘
˜7Ó#×6Ð6 Ó7×>Ñ>¸tÓD€EÙÐ
! $ Ð'eØˆ'�Ô)¨$Ó5Ð6°bð	:ô ;áøô ô 2Ø˜˜w¬¨C«Ð1�ûð2ús   ‚A? Á?B#Â
BÂB#re   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r	   r   ru   rv   re   rf   r   rV   r   )r   s   "r   r   r   ¬   s1   € ÷ 
Tñ 
T�tð 
TÐ)>ð 
TÐEZð 
TÐgtñ 
Tr   c               óT   € \        WR7      pVf   R# \        WWR7      '       d   V# R# )a4  Install the configured provider's catalog plugin into *home* when the provider is gone.

Returns the installed plugin name, or None when nothing needed doing or the install could not
happen (already reported through *say*). Never raises: memory being down must not take the
update or the agent down with it.
©re   N©ru   re   )rk   r}   )r	   ru   re   rK   s   &$$ r   Úmigrate_homer‚   ¬   s-   € ô ˜TÔ+€DØ‚|ÙÜ# D¸×IÓIˆ4ÐSÈtÐSr   c               ó   € V ^8„  d   QhRR/# ©r   r   r0   r   )r   s   "r   r   r   ¹   s   € ÷ kñ k�dñ kr   c                 óò   € \         P                  R J;'       d_    \         P                  R J;'       dE    \         P                  P                  4       ;'       d    \         P                  P                  4       # ©N)ÚsysÚstdinÚstdoutÚisattyr   r   r   Ú_interactiver‹   ¹   sO   € Ü�9‰9˜DÐ ×jÐj¤S§Z¡Z°tÐ%;×jÐjÄÇ	Á	×@PÑ@PÓ@R×jÐjÔWZ×WaÑWa×WhÑWhÓWjÐjr   c               ó   € V ^8„  d   QhRR/# r„   r   )r   s   "r   r   r   ½   s   € ÷ :ñ :˜Tñ :r   c                 óJ   € ^ RI Hp  \        4       '       * ;'       d    V ! 4       # )aª  Without a terminal (Desktop, gateway, ``hermes update`` from a script) nobody can answer the
dependency prompt, so every provider that declares Python deps would fail to migrate. The
configured ``memory.provider`` plus ``security.allow_lazy_installs`` (read for the active home,
i.e. the one being migrated) is the same consent that let the bundled provider install its deps
on demand; with a terminal the user is still asked.©Úlazy_installs_allowed)Ú
pm.installr�   r‹   rŽ   s    r   Ú_unattended_consentr‘   ½   s   € õ 1ä‹~Ô×9Ð9Ñ"7Ó"9Ð9r   c               ó    € V ^8„  d   QhRRRR/# )r   r	   r   r   r0   r   )r   s   "r   r   r   È   s   € ÷ *ñ *˜ð * ñ *r   c                ób   € ^ RI HpHp V! V 4      p \        4       V! V4       #   T! T4       i ; i)é    rN   )rR   rO   rP   r‘   )r	   rO   rP   rS   s   &   r   Ú_home_consentr•   È   s,   € ßUÙ$ TÓ*€Eð*Ü"Ó$á" 5Õ)øÑ" 5Õ)ús   ’	$ ¤
.Úconsentc               ó$   € V ^8„  d   QhRRRRRR/# )r   r	   r   r–   zOptional[bool]r   rv   r   )r   s   "r   r   r   Ñ   s"   € ÷ ñ ˜ð ¨.ð ÐDYñ r   c               ó   a a€ R  VV 3R llpV# )c               ó    € V ^8„  d   QhRRRR/# )r   rK   r   r   Údictr   )r   s   "r   r   Ú#_install_into.<locals>.__annotate__Ò   s   € ÷ 	.ñ 	.�sð 	.˜tñ 	.r   c                ó´   <€ ^ RI Hp ^ RIHpHp V! S4      p T! RRRT Sf   V \
        9   ;'       d    \        4       MSR7      V! V4       #   T! T4       i ; i)r”   )Údashboard_install_pluginrN   rF   FT)ÚforceÚenableÚcatalog_nameÚassume_deps_consent)Úhermes_cli.plugins_cmdr�   rR   rO   rP   Ú
_LEFT_COREr‘   )rK   r�   rO   rP   rS   r–   r	   s   &    €€r   Ú_installÚ_install_into.<locals>._installÒ   s_   ø€ ÝCßYÙ(¨Ó.ˆð	.Ù+¨B°eÀDÐW[à/6ªð BFÌÑAS×AmÐAmÔXkÓXmøØDKôMñ ' uÕ-øÑ& uÕ-ús   ™A ³A Á
Ar   )r	   r–   r¤   s   fd r   Ú_install_intor¦   Ñ   s   ù€ ÷	.ñ 	.ð €Or   c               ó    € V ^8„  d   QhRRRR/# rA   r   )r   s   "r   r   r   ß   s   € ÷ <ñ <�dð <˜sñ <r   c                óP   € ^ RI Hp V! V 4      pV'       d   RV R2# \        V 4      # )r”   ro   z	profile 'Ú')rR   rp   r   )r	   rp   rs   s   &  r   Ú_home_labelrª   ß   s)   € Ý6Ù# DÓ)€Gß%,ˆY�w�i˜qÐ!Ð;´#°d³)Ð;r   c               ó    € V ^8„  d   QhRRRR/# )r   re   rf   r   z	list[str]r   )r   s   "r   r   r   å   s   € ÷ 1ñ 1Ð3ð 1À	ñ 1r   c                ó6  a a€ ^ RI Hp ^ RIHp R V 3R llp/ pV! 4        Fa  p \	        WS! V4      R7      o\        S4      ;'       d    \        V4      pS'       g   K>  TP                  ST3. 4      P                  T4       Kc  	  . p VP                  4        EF  w  w  orš\        V
4      ^8”  dB   \        4       '       d2   S ! RS R	\        V
4       R
RP                  R V
 4       4       R24       V! 4       ;_uu_ 4        \!        V
4       F›  w  rµ\#        VS\%        V4      V! V4      R7      '       d   VP                  S4       K<  W«^,           R pV'       dM   S ! RS RRP                  R V 4       4       R2RP                  V3R lV 4       4      ,           R,           4        M	  RRR4       EK  	  V#   \         d#   p\        P                  RYW4        Rp?EKÃ  Rp?ii ; i  + '       g   i     EKe  ; i  \&         d    S ! R4        T# i ; i)aÓ  ``hermes update`` hook: every profile home sharing this venv. Returns installed plugin names.

Each line names the profile it is about. Homes missing the same provider share one environment,
so they share one set of dependency answers (#125794): the first install asks, the rest reuse
its answers. Homes are grouped by provider AND by their unattended consent (each home's own
``security.allow_lazy_installs``), so a refusal only speaks for homes that would be refused the
same way: when an install in a group fails, the rest of that group are named in one line
instead of failing (or re-prompting) one by one, and the other groups still migrate. Ctrl-C
ends the migration with a message, not a traceback into the updater.
)Úshared_dependency_answers)Údependency_homesc               ó    € V ^8„  d   QhRRRR/# )r   r	   r   r   rf   r   )r   s   "r   r   Ú'migrate_all_homes.<locals>.__annotate__ó   s   € ÷ Rñ R�tð RÐ 5ñ Rr   c                ó   <a € V V3R  l# )c                óN   <€ S! R \        S4       RV P                  4        24      # )z  [z] )rª   Úlstrip)Úmessager	   re   s   &€€r   Ú<lambda>Ú5migrate_all_homes.<locals>.labelled.<locals>.<lambda>ô   s%   ø€ ™s S¬°TÓ):Ð(;¸2¸g¿n¹nÓ>NÐ=OÐ#PÔQr   r   )r	   re   s   f€r   ÚlabelledÚ#migrate_all_homes.<locals>.labelledó   s	   ù€ ÝQÐQr   r€   z,memory provider migration skipped for %s: %sNz  Memory provider 'z' is configured in z profiles (z, c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir†   ©rª   ©Ú.0Úhs   & r   Ú	<genexpr>Ú$migrate_all_homes.<locals>.<genexpr>  s   é € Ð!@¹%°Q¤+¨a§. .»%ùó   ‚zA); your answers to its dependency questions apply to all of them.r�   ri   z' was not installed for c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir†   rº   r»   s   & r   r¾   r¿     s   é € Ð(FÁ¸A¬°Q¯¨ÃùrÀ   z either. Run c              3  óD   <"  € T F  pR \        SV4       R 2x € K  	  R# 5i)Ú`N)rb   )r¼   r½   rK   s   & €r   r¾   r¿     s%   øé € Ð'WÑRVÈQ¨!Ô,<¸TÀ1Ó,EÐ+FÀaÕ(HÓRVùs   ƒ Ú.uŸ     âš  Memory provider migration cancelled. Profiles already migrated keep their plugin; run `hermes plugins install <name>` (with `-p <profile>`) for the rest.)Úhermes_cli.plugins_cmd_installr­   rG   r®   rk   r0   r•   ra   r+   r,   Ú
setdefaultÚappendÚitemsÚlenr‹   ÚjoinÚ	enumerater}   r¦   ÚKeyboardInterrupt)re   r­   r®   r·   Úpendingr	   r–   r-   Ú	installedÚ_consentÚhomesÚindexÚrestrK   s   d            @r   Úmigrate_all_homesrÓ   å   s  ù€ õ IÝ1÷Rð Rð 35€GÙ Ö"ˆð	Ü$ T¨x¸«~Ô>ˆDÜ˜4“j×8Ð8¤]°4Ó%8ˆG÷ ‰4Ø×Ñ  g˜°Ó3×:Ñ:¸4Ö@ñ #ð €IðWØ'.§}¡}§Ñ#ÑˆT�8Ü�5‹z˜AŒ~¤,§.¢.ÙÐ)¨$¨Ð/BÄ3ÀuÃ:À,ð OØŸ	™	Ñ!@¹%Ó!@Ó@ÐAð B6ð7ô 8ñ +×,Õ,Ü#,¨UÖ#3‘K�EÜ'¨¨d¼MÈ$Ó<OÑU]Ð^bÓUc×dÓdØ!×(Ñ(¨Ô.Ù Ø ¨¥ Ð,�DßÙÐ5°d°VÐ;SØ#Ÿy™yÑ(FÁÓ(FÓFÐGÀ}ðVà"Ÿi™iÔ'WÑRVÓ'WÓWõXàZ]õ^ô _ñ ñ $4÷ -Ò,ñ (7ð& Ðøô7 ô 	Ü�L‰LÐGÈÔSÞûð	ú÷ -×,Ñ,ûô ô WÙð Võ 	WàÐðWúsC   ¥0F<Â	A9H ÄB+G,Æ-H Æ<G)ÇG$Ç$G)Ç,G>Ç7
H ÈHÈHc               ó$   € V ^8„  d   QhRRRRRR/# )r   rK   r   re   zOptional[Callable[[str], None]]r   r0   r   )r   s   "r   r   r     s#   € ÷ ,ñ ,˜Sð ,Ð*Ið ,ÐUYñ ,r   c          	     ó$  a€ ^ RI HpHp V! 4       pV! V4      V 3pV\        9   d   R# \        P	                  V4       R V3R llp^ RIHp V! 4       '       g   V! RV  R\        W4       R24       R# V \        9  d,   \        WFR	7      V 8X  d   V! RV  R
\        W4       R24       R# \        W@4      '       d   V! RV  R\        W4       R24       R# \        V\        VRR7      VR7      V 8H  pV'       d   \        W@4       V# \        W@4       V# )zÃAgent-init hook for a configured provider that resolved nowhere. One attempt per process per
home and name; honours ``security.allow_lazy_installs`` because it installs code. True when installed.)r`   Úhermes_home_keyFc               ó    € V ^8„  d   QhRRRR/# )r   r´   r   r   r$   r   )r   s   "r   r   Ú(recover_at_startup.<locals>.__annotate__$  s   € ÷ Tñ T˜ð T ñ Tr   c                ó¢   <€ \         P                  V 4       Se    S! V 4       R # R #   \         d    \         P                  RRR7        R # i ; i)Nz$Memory migration notification failedT)Úexc_info)r+   Úwarningra   r,   )r´   re   s   &€r   ÚreportÚ"recover_at_startup.<locals>.report$  sJ   ø€ Ü�‰�wÔØŠ?ðTÙ�G–ñ øô ô TÜ—‘ÐCÈd�×SðTús   œ( ¨"AÁArŽ   u   âš  Memory provider 'z†' is not installed, so external memory is off for this session. security.allow_lazy_installs is off, so Hermes did not fetch it: run `rz   r€   zŒ' is not installed, so external memory is off for this session. It never shipped with Hermes, so Hermes installs it only when you ask: run `zl' is not installed, so external memory is off for this session. Its automatic install failed recently: run `T)r–   r�   )rR   r`   rÖ   r   Úaddr�   r�   rb   r£   rk   r:   r‚   r¦   r?   r.   )	rK   re   r`   rÖ   r	   ÚkeyrÜ   r�   rÎ   s	   &d       r   Úrecover_at_startuprà     s4  ø€ ÷ BáÓ€DÙ˜4Ó  $Ð
'€CØ
ŒjÔÙÜ‡N�N�3Ô÷Tð Tõ 1Ù ×"Ò"ÙÐ& t fð -ä'¨Ó3Ð4°Bð8ô 	9ñ ð
 ”:ÔÜ˜TÔ.°$Ô6ÙÐ*¨4¨&ð 1ä+¨DÓ7Ð8¸ð<ô =ñ Ü˜×#Ò#ÙÐ& t fð ->Ü>NÈtÓ>ZÐ=[Ð[]ð_ô 	`áÜ˜T¬=¸ÀtÔ+LÐRXÔYÐ]aÑa€IßÜ�dÔ!ð Ðô 	�dÔ!ØÐr   >   Úmem0ÚhonchoÚretaindbÚ	byteroverÚ	hindsightÚ
openvikingÚholographicÚsupermemoryg     u"A)+Ú__conditional_annotations__Ú__doc__Ú
__future__r   Úloggingr‡   r2   Úpathlibr   Útypingr   r   Ú	getLoggerÚ__name__r+   Úsetr   Ú__annotations__Ú	frozensetr£   r6   r7   r   r!   r.   r:   r?   rI   rT   r[   rc   rk   rb   r}   Úprintr‚   r‹   r‘   r•   r¦   rª   rÓ   rà   )ré   s   @r   Ú<module>rõ      sê   øðôõ( #ã Û 
Û Ý ß %à	×	Ò	˜8Ó	$€á#&£5€
Ð Ó (ñ
 Ò{Ó|€
ð
 Ð Ø+Ð õ9õ
.õPõ]õ9õ
5õ
*õ5ð5À÷ 5õ&õ	9õð"
TÐ]b÷ 
Tõkõ:õ*ð¸4÷ õ<ð1°e÷ 1ðh,ÈD÷ ,ñ ,r   