§
    øžyjáH  ã                  óÞ   — d Z ddlmZ ddlZddlZd1d2d	„Zd2d
„Zd3d„Zd3d„Zd3d„Z	d3d„Z
d3d„Zd3d„Zd3d„Zd3d„Zd4d„Zd5d„Zd6d„Zd7d„Zd8d„Zd9d"„Zd:d$„Zd%d&œd;d(„Zd<d)„Zd=d,„Zd>d-„Zd?d0„ZdS )@u}  CLI subcommand: ``hermes pets <subcommand>``.

Thin shell around :mod:`agent.pet`.  Browses the public petdex gallery,
installs pets into the profile's ``pets/`` directory, selects the active
mascot (writes ``display.pet.*`` to config.yaml), and runs a doctor check.

No side effects at import time â€” ``main.py`` wires the argparse subparsers on
demand via :func:`register_cli`.
é    )ÚannotationsNÚ ÚmsgÚstrÚreturnÚNonec                ó$   — t          | ¦  «         d S ©N)Úprint©r   s    ú5/home/ragecks/.hermes/hermes-agent/hermes_cli/pets.pyÚ_printr      s   € Ý	ˆ#�J„J€J€J€Jó    c                ó<   — t          | t          j        ¬¦  «         d S )N)Úfile)r   ÚsysÚstderrr   s    r   Ú_errr      s   € Ý	ˆ#•C”JÐÑÔÐÐÐr   Úintc                ó  ‡— ddl m} t          | dd¦  «        rn|                     ¦   «         }|st	          d¦  «         dS t	          dt          |¦  «        › d�¦  «         |D ]"}t	          d|j        d	›d
|j        › �¦  «         Œ#dS ddlm	}m
} 	  |¦   «         }n%# |$ r}t          d|› �¦  «         Y d}~dS d}~ww xY wt          | dd¦  «        pd                     ¦   «                              ¦   «         Š‰rˆfd„|D ¦   «         }t          | dd¦  «        pd}|dk    r
|d|…         n|}	d„ |                     ¦   «         D ¦   «         }
t	          dt          |¦  «        › d‰rdt          ‰¦  «        z   nd› d�¦  «         |	D ];}|j        |
v rdnd
}t	          d|› d
|j        d›d
|j        › d|j        › d�	¦  «         Œ<|r6t          |¦  «        |k    r#t	          dt          |¦  «        |z
  › d�¦  «         t	          d¦  «         dS )z@List gallery pets (or only installed ones with ``--installed``).r   ©ÚstoreÚ	installedFz0No pets installed. Try: hermes pets install bobazInstalled pets (z):ú  ú<24Ú ©ÚManifestErrorÚfetch_manifestõ   âœ— Né   Úqueryr   c                ó€   •— g | ]:}‰|j                              ¦   «         v s‰|j                             ¦   «         v ¯8|‘Œ;S © )ÚslugÚlowerÚdisplay_name)Ú.0Úer"   s     €r   ú
<listcomp>z_cmd_list.<locals>.<listcomp>1   sP   ø€ ð 
ð 
ð 
àØ˜œŸš™œÐ&Ð&¨%°1´>×3GÒ3GÑ3IÔ3IÐ*IÐ*Ið à*IÐ*IÐ*Ir   Úlimitc                ó   — h | ]	}|j         ’Œ
S r$   ©r%   ©r(   Úps     r   ú	<setcomp>z_cmd_list.<locals>.<setcomp>9   ó   € Ð8Ð8Ð8˜A�”Ð8Ð8Ð8r   u   petdex gallery â€” z pet(s)z
 matching ú:u   âœ“z<28z  (ú)u     â€¦ z* more (use --limit 0 or --query to filter)z-
Install one with: hermes pets install <slug>)Ú	agent.petr   ÚgetattrÚinstalled_petsr   Úlenr%   r'   Úagent.pet.manifestr   r   r   Ústripr&   ÚreprÚkind)Úargsr   ÚpetsÚpetr   r   ÚentriesÚexcr+   Úshownr   ÚentryÚmarkr"   s                @r   Ú	_cmd_listrD      sÆ  ø€ àÐÐÐÐÐåˆt�[ %Ñ(Ô(ð Ø×#Ò#Ñ%Ô%ˆØð 	ÝÐEÑFÔFÐFØ�1ÝÐ/¥# d¡)¤)Ð/Ð/Ð/Ñ0Ô0Ð0Øð 	;ð 	;ˆCÝÐ9˜œÐ9Ð9Ð9 sÔ'7Ð9Ð9Ñ:Ô:Ð:Ð:Øˆqà@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ðØ �.Ñ"Ô"ˆˆøØð ð ð Ýˆ\�Cˆ\ˆ\ÑÔÐØˆqˆqˆqˆqˆqøøøøðøøøõ �T˜7 BÑ'Ô'Ð-¨2×4Ò4Ñ6Ô6×<Ò<Ñ>Ô>€EØð 
ð
ð 
ð 
ð 
àð
ñ 
ô 
ˆõ �D˜' 1Ñ%Ô%Ð*¨€EØ$ qšy˜yˆG�F�U�FŒOˆO¨g€EØ8Ð8 ×!5Ò!5Ñ!7Ô!7Ð8Ñ8Ô8€Iå
Ðd¥ W¡¤ÐdÐdÐTYÐ6a°lÅTÈ%Á[Ä[Ñ6PÐ6PÐ_aÐdÐdÐdÑeÔeÐeØð Rð RˆØœ
 iÐ/Ð/ˆuˆu°SˆÝÐP�DÐPÐP˜5œ:ÐPÐPÐP¨EÔ,>ÐPÐPÀ5Ä:ÐPÐPÐPÑQÔQÐQÐQØð Z•�W‘” Ò%Ð%ÝÐX�˜G™œ uÑ,ÐXÐXÐXÑYÔYÐYÝ
Ð;Ñ<Ô<Ð<Øˆ1s   Â
B ÂB=Â B8Â8B=c                óî  — ddl m} ddlm} | j                             ¦   «         }	 |                     |t          | dd¦  «        ¬¦  «        }n,# |j        |f$ r}t          d|› �¦  «         Y d }~dS d }~ww xY wt          d	|j        › d
|j        › �¦  «         t          | dd¦  «        st          ¦   «         s+t          |¦  «         t          d|j        › d|› d�¦  «         nt          d|› �¦  «         dS )Nr   r   )r   ÚforceF)rF   u   âœ— install failed: r!   u   âœ“ installed u    â†’ Úselectu   âœ“ z) is now the active pet (display.pet.slug=ú
, enabled)z*  Make it active with: hermes pets select )r4   r   r8   r   r%   r9   Úinstall_petr5   ÚPetStoreErrorr   r   r'   Ú	directoryÚ_has_active_petÚ_set_active)r<   r   r   r%   r>   r@   s         r   Ú_cmd_installrN   E   sI  € ØÐÐÐÐÐØ0Ð0Ð0Ð0Ð0Ð0àŒ9�?Š?ÑÔ€DðØ×Ò ­G°D¸'À5Ñ,IÔ,IÐÑJÔJˆˆøØÔ Ð/ð ð ð ÝÐ) CÐ)Ð)Ñ*Ô*Ð*Øˆqˆqˆqˆqˆqøøøøðøøøõ ÐB˜CÔ,ÐBÐB°3´=ÐBÐBÑCÔCÐCåˆt�X˜uÑ%Ô%ð D­_Ñ->Ô->ð DÝ�DÑÔÐÝÐa�cÔ&ÐaÐaÐQUÐaÐaÐaÑbÔbÐbÐbåÐB¸DÐBÐBÑCÔCÐCØˆ1s   §&A ÁA7ÁA2Á2A7c                ó¼   — ddl m} | j                             ¦   «         }|                     |¦  «        rt          d|› �¦  «         dS t          d|› d�¦  «         dS )Nr   r   u   âœ“ removed õ   âœ— 'z' is not installedr!   )r4   r   r%   r9   Ú
remove_petr   r   )r<   r   r%   s      r   Ú_cmd_removerR   Z   sv   € ØÐÐÐÐÐàŒ9�?Š?ÑÔ€DØ×Ò˜ÑÔð ÝÐ$˜dÐ$Ð$Ñ%Ô%Ð%ØˆqÝÐ	)�Ð	)Ð	)Ð	)Ñ*Ô*Ð*Øˆ1r   c                ó’  — ddl m} t          | dd¦  «        pd                     ¦   «         }|s:|                     ¦   «         }|st          d¦  «         dS t          |¦  «        }|sdS |                     |¦  «        }|�|j        st          d|› d|› �¦  «         dS t          |¦  «         t          d	|j        › d
|› d�¦  «         dS )Nr   r   r%   r   u7   âœ— no pets installed â€” run: hermes pets install bobar!   rP   u0   ' is not installed â€” run: hermes pets install u   âœ“ active pet set to z (display.pet.slug=rH   )r4   r   r5   r9   r6   r   Ú_interactive_pickÚload_petÚexistsrM   r   r'   )r<   r   r%   r=   r>   s        r   Ú_cmd_selectrW   e   sý   € ØÐÐÐÐÐå�D˜& "Ñ%Ô%Ð+¨×2Ò2Ñ4Ô4€DØð Ø×#Ò#Ñ%Ô%ˆØð 	ÝÐJÑKÔKÐKØ�1Ý  Ñ&Ô&ˆØð 	Ø�1à
�.Š.˜Ñ
Ô
€CØ
€{˜#œ*€{ÝÐQ�TÐQÐQÈ4ÐQÐQÑRÔRÐRØˆqå�ÑÔÐÝ
ÐY CÔ$4ÐYÐYÈÐYÐYÐYÑZÔZÐZØˆ1r   c                óB   — t          d¦  «         t          d¦  «         dS )NFu,   âœ“ pet disabled (display.pet.enabled=false)r   )Ú_set_enabledr   )r<   s    r   Ú_cmd_offrZ   |   s$   € Ý�ÑÔÐÝ
Ð9Ñ:Ô:Ð:Øˆ1r   c                óˆ   — t          | j        ¦  «        \  }}|rt          d|› �¦  «         dS t          d|d›d�¦  «         dS )uA   Persist ``display.pet.scale`` â€” one knob resizes every surface.r    r!   u   âœ“ pet scale set to Úgz (display.pet.scale)r   )Úset_pet_scaleÚfactorr   r   )r<   ÚscaleÚerrs      r   Ú
_cmd_scalera   ‚   sX   € å˜tœ{Ñ+Ô+�J€Eˆ3Ø
ð Ýˆ\�Cˆ\ˆ\ÑÔÐØˆqÝ
Ð@ 5Ð@Ð@Ð@Ð@ÑAÔAÐAØˆ1r   c                ód
  ‡‡— ddl }ddlm} ddlm}m}m}mŠm} ddl	m
} t          ¦   «         }t          | dd¦  «        pd                     ¦   «         p$t          |                     dd¦  «        pd¦  «        }	|                     |	¦  «        }
|
€t#          d¦  «         d	S t          | d
d¦  «        p$t          |                     dd¦  «        pd¦  «        }t%          t          | dd¦  «        p|                     d|¦  «        p|¦  «        } |||                     dd¦  «        ¦  «        } ||
j        |||¬¦  «        }|j        st#          d|j        › d�¦  «         d	S t          | dd¦  «        pd                     ¦   «                              ¦   «         }|r|g}n-t          | dd¦  «        rˆfd„|D ¦   «         }n‰j        j        g}|j        dk    }t3          d|dz  t3          d	|                     |d         ¦  «        pd	¦  «        z  ¦  «        }ddl}|                     d¦  «        j        }dŠd}|rdt3          d||z
  d	z
  ¦  «        z  ŠnFt3          d	t=          |j        |j         z  ¦  «        dz  ¦  «        }dt3          d||z
  d	z
  ¦  «        z  }tB          j"        }| #                    d¦  «         | $                    ¦   «          d}	 tK          |
j&        › d|j        › d�¦  «         d}	 |D �]y}|                     |¦  «        pd	}tO          |¦  «        D �]N}| (                    ||¦  «        }|r”‰r4d  )                    ˆfd!„| *                    d ¦  «        D ¦   «         ¦  «        }|r| #                    d"|› d#�¦  «         | #                    |¦  «         | #                    d$¦  «         | +                    d ¦  «        d	z   }nv| #                    d%¦  «         | #                    |
j&        › d&|› d'�¦  «         |r| #                    |¦  «         | #                    |¦  «         | #                    d ¦  «         | $                    ¦   «          | ,                    |¦  «         �ŒP�Œ{|d	z  }t          | d(d¦  «        r|t[          |¦  «        k    rn�Œ©n# t\          $ r Y nw xY w| #                    d)¦  «         | #                    d$¦  «         | $                    ¦   «          nC# | #                    d)¦  «         | #                    d$¦  «         | $                    ¦   «          w xY wdS )*u	  Animate the active (or named) pet in the terminal.

    Uses the shared :class:`~agent.pet.render.PetRenderer` â€” full graphics
    protocol (kitty/iTerm2/sixel) when the terminal supports it, else a
    truecolor Unicode half-block fallback.  Ctrl+C to stop.
    r   Nr   )ÚDEFAULT_SCALEÚLOOP_MSÚ
STATE_ROWSÚPetStateÚresolve_cols)Úbuild_rendererr%   r   u4   âœ— no pet to show â€” run: hermes pets install bobar!   ÚmodeÚrender_modeÚautor_   Úunicode_cols)Úconfigured_moder_   rl   uE   âœ— cannot render here (no TTY / graphics disabled). Effective mode: ú.ÚstateÚcycleFc                ó0   •— g | ]}|d „ ‰D ¦   «         v ¯|‘ŒS )c                ó   — h | ]	}|j         ’Œ
S r$   )Úvalue)r(   r)   s     r   r0   z'_cmd_show.<locals>.<listcomp>.<setcomp>¶   s   € Ð0KÐ0KÐ0K¸Q°´Ð0KÐ0KÐ0Kr   r$   )r(   Úsrf   s     €r   r*   z_cmd_show.<locals>.<listcomp>¶   s2   ø€ ÐLÐLÐL˜¨1Ð0KÐ0KÀ(Ð0KÑ0KÔ0KÐ+KÐ+K�!Ð+KÐ+KÐ+Kr   Úunicodegš™™™™™©?g     @�@)éP   é   r   é   z[?25lu
    â€” mode=z  (Ctrl+C to stop)TÚ
c              3  ó"   •K  — | ]	}‰|z   V — Œ
d S r
   r$   )r(   ÚlnÚindents     €r   ú	<genexpr>z_cmd_show.<locals>.<genexpr>Ù   s'   øè è € Ð/ZÐ/ZÀ°¸±Ð/ZÐ/ZÐ/ZÐ/ZÐ/ZÐ/Zr   z[ÚFz[0m
z[2J[3J[Hz [z]
Úoncez[?25h)/Útimer4   r   Úagent.pet.constantsrc   rd   re   rf   rg   Úagent.pet.renderrh   Ú_pet_configr5   r9   r   ÚgetÚresolve_active_petr   ÚfloatÚspritesheetÚ	availableri   r&   ÚIDLErs   ÚmaxÚframe_countÚshutilÚget_terminal_sizeÚcolumnsr   Úframe_wr_   r   ÚstdoutÚwriteÚflushr   r'   ÚrangeÚframeÚjoinÚsplitÚcountÚsleepr7   ÚKeyboardInterrupt) r<   r€   r   rc   rd   re   rg   rh   Úcfgr%   r>   Úmode_cfgr_   ÚcolsÚrendererÚ	requestedÚstatesÚ
is_unicodeÚframe_delayrŒ   Ú	term_colsÚg_indentÚ	cell_colsÚoutÚ
prev_linesÚloopsro   r—   ÚiÚencodedrf   r|   s                                  @@r   Ú	_cmd_showrª   Œ   sÖ  øø€ ð €K€K€KàÐÐÐÐÐØ^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ø/Ð/Ð/Ð/Ð/Ð/å
‰-Œ-€CÝ�D˜& "Ñ%Ô%Ð+¨×2Ò2Ñ4Ô4ÐV½¸C¿GºGÀFÈBÑ<OÔ<OÐ<UÐSUÑ8VÔ8V€DØ
×
"Ò
" 4Ñ
(Ô
(€CØ
€{ÝÐCÑDÔDÐDØˆqå�t˜V TÑ*Ô*Ð[­c°#·'²'¸-ÈÑ2PÔ2PÐ2ZÐTZÑ.[Ô.[€HÝ•'˜$ ¨Ñ+Ô+Ð_¨s¯wªw°wÀÑ/NÔ/NÐ_ÐR_Ñ`Ô`€EØˆ<˜˜sŸwšw ~°qÑ9Ô9Ñ:Ô:€Dàˆ~ØŒØ ØØð	ñ ô €Hð Ôð Ýð0Ø'œ}ð0ð 0ð 0ñ	
ô 	
ð 	
ð ˆqõ ˜˜w¨Ñ+Ô+Ð1¨r×8Ò8Ñ:Ô:×@Ò@ÑBÔB€IØð 'Ø�ˆˆÝ	��w Ñ	&Ô	&ð 'ØLÐLÐLÐL˜ZÐLÑLÔLˆˆà”-Ô%Ð&ˆà” )Ò+€JÝ�d˜W vÑ-µ°Q¸×8LÒ8LÈVÐTUÌYÑ8WÔ8WÐ8\Ð[\Ñ1]Ô1]Ñ]Ñ^Ô^€Kð
 €M€M€Mà×(Ò(¨Ñ2Ô2Ô:€IØ€FØ€HØð ;Ø•s˜1˜i¨$Ñ.°Ñ2Ñ3Ô3Ñ3ˆˆå˜�3˜xÔ/°(´.Ñ@ÑAÔAÀQÑFÑGÔGˆ	Ø�˜Q 	¨IÑ 5¸Ñ 9Ñ:Ô:Ñ:ˆå
Œ*€CØ‡I‚IˆkÑÔÐØ‡I‚I�K„K€KØ€Jð#Ý�#Ô"ÐOÐO¨h¬mÐOÐOÐOÑPÔPÐPØˆð	Øð ,ñ ,�Ø ×,Ò,¨UÑ3Ô3Ð8°q�Ý˜u™œð ,ñ ,�AØ&Ÿnšn¨U°AÑ6Ô6�GØ!ð (Ø!ð [Ø&*§i¢iÐ/ZÐ/ZÐ/ZÐ/ZÀgÇmÂmÐTXÑFYÔFYÐ/ZÑ/ZÔ/ZÑ&ZÔ&Z˜GØ%ð =ØŸIšIÐ&;¨jÐ&;Ð&;Ð&;Ñ<Ô<Ð<ØŸ	š	 'Ñ*Ô*Ð*ØŸ	š	 +Ñ.Ô.Ð.ð &-§]¢]°4Ñ%8Ô%8¸1Ñ%<˜
˜
àŸ	š	Ð"8Ñ9Ô9Ð9ØŸ	š	 SÔ%5Ð"CÐ"C¸Ð"CÐ"CÐ"CÑDÔDÐDØ#ð 0ØŸIšI hÑ/Ô/Ð/ØŸ	š	 'Ñ*Ô*Ð*ØŸ	š	 $™œ˜Ø—I’I‘K”K�KØ—J’J˜{Ñ+Ô+Ð+Ñ+ñ),ð* �Q‰JˆEÝ�t˜V UÑ+Ô+ð °½¸V¹¼Ò0DÐ0DØñ5	ð4 øÝð ð ð Øˆðøøøð 	�	Š	�+ÑÔÐØ�	Š	�+ÑÔÐØ�	Š	‰Œˆˆøð 	�	Š	�+ÑÔÐØ�	Š	�+ÑÔÐØ�	Š	‰ŒˆˆøøøØˆ1s,   ËGR ÒS- Ò
R+Ò(S- Ò*R+Ò+S- Ó-A T-c           	     ó`  — ddl m} ddlm}m} t          ¦   «         }t          |                     d¦  «        ¦  «        }t          |                     dd¦  «        pd¦  «        }t          |                     dd¦  «        pd¦  «        }| 	                    ¦   «         }| 
                    |¦  «        }	t          d	¦  «         t          d
|                     ¦   «         › �¦  «         t          dt          |¦  «        › dd                     d„ |D ¦   «         ¦  «        pd› d�¦  «         t          d|› �¦  «         t          d|pd› �¦  «         t          d|	r|	j        nd› �¦  «         t          d|› �¦  «         t          d |¦   «         › �¦  «         t          d ||¦  «        › �¦  «         d}
|st          d¦  «         d}
n-|	€t          d¦  «         d}
n|st          d|	j        z   ¦  «         	 ddl}n!# t"          $ r t          d¦  «         d}
Y nw xY wt          |
r|rd nd!¦  «         dS )"zBReport install state, active pet, config, and terminal capability.r   r   )Údetect_terminal_graphicsÚresolve_modeÚenabledr%   r   rj   rk   zpetdex doctorz  pets dir:        z  installed:       z (z, c              3  ó$   K  — | ]}|j         V — Œd S r
   r-   r.   s     r   r}   z_cmd_doctor.<locals>.<genexpr>  s$   è è € Ð7MÐ7MÀ1¸¼Ð7MÐ7MÐ7MÐ7MÐ7MÐ7Mr   Únoner3   z  display.pet.enabled:     z  display.pet.slug:        z(unset)z  active (resolved):       z(none)z  display.pet.render_mode: z  detected graphics:       z  effective mode (TTY):    Tu6     â†’ no pets installed. Run: hermes pets install bobaFNu;     â†’ active pet unresolved. Run: hermes pets select <slug>u7     â†’ pet display is disabled. Run: hermes pets select uC     âœ— Pillow not importable â€” sprite decoding will be unavailableu     âœ“ readyz-  (run the suggestions above to finish setup))r4   r   r‚   r¬   r­   rƒ   Úboolr„   r   r6   r…   r   Úpets_dirr7   r•   r%   ÚPILÚImportError)r<   r   r¬   r­   rš   r®   Úconfigured_slugr›   r=   ÚactiveÚokr³   s               r   Ú_cmd_doctorr¸   ö   s�  € àÐÐÐÐÐØGÐGÐGÐGÐGÐGÐGÐGå
‰-Œ-€CÝ�3—7’7˜9Ñ%Ô%Ñ&Ô&€GÝ˜#Ÿ'š' &¨"Ñ-Ô-Ð3°Ñ4Ô4€OÝ�3—7’7˜=¨&Ñ1Ô1Ð;°VÑ<Ô<€Hà×ÒÑ!Ô!€DØ×%Ò% oÑ6Ô6€Få
ˆ?ÑÔÐÝ
Ð3 §¢Ñ!1Ô!1Ð3Ð3Ñ4Ô4Ð4Ý
ÐZ¥ T¡¤ÐZÐZ¨d¯iªiÐ7MÐ7MÈÐ7MÑ7MÔ7MÑ.MÔ.MÐ.WÐQWÐZÐZÐZÑ[Ô[Ð[Ý
Ð2¨Ð2Ð2Ñ3Ô3Ð3Ý
ÐG¨Ð)E¸IÐGÐGÑHÔHÐHÝ
ÐN¸Ð)L¨¬¨ÀHÐNÐNÑOÔOÐOÝ
Ð3¨Ð3Ð3Ñ4Ô4Ð4Ý
ÐEÐ)AÐ)AÑ)CÔ)CÐEÐEÑFÔFÐFÝ
ÐA¨¨°hÑ)?Ô)?ÐAÐAÑBÔBÐBà	€BØð XÝÐGÑHÔHÐHØˆˆØ	ˆÝÐLÑMÔMÐMØˆˆØð XÝÐHÈ6Ì;ÑVÑWÔWÐWðØˆ
ˆ
ˆ
ˆ
øÝð ð ð ÝÐTÑUÔUÐUØˆˆˆðøøøõ ˜BÐ_ 7Ð_ˆ=ˆ=Ð0_Ñ`Ô`Ð`Øˆ1s   Ç3G8 Ç8HÈHÚdictc                 ó   — ddl m}   | ¦   «         }t          |                     d¦  «        t          ¦  «        r|                     di ¦  «        ni }|                     di ¦  «        }t          |t          ¦  «        r|ni S )Nr   )Úload_configÚdisplayr>   )Úhermes_cli.configr»   Ú
isinstancer„   r¹   )r»   rš   r¼   r>   s       r   rƒ   rƒ   %  s   € Ø-Ð-Ð-Ð-Ð-Ð-à
ˆ+‰-Œ-€CÝ(2°3·7²7¸9Ñ3EÔ3EÅtÑ(LÔ(LÐTˆc�gŠg�i Ñ$Ô$Ð$ÐRT€GØ
�+Š+�e˜RÑ
 Ô
 €CÝ˜S¥$Ñ'Ô'Ð/ˆ3ˆ3¨RÐ/r   r±   c                 óº   — t          t          ¦   «                              d¦  «        ¦  «        o-t          t          ¦   «                              d¦  «        ¦  «        S )Nr®   r%   )r±   rƒ   r„   r$   r   r   rL   rL   .  sA   € Ý•‘”×!Ò! )Ñ,Ô,Ñ-Ô-ÐQµ$µ{±}´}×7HÒ7HÈÑ7PÔ7PÑ2QÔ2QÐQr   r%   c                ó¬   — ddl m}m}  |¦   «         }|                     di ¦  «        }|                     di ¦  «        }| |d<   d|d<    ||¦  «         d S )Nr   ©r»   Úsave_configr¼   r>   r%   Tr®   ©r½   r»   rÂ   Ú
setdefault)r%   r»   rÂ   rš   r¼   r>   s         r   rM   rM   2  su   € Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ�nŠn˜Y¨Ñ+Ô+€GØ
×
Ò
˜U BÑ
'Ô
'€CØ€Cˆ�KØ€Cˆ	�NØ€K�ÑÔÐÐÐr   r®   c                ó¢   — ddl m}m}  |¦   «         }|                     di ¦  «        }|                     di ¦  «        }| |d<    ||¦  «         d S )Nr   rÁ   r¼   r>   r®   rÃ   )r®   r»   rÂ   rš   r¼   r>   s         r   rY   rY   =  sl   € Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ�nŠn˜Y¨Ñ+Ô+€GØ
×
Ò
˜U BÑ
'Ô
'€CØ€Cˆ	�NØ€K�ÑÔÐÐÐr   r_   r†   c                ó¢   — ddl m}m}  |¦   «         }|                     di ¦  «        }|                     di ¦  «        }| |d<    ||¦  «         d S )Nr   rÁ   r¼   r>   r_   rÃ   )r_   r»   rÂ   rš   r¼   r>   s         r   Ú
_set_scalerÇ   G  sl   € Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ�nŠn˜Y¨Ñ+Ô+€GØ
×
Ò
˜U BÑ
'Ô
'€CØ€Cˆ�LØ€K�ÑÔÐÐÐr   rs   úfloat | strútuple[float, str | None]c                ó¦   — ddl m} 	  |t          | ¦  «        ¦  «        }n# t          t          f$ r dd| ›d�fcY S w xY wt          |¦  «         |dfS )a3  Set ``display.pet.scale`` (clamped to bounds). Returns ``(applied, error)``.

    The single write path behind ``/pet scale`` and the desktop slider, so every
    surface that resolves scale from config picks it up identically. *error* is
    set (and nothing written) only when *value* isn't a number.
    r   )Úclamp_scaleg        znot a number: u    â€” try a value like 0.5N)r�   rË   r†   Ú	TypeErrorÚ
ValueErrorrÇ   )rs   rË   r_   s      r   r]   r]   Q  sŽ   € ð 0Ð/Ð/Ð/Ð/Ð/ðHØ��E %™LœLÑ)Ô)ˆˆøÝ•zÐ"ð Hð Hð HØÐG UÐGÐGÐGÐGÐGÐGÐGðHøøøõ ˆuÑÔÐØ�$ˆ;Ðs   ˆ! ¡=¼=ú#tuple[bool, str | None, str | None]c                 ó¼  — ddl m}  t          ¦   «         }t          |                     dd¦  «        pd¦  «        }|                      |¦  «        }t          |                     d¦  «        ¦  «        rt          d¦  «         d|r|j        nddfS |€5|  	                    ¦   «         }|sdS |d         }t          |j        ¦  «         nt          d	¦  «         d	|j        dfS )
zªToggle ``display.pet.enabled``.

    Returns ``(enabled, display_name, error_message)``. *error_message* is set
    when turning on but nothing is installed to show.
    r   r   r%   r   r®   FN)FNuB   no pets installed â€” /pet list to browse, or /pet <slug> to adoptT)r4   r   rƒ   r   r„   r…   r±   rY   r'   r6   rM   r%   )r   rš   r%   r>   r   s        r   Útoggle_pet_displayrÐ   c  sõ   € ð  ÐÐÐÐÐå
‰-Œ-€CÝˆs�wŠw�v˜rÑ"Ô"Ð( bÑ)Ô)€DØ
×
"Ò
" 4Ñ
(Ô
(€CåˆC�GŠG�IÑÔÑÔð >Ý�UÑÔÐØ¨#Ð7�cÔ&Ð&°4¸Ð=Ð=à
€{Ø×(Ò(Ñ*Ô*ˆ	Øð 	eØdÐdØ˜ŒlˆÝ�C”HÑÔÐÐå�TÑÔÐØ�Ô! 4Ð'Ð'r   é   )r+   r+   c           	     óÌ  — ddl m} ddlm}m} 	  |¦   «         }n%# |$ r}t          d|› �¦  «         Y d}~dS d}~ww xY wd„ |                     ¦   «         D ¦   «         }| dk    r
|d| …         n|}t          dt          |¦  «        › dt          |¦  «        › d	�¦  «         |D ]2}|j        |v rd
nd}	t          d|	› d|j        d›d|j	        › �¦  «         Œ3t          d¦  «         dS )zCPrint a slice of the public petdex gallery (CLI/TUI text fallback).r   r   r   z)(._.) Couldn't reach the petdex gallery: Nc                ó   — h | ]	}|j         ’Œ
S r$   r-   r.   s     r   r0   z$print_pet_gallery.<locals>.<setcomp>‰  r1   r   u    (^o^)/ petdex gallery â€” first z of r2   u   â—�u   â—‹r   r   r   u(     /pet <slug> to adopt Â· /pet to toggle)
r4   r   r8   r   r   r   r6   r7   r%   r'   )
r+   r   r   r   r?   r@   r   rA   rB   rC   s
             r   Úprint_pet_galleryrÔ   ~  sX  € àÐÐÐÐÐØ@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ðØ �.Ñ"Ô"ˆˆøØð ð ð ÝÐ?¸#Ð?Ð?Ñ@Ô@Ð@Øˆˆˆˆˆøøøøðøøøð 9Ð8 ×!5Ò!5Ñ!7Ô!7Ð8Ñ8Ô8€IØ$ qšy˜yˆG�F�U�FŒOˆO¨g€EÝ	Ð
L­S°©Z¬ZÐ
LÐ
L½SÀ¹\¼\Ð
LÐ
LÐ
LÑMÔMÐMØð Að AˆØœ
 iÐ/Ð/ˆuˆu°UˆÝÐ?�4Ð?Ð?˜%œ*Ð?Ð?Ð?¨5Ô+=Ð?Ð?Ñ@Ô@Ð@Ð@Ý	Ð
4Ñ5Ô5Ð5Ð5Ð5s   �
 ›= 8¸=c                ó(  — ddl m}m}  |¦   «         }|                     di ¦  «                             di ¦  «        }t	          |t
          ¦  «        r)t          |                     dd¦  «        pd¦  «        | k    rdS d|d<   d|d<    ||¦  «         d	S )
zœDisable + unset the active pet iff it's ``slug`` (e.g. after removal).

    Returns whether anything changed, so callers don't write config needlessly.
    r   rÁ   r¼   r>   r%   r   Fr®   T©r½   r»   rÂ   rÄ   r¾   r¹   r   r„   )r%   r»   rÂ   rš   r>   s        r   Ú_clear_active_ifr×   ’  s­   € ð
 ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ
�.Š.˜ BÑ
'Ô
'×
2Ò
2°5¸"Ñ
=Ô
=€CÝ�c�4Ñ Ô ð ¥C¨¯ª°¸Ñ(;Ô(;Ð(A¸rÑ$BÔ$BÀdÒ$JÐ$JØˆuØ€Cˆ�KØ€Cˆ	�NØ€K�ÑÔÐØˆ4r   Úold_slugÚnew_slugc                ó2  — |r| |k    rdS ddl m}m}  |¦   «         }|                     di ¦  «                             di ¦  «        }t	          |t
          ¦  «        r)t          |                     dd¦  «        pd¦  «        | k    rdS ||d<    ||¦  «         dS )	a1  Repoint the active pet from ``old_slug`` to ``new_slug`` iff it's active.

    Used when a rename realigns a pet's slug/dir: if the renamed pet was the
    active one, the config must follow or surfaces point at a now-missing dir.
    Preserves the ``enabled`` flag. Returns whether anything changed.
    Fr   rÁ   r¼   r>   r%   r   TrÖ   )rØ   rÙ   r»   rÂ   rš   r>   s         r   Ú_rename_active_ifrÛ   £  s»   € ð ð �x 8Ò+Ð+ØˆuØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ
�.Š.˜ BÑ
'Ô
'×
2Ò
2°5¸"Ñ
=Ô
=€CÝ�c�4Ñ Ô ð ¥C¨¯ª°¸Ñ(;Ô(;Ð(A¸rÑ$BÔ$BÀhÒ$NÐ$NØˆuØ€Cˆ�KØ€K�ÑÔÐØˆ4r   c           	     óÐ  — t          d¦  «         t          | d¦  «        D ](\  }}t          d|› d|j        d›d|j        › �¦  «         Œ)	 t	          d¦  «                             ¦   «         pd}t          |¦  «        dz
  }n-# t          t          t          f$ r t          d	¦  «         Y d
S w xY wd|cxk    rt          | ¦  «        k     rn n| |         j        S t          d¦  «         d
S )z<Minimal numbered picker (avoids curses dep for a tiny list).zInstalled pets:r!   r   z. r   r   zSelect a pet [1]: Ú1u   âœ— cancelledr   r   u   âœ— invalid selection)r   Ú	enumerater%   r'   Úinputr9   r   ÚEOFErrorr™   rÍ   r   r7   )r=   r¨   r>   ÚchoiceÚidxs        r   rT   rT   ·  s  € å
ÐÑÔÐÝ˜D !Ñ$Ô$ð <ð <‰ˆˆ3ÝÐ:�AÐ:Ð:˜œÐ:Ð:Ð:¨Ô(8Ð:Ð:Ñ;Ô;Ð;Ð;ðÝÐ+Ñ,Ô,×2Ò2Ñ4Ô4Ð;¸ˆÝ�&‰kŒk˜A‰oˆˆøÝÕ'­Ð4ð ð ð Ýˆ_ÑÔÐØˆrˆrðøøøð 	ˆCÐÐÒÐ•#�d‘)”)ÒÐÐÐÐØ�CŒyŒ~ÐÝÐ	 Ñ!Ô!Ð!Øˆ2s   Á
5B  Â &B*Â)B*Úparentúargparse.ArgumentParserc                óf  ‡ — ‰                       ˆ fd„¬¦  «         ‰                      d¬¦  «        }|                     dd¬¦  «        }|                     dd	d
d¬¦  «         |                     ddd¬¦  «         |                     dt          dd¬¦  «         |                      t
          ¬¦  «         |                     dd¬¦  «        }|                     dd¬¦  «         |                     ddd¬¦  «         |                     ddd¬¦  «         |                      t          ¬¦  «         |                     dd¬¦  «        }|                     dd	d
d¬¦  «         |                      t          ¬¦  «         |                     d d!¬¦  «        }|                     dd	d
d"¬¦  «         |                     d#d
d$¬%¦  «         |                     d&dd'¬¦  «         |                     d(dd)¬¦  «         |                     d*d+d,¬%¦  «         |                     d-t          d.d/¬¦  «         |                      t          ¬¦  «         |                     d0d1¬¦  «                              t          ¬¦  «         |                     d2d3¬¦  «        }|                     d4d5¬¦  «         |                      t          ¬¦  «         |                     d6d7¬¦  «        }|                     dd8¬¦  «         |                      t          ¬¦  «         |                     d9d:¬¦  «                              t          ¬¦  «         d+S );z<Attach ``pets`` subcommands to *parent* (called by main.py).c                ó<   •— ‰                      ¦   «         dfd         S )Nr   r!   )Ú
print_help)Úarã   s    €r   ú<lambda>zregister_cli.<locals>.<lambda>Î  s   ø€ ¨×(9Ò(9Ñ(;Ô(;¸QÐ'?ÀÔ'B€ r   )ÚfuncÚpets_command)ÚdestÚlistzBrowse the petdex gallery)Úhelpr"   ú?r   zFilter by slug/name substring)ÚnargsÚdefaultrî   z--installedÚ
store_truezOnly show installed pets)Úactionrî   z--limité(   zMax rows (0 = all))Útyperñ   rî   ÚinstallzInstall a pet from the galleryr%   zPet slug (e.g. boba)z--forcezRe-download even if presentz--selectzMake it the active petrG   z)Set the active pet (writes display.pet.*)zPet slug (omit for picker)Úshowz&Animate the active pet in the terminalzPet slug (default: active)z--statez.Single state: idle/run/review/failed/wave/jump)rñ   rî   z--cyclezCycle through all statesz--oncezPlay once instead of loopingz--modeNz5Override render mode (kitty/iterm/sixel/unicode/auto)z--scaler   zOverride scale (0 = config)ÚoffzDisable the pet displayr_   z-Resize the pet everywhere (display.pet.scale)r^   u*   Scale factor, e.g. 0.5 (clamped 0.1â€“3.0)ÚremovezDelete an installed petzPet slugÚdoctorz+Check pet setup + terminal graphics support)Úset_defaultsÚadd_subparsersÚ
add_parserÚadd_argumentr   rD   rN   rW   r†   rª   rZ   ra   rR   r¸   )rã   ÚsubsÚp_listÚ	p_installÚp_selectÚp_showÚp_scaleÚp_removes   `       r   Úregister_clir  Ì  sS  ø€ à
×ÒÐBÐBÐBÐBÐÑCÔCÐCØ× Ò  nÐ Ñ5Ô5€Dà�_Š_˜VÐ*Eˆ_ÑFÔF€FØ
×Ò˜ s°BÐ=\ÐÑ]Ô]Ð]Ø
×Ò˜¨lÐA[ÐÑ\Ô\Ð\Ø
×Ò˜	­°RÐ>RÐÑSÔSÐSØ
×Ò�YÐÑ'Ô'Ð'à—’ 	Ð0P�ÑQÔQ€IØ×Ò˜6Ð(>ÐÑ?Ô?Ð?Ø×Ò˜9¨\Ð@]ÐÑ^Ô^Ð^Ø×Ò˜:¨lÐAYÐÑZÔZÐZØ×Ò¥ÐÑ-Ô-Ð-à�Š˜xÐ.YˆÑZÔZ€HØ×Ò˜&¨°RÐ>ZÐÑ[Ô[Ð[Ø×Ò�{ÐÑ+Ô+Ð+à�_Š_˜VÐ*Rˆ_ÑSÔS€FØ
×Ò˜ c°2Ð<XÐÑYÔYÐYØ
×Ò˜	¨2Ð4dÐÑeÔeÐeØ
×Ò˜	¨,Ð=WÐÑXÔXÐXØ
×Ò˜¨Ð<ZÐÑ[Ô[Ð[Ø
×Ò˜¨$Ð5lÐÑmÔmÐmØ
×Ò˜	­°qÐ?\ÐÑ]Ô]Ð]Ø
×Ò�YÐÑ'Ô'Ð'à‡O‚O�EÐ 9€OÑ:Ô:×GÒGÍXÐGÑVÔVÐVà�oŠo˜gÐ,[ˆoÑ\Ô\€GØ×Ò˜Ð(TÐÑUÔUÐUØ×Ò�jÐÑ)Ô)Ð)à�Š˜xÐ.GˆÑHÔH€HØ×Ò˜& zÐÑ2Ô2Ð2Ø×Ò�{ÐÑ+Ô+Ð+à‡O‚O�HÐ#P€OÑQÔQ×^Ò^Ýð _ñ ô ð ð ð r   )r   )r   r   r   r   )r   r   )r   r¹   )r   r±   )r%   r   r   r   )r®   r±   r   r   )r_   r†   r   r   )rs   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   )Ú__doc__Ú
__future__r   Úargparser   r   r   rD   rN   rR   rW   rZ   ra   rª   r¸   rƒ   rL   rM   rY   rÇ   r]   rÐ   rÔ   r×   rÛ   rT   r  r$   r   r   ú<module>r
     s  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
ðð ð ð ð ð ð  ð  ð  ð)ð )ð )ð )ðXð ð ð ð*ð ð ð ðð ð ð ð.ð ð ð ðð ð ð ðgð gð gð gðT(ð (ð (ð (ð^0ð 0ð 0ð 0ðRð Rð Rð Rðð ð ð ðð ð ð ðð ð ð ðð ð ð ð$(ð (ð (ð (ð6 ')ð 6ð 6ð 6ð 6ð 6ð 6ð(ð ð ð ð"ð ð ð ð(ð ð ð ð**ð *ð *ð *ð *ð *r   