§
    ‰eîiZ   ã                   ó~   — d Z ddlZddlZddlZddlmZmZmZ ddl	m
Z
 ddlmZ d„ Zddeded	efd
„Zdeded	efd„ZdS )a2  Interactive prompt callbacks for terminal_tool integration.

These bridge terminal_tool's interactive prompts (clarify, sudo, approval)
into prompt_toolkit's event loop. Each function takes the HermesCLI instance
as its first argument and uses its state (queues, app reference) to coordinate
with the TUI.
é    N)ÚcprintÚ_DIMÚ_RST)Úsave_env_value_secure)Údisplay_hermes_homec                 ó:  — ddl m} |                     di ¦  «                             dd¦  «        }t          j        ¦   «         }| }||s|ng d|dœ| _        t          j        ¦   «         |z   | _        || _	        t          | d¦  «        r | j        r| j                             ¦   «          	 	 |                     d	¬
¦  «        }d| _        |S # t          j        $ rV | j        t          j        ¦   «         z
  }|dk    rY n7t          | d¦  «        r | j        r| j                             ¦   «          Y nw xY wŒ‰d| _        d| _	        d| _        t          | d¦  «        r | j        r| j                             ¦   «          t          dt          › d|› dt           › �¦  «         	 dS )z¸Prompt for clarifying question through the TUI.

    Sets up the interactive selection UI, then blocks until the user
    responds. Returns the user's choice or a timeout message.
    r   ©Ú
CLI_CONFIGÚclarifyÚtimeoutéx   )ÚquestionÚchoicesÚselectedÚresponse_queueÚ_appTé   ©r   NFÚ
z(clarify timed out after u   s â€” agent will decide)zrThe user did not provide a response within the time limit. Use your best judgement to make the choice and proceed.)Úclir
   ÚgetÚqueueÚQueueÚ_clarify_stateÚ_timeÚ	monotonicÚ_clarify_deadlineÚ_clarify_freetextÚhasattrr   Ú
invalidateÚEmptyr   r   r   )	r   r   r   r
   r   r   Úis_open_endedÚresultÚ	remainings	            ú6/home/div/.hermes/hermes-agent/hermes_cli/callbacks.pyÚclarify_callbackr&      sã  € ð ÐÐÐÐÐà�nŠn˜Y¨Ñ+Ô+×/Ò/°	¸3Ñ?Ô?€GÝ”[‘]”]€NØ�K€Mð Ø"/Ð7�7�7°RØØ(ð	ð €CÔõ "œOÑ-Ô-°Ñ7€CÔØ)€CÔåˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐð
&ð		&Ø#×'Ò'°Ð'Ñ2Ô2ˆFØ$%ˆCÔ!ØˆMøÝŒ{ð 	&ð 	&ð 	&ØÔ-µ´Ñ0AÔ0AÑAˆIØ˜AŠ~ˆ~Ø�Ý�s˜FÑ#Ô#ð &¨¬ð &Ø”×#Ò#Ñ%Ô%Ð%øøð	&øøøð
&ð €CÔØ!€CÔØ€CÔÝˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐÝ
ÐV•ÐVÐV¨wÐVÐVÕPTÐVÐVÑWÔWÐWð	Bðð s   Â+C
 Ã
0D/Ã<0D/Ä.D/Úvar_nameÚpromptÚreturnc           	      óÔ  — t          | dd¦  «        sÕt          | d¦  «        sd| _        t          | d¦  «        sd| _        	 t	          j        |› d�¦  «        }n# t
          t          f$ r d}Y nw xY w|s(t          dt          › d	t          › �¦  «         d
d|dd
ddœS t          ||¦  «        }t          ¦   «         }t          dt          › d|› d|› t          › �¦  «         i |¥dddœ¥S d}t          j        ¦   «         }|||pi |dœ| _        t          j        ¦   «         |z   | _        t          | d¦  «        r&	 |                      ¦   «          nW# t"          $ r Y nKw xY wt          | d¦  «        r7| j        r0	 | j        j                             ¦   «          n# t"          $ r Y nw xY wt          | d¦  «        r | j        r| j                             ¦   «          	 	 |                     d¬¦  «        }d| _        d| _        t          | d¦  «        r | j        r| j                             ¦   «          |s(t          dt          › d	t          › �¦  «         d
d|dd
ddœS t          ||¦  «        }t          ¦   «         }t          dt          › d|› d|› t          › �¦  «         i |¥dddœ¥S # t          j        $ rV | j        t          j        ¦   «         z
  }	|	dk    rY n8t          | d¦  «        r | j        r| j                             ¦   «          Y nw xY w�Œ4d| _        d| _        t          | d¦  «        r&	 |                      ¦   «          nW# t"          $ r Y nKw xY wt          | d¦  «        r7| j        r0	 | j        j                             ¦   «          n# t"          $ r Y nw xY wt          | d¦  «        r | j        r| j                             ¦   «          t          dt          › dt          › �¦  «         d
d|dd
ddœS )zåPrompt for a secret value through the TUI (e.g. API keys for skills).

    Returns a dict with keys: success, stored_as, validated, skipped, message.
    The secret is stored in ~/.hermes/.env and never exposed to the model.
    r   NÚ_secret_stateÚ_secret_deadliner   z' (hidden, ESC or empty Enter to skip): Ú r   u     â�­ Secret entry skippedTÚ	cancelledFzSecret setup was skipped.)ÚsuccessÚreasonÚ	stored_asÚ	validatedÚskippedÚmessageu     âœ“ Stored secret in z	/.env as zFSecret stored securely. The secret value was not exposed to the model.)r3   r4   r   )r'   r(   Úmetadatar   Ú_clear_secret_input_bufferr   r   u*     â�± Timeout â€” secret capture cancelledr   z'Secret setup timed out and was skipped.)Úgetattrr   r+   r,   ÚgetpassÚEOFErrorÚKeyboardInterruptr   r   r   r   r   r   r   r   r   r6   Ú	Exceptionr   Úcurrent_bufferÚresetr    r   r!   )
r   r'   r(   r5   ÚvalueÚstoredÚ_dhhr   r   r$   s
             r%   Úprompt_for_secretrA   B   s(  € õ �3˜ Ñ%Ô%ð 
Ý�s˜OÑ,Ô,ð 	%Ø $ˆCÔÝ�sÐ.Ñ/Ô/ð 	%Ø#$ˆCÔ ð	Ý”O vÐ$VÐ$VÐ$VÑWÔWˆEˆEøÝÕ+Ð,ð 	ð 	ð 	ØˆEˆEˆEð	øøøð ð 		ÝÐ>�Ð>Ð>½Ð>Ð>Ñ?Ô?Ð?àØ%Ø%Ø"ØØ6ðð ð õ ' x°Ñ7Ô7ˆÝ"Ñ$Ô$ˆÝÐP•DÐPÐP°ÐPÐPÀÐPÍ$ÐPÐPÑQÔQÐQð
Øð
àØ_ð
ð 
ð 
ð 	
ð €GÝ”[‘]”]€Nð ØØ�N Ø(ð	ð €CÔõ !œ?Ñ,Ô,¨wÑ6€CÔåˆsÐ0Ñ1Ô1ð 	ð	Ø×*Ò*Ñ,Ô,Ð,Ð,øÝð 	ð 	ð 	ØˆDð	øøøå	��fÑ	Ô	ð  #¤(ð ð	ØŒHÔ#×)Ò)Ñ+Ô+Ð+Ð+øÝð 	ð 	ð 	ØˆDð	øøøõ ˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐð &ð	&Ø"×&Ò&¨qÐ&Ñ1Ô1ˆEØ $ˆCÔØ#$ˆCÔ Ý�s˜FÑ#Ô#ð &¨¬ð &Ø”×#Ò#Ñ%Ô%Ð%àð 	ÝÐB�DÐBÐB½DÐBÐBÑCÔCÐCà#Ø)Ø!)Ø!&Ø#Ø:ðð ð õ +¨8°UÑ;Ô;ˆFÝ&Ñ(Ô(ˆDÝÐT�ÐTÐT°TÐTÐTÀHÐTÍdÐTÐTÑUÔUÐUðØðà Øcðð ð ð øõ
 Œ{ð 	&ð 	&ð 	&ØÔ,­u¬Ñ/@Ô/@Ñ@ˆIØ˜AŠ~ˆ~Ø�Ý�s˜FÑ#Ô#ð &¨¬ð &Ø”×#Ò#Ñ%Ô%Ð%øøð	&øøøñ7 &ðD €CÔØ€CÔÝˆsÐ0Ñ1Ô1ð 	ð	Ø×*Ò*Ñ,Ô,Ð,Ð,øÝð 	ð 	ð 	ØˆDð	øøøå	��fÑ	Ô	ð  #¤(ð ð	ØŒHÔ#×)Ò)Ñ+Ô+Ð+Ð+øÝð 	ð 	ð 	ØˆDð	øøøåˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐÝ
ÐF•ÐFÐFÅÐFÐFÑGÔGÐGàØØØØØ<ðð ð sz   ÁA ÁA/Á.A/Ä6E Å
EÅEÅ3F Æ
FÆFÇA=J ÉA
J Ê0LË0LÌLÌ&L; Ì;
MÍMÍ#N Î
NÎNÚcommandÚdescriptionc                 óŽ  — t          | dd¦  «        }|€$ddl}|                     ¦   «         | _        | j        }|5  ddlm} |                     di ¦  «                             dd¦  «        }t          j        ¦   «         }g d¢}t          |¦  «        d	k    r| 
                    d
¦  «         |||d|dœ| _        t          j        ¦   «         |z   | _        t          | d¦  «        r | j        r| j                             ¦   «          	 	 |                     d¬¦  «        }	d| _        d| _        t          | d¦  «        r | j        r| j                             ¦   «          |	cddd¦  «         S # t          j        $ rV | j        t          j        ¦   «         z
  }
|
dk    rY n7t          | d¦  «        r | j        r| j                             ¦   «          Y nw xY wŒÌd| _        d| _        t          | d¦  «        r | j        r| j                             ¦   «          t'          dt(          › dt*          › �¦  «         	 ddd¦  «         dS # 1 swxY w Y   dS )a™  Prompt for dangerous command approval through the TUI.

    Shows a selection UI with choices: once / session / always / deny.
    When the command is longer than 70 characters, a "view" option is
    included so the user can reveal the full text before deciding.

    Uses cli._approval_lock to serialize concurrent requests (e.g. from
    parallel delegation subtasks) so each prompt gets its own turn.
    Ú_approval_lockNr   r	   Ú	approvalsr   é<   )ÚonceÚsessionÚalwaysÚdenyéF   Úview)rB   rC   r   r   r   r   Tr   r   r   u!     â�± Timeout â€” denying commandrK   )r7   Ú	threadingÚLockrE   r   r
   r   r   r   ÚlenÚappendÚ_approval_stater   r   Ú_approval_deadliner   r   r    r!   r   r   r   )r   rB   rC   ÚlockrN   r
   r   r   r   r#   r$   s              r%   Úapproval_callbackrU   º   så  € õ �3Ð(¨$Ñ/Ô/€DØ€|ØÐÐÐØ&Ÿ^š^Ñ-Ô-ˆÔØÔ!ˆà	ð (ð (Ø"Ð"Ð"Ð"Ð"Ð"Ø—.’. ¨bÑ1Ô1×5Ò5°iÀÑDÔDˆÝœ™œˆØ7Ð7Ð7ˆÝˆw‰<Œ<˜"ÒÐØ�NŠN˜6Ñ"Ô"Ð"ð Ø&ØØØ,ð
ð 
ˆÔõ "'¤Ñ!2Ô!2°WÑ!<ˆÔå�3˜ÑÔð 	" C¤Hð 	"ØŒH×ÒÑ!Ô!Ð!ð	*ð*Ø'×+Ò+°AÐ+Ñ6Ô6�Ø&*�Ô#Ø)*�Ô&Ý˜3 Ñ'Ô'ð *¨C¬Hð *Ø”H×'Ò'Ñ)Ô)Ð)Øð7(ð (ð (ð (ñ (ô (ð (ð (øõ8 ”;ð *ð *ð *ØÔ2µU´_Ñ5FÔ5FÑF�	Ø ’>�>Ø�EÝ˜3 Ñ'Ô'ð *¨C¬Hð *Ø”H×'Ò'Ñ)Ô)Ð)øøð*øøøð	*ð #ˆÔØ!"ˆÔÝ�3˜ÑÔð 	" C¤Hð 	"ØŒH×ÒÑ!Ô!Ð!ÝÐA•DÐAÐA½4ÐAÐAÑBÔBÐBØðQ(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s>   ºC	H:ÄAE&Å&0GÆH:Æ0GÇH:Ç
GÇA"H:È:H>ÉH>)N)Ú__doc__r   Útimer   r8   Úhermes_cli.bannerr   r   r   Úhermes_cli.configr   Úhermes_constantsr   r&   ÚstrÚdictrA   rU   © ó    r%   ú<module>r_      së   ððð ð €€€Ø Ð Ð Ð Ø €€€à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð-ð -ð -ð`uð u Sð u°#ð uÈð uð uð uð uðp8 Cð 8°cð 8¸cð 8ð 8ð 8ð 8ð 8ð 8r^   