§
    øžyj5#  ã                   ó„   — d 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dlmZ d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)Úmasked_secret_prompt)Údisplay_hermes_homeFc                 óT  — ddl m} ddlm}  ||¦  «        }t	          j        ¦   «         }| }|o| }	||s|ng d|	|	rt          ¦   «         nd|dœ| _        |dk    rdnt          j	        ¦   «         |z   | _
        || _        t          | d¦  «        r | j        r| j                             ¦   «          	 	 |                     d¬	¦  «        }
d| _
        |
S # t          j        $ r] | j
        �#| 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 )a=  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.

    When ``multi_select`` is True, shows checkboxes and the user can
    select multiple options with Space, confirming with Enter.
    r   ©Ú
CLI_CONFIG)Úresolve_clarify_timeoutN)ÚquestionÚchoicesÚselectedÚmulti_selectÚselected_indicesÚresponse_queueÚ_appTé   ©ÚtimeoutFÚ
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   Útools.clarify_gatewayr   ÚqueueÚQueueÚsetÚ_clarify_stateÚ_timeÚ	monotonicÚ_clarify_deadlineÚ_clarify_freetextÚhasattrr   Ú
invalidateÚgetÚEmptyr   r   r   )r   r   r   r   r   r   r   r   Úis_open_endedÚeffective_multiÚresultÚ	remainings               ú:/home/ragecks/.hermes/hermes-agent/hermes_cli/callbacks.pyÚclarify_callbackr+      s  € ð ÐÐÐÐÐØ=Ð=Ð=Ð=Ð=Ð=ð &Ð% jÑ1Ô1€GÝ”[‘]”]€NØ�K€MØ"Ð8¨=Ð'8€Oð Ø"/Ð7�7�7°RØØ'Ø%4Ð>�C™EœE˜E¸$Ø(ðð €CÔð %,¨q¢L L˜D˜Dµe´oÑ6GÔ6GÈ'Ñ6Q€CÔØ)€CÔåˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐð&ð	&Ø#×'Ò'°Ð'Ñ2Ô2ˆFØ$(ˆCÔ!ØˆMøÝŒ{ð 	&ð 	&ð 	&àÔ$Ð0ØÔ1µE´OÑ4EÔ4EÑE�	Ø ’>�>Ø�EÝ�s˜FÑ#Ô#ð &¨¬ð &Ø”×#Ò#Ñ%Ô%Ð%øøð	&øøøð&ð €CÔØ!€CÔØ €CÔÝˆs�FÑÔð  ¤ð ØŒ×ÒÑÔÐÝ
ÐV•ÐVÐV¨wÐVÐVÕPTÐVÐVÑWÔWÐWð	Bðð s   Â1C Ã7D<Ä	0D<Ä;D<Úvar_nameÚpromptÚreturnc           	      óÊ  — t          | dd¦  «        sÐt          | d¦  «        sd| _        t          | d¦  «        sd| _        	 t	          |› 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.)r8   r9   éx   )r,   r-   Úmetadatar   Ú_clear_secret_input_bufferr   r   u*     â�± Timeout â€” secret capture cancelledr   z'Secret setup timed out and was skipped.)Úgetattrr"   r0   r1   r   ÚEOFErrorÚKeyboardInterruptr   r   r   r   r   r   r   r   r   r<   Ú	Exceptionr   Úcurrent_bufferÚresetr#   r$   r%   )
r   r,   r-   r;   ÚvalueÚstoredÚ_dhhr   r   r)   s
             r*   Úprompt_for_secretrF   M   s&  € õ �3˜ Ñ%Ô%ð 
Ý�s˜OÑ,Ô,ð 	%Ø $ˆCÔÝ�sÐ.Ñ/Ô/ð 	%Ø#$ˆCÔ ð	Ý(¨FÐ)[Ð)[Ð)[Ñ\Ô\ˆ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*Ä1E Å
EÅEÅ.F Æ
FÆFÇA=J ÉA
J Ê0K=Ë
0K=Ë<K=Ì!L6 Ì6
MÍMÍM= Í=
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   i,  )ÚonceÚsessionÚalwaysÚdenyéF   Úview)rG   rH   r   r   r   r   Tr   r   r   u!     â�± Timeout â€” denying command)r=   Ú	threadingÚLockrJ   r   r   r$   r   r   ÚlenÚappendÚ_approval_stater   r   Ú_approval_deadliner"   r   r#   r%   r   r   r   )r   rG   rH   ÚlockrR   r   r   r   r   r(   r)   s              r*   Úapproval_callbackrY   Å   så  € õ �3Ð(¨$Ñ/Ô/€DØ€|ØÐÐÐØ&Ÿ^š^Ñ-Ô-ˆÔØÔ!ˆà	ð (ð (Ø"Ð"Ð"Ð"Ð"Ð"Ø—.’. ¨bÑ1Ô1×5Ò5°iÀÑEÔEˆÝœ™œˆØ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>)F)N)Ú__doc__r   Útimer   Úhermes_cli.bannerr   r   r   Úhermes_cli.configr   Úhermes_cli.secret_promptr   Úhermes_constantsr   r+   ÚstrÚdictrF   rY   © ó    r*   ú<module>rd      sù   ððð ð €€€Ø Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð8ð 8ð 8ð 8ðvuð u Sð u°#ð uÈð uð uð uð uðp8 Cð 8°cð 8¸cð 8ð 8ð 8ð 8ð 8ð 8rc   