+
    „WÝj¬  ã                  ó  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	H
t
HtHtHtHt ^ RIHt ]P"                  ! ]4      t^tR R ltR tR tR	 tR
 R ltR R ltRR RR/R R lltR R ltR R ltR R ltR R lt] ! 0 R�m4      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+ lt)R, R- lt*R. R/ lt+R0 R1 lt,R2 R3 lt-R4 R5 lt.R6 R7 lt/R8 R9 lt0R: R; lt1R‚t2R< R= lt3. ^]3N^]3N^]"3N^]#3N^]$3N^]&3N^]'3N^]! R>R?^^R@RARB7      3N^](3N^]Ph                  ! ]RCRDRRERF RGRHRI7      3N^ ]! RCRDRERRGRJRK RL7      3N^!])3N^"]*3N^#]Ph                  ! ]RMRN]! RO4      RPRQRRRS7      3N^$]! RTRU^2^úRVRWRB7      3N^%]! RTRX^^
RYRZRB7      3N^&]+3N^'],3N^(]! R>R?^RR[R\R] RL7      3N^)]-3N^*]Ph                  ! ]R^R_RR` RaRbRc7      3N^+]Ph                  ! ]RdReRRf RgRhRi Rj7      3N^,]! RkRl^^RmRnRB7      3N^,]! RkRo^Z^RpRqRB7      3N^-].3N^.]/3N^/]! RrRsRtRRuRvRB7      3N^0]03N^1]13N^2]33N^3]Ph                  ! ]R^RwRRx RyRzR{ Rj7      3N5t5R|]6R}&   ] ! 0 Rƒm4      t7] ! ^.^204      t8R~R/R R€ llt9R# )„aF  Table-driven config migration registry.

Each step is ``_migrate_to_N(results, quiet)``; the version gate and strict ascending order live
in :func:`run_migrations`. Every write goes through ``hermes_cli.config._persist_migration`` so a
step may only persist values that differ from the schema default (plus removals/renames).
)ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)Úurlparsec               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "ÚPC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\config_migrations.pyÚ__annotate__r      s   € ÷ 	*ñ 	*˜sñ 	*ó    c                 ó@   € ^ RI Hp  R\         RV ! 4        R\         R2# )z@Human-facing explanation shown when a config is below the floor.©Údisplay_hermes_homezThis config predates version z< (~2 years old) and can no longer be auto-migrated. Back up zT/config.yaml and run `hermes setup` to regenerate, or manually set _config_version: z after reviewing the changelog.)Úhermes_constantsr   ÚSUPPORT_FLOOR_VERSIONr   s    r   Úsupport_floor_messager      s9   € å4ð (Ô(=Ð'>ð ?7áÓ Ð
!ð "8Ü8MÐ7Nð O)ð	)ð*r   c                 ó   € ^ RI Hp  V # )zVReturn the live ``hermes_cli.config`` module (lazy, cycle-free, monkeypatch-friendly).©Úconfig)Ú
hermes_clir   r   s    r   Ú_cfgr   '   s
   € å!à€Mr   c                 ó2   € \        4       P                  4       # ©N)r   Úread_raw_configr   r   r   r    r    .   s   € Ü‹6×!Ñ!Ó#Ð#r   c                ó8   € \        4       P                  V 4       R # r   )r   Ú_persist_migrationr   s   &r   r"   r"   2   s   € ÜƒF×Ñ˜fÖ%r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   údict[str, Any]Úkeyr   r   r   )r   s   "r   r   r   6   s!   € ÷ 4ñ 4�^ð 4¨#ð 4°.ñ 4r   c                óX   € V P                  V4      p\        V\        4      '       d   V# / # )zY``config[key]`` when it is a mapping (same object, so writes alias), else a fresh ``{}``.©ÚgetÚ
isinstanceÚdict)r   r%   Úvalues   && r   Ú_dict_atr,   6   s&   € à�J‰J�s‹O€EÜ˜u¤d×+Ò+ˆ5Ð3°Ð3r   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   r   r$   ÚresultsÚquietÚboolÚaddedzOptional[str]Úmessager   ÚNoner   )r   s   "r   r   r   <   sD   € ÷ ñ Øðàðð ðð ð	ð
 ðð
  $ñr   c                óš   € \        V 4       V'       d   VR,          P                  V4       V'       d   V'       g   \        V4       R# R# R# )zYPersist *config*, record *added* under ``config_added`` and print *message* unless quiet.Úconfig_addedN)r"   ÚappendÚprint)r   r.   r/   r1   r2   s   &&&&&r   Ú_commitr8   <   s5   € ô �vÔßØ�Õ×&Ñ& uÔ-ß—uÜˆgŽñ �wr   Úextra_guardc                ó   € R # ©Tr   )Ú_ms   &r   Ú<lambda>r=   T   s   € ¹tr   Úcreate_sectionFc               óD   € V ^8„  d   QhRRRRRRRRRR	R
RRRRRRRRRRR/# )r   r.   r$   r/   r0   Úsectionr   r%   ÚmatchúCallable[[Any], bool]Únewr   r1   r2   r9   z Callable[[dict[str, Any]], bool]r>   r   r3   r   )r   s   "r   r   r   J   sv   € ÷ 8ñ 8Øð8àð8ð ð	8ð
 
ð8ð !ð8ð 
ð8ð ð8ð ð8ð 2ð8ð ð8ð &*ñ8r   c               ó  € \        4       p
V
P                  V4      p\        V\        4      '       g   V	'       g   R# / pV! VP                  V4      4      '       d/   V! V4      '       d   Vf   W³ MW[V&   WºV&   \	        W WV4       R# R# R# )z‰Rewrite ``<section>.<key>`` to *new* (None = delete) when ``match(current)`` holds; a
missing section is skipped unless *create_section*.N)r    r(   r)   r*   r8   )r.   r/   r@   r%   rA   rC   r1   r2   r9   r>   r   Úraws   &&$$$$$$$$  r   Ú_rewrite_keyrF   J   s{   € ô Ó€FØ
�*‰*�WÓ
€CÜ�cœ4× Ò ßÙØˆÙˆS�W‰W�S‹\×Ò™{¨3×/Ò/ØŠ;Ø‘à�‰HØˆw‰Ü� ¨wÖ7ñ  0Ñr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úoldr   Úkwr   z&Callable[[dict[str, Any], bool], None]r   )r   s   "r   r   r   g   s'   € ÷ Oñ O 3ð O¨cð OÐ6\ñ Or   c                óF   a € \         P                  ! \        3RV 3R l/VB # )u    Step rewriting a key only while it still equals the OLD default â€” never clobbers a value
the user customized; unset keys inherit the new default at read time.rA   c                ó   <€ V S8H  # r   r   )ÚcurrH   s   &€r   r=   Ú(_rewrite_stale_default.<locals>.<lambda>j   s	   ø€ ¸SÀCºZr   )Ú	functoolsÚpartialrF   )rH   rI   s   d,r   Ú_rewrite_stale_defaultrP   g   s!   ø€ ô ×Òœ\ÑNÔ1GÐNÈ2ÑNÐNr   c               ó    € V ^8„  d   QhRRRR/# )r   Úwordr   r   rB   r   )r   s   "r   r   r   m   s   € ÷ Lñ L�Cð LÐ1ñ Lr   c                ó   a € V 3R  l# )c                óv   <€ \        V \        4      ;'       d"    V P                  4       P                  4       S8H  # r   )r)   r   ÚstripÚlower)rL   rR   s   &€r   r=   Ú_lower_is.<locals>.<lambda>n   s+   ø€ ”z #¤sÓ+×KÐK°·	±	³×0AÑ0AÓ0CÀtÑ0KÐKr   r   )rR   s   fr   Ú	_lower_isrX   m   s	   ø€ ÜKÐKr   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r.   r$   r/   r0   r   r3   r   )r   s   "r   r   r   q   s&   € ÷ 7Nñ 7N˜Nð 7N°4ð 7N¸Dñ 7Nr   c           
     ó¨  € \        4       P                  p\        4       pVP                  R 4      p\	        V\
        4      '       d	   V'       g   R# \        VR4      p^ pV EFÈ  p\	        V\        4      '       g   K  VP                  RR4      p\	        V\        4      '       g   RpVP                  RR4      ;'       g7    VP                  RR4      ;'       g    VP                  RR4      ;'       g    Rp	V	'       g   K   VP                  4       P                  4       P                  RR	4      P                  R
R4      P                  RR4      p
\        P                  ! RR	V
4      P                  R	4      p
V
'       g1    \        V	4      P                  ;'       g    RP                  RR	4      p
T
pTpW¥9   d   V R	V 2p
V^,          pK  V! WzR7      pVf   EKy  V'       g   VP#                  RR4       VP                  R4      R9   d   VP#                  RR4       WÕV
&   V^,          pEKË  	  V^ 8”  dˆ   WSR&   VP#                  R R4       \%        V4       V'       g]   \'        RV R24       \        VP)                  4       4      V) R  F*  p
\'        RV
 RWZ,          P                  RR4       24       K,  	  R# R# R#   \          d
    RT 2p
 EL#i ; i)Úcustom_providersNÚ	providersÚnameÚ Úbase_urlÚurlÚapiÚ Ú-Ú(Ú)z-{2,}ÚendpointÚ.z	endpoint-)Úprovider_keyÚapi_keyu     âœ“ Migrated z) custom provider(s) to providers: sectionu       â†’ ú: >   r_   úno-keyúno-key-required)r   Ú)_custom_provider_entry_to_provider_configr    r(   r)   Úlistr,   r*   r   rU   rV   ÚreplaceÚreÚsubr	   ÚhostnameÚ	ExceptionÚpopr"   r7   Úkeys)r.   r/   rn   r   Úcustom_listÚproviders_dictÚmigrated_countÚentryÚold_nameÚold_urlr%   Úbase_keyÚsuffixÚ	new_entrys   &&            r   Ú_migrate_to_12r€   q   sŠ  € ä04³×0`Ñ0`Ð-äÓ€FØ—*‘*Ð/Ó0€KÜ�{¤D×)Ò)¯kÙÜ˜f kÓ2€NØ€NÜˆÜ˜%¤×&Ò&ÙØ—9‘9˜V RÓ(ˆÜ˜(¤C×(Ò(ØˆHØ—)‘)˜J¨Ó+×aÐa¨u¯y©y¸ÀÓ/C×aÐaÀuÇyÁyÐQVÐXZÓG[×aÐaÐ_aˆßÙð �n‰nÓ×$Ñ$Ó&×.Ñ.¨s°CÓ8×@Ñ@ÀÀbÓI×QÑQÐRUÐWYÓZˆÜ�fŠf�X˜s CÓ(×.Ñ.¨sÓ3ˆßð3Ü Ó(×1Ñ1×?Ð?°Z×HÑHÈÈcÓR�ð
 ˆØˆØÔ#Ø�J˜a ˜xÐ(ˆCØ�a�KŠFá=¸eÔVˆ	ØÒÚßØ�M‰M˜& $Ô'Ø�=‰=˜Ó#Ð'HÔHØ�M‰M˜) TÔ*à'�sÑØ˜!Õ‹ñG ðJ ˜ÔØ,ˆ{Ñà�
‰
Ð% tÔ,Ü˜6Ô"ßÜ�O NÐ#3Ð3\Ð]Ô^Ü˜N×/Ñ/Ó1Ó2°N°?Ð3CÓD�Ü˜   R¨Õ(;×(?Ñ(?ÀÀrÓ(JÐ'KÐLÖMó Eñ ñ øô+ ô 3Ø! .Ð!1Ð2“ð3ús   Å>J=ÆJ=Ê=KËKc               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   «   s!   € ÷ ñ ˜Nð °4ð ¸Dñ r   c                óÚ   € \        4       pR FH  p VP                  V4      '       d.   VP                  VR4       V'       g   \        RV R24       KF  KH  KJ  	  R#   \         d     K\  i ; i)Ú	LLM_MODELr_   u     âœ“ Cleared u>    from .env (no longer used â€” config.yaml is source of truth)N)rƒ   ÚOPENAI_MODEL)r   Úget_env_valueÚsave_env_valuer7   rt   )r.   r/   Ú_cÚdead_vars   &&  r   Ú_migrate_to_13r‰   «   sn   € ô 
‹€BÛ1ˆð	Ø×Ñ ×)Ò)Ø×!Ñ! (¨BÔ/ßÜ˜N¨8¨*Ð4rÐsÖtñ ñ *ó 2øô ô 	Úð	ús   ‘0AÁAÁA*Á)A*c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   Á   s&   € ÷ eñ e˜Nð e°4ð e¸Dñ er   c                óî  aaa€ \        4       P                  R / 4      o\        S\        4      '       d   RS9   g   R# SR,          oSP                  RR4      p\        V\        4      '       g   Rp\        4       pVP                  R / 4      oSP                  RR4       R VVV3R llpVR9   d+   \        S\        4      '       d   S\        9   d	   V! R4       MV! V4       SVR &   \        W0VRR4       R# )	ÚsttÚmodelNÚproviderÚlocalc               ó    € V ^8„  d   QhRRRR/# )r   r@   r   r   r3   r   )r   s   "r   r   Ú$_migrate_to_14.<locals>.__annotate__Ð   s   € ÷ +ñ +˜ð + ñ +r   c                óÐ   <€ SP                  V / 4      p\        V\        4      '       d   R V9  d6   SP                  V 4      p\        V\        4      '       g   / ;pSV &   SVR &   R# R# )r�   Nr'   )r@   ÚexistingÚtargetÚlegacy_modelÚraw_sttrŒ   s   &  €€€r   Ú_placeÚ_migrate_to_14.<locals>._placeÐ   s_   ø€ Ø—;‘;˜w¨Ó+ˆÜ˜(¤D×)Ò)¨W¸HÔ-DØ—W‘W˜WÓ%ˆFÜ˜f¤d×+Ò+Ø(*Ð*�˜˜W™Ø*ˆF�7‹Oñ	 .Er   u;     âœ“ Migrated legacy stt.model to provider-specific config>   r�   Úlocal_command)r    r(   r)   r*   r   ru   Ú_LOCAL_WHISPER_MODELSr8   )r.   r/   rŽ   r   r—   r•   r–   rŒ   s   &&   @@@r   Ú_migrate_to_14r›   Á   sÙ   ú€ ô Ó×#Ñ# E¨2Ó.€GÜ�w¤×%Ò%¨'°WÔ*<ÙØ˜7Õ#€LØ�{‰{˜: wÓ/€HÜ�h¤×$Ò$ØˆÜÓ€FØ
�*‰*�U˜BÓ
€CØ‡G�GˆG�TÔ÷+ò +ð Ð-Ô-ä�l¤C×(Ò(¨\Ô=RÔ-RÙ�7ŒOøáˆxÔØ€Fˆ5�MÜØ˜ Ð&cöer   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ã   s&   € ÷ Uñ U˜Nð U°4ð U¸Dñ Ur   c                óÐ  € \        4       p\        VR 4      pVP                  R4      p\        V\        4      '       d	   V'       g   R# \        VR4      pVP                  4        F?  w  rgVP                  V4      p\        V\        4      '       g   / ;q…V&   RV9  g   K;  WxR&   KA  	  WSR&   W2R &   RP                  R VP                  4        4       4      p	\        W VRRV	 24       R# )	ÚdisplayÚtool_progress_overridesNÚ	platformsÚtool_progressú, c              3  ó4   "  € T F  w  rV R V 2x € K  	  R# 5i)Ú=Nr   )Ú.0ÚpÚms   &  r   Ú	<genexpr>Ú!_migrate_to_16.<locals>.<genexpr>ó   s   é € ÐFÑ0E©¨˜A˜3˜a ˜s�Ó0Eùs   ‚z9display.platforms (migrated from tool_progress_overrides)u>     âœ“ Migrated tool_progress_overrides â†’ display.platforms: )r    r,   r(   r)   r*   ÚitemsÚjoinr8   )
r.   r/   r   rž   Úold_overridesr    ÚplatÚmoder”   Úmigrateds
   &&        r   Ú_migrate_to_16r°   ã   sÙ   € äÓ€FÜ�v˜yÓ)€GØ—K‘KÐ 9Ó:€MÜ�}¤d×+Ò+·ÙÜ˜ +Ó.€IØ#×)Ñ)Ö+‰
ˆØ—‘˜tÓ$ˆÜ˜&¤$×'Ò'Ø')Ð)ˆF˜t‘_Ø &Ö(Ø&*�?Ó#ñ ,ð %ˆKÑØˆ9ÑØ�y‰yÑF°×0CÑ0CÔ0EÓFÓF€HÜØ˜ØCØ
HÈÈ
ÐSöUr   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ú   s!   € ÷ 7ñ 7˜Nð 7°4ð 7¸Dñ 7r   c                óÊ  € \        4       pVP                  R / 4      p\        V\        4      '       g   R# R Uu/ uF  qDVP	                  RV 2R4      bK  	  pp. pVP                  4        Fß  w  rGV'       d   \        V4      P                  4       MRpV'       d   VR8X  d
   VR8X  d   K@  VP                  R4      p	\        V	\        4      '       g   / ;q’R&   V	P                  R 4      p
\        V
\        4      '       g   / ;q©R &   V
P                  V4      pV'       d   VR8X  g   K¼  VR8X  g   KÅ  WŠV&   VP                  V RV 24       Ká  	  V'       gW   \        ;QJ d*    R VP                  4        4       F  '       g   K   R	M	  R
M! R VP                  4        4       4      '       d3   W2R &   V'       d   RRP                  V4       2MRp\        W VRV4       R# R# u upi )ÚcompressionNrŽ   Úsummary_r_   ÚautoÚ	auxiliaryr¤   c              3  ó(   "  € T F  qR Jx € K
  	  R # 5ir   r   )r¥   Úvs   & r   r¨   Ú!_migrate_to_17.<locals>.<genexpr>  s   é € ÐC±?¨a T�M³?ùs   ‚TFu@     âœ“ Migrated compression.summary_* â†’ auxiliary.compression: r¢   u/     âœ“ Removed unused compression.summary_* keys)r�   rŽ   r`   )r    r(   r)   r*   ru   rª   r   rU   r6   ÚanyÚvaluesr«   r8   )r.   r/   r   ÚcompÚkÚlegacyÚmigrated_keysrE   ÚvalÚauxÚaux_comprL   r2   s   &&           r   Ú_migrate_to_17rÃ   ú   sš  € ô Ó€FØ�:‰:�m RÓ(€DÜ�dœD×!Ò!ÙÙ9ZÓ[Ñ9Z°A�—‘˜H Q C˜.¨$Ó/Ò/Ñ9Z€FÐ[Ø€MØ—,‘,–.‰ˆß"%Œc�#‹h�n‰nÔ¨2ˆß�q˜J”¨3°&¬=ÙØ�j‰j˜Ó%ˆÜ˜#œt×$Ò$Ø(*Ð*ˆC˜Ñ%Ø—7‘7˜=Ó)ˆÜ˜(¤D×)Ò)Ø,.Ð.ˆH˜=Ñ)Ø�l‰l˜1‹oˆß�q˜J–¨3°&®=Ø�Q‰KØ× Ñ  A 3 a¨ u Ö.ñ !÷ Ÿ›ÑC°6·=±=´?ÓCŸŸšÑC°6·=±=´?ÓC×CÒCØ $ˆ}Ñ÷ ð OØ�y‰y˜Ó'Ð(ñ*à"Sð 	ô 	� ¨¨gÖ6ñ Dùò! \s   ¹G c               ó    € V ^8„  d   QhRRRR/# )r   ÚdisabledÚsetr   ú	list[str]r   )r   s   "r   r   r     s   € ÷ ñ  cð ¨iñ r   c                óÌ  € \        4       p. p VP                  4       R,          pVP                  4       '       dñ   \        VP	                  4       4       FÓ  pVP                  4       '       g   K  VR,          pVP                  4       '       g
   VR,          pVP                  4       '       g   K[   \        VRR7      ;_uu_ 4       pVP                  V4      ;'       g    / pRRR4       XP                  R4      ;'       g    TP                  pY€9  g   KÂ  TP                  T4       KÕ  	  V#   + '       g   i     LT; i  \         d    / p Lfi ; i  \         d    . u # i ; i)zSNames of plugins under ``$HERMES_HOME/plugins/`` with a manifest, minus *disabled*.Úpluginszplugin.yamlz
plugin.ymlú	utf-8-sig©ÚencodingNr^   )r   Úget_hermes_homeÚis_dirÚsortedÚiterdirÚexistsÚopenÚfast_safe_loadrt   r(   r^   r6   )	rÅ   r‡   ÚfoundÚuser_plugins_dirÚchildÚmanifest_fileÚ_mfÚmanifestr^   s	   &        r   Ú_installed_user_pluginsrÚ     s+  € ä	‹€BØ€EðØ×-Ñ-Ó/°)Õ;ÐØ×"Ñ"×$Ò$ÜÐ 0× 8Ñ 8Ó :Ö;�Ø—|‘|—~’~ÙØ %¨Õ 5�Ø$×+Ñ+×-Ò-Ø$)¨LÕ$8�MØ$×+Ñ+×-Ò-Ùð"Ü˜m°k×BÕBÀcØ#%×#4Ñ#4°SÓ#9×#?Ð#?¸R˜÷ Cð  —|‘| FÓ+×9Ð9¨u¯z©z�ØÖ'Ø—L‘L Ö&ñ <ð$ €L÷ C×Bûä ô "Ø!’Hð"ûô
 ô ØŠ	ðúsr   ŽA?E ÂE Â-E Â0E ÃD-Ã!E Ã)E ÄE ÄE Ä-D=Ä8E Ä<E Ä=E Å EÅE ÅEÅE ÅE#Å"E#c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   6  s&   € ÷ ]ñ ]˜Nð ]°4ð ]¸Dñ ]r   c           	     ó\  € \        4       p\        VR 4      pRV9   d   R# VP                  R. 4      ;'       g    . p\        \	        V\
        4      '       d   \        V4      M	\        4       4      pWSR&   W2R &   V'       d   R\        V4       R2MRp\        W VR\        V4       R2V4       R# )	rÉ   ÚenabledNrÅ   u(     âœ“ Plugins now opt-in: grandfathered z( existing plugin(s) into plugins.enabledum     âœ“ Plugins now opt-in: no existing plugins to grandfather. Use `hermes plugins enable <name>` to activate.z$plugins.enabled (opt-in allow-list, z grandfathered))	r    r,   r(   rÚ   r)   ro   rÆ   Úlenr8   )r.   r/   r   Úplugins_cfgrÅ   Úgrandfatheredr2   s   &&     r   Ú_migrate_to_21rá   6  s¹   € ô Ó€FÜ˜6 9Ó-€KØ�KÔÙØ�‰˜z¨2Ó.×4Ð4°"€HÜ+¼ZÈÔRV×=WÒ=W¬C°¬MÔ]`Ó]bÓc€MØ*�	ÑØ#ˆ9Ñ÷ ð 3Üˆ}ÓÐ
ÐFñ	Hð	:ð	 ô Ø˜Ø
.¬s°=Ó/AÐ.BÀ/ÐRÐT[ö]r   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   L  s&   € ÷ +Nñ +N˜Nð +N°4ð +N¸Dñ +Nr   c           	     óJ  € \        4       pVP                  p VP                  4       R ,          R,          pVP                  RRR7       \        4       pR R	 lp\        VR4      pV! WƒP                  R/ 4      4      p	V	'       d   W†R&   \        VR
4      p
\        V
R4      pV! W³P                  R
/ 4      P                  R/ 4      4      pV'       d	   WºR&   W¦R
&   V	'       g	   V'       d„   \        V4       RV	3RV33 Fj  w  rÞV'       g   K  V R,          P                  V R\        V4       R24       V'       d   K@  \        RVR8X  d   RMT RRP                  V4       R24       Kl  	  R# R#   \         d*   pT R,          P                  RX RT 24        Rp?ELTRp?ii ; i)ÚlogsÚcuratorT)ÚparentsÚexist_okÚwarningszCould not create rk   Nc               ó$   € V ^8„  d   QhRRRRRR/# )r   r@   r$   Údefaultsr   rÇ   r   )r   s   "r   r   Ú$_migrate_to_23.<locals>.__annotate__[  s!   € ÷ ñ ˜~ð ¸ð ÈIñ r   c                ó�   € V Uu. uF  q"V 9  g   K  VNK  	  ppV F!  p\         P                  ! W,          4      W&   K#  	  V# u upi r   )ÚcopyÚdeepcopy)r@   rê   r½   r1   s   &&  r   Ú_seed_missingÚ%_migrate_to_23.<locals>._seed_missing[  sC   € Ù$Ó9™H�q°Ñ(8—�™HˆÐ9ÛˆAÜŸš x¥{Ó3ˆG‹Jñ àˆùò :s
   …A’Ar¶   zauxiliary.curatorr5   z (z default key(s))u     âœ“ ÚCuratorz settings now available (r¢   u"   ) â€” edit via `hermes config set`)r   ÚDEFAULT_CONFIGrÍ   Úmkdirrt   r6   r    r,   r(   r"   rÞ   r7   r«   )r.   r/   r‡   rò   Úcurator_dirÚer   rï   Úraw_curatorÚadded_curatorÚraw_auxÚraw_aux_curatorÚ	added_auxÚlabelr1   s   &&             r   Ú_migrate_to_23rü   L  s¨  € ô 
‹€BØ×&Ñ&€NðKØ×(Ñ(Ó*¨VÕ3°iÕ?ˆØ×Ñ $°ÐÔ6ô Ó€Fõô ˜6 9Ó-€KÙ! +×/AÑ/AÀ)ÈRÓ/PÓQ€MßØ'ˆyÑä�v˜{Ó+€GÜ˜w¨	Ó2€OÙØ×+Ñ+¨K¸Ó<×@Ñ@ÀÈBÓOóQ€IçØ,�	ÑØ%ˆ{ÑçŸ	Ü˜6Ô"Ø'¨Ð7Ð:MÈyÐ9YÓZ‰LˆEßÙØ�NÕ#×*Ñ*¨e¨W°B´s¸5³z°lÐBRÐ+SÔTß‘5ÜØ¨%°9Ô*<™YÀ%ÐHð IØŸ	™	 %Ó(Ð)Ð)KðMöNó [ñ "øô1 ô KØ�
Õ×"Ñ"Ð%6°{°mÀ2ÀaÀSÐ#I×JÒJûðKús   ˜1E. Å.F"Å9FÆF"c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   z  s&   € ÷ Nñ N˜Nð N°4ð N¸Dñ Nr   c                ó²  € \        4       pR pR	 F¬  pVP                  V4      p\        V\        4      '       d   RV9  d   K3  VP	                  R4      p\        V\
        4      '       d   VP                  4       P                  4       MTpVR8H  VR&   WRV&   RpV R,          P                  V RVR,           24       K®  	  V'       d   \        W VRR4       R# R# )
FÚ
write_modeÚapproveÚwrite_approvalTr5   u   .write_mode â†’ write_approval=Nu:     âœ“ Renamed write_mode â†’ write_approval (boolean gate))ÚmemoryÚskills)
r    r(   r)   r*   ru   r   rU   rV   r6   r8   )r.   r/   r   ÚtouchedÚ	subsystemrr   rH   Úold_norms   &&      r   Ú_migrate_to_29r  z  sÓ   € ô Ó€FØ€GÛ)ˆ	Ø�j‰j˜Ó#ˆÜ˜#œt×$Ò$¨¸CÔ(?ÙØ�g‰g�lÓ#ˆÜ*4°S¼#×*>Ò*>�3—9‘9“;×$Ñ$Ô&ÀCˆØ!)¨YÑ!6ˆÐÑØˆyÑØˆØ�Õ×&Ñ&ØˆkÐ8¸Ð=MÕ9NÐ8OÐPö	Rñ *÷ Ü� ¨ØLö	Nñ r   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ”  s!   € ÷ ñ ˜Nð °4ð ¸Dñ r   c                óÖ  € \        4       pVP                  R 4      p\        V\        4      '       d   RV9   g   R# VP	                  R4      p \        V4      pVeJ   V^8”  dC    \        VP                  R^4      4      pWV8”  d!   WSR&   V R,          P                  RV R24       W2R &   \        W VRR4       R#   \        \        3 d    Rp Lvi ; i  \        \        3 d    ^p Lhi ; i)Ú
delegationÚmax_async_childrenNÚmax_concurrent_childrenr5   z#delegation.max_concurrent_children=z, (folded from deprecated max_async_children)u‚     âœ“ Removed deprecated delegation.max_async_children â€” delegation.max_concurrent_children now caps background delegations too.)
r    r(   r)   r*   ru   ÚintÚ	TypeErrorÚ
ValueErrorr6   r8   )r.   r/   r   Ú	raw_delegÚ	old_asyncÚold_async_iÚcur_childrens   &&     r   Ú_migrate_to_33r  ”  s  € ô Ó€FØ—
‘
˜<Ó(€IÜ�y¤$×'Ò'Ð,@ÀIÔ,MÙØ—‘Ð2Ó3€IðÜ˜)“nˆð Ò ;°¤?ð	Ü˜yŸ}™}Ð-FÈÓJÓKˆLð Ô%Ø3>Ð/Ñ0Ø�NÕ#×*Ñ*Ø5°k°]ð C>ð ?ô@ð %ˆ<ÑÜØ˜ ð	öøô ”zÐ"ô ØŠðûô
 œ:Ð&ô 	ØŠLð	ús$   ÁB9 Á$C Â9CÃCÃC(Ã'C(c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ²  s&   € ÷ 2Qñ 2Q˜Nð 2Q°4ð 2Q¸Dñ 2Qr   c                ó–  € ^ RI HpHpHpHp \        4       pRpVP                  R4      pRp	\        V\        4      '       d,   V! VP                  RR4      4      p	V	'       d   RVR&   W†R&   RpVP                  R4      p
Rp\        V
\        4      '       d^   V! V
P                  RR4      4      pV'       d>   V! V4      P                  4        Uu0 uF
  qÕ! V4      kK  	  ppWÎ9   d   RV
R&   W¦R&   RpRpV'       g   R	# \        W`VR
R	4       V'       d   R	# V	'       d   \        RV	 RV	 R24       V'       d   \        R4       R	# R	# u upi )é    )Úavailable_personalitiesÚnormalize_personality_nameÚprompt_textÚrender_personality_promptFrž   r_   ÚpersonalityTÚagentÚsystem_promptNz)display.personality=none (one-time reset)u&     âœ“ Personality reset to none (was 'z‘'). Personality state was previously saved inconsistently across surfaces and could re-enable a personality you had turned off. Run /personality z to turn it back on.u¼     âœ“ Removed personality text from agent.system_prompt (written by an older /personality). That field is now reserved for manual system prompts; personalities live in display.personality.)Úhermes_cli.personalityr  r  r  r  r    r(   r)   r*   r»   r8   r7   )r.   r/   r  r  r  r  r   r  Úraw_displayr{   Ú	raw_agentÚscrubbed_textÚmanualÚdefnÚrendereds   &&             r   Ú_migrate_to_34r&  ²  sZ  € ÷eó eô Ó€FØ€Gà—*‘*˜YÓ'€KØ€HÜ�+œt×$Ò$Ù-¨k¯o©o¸mÈRÓ.PÓQˆßØ)+ˆK˜Ñ&Ø +�9ÑØˆGà—
‘
˜7Ó#€IØ€MÜ�)œT×"Ò"Ù˜YŸ]™]¨?¸BÓ?Ó@ˆßá<SÐTZÓ<[×<bÑ<bÔ<dóÙ<d°DÐ)¨$Ö/Ñ<dð ð ð Ô!Ø-/�	˜/Ñ*Ø"+�w‘Ø�Ø $�çÙÜˆF˜UÐ$OÐQUÔVßÙßÜØ4°X°Jð ? ð !)˜zÐ)=ð?ô	@÷
 ÜðPö	Qñ ùò)s   ÃEc               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ç  s!   € ÷ "ñ "˜Nð "°4ð "¸Dñ "r   c                óÖ  € ^ RI Hp \        4       pVP                  R4      p\	        V\
        4      '       g   R# VP                  R4      pV! V4      pV'       d   \	        V\        4      '       g   R# V Uu. uF  qwV9  g   K  VNK  	  upVR&   WCR&   \        V4       RRP                  V4       R2pV R,          P                  V4       V'       g   \        R	V 24       R# R# u upi )
r  )Úlegacy_relay_plugin_keysrÉ   NrÝ   z2Removed legacy Relay plugin from plugins.enabled: r¢   zƒ. Configure a standard user or system Relay plugins.toml, or use HERMES_NEMO_RELAY_PLUGINS_TOML for an explicit user-file override.rè   õ     âš  )Úhermes_cli.relay_plugin_cutoverr)  r    r(   r)   r*   ro   r"   r«   r6   r7   )	r.   r/   r)  r   rÉ   rÝ   Úremovedr+   r2   s	   &&       r   Ú_migrate_to_38r-  ç  sÝ   € õ IäÓ€FØ�j‰j˜Ó#€GÜ�gœt×$Ò$ÙØ�k‰k˜)Ó$€GÙ& wÓ/€Gßœ* W¬d×3Ò3Ùá-4ÓM©W EÀWÑ8LŸ%˜%©WÑM€GˆIÑØˆ9ÑÜ�vÔà<Ø�9‰9�WÓÐ
ð Mð	Mð ð ˆJÕ×Ñ˜wÔ'ßÜ��w�iÐ Ö!ñ ùò Ns   Á7C&ÂC&c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r     s!   € ÷ <ñ <˜Nð <°4ð <¸Dñ <r   c                óˆ  € \        4       pR pR F’  pVP                  V4      p\        V\        4      '       g   K,  VP	                  4        FD  w  rg\        V\
        4      '       g   K  RV9   g   K&  V Uu. uF  qˆR8w  g   K  VNK  	  upWV&   RpKF  	  V'       g   KŽ  WRV&   K”  	  V'       d   \        W VRR4       R# R# u upi )FÚbflTz6removed retired 'bfl' toolset from saved toolset listsuª     âœ“ Removed the retired BFL FLUX 3 toolset from saved toolset lists â€” video generation now lives under `hermes tools` â†’ Video Generation (Nous Subscription or FAL).N)Úplatform_toolsetsÚknown_builtin_toolsets)r    r(   r)   r*   rª   ro   r8   )	r.   r/   r   Úchangedr@   ÚmappingÚplatformÚtoolsetsÚtss	   &&       r   Ú_migrate_to_39r8    s¶   € ô Ó€FØ€GÛBˆØ—*‘*˜WÓ%ˆÜ˜'¤4×(Ò(ÙØ")§-¡-¦/ÑˆHÜ˜(¤D×)Ô)¨e°xÖ.?Ù2:Ó$J±(¨BÀE¹k§R R±(Ñ$J�Ñ!Ø’ñ #2÷ ‰7Ø%�7‹Oñ C÷ ÜØ˜UØDð;ö	<ñ ùò	 %Ks   Á5B?ÂB?c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r     s&   € ÷ dñ d˜Nð d°4ð d¸Dñ dr   c                ó  € ^ RI Hp ^ RIHpHpHpHp . pV! V! V! 4       4      4       Fk  w  r‰V	R,          p
 V
P                  4       '       d   V
P                  RR7      MRpW;9   d-   V
P                  V! V4      RR7       VP                  V4       Kk  Km  	  V'       dV   V R,          P                  R	R
P                  V4       R24       V'       g!   \        RR
P                  V4       R24       R# R# R#   \         d     KÜ  i ; i)r  )rÍ   )Ú_PROTOCOL_HEADINGÚ_hermes_rootÚ_rosterÚstrip_legacy_protocolzSOUL.mdrÊ   rË   r_   zutf-8r5   z.removed legacy Bot Mode section from SOUL.md (r¢   rf   uL     âœ“ Removed the plugin-era 'Messaging other agents' section from SOUL.md (u8   ) â€” Bot Chat sessions now get the live roster instead.N)r   rÍ   Útools.bot_mode_prober;  r<  r=  r>  Úis_fileÚ	read_textÚ
write_textr6   ÚOSErrorr«   r7   )r.   r/   rÍ   r;  r<  r=  r>  Úcleanedr^   Úprofile_dirÚsoulÚtexts   &&          r   Ú_migrate_to_41rH    sý   € õ 1ßdÓdà€GÙ$¡\±/Ó2CÓ%DÖEÑˆØ˜YÕ&ˆð	Ø;?¿<¹<¿>º>�4—>‘>¨;�>Ô7ÈrˆDØ Ô(Ø—‘Ñ 5°dÓ ;Àg�ÔNØ—‘˜tÖ$ñ )ñ	 F÷ Ø�Õ×&Ñ&Ð)WÐX\×XaÑXaÐbiÓXjÐWkÐklÐ'mÔnßÜð Ø—i‘i Ó(Ð)Ð)aðcö dñ ñ øô ô 	Úð	ús   ·AC6Ã6DÄDc               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   1  s&   € ÷ ,Añ ,A˜Nð ,A°4ð ,A¸Dñ ,Ar   c           	     ó  a€ ^ RI Hp ^ RIHpHp ^ RIHp \        4       pVP                  R4      p\        V\        4      '       g   R# RV! \        VR4      P                  R4      4      9   d   R# \        VR	4      pV! 4       V! 4       ,          o. p	VP                  4        EF  w  r«\        V\        4      '       d   RV9   d   K%  V! RV
4      '       g   K6  \        ;QJ d    V3R
 lV 4       F  '       g   K   RM	  RM! V3R
 lV 4       4      '       g   Kx  VP                  V
4      p\        V\        4      '       d
   RV9   d   K¨  \        0 \!        \"        V4      mRk4      Wz&   \        V\        4      '       d    \        0 \!        \"        V4      mRk4      WŠ&   V	P%                  \#        V
4      4       EK  	  V	'       g   R# WvR&   V'       d   W†R	&   RP'                  \        V	4      4      p\)        W`VRV 2RV R24       R# )r  )Úparse_config_string_list)Ú_configurable_keysÚ_get_plugin_toolset_keys)Útoolset_allowed_for_platformr1  NÚconnectionsr  Údisabled_toolsetsr2  c              3  ó@   <"  € T F  p\        V4      S9   x € K  	  R # 5ir   )r   )r¥   r7  Úexplicit_keyss   & €r   r¨   Ú!_migrate_to_45.<locals>.<genexpr>J  s   øé € Ð?±h°”3�r“7˜mÖ+³hùs   ƒTFr¢   z$enabled the connections toolset for uU     âœ“ Enabled the Connections toolset (Gmail, Linear, Notion, local MCP servers) for z7. Uncheck Connections in `hermes tools` to turn it off.)Úagent.skill_utilsrK  Úhermes_cli.tools_configrL  rM  Úhermes_cli.toolset_scoperN  r    r(   r)   r*   r,   rª   ro   rº   rÏ   Úmapr   r6   r«   r8   )r.   r/   rK  rL  rM  rN  r   ÚsavedÚknownÚenabled_forr5  r6  Úofferedr    rR  s   &&            @r   Ú_migrate_to_45r\  1  s¸  ø€ õ
 ;ßTÝEäÓ€FØ�J‰JÐ*Ó+€EÜ�eœT×"Ò"ÙØÑ0´¸&À'Ó1J×1NÑ1NÐObÓ1cÓdÔdÙÜ�VÐ5Ó6€Eá&Ó(Ñ+CÓ+EÕE€MØ€KØ#Ÿk™kŸmÑˆÜ˜(¤D×)Ò)¨]¸hÔ-FÙÙ+¨M¸8×DÒDÙç‹sÔ?±hÓ?�s�sŠsÔ?±hÓ?×?Ò?ÙØ—)‘)˜HÓ%ˆÜ�gœt×$Ò$¨¸'Ô)AÙÜ Ð!E¤3¤s¨HÓ#5Ð!E°}Ð!EÓFˆ‰Ü�gœt×$Ò$Ü$Ð%H¤s¬3°Ó'8Ð%H¸-Ð%HÓIˆE‰OØ×Ñœ3˜x›=×)ñ ,÷ ÙØ"'ÐÑßØ+0Ð'Ñ(Ø—	‘	œ& Ó-Ó.€IÜØ˜Ø
.¨y¨kÐ:Ø
_Ð`iÐ_jð k@ð 	@öAr   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   `  s&   € ÷ Zñ Z˜Nð Z°4ð Z¸Dñ Zr   c           	     ó  a
€ ^ RI Ho
 \        4       pVP                  R4      p\	        V\
        4      '       g   R# VP                  4        UUu/ uF(  w  rE\	        V\
        4      '       g   K  RV9   g   K&  WEbK*  	  ppp\        V
3R lVP                  4        4       \        R7      pV'       g   R# V F  pWh,          R RWh,          R&   K  	  R	P                  \        \        V4      4      p	\        W VR
V	 R2RV	 R24       R# u uppi )r  )Ú_parse_enabled_flagÚmcp_serversNrÅ   c              3  ó^   <"  € T F"  w  rS! VR ,          RR7      '       g   K  Vx € K$  	  R# 5i)rÅ   F)ÚdefaultNr   )r¥   Únrõ   r_  s   &  €r   r¨   Ú!_migrate_to_46.<locals>.<genexpr>m  s'   øé € Ðk¡~™t˜qÑ9LÈQÈzÍ]Ðdi×9jÐ9jŸš£~ùs   ƒ-£
-)r%   FrÝ   r¢   u*   mcp_servers: disabled â†’ enabled: false (rf   uE     âœ“ Turned off MCP servers the profile editor had marked disabled: rh   )rU  r_  r    r(   r)   r*   rª   rÏ   r   r«   rW  r8   )r.   r/   r   Úserversrc  rõ   r¾   Ú
turned_offr^   Únamesr_  s   &&        @r   Ú_migrate_to_46rh  `  sä   ø€ õ <äÓ€FØ�j‰j˜Ó'€GÜ�gœt×$Ò$ÙØ&Ÿ}™}œÔZ™‘t�q´*¸QÄ×2EŒdÈ*ÐXYÉ/ŒdˆaŠd™€FÑZÜÔk v§|¡|¤~ÓkÔqtÔu€JßÙÛˆØ�L˜Ð$Ø"'ˆ��YÓñ ð �I‰I”cœ#˜zÓ*Ó+€EÜØ˜Ø
4°U°G¸1Ð=Ø
OÐPUÈwÐVWÐXöZùó [s   ÁDÁ-DÁ6Dc               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   z  s!   € ÷ ñ ˜Nð °4ð ¸Dñ r   c                ó¤   € ^ RI HpHp V FA  pRV3RV3RV3RRV 233 F)  w  rV\        RWVRR	V R
V R2RV RV R2R7      ! W4       K+  	  KC  	  R# )r  )ÚDEFAULT_SANDBOX_IMAGEÚLEGACY_SANDBOX_IMAGESÚdocker_imageÚmodal_imageÚdaytona_imageÚsingularity_imagez	docker://ÚterminalNz	terminal.z unset (follows the default, rf   u     âœ“ terminal.z>: was the old default; now follows the default sandbox image (©r@   r%   rH   rC   r1   r2   )Úhermes_cli.config_defaultsrk  rl  rP   )r.   r/   rk  rl  r¾   r%   rH   s   &&     r   Ú_migrate_to_48rt  z  s‘   € ÷ XÛ'ˆà˜VÐ$Ø˜FÐ#Ø˜fÐ%Ø  I¨f¨XÐ"6Ð7ó	
‰HˆCô #Ø"¨¸$Ø! # Ð&CÐDYÐCZÐZ[Ð\Ø)¨#¨ð /Ø1Ð2°!ð5õð
 öó
ó (r   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ™  s&   € ÷ vñ v˜Nð v°4ð v¸Dñ vr   c           
     ó  € ^ RI HpHp \        RRVRRV R2RV R2R7      ! W4       \	        4       pVP                  R	4      ;'       g    R
P                  4       V8X  d)   VP                  R	4       V'       g   \        R4       R# R# R# )r  )ÚDEFAULT_VERCEL_IMAGEÚLEGACY_VERCEL_RUNTIMErq  Úvercel_runtimeNzJterminal.vercel_runtime unset (fresh sandboxes use terminal.vercel_image, rf   u_     âœ“ terminal.vercel_runtime: was the old default; fresh sandboxes now use the managed image (rr  ÚTERMINAL_VERCEL_RUNTIMEr_   u`     âœ“ Cleared TERMINAL_VERCEL_RUNTIME from .env (was the old default; the image is used instead))	rs  rw  rx  rP   r   Úget_env_value_prefer_dotenvrU   Úremove_env_valuer7   )r.   r/   rw  rx  r‡   s   &&   r   Ú_migrate_to_49r}  ™  sœ   € ÷ WÜØÐ 0Ð6KÐQUØZÐ[oÐZpÐpqÐrðØ(Ð)¨ð,õð
 ôô 
‹€BØ
×&Ñ&Ð'@ÓA×GÐGÀR×NÑNÓPÐTiÔiØ
×ÑÐ5Ô6ßÜÐtÖuñ ñ jr   c               ó$   € V ^8„  d   QhRRRRRR/# rZ   r   )r   s   "r   r   r   ±  s&   € ÷ hñ h˜Nð h°4ð h¸Dñ hr   c                óö   € \        4       pVP                  R 4      p\        V\        4      '       g   R# \         Uu. uF  qDV9   g   K  VNK  	  ppV'       g   R# V F  pW4 K  	  \        W VRR4       R# u upi )ÚsecurityNz5removed security.tirith_* (scanner no longer bundled)uX     âœ“ Removed security.tirith_* â€” the tirith scanner is no longer bundled with Hermes.)r    r(   r)   r*   Ú_RETIRED_TIRITH_KEYSr8   )r.   r/   r   r€  r%   Úpresents   &&    r   Ú_migrate_to_50rƒ  ±  st   € ô Ó€FØ�z‰z˜*Ó%€HÜ�h¤×%Ò%ÙÝ2ÓFÑ2�s¸X±o�sˆsÑ2€GÐFßÙÛˆØŠMñ äˆF˜UÐ$[Øföhùò Gs   ¼A6Á	A6Úmodel_catalogÚ	ttl_hoursu   model_catalog.ttl_hours 24â†’1uB     âœ“ Lowered model_catalog.ttl_hours to 1 (hourly picker refresh)rr  r  Úverify_on_stopTc                ó<   € V R J ;'       g    \        R4      ! V 4      # )Nrµ   )rX   ©rL   s   &r   r=   r=   Ó  s   € ˜# ˜+×?Ð?¬°6Ô):¸3Ó)?Ð?r   zagent.verify_on_stop=falseuŒ     âœ“ Turned off verify-on-stop (agent.verify_on_stop: false). Set it to true to re-enable, or "auto" for the legacy surface-aware behavior.)r@   r%   rC   r>   rA   r1   r2   uÕ     âœ“ Turned off verify-on-stop (agent.verify_on_stop: false) â€” the old default was written into your config as a literal true. Set it to true again to re-enable, or "auto" for the legacy surface-aware behavior.c                ó(   € V P                  R 4      RJ # )r†  T)r(   ©rE   s   &r   r=   r=   å  s   €  §¡Ð(8Ó 9¸TÑ Ar   )r@   r%   rH   rC   r1   r2   r9   rž   Ú background_process_notificationsÚallÚconcisez;display.background_process_notifications=concise (was: all)ué     âœ“ Background process notifications switched from 'all' to 'concise' â€” completions now show a one-line status message instead of the raw output dump. Set display.background_process_notifications: all to restore the old behavior.)r@   r%   rA   rC   r1   r2   r
  Úmax_iterationsz'delegation.max_iterations=250 (was: 50)uâ     âœ“ Raised delegation.max_iterations from 50 to 250 â€” subagents now get a larger per-child tool-call budget so delegated work finishes instead of truncating. Set delegation.max_iterations back to 50 to restore the old cap.r  z.delegation.max_concurrent_children=10 (was: 3)uõ     âœ“ Raised delegation.max_concurrent_children from 3 to 10 â€” independent delegated children now fan out wider in parallel. Each child consumes API tokens independently; set delegation.max_concurrent_children back to 3 to restore the old cap.u6   model_catalog.ttl_hours 1 â†’ ttl_minutes 20 (default)uN     âœ“ Model catalog now refreshes every 20 minutes (model_catalog.ttl_minutes)c                ó   € R V 9  # )Úttl_minutesr   rŠ  s   &r   r=   r=     s	   €  °SÒ 8r   ÚcronÚmodel_drift_guardc                ó
   € V R J# r   r   rˆ  s   &r   r=   r=     s   € ˜# T™/r   zremoved cron.model_drift_guarduÝ     âœ“ Removed cron.model_drift_guard â€” unpinned cron jobs now keep running on the model/provider they were created under when the global default changes, instead of being skipped. Pin a job or set cron.model to move it.)r@   r%   rC   rA   r1   r2   ÚgatewayÚmultiplex_profile_allowlistc                ó   € R # r;   r   ©Ú_curs   &r   r=   r=     ó   € ™4r   z+removed gateway.multiplex_profile_allowlistu¬     âœ“ Removed gateway.multiplex_profile_allowlist â€” the multiplexing gateway now serves every profile under profiles/. Delete or archive a profile you do not want served.c                ó   € R V 9   # )r•  r   rŠ  s   &r   r=   r=   #  s
   € Ð =ÀÒ Dr   )r@   r%   rC   rA   r1   r2   r9   rå   Ústale_after_daysz%curator.stale_after_days=14 (was: 30)u[     âœ“ curator.stale_after_days 30â†’14 â€” unused skills are flagged stale after two weeks.Úarchive_after_daysz'curator.archive_after_days=30 (was: 90)u¾     âœ“ curator.archive_after_days 90â†’30 â€” skills unused for a month are archived to skills/.archive/ (recoverable with `hermes curator restore`). Set it back to 90 to keep the old window.r³   Úthreshold_tokensi è z>removed compression.threshold_tokens: 256000 (the old default)uÇ     âœ“ Removed compression.threshold_tokens: 256000 â€” the old default. Compaction follows compression.threshold (50% of the window) again. Set threshold_tokens to a token count to cap it on purpose.Ú!bot_chat_delivery_timeout_secondsc                ó   € R # r;   r   r—  s   &r   r=   r=   K  r™  r   z.removed cron.bot_chat_delivery_timeout_secondsuß     âœ“ Removed cron.bot_chat_delivery_timeout_seconds â€” bot-chat deliveries are now admitted to the target profile's running gateway and tracked by receipt, so cron no longer runs (or times out) a Bot Chat turn of its own.c                ó   € R V 9   # )rž  r   rŠ  s   &r   r=   r=   Q  s
   € Ð CÀsÒ Jr   z>tuple[tuple[int, Callable[[dict[str, Any], bool], None]], ...]Ú
MIGRATIONSÚunversionedc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Úcurrent_verr  r.   r$   r/   r0   r¢  r   r3   r   )r   s   "r   r   r   j  s4   € ÷ .ñ .Øð.Ø-ð.Ø6:ð.ØLPð.Ø]añ.r   c               ó†  € \          FB  w  rEW8  ;'       g
    V\        9   pV'       g   K$  V\        9   g   V'       d   K9   V! W4       KD  	  R#   \         dg   pRT RT 2pTP	                  R. 4      P                  T4       \        P                  RT4       T'       g   \        RT 24        Rp?K®   Rp?K´  Rp?ii ; i)ur  Apply every registered migration whose target version exceeds *current_ver* (plus
:data:`STAMP_INDEPENDENT_STEPS`); a config with no ``_config_version`` (*unversioned*) gets
only :data:`LEGACY_KEY_STEPS`.

*current_ver* is the on-disk schema version captured ONCE before any step runs and does not
advance between steps â€” each step is gated on the same initial value.
zconfig migration to vz failed and was skipped: rè   z%sr*  N)	r¡  ÚSTAMP_INDEPENDENT_STEPSÚLEGACY_KEY_STEPSrt   Ú
setdefaultr6   ÚloggerÚwarningr7   )	r¤  r.   r/   r¢  Ú
target_verÚmigration_fnÚdueÚexcrª  s	   &&&$     r   Úrun_migrationsr¯  j  s³   € ÷ %/Ñ ˆ
ØÑ&×OÐO¨*Ô8OÑ*Oˆß‰3�JÔ"2Ô2¿+¹+ð.Ù˜WÖ,ó	 %/øô
 ô 
.ð 2°*°Ð=VÐWZÐV[Ð\�Ø×"Ñ" :¨rÓ2×9Ñ9¸'ÔBô —‘˜t WÔ-ßÜ˜F 7 )Ð,×-Ò-õ ûð
.ús   ÁAÁC ÁAB;Â;C >   ÚbaseÚtinyÚlargeÚsmallÚturboÚmediumúbase.enútiny.enúlarge-v1úlarge-v2úlarge-v3úsmall.enú	medium.enúlarge-v3-turboúdistil-large-v2údistil-large-v3údistil-small.enúdistil-medium.enúdistil-large-v3.5)Útirith_enabledÚtirith_pathÚtirith_timeoutÚtirith_fail_open>   é   é   é   é   é   é!   é&   é'   é*   é+   é.   é2   é3   ):Ú__conditional_annotations__Ú__doc__Ú
__future__r   rí   rN   Úloggingrq   Útypingr   r   r   r   r   r   Úurllib.parser	   Ú	getLoggerÚ__name__r©  r   r   r   r    r"   r,   r8   rF   rP   rX   r€   r‰   Ú	frozensetrš   r›   r°   rÃ   rÚ   rá   rü   r  r  r&  r-  r8  rH  r\  rh  rt  r}  r�  rƒ  rO   r¡  Ú__annotations__r§  r¦  r¯  )rÔ  s   @r   Ú<module>rÞ     s'  øðôõ #ã Û Û Û 	ß =× =Ý !à	×	Ò	˜8Ó	$€ð Ð õ	*òò$ò&õ4õð8ñ 5Dð8ð !÷8õ:OõLõ7Nõtñ "ò #ó  Ð õeõDUõ.7õ@õ8]õ,+Nõ\Nõ4õ<2Qõj"õ4<õ0dõ0,Aõ^Zõ4õ>vð* _Ð õhð QNØˆÐðQNàˆÐðQNð ˆÐðQNð ˆÐð	QNð
 ˆÐðQNð ˆÐðQNð ˆÐðQNð Ñ	Ø [°b¸aØ.ØTô
Vð WðQNð ˆÐðQNð  ˆ×	Ò	Ø˜gÐ+;ÀÐW[Ù?Ø*ð&ô
(ð )ð!QNð8 Ñ	ØÐ-°4¸UØ*ð-ñ Bô
Cð Dð9QNðJ ˆÐðKQNðL ˆÐðMQNðR ˆ×	Ò	Ø˜iÐ-OÙ˜Ó IØKð ô	
"ð 	#ðSQNðh Ñ	ØÐ"2¸ÀØ7ð1ô	
3ð 4ðiQNðz Ñ	ØÐ";ÀÈØ>ðSô	
Uð Vð{QNðJ ˆÐðKQNðL ˆÐðMQNðR Ñ	Ø [°a¸TØFØ`Ù8ô	
:ð ;ðSQNð\ ˆÐð]QNðb ˆ×	Ò	Ø˜fÐ*=À4Ù)Ø.ðHô
Jð KðcQNðv ˆ×	Ò	Ø˜iÐ-JÐPTÙØ;ðaáDô
Fð GðwQNðL Ñ	ØÐ1°r¸rØ5Ømô
oð pðMQNðT Ñ	ØÐ3¸ÀØ7ðvô	
xð yðUQNðb ˆÐðcQNðf ˆÐðgQNðp Ñ	ØÐ#5¸6ÀtØNð5ô	
7ð 8ðqQNð@ ˆÐðAQNðD ˆÐðEQNðH ˆÐðIQNðP ˆ×	Ò	Ø˜fÐ*MÐSWÙØ>ðEñ Kô
Lð MñQQN€
ÐJó Qñx ÒQÓRÐ ñ $ R¨ HÓ-Ð ð.ØSX÷.ñ .r   