+
    „WÝjFÌ ã            
      ó  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHtHtHtH t  ^ RI!H"t" ^ RI#H$t$ ^ RI%H&t&H't'H(t(H)t) ^ RI*H+t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^ RI5H6t6H7t7 ^t8Rt9]Pt                  ]Pv                  ,           R,           t<RRRRRRRRRR/t=R  R! lt>R" R# lt?R$ R% lt@R& R' ltAR( R) ltB ! R* R+4      tCR# ),u  prompt_toolkit TUI construction, key-binding handlers, and overlay display fragments for the
interactive CLI. Mixin bound onto ``HermesCLI`` via the MRO; cli.py-internal symbols are imported
LAZILY inside each method (``from cli import ...``) â€” never at module load (import cycle).)ÚannotationsN©Út)Úrequest_hard_interrupt)ÚSlashCommandAutoSuggestÚcli_slash_completer)ÚPath)Ú	Condition)ÚFileHistory)ÚKeyBindings)ÚConditionalContainerÚFormattedTextControlÚLayoutÚWindowÚWindowAlign)Ú	Dimension)ÚCompletionsMenu)ÚConditionalProcessorÚPasswordProcessorÚ	ProcessorÚTransformation)ÚStyle)ÚTextArea)ÚOptional)ÚFooterSplit)Ú_Panel)Ú_prefix_wrapped_rowsÚ
_wrap_rowsgš™™™™™©?z-_.:/ Úoncezcli.tui.approval_onceÚsessionzcli.tui.approval_sessionÚalwayszcli.tui.approval_alwaysÚdenyzcli.tui.approval_denyÚviewúcli.tui.approval_viewc               ó    € V ^8„  d   QhRRRR/# )é   ÚchoiceÚstrÚreturn© )Úformats   "ÚLC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\cli_tui_mixin.pyÚ__annotate__r,   >   s   € ÷ %ñ % 3ð %¨3ñ %ó    c                óV   € \         P                  V 4      pV'       d   \        V4      # T # )zGLocalized label for an approval choice id; unknown ids render verbatim.)Ú_APPROVAL_CHOICE_KEYSÚgetr   )r&   Úkeys   & r+   Ú_approval_choice_labelr2   >   s#   € ä
×
#Ñ
# FÓ
+€CßŒ1ˆS‹6Ð$˜fÐ$r-   c               ó   € V ^8„  d   QhRR/# ©r%   r(   r'   r)   )r*   s   "r+   r,   r,   D   s   € ÷ ñ �Sñ r-   c                 ób   €  ^ RI Hp  V ! 4       P                  RR4      #   \         d     R# i ; i)é    ©Úget_active_skinÚ
agent_nameÚHermes)Úhermes_cli.skin_enginer8   Úget_brandingÚ	Exceptionr7   s    r+   Ú_agent_namer>   D   s2   € ðÝ:ÙÓ ×-Ñ-¨l¸HÓEÐEøÜô Úðús   ‚ Ÿ.­.c               ó$   € V ^8„  d   QhRRRRRR/# )r%   r1   r'   ÚcountÚintr(   r)   )r*   s   "r+   r,   r,   L   s&   € ÷ Tñ TˆSð T˜ð T¨3ñ Tr-   c                ó<   € \        V^8X  d   V  R2MV  R23RV/VB # )zNPlural-aware lookup: ``<key>_one`` for exactly one, ``<key>_other`` otherwise.Ú_oneÚ_otherr@   r   )r1   r@   Úkwargss   &&,r+   Ú_tnrF   L   s+   € ä˜U aœZ�ˆu�D‰\°¨u°F¨^ÑSÀ5ÐSÈFÑSÐSr-   c               ó    € V ^8„  d   QhRRRR/# )r%   ÚirA   r(   r'   r)   )r*   s   "r+   r,   r,   Q   s   € ÷ =ñ =�3ð =˜3ñ =r-   c                óJ   € V ^	8  d   \        V ^,           4      # V ^	8X  d   R# R# )zHQuick-select key label: 1-9 for items 1-9, 0 for the 10th, blank beyond.Ú0Ú )r'   )rH   s   &r+   Ú_num_prefixrL   Q   s&   € à˜QœŒ3ˆq�1�u‹:Ð<¨A°¬F SÐ<¸Ð<r-   c               ó   € V ^8„  d   QhRR/# )r%   r(   rA   r)   )r*   s   "r+   r,   r,   V   s   € ÷ 5ñ 5�Cñ 5r-   c                 óB   € \         P                  ! R4      P                  # )éd   )rO   é   )ÚshutilÚget_terminal_sizeÚlinesr)   r-   r+   Ú
_term_rowsrT   V   s   € Ü×#Ò# IÓ.×4Ñ4Ð4r-   c            
      ó¦  € ] tR t^\tRtR�R R lltR tR tR R ltR	 R
 lt	R t
R R ltR R ltR R ltR R ltR R ltRRRRRRRRRR/R R lltR tR tR tR  tR! tR�R" R# lltR$ tR% tR& tRžtR'R(R)R(R*R+R,R-R.R//tR0 tR1 tR2 tR3 tR4 R5 lt R6 R7 lt!R8 R9 lt"R: R; lt#R< t$R= t%R> t&R? R@ lt'RA t(RB t)RC t*RD t+RE t,RF t-RG t.RH t/RI t0RJ t1RK t2RL t3RM t4RN t5RO t6RP t7RQ RR lt8RS t9RT t:RU t;RV t<RW t=]>RX RY l4       t?RZ t@R[ tAR\ R] ltBR^ R_ ltCR` tDRa tERb tFRc tGRd tHRe Rf ltIRg tJRh tKRi tLRj tMRk tNRl tORm tPRn tQRo tRRp tSRq tTRr tURs tVRt tWRu tXRv Rw ltYR�Rx Ry lltZRz R{ lt[R| R} lt\R~ R lt]R€ R� lt^R‚ Rƒ lt_R„ t`R… taR† tbR‡ tcRˆ tdR‰ teRŠ tfR‹ tgRŒ thR� tiRŽ tjR� tkR� tlR‘ R’ ltmR“ R” ltnR• R– ltoR— R˜ ltpR™ tqRš trR› tsRœttR# )ŸÚCLITuiMixinzUprompt_toolkit TUI construction, key-binding handlers, and overlay display fragments.Nc               ó$   € V ^8„  d   QhRRRRRR/# )r%   Úpositionr'   ÚwidthzOptional[int]r(   rA   r)   )r*   s   "r+   r,   ÚCLITuiMixin.__annotate___   s'   € ÷ Eñ E¨sð E¸=ð EÐTWñ Er-   c                ó    € VR9  d   \        RV 24      h\        V RR4      '       d   ^ # VR8X  d   ^# V P                  VR7      '       d   ^ # ^# )z8Visible height for the top/bottom input separator rules.ÚtopzUnknown input rule position: Ú#_status_bar_suppressed_after_resizeF©rY   >   r\   Úbottom)Ú
ValueErrorÚgetattrÚ_use_minimal_tui_chrome)ÚselfrX   rY   s   &&&r+   Ú_tui_input_rule_heightÚ"CLITuiMixin._tui_input_rule_height_   sZ   € àÐ,Ô,ÜÐ<¸X¸JÐGÓHÐHÜ�4Ð>À×FÒFÙØ�uÔÙØ×0Ñ0°uÐ0×=Ò=ˆqÐDÀ1ÐDr-   c                óÈ  € ^ RI HpHp V P                  pV'       g   . # TpVP	                  R4      ;'       g    \        R4      pVP	                  R4      ;'       g    RpVP	                  R4      ;'       g    . pVP	                  R^ 4      p\        R4      p	\        V4       U
UUUu. uF%  w  p
w  r¼pW¨8X  d   R	MR
 RV
^,            RV RV 2NK'  	  pppp
pVP                  4        UUu. uF  qô! V^H4       F  pVNK  	  K  	  pppVP                  R \        WN^HR4       4       4       VP                  V	4       V! VV^8^VR7      p\        ^V^,
          4      pVP                  4        UUu. uF  qô! VV4       F  pVNK  	  K  	  ppp\        WNVR4      p^p\        ^ \        4       \        ,
          4      p\        ^\        ^VV,
          \        V4      ,
          4      4      p\        V4      V8”  d(   VR\        ^V^,
          4       \        R4      .,           p\!        RV4      pVP#                  RV4       VP%                  4        V F  pVP#                  RV4       K  	  VP%                  4        V F"  w  p
pW¨8X  d   RMRpVP#                  VV4       K$  	  VP%                  4        VP#                  RV	4       VP'                  4       # u upppp
i u uppi u uppi )z0Render the /new-/clear-style confirmation panel.©Ú_panel_box_widthÚ_wrap_panel_text_keep_wsÚtitlezcli.tui.confirm_titleÚdetailÚ ÚchoicesÚselectedzcli.tui.confirm_footerõ   â�¯rK   z [z] u    â€” c              3  ó*   "  € T F	  w  rVx € K  	  R # 5i©Nr)   )Ú.0Ú_iÚws   &  r+   Ú	<genexpr>ÚCCLITuiMixin._get_slash_confirm_display_fragments.<locals>.<genexpr>z   s   é € ÐXÑ,W¡5 2�QÓ,Wùó   ‚ú    ©Ú	min_widthÚ	max_widthNzcli.tui.detail_truncatedúclass:approval-borderúclass:approval-titleúclass:approval-descúclass:approval-selectedúclass:approval-choiceúclass:approval-cmd)Úclirh   ri   Ú_slash_confirm_stater0   r   Ú	enumerateÚ
splitlinesÚextendr   ÚappendÚmaxrT   Ú_PANEL_RESERVED_BELOWÚminÚlenr   ÚrowÚblankÚclose)rc   rh   ri   ÚstateÚwraprj   rk   rm   rn   ÚfooterÚidxÚ_valueÚlabelÚdescÚchoice_labelsÚlinert   Úpreview_linesÚ	box_widthÚinner_text_widthÚdetail_wrappedÚchoice_wrappedÚchrome_fullÚ	availableÚmax_detail_rowsÚpanelÚwrappedÚstyles   &                           r+   Ú$_get_slash_confirm_display_fragmentsÚ0CLITuiMixin._get_slash_confirm_display_fragmentsi   s¨  € çBØ×)Ñ)ˆßØˆIØ'ˆØ—	‘	˜'Ó"×@Ð@¤aÐ(?Ó&@ˆØ—‘˜8Ó$×*Ð*¨ˆØ—)‘)˜IÓ&×,Ð,¨"ˆØ—9‘9˜Z¨Ó+ˆÜÐ+Ó,ˆô /8¸Ô.@öBá.@Ñ*�Ñ*�f Tð œ‰u¨SÐ1°°C¸!µG°9¸B¸u¸gÀUÈ4È&ÓQÙ.@ð 	ó Bð (.×'8Ñ'8Ô':ÔSÑ':˜tÀDÈÈrÆN¸q›ÁN™Ñ':ˆÑSØ×ÑÑX¬J°tÈBÐPVÔ,WÓXÔXØ×Ñ˜VÔ$Ù$ U¨MÀRÐSUÔVˆ	Ü˜q )¨a¥-Ó0ÐØ(.×(9Ñ(9Ô(;ÔbÑ(; ÀTÈ$ÐP`ÖEaÀ›!ÑEa™!Ñ(;ˆÑbÜ# DÐ9IÈ6ÓRˆàˆÜ˜œ:›<Ô*?Õ?Ó@ˆ	Ü˜a¤ Q¨	°KÕ(?Ä#ÀnÓBUÕ(UÓ!VÓWˆÜˆ~Ó Ô0Ø+Ð,H¬S°°OÀaÕ4GÓ-HÐIÌQÐOiÓMjÐLkÕkˆNäÐ.°	Ó:ˆØ�	‰	Ð(¨%Ô0Ø�‰ŒÛ%ˆGØ�I‰IÐ+¨WÖ5ñ &à�‰ŒÛ*‰LˆC�Ø14´Ñ-ÐF]ˆEØ�I‰I�e˜WÖ%ñ +ð 	�‰ŒØ�	‰	Ð&¨Ô/Ø�{‰{‹}Ðùõ;Bùó Tùó
 cs   Â(+K
Ã+KÅ.Kc                ó´  € ^ RI HpHp V P                  pV'       g   . # TpVR,          pVR,          pVR,          pVP	                  R^ 4      pVP	                  RR4      p	\        R4      p
V! V^<4      pVP                  V! V^<4      4       \        V4       F8  w  rÍWÈ8X  d   R	MR
p\        V4      pVP                  V! V V 2^<R
R7      4       K:  	  V! W«4      p\        ^V^,
          4      pV! VV4      pV	'       gC   RV9   d<   \        V4      ^8”  d,   VR,          V! \        R\        R4      R7      V4      ,           p\        V4       UUu. uF)  w  rÍWÈ8X  d   RMR R\        V4       R\        V4       2NK+  	  ppp\        VVVR4      p\        ^ \        4       \        ,
          4      p^\        V4      ,           \        V4      ,           V8„  pV'       d   ^M^p\        ^VV,
          \        V4      ,
          4      p\        V4      V8”  d9   V^8”  d   \        ^V^,
          4      M^pVRV V! \        R4      V4      ,           pV\        V4      ,           \        V4      ,           pVV,
          V'       d   ^ M^,
          p\        ^ \        V^
4      4      pV'       d
   V! VV4      M. pV^8  g	   V'       g   . pM7\        V4      V8”  d(   VR\        ^V^,
          4       \        R4      .,           p\!        RV4      pVP#                  RV
4       V'       g   VP%                  4        V F  pVP#                  RV4       K  	  V'       g   VP%                  4        V F"  w  ppWÈ8X  d   RMRpVP#                  VV4       K$  	  V'       d4   V'       g   VP%                  4        V F  pVP#                  RV4       K  	  VP'                  4       # u uppi )a2  Render the dangerous-command approval panel.

Layout priority: title + command + choices must always render, even in a short terminal
or with a long multi-paragraph description. The description sits at the bottom
and is truncated to the remaining row budget, so HSplit never clips approve/deny off-screen.
rg   ÚcommandÚdescriptionrm   rn   Ú	show_fullFzcli.tui.approval_titleõ   â�¯ ú  ©Úsubsequent_indentr"   :Né   Nzcli.tui.approval_choose_fullr#   ©r”   ro   rK   ú. rx   Nz"cli.tui.approval_command_truncatedz&cli.tui.approval_description_truncatedr|   r}   r�   r   r€   r~   )r‚   rh   ri   Ú_approval_stater0   r   r†   r„   r2   rˆ   r‹   rL   r   rT   r‰   rŠ   r   rŒ   r�   rŽ   ) rc   rh   ri   r�   r�   r¦   r§   rm   rn   r¨   rj   r˜   rH   r&   Úprefixr”   r™   rš   Úcmd_wrappedr–   rœ   rž   Úuse_compact_chromeÚchrome_rowsÚmax_cmd_rowsÚkeepÚmandatory_no_descÚavailable_for_descÚdesc_wrappedr    r¡   r¢   s    &                               r+   Ú_get_approval_display_fragmentsÚ+CLITuiMixin._get_approval_display_fragments”   s™  € ÷ 	CØ×$Ñ$ˆßØˆIØ'ˆØ˜	Õ"ˆØ˜MÕ*ˆØ˜	Õ"ˆØ—9‘9˜Z¨Ó+ˆØ—I‘I˜k¨5Ó1ˆ	ÜÐ*Ó+ˆá˜[¨"Ó-ˆØ×Ñ™T '¨2Ó.Ô/Ü" 7Ö+‰IˆAØ œ}‘V°$ˆFÜ*¨6Ó2ˆEØ× Ñ ¡¨¨°°Ð&8¸"ÐPTÔ!UÖVñ ,ñ % UÓ:ˆ	Ü˜q )¨a¥-Ó0Ðñ ˜7Ð$4Ó5ˆß˜V wÔ.´3°{Ó3CÀaÔ3GØ% b�/©DÜÐ0¼Ð:QÓ8RÔSÐUeó-gõ gˆKô ' wÔ/ô1á/‘	�ð œ‰u¨3Ð/¨q´¸Q³Ð0@ÀÔCYÐZ`ÓCaÐBbÓcÙ/ð 	ñ 1ô $ D¨-Ð9IÈ6ÓRˆô
 ˜œ:›<Ô*?Õ?Ó@ˆ	Ø¤ [Ó!1Õ1´C¸Ó4GÕGÈ)ÑSÐß-‘a°1ˆô ˜1˜i¨+Õ5¼¸NÓ8KÕKÓLˆÜˆ{Ó˜lÔ*Ø/;¸aÔ/?”3�q˜,¨Õ*Ô+ÀQˆDØ% e tÐ,©tÜÐ6Ó7Ð9Ió0Kõ KˆKð
 (¬#¨kÓ*:Õ:¼SÀÓ=PÕPÐØ&Ð):Õ:×CU¹aÐ[\Õ]ÐÜ  ¤CÐ(:¸BÓ$?Ó@Ðß>I‘t˜KÐ)9Ô:ÈrˆØ Ô!¯Ø‰LÜ�ÓÐ!3Ô3Ø'Ð(G¬¨QÐ0BÀQÕ0FÓ)GÐHÌAÐNvÓLwÐKxÕxˆLô Ð.°	Ó:ˆØ�	‰	Ð(¨%Ô0ß!Ø�K‰KŒMÛ"ˆGØ�I‰IÐ*¨GÖ4ñ #ç!Ø�K‰KŒMÛ(‰JˆAˆwØ12´Ñ-ÐD[ˆEØ�I‰I�e˜WÖ%ñ )÷ ß%Ø—‘”Û'�Ø—	‘	Ð/°Ö9ñ (à�{‰{‹}Ðùóc1s   Å/Oc               ó   € V ^8„  d   QhRR/# )r%   r(   ztuple[str, str]r)   )r*   s   "r+   r,   rZ   è   s   € ÷ ñ ¨ñ r-   c                ó  a€  ^ RI Hp V! R4      pT;'       g    RP                  4       R,           p ^ RIHp V! 4       pVR	9  d   V RV 2pTP                  4       pT'       g   R
# TP                  4       pT'       d
   TR,          MRo\        ;QJ d    T3R lR 4       F  '       g   K   RM	  RM! T3R lR 4       4      '       d   TSP                  4       R,           3# Y"3#   \         d    Rp Låi ; i  \         d     L¹i ; i)uÞ   Return ``(normal_prompt, state_suffix)`` for the active skin.

``state_suffix`` is what special states (sudo/secret/approval/agent) render after their
leading icon. A non-default profile name is prepended (``coder â�¯``).
)Úget_active_prompt_symbolr©   rK   )Úget_active_profile_namerl   c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5irq   r)   )rr   ÚchÚ	candidates   & €r+   ru   Ú6CLITuiMixin._get_tui_prompt_symbols.<locals>.<genexpr>   s   øé € ÐTÑ)S 2�YŽÓ)Sùs   ƒTF>   ÚcustomÚdefault)r©   r©   éÿÿÿÿ)ro   Ú>Ú$Ú#u   â€ºô   Â»u   â†’)r;   r¾   r=   ÚrstripÚhermes_cli.profilesr¿   ÚsplitÚany)rc   r¾   Úsymbolr¿   ÚprofileÚstrippedÚpartsrÂ   s   &      @r+   Ú_get_tui_prompt_symbolsÚ#CLITuiMixin._get_tui_prompt_symbolsè   s÷   ø€ ð	ÝGÙ-¨fÓ5ˆFð ×"Ð"˜F×*Ñ*Ó,¨sÕ2ˆð	ÝCÙ-Ó/ˆGØÐ3Ô3Ø#˜9 A f XÐ.�ð —=‘=“?ˆßØ!Ð!Ø—‘Ó ˆß!&�E˜"–I¨Bˆ	ß‹3ÔTÑ)SÓT�3�3Š3ÔTÑ)SÓT×TÒTØ˜9×+Ñ+Ó-°Õ3Ð3Ð3àˆ~Ðøô% ô 	ØŠFð	ûô ô 	Ùð	ús"   ƒC' ³C: Ã'C7Ã6C7Ã:DÄDc               ó   € V ^8„  d   QhRR/# r4   r)   )r*   s   "r+   r,   rZ     s   € ÷ Pñ P #ñ Pr-   c                ó~   € \        V RR4      pVf   R# R\        VP                  R4      ^,          R,          ,          # )z?One-char audio level indicator from the recorder's current RMS.Ú_voice_recorderNrl   u    â–�â–‚â–ƒâ–„â–…â–†â–‡i@  )ra   rŠ   Úcurrent_rms)rc   Úrecs   & r+   Ú_audio_level_barÚCLITuiMixin._audio_level_bar  s9   € ä�dÐ-¨tÓ4ˆØŠ;Ùà'¬¨C¯O©O¸TÓ(BÀQÕ(FÈ$Õ(NÕOÐOr-   c                ó@  aa€ V P                  4       w  poV P                  V P                  4       R7      oRR VV3R lllpV P                  '       d   V! RRV P	                  4       4      # V P
                  '       d
   V! RR4      # V P                  '       d
   V! RR	4      # V P                  '       d
   V! RR
4      # V P                  '       d
   V! RR4      # V P                  '       g   \        V RR4      '       d
   V! RR4      # V P                  '       d
   V! RR4      # V P                  '       d
   V! RR4      # V P                  '       d   V! RV P                  4       4      # V P                  '       d
   V! RR4      # V P                   '       d
   V! RR4      # RV3.# )z;prompt_toolkit fragments for the current interactive state.r^   c               ó$   € V ^8„  d   QhRRRRRR/# )r%   r¢   r'   ÚiconÚextrar)   )r*   s   "r+   r,   Ú;CLITuiMixin._get_tui_prompt_fragments.<locals>.__annotate__  s!   € ÷ 	7ñ 	7 3ð 	7¨cð 	7¸#ñ 	7r-   c                ó¾   <€ S'       d9   TpV'       d$   V R VP                  4        2P                  4       pWR ,           3.# V'       d   W R V R S 23.# W R S 23.# )rK   )ÚstriprË   )r¢   rÞ   rß   ÚtextÚcompactÚstate_suffixs   &&& €€r+   Ú_state_fragmentÚ>CLITuiMixin._get_tui_prompt_fragments.<locals>._state_fragment  st   ø€ ßØ�ßØ"˜V 1 U§[¡[£] OÐ4×;Ñ;Ó=�DØ s¥
Ð+Ð,Ð,ßØ &¨¨%¨°°,°Ð @ÐAÐBÐBØ˜f A l ^Ð4Ð5Ð6Ð6r-   zclass:voice-recordingu   â—�zclass:voice-processingu   â—‰zclass:sudo-promptu   ðŸ”�u   ðŸ”‘zclass:prompt-workingu   âš™rƒ   Nu   âš úclass:clarify-selectedu   âœŽÚ?u   â˜¤zclass:voice-promptu   ðŸŽ¤zclass:prompt)rl   )rÓ   rb   Ú_get_tui_terminal_widthÚ_voice_recordingrÚ   Ú_voice_processingÚ_sudo_stateÚ_secret_stateÚ_connection_stater°   ra   Ú_clarify_freetextÚ_clarify_stateÚ_command_runningÚ_command_spinner_frameÚ_agent_runningÚ_voice_mode)rc   rÏ   ræ   rä   rå   s   &  @@r+   Ú_get_tui_prompt_fragmentsÚ%CLITuiMixin._get_tui_prompt_fragments  s�  ù€ à#×;Ñ;Ó=Ñˆ�Ø×.Ñ.°T×5QÑ5QÓ5SÐ.ÓTˆ÷	7ó 	7ð × × Ð Ù"Ð#:¸EÀ4×CXÑCXÓCZÓ[Ð[Ø×!×!Ð!Ù"Ð#;¸UÓCÐCØ××ÐÙ"Ð#6¸Ó?Ð?Ø××ÐÙ"Ð#6¸Ó?Ð?Ø×!×!Ð!Ù"Ð#9¸5ÓAÐAØ××Ð¤7¨4Ð1GÈ×#NÒ#NÙ"Ð#9¸5ÓAÐAØ×!×!Ð!Ù"Ð#;¸UÓCÐCØ××ÐÙ"Ð#9¸3Ó?Ð?Ø× × Ð Ù"Ð#9¸4×;VÑ;VÓ;XÓYÐYØ××ÐÙ"Ð#9¸5ÓAÐAØ××ÐÙ"Ð#7¸Ó@Ð@Ø Ð(Ð)Ð)r-   c               ó   € V ^8„  d   QhRR/# r4   r)   )r*   s   "r+   r,   rZ   4  s   € ÷ Mñ M cñ Mr-   c                óN   € RP                  R V P                  4        4       4      # )z+Visible prompt text for width calculations.rl   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irq   r)   )rr   Ú_rã   s   &  r+   ru   Ú3CLITuiMixin._get_tui_prompt_text.<locals>.<genexpr>6  s   é € ÐLÑ+K¡ •tÓ+Kùrw   )Újoinrö   ©rc   s   &r+   Ú_get_tui_prompt_textÚ CLITuiMixin._get_tui_prompt_text4  s    € à�w‰wÑL¨4×+IÑ+IÔ+KÓLÓLÐLr-   c               ó   € V ^8„  d   QhRR/# )r%   r(   zdict[str, str]r)   )r*   s   "r+   r,   rZ   8  s   € ÷ ñ  ~ñ r-   c           	     óx  a€ ^ RI HpHo \        \	        V R/ 4      ;'       g    / 4      p ^ RIHp VP                  V! 4       4        V! 4       '       d=   R V3R llpVP                  4        UUu/ uF  w  rVYT! T;'       g    R4      bK  	  pppV#   \         d     LYi ; iu uppi   \         d     T# i ; i)u²  Layer the active skin's prompt_toolkit colors over the base TUI style.

On a light terminal, hex tokens in each style string are rewritten through the light-mode
remap so the chrome stays readable on cream Terminal.app backgrounds. CRITICAL: a style
that paints its own ``bg:`` (status bar, completion menu) is left alone â€” its fg was tuned
for that dark bg and remapping would give dark-on-dark; the terminal's mode is irrelevant.
)Ú_detect_light_modeÚ_maybe_remap_for_light_modeÚ_tui_style_base)Ú"get_prompt_toolkit_style_overridesc               ó    € V ^8„  d   QhRRRR/# )r%   Úvr'   r(   r)   )r*   s   "r+   r,   Ú7CLITuiMixin._build_tui_style_dict.<locals>.__annotate__I  s   € ÷ pñ p Cð p¨Cñ pr-   c                óæ   <€ V '       g   V # V P                  4       p\        ;QJ d    R  V 4       F  '       g   K   RM	  RM! R  V 4       4      '       d   V # RP                  V3R lV 4       4      # )c              3  óD   "  € T F  qP                   ! R 4      x € K  	  R# 5i)zbg:N©Ú
startswith)rr   r   s   & r+   ru   ÚJCLITuiMixin._build_tui_style_dict.<locals>._remap_value.<locals>.<genexpr>M  s   é € Ð?¹°1Ÿ<š<¨×.Ð.»ùs   ‚ TFrK   c              3  óf   <"  € T F&  qP                   ! R 4      '       d	   S! V4      MTx € K(  	  R# 5i)rÉ   Nr  )rr   r   r  s   & €r+   ru   r  O  s-   øé € Ð#oÑhnÐcdÇlÂlÐSV×FWÒFWÑ$?ÀÔ$BÐ]^Ô$^Óhnùs   ƒ.1)rÍ   rÎ   rý   )r  Útokensr  s   & €r+   Ú_remap_valueÚ7CLITuiMixin._build_tui_style_dict.<locals>._remap_valueI  sR   ø€ ßØ ˜ØŸW™W›Y�Fß“sÑ?¹Ó?—s—s’sÑ?¹Ó?×?Ò?Ø ˜ØŸ8™8Ô#oÑhnÓ#oÓoÐor-   rl   )
r‚   r  r  Údictra   r;   r  Úupdater=   Úitems)rc   r  Ú
style_dictr  r  Úkr  r  s   &      @r+   Ú_build_tui_style_dictÚ!CLITuiMixin._build_tui_style_dict8  sÇ   ø€ ÷ 	HÜœ' $Ð(9¸2Ó>×DÐDÀ"ÓEˆ
ð	ÝQØ×ÑÑ@ÓBÔCð	Ù!×#Ò#÷pð pð DN×CSÑCSÔCUÔVÑCU¹4¸1˜a ¨a¯g¨g°2Ó!6Ò6ÑCU�
ÑVð Ðøô ô 	Ùð	üó WøÜô 	ØØÐð	úsA   «B ÁB* ÁB* Á1B$ÂB$ÂB* ÂB!Â B!Â$B* Â*B9Â8B9c               ó   € V ^8„  d   QhRR/# ©r%   r(   Úboolr)   )r*   s   "r+   r,   rZ   U  s   € ÷ ñ  tñ r-   c                óà   € \        V RR4      '       d   \        V RR4      '       g   R# \        P                  ! V P                  4       4      V P                  n        V P                  RR7       R# )z=Refresh prompt_toolkit styling for a running interactive TUI.Ú_appNr  Fç        ©Úmin_intervalT)ra   ÚPTStyleÚ	from_dictr  r  r¢   Ú_invalidaterþ   s   &r+   Ú_apply_tui_skin_styleÚ!CLITuiMixin._apply_tui_skin_styleU  sW   € ä�t˜V T×*Ò*´'¸$Ð@QÐSW×2XÒ2XÙÜ!×+Ò+¨D×,FÑ,FÓ,HÓIˆ�	‰	ŒØ×Ñ cÐÔ*Ùr-   c               ó   € V ^8„  d   QhRR/# ©r%   r(   Úlistr)   )r*   s   "r+   r,   rZ   ]  s   € ÷ ñ ¨ñ r-   c                ó   € . # )zWExtension hook: wrapper CLIs return widgets inserted between the spacer and status bar.r)   rþ   s   &r+   Ú_get_extra_tui_widgetsÚ"CLITuiMixin._get_extra_tui_widgets]  s   € àˆ	r-   c               ó   € V ^8„  d   QhRR/# ©r%   r(   ÚNoner)   )r*   s   "r+   r,   rZ   a  s   € ÷ iñ iÀDñ ir-   c               ó   € R# )zZExtension hook: wrapper CLIs add bindings to ``kb`` (``input_area`` is the main TextArea).Nr)   )rc   ÚkbÚ
input_areas   &&$r+   Ú_register_extra_tui_keybindingsÚ+CLITuiMixin._register_extra_tui_keybindingsa  s   ‚ r-   Úconnection_widgetÚslash_confirm_widgetÚmodel_picker_widgetÚcommand_palette_widgetÚspinner_widgetc               ó   € V ^8„  d   QhRR/# r(  r)   )r*   s   "r+   r,   rZ   d  s   € ÷ />ñ />ð& "ñ'/>r-   c               óx  € \        ^ R7      VVVVVVVVV	V
.V P                  4       O\        V RR4      N\        V RR4      N\        V RR4      NVNVNVNVNVNVNVNp\        V RR4      '       d0   VP                  VP	                  VP                  V4      4      4       V Uu. uF  pVf   K	  VNK  	  up# u upi )z–Ordered children of the root ``HSplit``; override only for full control over ordering
(wrappers normally override ``_get_extra_tui_widgets`` instead).©ÚheightÚ_pet_widgetNÚ_stash_panel_widgetÚ_subagent_dock_widgetÚ_modern_layoutF)r   r+  ra   r‡   ÚpopÚindex)rc   Úsudo_widgetÚsecret_widgetr5  Úapproval_widgetr6  Úclarify_widgetr7  r8  r9  ÚspacerÚ
status_barÚinput_rule_topÚ	image_barr2  Úinput_rule_botÚvoice_status_barÚcompletions_menuÚorderedÚitems   &$$$$$$$$$$$$$$$$$  r+   Ú_build_tui_layout_childrenÚ&CLITuiMixin._build_tui_layout_childrend  s  € ô. ˜!ÔØØØØØ ØØØ"ØØðð ×(Ñ(Ó*ðô �D˜-¨Ó.ðô �DÐ/°Ó6ðô �DÐ1°4Ó8ðð  ð!ð" ð#ð$ ð%ð& ð'ð( ð)ð* ð+ð, ð-ˆô. �4Ð)¨5×1Ò1Ø�N‰N˜7Ÿ;™; w§}¡}°ZÓ'@ÓAÔBÙ!(Ó=¡˜¨D—�¡Ñ=Ð=ùÒ=s   Â#B7Â.B7c                	óh  € V P                   '       g    V P                  '       g   \        P                  ! R 4       K<  \	        V RR4      pVe   VP                  4        V P                  '       d+   V P                  R R7       \        P                  ! R 4       K™  \        P                  ! R4       K±  R# )gš™™™™™¹?Ú_subagent_monitorNr   gš™™™™™É?)Ú_should_exitr  ÚtimeÚsleepra   Útickrò   r$  )rc   Úmonitors   & r+   Ú_tui_spinner_loopÚCLITuiMixin._tui_spinner_loop•  s}   € Ø×#×#Ð#Ø—9—9�9Ü—
’
˜3”ÙÜ˜dÐ$7¸Ó>ˆGØÒ"Ø—‘”Ø×$×$Ð$Ø× Ñ ¨cÐ Ô2Ü—
’
˜3–ô
 —
’
˜3–ñ $r-   c           
     ó  aaaaaaaaaa€ ^ RI HpHo V P                  pV'       g   . # VP	                  R4      ;'       g    . oVP	                  R4      ;'       g    / oVP	                  R4      ;'       g    / oVP	                  R^ 4      oVP	                  R4      ;'       g    . oVP	                  R^ 4      oVP	                  RR	4      oS'       d   VP	                  R
\        4       4      M	\        4       oV P                  o\        R\        4       R7      p\        R\        S4      4      pVVVVVVVVVV3
R lpV! ^<4      w  rgT! Y4.V UUu. uF  w  rxVNK	  	  upp,           4      p	V! \        ^V	^,
          4      4      w  r«\        ^\        4       \        ,
          ^,
          4      p\        V
4      V8”  d|   RV9   du   VP	                  RVR,          ^,
          VR,          34      w  rÞ\        WÛR,          V,
          4      p\        ^ \        V\        V
4      V,
          4      4      pW¯Wü,            p
\        RW“R4      pVP!                  RV4       V
 F  w  ppVP!                  VV4       K  	  VP#                  4       # u uppi )uä   Batch (multi-question) clarify panel: "N questions" header, one status line per question
(âœ“ answered â†’ answer / â–¸ active / Â· pending), and the active question's numbered choices
(+ Other) expanded beneath its status line.)rh   Ú_wrap_panel_textÚ	questionsÚanswersÚanswer_metaÚactiverm   rn   Úmulti_selectFÚselected_indiceszcli.tui.clarify_title©r9   zcli.tui.clarify_question_countc           	     ó:  <
€ . p/ p\        S 4       EF  w  r4VR ,          S9   pV'       d   RM
VS8X  d   RMRpVS8X  d   RMRpS! V RVR,           2V RR	7       F  pVP                  Wx34       K  	  V'       d@   SVR ,          ,          p	R
V	f   RMT	 2p
S! W R
R	7       F  pVP                  RV34       K  	  VS8w  d   K²  \        S4       F¨  w  r¼VS!8X  d   S'       g   RMRpS'       d   VS"9   d   RMRMRpVS!8X  d   S'       g   RMRpRV RV \        V4       RV 2p\        V4      pS! VV RR	7       F  pVP                  Wø34       K  	  VS!8X  g   KŽ  S'       d   K˜  V\        V4      3VR&   Kª  	  S'       EdH   \        S4      p\        V4      pS'       d   VS"9   d   RMR RV 2pSP	                  VR ,          4      ;'       g    / P	                  R4      ;'       g    RpV'       d   \        RVR7      MRpS'       d$   RV R2T;'       g    \        R4      ,           pRpMLS!V8X  d$   RV R2T;'       g    \        R4      ,           pRpM"R
V R2T;'       g    \        R4      ,           pRp\        V4      pS! VV RR	7       F  pVP                  VV34       K  	  S'       g   S!V8X  d   V\        V4      3VR&   M=S'       d6   R\        R4      ,           pS! VV 4       F  pVP                  RV34       K  	  \        V4      VR&   EK  	  W3# ) Úqidu   âœ“u   â–¸ô   Â·rè   úclass:clarify-choicerK   Úquestionrª   r«   rx   Nu   â€”zclass:clarify-answerro   z[x] z[ ] rl   r¯   z      rn   z[x]z[ ]Ú
other_textzcli.tui.clarify_other_answer)rã   u     â�¯ z cli.tui.clarify_other_type_belowzclass:clarify-active-otherz!cli.tui.clarify_other_type_answerzcli.tui.clarify_guidanceÚend)r„   r‡   rL   r‹   r0   r   )#rY   ÚrowsÚfocusr’   ÚentryÚansweredÚmarkerÚ	row_styler¡   ÚlockedÚanswerrH   r&   ÚcursorÚcbr¢   r”   ÚfirstÚ	other_idxÚmidrj  Úother_suffixÚother_labelÚother_styleÚguidancer]  ra  r`  r_  rm   Úfreetextrb  Úquestions_listrn   rc  s#   &                        €€€€€€€€€€r+   Ú_status_rowsÚ@CLITuiMixin._get_clarify_display_fragments.<locals>._status_rowsº  s  ø€ ØˆDàˆEÜ'¨×7‘
�Ø  �<¨7Ñ2�ß"*™¸#À¼-±ÈT�Ø8;¸v¼Ñ4ÐKa�	Ù/°6°(¸!¸EÀ*Õ<MÐ;NÐ0OÐQVÐjn×o�GØ—K‘K Ð 4Ö5ñ  pçà$ U¨5¥\Õ2�FØ#¨Vª^¡EÀÐ#HÐI�FÙ#3°FÐU[×#\˜ØŸ™Ð%;¸WÐ$EÖFñ $]à˜&”=ÙÜ!*¨7Ö!3‘I�AØ&'¨8¤m¿H™UÈ#�FßJV AÐ)9Ô$9™&¹vÐ\^�BØ89¸X¼ÏhÑ4Ð\r�EØ   ¨¨"¨¬k¸!«nÐ-=¸RÀ¸xÐH�EÜ ›I�EÙ#3°E¸5ÐT\×#]˜ØŸ™ UÐ$4Ö5ñ $^à˜H–}¯X©XØ-2´C¸³IÐ,>˜˜jÓ)ñ "4÷ �7Ü # G£�IÜ% iÓ0�Cß#Ø*3Ð7GÔ*G¡ÈUÐ SÐSTÐUXÐTYÐZ˜ð #.§/¡/°%¸µ,Ó"?×"EÐ"EÀ2×!JÑ!JÈ<Ó!X×!^Ð!^Ð\^�JßYc¤1Ð%CÈ*Õ#UÐim�LßØ(.¨s¨e°2Ð&6¸,×:oÐ:oÌ!ÐLnÓJoÕ&p˜Ø&B™Ø! YÔ.Ø(.¨s¨e°2Ð&6¸,×:pÐ:pÌ!ÐLoÓJpÕ&q˜Ø&>™à(,¨S¨E° n¸×8nÐ8nÌÐJmÓHnÕ&o˜Ø&<˜Ü ›I�EÙ#3°KÀÐZb×#c˜ØŸ™ [°'Ð$:Ö;ñ $dç 8¨yÔ#8Ø-2´C¸³IÐ,>˜˜jÑ)øßØ#¤aÐ(BÓ&CÕC�HÙ#3°H¸eÖ#D˜ØŸ™Ð%AÀ7Ð$KÖLñ $Eä" 4›y��e”ñg 8ðh �;Ðr-   rk  úclass:clarify-borderúclass:clarify-titlezclass:clarify-question)r‚   rh   r]  rñ   r0   Úsetrð   r   r>   rF   r‹   rˆ   rT   r‰   rŠ   r   rŒ   rŽ   )rc   rh   r�   rj   Úheaderr  Úpreview_rowsrû   rã   r™   rl  rm  ÚbudgetÚ	sel_startÚ_sel_endrv  r    r¢   r]  ra  r`  r_  rm   r}  rb  r~  rn   rc  s   &                 @@@@@@@@@@r+   Ú_get_clarify_display_fragmentsÚ*CLITuiMixin._get_clarify_display_fragments¦  s  ÿù€ ÷ 	;Ø×#Ñ#ˆßØˆIØŸ™ ;Ó/×5Ð5°2ˆØ—)‘)˜IÓ&×,Ð,¨"ˆØ—i‘i Ó.×4Ð4°"ˆØ—‘˜8 QÓ'ˆØ—)‘)˜IÓ&×,Ð,¨"ˆØ—9‘9˜Z¨Ó+ˆØ—y‘y °Ó7ˆßCO˜5Ÿ9™9Ð%7¼»Ô?ÔUXÓUZÐØ×)Ñ)ˆÜÐ)´k³mÔDˆÜÐ5´s¸>Ó7JÓKˆ÷8	ö 8	ñt ' rÓ*‰ˆÙ$ U¨HÉLÔ7YÉLÁÀ»ÉLÒ7YÕ,YÓZˆ	Ù"¤3 q¨)°a­-Ó#8Ó9‰ˆô
 �Qœ
›Ô'<Õ<¸qÕ@ÓAˆÜˆt‹9�vÔ %¨5¤.Ø"'§)¡)¨J¸¸u½ÈÕ9IÈ5ÐQVÍ<Ð8XÓ"YÑˆIÜ˜	¨¥<°&Õ#8Ó9ˆEÜ˜œ3˜u¤c¨$£i°&Õ&8Ó9Ó:ˆEØ˜e�nÐ-ˆDäÐ-¨yÐAVÓWˆØ�	‰	Ð*¨FÔ3Û‰KˆE�4Ø�I‰I�e˜TÖ"ñ  à�{‰{‹}Ðùó# 8Zs   ÅJc          
     óø  € ^ RI HpHp	Hp
 \	        V\
        \        34      '       d   \        V4      MV.pV	! W+V,           WVR7      p\        ^V^,
          4      p\        ^V\        ^\        V4      4      ,
          4      pVP                  R^ 4      p ^ RI
Hp V! 4       P                  P                  4       P                  pVP#                  WñP                  R^ 4      \        V4      V^\        V4      ,           R7      w  ppVVR&   \%        RWÂR4      pVP'                  4        V F  pVP)                  R	V4       K  	  VP'                  4        \+        V\-        VV,           \        V4      4      4       FG  pVV8X  d   R
MRpVV8X  d   RMRp\/        W¤V,          VVV4       F  pVP)                  VV4       K  	  KI  	  VP'                  4        VP1                  4       #   \         d    \!        4       p EL7i ; i)aU  Titled panel with a hint row and a scrolling selectable list (model picker, palette).

The panel renders into a Window with no max height, so the visible slice is limited to
the terminal rows or the bottom border and trailing items get clipped on long lists
(e.g. Ollama Cloud's 36+ models). ``state["_scroll_offset"]`` is updated in place.
)Ú	HermesCLIrh   r]  ry   rn   ©Úget_appÚ_scroll_offset)Úpanel_chromer�  r‚  zclass:clarify-hintrè   rh  r©   rª   )r‚   rŒ  rh   r]  Ú
isinstancer)  Útuplerˆ   r‹   r0   Úprompt_toolkit.applicationrŽ  ÚoutputÚget_sizerl  r=   rT   Ú_compute_model_picker_viewportr   r�   rŒ   ÚrangerŠ   r   rŽ   )rc   r�   rj   ÚhintÚlabelsrz   r{   ÚindentrŒ  rh   r]  Úhintsr™   rš   Úlabel_widthrn   rŽ  Ú	term_rowsÚscroll_offsetÚvisibler    r—   r’   r¢   Úleadr¡   s   &&&&&$$$                  r+   Ú_render_scroll_list_panelÚ%CLITuiMixin._render_scroll_list_panel  s¾  € ÷ 	FÑEä(¨´´e¨}×=Ò=”�T”
ÀDÀ6ˆÙ$ U°F­NÀiÔeˆ	ô
 ˜q )¨a¥-Ó0ÐÜ˜!Ð-´°A´s¸6³{Ó0CÕCÓDˆØ—9‘9˜Z¨Ó+ˆð	%Ý:Ù›	×(Ñ(×1Ñ1Ó3×8Ñ8ˆIð "+×!IÑ!IØ—i‘iÐ 0°!Ó4´c¸&³kÀ9ØœS ›Z�ð "Jó ")Ñˆ�wð #0ˆÐÑäÐ-¨yÐAVÓWˆØ�‰ŒÛˆDØ�I‰IÐ*¨DÖ1ñ à�‰ŒÜ˜¬¨M¸GÕ,CÄSÈÃ[Ó(QÖRˆCØ03°x´Ñ,ÐE[ˆEð ! Hœ_‘6°$ˆDÜ/Ø ¨¥+¨{¸DÀ&ö�ð —	‘	˜% Ö)óñ Sð 	�‰ŒØ�{‰{‹}Ðøô/ ô 	%Ü"›‹Ið	%ús   Â/G  Ç G9Ç8G9c                	ó‚  € V P                   pV'       g   . # VP                  R R4      R8X  Ed   \        R4      p. pVP                  R4      p\        V\        4      '       d   TM.  F|  pVP                  R\        VP                  R. 4      4      4      p\        RWeR,          R7      pVP                  R	4      '       d   V\        R
4      ,          pVP                  V4       K~  	  VP                  \        R4      4       \        R4      p\        RVP                  RV4      VP                  RV4      R7      p	EMcVP                  R 4      R8X  Ed	   ^ RIH	p
 VP                  R4      p\        VRR4      ;'       g    \        R4      p\        RVR7      pV P                  p\        V\        4      '       d   VP                  R4      RJ d   RM3\        V\        4      '       d   T;'       g    / P                  RR4      MRpV
! 4        UUu. uF  w  r÷Wþ8X  d   \        RVR7      MTNK  	  pppV\        R 4      \        R4      .,          p\        R!4      p	EMDVP                  R"4      ;'       g    / pVP                  R#4      ;'       g    . p\        R$VP                  RVP                  R%\        R&4      4      4      R'7      pVP                  R(R4      ;'       g    RpV P                  VV4      pVVR)&   V UUu. uF  w  ppVNK
  	  ppp^ R*IHp V! VV4      w  ppV\        R 4      \        R4      .,           pV'       d#   \        R+V\        V4      \        V4      R,7      p	M*V'       d   \        R-\        V4      R.7      p	M\        R/4      p	V'       d   VV	.p	V P!                  WW“^.^TR0R17      # u uppi u uppi )2ÚstageÚproviderzcli.tui.picker_title_providerÚ	providersÚtotal_modelsÚmodelszcli.tui.picker_provider_rowÚname)r©  Ú
is_currentzcli.tui.picker_current_markerúcli.shared.cancelzcli.shared.unknownzcli.tui.picker_current_hintÚcurrent_modelÚcurrent_provider)Úmodelr¥  Ú	reasoning©Ú_picker_reasoning_rowsÚswitch_resultÚ	new_modelrl   zcli.shared.noun_modelzcli.tui.picker_title_effort)r®  ÚenabledFÚnoneÚeffortÚmediumzcli.tui.picker_current_labeledr®   zcli.shared.backzcli.tui.picker_effort_hintÚprovider_dataÚ
model_listzcli.tui.picker_title_modelsÚslugz cli.tui.picker_provider_fallback)r¥  ÚfilterÚ_filtered_pairs)Úannotate_window_plan_rowszcli.tui.picker_filter_hint©ÚqueryÚshownÚtotalzcli.tui.picker_select_hint©r@   zcli.tui.picker_emptyrª   ©rz   r{   rš  )Ú_model_picker_stater0   r   r‘  r)  r‹   rF   r‡   Ú!hermes_cli.cli_model_switch_mixinr±  ra   Úreasoning_configr  Ú_filter_model_picker_entriesÚhermes_cli.model_picker_usager½  r¡  )rc   r�   rj   rm   Ú
_providersÚpr@   r”   Ú_unknownr˜  r±  ÚresultÚpickedÚrcÚcurrentÚvaluer¸  r¹  Ú_queryÚfiltered_pairsrs   ÚeÚmodel_labelsr½  Ú
row_labelsÚ
limit_lines   &                         r+   Ú#_get_model_picker_display_fragmentsÚ/CLITuiMixin._get_model_picker_display_fragments6  sg  € Ø×(Ñ(ˆßØˆIØ�9‰9�W˜jÓ)¨ZÕ7ÜÐ5Ó6ˆEØˆGØŸ™ ;Ó/ˆJÜ#-¨j¼$×#?Ò#?‘ZÀRÒG�ØŸ™˜n¬c°!·%±%¸À"Ó2EÓ.FÓG�ÜÐ9¸5ÈÅyÔQ�Ø—5‘5˜×&Ò&ØœQÐ>Ó?Õ?�EØ—‘˜uÖ%ñ Hð �N‰Nœ1Ð0Ó1Ô2ÜÐ-Ó.ˆHÜÐ2Ø Ÿ9™9 _°hÓ?Ø#Ÿi™iÐ(:¸HÓEôGŠDð �Y‰Y�wÓ ;Õ.ÝPØ—Y‘Y˜Ó/ˆFÜ˜V [°"Ó5×SÐS¼Ð;RÓ9SˆFÜÐ3¸6ÔBˆEØ×&Ñ&ˆBÜ!+¨B´×!5Ò!5¸"¿&¹&ÀÓ:KÈuÓ:T‘vÜBLÈRÔQU×BVÒBV˜RŸX˜X 2ŸN™N¨8°XÔ>Ð\dð ñ ,BÔ+CôEÙ+C™<˜5ð LQÔK[”qÐ9ÀÕGÐafÒfÙ+Cð ñ EàœÐ+Ó,¬aÐ0CÓ.DÐEÕEˆGÜÐ1Ó2ŠDà!ŸI™I oÓ6×<Ð<¸"ˆMØŸ™ <Ó0×6Ð6°BˆJÜÐ3¸m×>OÑ>OØ˜×)Ñ)¨&´!Ð4VÓ2WÓXó?Zô [ˆEð —Y‘Y˜x¨Ó,×2Ð2°ˆFØ!×>Ñ>¸zÈ6ÓRˆNØ'5ˆEÐ#Ñ$Ù-;Ô<©^¡' 2 q›A©^ˆLÑ<ÝOÙ%>¸}ÈlÓ%[Ñ"ˆJ˜
Ø ¤AÐ&7Ó$8¼!Ð<OÓ:PÐ#QÕQˆGßÜÐ5¸VÌ3È|ÓK\ÔdgÐhrÓdsÔt‘ßÜÐ5¼SÀ»_ÔM‘äÐ/Ó0�çØ" DÐ)�Ø×-Ñ-Ø˜$°2ÀÈDð .ó Rð 	Rùó7Eùó =s   È N5Ë?N;c           
     	ó
  € V P                   pV'       g   . # V P                  4       p\        V4      VR &   VP                  RR4      ;'       g    Rp\        VP                  R4      ;'       g    . 4      pV'       d   \	        RV\        V4      VR7      pM\	        RVR7      pV UUUu. uF  w  rgqˆ'       d   V RV 2MTNK  	  uppp;'       g    \	        R	4      .p	V P                  V\	        R
4      WY^2^ZRR7      # u upppi )Ú_visible_countr»  rl   Úentrieszcli.tui.palette_filter_hintr¾  zcli.tui.palette_hint)rÁ  u     â€”  zcli.tui.palette_emptyzcli.tui.palette_titlerx   rÃ  )Ú_command_palette_stateÚ _command_palette_visible_entriesr‹   r0   r   r¡  )
rc   r�   rl  rÑ  rÁ  r˜  ÚcÚ_catÚdr™  s
   &         r+   Ú&_get_command_palette_display_fragmentsÚ2CLITuiMixin._get_command_palette_display_fragmentso  sû   € Ø×+Ñ+ˆßØˆIØ×4Ñ4Ó6ˆÜ"% d£)ˆÐÑØ—‘˜8 RÓ(×.Ð.¨BˆÜ�E—I‘I˜iÓ(×.Ð.¨BÓ/ˆßÜÐ2¸&ÌÈDË	ÐY^Ô_‰DäÐ+°5Ô9ˆDÙCGÕHÁ4±<°A¸Q¦a�Q�C�w˜q˜cÑ"¨QÒ.Á4ÓH×hÐhÌQÐOfÓMgÐLhˆØ×-Ñ-Ø”1Ð,Ó-¨tÀrÐUWÐ`fð .ó hð 	hùô Is   Â)C>c               ó$   € V ^8„  d   QhRRRRRR/# )r%   rj   r'   Ú
body_linesz	list[str]Ú
row_styleszlist[str] | Noner)   )r*   s   "r+   r,   rZ     s$   € ÷ ñ ØðØ&/ðØ=Mñr-   c                ó‚  € ^ RI Hp V! W4      p\        RWQR4      pVP                  4        \	        V4       Ff  w  rxV\        V4      ^,
          8X  d   V^ 8”  d   VP                  4        V'       d   V\        V4      8  d	   W7,          MRp	VP                  W˜4       Kh  	  VP                  4        VP                  4       # )zPBordered ``sudo-*`` panel: blank, each body line, blank, body-final line, blank.)rh   zclass:sudo-borderzclass:sudo-titleúclass:sudo-text)r‚   rh   r   r�   r„   r‹   rŒ   rŽ   )
rc   rj   rä  rå  rh   r™   r    rH   rã   r¢   s
   &&&&      r+   Ú_render_sudo_style_panelÚ$CLITuiMixin._render_sudo_style_panel  s•   € õ 	)Ù$ UÓ7ˆ	ÜÐ*¨IÐ>PÓQˆØ�‰ŒÜ  Ö,‰GˆAØ”C˜
“O aÕ'Ô'¨A°¬EØ—‘”ß%/°A¼¸J»Ô4G�J–MÐM^ˆEØ�I‰I�eÖ"ñ	 -ð
 	�‰ŒØ�{‰{‹}Ðr-   c           	     	ón  € V P                   '       g   . # V P                   P                  R 4      ;p'       dO   V P                  \        RVR,          R7      \        RVR,          \	        4       R7      P                  R4      4      # V P                   P                  R4      ;p'       d�   VR,          R	8X  d=   V P                  \        R
VR,          R7      \        R4      P                  R4      4      # V P                  \        R
VR,          R7      \        RVR,          R7      P                  R4      4      # V P                   P                  R4      ;p'       d8   V P                  \        RVR7      \        RVR7      P                  R4      4      # V P                  \        R4      \        R4      .4      # )Ú
vault_codezcli.tui.vault_code_titleÚsite)rì  zcli.tui.vault_code_body)rì  r9   Ú
Ú
vault_saveÚstepÚ
identifierzcli.tui.vault_save_titlezcli.tui.vault_save_bodyzcli.tui.vault_save_pw_bodyÚorigin)rñ  Úvault_backendzcli.tui.vault_unlock_title)Úbackendzcli.tui.vault_unlock_bodyzcli.tui.sudo_titlezcli.tui.sudo_body)rí   r0   rè  r   r>   rÍ   )rc   ÚcodeÚsaveró  s   &   r+   Ú_get_sudo_display_fragmentsÚ'CLITuiMixin._get_sudo_display_fragments�  sŠ  € Ø××ÐØˆIà×#Ñ#×'Ñ'¨Ó5Ð5ˆ4Ö5Ø×0Ñ0ÜÐ,°4¸µ<Ô@ÜÐ+°$°vµ,Ì;Ë=ÔY×_Ñ_Ð`dÓeógð gð ×#Ñ#×'Ñ'¨Ó5Ð5ˆ4Ö5Ø�F�|˜|Ô+Ø×4Ñ4ÜÐ0°t¸Fµ|ÔDÜÐ/Ó0×6Ñ6°tÓ<ó>ð >ð ×0Ñ0ÜÐ,°4¸µ<Ô@ÜÐ.°t¸Hµ~ÔF×LÑLÈTÓRóTð Tð ×&Ñ&×*Ñ*¨?Ó;Ð;ˆ7Ö;Ø×0Ñ0ÜÐ.¸Ô@ÜÐ-°wÔ?×EÑEÀdÓKóMð Mð ×,Ñ,¬QÐ/CÓ-DÄqÐI\ÓG]ÐF^Ó_Ð_r-   c           	     	ó–  € V P                   pV'       g   . # VP                  R 4      ;'       g'    \        RVP                  R\        R4      4      R7      pVP                  R4      ;'       g    / P                  R4      pV\        R4      .pV'       d   VP                  ^\	        V4      4       V P                  \        R4      V4      # )	Úpromptzcli.tui.secret_promptÚvar_namezcli.tui.secret_fallback_name)rú  ÚmetadataÚhelpzcli.tui.secret_bodyzcli.tui.secret_title)rî   r0   r   Úinsertr'   rè  )rc   r�   rù  Ú	help_textÚcontent_liness   &    r+   Ú_get_secret_display_fragmentsÚ)CLITuiMixin._get_secret_display_fragments¥  s®   € Ø×"Ñ"ˆßØˆIØ—‘˜8Ó$÷ hð h¬Ø#¨e¯i©i¸
ÄAÐFdÓDeÓ.fô)hˆà—Y‘Y˜zÓ*×0Ð0¨b×5Ñ5°fÓ=ˆ	Ø¤Ð#8Ó!9Ð:ˆßØ× Ñ  ¤C¨	£NÔ3Ø×,Ñ,¬QÐ/EÓ-FÈÓVÐVr-   c           
     	ón  a€ V P                   pV P                  4       pV'       d	   V'       g   . # VR ,          pR.\        V4      ,          pVP                  R4      pVP                  R4      ;'       g    . pVP                  R/ 4      P                  R4      '       d   ^M^ pVR9   dÌ   YuR8X  d   ^M^ ,           pVP                  R^ 4      p	^ T	u;8:  d   \        V4      8  d   M MRWHV	,           &   MªV'       dy   \        V4      ^,
          p
RWJ&   \	        R	4      \	        R
4      .p\        ^\        ^ VP                  R^ 4      4      4      oRP                  V3R l\        V4       4       4      W:&   M)VR8X  d#   V'       d   RVR&   R\	        R4      ,           VR&   V P                  V^ ,          W44      # ):é   NNrç  ÚphaseÚfieldsÚtargetÚinstructionsÚfailedÚfield_indexrè   zcli.tui.connection_connectr«  rn   rx   c              3  óD   <"  € T F  w  rVS8X  d   R V 2MTx € K  	  R# 5i)õ   â–¸ Nr)   )rr   rH   r&   rn   s   &  €r+   ru   Ú@CLITuiMixin._get_connection_display_fragments.<locals>.<genexpr>Å  s(   øé € ð 7ÙRdÁYÀQ q¨H¤}�d˜6˜(‘O¸&Ô@ÓRdùs   ƒ Ú
authorizedr  zcli.tui.connection_continue>   Úformr  rÆ   )
rï   Ú_connection_render_linesr‹   r0   r   rŠ   rˆ   rý   r„   rè  )rc   r�   rS   rä  Ústylesr  r  Úinstructions_offsetÚfield_offsetr	  Úaction_indexrm   rn   s   &           @r+   Ú!_get_connection_display_fragmentsÚ-CLITuiMixin._get_connection_display_fragments±  s‚  ø€ Ø×&Ñ&ˆØ×-Ñ-Ó/ˆßŸEØˆIØ˜2•Yˆ
Ø#Ð$¤s¨:£Õ6ˆØ—	‘	˜'Ó"ˆØ—‘˜8Ó$×*Ð*¨ˆØ#(§9¡9¨X°rÓ#:×#>Ñ#>¸~×#NÒ#N™aÐTUÐØÐ&Ô&Ø.ÀÔ7H±!ÈaÕPˆLØŸ)™) M°1Ó5ˆKØ�KÖ-¤# f£+×-Ø5M� kÕ1Ò2ßÜ" :›°Õ2�Ø'?�Ñ$ÜÐ9Ó:¼AÐ>QÓ<RÐS�Ü˜q¤# a¨¯©°:¸qÓ)AÓ"BÓC�Ø+1¯;©;ô 7ÜR[Ð\cÔRdó7ó ,�
Ñ(øð �lÔ"§zØ1ˆF�2‰JØ#¤aÐ(EÓ&FÕFˆJ�r‰NØ×,Ñ,¨U°1­X°zÓJÐJr-   r  zcli.tui.hint_connection_formr  Úurlzcli.tui.hint_connection_urlr  z"cli.tui.hint_connection_authorizedÚwaitingzcli.tui.hint_connection_waitingc           
     	ó„  € V P                   '       dË   V P                   P                  R 4      pR\        V P                  P                  VR4      4      ,           p\	        V P                   P                  R/ 4      P                  R4      ;'       g    ^ 4      pV'       d4   R\        ^ \        V\        P                  ! 4       ,
          4      4       R2MRpRV3R	V3.# V P                   FÒ  w  rVp\        W4      '       g   K  VR
8X  d]   V P                  P                  R4      ;'       g    / P                  R4      R8X  g"   V P                  P                  R4      '       d   RpR\        V4      ,           p\        ^ \        \        W4      \        P                  ! 4       ,
          4      4      pRV3R	RV R23.u # 	  V P                  '       dŽ   V P                  f   RpM=R\        ^ \        V P                  \        P                  ! 4       ,
          4      4       R2pV P                  '       d   R\        R4      ,           pMR\        R4      ,           pRV3R	V3.# V P                  '       dQ   V P!                  4       p	V P"                  '       d   \        R4      p
M\        R4      p
RR\        RWšR7      ,           3.# . # )r  rª   zcli.tui.hint_connection_defaultÚpayloadÚdeadline_atz  (zs)rl   ú
class:hintzclass:clarify-countdownrí   rî  rï  rð  rë  zcli.tui.hint_vault_usernamezcli.tui.hint_clarify_freetextzcli.tui.hint_clarify_batchzcli.tui.hint_input_disabledzcli.tui.hint_input_queueszcli.tui.hint_command_running)Úframerk   )rï   r0   r   Ú_TUI_CONNECTION_HINT_KEYSÚfloatrˆ   rA   rV  Ú_TUI_MODAL_HINTSra   rí   Ú	monotonicrñ   Ú_clarify_deadlinerð   rò   ró   Ú_command_blocks_input)rc   r  r˜  ÚdeadlineÚ	countdownÚ
state_attrÚdeadline_attrÚhint_keyÚ	remainingr  rk   s   &          r+   Ú_tui_hint_textÚCLITuiMixin._tui_hint_textÞ  si  € Ø×!×!Ð!Ø×*Ñ*×.Ñ.¨wÓ7ˆEØœ!˜D×:Ñ:×>Ñ>¸uÐFgÓhÓiÕiˆDÜ˜T×3Ñ3×7Ñ7¸	À2ÓF×JÑJÈ=ÓY×^Ð^Ð]^Ó_ˆHßIQ˜#œc !¤S¨´D·I²I³KÕ)?Ó%@ÓAÐBÀ"ÑEÐWYˆIØ! 4Ð(Ð+DÀiÐ*PÐQÐQØ37×3HÔ3HÑ/ˆJ xÜ�t×(Ô(Ø Ô.°T×5EÑ5E×5IÑ5IÈ,Ó5W×5]Ð5]Ð[]×4bÑ4bÐciÓ4jÐnzÔ4zØ7;×7GÑ7G×7KÑ7KÈL×7YÒ7YØ<�HØœa ›kÕ)�Ü ¤3¤w¨tÓ'CÄdÇnÂnÓFVÕ'VÓ#WÓX�	Ø% tÐ,Ð/HÈCÐPYÈ{ÐZ\ÐJ]Ð.^Ð_Ò_ñ 4Ið ××Ðà×%Ñ%Ò-Ø‘	à!¤# a¬¨T×-CÑ-CÄdÇnÂnÓFVÕ-VÓ)WÓ"XÐ!YÐY[Ð\�	Ø×%×%Ð%ØœaÐ ?Ó@Õ@‘àœaÐ <Ó=Õ=�Ø! 4Ð(Ð+DÀiÐ*PÐQÐQØ× × Ð Ø×/Ñ/Ó1ˆEØ×)×)Ð)ÜÐ8Ó9‘äÐ6Ó7�Ø! 4¬!Ð,JÐRWÔ*gÕ#gÐhÐiÐiØˆ	r-   c                	ó  € V P                   '       d0   V P                  ;'       g    \        R V P                  4       R7      # V P                  '       d    V P                  ;'       g    \        R4      # V P
                  '       d|   V P
                  P                  R4      ;'       g    / P                  R4      R8X  d   \        R4      # V P
                  P                  R4      '       d   \        R4      # \        R	4      # V P                  '       d   \        R
4      # V P                  '       d   R# V P                  '       d   \        R4      # V P                  '       d   \        R4      # V P                  '       d   R# V P                  '       d3   V P                  4        RV P                  ;'       g    \        R4       2# V P                  '       d7   \!        V RR4      '       d   \        RV P"                   24      # \        R4      # V P$                  '       d   \        RV P                  4       R7      #  V P&                  P)                  4       pV'       d   V# \!        V RR4      ;'       g    R#   \*         d    Rp L0i ; i)zcli.tui.placeholder_recording)Úshortcutz cli.tui.placeholder_transcribingrî  rï  rð  z"cli.tui.placeholder_vault_usernamerë  zcli.tui.placeholder_vault_codezcli.tui.placeholder_passwordzcli.tui.placeholder_secretrl   zcli.tui.placeholder_choicezcli.tui.placeholder_answerrK   z&cli.tui.placeholder_processing_commandrA  Fzcli.modern.placeholder_busy_zcli.tui.placeholder_busyzcli.tui.placeholder_voice_idleÚ_composer_placeholder)rë   Ú_voice_live_textr   Ú_voice_record_key_labelrì   rí   r0   rî   r°   rƒ   rð   rñ   rò   ró   Ú_command_statusrô   ra   Úbusy_input_moderõ   Ú_prompt_stashÚplaceholder_hintr=   )rc   Ú_stash_hints   & r+   Ú_tui_placeholder_textÚ!CLITuiMixin._tui_placeholder_text  s(  € Ø× × Ð Ø×(Ñ(×wÐw¬AÐ.MÐX\×XtÑXtÓXvÔ,wÐwØ×!×!Ð!Ø×(Ñ(×QÐQ¬AÐ.PÓ,QÐQØ××ÐØ× Ñ ×$Ñ$ \Ó2×8Ð8°b×=Ñ=¸fÓEÈÔUÜÐ=Ó>Ð>Ø×Ñ×#Ñ# L×1Ò1ÜÐ9Ó:Ð:ÜÐ3Ó4Ð4Ø××ÐÜÐ1Ó2Ð2Ø××ÐÙØ×$×$Ð$ÜÐ1Ó2Ð2Ø×!×!Ð!ÜÐ1Ó2Ð2Ø××ÐÙØ× × Ð Ø×1Ñ1Ó3Ð4°A°d×6JÑ6J×6yÐ6yÌaÐPxÓNyÐ5zÐ{Ð{Ø××ÐÜ�tÐ-¨u×5Ò5ÜÐ7¸×8LÑ8LÐ7MÐNÓOÐOÜÐ/Ó0Ð0Ø××ÐÜÐ5À×@\Ñ@\Ó@^Ô_Ð_ð	Ø×,Ñ,×=Ñ=Ó?ˆK÷ ØÐô �tÐ4°bÓ9×?Ð?¸RÐ?øô ô 	ØŠKð	ús   È9I4 É4JÊJc                	ó´   €  V P                   pV P                  VP                  4       VP                  V P	                  4       4      #   \
         d    . u # i ; irq   )r2  Ú_render_stash_panelÚ
panel_rowsÚpanel_cursorrê   r=   )rc   Ú_stashs   & r+   Ú"_get_stash_panel_display_fragmentsÚ.CLITuiMixin._get_stash_panel_display_fragments)  sZ   € ð	Ø×'Ñ'ˆFØ×+Ñ+Ø×!Ñ!Ó# V×%8Ñ%8¸$×:VÑ:VÓ:XóZð Zøäô 	ØŠIð	ús   ‚AA ÁAÁAc                ó`  a aaa€ ^ RI HoHoHoHp S P
                  '       g   R# S P                  '       dq   S P                  ;_uu_ 4        RS n        RRR4       VP                  P                  4        \        P                  ! S P                  RR7      P                  4        R# S P                  '       g   S P                   '       dA   S P                  ;_uu_ 4        RS n        RRR4       VP                  P                  4        R# S P"                  '       gI   S P$                  '       g7   S P&                  '       g%   S P(                  '       g   S P*                  '       d   R# S P,                  P/                  4       '       go    VP1                  R4       ^ RIHp V! 4        S P6                  e   S P6                  P9                  4        ^ RIHp V! 4        S P,                  P9                  4        S P                  ;_uu_ 4        RS n        RRR4       VVVV 3R	 lp\        P                  ! VRR7      P                  4        VP                  P                  4        R#   + '       g   i     EL; i  + '       g   i     ELš; i  \>         d     L¤i ; i  + '       g   i     L”; i)
zÑToggle voice recording when voice mode is active.

Runs on prompt_toolkit's event-loop thread: any blocking call here (locks, sd.wait,
disk I/O) freezes the whole UI, so all heavy work goes to daemon threads.
)Ú_DIMÚ_RSTÚ_cprintÚloggerNFT©r  Údaemonz'TTS CUT: record key handler cutting TTS)Úmark_speech_interrupted)Ústop_playbackc            
     ó  <€  SP                  4        \        SR 4      '       d1   SP                  '       d   SP                  P                  4        R# R# R#   \         d&   p S! RS \        RT R7       S 24        Rp ? R# Rp ? ii ; i)r  rí  zcli.tui.voice_recording_failed©ÚerrorN)Ú_voice_start_recordingÚhasattrr  Ú
invalidater=   r   )rÓ  r?  r@  rA  rc   s    €€€€r+   Ú_start_recordingÚ>CLITuiMixin._tui_handle_voice_record.<locals>._start_recording_  sy   ø€ ðYØ×+Ñ+Ô-Ü˜4 ×(Ò(¨T¯Y¯Y¨YØ—I‘I×(Ñ(Ö*ñ .7Ñ(øäô YÙ˜"˜T˜F¤1Ð%EÈQÔ#OÐ"PÐQUÐPVÐW×XÒXûðYús!   ƒ!A ¥A ·A ÁBÁ"BÂB) r‚   r?  r@  rA  rB  rõ   rë   Ú_voice_lockÚ_voice_continuousÚapprL  Ú	threadingÚThreadÚ_voice_stop_and_transcribeÚstartrô   rì   rñ   rí   r°   rƒ   rï   Ú_voice_tts_doneÚis_setÚinfoÚtools.tts_streamingrE  Ú_voice_tts_stoprƒ  Útools.voice_moderF  r=   )	rc   ÚeventrB  rE  rF  rM  r?  r@  rA  s	   f&    @@@r+   Ú_tui_handle_voice_recordÚ$CLITuiMixin._tui_handle_voice_record1  sä  û€ ÷ 	4Ó3Ø××ÐÙØ× × Ð ð ×!×!Ó!Ø).�Ô&÷ "à�I‰I× Ñ Ô"Ü×Ò D×$CÑ$CÈDÔQ×WÑWÔYÙð ××Ð $×"8×"8Ð"8Ø×!×!Ó!Ø).�Ô&÷ "à�I‰I× Ñ Ô"Ùà××Ð 4×#3×#3Ð#3°t×7K×7KÐ7KØ×,×,Ð,°×0F×0FÐ0FÙð ×#Ñ#×*Ñ*×,Ò,ð
Ø—‘ÐEÔFÝGÙ'Ô)Ø×'Ñ'Ò3Ø×(Ñ(×,Ñ,Ô.Ý:Ù”Ø×$Ñ$×(Ñ(Ô*ð ××ÓØ%)ˆDÔ"÷ ÷	Yð 	Yô 	×ÒÐ 0¸Ô>×DÑDÔFØ�	‰	×ÑÖ÷W "×!Ð!ú÷ "×!Ð!ûô( ô Ùðúç×ús7   ÁI$ÃI8ÆA-J È	JÉ$I5	É8J		ÊJÊJÊJ-	c               ó   € V ^8„  d   QhRR/# r  r)   )r*   s   "r+   r,   rZ   j  s   € ÷ ñ °Dñ r-   c                óÊ  € ^ RI HpHpHp RpV P                  ;_uu_ 4        V P
                  '       d-   V P                  '       d   V P                  pRV n        RV n        RRR4       Vf   R# V! RV \        R4       V 24       \        P                  ! VP                  RR7      P                  4        VP                  P                  4        R#   + '       g   i     Lz; i)zMCancel an active recording; True when one was cancelled (caller stops there).©r?  r@  rA  NFrí  zcli.tui.recording_cancelledTrC  )r‚   r?  r@  rA  rO  rë   r×   rP  r   rR  rS  ÚcancelrU  rQ  rL  )rc   r\  r?  r@  rA  Ú_recorder_refs   &&    r+   Ú_tui_cancel_voice_recordingÚ'CLITuiMixin._tui_cancel_voice_recordingj  s´   € ç+Ñ+ØˆØ××ÓØ×$×$Ð$¨×)=×)=Ð)=Ø $× 4Ñ 4�Ø(-�Ô%Ø).�Ô&÷	 ð
 Ò ÙÙ�"�T�Fœ1Ð:Ó;Ð<¸T¸FÐCÔDä×Ò × 4Ñ 4¸TÔB×HÑHÔJØ�	‰	×ÑÔÙ÷ ×ús   ¡$CÁCÃC"	c               ó   € V ^8„  d   QhRR/# r  r)   )r*   s   "r+   r,   rZ   {  s   € ÷ ñ ¸dñ r-   c               óÐ   € V F_  w  r4\        WR4      '       g   K  V! 4        VP                  P                  P                  4        VP                  P	                  4         R# 	  R# )zUClose the first active foreground UI (slash-confirm / picker / palette); True if any.NTF)ra   rQ  Úcurrent_bufferÚresetrL  )rc   r\  Úclosersr%  rŽ   s   &&$  r+   Ú_tui_cancel_foreground_uiÚ%CLITuiMixin._tui_cancel_foreground_ui{  sO   € ã!(ÑˆJÜ�t¨×.Ô.Ù”Ø—	‘	×(Ñ(×.Ñ.Ô0Ø—	‘	×$Ñ$Ô&Úñ ")ñ r-   c               ó   € V ^8„  d   QhRR/# r  r)   )r*   s   "r+   r,   rZ   …  s   € ÷ ñ °Tñ r-   c                óZ  € V P                   '       gK   V P                  '       g9   V P                  '       g'   V P                  '       g   V P                  '       g   R# V P                  4        VP                  P                  P                  4        VP                  P                  4        R# )a!  Clear every agent-blocking overlay (approval/clarify/sudo/secret) in one shot.

Callers must NOT return on True alone: they fall through so a stale/orphaned overlay
(left by an earlier interrupt) can't swallow the press before the agent-interrupt
branch, leaving the chat frozen (#14026).
FT)
rí   rî   r°   rñ   rï   Ú$_clear_active_overlays_for_interruptrQ  rh  ri  rL  ©rc   r\  s   &&r+   Ú_tui_clear_blocking_overlaysÚ(CLITuiMixin._tui_clear_blocking_overlays…  su   € ð × × Ð  D×$6×$6Ð$6¸$×:N×:NÐ:NØ×&×&Ð&¨$×*@×*@Ð*@ÙØ×1Ñ1Ô3Ø�	‰	× Ñ ×&Ñ&Ô(Ø�	‰	×ÑÔÙr-   c               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   ”  s   € ÷ ñ ¨4ñ r-   c                ól  € VP                   P                  P                  '       g   V P                  '       d[   VP                   P                  P	                  4        V P                  P                  4        VP                   P                  4        R# RV n        VP                   P                  4        R# )zCClear text/images like bash; exit when everything is already empty.TN)	rQ  rh  rã   Ú_attached_imagesri  ÚclearrL  rU  Úexitrp  s   &&r+   Ú_tui_clear_or_exitÚCLITuiMixin._tui_clear_or_exit”  sq   € à�9‰9×#Ñ#×(×(Ð(¨D×,A×,AÐ,AØ�I‰I×$Ñ$×*Ñ*Ô,Ø×!Ñ!×'Ñ'Ô)Ø�I‰I× Ñ Ö"à $ˆDÔØ�I‰I�N‰NÖr-   c           	     ó`  a € \         P                   ! 4       pS P                  V4      '       d   R# S P                  VRV 3R l3RS P                  3RS P                  3RV 3R l33R7      '       d   R# S P                  V4      pV'       d'   S P                  '       d   S P                  '       g   R# S P                  '       dÚ   S P                  '       dÈ   VP                  P                  P                  '       g¢   S P                  '       g�   VS P                  ,
          R	8  d?   \        R
\        R4      ,           4       RS n        VP                  P!                  4        R# VS n        \        R
\        R4      ,           4       \#        S P                  4       R# S P%                  V4       R# )uR  Ctrl+C priority: cancel voice recording â†’ cancel foreground UI/overlay prompt or the wait for a
command on its own gateway socket (a plugin command, /cron) â†’ clear a typed draft, even mid-run (a correction must never kill the turn)
â†’ interrupt the running agent â†’ force exit (second press within 2s) â†’ when idle and empty, exit.Nrƒ   c                 ó&   <€ S P                  R 4      # ©rb  ©Ú_submit_slash_confirm_responserþ   s   €r+   Ú<lambda>Ú0CLITuiMixin._tui_handle_ctrl_c.<locals>.<lambda>¦  ó   ø€ ¨T×-PÑ-PÐQYÔ-Zr-   rÄ  rÜ  Ú_gateway_command_waitc                 ó8   <€ S P                   P                  4       # rq   )r‚  rƒ  rþ   s   €r+   r  r€  ¨  s   ø€ ¨d×.HÑ.H×.LÑ.LÔ.Nr-   ©rj  g       @rí  zcli.tui.force_exitingTzcli.tui.interrupting_again_hint)rV  rd  rk  Ú_close_model_pickerÚ_close_command_paletterq  rô   ÚagentrQ  rh  rã   ru  Ú_last_ctrl_c_timeÚprintr   rU  rw  r   rx  )rc   r\  ÚnowÚoverlay_cleareds   f&  r+   Ú_tui_handle_ctrl_cÚCLITuiMixin._tui_handle_ctrl_cž  sJ  ø€ ô �iŠi‹kˆØ×+Ñ+¨E×2Ò2ÙØ×)Ñ)¨%Ø#Ô%ZÐ[Ø" D×$<Ñ$<Ð=Ð@XÐZ^×ZuÑZuÐ?vØ$Ô&NÐOð:QÐ)÷ Rò Rñ Ø×;Ñ;¸EÓBˆß D×$7×$7Ð$7¸D¿J¿J¸JÙØ××Ð 4§:§: :°u·y±y×7OÑ7O×7T×7TÐ7TÐX\×Xm×XmÐXmØ�T×+Ñ+Õ+¨cÔ1Ü�dœQÐ6Ó7Õ7Ô8Ø$(�Ô!Ø—	‘	—‘Ô ÙØ%(ˆDÔ"Ü�$œÐ<Ó=Õ=Ô>Ü" 4§:¡:Ö.à×#Ñ# EÖ*r-   c                óT  a € S P                  V4      '       d   R# S P                  VRV 3R l3RS P                  33R7      '       d   R# S P                  V4      pV'       d'   S P                  '       d   S P
                  '       g   R# S P                  '       d}   S P
                  '       dk   VP                  P                  P                  '       gE   S P                  '       g3   \        R\        R4      ,           4       \        S P
                  4       R# S P                  V4       R# )zRCtrl+Q: like Ctrl+C minus the double-press force exit (and it leaves the palette).Nrƒ   c                 ó&   <€ S P                  R 4      # r|  r}  rþ   s   €r+   r  Ú0CLITuiMixin._tui_handle_ctrl_q.<locals>.<lambda>¾  r�  r-   rÄ  r„  rí  zcli.tui.interrupting)rd  rk  r…  rq  rô   r‡  rQ  rh  rã   ru  r‰  r   r   rx  )rc   r\  r‹  s   f& r+   Ú_tui_handle_ctrl_qÚCLITuiMixin._tui_handle_ctrl_q¹  sÝ   ø€ à×+Ñ+¨E×2Ò2ÙØ×)Ñ)¨%Ø#Ô%ZÐ[Ø" D×$<Ñ$<Ð=ð:?Ð)÷ @ò @ñ Ø×;Ñ;¸EÓBˆß D×$7×$7Ð$7¸D¿J¿J¸JÙØ××Ð 4§:§: :°u·y±y×7OÑ7O×7T×7TÐ7TÐX\×Xm×XmÐXmÜ�$œÐ1Ó2Õ2Ô3Ü" 4§:¡:Ö.à×#Ñ# EÖ*r-   c                	ó   a a€ VV 3R  lpV# )c                ó  <€ SP                   pV'       d   SP                  '       d   R # VP                  R4      ;'       g    . pS\        V4      8”  d   R # VP                  R4      '       dI   VP                  R\	        4       4      pVP                  S04       V P                  P                  4        R # S\        V4      8X  d	   RSn        MSP                  WS,          4       V P                  P                  4        R # )Nrm   rb  rc  T)	rñ   rð   r0   r‹   rƒ  Úsymmetric_difference_updaterQ  rL  Ú_clarify_batch_lock)r\  r�   rm   Úindicesr’   rc   s   &   €€r+   ÚhandlerÚ=CLITuiMixin._tui_make_clarify_number_handler.<locals>.handlerË  sÁ   ø€ Ø×'Ñ'ˆEß˜D×2×2Ð2ÙØ—i‘i 	Ó*×0Ð0¨bˆGØ”S˜“\Ô!Ùà�y‰y˜×(Ò(ØŸ)™)Ð$6¼»Ó>�Ø×3Ñ3°S°EÔ:Ø—	‘	×$Ñ$Ô&ÙØ”c˜'“lÔ"à)-�Õ&ð ×(Ñ(¨¸µÔ=Ø�I‰I× Ñ Ö"r-   r)   ©rc   r’   r˜  s   ff r+   Ú _tui_make_clarify_number_handlerÚ,CLITuiMixin._tui_make_clarify_number_handlerÊ  s   ù€ ö	#ð( ˆr-   c               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   á  s   € ÷ 2ñ 2¸Dñ 2r-   c                óú   € V'       g   R# Vw  r4VP                   P                  pW5n        \        V4      Vn        T;'       g    R F0  pW`P
                  9  g   K  V P
                  P                  V4       K2  	  R# )z;Put a popped (text, images) payload back into the composer.Nr)   )rQ  rh  rã   r‹   Úcursor_positionru  r‡   )rc   r\  r  rã   ÚimagesÚbufÚimgs   &&&    r+   Ú_tui_restore_stash_payloadÚ&CLITuiMixin._tui_restore_stash_payloadá  sc   € çÙØ‰ˆØ�i‰i×&Ñ&ˆØŒÜ! $›iˆÔð —<�<˜R’<ˆCØ×/Ñ/Ö/Ø×%Ñ%×,Ñ,¨SÖ1ó  r-   c                	óp   € V P                   P                  R4       VP                  P                  4        R# ©r  NrÆ   ©r2  Úmove_cursorrQ  rL  rp  s   &&r+   Ú_tui_handle_stash_panel_upÚ&CLITuiMixin._tui_handle_stash_panel_upï  s&   € Ø×Ñ×&Ñ& rÔ*Ø�	‰	×ÑÖr-   c                	óp   € V P                   P                  ^4       VP                  P                  4        R# ©r  Nr§  rp  s   &&r+   Ú_tui_handle_stash_panel_downÚ(CLITuiMixin._tui_handle_stash_panel_downó  s&   € Ø×Ñ×&Ñ& qÔ)Ø�	‰	×ÑÖr-   c                ón   € V P                   P                  4        VP                  P                  4        R# )z5D in the browse panel discards the highlighted draft.N)r2  Údelete_at_cursorrQ  rL  rp  s   &&r+   Ú_tui_handle_stash_panel_deleteÚ*CLITuiMixin._tui_handle_stash_panel_delete÷  s$   € à×Ñ×+Ñ+Ô-Ø�	‰	×ÑÖr-   c                	ón   € V P                   P                  4        VP                  P                  4        R # rq   )r2  Úclose_panelrQ  rL  rp  s   &&r+   Ú_tui_handle_stash_panel_closeÚ)CLITuiMixin._tui_handle_stash_panel_closeü  s$   € Ø×Ñ×&Ñ&Ô(Ø�	‰	×ÑÖr-   c                óè  € VP                   pVP                  '       do   VP                  P                  pVf<   VP                  ^ 4       VP                  ;'       d    VP                  P                  pVf   R# VP	                  V4       R# VP
                  '       dD   VP
                  P                  '       d(   VP                  VP
                  P                  4       R# VP                  4        R# )a
  Tab: accept the open completion, else the ghost auto-suggestion, else start completions.

After accepting a provider like 'anthropic:' the menu closes and complete_while_typing
doesn't fire (no keystroke); re-triggering here makes stage-2 models appear immediately.
N)	rh  Úcomplete_stateÚcurrent_completionÚgo_to_completionÚapply_completionÚ
suggestionrã   Úinsert_textÚstart_completion)rc   r\  r¡  Ú
completions   &&  r+   Ú_tui_handle_tabÚCLITuiMixin._tui_handle_tab   s°   € ð ×"Ñ"ˆØ××ÐØ×+Ñ+×>Ñ>ˆJØÒ!à×$Ñ$ QÔ'Ø ×/Ñ/×YÐY°C×4FÑ4F×4YÑ4Y�
ØÒ!ÙØ× Ñ  Ö,Ø�^�^ˆ^ §¡× 3× 3Ð 3Ø�O‰O˜CŸN™N×/Ñ/Ö0à× Ñ Ö"r-   c                ó0  € VP                   P                  pVP                  '       g   V P                  '       g   R# VP	                  \        VP                  4      R7       V P                  P                  4        VP                   P                  4        R# )uØ  Double ESC discards the draft and attached images (Claude Code / Gemini CLI gesture).

Works while the agent streams â€” the gap Ctrl+C leaves (it interrupts the turn and only
clears the draft when idle). The draft is appended to history first so Up recalls it,
which is what makes a reflex key safe. Single ESC is the Alt-sequence prefix
(escape+enter/g/v) so the escape-timeout keeps those distinct; modal prompts bind ESC
eagerly and are excluded so cancel still wins.
N©Úappend_to_history)rQ  rh  rã   ru  ri  r  rv  rL  ©rc   r\  r¡  s   && r+   Ú_tui_handle_double_escapeÚ%CLITuiMixin._tui_handle_double_escape  sb   € ð �i‰i×&Ñ&ˆØ——�˜D×1×1Ð1ÙØ�	‰	¤D¨¯©£Nˆ	Ô3Ø×Ñ×#Ñ#Ô%Ø�	‰	×ÑÖr-   c                ó²   €  \        VRR4      ;'       g    R F(  p\        VRR4      R8X  g   K  V P                  4         R# 	  R#   \         d     R# i ; i)aó  Consume parser-level ignored terminal sequences before self-insert.

hermes_cli.pt_input_extras registers focus reports (CSI I / CSI O) as Keys.Ignore at the
VT100 parser; without this no-op binding the default self-insert would still land the
bytes in the buffer. Focus-in additionally schedules a rate-limited full repaint: while
hidden, the emulator may have coalesced output or repainted, so prompt_toolkit's
incremental diff would stack a fresh prompt chrome on the stale one (#60920, #25337).
Úkey_sequenceNÚdataz[Ir)   )ra   Ú_schedule_focus_regain_redrawr=   )rc   r\  Úpresss   && r+   Ú%_tui_handle_ignored_terminal_sequenceÚ1CLITuiMixin._tui_handle_ignored_terminal_sequence%  sZ   € ð	Ü  ¨¸Ó=×CÐCÀÒC�Ü˜5 &¨$Ó/°8Ö;Ø×6Ñ6Ô8Úó Døô ô 	Úð	ús!   ‚A –A °A ÁA ÁAÁAc                ó  € V P                   '       dQ   V P                  4        VP                  P                  P	                  4        VP                  P                  4        R# V P                  '       dQ   V P                  4        VP                  P                  P	                  4        VP                  P                  4        R# V P                  '       dF   V P                  R,          P                  R4       RV n        VP                  P                  4        R# V P                  '       dR   V P                  R4       VP                  P                  P	                  4        VP                  P                  4        R# R# )z@ESC cancels active secret/sudo/connection/slash-confirm prompts.Úresponse_queuerl   Nrb  )rï   Ú_connection_cancelrQ  rh  ri  rL  rî   Ú_cancel_secret_capturerí   Úputrƒ   r~  rp  s   &&r+   Ú_tui_handle_escape_modalÚ$CLITuiMixin._tui_handle_escape_modal6  s  € à×!×!Ð!Ø×#Ñ#Ô%Ø�I‰I×$Ñ$×*Ñ*Ô,Ø�I‰I× Ñ Ö"Ø××ÐØ×'Ñ'Ô)Ø�I‰I×$Ñ$×*Ñ*Ô,Ø�I‰I× Ñ Ö"Ø××ÐØ×ÑÐ-Õ.×2Ñ2°2Ô6Ø#ˆDÔØ�I‰I× Ñ Ö"Ø×&×&Ð&Ø×/Ñ/°Ô9Ø�I‰I×$Ñ$×*Ñ*Ô,Ø�I‰I× Ñ Ö"ñ 'r-   c                óD  a	a
€ ^ RI HpHpHp \        P
                  R8X  d5   V! RV \        R4       V 24       VP                  P                  4        R# ^ RI	o	^ RI
Hp ^ RIHp V! 4       P                  RR	4      pR\        R
VR7      ,           o
V	V
3R lpV! V4       R# )z(Ctrl+Z suspends the process (Unix only).ra  Úwin32rí  zcli.tui.suspend_unsupportedN)Úrun_in_terminalr7   r9   zHermes Agentzcli.tui.suspendedrd  c                 ó”   <€ \         P                  ! ^SP                  4       4       \         P                  ! ^ S P                  4       R# r¬  )ÚosÚwriteÚencodeÚkillÚSIGTSTP)Ú_sigÚmsgs   €€r+   Ú_suspendÚ0CLITuiMixin._tui_handle_ctrl_z.<locals>._suspendV  s)   ø€ Ü�HŠH�Q˜Ÿ
™
›Ô%Ü�GŠG�A�t—|‘|Ö$r-   )r‚   r?  r@  rA  ÚsysÚplatformr   rQ  rL  Úsignalr“  rØ  r;   r8   r<   )rc   r\  r?  r@  rA  rØ  r8   r9   rá  rß  rà  s   &&       @@r+   Ú_tui_handle_ctrl_zÚCLITuiMixin._tui_handle_ctrl_zI  s…   ù€ ç+Ñ+Ü�<‰<˜7Ô"Ù�b˜˜œqÐ!>Ó?Ð@ÀÀÐGÔHØ�I‰I× Ñ Ô"ÙÛÝ>Ý:Ù$Ó&×3Ñ3°LÀ.ÓQˆ
Ø”QÐ*°zÔBÕBˆö	%ñ 	˜Ö!r-   c                ó  € VP                   P                  pVP                  '       d   VP                  4        R# V P                  '       g?   R\        V P                  4      uV n        V n        VP                   P                  4        R# R# )zºCtrl+D deletes under the cursor (readline); exits only on empty input (pending images count),
like bash/zsh. Mid-turn it detaches: the gateway finishes the turn, Ctrl+C stops it (LC-6b).TN)
rQ  rh  rã   Údeleteru  r  rô   rU  Ú_detach_on_exitrw  rÅ  s   && r+   Ú_tui_handle_ctrl_dÚCLITuiMixin._tui_handle_ctrl_d[  sa   € ð �i‰i×&Ñ&ˆØ�8�8ˆ8Ø�J‰JŽLØ×&×&Ð&Ø6:¼DÀ×ATÑATÓ<UÐ3ˆDÔ˜tÔ3Ø�I‰I�N‰NÖñ 'r-   c                ón   € VP                   pRV n        V! 4        VP                   V8X  d
   RV n        R# R# )a?  Run a history move with paste-collapse suppressed.

Recalled history can hold the full text of a paste collapsed at submit time; loading it
back looks like a fresh large paste to ``_on_text_changed``. If the move didn't change the
text (plain cursor movement) the flag is cleared so a later real paste still collapses.
TFN)rã   Ú_skip_paste_collapse)rc   r¡  ÚmoveÚbefores   &&& r+   Ú_tui_recall_without_recollapseÚ*CLITuiMixin._tui_recall_without_recollapsee  s3   € ð —‘ˆØ$(ˆÔ!ÙŒØ�8‰8�vÔØ(-ˆDÖ%ñ r-   c                ój   € V P                  4       '       d   VP                  P                  4        R# R# )uÞ   Alt+V pastes an image from the clipboard. Alt combos pass through every terminal
(ESC + key), unlike Ctrl+V which terminals intercept â€” reliable on WSL2/VSCode/SSH.
Silent when no image (avoid noise on accidental press).N©Ú_try_attach_clipboard_imagerQ  rL  rp  s   &&r+   Ú_tui_handle_alt_vÚCLITuiMixin._tui_handle_alt_vr  ó(   € ð ×+Ñ+×-Ò-Ø�I‰I× Ñ Ö"ñ .r-   c                ój   € V P                  4       '       d   VP                  P                  4        R# R# )zêImage paste for terminals without bracketed paste: GNOME Terminal/Konsole send raw
0x16. Terminals that intercept Ctrl+V (macOS Terminal, iTerm2, VSCode, Windows Terminal)
fire the bracketed-paste handler instead and never reach this.Nrô  rp  s   &&r+   Ú_tui_handle_ctrl_vÚCLITuiMixin._tui_handle_ctrl_vy  rø  r-   c                ó&   € V P                  4        R# )z�Ctrl+L forces a clean repaint after terminal buffer drift (tmux/cmux tab switches,
``clear`` from a subshell, SSH restores) that prompt_toolkit can't detect.N)Ú_force_full_redrawrp  s   &&r+   Ú_tui_handle_ctrl_lÚCLITuiMixin._tui_handle_ctrl_l€  s   € ð 	×ÑÖ!r-   c                ó<   € VP                   P                  R4       R# )z¨Newline for multi-line input (Alt+Enter; Ctrl+J/Ctrl+Enter with multiline shortcuts).
Windows Terminal intercepts Alt+Enter (fullscreen) and delivers Ctrl+Enter as c-j.rí  N)rh  r½  rp  s   &&r+   Ú_tui_insert_newlineÚCLITuiMixin._tui_insert_newline…  s   € ð 	×Ñ×(Ñ(¨Ö.r-   c                ó<   € V P                  VP                  4       R# )zICtrl+G (or Alt+G in VSCode/Cursor) opens the draft in an external editor.N)Ú_open_external_editorrh  rp  s   &&r+   Ú_tui_handle_open_in_editorÚ&CLITuiMixin._tui_handle_open_in_editorŠ  s   € à×"Ñ" 5×#7Ñ#7Ö8r-   c               ó    € V ^8„  d   QhRRRR/# )r%   ÚdeltarA   r(   r/  r)   )r*   s   "r+   r,   rZ   Ž  s   € ÷ ñ °ð ¸ñ r-   c                	ó^  € V P                   pV'       g   R # VP                  R4      pVR
9   Ed*   VP                  R4      ;'       g    . pVP                  R^ 4      pV\        V4      8  d”   WV,          pVP                  R/ 4      P                  RR4      pVP                  P                  P
                  VR,          V,          VP                  R4      &   \        \        V4      \        ^ Wb,           4      4      VR&   MHV^ 8  d   V'       d   \        V4      ^,
          VR&   M#VP                  R^ 4      V,           ^,          VR&   V P                  4        M*VR	8X  d$   VP                  R^ 4      V,           ^,          VR&   V P                  4        VP                  P                  4        R # )Nr  r  r	  r  r©  rl   Údraftsrn   r  >   r  r  )rï   r0   r‹   rQ  rh  rã   rŠ   rˆ   Ú_connection_sync_input_bufferÚ
_paint_nowrL  )	rc   r\  r  r�   r  r  rÏ  ÚfieldÚtarget_names	   &&&      r+   Ú_tui_connection_moveÚ CLITuiMixin._tui_connection_moveŽ  sQ  € Ø×&Ñ&ˆßÙØ—	‘	˜'Ó"ˆØÐ&Õ&Ø—Y‘Y˜xÓ(×.Ð.¨BˆFØ—i‘i ¨qÓ1ˆGØœ˜V›Ô$Ø��Ø#Ÿi™i¨°"Ó5×9Ñ9¸&À"ÓE�ØBGÇ)Á)×BZÑBZ×B_ÑB_��h• Õ,¨U¯Y©Y°vÓ->Ñ?Ü'*¬3¨v«;¼¸A¸w½Ó8OÓ'P��mÒ$Ø˜”ŸvÜ'*¨6£{°Q¥��mÒ$à%*§Y¡Y¨z¸1Ó%=ÀÕ%EÈÕ$J��jÑ!Ø×.Ñ.Õ0Ø�lÔ"Ø!&§¡¨:°qÓ!9¸EÕ!AÀQÕ FˆE�*ÑØ�‰ÔØ�	‰	×ÑÖr-   c                	ó*   € V P                  VR4       R# r¦  ©r  rp  s   &&r+   Ú_tui_connection_upÚCLITuiMixin._tui_connection_up¥  s   € Ø×!Ñ! %¨Ö,r-   c                	ó*   € V P                  V^4       R# r¬  r  rp  s   &&r+   Ú_tui_connection_downÚ CLITuiMixin._tui_connection_down¨  s   € Ø×!Ñ! %¨Ö+r-   c                	ó¼  € V P                   pV'       g   R # VP                  R4      ;'       g    . pVP                  R4      R8X  g7   VP                  R4      R9   d   VP                  R^ 4      \        V4      8¼  d]   ^\        ^\	        ^ VP                  R^ 4      4      4      ,
          VR&   V P                  4        VP                  P                  4        R # R # R # )Nr  r  r  r	  rn   >   r  r  )rï   r0   r‹   rŠ   rˆ   r  rQ  rL  )rc   r\  r�   r  s   &&  r+   Ú_tui_connection_sideÚ CLITuiMixin._tui_connection_side«  s¯   € Ø×&Ñ&ˆßÙØ—‘˜8Ó$×*Ð*¨ˆØ�9‰9�WÓ Ô-Ø�I‰I�gÓÐ"4Ô4Ø—	‘	˜-¨Ó+¬s°6«{Ô:à !¤C¨¬3¨q°%·)±)¸JÈÓ2JÓ+KÓ$LÕ LˆE�*ÑØ�O‰OÔØ�I‰I× Ñ Ö"ñ	 ;ñ 5r-   c                	ó$  € V P                   pV'       g   R # VP                  R4      R8X  d&   \        VP                  R4      ;'       g    . 4      pMVP                  R4      R8X  d   ^ RIHp \        V! 4       4      ^,           pMKVP                  R4      pVe   \        V4      M#\        VP                  R4      ;'       g    . 4      ^,           p\        W2P                  R^ 4      ^,           4      VR&   VP                  P                  4        R # )	Nr¤  r¥  r¦  r¯  r°  r¼  r¹  rn   )rÄ  r0   r‹   rÅ  r±  rŠ   rQ  rL  )rc   r\  r�   Úmax_idxr±  Ú_fps   &&    r+   Ú_tui_model_picker_downÚ"CLITuiMixin._tui_model_picker_down¸  sÒ   € Ø×(Ñ(ˆßÙØ�9‰9�WÓ Ô+Ü˜%Ÿ)™) KÓ0×6Ð6°BÓ7‰GØ�Y‰Y�wÓ ;Ô.ÝPÜÑ0Ó2Ó3°aÕ7‰Gð —)‘)Ð-Ó.ˆCØ#&¢?”s˜3”x¼¸E¿I¹IÀlÓ<S×<YÐ<YÐWYÓ8ZÐ^_Õ_ˆGÜ ¯©°:¸qÓ)AÀAÕ)EÓFˆˆjÑØ�	‰	×ÑÖr-   c                	óÖ   € V P                   '       dW   \        ^ V P                   P                  R^ 4      ^,
          4      V P                   R&   VP                  P	                  4        R# R# ©r6   rn   N)rÄ  rˆ   r0   rQ  rL  rp  s   &&r+   Ú_tui_model_picker_upÚ CLITuiMixin._tui_model_picker_upÈ  sU   € Ø×#×#Ð#Ü36°q¸$×:RÑ:R×:VÑ:VÐWaÐcdÓ:eÐhiÕ:iÓ3jˆD×$Ñ$ ZÑ0Ø�I‰I× Ñ Ö"ñ $r-   c               ó    € V ^8„  d   QhRRRR/# )r%   rÐ  r'   r(   r/  r)   )r*   s   "r+   r,   rZ   Î  s   € ÷ !ñ ! 3ð !¨4ñ !r-   c                ó"   € WR&   ^ V R&   ^ V R&   R# )zDReplace a picker/palette filter and rewind the selection + viewport.r»  rn   r�  Nr)   )ÚstrÐ  s   &&r+   Ú_tui_set_filterÚCLITuiMixin._tui_set_filterÍ  s   € ð ˆ8‰Øˆˆ:‰Ø ˆÐÓr-   c                ó   € V P                   pV'       d]   VP                  R4      R8X  dG   VP                  R4      '       g   M.V P                  VR4       VP                  P	                  4        R# V'       dH   VP                  R4      R8X  d2   VP                  R^ ^ RR7       VP                  P	                  4        R# V P                  4        VP                  P                  P                  4        VP                  P	                  4        R# )zVESC clears an active filter first, else steps back from the effort stage, else closes.r¤  r®  r»  rl   Nr¯  )r¤  rn   r�  r²  )	rÄ  r0   r'  rQ  rL  r  r…  rh  ri  ©rc   r\  r&  s   && r+   Ú_tui_model_picker_escapeÚ$CLITuiMixin._tui_model_picker_escapeÔ  s¾   € à×%Ñ%ˆß�"—&‘&˜“/ WÔ,°"·&±&¸×2BÒ2BÀbØ× Ñ   RÔ(Ø�I‰I× Ñ Ô"Ùß�"—&‘&˜“/ [Ô0Ø�I‰I˜G¨aÀÐQUˆIÔVØ�I‰I× Ñ Ô"ÙØ× Ñ Ô"Ø�	‰	× Ñ ×&Ñ&Ô(Ø�	‰	×ÑÖr-   c                	óÂ   € V P                   pV'       dK   T P                  Y"P                  R R4      ;'       g    RRR 4       VP                  P	                  4        R# R# ©r»  rl   NrÆ   )rÄ  r'  r0   rQ  rL  r*  s   && r+   Ú"_tui_model_picker_filter_backspaceÚ.CLITuiMixin._tui_model_picker_filter_backspaceã  sM   € Ø×%Ñ%ˆßØ× Ñ  §f¡f¨X°rÓ&:×&@Ð&@¸bÀ#À2Ð%FÔGØ�I‰I× Ñ Ö"ñ r-   c               ó   € V ^8„  d   QhRR/# ©r%   rÁ   r'   r)   )r*   s   "r+   r,   rZ   é  s   € ÷ ñ °cñ r-   c                	ó   a a€ VV 3R  lpV# )c                óø   <€ SP                   pV'       d   VP                  R 4      R8w  d   R# SP                  YP                  RR4      ;'       g    RS,           4       V P                  P	                  4        R# )r¤  r®  Nr»  rl   )rÄ  r0   r'  rQ  rL  ©r\  r&  rÁ   rc   s   & €€r+   r˜  Ú@CLITuiMixin._tui_make_model_filter_char_handler.<locals>.handlerê  sY   ø€ Ø×)Ñ)ˆBß˜Ÿ™ ›¨GÔ3ÙØ× Ñ  §f¡f¨X°rÓ&:×&@Ð&@¸bÀBÕ%FÔGØ�I‰I× Ñ Ö"r-   r)   ©rc   rÁ   r˜  s   ff r+   Ú#_tui_make_model_filter_char_handlerÚ/CLITuiMixin._tui_make_model_filter_char_handleré  s   ù€ ö	#ð ˆr-   c               ó   € V ^8„  d   QhRR/# r2  r)   )r*   s   "r+   r,   rZ   ò  s   € ÷ ñ °ñ r-   c                	ó   a a€ VV 3R  lpV# )c                óÌ   <€ SP                   pV'       dO   SP                  YP                  R R4      ;'       g    RS,           4       V P                  P	                  4        R# R# )r»  rl   N©rÜ  r'  r0   rQ  rL  r5  s   & €€r+   r˜  Ú;CLITuiMixin._tui_make_palette_char_handler.<locals>.handleró  sL   ø€ Ø×,Ñ,ˆBßØ×$Ñ$ R¯&©&°¸2Ó*>×*DÐ*DÀ"ÈÕ)JÔKØ—	‘	×$Ñ$Ö&ñ r-   r)   r7  s   ff r+   Ú_tui_make_palette_char_handlerÚ*CLITuiMixin._tui_make_palette_char_handlerò  ó   ù€ ö	'ð
 ˆr-   c                	ó   a a€ VV 3R  lpV# )c                óè   <€ SP                   '       d_   S\        SP                   R ,          4      8  d<   SSP                   R&   SP                  4        V P                  P	                  4        R# R# R# ©rm   rn   N)r°   r‹   Ú_handle_approval_selectionrQ  rL  ©r\  r’   rc   s   &€€r+   r˜  Ú>CLITuiMixin._tui_make_approval_number_handler.<locals>.handlerû  s[   ø€ Ø×#×#Ð#¨¬c°$×2FÑ2FÀyÕ2QÓ.RÔ(RØ36�×$Ñ$ ZÑ0Ø×/Ñ/Ô1Ø—	‘	×$Ñ$Ö&ñ )SÑ#r-   r)   rš  s   ff r+   Ú!_tui_make_approval_number_handlerÚ-CLITuiMixin._tui_make_approval_number_handlerú  rA  r-   c                	ó   a a€ VV 3R  lpV# )c                óv  <€ SP                   '       d¦   S\        SP                   P                  R 4      ;'       g    . 4      8  dq   SP                  SP                   R ,          S,          ^ ,          4       V P                  P
                  P                  4        V P                  P                  4        R# R# R# )rm   N)rƒ   r‹   r0   r~  rQ  rh  ri  rL  rF  s   &€€r+   r˜  ÚCCLITuiMixin._tui_make_slash_confirm_number_handler.<locals>.handler  sŠ   ø€ Ø×(×(Ð(¨S´3°t×7PÑ7P×7TÑ7TÐU^Ó7_×7eÐ7eÐceÓ3fÔ-fØ×3Ñ3°D×4MÑ4MÈiÕ4XÐY\Õ4]Ð^_Õ4`ÔaØ—	‘	×(Ñ(×.Ñ.Ô0Ø—	‘	×$Ñ$Ö&ñ .gÑ(r-   r)   rš  s   ff r+   Ú&_tui_make_slash_confirm_number_handlerÚ2CLITuiMixin._tui_make_slash_confirm_number_handler  rA  r-   c                	óð   € V P                   '       dd   V P                   P                  R \        4       4      pVP                  V P                   R,          04       VP                  P                  4        R# R# )rc  rn   N)rñ   r0   rƒ  r•  rQ  rL  )rc   r\  r—  s   && r+   Ú_tui_clarify_toggleÚCLITuiMixin._tui_clarify_toggle
  sZ   € Ø××ÐØ×)Ñ)×-Ñ-Ð.@Ä#Ã%ÓHˆGØ×/Ñ/°×1DÑ1DÀZÕ1PÐ0QÔRØ�I‰I× Ñ Ö"ñ r-   c                	ó  € V P                   '       d{   \        V P                   P                  R 4      ;'       g    . 4      p\        W P                   R,          ^,           4      V P                   R&   VP                  P                  4        R# R# rD  )rñ   r‹   r0   rŠ   rQ  rL  )rc   r\  r  s   && r+   Ú_tui_clarify_downÚCLITuiMixin._tui_clarify_down  sl   € Ø××ÐÜ˜$×-Ñ-×1Ñ1°)Ó<×BÐBÀÓCˆGÜ.1°'×;NÑ;NÈzÕ;ZÐ]^Õ;^Ó._ˆD×Ñ 
Ñ+Ø�I‰I× Ñ Ö"ñ r-   c                	óÄ   € V P                   '       dN   \        ^ V P                   R,          ^,
          4      V P                   R&   VP                  P                  4        R# R# r!  )rñ   rˆ   rQ  rL  rp  s   &&r+   Ú_tui_clarify_upÚCLITuiMixin._tui_clarify_up  sK   € Ø××ÐÜ.1°!°T×5HÑ5HÈÕ5TÐWXÕ5XÓ.YˆD×Ñ 
Ñ+Ø�I‰I× Ñ Ö"ñ r-   c               ó   € V ^8„  d   QhRR/# )r%   r  rA   r)   )r*   s   "r+   r,   rZ     s   € ÷ #ñ #°Cñ #r-   c                	óÒ   € V P                   pV'       dS   V P                  W3R ,          V,           \        VR,          4      ,          4       VP                  P	                  4        R# R# )ra  r^  N)rñ   Ú_clarify_batch_set_activer‹   rQ  rL  )rc   r\  r  r�   s   &&& r+   Ú_tui_clarify_batch_stepÚ#CLITuiMixin._tui_clarify_batch_step  sM   € Ø×#Ñ#ˆßØ×*Ñ*¨5¸µ?ÀUÕ3JÌcÐRWÐXcÕRdÓNeÕ2eÔfØ�I‰I× Ñ Ö"ñ r-   c                	ó*   € V P                  V^4       R# r¬  ©r[  rp  s   &&r+   Ú_tui_clarify_batch_tabÚ"CLITuiMixin._tui_clarify_batch_tab!  s   € Ø×$Ñ$ U¨AÖ.r-   c                	ó*   € V P                  VR4       R# r¦  r^  rp  s   &&r+   Ú_tui_clarify_batch_backtabÚ&CLITuiMixin._tui_clarify_batch_backtab$  s   € Ø×$Ñ$ U¨BÖ/r-   c                	óÂ   € V P                   pV'       dK   T P                  Y"P                  R R4      ;'       g    RRR 4       VP                  P	                  4        R# R# r.  r=  r*  s   && r+   Ú_tui_command_palette_backspaceÚ*CLITuiMixin._tui_command_palette_backspace'  sM   € Ø×(Ñ(ˆßØ× Ñ  §f¡f¨X°rÓ&:×&@Ð&@¸bÀ#À2Ð%FÔGØ�I‰I× Ñ Ö"ñ r-   c                	ó&  € V P                   pV'       d}   VP                  R \        V P                  4       4      4      p\	        \        ^ V^,
          4      VP                  R^ 4      ^,           4      VR&   VP                  P                  4        R# R# )rÚ  rn   N)rÜ  r0   r‹   rÝ  rŠ   rˆ   rQ  rL  )rc   r\  r&  Úns   &&  r+   Ú_tui_command_palette_downÚ%CLITuiMixin._tui_command_palette_down-  sn   € Ø×(Ñ(ˆßØ—‘Ð'¬¨T×-RÑ-RÓ-TÓ)UÓVˆAÜ ¤ Q¨¨A­£°·±°zÀ1Ó0EÈÕ0IÓJˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	ó²   € V P                   pV'       dC   \        ^ VP                  R^ 4      ^,
          4      VR&   VP                  P	                  4        R# R# r!  )rÜ  rˆ   r0   rQ  rL  r*  s   && r+   Ú_tui_command_palette_upÚ#CLITuiMixin._tui_command_palette_up4  sE   € Ø×(Ñ(ˆßÜ   B§F¡F¨:°qÓ$9¸AÕ$=Ó>ˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	óZ   € V P                  4        VP                  P                  4        R # rq   )Ú!_handle_command_palette_selectionrQ  rL  rp  s   &&r+   Ú_tui_command_palette_enterÚ&CLITuiMixin._tui_command_palette_enter:  s   € Ø×.Ñ.Ô0Ø�	‰	×ÑÖr-   c                	óZ   € V P                  4        VP                  P                  4        R # rq   )r†  rQ  rL  rp  s   &&r+   Ú_tui_command_palette_escapeÚ'CLITuiMixin._tui_command_palette_escape>  s   € Ø×#Ñ#Ô%Ø�	‰	×ÑÖr-   c                	óZ   € V P                  4        VP                  P                  4        R # rq   )Ú_open_command_paletterQ  rL  rp  s   &&r+   Ú_tui_open_command_paletteÚ%CLITuiMixin._tui_open_command_paletteB  s   € Ø×"Ñ"Ô$Ø�	‰	×ÑÖr-   c                	ó  € V P                   pV'       dl   \        \        VP                  R 4      ;'       g    . 4      ^,
          VP                  R^ 4      ^,           4      VR&   VP                  P                  4        R# R# rD  )rƒ   rŠ   r‹   r0   rQ  rL  r*  s   && r+   Ú_tui_slash_confirm_downÚ#CLITuiMixin._tui_slash_confirm_downF  sb   € Ø×&Ñ&ˆßÜ ¤ R§V¡V¨IÓ%6×%<Ð%<¸"Ó!=ÀÕ!AÀ2Ç6Á6È*ÐVWÓCXÐ[\ÕC\Ó]ˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	ó²   € V P                   pV'       dC   \        ^ VP                  R^ 4      ^,
          4      VR&   VP                  P	                  4        R# R# r!  )rƒ   rˆ   r0   rQ  rL  r*  s   && r+   Ú_tui_slash_confirm_upÚ!CLITuiMixin._tui_slash_confirm_upL  sE   € Ø×&Ñ&ˆßÜ   B§F¡F¨:°qÓ$9¸AÕ$=Ó>ˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	óÎ   € V P                   pV'       dQ   \        \        VR ,          4      ^,
          VR,          ^,           4      VR&   VP                  P	                  4        R# R# rD  )r°   rŠ   r‹   rQ  rL  r*  s   && r+   Ú_tui_approval_downÚCLITuiMixin._tui_approval_downR  sL   € Ø×!Ñ!ˆßÜ ¤ R¨	¥]Ó!3°aÕ!7¸¸J½È!Õ9KÓLˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	ó    € V P                   pV'       d:   \        ^ VR,          ^,
          4      VR&   VP                  P                  4        R# R# r!  )r°   rˆ   rQ  rL  r*  s   && r+   Ú_tui_approval_upÚCLITuiMixin._tui_approval_upX  s>   € Ø×!Ñ!ˆßÜ   B z¥N°QÕ$6Ó7ˆBˆz‰NØ�I‰I× Ñ Ö"ñ r-   c                	óŠ   € ^ RI Hp  V P                  4        R#   \         d   pTP	                  RT4        Rp?R# Rp?ii ; i)r6   ©rB  zwake-word startup skipped: %sN)r‚   rB  Ú_maybe_start_wake_wordr=   Údebug)rc   rB  rÓ  s   &  r+   Ú_tui_wake_startupÚCLITuiMixin._tui_wake_startup^  s8   € Ýð	=Ø×'Ñ'Ö)øÜô 	=Ø�L‰LÐ8¸!×<Ò<ûð	=ús   ˆ šA¥=½Ac                	óZ  € VP                  R 4      p\        V\        4      '       d   R\        V4      9   d   R# \        V\        4      '       d   R\        V4      9   d   R# \        V\
        4      '       d#   \        VRR4      \        P                  8X  d   R# VP                  V4       R# )Ú	exceptionzEvent loop is closedNzis not registeredÚerrno)
r0   r‘  ÚRuntimeErrorr'   ÚKeyErrorÚOSErrorra   r�  ÚEIOÚdefault_exception_handler)rc   ÚloopÚcontextÚexcs   &&& r+   Ú _tui_suppress_closed_loop_errorsÚ,CLITuiMixin._tui_suppress_closed_loop_errorse  sz   € Ø�k‰k˜+Ó&ˆÜ�cœ<×(Ò(Ð-CÄsÈ3ÃxÔ-OÙÜ�cœ8×$Ò$Ð)<ÄÀCÃÔ)HÙÜ�cœ7×#Ò#¬°°W¸dÓ(CÄuÇyÁyÔ(PÙØ×&Ñ& wÖ/r-   c                ó¦  € ^ RI HpHpHp V P	                  V4      '       d   R# VP
                  P                  pVP                  pV P                  '       dc   VP                  \        V4      8X  dI   V! V4      '       d;   V! V4      pWun        \        V4      Vn	        VP
                  P                  4        R# \        P                  ! 4       \        V RR4      ,
          \        8  d   VP!                  R4       R# VP#                  4       p\%        V P&                  4      p	V'       g   V	'       g   R# V P)                  WV	4      '       d   R# \+        V P&                  4      p
V P&                  P-                  4        VP
                  P                  4        V
'       d   WŠ3MTp\%        V4      ;'       d0    V! V4      ;'       g     VP#                  4       P/                  R4      pV P0                  '       d   V'       g   V P3                  WŠV4       MV P4                  P7                  V4       V P9                  V4       VP;                  RR7       R# )	uy  Enter: submit input.

Modal overlays (sudo/secret/approval/slash-confirm/picker/clarify) are answered first via
``_tui_enter_overlay``. Otherwise: agent running â†’ busy_input_mode routing (steer /
redirect / interrupt queue / next-turn queue); idle â†’ ``_pending_input``. Slash and bang
commands always take the local-dispatch path (never steer/interrupt text to the model).
)Ú"_apply_backslash_line_continuationÚ_is_backslash_line_continuationÚ_looks_like_slash_commandNÚ_tui_last_text_changer  rí  Ú!TrÃ  )r‚   r™  rš  r›  Ú_tui_enter_overlayrQ  rh  rã   Ú_tui_multiline_shortcutsrŸ  r‹   rL  rV  r   ra   Ú_RAPID_INPUT_ENTER_WINDOW_Sr½  râ   r  ru  Ú_tui_enter_inline_commandr)  rv  r  rô   Ú_tui_enter_while_busyÚ_pending_inputrÓ  Ú_inline_pastesri  )rc   r\  r™  rš  r›  r¡  Úraw_textÚ	continuedrã   Ú
has_imagesr   r  Ú_is_local_dispatchs   &&           r+   Ú_tui_handle_enterÚCLITuiMixin._tui_handle_entero  sÁ  € ÷	'ñ 	'ð ×"Ñ" 5×)Ò)ÙØ�i‰i×&Ñ&ˆØ—8‘8ˆð ×)×)Ð)Ø×#Ñ#¤s¨8£}Ô4Ù/°×9Ò9Ù:¸8ÓDˆIØ ŒHÜ"% i£.ˆCÔØ�I‰I× Ñ Ô"Ùô
 �>Š>Óœg dÐ,CÀSÓIÕIÔLgÔgØ�O‰O˜DÔ!ÙØ�~‰~ÓˆÜ˜$×/Ñ/Ó0ˆ
ßŸ
ÙØ×)Ñ)¨%°z×BÒBÙä�d×+Ñ+Ó,ˆØ×Ñ×#Ñ#Ô%Ø�	‰	×ÑÔß$*�4‘.°ˆô " $›Z×mÐmÑ-FÀtÓ-L×-lÐ-lÐPT×PZÑPZÓP\×PgÑPgÐhkÓPlÐØ××Ð×'9Ø×&Ñ& t°WÕ=à×Ñ×#Ñ# GÔ,à×Ñ˜CÔ Ø�	‰	 Dˆ	Ö)r-   c               ó$   € V ^8„  d   QhRRRRRR/# )r%   rã   r'   r§  r  r(   r)   )r*   s   "r+   r,   rZ   ¨  s!   € ÷ ñ °Sð Àdð Ètñ r-   c                ó  € V P                  W#R7      '       dV   V P                  V4      '       g>   RV n        VP                  P                  '       d   VP                  P                  4        M\V P                  W#R7      '       g1   V P                  W#R7      '       g   V P                  W#R7      '       d   V P                  V4       MR# VP                  P                  P                  RR7       VP                  P                  4        R# )uL  Run /model, /steer, /bg, /btw directly on the UI thread; True when handled.

/model needs the prompt_toolkit terminal-handoff helpers of the interactive pickers.
/steer, /bg and /btw while the agent runs must not queue through _pending_input: the
process loop is blocked inside self.chat(), so they would only run after the foreground
turn â€” turning /steer into a next-turn message (defeating mid-run injection, #34569) and
starting the /bg side task after the turn it should run alongside (#75221). The
foreground turn is left alone: no interrupt, no steer. agent.steer() is thread-safe.

Every branch invalidates after reset: process_command() prints through patch_stdout
and never invalidates the app, so the just-cleared input area would keep showing the
submitted text (looking unsent, inviting a re-submit) until some unrelated redraw.
)r§  TFrÃ  )Ú#_should_handle_model_command_inlineÚprocess_commandrU  rQ  Ú
is_runningrw  Ú#_should_handle_steer_command_inlineÚ(_should_handle_background_command_inlineÚ"_should_handle_stop_command_inlinerh  ri  rL  )rc   r\  rã   r§  s   &&&&r+   r¡  Ú%CLITuiMixin._tui_enter_inline_command¨  sË   € ð ×3Ñ3°DÐ3×PÒPØ×'Ñ'¨×-Ò-Ø$(�Ô!Ø—9‘9×'×'Ð'Ø—I‘I—N‘NÔ$øØ×6Ñ6°tÐ6×SÒSØ×>Ñ>¸tÐ>×[Ò[Ø×8Ñ8¸Ð8×UÒUØ× Ñ  Õ&áØ�	‰	× Ñ ×&Ñ&¸Ð&Ô>Ø�	‰	×ÑÔÙr-   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   rã   r'   r   r)  Úmodez
str | Noner(   r/  r)   )r*   s   "r+   r,   rZ   Å  s/   € ÷ Eñ E¨#ð E°tð EÈJð EÐbfñ Er-   c           
     óº  € ^ RI HpHpHpHpHp	Hp
 T;'       g    V P                  pRpVR8X  d¬   V'       g	   V'       g   RpM˜Rp V P                  e8   \        V P                  R4      '       d   V P                  P                  V4      pTR	8X  d   R# T'       d>   TR
,          \        T4      ^P8”  d   RMR,           pT	! RT \        RTR7       T 24       MRpVR8X  d6   V'       d.   V'       g&   V P                  4       e   V P                  V4       EMÑVR8X  dy   V P                   P#                  V4       V'       d   TM\%        R\        V4      4      pVR
,          \        V4      ^P8”  d   RMR,           pV	! R\        RVR7      ,           4       EMRVR8X  EdK   V'       gj   V'       db    V P                  eS   \'        V P                  RR4      RJ d8   \        V P                  R4      '       d   V P                  P)                  V4      pVR	8X  d   R# V'       d>   VR
,          \        V4      ^P8”  d   RMR,           pV	! RV \        RVR7       V 24       M‹V P*                  P#                  V4        \-        V
R,          RRR7      ;_uu_ 4       pVP/                  \0        P2                  ! R4       R\5        V4      R,          : RV P6                   R24       RRR4        ^ RIHpHpHpH p V! VV4      '       gY   V'       d   RMTpV	! RV V! V4       V 24       V! V
R ,          V4       RVPC                  R!/ 4      PC                  R"/ 4      V&   R# R#   \         d(   pT	! RT \        RTR7       T 24       Rp Rp?EL Rp?ii ; i  \         d    Rp EL”i ; i  + '       g   i     LÏ; i  \         d     Lßi ; i  \         d     R# i ; i)#um  Route a submission typed while the agent runs, per ``busy_input_mode``.

steer â†’ agent.steer(text) mid-run (images can't ride along; a missing/rejecting steer() falls back
to queue). interrupt â†’ agent.redirect() when supported, else the legacy interrupt queue. queue â†’
next turn: text-only on the gateway's session is a ``/queue`` FIFO admission (#134889 N5).)Ú
CLI_CONFIGÚ_ACCENTr?  r@  rA  Ú_hermes_homeFÚsteerÚqueueNrª   zcli.tui.steer_failed_queuedrH  Úvoice_stopped:NéP   Nz...rl   zcli.tui.steered)Úpreviewzcli.tui.images_attached_previewzcli.tui.queued_next_turnÚ	interruptÚ_supports_active_turn_redirectTÚredirectzcli.tui.redirected_turnzinterrupt_debug.logÚaúutf-8©Úencodingz%H:%M:%Sz ENTER: queued interrupt msg=:Né<   Nz, agent_running=rí  )ÚBUSY_INPUT_FLAGÚbusy_input_hint_cliÚis_seenÚ	mark_seenzconfig.yamlÚ
onboardingÚseen)"r‚   r·  r¸  r?  r@  rA  r¹  r1  r‡  rK  rº  r=   r   r‹   Ú_gateway_queue_storeÚ_queue_enqueuer£  rÓ  rF   ra   rÁ  Ú_interrupt_queueÚopenrÛ  rV  Ústrftimer'   rô   Úagent.onboardingrÇ  rÈ  rÉ  rÊ  Ú
setdefault)rc   rã   r   r  rµ  r·  r¸  r?  r@  rA  r¹  Ú_effective_modeÚ
redirectedÚacceptedr•  r¾  Ú_frÇ  rÈ  rÉ  rÊ  Ú
_hint_modes   &&&&&                 r+   r¢  Ú!CLITuiMixin._tui_enter_while_busyÅ  sf  € ÷ 	O×NØ×6Ð6 $×"6Ñ"6ˆØˆ
Ø˜gÔ%ßŸTØ")‘à �ð%Ø—z‘zÒ-´'¸$¿*¹*Àg×2NÒ2NØ#'§:¡:×#3Ñ#3°DÓ#9˜ð ˜Ô.ÙßØ" 3�i´C¸³IÀ´N©5ÈÕK�GÙ˜b  	¬!Ð,=ÀwÔ*OÐ)PÐQUÐPVÐWÕXà&-�OØ˜gÔ%¯$·vÀ$×B[ÑB[ÓB]ÒBiØ×Ñ Ö%Ø Ô'Ø×Ñ×#Ñ# GÔ,ß"‘d¬Ð,MÌsÐSYË{Ó([ˆGØ˜c•l¬s°7«|¸bÔ/@¡eÀbÕIˆGÙ�Dœ1Ð7ÀÔIÕIÖJØ Õ+ßŸdð'àŸ
™
Ò.Ü# D§J¡JÐ0PÐRWÓXÐ\`Ó`Ü# D§J¡J°
×;Ò;Ø%)§Z¡Z×%8Ñ%8¸Ó%>˜
ð ˜_Ô,ÙßØ˜s�)´°D³	¸B´¡uÀBÕG�Ù˜"˜W˜I¤aÐ(AÈ7Ô&SÐ%TÐUYÐTZÐ[Õ\à×%Ñ%×)Ñ)¨'Ô2ðÜ˜lÐ-BÕBÀCÐRY×ZÕZÐ^`ØŸ™Ü#Ÿ}š}¨ZÓ8Ð9Ð9VÔWZÐ[bÓWcÐdgÕWhÑVkð l-Ø-1×-@Ñ-@Ð,AÀðEôF÷ [ð	ßaÓaÙ˜: ×7Ò7ß+5™Z¸?�
Ù˜"˜T˜FÑ#6°zÓ#BÐ"CÀDÀ6ÐJÔKÙ˜,¨Õ6¸ÔHØbf�
×%Ñ% l°BÓ7×BÑBÀ6È2ÓNÈÓ_ñ	 8øô] !ô %Ù˜b  ¤qÐ)FÈcÔ'RÐ&SÐTXÐSYÐZÔ[Ø$–Hûð%ûô2 !ô 'Ø!&“Jð'ú÷ [×Zûô !ô Ùðûô ô 	Úð	ús|   ÁAM Æ/A N É9N: ÊA
N'Ë N: Ë)O ÌO ÌAO ÍNÍ)NÎNÎN$Î#N$Î'N7	Î2N: Î7N: Î:OÏOÏOÏOc               ó   € V ^8„  d   QhRR/# r  r)   )r*   s   "r+   r,   rZ     s   € ÷ =ñ =¨4ñ =r-   c           	     ó¶  € ^ RI Hp VP                  P                  pV P                  '       d¸   V P                  pVP                  R4      ;'       g    . pVP                  R4      R9   dO   VP                  R^ 4      \        V4      8  d/   VP                  pVP                  4        V P                  V4       MV P                  4        VP                  P                  4        R# V P                  '       dP   V P                  R,          P                  VP                  4       RV n        VP                  P                  4        R# V P                  '       dJ   VP                  pVP                  4        V P                  V4       VP                  P                  4        R# V P                   '       d-   V P#                  4        VP                  P                  4        R# V P$                  '       dì   VP                  P'                  4       pV P$                  P                  R4      ;'       g    . pV'       d   V P)                  Wx4      MRp	V	fG   V P$                  P                  R	^ 4      p
^ T
u;8:  d   \        V4      8  d   M MWŠ,          ^ ,          p	T P+                  T	;'       g    R
4       VP                  4        VP                  P                  4        R# V P,                  '       dM    ^ RIHp V P3                  V! RR4      R7       VP                  4        VP                  P                  4        R# V P:                  '       d&   V P<                  '       d   V P?                  V4       R# V P:                  '       d   V PA                  V4       R# R#   \4         d5   pT! R\7        RTR7      ,           4       T P9                  4         Rp?LÄRp?ii ; i)z@Enter while a modal overlay is up: submit it. True when handled.)rA  r  r  r	  TrÐ  Nrm   rn   rb  )Úresolve_persist_behaviorF)Úpersist_globalrª   zcli.tui.model_selection_failedrH  >   r  r  )!r‚   rA  rQ  rh  rï   r0   r‹   rã   ri  Ú_connection_set_fieldÚ_connection_submitrL  rí   rÓ  rî   Ú_submit_secret_responser°   rE  rƒ   râ   Ú_normalize_slash_confirm_choicer~  rÄ  Úhermes_cli.model_switchrÜ  Ú_handle_model_picker_selectionr=   r   r…  rñ   rð   Ú_tui_enter_clarify_freetextÚ_tui_enter_clarify_choice)rc   r\  rA  r¡  r�   r  rÐ  rã   rm   r&   rn   rÜ  Ú_excs   &&           r+   rž  ÚCLITuiMixin._tui_enter_overlay  så  € åØ�i‰i×&Ñ&ˆØ×!×!Ð!Ø×*Ñ*ˆEØ—Y‘Y˜xÓ(×.Ð.¨BˆFØ�y‰y˜Ó!Ð%7Ô7¸E¿I¹IÀmÐUVÓ<WÔZ]Ð^dÓZeÔ<eØŸ™�Ø—	‘	”Ø×*Ñ*¨5Õ1à×'Ñ'Ô)Ø�I‰I× Ñ Ô"ÙØ××ÐØ×ÑÐ-Õ.×2Ñ2°3·8±8Ô<Ø#ˆDÔØ�I‰I× Ñ Ô"ÙØ××ÐØ—H‘HˆEØ�I‰IŒKØ×(Ñ(¨Ô/Ø�I‰I× Ñ Ô"ÙØ××ÐØ×+Ñ+Ô-Ø�I‰I× Ñ Ô"ÙØ×$×$Ð$à—8‘8—>‘>Ó#ˆDØ×/Ñ/×3Ñ3°IÓ>×DÐDÀ"ˆGßLP�T×9Ñ9¸$ÔHÐVZˆFØŠ~Ø×4Ñ4×8Ñ8¸ÀQÓG�Ø˜Ö/¤3 w£<×/Ø$Õ.¨qÕ1�FØ×/Ñ/°×0BÐ0B¸(ÔCØ�I‰IŒKØ�I‰I× Ñ Ô"ÙØ×#×#Ð#ð+õ MØ×3Ñ3ÑC[Ð\aÐchÓCiÐ3Ôjð �I‰IŒKØ�I‰I× Ñ Ô"ÙØ××Ð 4×#9×#9Ð#9Ø×,Ñ,¨UÔ3ÙØ××ÐØ×*Ñ*¨5Ô1ÙÙøô ô +Ù˜œqÐ!AÈÔNÕNÔOØ×(Ñ(×*Ñ*ûð+ús   Ë0N ÎOÎ$*OÏOc               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   K  s   € ÷ ñ °Dñ r-   c           
     óø  € VP                   P                  pVP                  P                  4       pV P                  p\        V RR4      pV'       gš   RV n        RV n        RV n        V'       d;   V P                  V\        P                  ! VRR7      RRR\        V4      R	R/R
7       MV P                  VRRR/R
7       VP                  4        VP                   P                  4        R# Ve9   \        P                  ! WS.,           RR7      pRRR\        V4      R	V/pRV n        MTpRRR	V/pRV n        RV n        V P                  WFVR
7       VP                  4        VP                   P                  4        R# )zGClarify "Other": lock the typed answer; empty input skips the question.Ú_clarify_multi_baseNFrl   )Úensure_asciiÚkindÚmultirm   rj  )ÚmetaÚskippedÚother)rQ  rh  rã   râ   rñ   ra   rð   Ú_clarify_prefillrê  r–  ÚjsonÚdumpsr)  ri  rL  )rc   r\  r¡  rã   r�   Úbasers  rî  s   &&      r+   rä  Ú'CLITuiMixin._tui_enter_clarify_freetextK  sR  € à�i‰i×&Ñ&ˆØ�x‰x�~‰~ÓˆØ×#Ñ#ˆÜ�tÐ2°DÓ9ˆßØ%*ˆDÔ"Ø$&ˆDÔ!Ø'+ˆDÔ$ßØ×(Ñ(¨´·
²
¸4ÈeÔ0TØ/5°wÀ	Ì4ÐPTË:ÐWcÐegÐ.hð )õ jð ×(Ñ(¨°¸FÀIÐ;NÐ(ÔOØ�I‰IŒKØ�I‰I× Ñ Ô"ÙàÒÜ—Z’Z  v¥¸EÔBˆFØ˜G Y´°T³
¸LÈ$ÐOˆDØ'+ˆDÕ$àˆFØ˜G \°4Ð8ˆDØ!&ˆÔØ "ˆÔØ× Ñ  °TÐ Ô:Ø�	‰	ŒØ�	‰	×ÑÖr-   c               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   k  s   € ÷ 	ñ 	°$ñ 	r-   c                ól  € V P                  V P                  4       V P                  '       dm   V P                  '       d[   V P                  VP                  P
                  n        \        V P                  4      VP                  P
                  n        RV n        VP                  P                  4        R# )zZClarify choice mode: lock the active question's answer and advance to the next
unanswered.rl   N)
Ú_clarify_batch_enterrñ   rð   rñ  rQ  rh  rã   r‹   rŸ  rL  rp  s   &&r+   rå  Ú%CLITuiMixin._tui_enter_clarify_choicek  s|   € ð 	×!Ñ! $×"5Ñ"5Ô6à×!×!Ð! d×&;×&;Ð&;Ø,0×,AÑ,AˆE�I‰I×$Ñ$Ô)Ü7:¸4×;PÑ;PÓ7QˆE�I‰I×$Ñ$Ô4Ø$&ˆDÔ!Ø�	‰	×ÑÖr-   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   rã   r'   Ú
line_countrA   Úfallbackr  r(   r)   )r*   s   "r+   r,   rZ   v  s/   € ÷ gñ g¨ð g¸ð gÈ4ð gÐTWñ gr-   c               óÜ  € ^ RI HpHpHp V ;P                  ^,          un        VR,          pVP                  RRR7       VRV P                   RVP                  4       P                  R4       R2,          pVP                  VR	R
7       TP                  RV'       d   RMR,           V P                  V^,           \        V4      V4       RV n        RV P                   RV^,            RV R2# )zTSave a large paste under ~/.hermes/pastes and return the placeholder for the buffer.)r¹  ÚdatetimerB  ÚpastesT)ÚparentsÚexist_okÚpaste_rû   z%H%M%Sz.txtrÃ  rÄ  z-Collapsed paste #%d: %d lines, %d chars -> %sz (fallback)rl   z[Pasted text #z: u    lines â†’ Ú])r‚   r¹  rþ  rB  Ú_tui_paste_counterÚmkdirrŠ  rÑ  Ú
write_textrX  r‹   Ú_tui_paste_just_collapsed)	rc   rã   rû  rü  r¹  rþ  rB  Ú	paste_dirÚ
paste_files	   &&&$     r+   Ú_tui_collapse_pasteÚCLITuiMixin._tui_collapse_pastev  sà   € ç6Ñ6Ø×Ò 1Õ$ÕØ  8Õ+ˆ	Ø�‰ ¨tˆÔ4Ø 6¨$×*AÑ*AÐ)BÀ!ÀHÇLÁLÃN×D[ÑD[Ð\dÓDeÐCfÐfjÐ!kÕkˆ
Ø×Ñ˜d¨WÐÔ5Ø�‰Ø;×PX¹}Ð^`ÕaØ×#Ñ# Z°!¥^´S¸³YÀ
ô	Lð *.ˆÔ&Ø × 7Ñ 7Ð8¸¸:È½>Ð:JÈ.ÐYcÐXdÐdeÐfÐfr-   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   rã   r'   rû  rA   Úthreshold_keyr(   r  r)   )r*   s   "r+   r,   rZ   „  s*   € ÷ &ñ &¨cð &¸sð &ÐSVð &Ð[_ñ &r-   c                	óâ   € V P                   P                  V^4      pV P                   P                  RR4      pV^ 8„  ;'       d    W$8¬  pV^ 8„  ;'       d    \        V4      V8¬  pT;'       g    T# )é   Úpaste_collapse_char_thresholdiÐ  )Úconfigr0   r‹   )rc   rã   rû  r  Ú	thresholdÚchar_thresholdÚ	lines_hitÚ	chars_hits   &&&&    r+   Ú_tui_paste_over_thresholdÚ%CLITuiMixin._tui_paste_over_threshold„  sh   € Ø—K‘K—O‘O M°1Ó5ˆ	ØŸ™Ÿ™Ð)HÈ$ÓOˆØ ‘M×=Ð= jÑ&=ˆ	Ø" QÑ&×FÐF¬3¨t«9¸Ñ+Fˆ	Ø×%Ð%˜IÐ%r-   c                óŒ  € ^ RI HpHpHpHp \
        P                  ! 4       p\        VP                  ;'       g    R4      pVP                  ;'       g    RP                  RR4      P                  RR4      pV! V4      pV! V4      w  r‰V	'       d   V P                  RR7       V! V4      '       d1   V P                  4       '       d   VP                  P                  4        V'       dí   ^ RIHp
 V
! V4      pVP!                  R4      pVP"                  pV P%                  W‹R	4      '       d™   VP&                  P)                  4       P+                  R
4      '       gj   V P-                  W‹RR7      pVP.                  ^ 8”  d,   VP&                  VP.                  ^,
          ,          R8w  d   RMRpVP1                  Wí,           4       MVP1                  V4       \
        P                  ! 4       V,
          R,          pVR8”  dF   TP3                  RTTV'       d   VP!                  R4      ^,           M^ \4        P6                  4       R# R# )a  Bracketed paste: strip leaked terminal responses, auto-attach a clipboard image only
for image-only/empty gestures (so text pastes and dictation never attach stale images),
and collapse large pastes to a file-reference placeholder, preserving existing text.)Ú,_should_auto_attach_clipboard_image_on_pasteÚ&_strip_leaked_bracketed_paste_wrappersÚ*_strip_leaked_terminal_responses_with_metarB  rl   z
rí  Úz1mouse reports leaked into bracketed paste payload©Úreason)Ú_sanitize_surrogatesÚpaste_collapse_thresholdÚ/F©rü  g     @�@g     @@z Slow bracketed-paste handler: %.1fms to process %d bytes (%d lines) on %s. If the input becomes unresponsive after this, attach this log line to the bug report.N)r‚   r  r  r  rB  rV  Úperf_counterr‹   rÊ  ÚreplaceÚ_recover_terminal_input_modesrõ  rQ  rL  Úagent.message_sanitizationr  r@   rh  r  rã   râ   r  r
  rŸ  r½  Úwarningrã  rä  )rc   r\  r  r  r  rB  Ú_paste_handler_startÚ_paste_raw_sizeÚpasted_textÚ_had_mouse_reportsr  rû  r¡  Úplaceholderr±   Ú_paste_handler_elapsed_mss   &&              r+   Ú_tui_handle_pasteÚCLITuiMixin._tui_handle_paste‹  sÒ  € ÷	ó 	ô  $×0Ò0Ó2ÐÜ˜eŸj™j×.Ð.¨BÓ/ˆà—z‘z×'Ð' R×0Ñ0°¸Ó>×FÑFÀtÈTÓRˆÙ<¸[ÓIˆÙ*TÐU`Ó*aÑ'ˆßØ×.Ñ.Ð6iÐ.ÔjÙ7¸×DÒDÈ×IiÑIi×IkÒIkØ�I‰I× Ñ Ô"ßåGÙ.¨{Ó;ˆKØ$×*Ñ*¨4Ó0ˆJØ×&Ñ&ˆCà×.Ñ.¨{ÐHb×cÒcØŸ™Ÿ™Ó(×3Ñ3°C×8Ò8Ø"×6Ñ6°{ÐY^Ð6Ó_�Ø!$×!4Ñ!4°qÔ!8¸S¿X¹XÀc×FYÑFYÐ\]ÕF]Õ=^ÐbfÔ=f™Ðln�Ø—‘ Õ 4Õ5à—‘ Ô,Ü%)×%6Ò%6Ó%8Ð;OÕ%OÐSYÕ$YÐ!Ø$ uÔ,Ø�N‰Nð@ð *Øß/:�×!Ñ! $Ó'¨!Ö+ÀÜ—‘öñ -r-   c                óÊ  € \         P                  ! 4       V n        ^ RIHpHp V! VP                  4      pV! V4      w  rEV'       d   V P                  RR7       WAP                  8w  d[   \        VP                  \        V4      4      pRV n        WAn        Wan	        \        V4      V n        VP                  R4      V n        R# \        V4      V P                  ,
          p\        V4      V n        V P                  '       g   V P                  '       d'   RV n        RV n        VP                  R4      V n        R# VP                  R4      pW€P                  ,
          p	W€n        V^8„  ;'       g    V	^8¬  p
V P!                  WHR4      '       dX   V
'       dN   VP#                  R	4      '       g5   V P%                  WHRR
7      Vn        \        VP                  4      Vn	        R# R# R# R# )a7  Fallback paste collapse for terminals without bracketed paste.

Either heuristic triggers: many characters added in one event (paste delivered in one
tick), or the newline count jumped by 4+ (terminals that feed characters individually
but batch newlines; Alt+Enter adds 1 newline per event so never trips it).
)r  r  z'mouse reports leaked into prompt bufferr  Trí  NFÚ!paste_collapse_threshold_fallbackr!  r"  )rV  r   rœ  r‚   r  r  rã   r%  rŠ   rŸ  r‹   r  Ú_tui_prev_text_lenr@   Ú_tui_prev_newline_countrî  r  r  r
  )rc   r¡  r  r  rã   r+  rt  Úchars_addedrû  Únewlines_addedÚis_pastes   &&         r+   Ú_tui_on_text_changedÚ CLITuiMixin._tui_on_text_changed¹  s‰  € ô &*§^¢^Ó%5ˆÔ"ßjÙ5°c·h±hÓ?ˆÙ#MÈdÓ#SÑ ˆßØ×.Ñ.Ð6_Ð.Ô`Ø—8‘8ÔÜ˜×,Ñ,¬c°$«iÓ8ˆFØ-1ˆDÔ*ØŒHØ"(ÔÜ&)¨$£iˆDÔ#Ø+/¯:©:°dÓ+;ˆDÔ(ÙÜ˜$“i $×"9Ñ"9Õ9ˆÜ"% d£)ˆÔØ×)×)Ð)¨T×-F×-FÐ-FØ-2ˆDÔ*Ø(-ˆDÔ%Ø+/¯:©:°dÓ+;ˆDÔ(ÙØ—Z‘Z Ó%ˆ
Ø#×&BÑ&BÕBˆØ'1Ô$Ø ‘?×9Ð9 n¸Ñ&9ˆà×*Ñ*¨4Ð=`×aÒaßØ—O‘O C×(Ò(Ø×/Ñ/°È4Ð/ÓPˆCŒHÜ"% c§h¡h£-ˆCÖñ )ñ ñ br-   c                ó^  € ^ RI HpHpHp VP                  P
                  pV! V P                  VP                  V P                  4      w  rgWc8X  d,   VP                  4        V P                  P                  4        MWb8X  d   V P                  W4       VP                  P                  4        R# )u@  Ctrl+S: composer has content â†’ push onto the stash and clear; empty + one stashed â†’
pop it back; empty + several â†’ open the browse panel; panel open â†’ close it.

A stack (not a single slot) is what makes repeated Ctrl+S safe: a second stash never
silently overwrites the first, both stay reachable in the panel.
)ÚACTION_RESTOREDÚACTION_STASHEDÚresolve_ctrl_sN)Úhermes_cli.prompt_stashr:  r;  r<  rQ  rh  r2  rã   ru  ri  rv  r£  rL  )rc   r\  r:  r;  r<  r¡  Úactionr  s   &&      r+   Ú_tui_handle_prompt_stashÚ$CLITuiMixin._tui_handle_prompt_stashà  s   € ÷ 	\Ñ[Ø�i‰i×&Ñ&ˆÙ(¨×);Ñ);¸S¿X¹XÀt×G\ÑG\Ó]‰ˆØÔ#à�I‰IŒKØ×!Ñ!×'Ñ'Õ)ØÔ&Ø×+Ñ+¨EÔ;à�	‰	×ÑÖr-   c                óŒ   € V P                  WP                  P                  4       4       VP                  P	                  4        R# )z9Enter in the browse panel restores the highlighted draft.N)r£  r2  Úrestore_at_cursorrQ  rL  rp  s   &&r+   Ú_tui_handle_stash_panel_restoreÚ+CLITuiMixin._tui_handle_stash_panel_restoreó  s/   € à×'Ñ'¨×/AÑ/A×/SÑ/SÓ/UÔVØ�	‰	×ÑÖr-   c                ód   aa€ SP                   P                  oV P                  SVV3R l4       R# )zCUp: browse history when on the first line, else move the cursor up.c                 ó<   <€ S P                  SP                  R 7      # ©rÂ  )Úauto_upÚarg©r¡  r\  s   €€r+   r  Ú-CLITuiMixin._tui_history_up.<locals>.<lambda>û  s   ø€ ¸¿¹È5Ï9É9¸Ô9Ur-   N©rQ  rh  rñ  rÅ  s   &f@r+   Ú_tui_history_upÚCLITuiMixin._tui_history_upø  s#   ù€ à�i‰i×&Ñ&ˆØ×+Ñ+¨CÕ1UÖVr-   c                	ód   aa€ SP                   P                  oV P                  SVV3R  l4       R# )c                 ó<   <€ S P                  SP                  R 7      # rG  )Ú	auto_downrI  rJ  s   €€r+   r  Ú/CLITuiMixin._tui_history_down.<locals>.<lambda>ÿ  s   ø€ ¸¿¹ÈUÏYÉY¸Ô9Wr-   NrL  rÅ  s   &f@r+   Ú_tui_history_downÚCLITuiMixin._tui_history_downý  s#   ù€ Ø�i‰i×&Ñ&ˆØ×+Ñ+¨CÕ1WÖXr-   c                	ó‚   € ^ RI Hp V P                  '       g   . # V! V P                  V P                  4      pRRV R23.# )r6   )Ú_format_image_attachment_badgeszclass:image-badgerK   )r‚   rV  ru  Ú_image_counter)rc   rV  Úbadgess   &  r+   Ú_tui_image_bar_fragmentsÚ$CLITuiMixin._tui_image_bar_fragments  sD   € Ý7Ø×$×$Ð$ØˆIÙ0°×1FÑ1FÈ×H[ÑH[Ó\ˆØ$¨¨&¨° mÐ4Ð5Ð5r-   c                	ó"   € V P                  4       # rq   )Ú_get_voice_status_fragmentsrþ   s   &r+   Ú_tui_voice_status_fragmentsÚ'CLITuiMixin._tui_voice_status_fragments  s   € Ø×/Ñ/Ó1Ð1r-   c                	ó@   € V P                  4       pV'       d   R V3.# . # )r  )Ú_render_spinner_text)rc   Úspinner_lines   & r+   Ú_tui_spinner_textÚCLITuiMixin._tui_spinner_text  s%   € Ø×0Ñ0Ó2ˆß1=�˜|Ð,Ð-ÐEÀ2ÐEr-   c                	ó"   € V P                  4       # rq   )Ú_spinner_widget_heightrþ   s   &r+   Ú_tui_spinner_heightÚCLITuiMixin._tui_spinner_height  s   € Ø×*Ñ*Ó,Ð,r-   c                	ó"  € V P                   '       gm   V P                  '       g[   V P                  '       gI   V P                  '       g7   V P                  '       g%   V P
                  '       g   V P                  '       d   ^# V P                  4       # )r  )rí   rî   r°   rï   rƒ   rñ   rò   Ú_agent_spacer_heightrþ   s   &r+   Ú_tui_hint_heightÚCLITuiMixin._tui_hint_height  sc   € à××Ð × 2× 2Ð 2°d×6J×6JÐ6JÈd×Nd×NdÐNdØ×(×(Ð(¨D×,?×,?Ð,?À4×CX×CXÐCXÙà×(Ñ(Ó*Ð*r-   c                óô  € RV n         \        P                  ! 4       V n        \        P                  ! 4       V n        \        V RR4      pVe#   RV n        V P                  P                  V4       RV n        RV n	        ^ V n
        ^ RIHp ^ RIHp V! 4       pVP                  4       '       d   V! VP!                  4       4      MRV n        V P$                  P'                  R4      ;'       g    / V n        RV n        RV n        RV n        ^ V n        RV n        ^ V n        RV n        RV n        ^ V n        \<        P>                  ! 4       V n         RV n!        ^ V n"        RV n#        RV n$        RV n%        RV n&        ^ V n'        RV n(        . V n)        ^ V n*        \<        P>                  ! 4       V n+        RV n,        RV n-        RV n.        RV n/        RRuV n0        V n1        RV n2        \<        Pf                  ! 4       V n4        V Ph                  Pk                  4        RV n6        \<        Pf                  ! 4       V n7        RV n8        RV n9        \t        Pv                  P'                  R	4      R
8w  d   V Py                  4        R# R# )zQReset the per-run REPL state (queues, modal states, voice state, config watcher).FÚ_seeded_first_messageN)Úget_config_path)Úfile_signatureÚmcp_serversr  rl   ÚHERMES_DEFER_AGENT_STARTUPÚ1)=rô   r»  ÚQueuer£  rÏ  ra   rm  rÓ  Ú_last_turn_interruptedrU  rˆ  Úhermes_cli.configrn  Úutilsro  ÚexistsÚstatÚ_config_sigr  r0   Ú_config_mcp_serversÚ_last_config_checkrñ   rð   r!  rí   Ú_sudo_deadlineÚ_modal_input_snapshotr°   Ú_approval_deadlinerR  ÚLockÚ_approval_lockrƒ   Ú_slash_confirm_deadlinerò   r"  r0  rî   Ú_secret_deadlinerï   ru  rW  rO  rõ   Ú
_voice_ttsr×   rë   rì   r.  rP  ÚEventrV  rƒ  rZ  Ú_voice_barge_captureÚ_voice_last_tts_textÚ_voice_barge_phaserÚ  ÚenvironÚ_install_tool_callbacks)rc   Ú	_seed_msgÚ_get_config_pathro  Ú	_cfg_paths   &    r+   Ú_tui_init_run_stateÚCLITuiMixin._tui_init_run_state  s(  € à#ˆÔÜ#Ÿkšk›mˆÔÜ %§¢£ˆÔô ˜DÐ"9¸4Ó@ˆ	ØÒ Ø)-ˆDÔ&Ø×Ñ×#Ñ# IÔ.à&+ˆÔ#Ø!ˆÔØ!"ˆÔõ
 	JÝ(Ù$Ó&ˆ	ØMV×M]ÑM]×M_ÒM_©¸	¿¹Ó8HÔ)IÐeiˆÔØ)-¯©¯©¸Ó)G×)MÐ)MÈ2ˆÔ Ø),ˆÔð #ˆÔØ!&ˆÔØ!"ˆÔØˆÔØˆÔØ%)ˆÔ"Ø#ˆÔØ"#ˆÔÜ'ŸnšnÓ.ˆÔð %)ˆÔ!Ø'(ˆÔ$Ø %ˆÔØ%*ˆÔ"Ø!ˆÔØ!ˆÔØ !ˆÔØ!%ˆÔà,.ˆÔØˆÔô %Ÿ>š>Ó+ˆÔØ ˆÔØˆŒØ#ˆÔØ %ˆÔØ8=¸rÐ5ˆÔ Ô 5Ø!&ˆÔÜ(ŸšÓ0ˆÔØ×Ñ× Ñ Ô"Ø#ˆÔÜ$-§O¢OÓ$5ˆÔ!Ø$&ˆÔ!Ø"&ˆÔä�:‰:�>‰>Ð6Ó7¸3Ô>Ø×(Ñ(Ö*ñ ?r-   c                ó  a aaa€ ^ RI HpHpHpHp ^ RIHp \        4       pT! S P                  ;'       g    T4      pVS n	        VP                  VP                  RR7      ! S P                  4       V! VS P                  VR7       VP                  RR4      ! S P                  4       V'       g   V! 4       '       d"   VP                  R4      ! S P                  4       S P                  V4       S P!                  V4       \#        V 3R	 l4      pVP                  R
VR7      ! S P$                  4       VP                  RVR7      ! S P&                  4       VP                  R4      ! S P(                  4       VP                  R4      ! S P*                  4       VP                  R4      ! S P,                  4       VP                  R4      ! S P.                  4       \#        V 3R l4      p	VP                  RV	RR7      ! S P0                  4       VP                  RRV	( R7      ! S P2                  4       VP                  R4      ! S P4                  4       VP                  ! S P7                  4       !  ! S P8                  4       VP                  VP:                  RR7      ! S P<                  4       VP                  R4      ! S P>                  4       VP                  RR4      ! S P@                  4       ^ RI!H"oH#oH$o R F/  p
VP                  V
\#        VV 3R l4      R7      ! VV 3R l4       K1  	  VP                  R\#        VV 3R l4      R7      ! V V3R l4       VP                  R\#        VV 3R l4      R7      ! V V3R l4       V# ) a  Build the prompt_toolkit KeyBindings for the REPL input area.

Registration ORDER matters: for the same key, prompt_toolkit picks the last matching
binding, so the generic handlers (Tab, history Up/Down) are registered before or after
their filtered modal overrides deliberately.
)r·  Ú_bind_prompt_submit_keysÚ _cli_multiline_shortcuts_enabledÚ_preserve_ctrl_enter_newline)ÚKeysT©Úeager)Úmultiline_shortcuts_enabledÚescapeÚenterzc-jc                 ó„  <€ S P                   '       * ;'       d¨    S P                  '       * ;'       d�    S P                  '       * ;'       dv    S P                  '       * ;'       d]    S P                  '       * ;'       dD    S P
                  '       * ;'       d+    S P                  '       * ;'       d    S P                  '       * # rq   )rñ   r°   rƒ   rí   rî   rï   rÄ  rÜ  rþ   s   €r+   r  Ú5CLITuiMixin._tui_build_key_bindings.<locals>.<lambda>€  s»   ø€ ˜×+Ñ+Ô+÷ Qð Q°D×4HÑ4HÔ0H÷ Qð QÐQU×QjÑQjÔMj÷ Qð QØ×$Ñ$Ô$÷Qð QØ-1×-?Ñ-?Ô)?÷Qð QØHL×H^ÑH^ÔD^÷Qð Qà×,Ñ,Ô,÷Qð Qà59×5PÑ5PÔ1PðQr-   Úup©r»  Údownzc-lzc-czc-qzc-dc                 ó¦   <€ \        S P                  ;'       g5    S P                  ;'       g!    S P                  ;'       g    S P                  4      # rq   )r  rî   rí   rƒ   rï   rþ   s   €r+   r  rš  Œ  sI   ø€ ”D˜×+Ñ+÷ 3ð 3¨t×/?Ñ/?÷ 3ð 3À4×C\ÑC\÷ 3ð 3Ø ×2Ñ2ô4r-   ©r»  r•  zc-zzc-vr  )Úmodal_prompt_activeÚopen_monitorÚtoggle_dockc                 ó   <€ S ! S4      '       * # rq   r)   ©r   rc   s   €€r+   r  rš  ˜  s   ø€ Ñ5HÈÓ5NÕ1Nr-   c                ó   <€ S! S4      # rq   r)   )r\  r¡  rc   s   &€€r+   r  rš  ™  s
   ø€ ™l¨4Ô0r-   zc-rc                 ó   <€ S ! S4      '       * # rq   r)   r¤  s   €€r+   r  rš  �  s   ø€ Ñ3FÀtÓ3LÕ/Lr-   c                ó   <€ S! S4      # rq   r)   ©r\  rc   r¢  s   &€€r+   r  rš  ž  ó
   ø€ ™+ dÔ+r-   Úf7c                 ó   <€ S ! S4      '       * # rq   r)   r¤  s   €€r+   r  rš  Ÿ  s   ø€ Ñ2EÀdÓ2KÕ.Kr-   c                ó   <€ S! S4      # rq   r)   r¨  s   &€€r+   r  rš     r©  r-   )zc-tÚf6)%r‚   r·  r�  r‘  r’  Úprompt_toolkit.keysr“  r   r  rŸ  ÚaddÚIgnorerÍ  r©  r  Ú_tui_bind_editor_and_stashÚ_tui_bind_overlay_navigationr	   rM  rS  rþ  rŒ  r‘  rë  rÔ  rÆ  ræ  Ú_tui_voice_record_key_sequencer]  ÚBracketedPaster.  rú  rö  Úhermes_cli.cli_subagent_monitorr   r¡  r¢  )rc   r·  r�  r‘  r’  r“  r1  Ú_multiline_shortcuts_enabledÚ_normal_inputÚ_modal_prompt_activer1   r   r¡  r¢  s   f          @@@r+   Ú_tui_build_key_bindingsÚ#CLITuiMixin._tui_build_key_bindings_  sµ  û€ ÷	*ó 	*õ
 	-Ü‹]ˆÙ'GÈÏÉ×HaÐHaÐWaÓ'bÐ$Ø(DˆÔ%à
�‰ˆt�{‰{ $ˆÔ'¨×(RÑ(RÔSÙ Ø�×&Ñ&ÐD`õ	bà
�‰ˆx˜Ô! $×":Ñ":Ô;÷ (Ñ+G×+IÒ+IØ�F‰F�5ŒM˜$×2Ñ2Ô3à×'Ñ'¨Ô+Ø×)Ñ)¨"Ô-ô "ôQóRˆð 	�‰ˆt˜MˆÔ*¨4×+?Ñ+?Ô@Ø
�‰ˆv˜mˆÔ,¨T×-CÑ-CÔDØ
�‰ˆuŒ�d×-Ñ-Ô.Ø
�‰ˆuŒ�d×-Ñ-Ô.ð 	�‰ˆuŒ�d×-Ñ-Ô.Ø
�‰ˆuŒ�d×-Ñ-Ô.Ü(ô4ó 5Ðð 	�‰ˆxÐ 4¸DˆÔAÀ$×B_ÑB_Ô`Ø
�‰ˆx˜Ð+?Ð*?ˆÔ@À×A_ÑA_Ô`Ø
�‰ˆuŒ�d×-Ñ-Ô.à
�Š�×3Ñ3Ó5Ò6°t×7TÑ7TÔUØ
�‰ˆt×"Ñ"¨$ˆÔ/°×0FÑ0FÔGØ
�‰ˆuŒ�d×-Ñ-Ô.Ø
�‰ˆx˜Ô˜d×4Ñ4Ô5ßbÑbÛ ˆCØ�F‰F�3œyÕ)NÓOˆFÔPÝ0ö2ñ !ð 	�‰ˆuœYÕ'LÓMˆÔNÝ+ô	-à
�‰ˆtœIÕ&KÓLˆÔMÝ+ô	-àˆ	r-   c               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   £  s   € ÷ 8ñ 8°ñ 8r-   c                	óü  a € \        V 3R  l4      pVP                  RVR7      ! VP                  RRVR7      ! S P                  4      4       \        V 3R l4      p\        V 3R l4      pVP                  RVR7      ! S P                  4       VP                  RVR	R
7      ! S P                  4       VP                  RVR	R
7      ! S P
                  4       VP                  RVR	R
7      ! S P                  4       VP                  RVR	R
7      ! VP                  RVR	R
7      ! S P                  4      4       VP                  RVR	R
7      ! S P                  4       VP                  RR	R7      ! S P                  4       R# )c                 óî   <€ S P                   '       * ;'       d]    S P                  '       * ;'       dD    S P                  '       * ;'       d+    S P                  '       * ;'       d    S P                  '       * # rq   )rñ   r°   rí   rî   rï   rþ   s   €r+   r  Ú8CLITuiMixin._tui_bind_editor_and_stash.<locals>.<lambda>§  ss   ø€ ˜×+Ñ+Ô+÷ _ð _°D×4HÑ4HÔ0H÷ _ð _Ø×$Ñ$Ô$÷_ð _Ø-1×-?Ñ-?Ô)?÷_ð _ØHL×H^ÑH^ÔD^ð_r-   zc-grœ  r—  Úgc                 óR  <€ S P                   '       * ;'       d�    S P                  '       * ;'       dv    S P                  '       * ;'       d]    S P                  '       * ;'       dD    S P                  '       * ;'       d+    S P
                  '       * ;'       d    S P                  '       * # rq   )rñ   r°   rí   rî   rï   rƒ   rÄ  rþ   s   €r+   r  r¾  ®  s–   ø€ ˜×+Ñ+Ô+÷ -ð -°D×4HÑ4HÔ0H÷ -ð -ÐQU×QaÑQaÔMa÷ -ð -Ø×&Ñ&Ô&÷-ð -Ø/3×/EÑ/EÔ+E÷-ð -ØNR×NgÑNgÔJg÷-ð -à×,Ñ,Ô,ð-r-   c                 ó|   <€ S P                   P                  ;'       d    \        \        S P                   4      4      # rq   ©r2  Ú
panel_openr  r‹   rþ   s   €r+   r  r¾  ²  s/   ø€ °×0BÑ0B×0MÑ0M×0oÐ0oÔRVÔWZÐ[_×[mÑ[mÓWnÓRoÐ0or-   zc-sr›  TrŸ  r�  r˜  rà  ÚDÚtabr”  N)
r	   r¯  r  r?  r©  r­  rC  r±  rµ  rÀ  )rc   r1  Ú_editor_filterÚ_stash_filterÚ_stash_panel_filters   f&   r+   r±  Ú&CLITuiMixin._tui_bind_editor_and_stash£  sP  ø€ ô #ô_ó`ˆð 	�‰ˆu˜^ˆÔ,Ø�F‰F�8˜S¨ˆFÔ8¸×9XÑ9XÓYô	[ô "ô-ó
ˆô
 (Ô(oÓpÐØ
�‰ˆu˜]ˆÔ+¨D×,IÑ,IÔJØ
�‰ˆtÐ/°tˆÔ<¸T×=\Ñ=\Ô]Ø
�‰ˆvÐ1¸ˆÔ>¸t×?`Ñ?`ÔaØ
�‰ˆwÐ2¸$ˆÔ?À×@dÑ@dÔeØ
�‰ˆsÐ.°dˆÔ;Ø�F‰F�3Ð2¸$ˆFÔ?À×@cÑ@cÓdô	
ð 	�‰ˆxÐ 3¸4ˆÔ@À×AcÑAcÔdØ
�‰ˆu˜DˆÔ! $×"6Ñ"6Ö7r-   c               ó   € V ^8„  d   QhRR/# r.  r)   )r*   s   "r+   r,   rZ   ½  s   € ÷ Ahñ Ah°$ñ Ahr-   c                ó8
  a € \        V 3R l4      pVP                  RVR7      ! S P                  4       VP                  RVR7      ! S P                  4       \        V 3R l4      pVP                  RVR7      ! S P                  4       VP                  RVR7      ! S P
                  4       VP                  RVR7      ! S P                  4       VP                  RVR7      ! S P                  4       VP                  R\        V 3R	 l4      R7      ! S P                  4       VP                  R
VRR7      ! S P                  4       VP                  RVRR7      ! S P                  4       \        ^
4       FF  pV^ 8X  d   ^	MV^,
          pVP                  \        V4      VR7      ! S P                  V4      4       KH  	  \        V 3R l4      p\        V 3R l4      p\        V 3R l4      pVP                  RVR7      ! S P                  4       VP                  RVR7      ! S P                  4       VP                  RVR7      ! S P                  4       VP                  RVR7      ! S P                   4       VP                  RVR7      ! S P"                  4       VP                  RVR7      ! S P$                  4       R V 3R llp	\        V	4      p
\&         F*  pVP                  WºR7      ! S P)                  V4      4       K,  	  VP                  RV
R7      ! S P*                  4       VP                  RVRR7      ! S P,                  4       \        V 3R l4      pVP                  R\        V 3R l4      R7      ! S P.                  4       VP                  RVR7      ! S P0                  4       VP                  RVR7      ! S P2                  4       VP                  RVR7      ! S P4                  4       VP                  RVR7      ! S P6                  4       VP                  RVRR7      ! S P8                  4       \&         F*  pVP                  WÜR7      ! S P;                  V4      4       K,  	  \        ^
4       FF  pV^ 8X  d   ^	MV^,
          pVP                  \        V4      VR7      ! S P=                  V4      4       KH  	  \        ^
4       FF  pV^ 8X  d   ^	MV^,
          pVP                  \        V4      VR7      ! S P?                  V4      4       KH  	  R# )zTClarify / approval / slash-confirm / model picker / command palette navigation keys.c                 ó`   <€ \        S P                  4      ;'       d    S P                  '       * # rq   )r  rñ   rð   rþ   s   €r+   r  Ú:CLITuiMixin._tui_bind_overlay_navigation.<locals>.<lambda>¿  s$   ø€ ¬¨d×.AÑ.AÓ)B×)aÐ)aÈ4×KaÑKaÔGaÐ)ar-   r›  rœ  r�  c                 ó.   <€ \        S P                  4      # rq   )r  rï   rþ   s   €r+   r  rÍ  Â  s   ø€ ¬D°×1GÑ1GÔ,Hr-   ÚleftÚrightÚspacec                 ó¦   <€ \        S P                  4      ;'       d5    S P                  '       * ;'       d    S P                  P                  R 4      # )rb  )r  rñ   rð   r0   rþ   s   €r+   r  rÍ  É  sH   ø€ ”D˜×,Ñ,Ó-÷ 8ð 8°d×6LÑ6LÔ2L÷ 8ð 8Ø×#Ñ#×'Ñ'¨Ó7ð8r-   rÅ  TrŸ  zs-tabc                 ó.   <€ \        S P                  4      # rq   )r  r°   rþ   s   €r+   r  rÍ  Ö  s   ø€ ¤d¨4×+?Ñ+?Ô&@r-   c                 ó.   <€ \        S P                  4      # rq   )r  rƒ   rþ   s   €r+   r  rÍ  ×  s   ø€ ¬4°×0IÑ0IÔ+Jr-   c                 ó.   <€ \        S P                  4      # rq   )r  rÄ  rþ   s   €r+   r  rÍ  Ø  s   ø€ ¤D¨×)AÑ)AÔ$Br-   c               ó   € V ^8„  d   QhRR/# r  r)   )r*   s   "r+   r,   Ú>CLITuiMixin._tui_bind_overlay_navigation.<locals>.__annotate__à  s   € ÷ 	;ñ 	;¨Tñ 	;r-   c                 ój   <€ SP                   p \        V 4      ;'       d    V P                  R 4      R8H  # )r¤  r®  )rÄ  r  r0   )r&  rc   s    €r+   Ú_model_picker_typing_activeÚMCLITuiMixin._tui_bind_overlay_navigation.<locals>._model_picker_typing_activeà  s-   ø€ à×)Ñ)ˆBÜ˜“8×:Ð: §¡ w£°7Ñ :Ð:r-   Ú	backspacer—  c                 ó.   <€ \        S P                  4      # rq   )r  rÜ  rþ   s   €r+   r  rÍ  ë  s   ø€ ¤T¨$×*EÑ*EÔ%Fr-   zc-pc                 ó„  <€ S P                   '       * ;'       d¨    S P                  '       * ;'       d�    S P                  '       * ;'       dv    S P                  '       * ;'       d]    S P                  '       * ;'       dD    S P
                  '       * ;'       d+    S P                  '       * ;'       d    S P                  '       * # rq   )rÜ  rÄ  rñ   r°   rƒ   rí   rî   rï   rþ   s   €r+   r  rÍ  í  s»   ø€ ˜×3Ñ3Ô3÷ Fð F¸D×<TÑ<TÔ8T÷ Fð FÐ]a×]pÑ]pÔYp÷ Fð FØ×(Ñ(Ô(÷Fð FØ15×1JÑ1JÔ-J÷Fð FØSW×ScÑScÔOc÷Fð Fà×&Ñ&Ô&÷Fð Fà/3×/EÑ/EÔ+EðFr-   r˜  N) r	   r¯  rV  rS  r  r  r  rP  r_  rb  r—  r'   r›  rƒ  r€  r}  rz  r"  r  Ú_TYPING_CHARSr8  r/  r+  rw  rl  ri  rp  re  rs  r?  rH  rM  )rc   r1  Ú_clarify_navÚ_connection_navÚ_numÚ_idxÚ	_approvalÚ_slash_confirmÚ_pickerrÙ  Ú_picker_typingÚ_chÚ_paletteÚ_pchs   f&            r+   r²  Ú(CLITuiMixin._tui_bind_overlay_navigation½  s  ø€ ä Ô!aÓbˆØ
�‰ˆt˜LˆÔ)¨$×*>Ñ*>Ô?Ø
�‰ˆv˜lˆÔ+¨D×,BÑ,BÔCÜ#Ô$HÓIˆØ
�‰ˆt˜OˆÔ,¨T×-DÑ-DÔEØ
�‰ˆv˜oˆÔ.¨t×/HÑ/HÔIØ
�‰ˆv˜oˆÔ.¨t×/HÑ/HÔIØ
�‰ˆw˜ˆÔ/°×0IÑ0IÔJà
�‰ˆwœyô8ó 
ˆô 	ð ×#Ñ#ô	%ð 	�‰ˆu˜\°ˆÔ6°t×7RÑ7RÔSØ
�‰ˆw˜|°4ˆÔ8¸×9XÑ9XÔYä˜"–IˆDØ œ	‘1 t¨a¥xˆDØ�F‰F”3�t“9 \ˆFÔ2°4×3XÑ3XÐY]Ó3^Ö_ñ ô Ô@ÓAˆ	Ü"Ô#JÓKˆÜÔBÓCˆØ
�‰ˆt˜IˆÔ& t×'<Ñ'<Ô=Ø
�‰ˆv˜iˆÔ(¨×)@Ñ)@ÔAØ
�‰ˆt˜NˆÔ+¨D×,FÑ,FÔGØ
�‰ˆv˜nˆÔ-¨d×.JÑ.JÔKØ
�‰ˆt˜GˆÔ$ T×%>Ñ%>Ô?Ø
�‰ˆv˜gˆÔ& t×'BÑ'BÔC÷	;ð 	;ô
 #Ð#>Ó?ˆß ˆCØ�F‰F�3ˆFÔ.¨t×/WÑ/WÐX[Ó/\Ö]ñ !à
�‰ˆ{ >ˆÔ2°4×3ZÑ3ZÔ[Ø
�‰ˆx ¨tˆÔ4°T×5RÑ5RÔSäÔFÓGˆØ
�‰ˆuœYôFó
ˆô 	ð ×)Ñ)ô		+ð
 	�‰ˆt˜HˆÔ% d×&BÑ&BÔCØ
�‰ˆv˜hˆÔ'¨×(FÑ(FÔGØ
�‰ˆw˜xˆÔ(¨×)HÑ)HÔIØ
�‰ˆ{ 8ˆÔ,¨T×-PÑ-PÔQØ
�‰ˆx °ˆÔ5°d×6VÑ6VÔWß!ˆDØ�F‰F�4ˆFÔ)¨$×*MÑ*MÈdÓ*SÖTñ "ô ˜"–IˆDØ œ	‘1 t¨a¥xˆDØ�F‰F”3�t“9 YˆFÔ/°×0VÑ0VÐW[Ó0\Ö]ñ ô ˜"–IˆDØ œ	‘1 t¨a¥xˆDØ�F‰F”3�t“9 ^ˆFÔ4°T×5`Ñ5`ÐaeÓ5fÖgó r-   c               ó   € V ^8„  d   QhRR/# )r%   r(   r’  r)   )r*   s   "r+   r,   rZ      s   € ÷ ,.ñ ,.°ñ ,.r-   c                ó¤  € ^ RI Hp Rp ^ RIHp ^ RIHpHpHp V! V! 4       4      pV! V4      p\        V\        4      '       db   VP                  4       P                  4       P                  R^4      ^ ,          P                  4       R9   d   VR8X  d   VP                  RV4       T P                  T4       X! T4      #   \         d    Rp L(i ; i)	u6  Resolve the push-to-talk key (voice.record_key, default Ctrl+B) to a prompt_toolkit
key sequence and cache the UI label.

Config spellings (ctrl/control/alt/option/opt) are normalized to c-x / a-x so the same
value binds identically in TUI and CLI. super/win/windows silently fall back to the
default (prompt_toolkit has no super modifier) â€” warn so users notice the split. The
label cache uses the same ``_raw_key`` that drives the binding, so status/placeholder/
recording-hint renders can never drift from the live key even if the config is edited
mid-session.
r†  zctrl+b)Úload_config)Ú-normalize_voice_record_key_for_prompt_toolkitÚpt_key_to_sequenceÚvoice_record_key_from_configÚ+zc-bzˆvoice.record_key %r uses a TUI-only modifier (super/win); CLI fell back to Ctrl+B. Use ctrl+<key> or alt+<key> for cross-runtime parity.>   ÚwinÚsuperÚwindows)r‚   rB  ru  rí  Úhermes_cli.voicerî  rï  rð  r‘  r'   râ   ÚlowerrÍ   r'  r=   Úset_voice_record_key_cache)rc   rB  Ú_raw_keyrí  rî  rï  rð  Ú
_voice_keys   &       r+   r³  Ú*CLITuiMixin._tui_voice_record_key_sequence   sÈ   € õ 	ð $ˆð	Ý5÷.ñ .ñ 4±K³MÓBˆHÙFÀxÓPˆJä˜8¤S×)Ò)Ø—N‘NÓ$×*Ñ*Ó,×2Ñ2°3¸Ó:¸1Õ=×CÑCÓEÐIdÔdØ %Ô'Ø—‘ð,ð ô	ð 	×'Ñ'¨Ô1Ù! *Ó-Ð-øô ô 	ØŠJð	ús   ŠBB? Â?CÃCc               ó   € V ^8„  d   QhRR/# )r%   r%  r'   r)   )r*   s   "r+   r,   rZ   .  s   € ÷ Mñ M¸Cñ Mr-   c                ód   a a€ \        \        \        V4      RR7      \        V V3R l4      R7      # )zHWrapped, auto-sized panel shown while ``self.<state_attr>`` is not None.T©Ú
wrap_linesc                 ó    <€ \        S S4      R J# rq   )ra   )rc   r%  s   €€r+   r  Ú1CLITuiMixin._tui_overlay_widget.<locals>.<lambda>2  s   ø€ ¤W¨T°:Ó%>ÀdÑ%Jr-   rœ  )r   r   r   r	   )rc   Úfragments_fnr%  s   f&fr+   Ú_tui_overlay_widgetÚCLITuiMixin._tui_overlay_widget.  s+   ù€ ä#ÜÔ'¨Ó5À$ÔGÜÕJÓKôMð 	Mr-   c                óp  a€ V o^ RI Hp V! V 4       V P                  4       p\        \	        V P
                  4      V P                  RR7      p\        \	        V P                  4      V P                  \        P                  R7      V n        \        \	        V P                  4      V P                  R7      pV P                  V P                  R4      pV P                  V P                   R4      pV P                  V P"                  R4      pV P                  V P$                  R	4      p	V P                  V P&                  R
4      p
V P                  V P(                  R4      pV P                  V P*                  R4      pV P                  V P,                  R4      p\        RV3R lRR7      p\        RV3R lRR7      p\/        V RR4      '       d   ^ RIHp V! W4      w  rï\        \	        V P4                  4      \7        V3R l4      R7      p\9        \        \	        V P:                  4      ^R7      \7        V3R l4      R7      p\9        \        \	        V3R l4      ^RR7      \7        V3R l4      R7      p\9        \        \	        V P<                  4      RR7      \7        V3R l4      R7      V n        V PA                  WR7       \C        \E        V PG                  VVV	V
VVVVVVVVVVVV\I        ^^R7      R 7      4      4      pV PK                  4        V\L        PN                  ! V PQ                  4       4      3# )!zQBuild the TUI widgets, Layout and Style; registers wrapper keybindings on ``kb``.)Úinstall_dockT)Úcontentr=  rþ  )r  r=  Úalign)r  r=  rñ   rí   rî   rï   r°   rƒ   rÄ  rÜ  u   â”€c                 ó&   <€ S P                  R 4      # )r\   ©rd   ©Úcli_refs   €r+   r  Ú/CLITuiMixin._tui_build_layout.<locals>.<lambda>V  s   ø€  w×'EÑ'EÀeÔ'Lr-   zclass:input-rule)Úcharr=  r¢   c                 ó&   <€ S P                  R 4      # )r_   r	  r
  s   €r+   r  r  Y  s   ø€  w×'EÑ'EÀhÔ'Or-   rA  F)Úmodern_input_rulesc                 ó.   <€ \        S P                  4      # rq   )r  ru  r
  s   €r+   r  r  `  s   ø€ ¤T¨'×*BÑ*BÔ%Cr-   r<  c                 ó   <€ S P                   # rq   )rõ   r
  s   €r+   r  r  c  s   ø€  W×%8Ò%8r-   rœ  c                 ó$   <€ S P                  4       # rq   )Ú_get_status_bar_fragmentsr
  s   €r+   r  r  f  s   ø€ °W×5VÑ5VÔ5Xr-   c                 óP   <€ S P                   ;'       d    \        S R R4      '       * # )r]   F)Ú_status_bar_visiblera   r
  s   €r+   r  r  n  s.   ø€ ˜×3Ñ3÷ Wð WÜ Ð)NÐPUÓVÔVðWr-   rý  c                 ó|   <€ S P                   P                  ;'       d    \        \        S P                   4      4      # rq   rÂ  r
  s   €r+   r  r  s  s-   ø€  W×%:Ñ%:×%EÑ%E×%jÐ%jÌ$ÌsÐSZ×ShÑShÓOiÓJjÐ%jr-   )r2  )Ú
max_heightrž  )rD  rE  r5  rF  r6  rG  r7  r8  r9  rH  rI  rJ  rK  r2  rL  rM  rN  ))rµ  r  Ú_tui_build_input_arear   r   rb  rf  Ú_pet_fragmentsÚ_pet_widget_heightr   ÚRIGHTr>  r)  rj  r  r‰  rö  r   r  rº   r£   r×  rá  ra   Úhermes_cli.cli_modern_layoutr  rY  r	   r   r]  r<  r?  r3  r   r   rQ  r   Ú_tui_set_base_styler"  r#  r  )rc   r1  r  r2  r9  rH  rG  rD  rE  r5  rF  r6  r7  r8  rJ  rL  r  rK  rM  rI  Úlayoutr  s   &&                   @r+   Ú_tui_build_layoutÚCLITuiMixin._tui_build_layout4  s  ø€ àˆÝ@Ù�TÔØ×/Ñ/Ó1ˆ
ÜÜ(¨×)?Ñ)?Ó@Ø×+Ñ+Øôˆô "Ü(¨×)<Ñ)<Ó=Ø×*Ñ*Ü×#Ñ#ô%ˆÔô Ô 4°T×5HÑ5HÓ IÐRV×RgÑRgÔhˆØ×1Ñ1°$×2UÑ2UÐWgÓhˆØ×.Ñ.¨t×/OÑ/OÐQ^Ó_ˆØ×0Ñ0°×1SÑ1SÐUdÓeˆØ ×4Ñ4Ø×2Ñ2Ð4GóIÐà×2Ñ2°4×3WÑ3WÐYjÓkˆØ#×7Ñ7Ø×5Ñ5Ð7Mó OÐà"×6Ñ6Ø×4Ñ4Ð6KóMÐà!%×!9Ñ!9Ø×7Ñ7Ð9Qó"SÐô  ØÔLÐTfô
ˆô  ØÔOÐWiô
ˆô �4Ð)¨5×1Ò1ÝGÙ-?ÀÓ-IÑ*ˆNÜÜ(¨×)FÑ)FÓGÜÔCÓDôFˆ	ô 0ÜÔ'¨×(HÑ(HÓIÐRSÔTÜÔ8Ó9ô;Ðô *ÜÜ,Ô-XÓYØð
 !ô"ô ôWóXôYˆ
ô $8ÜÔ'¨×(OÑ(OÓPÐ]bÔcÜÔjÓkô$
ˆÔ ð 	×,Ñ,¨RÐ,ÔGÜœ D×$CÑ$CØ#Ø'Ø/Ø+Ø!5Ø)Ø 3Ø#9Ø)ØØ!Ø)ØØ!Ø)Ø-Ü,¸È!ÔLð# %Dó %Nó Oó Pˆð$ 	× Ñ Ô"Ø”w×(Ò(¨×)CÑ)CÓ)EÓFÐFÐFr-   c                ó  a aaa	€ ^ RI Ho ^ RIHp ^ RIHp S oV3R lp\        S 4      p\        \        ^^^R7      VRRR\        V3R l4      \        \        S P                  4      4      V! V4      R\        V! 4       VR	7      R
7
      o	RS	P                  n        VV	V 3R lpVS	P                   n        ^ S n        ^ S n        ^ S n        RS n        RS n        S	P                  ;P.                  S P0                  ,          un        S	P2                  P4                  P7                  \9        \;        4       \        V3R l4      R7      4        ! R R\<        4      pS	P2                  P4                  P7                  V! S P>                  4      4       S	# )znMulti-line prompt TextArea with slash completion, paste-collapse tracking and
placeholder/password processors.)Ú_estimate_tui_input_height)ÚAutoSuggestFromHistory)ÚThreadedCompleterc                 ó$   <€ S P                  4       # rq   )rö   r
  s   €r+   Ú
get_promptÚ5CLITuiMixin._tui_build_input_area.<locals>.get_prompt“  s   ø€ Ø×4Ñ4Ó6Ð6r-   )rŠ   rˆ   Ú	preferredzclass:input-areaTc                 ó.   <€ \        S P                  4      # rq   )r  r"  r
  s   €r+   r  Ú3CLITuiMixin._tui_build_input_area.<locals>.<lambda>�  s   ø€ ¬¨W×-JÑ-JÔ(Kr-   )Úhistory_suggestÚ	completer)
r=  rù  r¢   Ú	multilinerþ  Ú	read_onlyÚhistoryr,  Úcomplete_while_typingÚauto_suggestz.mdc                 ó\  <€  ^ RI Hp  SP                  P                  p V ! 4       P                  P                  4       P                  pS! VP                  SP                  4       V4      #   \         d$    \        P                  ! R4      P                  p LOi ; i  \         d     ^# i ; i)r6   r�  )r½  rP   )r“  rŽ  ÚbufferÚdocumentr”  r•  Úcolumnsr=   rQ   rR   rS   rÿ   )rŽ  ÚdocÚterminal_columnsr"  r2  rc   s      €€€r+   Ú_input_heightÚ8CLITuiMixin._tui_build_input_area.<locals>._input_heightª  s›   ø€ ð	Ý>Ø ×'Ñ'×0Ñ0�ðRÙ'.£y×'7Ñ'7×'@Ñ'@Ó'B×'JÑ'JÐ$ñ 2°#·)±)¸T×=VÑ=VÓ=XÐZjÓkÐkøô !ô RÜ'-×'?Ò'?ÀÓ'I×'QÑ'QÒ$ðRûô ô Úðús4   ƒB  )A+ Á	!B Á++BÂB ÂBÂB ÂB+Â*B+Fc                 ó   <€ \        S P                  4      ;'       dh    S P                  P                  R 4      ;'       g    / P                  R4      R8g  ;'       d)    S P                  P                  R4      '       * ;'       gK    \        S P                  4      ;'       g.    \        S P                  4      ;'       d    S P                  4       # )rî  rï  rð  rë  )r  rí   r0   rî   rï   Ú"_connection_active_field_is_secretr
  s   €r+   r  r*  Â  sÄ   ø€ ¤d¨7×+>Ñ+>Ó&?÷ 'Tð 'TØ+2×+>Ñ+>×+BÑ+BÀ<Ó+P×+VÐ+VÐTV×*[Ñ*[Ð\bÓ*cÐgsÑ*s÷'Tð 'Tà.5×.AÑ.A×.EÑ.EÀlÓ.SÔ*S÷&Sð &Sô !% W×%:Ñ%:Ó ;÷&Sð &Sô "& g×&?Ñ&?Ó!@÷ "Rð "RØ%,×%OÑ%OÓ%Qð&Sr-   rœ  c                  ó&   € ] tR tRtRtR tR tRtR# )Ú@CLITuiMixin._tui_build_input_area.<locals>._PlaceholderProcessoriÉ  z?Render grayed-out placeholder text inside the input when empty.c                	ó   € Wn         R # rq   ©Ú	_get_text)rc   Úget_texts   &&r+   Ú__init__ÚICLITuiMixin._tui_build_input_area.<locals>._PlaceholderProcessor.__init__Ë  s   € Ø!)–r-   c                	óø   € VP                   P                  '       gJ   VP                  ^ 8X  d9   V P                  4       pV'       d!   \	        VP
                  RV3.,           R7      # \	        VP
                  R7      # )r6   zclass:placeholder)Ú	fragments)r4  rã   Úlinenor@  r   rE  )rc   Útirã   s   && r+   Úapply_transformationÚUCLITuiMixin._tui_build_input_area.<locals>._PlaceholderProcessor.apply_transformationÎ  sX   € Ø—{‘{×'×'Ð'¨B¯I©I¸¬NØŸ>™>Ó+�Dßä-¸¿¹ÐI\Ð^bÐHcÐGdÕ8dÔeÐeÜ%°·±Ô=Ð=r-   r?  N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB  rH  Ú__static_attributes__r)   r-   r+   Ú_PlaceholderProcessorr=  É  s   † ÙQò*ö>r-   rP  ) r‚   r"  Úprompt_toolkit.auto_suggestr#  Úprompt_toolkit.completionr$  r   r   r   r	   r
   r'   Ú_history_filer   r3  Útempfile_suffixÚwindowr=  r  r2  r3  r  rî  Úon_text_changedr7  ÚcontrolÚinput_processorsr‡   r   r   r   r5  )
rc   r#  r$  r&  Ú
_completerr8  rP  r"  r  r2  s
   f      @@@r+   r  Ú!CLITuiMixin._tui_build_input_area‹  s[  û€ õ 	3ÝFÝ?Øˆõ	7ô )¨Ó.ˆ
ÜÜ ¨°QÔ7ØØ$ØØÜÔ KÓLÜ¤ D×$6Ñ$6Ó 7Ó8ñ (¨
Ó3Ø"&Ü0ÑAWÓAYÐeoÔpô
ˆ
ð" -2ˆ
×ÑÔ)÷	ð $1ˆ
×ÑÔ à"#ˆÔØ"#ˆÔØ'(ˆÔ$Ø).ˆÔ&Ø$)ˆÔ!Ø×Ñ×)Ò)¨T×-FÑ-FÕFÕ)à×Ñ×+Ñ+×2Ñ2Ô3GÜÓÜô Só Tô4Uô 	Vô	>¤Iô 	>ð 	×Ñ×+Ñ+×2Ñ2Ñ3HÈ×IcÑIcÓ3dÔeØÐr-   c                ó  € / RRbRRbRRbRRbRRbRR	bR
RbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRb/ RRbR R!bR"R#bR$R%bR&RbR'R(bR)R*bR+R,bR-R(bR.R/bR0R1bR2RbR3R4bR5RbR6R4bR7R8bR9RbCR:R;R<R*R=R>R?R,R@R(RARBRCRDRERFRGRHRIR/
CV n         RJ# )KzUPopulate ``self._tui_style_base`` (skin-aware defaults the style dict is built from).z
input-arearl   r,  z#888888 italicrù  zprompt-workingr˜  z
status-barzbg:#1a1a2e #C0C0C0zstatus-bar-strongzbg:#1a1a2e #FFD700 boldzstatus-bar-dimzbg:#1a1a2e #8B8682zstatus-bar-goodzbg:#1a1a2e #8FBC8F boldzstatus-bar-warnzstatus-bar-badzbg:#1a1a2e #FF8C00 boldzstatus-bar-criticalzbg:#1a1a2e #FF6B6B boldzstatus-bar-yolozbg:#1a1a2e #FF4444 boldzstatus-bar-session-titlezbg:#FFD700 #1a1a2e boldz
input-rulez#CD7F32zimage-badgez#87CEEB boldzcompletion-menuzbg:#1a1a2e #FFF8DCzcompletion-menu.completionz"completion-menu.completion.currentzbg:#333355 #FFD700zcompletion-menu.meta.completionzbg:#1a1a2e #888888z'completion-menu.meta.completion.currentzbg:#333355 #FFBF00zclarify-borderzclarify-titlez#FFD700 boldzclarify-questionz#FFF8DC boldzclarify-choicez#AAAAAAzclarify-selectedzclarify-active-otherz#FFD700 italiczclarify-answerz#98FB98zclarify-countdownzsudo-promptz#FF6B6B boldzsudo-borderz
sudo-titlez	sudo-textz#FFF8DCzapproval-borderzapproval-titlez#FF8C00 boldzapproval-desczapproval-cmdz#AAAAAA italiczapproval-choicezapproval-selectedzvoice-promptz#87CEEBzvoice-recordingz#FF4444 boldzvoice-processingz#FFA500 italiczvoice-statuszbg:#1a1a2e #87CEEBzvoice-status-recordingN)r  rþ   s   &r+   r  ÚCLITuiMixin._tui_set_base_styleÙ  s#  € ð. Að ˜"ð. Að Ð+ð	. Að
 �bð. Að Ð.ð. Að Ð$ð. Að Ð.ð. Að  Ð!:ð. Að Ð2ð. Að Ð8ð. Að Ð8ð. Að Ð7ð. Að "Ð#<ð. Að Ð8ð. Að  'Ð(Að!. Að" ˜)ð#. Að$ ˜>ð%. Að& Ð3ñ'. Að( )Ð*>ð). Að* 1Ð2Fð+. Að, .Ð/Cð-. Að. 6Ð7Kð/. Að0 ˜ið1. Að2 ˜^ð3. Að4  ð5. Að6 ˜ið7. Að8  ð9. Að: #Ð$4ð;. Að< ˜ið=. Að>   ð?. Að@ ˜>ðA. AðB ˜9ðC. AðD ˜.ðE. AðF ˜ðG. AðH ˜yñI. AðJ ˜nØ˜^ØÐ,Ø˜yØ Ø˜IØ˜~ØÐ 0ØÐ0Ø$Ð&?ñ]. AˆÖr-   )7rô   r~  r€  r°   ru  r!  rð   rê  rñ  rñ   r"  rò   r0  rz  ry  rï   rê  rW  rÏ  r{  rˆ  rt  r}  r£  r>  r‚  rî   rm  rU  rî  r�  rƒ   r?  r|  rí   rœ  rŸ  r  r  r3  r2  r  r…  r‡  rP  r†  r.  rO  rõ   rì   r×   rë   rƒ  rV  rZ  rq   ))rí   r|  zcli.tui.hint_sudo)rî   r‚  zcli.tui.hint_secret)r°   r~  zcli.tui.hint_approval)rƒ   r�  zcli.tui.hint_slash_confirm)urJ  rK  rL  rM  rN  rd   r£   rº   rÓ   rÚ   rö   rÿ   r  r%  r+  r3  rQ  rZ  r‰  r¡  r×  rá  rè  rö  r   r  r  r  r)  r5  r<  r]  rd  rk  rq  rx  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"  Ústaticmethodr'  r+  r/  r8  r?  rH  rM  rP  rS  rV  r[  r_  rb  re  ri  rl  rp  rs  rw  rz  r}  r€  rƒ  r‰  r–  r©  r¡  r¢  rž  rä  rå  r
  r  r.  r7  r?  rC  rM  rS  rY  r]  rb  rf  rj  r�  r¹  r±  r²  r³  r  r  r  r  rO  r)   r-   r+   rV   rV   \   sÂ  † Ù_÷Eò)òVRõhõ:Pò%*õNMõõ:õõið/>ð
 ð/>ð "ð/>ð !ð/>ð  $ð/>ð ÷/>òb ò"`òD,ò\7Ròrh÷ ò `ò,
WòKð<Ðð 	Ð.ØÐ0ØÐ,ØÐ:ØÐ4ð!Ðò!òF&@òPò7õrõ"õõò+ò6+ò"õ.2òòòò
ò#ò*ò ò"#ò&"ò$ò.ò#ò#ò"ò
/ò
9õò.-ò,ò#òò #ð
 ô!ó ð!òò#õõòòò#ò#ò#õ
#ò/ò0ò#ò#ò#òòòò#ò#ò#ò#ò=ò0ò7*õr÷:EõN=õ~õ@	õgõ&ò,ò\%0òNò&ò
Wò
Yò6ò2òFò-ò+òC+òJBõH8õ4AhõF,.õ\MòUGònLö\0Ar-   rV   )DrN  Ú
__future__r   r�  rò  rÚ  r»  rQ   Ústringrã  rR  rV  Ú
agent.i18nr   Úagent.interrupt_compatr   Úhermes_cli.commands_completionr   r   Úpathlibr   Úprompt_toolkit.filtersr	   Úprompt_toolkit.historyr
   Úprompt_toolkit.key_bindingr   Úprompt_toolkit.layoutr   r   r   r   r   Úprompt_toolkit.layout.dimensionr   Úprompt_toolkit.layout.menusr   Ú prompt_toolkit.layout.processorsr   r   r   r   Úprompt_toolkit.stylesr   r"  Úprompt_toolkit.widgetsr   Útypingr   Úhermes_cli.cli_footer_splitr   Úhermes_cli.cli_panelr   Úhermes_cli.cli_tui_wrapr   r   r‰   r   ÚdigitsÚascii_lettersrÞ  r/   r2   r>   rF   rL   rT   rV   r)   r-   r+   Ú<module>rs     sç   ðñ`õ #ã Û Û 	Û Û Û Û 
Û Û å Ý 9ß WÝ Ý ,Ý .Ý 2÷õ õ 6Ý 7÷ó õ
 3Ý +Ý å 3Ý 'ß Dð Ð à"Ð Ø—‘ × 4Ñ 4Õ4°xÕ?€ð Ð#ØÐ)ØÐ'Ø
Ð#Ø
Ð#ð%Ð õ%õõTõ
=õ
5÷m"Aó m"Ar-   