+
    „WÝjˆI  ã                  ó–  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ]P                  ! ]4      tRtRRRutttR	t^HtR
 R ltR R ltR R ltR R ltRRR R lltR R ltR R lt^(tRsR R ltR R ltR R ltRSR R  lltRSR! R" llt R# R$ lt!R% R& lt"R' R( lt#^
t$R) R* lt%R+ R, lt&RTR- R. llt'RTR/ R0 llt(Rs)]PT                  ! R14      t+]PT                  ! R24      t,R3 R4 lt-R5 R6 lt.R7 t/R8 t0R9 R: lt1R; R< lt2R= R> lt3R? R@ lt4RA RB lt5RC RD lt6RE RF lt7RG RH lt8RI RJ lt9RK RL lt:RM RN lt;RO RP lt<RQ t=R# )Uaë  Glyph-grammar transcript and bottom-anchored chrome for the classic CLI (``display.cli_layout``).

Every row this module prints into scrollback is width-independent (a column-0 glyph, no boxes, no
full-width rules), so resizing the terminal cannot re-wrap and garble what is already printed.
Width-dependent chrome (the composer's top rule and the footer) lives only in prompt_toolkit's live
region, which is redrawn on every resize. ``display.cli_layout: classic`` restores the boxed look.
)ÚannotationsN)Údatetime)Útu   â ‹â ™â ¹â ¸â ¼â ´â ¦â §â ‡â �z[0mz[1mz[2mz[38;2;239;83;80mc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚbool© )Úformats   "ÚPC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\cli_modern_layout.pyÚ__annotate__r      s   € ÷ 7ñ 7�dñ 7ó    c                ó.   € \        \        V R R4      4      # )Ú_modern_layoutF)r	   Úgetattr©Úclis   &r   Ú	is_modernr      s   € Ü”˜Ð-¨uÓ5Ó6Ð6r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚdisplayÚdictr   r	   r
   )r   s   "r   r   r      s   € ÷ eñ e ð e¨ñ er   c                óž   € \        T ;'       g    / P                  RR4      ;'       g    R4      P                  4       P                  4       R8g  # )zLTrue for the glyph layout (default); ``classic`` keeps the boxed transcript.Ú
cli_layoutÚmodernÚclassic©ÚstrÚgetÚstripÚlower©r   s   &r   Úlayout_from_configr"      s@   € ä�—�˜2×"Ñ" <°Ó:×FÐF¸hÓG×MÑMÓO×UÑUÓWÐ[dÑdÐdr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r   r
   )r   s   "r   r   r   $   s   € ÷ Vñ V¨ð V°#ñ Vr   c                ó–   € \        T ;'       g    / P                  R4      ;'       g    R4      P                  4       P                  4       # )z]``display.busy_input_mode``; unset interrupts in both layouts (Tab still queues in this one).Úbusy_input_modeÚ	interruptr   r!   s   &r   Úbusy_input_mode_from_configr'   $   s9   € ä�—�˜2×"Ñ"Ð#4Ó5×DÐD¸ÓE×KÑKÓM×SÑSÓUÐUr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úkeyr   Úfallbackr   r
   )r   s   "r   r   r   )   s&   € ÷ Bñ B�3ð B #ð B¨#ñ Br   c                óN   € ^ RI Hp V! 4       P                  W4      ;'       g    T# )é    ©Úget_active_skin)Úhermes_cli.skin_enginer.   Ú	get_color)r)   r*   r.   s   && r   Ú	_skin_hexr1   )   s!   € Ý6ÙÓ×&Ñ& sÓ5×AÐA¸ÐAr   Fc               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	hex_colorr   Úboldr	   r   r
   )r   s   "r   r   r   .   s!   € ÷ %ñ %�3ð %˜dð %¨sñ %r   c           	     ó¨   a €  V 3R  lR 4       w  r#pRV'       d   RMR RV RV RV R2	#   \         \        3 d    T'       d	   \        u # Ru # i ; i)c              3  ól   <"  € T F)  p\        SP                  R 4      W^,            ^4      x € K+  	  R# 5i)Ú#N)ÚintÚlstrip)Ú.0Úir3   s   & €r   Ú	<genexpr>Ú_fg.<locals>.<genexpr>0   s/   øé € ÐNÁI¸q”3�y×'Ñ'¨Ó,¨Q°1­uÐ5°r×:Ð:ÃIùs   ƒ14z[z1;Ú z38;2;Ú;Úm)r,   r   é   )Ú
ValueErrorÚ
IndexErrorÚ_BOLD)r3   r4   ÚrÚgÚbs   f&   r   Ú_fgrH   .   s]   ø€ ð%ÜNÁIÓN‰ˆˆaØŸt‘t¨Ð,¨E°!°°A°a°S¸¸!¸¸AÐ>Ð>øÜœ
Ð#ô %ßŒuÒ$ "Ò$ð%ús   ƒ'+ «AÁAÁAÁAc               ó   € V ^8„  d   QhRR/# )r   r   ztuple[str, str]r
   )r   s   "r   r   r   6   s   € ÷ cñ c�oñ cr   c                 óø   € ^ RI Hp  V ! 4       P                  RR4      pVP                  R^4      p\	        V4      ^8X  d!   V^ ,          V^,          P                  4       3# RVP                  4       ;'       g    R3# )u\   (glyph, name) from the skin's response label, e.g. ``" â˜¤ Hermes "`` â†’ ("â˜¤", "Hermes").r-   Úresponse_labelu    â˜¤ Hermes Nu   â˜¤ÚHermes)r/   r.   Úget_brandingÚsplitÚlenr   )r.   ÚlabelÚpartss      r   Ú_brand_glyphrR   6   sh   € å6ÙÓ×*Ñ*Ð+;¸^ÓL€EØ�K‰K˜˜aÓ €EÜ+.¨u«:¸¬?ˆE�!�H�e˜A•h—n‘nÓ&Ð'ÐbÀÈÏÉË×HaÐHaÐYaÐ@bÐbr   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r
   )r   s   "r   r   r   >   s   € ÷ Sñ S�cñ Sr   c                 ól   € ^ RI Hp  V ! 4       P                  RR4      P                  4       ;'       g    R# )r,   r-   Úprompt_symbolu   â�¯)r/   r.   rM   r   r-   s    r   Úprompt_glyphrW   >   s,   € Ý6ÙÓ×)Ñ)¨/¸5ÓA×GÑGÓI×RÐRÈUÐRr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úaccentr	   r   r   r
   )r   s   "r   r   r   O   s   € ÷ 6ñ 6�dð 6˜sñ 6r   c                óz   € Rs V '       d   \        \        RR4      4      M\        pV R\        ,           \
         2# )z¨An opening bar: accent for user messages and answers, dim for reasoning. Every caller prints
a blank line ahead of it, so it also settles a gap the previous block owes.FÚ	ui_accentú#FFBF00õ   â”€)Ú_GAP_PENDINGrH   r1   Ú_DIMÚ_SEPARATOR_WIDTHÚ_RST)rZ   Úcolors   & r   Ú	separatorrd   O   s8   € ð €Lß6<ŒC”	˜+ yÓ1Ô2Ä$€EØˆW�UÔ-Õ-Ð.¬t¨fÐ5Ð5r   c               ó    € V ^8„  d   QhRRRR/# rY   r
   )r   s   "r   r   r   X   s   € ÷ ñ ˜dð  sñ r   c                ó    € \        V 4      pRsV# )zUThe bar that closes a block; the blank line after it is owed to whatever prints next.T)rd   r_   )rZ   Úbars   & r   Úclosing_separatorrh   X   s   € ô �FÓ
€CØ€LØ€Jr   c               ó   € V ^8„  d   QhRR/# rT   r
   )r   s   "r   r   r   `   s   € ÷ ñ �3ñ r   c                 ó,   € \         '       d   R MRRup s V # )Ú
r>   F)r_   )Úgaps    r   Ú	_take_gaprm   `   s   € ç!-£™°2¸Ð€CˆØ€Jr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Útextr   Ú
accent_hexÚ	ts_suffixr   r
   )r   s   "r   r   r   f   s.   € ÷ `ñ `˜3ð `¨Cð `¸Cð `Èñ `r   c                óR   € ^ RI Hp RV RV! \        4       4       RV! V 4       RV 2# )uC   Rich markup for a submitted single-line user message: ``â�¯ text``.)Úescapez[bold Ú]z
[/] [bold]z[/])Úrich.markuprs   rW   )ro   rp   rq   rs   s   &&& r   Úuser_echo_markuprv   f   s3   € å"Ø�J�<˜q¡¬«Ó!7Ð 8¸
Á6È$Ã<À.ÐPSÐT]ÐS^Ð_Ð_r   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	timestampr   r   r
   )r   s   "r   r   r   l   s   € ÷ rñ r˜Cð r¨ñ rr   c           	     ó¶   € \        4       w  rV '       d   R\         V  \         2MRpR\        R4       R\	        \        RR4      RR7       V RV \         V 2	# )zQThe rows that open an answer: the accent bar, then the skin's brand glyph + name.Ú r>   rk   Tr\   r]   )r4   )rR   r`   rb   rd   rH   r1   )rx   ÚglyphÚnameÚstamps   &   r   Úanswer_labelr~   l   se   € ä“.�K€Eß+4ˆa”ˆv�i�[¤ Ñ'¸"€EØ”	˜$“Ð  ¤3¤y°¸iÓ'HÈtÔ#TÐ"UÐV[ÐU\Ð\]Ð^bÐ]cÔdhÐciÐjoÐipÐqÐqr   c               ó    € V ^8„  d   QhRRRR/# ©r   ro   r   r   r
   )r   s   "r   r   r   s   s   € ÷ 0ñ 0�cð 0˜cñ 0r   c                ó2  € T ;'       g    RP                  4       p \        P                  ! RV 4      pV'       d   VP                  ^4      M\        P                  ! RV ^R7      ^ ,          pRP                  VP	                  4       4      P                  R4      # )zZThe reasoning's first ``**bold**`` heading, else its first sentence, whitespace-collapsed.r>   z\*\*(.+?)\*\*z(?<=[.!?])\s|\n)Úmaxsplitrz   ú*# )r   ÚreÚsearchÚgrouprN   Újoin)ro   ÚmatchÚtitles   &  r   Ú_full_titlerŠ   s   sm   € à�JˆJ�B×ÑÓ€DÜ�IŠIÐ&¨Ó-€Eß#ˆE�K‰K˜ŒN¬¯ªÐ2DÀdÐUVÔ)WÐXYÕ)Z€EØ�8‰8�E—K‘K“MÓ"×(Ñ(¨Ó/Ð/r   c               ó    € V ^8„  d   QhRRRR/# r€   r
   )r   s   "r   r   r   {   s   € ÷ Zñ Z˜ð Z ñ Zr   c                óŽ   € \        V 4      p\        V4      \        8:  d   V# VR\        ^,
           P                  4       R,           # )z[Short title for a reasoning block: its first ``**bold**`` heading, else its first sentence.Nõ   â€¦)rŠ   rO   Ú
_TITLE_MAXÚrstrip)ro   r‰   s   & r   Úthought_titler�   {   s<   € ä˜Ó€EÜ˜“J¤*Ô,ˆ5ÐY°%¸¼Àa½Ð2H×2OÑ2OÓ2QÐTYÕ2YÐYr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úsecondsúfloat | Nonero   r   r   r
   )r   s   "r   r   r   �   s!   € ÷ (ñ (˜,ð (¨cð (°cñ (r   c                óX  € \        V4      RP                  T;'       g    RP                  4       4      P                  R4      8H  pV'       d   RM
\	        V4      pV '       d$   \        R\        T ;'       g    RR4      R R7      M
\        R4      pV'       d   V R	V 2MTpR
V \         2# )uV   ``âˆ´ Thought for 3s Â· Planning the change`` (dim italic), closing a reasoning block.rz   r>   rƒ   zcli.modern.thought_forç        z.0f)r’   zcli.modern.thoughtõ    Â· u
   [2;3mâˆ´ )rŠ   r‡   rN   r   r�   r   Úmaxrb   )r’   ro   Úwholer‰   ÚtookÚbodys   &&    r   Úthought_liner›   �   s“   € ô ˜Ó §¡¨4¯:¨:°2×*<Ñ*<Ó*>Ó!?×!EÑ!EÀeÓ!LÑL€Eß‰Bœ]¨4Ó0€EßU\Œ1Ð%´#°g·n°nÀÀcÓ2JÈ3Ð1OÕQÔbcÐdxÓby€Dß#(ˆdˆV�4˜�wÑ¨d€DØ˜4˜&¤ Ð'Ð'r   c               ó    € V ^8„  d   QhRRRR/# )r   Úliner   r   r
   )r   s   "r   r   r   Ž   s   € ÷ !ñ !˜cð ! cñ !r   c                ó"   € \          V  \         2# )zOOne streamed reasoning line: dim, no frame (the dim bar above opens the block).)r`   rb   )r�   s   &r   Úreasoning_text_linerŸ   Ž   s   € äˆV�D�6œ$˜Ð Ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r’   r“   ro   r   Úfullr	   r   z	list[str]r
   )r   s   "r   r   r   “   s.   € ÷ Jñ J˜,ð J¨cð J¸ð JÀ)ñ Jr   c                óº  € T;'       g    RP                  4       P                  4       pV'       g   \        V4      \        8:  d   TMVR\         pR\	        R4      .R V 4       Op\        V4      \        V4      8  dE   VP                  \         R\        R\        V4      \        V4      ,
          R7       \         24       . VO\        W4      N\        R4      N# )u£   A reasoning block printed after the fact (no live stream): dim bar, its text (first 10
lines unless ``full``, as classic), then the ``âˆ´ Thought for 3s`` summary.r>   NFc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)rŸ   )r:   r�   s   & r   r<   Úthought_rows.<locals>.<genexpr>˜   s   é € Ð#PÉ%À$Ô$7¸×$=Ð$=Ë%ùs   ‚ú  zcli.chat.reasoning_more_lines)Úcount)r   Ú
splitlinesrO   Ú_REASONING_PREVIEW_LINESrd   Úappendr`   r   rb   r›   rh   )r’   ro   r¡   ÚlinesÚshownÚrowss   &&&   r   Úthought_rowsr®   “   s¿   € ð �ZˆZ�R×ÑÓ ×+Ñ+Ó-€EßœS ›ZÔ+CÔC‰EÈÐOhÔPhÐIi€EØ”	˜%Ó ÐQÑ#PÉ%Ó#PÐQ€DÜ
ˆ5ƒz”C˜“JÔØ�‰”t�f˜BœqÐ!@ÌÈEË
ÔUXÐY^ÓU_ÕH_Ô`ÐaÔbfÐagÐhÔiØIˆTÐI”< Ó.ÐIÔ0AÀ%Ó0HÐIÐIr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# ©
r   Úfunction_namer   Úargszdict | NoneÚdurationÚfloatÚis_errorr	   r   r
   )r   s   "r   r   r   ž   s8   € ÷ Vñ V¨Cð V°{ð VÈeð VØ"&ðVØ36ñVr   c                ó‚   € \        V 4      '       d   \        4       \        WW4V4      ,           # ^ RIHp RV! WW4R7       2# )zBThe scrollback line for a finished tool call in the active layout.)Úget_cute_tool_messager¦   )Úresult)r   rm   Útool_rowÚagent.displayr·   )r   r±   r²   r³   r¸   rµ   r·   s   &&&&&& r   Úcompleted_tool_liner»   ž   s<   € ô �‡~‚~Ü‹{œX m¸8ÈXÓVÕVÐVÝ3ØÑ% m¸8ÔSÐTÐUÐUr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# r°   r
   )r   s   "r   r   r   §   s1   € ÷ ñ ˜Cð  {ð ¸eð Ð\`ð Ðmpñ r   c                ó°  € ^ RI HpHp T! Y;'       g    / V\        V4      R7      pV! W4      p. p	\	        V4       EF  w  p
w  r¼rÞT;'       g    T P                  4       pVe   V'       g   \         R\         2MT;'       g    RpV R\         VR,          P                  4        VR,           \         2pV'       d   VRV 2,          pV
\        V4      ^,
          8X  d"   VR8¼  d   VR	\         VR
 R\         2,          pV'       d&   TV'       d   \        M\         V \         2,          pV	P                  V4       EK	  	  RP                  V	4      # )u  ``ðŸ“– Read calc.py  0.2s`` / ``âœ— $ pytest -q  0.4s [exit 1]`` â€” one row per completed call, led by
the tool's emoji (the classic ``â”Š`` row's), or a red ``âœ—`` when that entry failed. A tool in
``NEUTRAL_FAILURE_TOOLS`` keeps its emoji and shows the reason dim.)Úget_tool_row_partsÚis_neutral_failure)rµ   u   âœ—u   â—�rz   :Né   NºrÀ   NNgš™™™™™¹?r¦   z.1fÚsrk   )rº   r¾   r¿   r	   Ú	enumerater   Ú_REDrb   rD   ÚupperrO   r`   rª   r‡   )r±   r²   r³   r¸   rµ   r¾   r¿   r­   ÚneutralÚoutÚindexÚemojiÚverbÚdetailÚsuffixÚmarkr�   s   &&&&&            r   r¹   r¹   §   s+  € ÷ EÙ˜m¯Z¨Z°R¸Ì$ÈxË.ÔY€DÙ  Ó7€GØ
€CÜ09¸$·Ñ,ˆÑ,�˜VØ×%Ð%˜×,Ñ,Ó.ˆØ%+Ò%7Ç”$��sœ4˜&Ñ!ÈeÏnÈnÐW\ˆØ��qœ˜  R¥§¡Ó 0Ð1°$°rµ(°¼D¸6ÐBˆßØ�a˜�x�LÕ ˆDØ”C˜“I •MÔ! h°#¤oØ�bœ˜˜x¨˜n¨A¬d¨VÐ4Õ4ˆDßØŸw•t¬DÐ1°&°¼$¸Ð@Õ@ˆDØ�
‰
�4×ñ 1@ð �9‰9�S‹>Ðr   z\x1b\[[0-9;]*mu   ^a/(.+?) â†’ b/(.+)$c               ó    € V ^8„  d   QhRRRR/# )r   Úenabledr	   r   ÚNoner
   )r   s   "r   r   r   Â   s   € ÷ ñ ˜ð  ñ r   c                ó   € \        V 4      sR # r¤   )r	   Ú_ACTIVE)rÏ   s   &r   Ú
set_activerÓ   Â   s   € ä�7‹m‚Gr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpathr   r   r
   )r   s   "r   r   r   Ç   s   € ÷ 1ñ 1˜ð 1 ñ 1r   c                ó–  € V P                  R 4      '       d
   V R,          MT p \        P                  ! R4      ;'       g    \        P                  ! 4       p \        P                  P                  V 4      '       d    \        P                  P                  W4      MT pTP                  R4      '       d   T # T#   \         d    T u # i ; i)z//rÁ   ÚTERMINAL_CWDz..)Ú
startswithÚosÚgetenvÚgetcwdrÕ   ÚisabsÚrelpathrB   )rÕ   ÚcwdÚrels   &  r   Ú_display_pathrà   Ç   s“   € Ø—‘ t×,Ò,ˆ4�Ž8°$€DÜ
�)Š)�NÓ
#×
2Ð
2¤r§y¢y£{€CðÜ,.¯G©G¯M©M¸$×,?Ò,?Œb�g‰g�o‰o˜dÔ(ÀTˆð —>‘> $×'Ò'ˆ4Ð0¨SÐ0øô ô ØŠðús   Á$B8 Á<!B8 Â8CÃCc                ór   a a€ \         P                  R\        R4      4      P                  4       oVV 3R lpV# )u²   Wrap a line printer so a diff hangs under its tool row behind a dim ``â”‚``: the ``review
diff`` header is dropped and ``a/<abs> â†’ b/<abs>`` collapses to one cwd-relative path.r>   zdisplay.diff.review_headerc                óÜ  <€ \        V 4      P                  R 4       FÌ  p\        P                  RV4      P	                  4       pVS8X  d   K0  \
        P                  V4      pV'       dQ   \        VP                  ^4      4      \        VP                  ^4      4      rT\         WE8X  d   TMV RV 2 \         2pS! V'       d   \         R\         RV 2M\         R\         24       KÎ  	  R# )rk   r>   u    â†’ u   â”‚rz   N)r   rN   Ú_ANSI_REÚsubr   Ú_DIFF_FILE_RErˆ   rà   r†   rD   rb   r`   )ro   r�   Úplainrˆ   ÚoldÚnewÚheaderÚprint_fns   &     €€r   Ú_printÚgutter_print.<locals>._printÖ   s¾   ø€ Ü˜“I—O‘O DÖ)ˆDÜ—L‘L  TÓ*×0Ñ0Ó2ˆEØ˜ŒÙÜ!×'Ñ'¨Ó.ˆEßÜ(¨¯©°Q«Ó8¼-ÈÏÉÐTUËÓ:W�SÜ˜¨¬
¡¸3¸%¸uÀSÀEÐ8JÐ KÌDÈ6ÐR�Ù·%œ�v˜S¤  a¨ vÑ.Ä¸vÀSÌÈÐ=OÖPó *r   )rã   rä   r   r   )rê   rë   ré   s   f @r   Úgutter_printrí   Ñ   s1   ù€ ô �\‰\˜"œaÐ <Ó=Ó>×DÑDÓF€Fö	Qð €Mr   c                ó4   € \         '       d   \        V 4      # T # )zM``print_fn`` with the gutter when the glyph layout is active in this process.)rÒ   rí   )rê   s   &r   Údiff_printerrï   ã   s   € ç%,£WŒ<˜Ó!Ð:°(Ð:r   c               ó    € V ^8„  d   QhRRRR/# )r   Úsummaryr   r   r
   )r   s   "r   r   r   è   s   € ÷ hñ h˜ð h ñ hr   c                ó~  € V P                  R4      P                  4       p\        P                  R8w  d%   \        P
                  ! 4       P                  R4      M#\        P
                  ! 4       P                  R4      p\        4       V'       d   \         RV RV \         2,           # \         RV \         2,           # )uR   ``â”€ 12.4s Â· read 3 files Â· edited 1 file +4 -0 Â· 7:02 AM`` closing each turn.u   â‹¯ Úntz	%-I:%M %pz%I:%M %pu   â”€ r–   )
r9   r   rÙ   r|   r   ÚnowÚstrftimerm   r`   rb   )rñ   rš   Úclocks   &  r   Úturn_footerr÷   è   s�   € à�>‰>˜&Ó!×'Ñ'Ó)€DÜ46·G±G¸t´OŒH�LŠL‹N×#Ñ# KÔ0ÌÏÊË×I`ÑI`ÐakÓIl€EÜ‹;Ç$œT˜F $ t f¨D°°¼°vÐ>ÕgÐgÌtÈfÐTXÐY^ÐX_Ô`dÐ_eÐLfÕgÐgr   c               ó   € V ^8„  d   QhRR/# rT   r
   )r   s   "r   r   r   ñ   s   € ÷ 6ñ 6�Cñ 6r   c                 óx  € \         P                  ! R 4      ;'       g    \         P                  ! 4       p \         P                  P	                  R4      pW8X  g-   V P                  V\         P                  ,           4      '       d   RV \        V4      R ,           MT p^ RIH	p V! V 4      pV'       d	   V RV R2# T# )r×   Ú~N)Úcurrent_git_branchz (Ú))
rÙ   rÚ   rÛ   rÕ   Ú
expanduserrØ   ÚseprO   Úhermes_cli.status_bar_gitrû   )rÞ   ÚhomeÚshortrû   Úbranchs        r   Ú
_cwd_labelr  ñ   sŠ   € Ü
�)Š)�NÓ
#×
2Ð
2¤r§y¢y£{€CÜ�7‰7×Ñ˜cÓ"€DØ%(¤[°C·N±NÀ4Ì"Ï&É&Å=×4QÒ4QˆC�#”c˜$“i�j�/Ö!ÐWZ€EÝ<Ù Ó$€Fß$*ˆeˆW�B�v�h˜aÐ Ð5°Ð5r   c               ó   € V ^8„  d   QhRR/# rT   r
   )r   s   "r   r   r   ú   s   € ÷ ^ñ ^˜#ñ ^r   c                ó  € \        V RR4      '       d!   \        \        V RR4      ;'       g    R4      # \        \        V RR4      ;'       g    R4      P                  4       pT;'       g!    \        V RR4      '       d   \        R4      # R# )zZWhat the agent is doing: the classic spinner's text (kaomoji face or tool emoji included).Ú_command_runningFÚ_command_statusr>   Ú_spinner_textÚ_agent_runningzcli.modern.working)r   r   r   r   )r   ro   s   & r   Úactivity_textr
  ú   s|   € äˆsÐ&¨×.Ò.Ü”7˜3Ð 1°2Ó6×<Ð<¸"Ó=Ð=ÜŒw�s˜O¨RÓ0×6Ð6°BÓ7×=Ñ=Ó?€DØ×]Ð]¬w°sÐ<LÈe×/TÒ/T”AÐ*Ó+Ð]ÐZ\Ð]r   c               ó   € V ^8„  d   QhRR/# rT   r
   )r   s   "r   r   r     s   € ÷ Kñ K˜#ñ Kr   c           	     óž   € \        V R R4      pVf   R# ^ RIHp V! \        R\        P                  ! 4       \        V4      ,
          4      4      # )Ú_prompt_start_timeNr>   )Úformat_duration_compactr•   )r   r   r  r—   Útimer´   )r   Ústartedr  s   &  r   Ú_turn_elapsedr    s=   € Ü�cÐ/°Ó6€GØ‚ÙÝ+Ù"¤3 s¬D¯IªI«K¼%À».Õ,HÓ#IÓJÐJr   c               ó   € V ^8„  d   QhRR/# rT   r
   )r   s   "r   r   r   
  s   € ÷ :ñ :�Cñ :r   c                 ó    € R\        RR4       2# )zKComposer rules are quiet chrome: the skin's session border, not the accent.úfg:Úsession_borderz#8B8682)r1   r
   r   r   Ú
rule_styler  
  s   € à”Ð+¨YÓ7Ð8Ð9Ð9r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚfragsÚlistr   r
   )r   s   "r   r   r     s   € ÷ Lñ L�$ð L˜4ñ Lr   c                ó`   € V  UUu. uF  w  rV R2P                  4       V3NK  	  upp# u uppi )zNThe footer sits on the terminal background, not the classic status bar's fill.z bg:default)r   )r  Ústylero   s   &  r   Ú_no_bgr    s1   € áEJÔKÁU±k°e�ˆw�kÐ"×(Ñ(Ó*¨DÓ1ÁUÒKÐKùÓKs   † *c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r  Úwidthr8   r   r
   )r   s   "r   r   r     s&   € ÷ Eñ E�Tð E #ð E¨$ñ Er   c                ó¦   a € \        V 3R  lV 4       4      pW28:  d   V# RP                  R V 4       4      p\        4       S P                  WB4      3.# )c              3  óJ   <"  € T F  w  rSP                  V4      x € K  	  R # 5ir¤   ©Ú_status_bar_display_width©r:   Ú_ro   r   s   &  €r   r<   Ú_fit.<locals>.<genexpr>  s!   øé € ÐHÁ%±w°qˆs×,Ñ,¨T×2Ð2Ã%ùó   ƒ #r>   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5ir¤   r
   )r:   r$  ro   s   &  r   r<   r%    s   é € Ð.©™W˜Q•D«ùs   ‚)Úsumr‡   r  Ú_trim_status_bar_text)r   r  r  Úusedræ   s   f&&  r   Ú_fitr+    sL   ø€ ÜÔHÁ%ÓHÓH€DØ„}ØˆØ�G‰GÑ.©Ó.Ó.€EÜ‹\˜3×4Ñ4°UÓBÐCÐDÐDr   c               ó   € V ^8„  d   QhRR/# ©r   r   r  r
   )r   s   "r   r   r     s   € ÷ Sñ S˜tñ Sr   c                ób  a € \        ^
S P                  4       4      p\        4       R\        RR4       R2r2\	        S RR4      ;'       g    \	        S RR4      p. pV'       d´   \
        \        \        P                  ! 4       ^
,          4      \        \
        4      ,          ,          pVR3W6R	,           3R
\        S 4      3.p\        S 4      S P                  4       3 F#  pV'       g   K  VP                  RRV 234       K%  	  VP                  VR	34       S P                  4       pV'       d   VR	3R\        RR4       2V3VR3.M. p	\        V 3R lWY,            4       4      p
W¡8¼  d   . \        V 3R lV 4       4      r©\!        S WRR\        ^ W,
          4      ,          3.,           V	,           V4      # )u~   ``â”€â”€ â ¹ Running tests Â· 14s â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ calc helpers â”€``: live status left, session title right.r  r\   r]   z boldr	  Fr  u   â”€â”€ rz   r>   zclass:status-bar-dim bg:defaultr–   Úui_labelz#DAA520u    â”€c              3  óJ   <"  € T F  w  rSP                  V4      x € K  	  R # 5ir¤   r!  r#  s   &  €r   r<   Ú%top_rule_fragments.<locals>.<genexpr>,  s!   øé € ÐOÁ,±w°qˆs×,Ñ,¨T×2Ð2Ã,ùr&  c              3  óJ   <"  € T F  w  rSP                  V4      x € K  	  R # 5ir¤   r!  r#  s   &  €r   r<   r1  .  s#   øé € ÐVÑQUÁgÀa˜c×;Ñ;¸D×AÐAÓQUùr&  r^   )r—   Ú_get_tui_terminal_widthr  r1   r   Ú_SPINr8   r  Ú	monotonicrO   r
  r  Ú_spinner_token_flowrª   Ú_get_status_bar_session_titler(  r+  )r   r  ÚrulerZ   ÚbusyÚleftÚframeÚextrar‰   Úrightr*  s   f          r   Útop_rule_fragmentsr>    s‚  ø€ ä��C×/Ñ/Ó1Ó2€EÜ“< 3¤y°¸iÓ'HÐ&IÈÐ!Oˆ&Ü�3Ð(¨%Ó0×[Ð[´G¸CÐASÐUZÓ4[€DØ€DßÜ”cœ$Ÿ.š.Ó*¨RÕ/Ó0´3´u³:Õ=Õ>ˆØ�yÐ! F°C­KÐ#8¸2¼}ÈSÓ?QÐ:RÐSˆä# CÓ(¨#×*AÑ*AÓ*CÓDˆEß‰uØ—‘Ð>À$ÀuÀgÀÐOÖPñ Eð 	�‰�T˜3�KÔ Ø×-Ñ-Ó/€Eß`eˆd�Cˆ[˜S¤¨:°yÓ!AÐ BÐCÀUÐKÈdÐTZÈ^Ñ\Ðkm€EÜÔOÀ$Æ,ÓOÓO€DØ„}Øœ#ÔVÑQUÓVÓVˆtÜ��T E¬C°°5µ<Ó,@Õ$@ÐAÐBÕBÀUÕJÈEÓRÐRr   c               ó   € V ^8„  d   QhRR/# )r   r   zlist[tuple[str, str]]r
   )r   s   "r   r   r   2  s   € ÷ xñ xÐ,ñ xr   c                óÎ  a € \         ;QJ d    V 3R lR 4       F  '       g   K   RM	  RM! V 3R lR 4       4      '       d   . # \        S RR4      '       dk   RRRR/P                  \        S RR4      R	4      pR
\        RV 24      3.pVR8w  d   VP	                  R\        R4      34       VR\        R4      3.,           # R\        R4      3R\        R4      3R\        R4      3.# )z>Keys that do something right now, for the footer's right half.c              3  ó>   <"  € T F  p\        SVR 4      x € K  	  R # 5ir¤   )r   )r:   Úattrr   s   & €r   r<   Úhint_pairs.<locals>.<genexpr>4  s(   øé € ð Vñ 1U¨Œ7�3˜˜d×#Ð#ó 1Uùs   ƒTFr	  ÚsteerÚqueuer%   r>   r&   Úenterzcli.modern.hint_Útabzcli.modern.hint_queuezctrl+czcli.modern.hint_stopÚ/zcli.modern.hint_commandsÚ@zcli.modern.hint_filesÚ!zcli.modern.hint_shell)Ú_approval_stateÚ_clarify_stateÚ_sudo_stateÚ_secret_stateÚ_connection_stateÚ_slash_confirm_stateÚ_model_picker_stateÚ_command_palette_state)Úanyr   r   r   rª   )r   rF  Úpairss   f  r   Ú
hint_pairsrU  2  sþ   ø€ ç
ƒsô Vñ 1Uó V‡s‡s‚sô Vñ 1Uó V÷ Vò Vð ˆ	ÜˆsÐ$ e×,Ò,Ø˜' 7¨GÐ4×8Ñ8¼ÀÐFWÐY[Ó9\Ð^iÓjˆØœ1Ð/°¨wÐ7Ó8Ð9Ð:ˆØ�GÔØ�L‰L˜%¤Ð#:Ó!;Ð<Ô=Ø˜¤1Ð%;Ó#<Ð=Ð>Õ>Ð>Ø”!Ð.Ó/Ð0°3¼Ð:QÓ8RÐ2SÐVYÔ[\Ð]tÓ[uÐUvÐwÐwr   c               ó   € V ^8„  d   QhRR/# r-  r
   )r   s   "r   r   r   A  s   € ÷ 7ñ 7 $ñ 7r   c                ó"   € \        \        V 4      # )uº   Footer under the composer: model Â· context gauge Â· cwd (branch) left, live key hints right.
An explicit ``display.status_bar.fields`` list keeps the user's chosen segments on the left.)Ú_render_safelyÚ_status_line_fragmentsr   s   &r   Ústatus_line_fragmentsrZ  A  s   € ô Ô0°#Ó6Ð6r   c               ó   € V ^8„  d   QhRR/# r-  r
   )r   s   "r   r   r   G  s   € ÷ Cñ C 4ñ Cr   c                ó´   €  V ! V4      #   \          dC    \        P                  RT P                  RR7       RR\	        TRR4      ;'       g    R 23.u # i ; i)zRBoundary for prompt_toolkit render callbacks: a bad frame degrades to a bare line.z	%s failedT)Úexc_infor>   rz   ÚmodelrL   )Ú	ExceptionÚloggerÚdebugÚ__name__r   )Úrenderr   s   &&r   rX  rX  G  s`   € ðCÙ�c‹{ÐøÜô CÜ�‰�[ &§/¡/¸DˆÔAØ�qœ  g¨rÓ2×>Ð>°hÐ?Ð@ÐAÐBÒBðCús   ‚
 ŠAAÁAÁAc               ó   € V ^8„  d   QhRR/# r-  r
   )r   s   "r   r   r   P  s   € ÷ *Yñ *Y 4ñ *Yr   c                óØ  a a€ \        ^
S P                  4       4      pRRr2S P                  4       pS P                  4       oV3R lp. pS P	                  WASS P                  4       RR7       F/  pV'       d   VP                  VR34       VP                  V4       K1  	  V! R4      '       d-   \        S R4      '       d   S P                  P                  4       MR	pV'       d   WbR3W83.,          pVP                  R
4      ;'       g    R	p	V	'       d:   V! R4      '       d,   RS P                  VP                  RR4      4      V	3VR3.VR&   S P                  4       p
V
'       d   WbR3W:3.,          p. pV^L8¼  d   \        S 4      M.  F1  w  rÍV'       d   VP                  VR34       W³V3VRV 23.,          pK3  	  \        V 3R lV 4       4      p\        V 3R lV 4       4      pW,
          V,
          ^,
          pSfe   V^8¼  d^   \!        4       p\#        V4      V8:  d   TMRVV^,
          ) R ,           pWbR3VV3.,          pV^S P%                  V4      ,           ,          pV'       d   Wï,           ^,           V8”  d   . ^ rûV'       d+   R	R\        ^W,
          V,
          ^,
          4      ,          3.M. p\'        \)        S VV,           V,           V'       d   R.M. ,           V4      4      # )z£The classic bar's segments (same fields, same width tiers, same ``display.status_bar.fields``
filter), then cwd (branch) and the live key hints when there is room.zclass:status-bar-dimzclass:status-bar-strongc                ó&   <€ SR J ;'       g    V S9   # r¤   r
   )r|   Ú	field_sets   &€r   Ú_onÚ#_status_line_fragments.<locals>._onX  s   ø€ Ø˜DÐ ×5Ð5 D¨IÑ$5Ð5r   T)Ústyledr–   ÚstashÚ_prompt_stashr>   Úbattery_labelÚbatteryrz   Úbattery_categoryÚdimu    Â·:r,   r,   Nc              3  óJ   <"  € T F  w  rSP                  V4      x € K  	  R # 5ir¤   r!  r#  s   &  €r   r<   Ú)_status_line_fragments.<locals>.<genexpr>o  s!   øé € ÐLÁt¹G¸A�C×1Ñ1°$×7Ð7Ãtùr&  c              3  óJ   <"  € T F  w  rSP                  V4      x € K  	  R # 5ir¤   r!  r#  s   &  €r   r<   rr  p  s!   øé € ÐNÉ¹W¸Q�S×2Ñ2°4×8Ð8Ëùr&  Nr�   )r>   rz   )r—   r3  Ú_get_status_bar_snapshotÚ_get_status_bar_field_setÚ_status_bar_segmentsÚ_is_session_yolo_activerª   ÚextendÚhasattrrl  Ú	indicatorr   Ú_battery_status_styleÚ_vim_mode_labelrU  r(  r  rO   r"  r  r+  )r   r  rp  ÚstrongÚsnapshotrh  r:  Úsegrk  rn  Úvimr=  r)   ro   Ú	used_leftÚ
used_rightÚroomrÞ   Úpadrg  s   f                  @r   rY  rY  P  s¥  ù€ ô ��C×/Ñ/Ó1Ó2€EØ(Ð*CˆØ×+Ñ+Ó-€HØ×-Ñ-Ó/€Iõ6ð €DØ×'Ñ'¨¸ÀC×D_ÑD_ÓDaÐjnÐ'ÖoˆßØ�K‰K˜˜f˜Ô&Ø�‰�CÖñ pñ .1°¯\ª\¼gÀcÈ?×>[Ò>[ˆC×Ñ×'Ñ'Ô)Ðac€EßØ�v�  Ð0Õ0ˆØ�l‰l˜?Ó+×1Ð1¨r€Gß‘3�y—>’>Ø ×!:Ñ!:¸8¿<¹<ÐHZÐ\aÓ;bÓ!cÐelÐ mØ˜5�\ð#ˆˆS‰	à
×
Ñ
Ó
€Cß
Ø�v�  Ð.Õ.ˆØ€EØ(-°¬”Z ”_¸Ò;‰	ˆßØ�L‰L˜#˜v˜Ô'Ø˜3�- #¨¨4¨& zÐ!2Ð3Õ3Šñ <ô ÔLÁtÓLÓL€IÜÔNÉÓNÓN€JØÕ˜zÕ)¨AÕ-€DØÒ˜T RœZÜ‹lˆÜ˜“X Ô%‰c¨5°3¸À½°{°|Ð3DÕ+DˆØ�v�  c 
Ð+Õ+ˆØ�Q˜×6Ñ6°sÓ;Õ;Õ;ˆ	ß�Õ'¨!Õ+¨eÔ3Ø ˆzßFKˆB�”c˜!˜UÕ.°Õ;¸aÕ?Ó@Õ@ÐAÑ
BÐQS€CÜ”$�s˜D 3�J¨Õ.Ç°9±+ÈBÕOÐQVÓWÓXÐXr   c                óÖ   a € ^ RI Hp ^ RIHpHp V! V! V 3R l4      V 3R lRR7      pV! RV 3R l\
        R	7      pR
 V 3R llpVP                  RV! V4      RR7      V 3R l4       pWV3# )zZThe composer's rules for this layout (the top one carries live status), plus Tab-to-queue.)Ú	Condition)ÚFormattedTextControlÚWindowc                 ó$   <€ \        \        S 4      # r¤   )rX  r>  r   s   €r   Ú<lambda>Ú$modern_input_rules.<locals>.<lambda>‚  s   ø€ ¬nÔ=OÐQTÔ.Ur   c                 ó&   <€ S P                  R 4      # )Útop©Ú_tui_input_rule_heightr   s   €r   rŠ  r‹  ƒ  s   ø€  × :Ñ :¸5Ô Ar   F)ÚheightÚ
wrap_linesr^   c                 ó&   <€ S P                  R 4      # )ÚbottomrŽ  r   s   €r   rŠ  r‹  „  s   ø€ ¨s×/IÑ/IÈ(Ô/Sr   )Úcharr�  r  c               ó   € V ^8„  d   QhRR/# r   r
   )r   s   "r   r   Ú(modern_input_rules.<locals>.__annotate__†  s   € ÷ 6ñ 6˜ñ 6r   c                 óz  <€ ^ RI Hp  ^ RIHp ^ RIHp V ! 4       P                  pVP                  P                  4       p\        \        SRR4      ;'       da    T;'       dW    VP                  RJ ;'       dA    V! V4      '       * ;'       d,    VP                  R4      '       * ;'       d    V! S4      '       * 4      # )r,   )Úget_app)Ú_looks_like_slash_command)Úmodal_prompt_activer	  FNrJ  )Úprompt_toolkit.applicationr˜  r   r™  Úhermes_cli.cli_subagent_monitorrš  Úcurrent_bufferro   r   r	   r   Úcomplete_staterØ   )r˜  r™  rš  Úbufro   r   s        €r   Ú
_can_queueÚ&modern_input_rules.<locals>._can_queue†  sª   ø€ Ý6Ý1ÝGÙ‹i×&Ñ&ˆØ�x‰x�~‰~ÓˆÜ”G˜CÐ!1°5Ó9÷ 5ð 5¸d÷ 5ð 5Às×GYÑGYÐ]aÐGa÷ 5ð 5Ù5°dÓ;Ô;÷5ð 5ØDHÇOÁOÐTWÓDXÔ@X÷5ð 5á/°Ó4Ô4ó6ð 	6r   rG  T)ÚfilterÚeagerc                ó|  <€ V P                   P                  pVP                  P                  4       \	        SP
                  4      r2SP
                  P                  4        SP                  Y#V'       d   W#3MTR R7       SP                  V4       VP                  RR7       V P                   P                  4        R# )rE  )ÚmodeT)Úappend_to_historyN)Úappr�  ro   r   r  Ú_attached_imagesÚclearÚ_tui_enter_while_busyÚ_inline_pastesÚresetÚ
invalidate)ÚeventrŸ  ro   Úimagesr   s   &   €r   Ú_queue_while_busyÚ-modern_input_rules.<locals>._queue_while_busy�  s‹   ø€ ð �i‰i×&Ñ&ˆØ—x‘x—~‘~Ó'¬¨c×.BÑ.BÓ)CˆfØ×Ñ×"Ñ"Ô$Ø×!Ñ! $Ç&°±ÈdÐY`Ð!ÔaØ×Ñ˜3ÔØ�	‰	 Dˆ	Ô)Ø�	‰	×ÑÖr   )Úprompt_toolkit.filtersr†  Úprompt_toolkit.layoutr‡  rˆ  r  Úadd)	r   Úkbr†  r‡  rˆ  r�  r“  r   r°  s	   f&       r   Úmodern_input_rulesr¶  }  sn   ø€ å0ßBá
Ñ%Ô&UÓVÜAÈeôU€Cá˜Ô'SÔ[eÔf€F÷6ð 6ð ‡V�VˆE™) JÓ/°t€VÓ<ôó =ðð ˆ;Ðr   )F)r>   )NF)>Ú__doc__Ú
__future__r   ÚloggingrÙ   r„   r  r   Ú
agent.i18nr   Ú	getLoggerrb  r`  r4  rb   rD   r`   rÄ   rŽ   r   r"   r'   r1   rH   rR   rW   ra   r_   rd   rh   rm   rv   r~   rŠ   r�   r›   r©   rŸ   r®   r»   r¹   rÒ   Úcompilerã   rå   rÓ   rà   rí   rï   r÷   r  r
  r  r  r  r+  r>  rU  rZ  rX  rY  r¶  r
   r   r   Ú<module>r½     sT  ðñõ #ã Û 	Û 	Û Ý å à	×	Ò	˜8Ó	$€à(€Ø˜y¨)Ð €€eˆTØ€Ø€
õ7õeõ
Võ
B÷
%õcõSð Ð ð €õ6õõ÷`÷rõ0õZõ(ð Ð õ!õ
J÷V÷ð, €Ø�:Š:Ð'Ó(€Ø—
’
Ð2Ó3€õõ
1òò$;õ
hõ6õ^õKõ:õ
Lõ
EõSõ,xõ7õCõ*YôZr   